import { FileUploadPassThrough, FileBeforeUploadEvent, FileSendEvent, FileUploadEvent, FileUploadErrorEvent, FileRemoveEvent, FileSelectEvent, FileProgressEvent, FileUploadHandlerEvent, RemoveUploadedFileEvent, FileUploadHeaderTemplateContext, FileUploadContentTemplateContext, FileUploadFileLabelTemplateContext, FileUploadMessage, FileContentRemoveEvent, FileUploadFileTemplateContext } from 'primeng/types/fileupload';
export * from 'primeng/types/fileupload';
import * as _angular_core from '@angular/core';
import { TemplateRef, ElementRef } from '@angular/core';
import { HttpHeaders, HttpClient } from '@angular/common/http';
import { DomSanitizer } from '@angular/platform-browser';
import * as i2 from 'primeng/api';
import { BlockableUI } from 'primeng/api';
import { BaseComponent } from 'primeng/basecomponent';
import * as i1 from 'primeng/bind';
import { Bind } from 'primeng/bind';
import { ButtonDirectiveOptions } from 'primeng/types/button';
import { CSSProperties } from 'primeng/types/shared';
import { VoidListener } from 'primeng/ts-helpers';
import { Subscription } from 'rxjs';
import { BaseStyle } from 'primeng/base';

/**
 *
 * FileUpload is an advanced uploader with dragdrop support, multi file uploads, auto uploading, progress tracking and validations.
 *
 * [Live Demo](https://www.primeng.org/fileupload/)
 *
 * @module fileuploadstyle
 *
 */
declare enum FileUploadClasses {
    /**
     * Class name of the root element
     */
    root = "p-fileupload",
    /**
     * Class name of the header element
     */
    header = "p-fileupload-header",
    /**
     * Class name of the choose button element
     */
    pcChooseButton = "p-fileupload-choose-button",
    /**
     * Class name of the upload button element
     */
    pcUploadButton = "p-fileupload-upload-button",
    /**
     * Class name of the cancel button element
     */
    pcCancelButton = "p-fileupload-cancel-button",
    /**
     * Class name of the content element
     */
    content = "p-fileupload-content",
    /**
     * Class name of the file list element
     */
    fileList = "p-fileupload-file-list",
    /**
     * Class name of the file element
     */
    file = "p-fileupload-file",
    /**
     * Class name of the file thumbnail element
     */
    fileThumbnail = "p-fileupload-file-thumbnail",
    /**
     * Class name of the file info element
     */
    fileInfo = "p-fileupload-file-info",
    /**
     * Class name of the file name element
     */
    fileName = "p-fileupload-file-name",
    /**
     * Class name of the file size element
     */
    fileSize = "p-fileupload-file-size",
    /**
     * Class name of the file badge element
     */
    pcFileBadge = "p-fileupload-file-badge",
    /**
     * Class name of the file actions element
     */
    fileActions = "p-fileupload-file-actions",
    /**
     * Class name of the file remove button element
     */
    pcFileRemoveButton = "p-fileupload-file-remove-button",
    /**
     * Class name of the content in basic mode
     */
    basicContent = "p-fileupload-basic-content"
}
declare class FileUploadStyle extends BaseStyle {
    name: string;
    style: string;
    classes: {
        root: ({ instance }: {
            instance: any;
        }) => string;
        header: string;
        pcChooseButton: string;
        pcUploadButton: string;
        pcCancelButton: string;
        content: string;
        fileList: string;
        file: string;
        fileThumbnail: string;
        fileInfo: string;
        fileName: string;
        fileSize: string;
        pcFileBadge: string;
        fileActions: string;
        pcFileRemoveButton: string;
        basicContent: string;
    };
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<FileUploadStyle, never>;
    static ɵprov: _angular_core.ɵɵInjectableDeclaration<FileUploadStyle>;
}
interface FileUploadStyle extends BaseStyle {
}

/**
 * FileUpload is an advanced uploader with dragdrop support, multi file uploads, auto uploading, progress tracking and validations.
 * @group Components
 */
declare class FileUpload extends BaseComponent<FileUploadPassThrough> implements BlockableUI {
    componentName: string;
    bindDirectiveInstance: Bind;
    onAfterViewChecked(): void;
    /**
     * Name of the request parameter to identify the files at backend.
     * @group Props
     */
    name: _angular_core.InputSignal<string | undefined>;
    /**
     * Remote url to upload the files.
     * @group Props
     */
    url: _angular_core.InputSignal<string | undefined>;
    /**
     * HTTP method to send the files to the url such as "post" and "put".
     * @group Props
     */
    method: _angular_core.InputSignal<"post" | "put">;
    /**
     * Used to select multiple files at once from file dialog.
     * @group Props
     */
    multiple: _angular_core.InputSignalWithTransform<boolean, unknown>;
    /**
     * Comma-separated list of pattern to restrict the allowed file types. Can be any combination of either the MIME types (such as "image/*") or the file extensions (such as ".jpg").
     * @group Props
     */
    accept: _angular_core.InputSignal<string | undefined>;
    /**
     * Disables the upload functionality.
     * @group Props
     */
    disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
    /**
     * When enabled, upload begins automatically after selection is completed.
     * @group Props
     */
    auto: _angular_core.InputSignalWithTransform<boolean, unknown>;
    /**
     * Cross-site Access-Control requests should be made using credentials such as cookies, authorization headers or TLS client certificates.
     * @group Props
     */
    withCredentials: _angular_core.InputSignalWithTransform<boolean, unknown>;
    /**
     * Maximum file size allowed in bytes.
     * @group Props
     */
    maxFileSize: _angular_core.InputSignalWithTransform<number | undefined, unknown>;
    /**
     * Summary message of the invalid file size.
     * @group Props
     */
    invalidFileSizeMessageSummary: _angular_core.InputSignal<string>;
    /**
     * Detail message of the invalid file size.
     * @group Props
     */
    invalidFileSizeMessageDetail: _angular_core.InputSignal<string>;
    /**
     * Summary message of the invalid file type.
     * @group Props
     */
    invalidFileTypeMessageSummary: _angular_core.InputSignal<string>;
    /**
     * Detail message of the invalid file type.
     * @group Props
     */
    invalidFileTypeMessageDetail: _angular_core.InputSignal<string>;
    /**
     * Detail message of the invalid file type.
     * @group Props
     */
    invalidFileLimitMessageDetail: _angular_core.InputSignal<string>;
    /**
     * Summary message of the invalid file type.
     * @group Props
     */
    invalidFileLimitMessageSummary: _angular_core.InputSignal<string>;
    /**
     * Inline style of the element.
     * @group Props
     */
    style: _angular_core.InputSignal<CSSProperties>;
    /**
     * Class of the element.
     * @group Props
     */
    styleClass: _angular_core.InputSignal<string | undefined>;
    /**
     * Width of the image thumbnail in pixels.
     * @group Props
     */
    previewWidth: _angular_core.InputSignalWithTransform<number, unknown>;
    /**
     * Label of the choose button. Defaults to PrimeNG Locale configuration.
     * @group Props
     */
    chooseLabel: _angular_core.InputSignal<string | undefined>;
    /**
     * Label of the upload button. Defaults to PrimeNG Locale configuration.
     * @group Props
     */
    uploadLabel: _angular_core.InputSignal<string | undefined>;
    /**
     * Label of the cancel button. Defaults to PrimeNG Locale configuration.
     * @group Props
     */
    cancelLabel: _angular_core.InputSignal<string | undefined>;
    /**
     * Icon of the choose button.
     * @group Props
     */
    chooseIcon: _angular_core.InputSignal<string | undefined>;
    /**
     * Icon of the upload button.
     * @group Props
     */
    uploadIcon: _angular_core.InputSignal<string | undefined>;
    /**
     * Icon of the cancel button.
     * @group Props
     */
    cancelIcon: _angular_core.InputSignal<string | undefined>;
    /**
     * Whether to show the upload button.
     * @group Props
     */
    showUploadButton: _angular_core.InputSignalWithTransform<boolean, unknown>;
    /**
     * Whether to show the cancel button.
     * @group Props
     */
    showCancelButton: _angular_core.InputSignalWithTransform<boolean, unknown>;
    /**
     * Defines the UI of the component.
     * @group Props
     */
    mode: _angular_core.InputSignal<"advanced" | "basic">;
    /**
     * HttpHeaders class represents the header configuration options for an HTTP request.
     * @group Props
     */
    headers: _angular_core.InputSignal<HttpHeaders | undefined>;
    /**
     * Whether to use the default upload or a manual implementation defined in uploadHandler callback. Defaults to PrimeNG Locale configuration.
     * @group Props
     */
    customUpload: _angular_core.InputSignalWithTransform<boolean, unknown>;
    /**
     * Maximum number of files that can be uploaded.
     * @group Props
     */
    fileLimit: _angular_core.InputSignalWithTransform<number | undefined, unknown>;
    /**
     * Style class of the upload button.
     * @group Props
     */
    uploadStyleClass: _angular_core.InputSignal<string | undefined>;
    /**
     * Style class of the cancel button.
     * @group Props
     */
    cancelStyleClass: _angular_core.InputSignal<string | undefined>;
    /**
     * Style class of the remove button.
     * @group Props
     */
    removeStyleClass: _angular_core.InputSignal<string | undefined>;
    /**
     * Style class of the choose button.
     * @group Props
     */
    chooseStyleClass: _angular_core.InputSignal<string | undefined>;
    /**
     * Configuration object forwarded to the choose button.
     * @group Props
     */
    chooseButtonProps: _angular_core.InputSignal<ButtonDirectiveOptions | undefined>;
    /**
     * Configuration object forwarded to the upload button.
     * @group Props
     */
    uploadButtonProps: _angular_core.InputSignal<ButtonDirectiveOptions>;
    /**
     * Configuration object forwarded to the cancel button.
     * @group Props
     */
    cancelButtonProps: _angular_core.InputSignal<ButtonDirectiveOptions>;
    /**
     * Callback to invoke before file upload is initialized.
     * @param {FileBeforeUploadEvent} event - Custom upload event.
     * @group Emits
     */
    onBeforeUpload: _angular_core.OutputEmitterRef<FileBeforeUploadEvent>;
    /**
     * An event indicating that the request was sent to the server. Useful when a request may be retried multiple times, to distinguish between retries on the final event stream.
     * @param {FileSendEvent} event - Custom send event.
     * @group Emits
     */
    onSend: _angular_core.OutputEmitterRef<FileSendEvent>;
    /**
     * Callback to invoke when file upload is complete.
     * @param {FileUploadEvent} event - Custom upload event.
     * @group Emits
     */
    onUpload: _angular_core.OutputEmitterRef<FileUploadEvent>;
    /**
     * Callback to invoke if file upload fails.
     * @param {FileUploadErrorEvent} event - Custom error event.
     * @group Emits
     */
    onError: _angular_core.OutputEmitterRef<FileUploadErrorEvent>;
    /**
     * Callback to invoke when files in queue are removed without uploading using clear all button.
     * @param {Event} event - Browser event.
     * @group Emits
     */
    onClear: _angular_core.OutputEmitterRef<void>;
    /**
     * Callback to invoke when a file is removed without uploading using clear button of a file.
     * @param {FileRemoveEvent} event - Remove event.
     * @group Emits
     */
    onRemove: _angular_core.OutputEmitterRef<FileRemoveEvent>;
    /**
     * Callback to invoke when files are selected.
     * @param {FileSelectEvent} event - Select event.
     * @group Emits
     */
    onSelect: _angular_core.OutputEmitterRef<FileSelectEvent>;
    /**
     * Callback to invoke when files are being uploaded.
     * @param {FileProgressEvent} event - Progress event.
     * @group Emits
     */
    onProgress: _angular_core.OutputEmitterRef<FileProgressEvent>;
    /**
     * Callback to invoke in custom upload mode to upload the files manually.
     * @param {FileUploadHandlerEvent} event - Upload handler event.
     * @group Emits
     */
    uploadHandler: _angular_core.OutputEmitterRef<FileUploadHandlerEvent>;
    /**
     * This event is triggered if an error occurs while loading an image file.
     * @param {Event} event - Browser event.
     * @group Emits
     */
    onImageError: _angular_core.OutputEmitterRef<Event>;
    /**
     * This event is triggered if an error occurs while loading an image file.
     * @param {RemoveUploadedFileEvent} event - Remove event.
     * @group Emits
     */
    onRemoveUploadedFile: _angular_core.OutputEmitterRef<RemoveUploadedFileEvent>;
    /**
     * Custom file template.
     * @group Templates
     */
    fileTemplate: _angular_core.Signal<TemplateRef<void> | undefined>;
    /**
     * Custom header template.
     * @param {FileUploadHeaderTemplateContext} context - header template context.
     * @group Templates
     */
    headerTemplate: _angular_core.Signal<TemplateRef<FileUploadHeaderTemplateContext> | undefined>;
    /**
     * Custom content template.
     * @param {FileUploadContentTemplateContext} context - content template context.
     * @group Templates
     */
    contentTemplate: _angular_core.Signal<TemplateRef<FileUploadContentTemplateContext> | undefined>;
    /**
     * Custom toolbar template.
     * @group Templates
     */
    toolbarTemplate: _angular_core.Signal<TemplateRef<void> | undefined>;
    /**
     * Custom choose icon template.
     * @group Templates
     */
    chooseIconTemplate: _angular_core.Signal<TemplateRef<void> | undefined>;
    /**
     * Custom file label template.
     * @param {FileUploadFileLabelTemplateContext} context - file label template context.
     * @group Templates
     */
    fileLabelTemplate: _angular_core.Signal<TemplateRef<FileUploadFileLabelTemplateContext> | undefined>;
    /**
     * Custom upload icon template.
     * @group Templates
     */
    uploadIconTemplate: _angular_core.Signal<TemplateRef<void> | undefined>;
    /**
     * Custom cancel icon template.
     * @group Templates
     */
    cancelIconTemplate: _angular_core.Signal<TemplateRef<void> | undefined>;
    /**
     * Custom empty state template.
     * @group Templates
     */
    emptyTemplate: _angular_core.Signal<TemplateRef<void> | undefined>;
    isAdvancedMode: _angular_core.Signal<boolean>;
    isBasicMode: _angular_core.Signal<boolean>;
    showUploadBtn: _angular_core.Signal<boolean>;
    showCancelBtn: _angular_core.Signal<boolean>;
    chooseButtonDisabled: _angular_core.Signal<boolean | 0 | undefined>;
    uploadButtonDisabled: _angular_core.Signal<boolean | 0 | undefined>;
    cancelButtonDisabled: _angular_core.Signal<boolean>;
    showEmpty: _angular_core.Signal<boolean>;
    get headerTemplateContext(): FileUploadHeaderTemplateContext;
    get contentTemplateContext(): FileUploadContentTemplateContext;
    get fileLabelTemplateContext(): FileUploadFileLabelTemplateContext;
    advancedFileInput: _angular_core.Signal<ElementRef<any> | undefined>;
    basicFileInput: _angular_core.Signal<ElementRef<any> | undefined>;
    contentEl: _angular_core.Signal<ElementRef<any> | undefined>;
    /**
     * Files input.
     * @group Props
     */
    filesInput: _angular_core.InputSignal<File[]>;
    get files(): File[];
    set files(value: File[]);
    get basicButtonLabel(): string;
    _files: _angular_core.WritableSignal<File[]>;
    progress: _angular_core.WritableSignal<number>;
    dragHighlight: _angular_core.WritableSignal<boolean>;
    msgs: _angular_core.WritableSignal<FileUploadMessage[]>;
    uploadedFileCount: number;
    focus: _angular_core.WritableSignal<boolean>;
    uploading: _angular_core.WritableSignal<boolean>;
    duplicateIEEvent: boolean | undefined;
    translationSubscription: Subscription | undefined;
    dragOverListener: VoidListener;
    uploadedFiles: _angular_core.WritableSignal<File[]>;
    sanitizer: DomSanitizer;
    http: HttpClient;
    _componentStyle: FileUploadStyle;
    constructor();
    onInit(): void;
    onAfterViewInit(): void;
    basicFileChosenLabel(): any;
    completedLabel(): any;
    choose(): void;
    onFileSelect(event: Event): void;
    isFileSelected(file: File): boolean;
    isIE11(): boolean | undefined;
    validate(file: File): boolean;
    private isFileTypeValid;
    getTypeClass(fileType: string): string;
    isWildcard(fileType: string): boolean;
    getFileExtension(file: File): string;
    isImage(file: File): boolean;
    onImageLoad(img: HTMLImageElement): void;
    /**
     * Uploads the selected files.
     * @group Method
     */
    uploader(): void;
    onRemoveClick(e: FileContentRemoveEvent): void;
    onRemoveUploadedFileClick(e: Pick<FileContentRemoveEvent, 'index'>): void;
    /**
     * Clears the files list.
     * @group Method
     */
    clear(): void;
    /**
     * Removes a single file.
     * @param {Event} event - Browser event.
     * @param {Number} index - Index of the file.
     * @group Method
     */
    remove(event: Event, index: number): void;
    /**
     * Removes uploaded file.
     * @param {Number} index - Index of the file to be removed.
     * @group Method
     */
    removeUploadedFile(index: number): void;
    isFileLimitExceeded(): boolean | 0 | undefined;
    isChooseDisabled(): boolean | 0 | undefined;
    checkFileLimit(files: FileList | File[]): void;
    clearInputElement(): void;
    clearIEInput(): void;
    hasFiles(): boolean;
    hasUploadedFiles(): boolean;
    getFileTemplateContext(file: File): FileUploadFileTemplateContext;
    onDragEnter(e: DragEvent): void;
    onDragOver(e: DragEvent): void;
    onDragLeave(_event: DragEvent): void;
    onDrop(event: DragEvent): void;
    onFocus(): void;
    onBlur(): void;
    formatSize(bytes: number): string;
    upload(): void;
    onBasicUploaderClick(): void;
    onBasicKeydown(event: KeyboardEvent): void;
    imageError(event: Event): void;
    getBlockableElement(): HTMLElement;
    get chooseButtonLabel(): string;
    get uploadButtonLabel(): string;
    get cancelButtonLabel(): string;
    get browseFilesLabel(): string;
    get pendingLabel(): any;
    onDestroy(): void;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<FileUpload, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<FileUpload, "p-fileupload", never, { "name": { "alias": "name"; "required": false; "isSignal": true; }; "url": { "alias": "url"; "required": false; "isSignal": true; }; "method": { "alias": "method"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "accept": { "alias": "accept"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "auto": { "alias": "auto"; "required": false; "isSignal": true; }; "withCredentials": { "alias": "withCredentials"; "required": false; "isSignal": true; }; "maxFileSize": { "alias": "maxFileSize"; "required": false; "isSignal": true; }; "invalidFileSizeMessageSummary": { "alias": "invalidFileSizeMessageSummary"; "required": false; "isSignal": true; }; "invalidFileSizeMessageDetail": { "alias": "invalidFileSizeMessageDetail"; "required": false; "isSignal": true; }; "invalidFileTypeMessageSummary": { "alias": "invalidFileTypeMessageSummary"; "required": false; "isSignal": true; }; "invalidFileTypeMessageDetail": { "alias": "invalidFileTypeMessageDetail"; "required": false; "isSignal": true; }; "invalidFileLimitMessageDetail": { "alias": "invalidFileLimitMessageDetail"; "required": false; "isSignal": true; }; "invalidFileLimitMessageSummary": { "alias": "invalidFileLimitMessageSummary"; "required": false; "isSignal": true; }; "style": { "alias": "style"; "required": false; "isSignal": true; }; "styleClass": { "alias": "styleClass"; "required": false; "isSignal": true; }; "previewWidth": { "alias": "previewWidth"; "required": false; "isSignal": true; }; "chooseLabel": { "alias": "chooseLabel"; "required": false; "isSignal": true; }; "uploadLabel": { "alias": "uploadLabel"; "required": false; "isSignal": true; }; "cancelLabel": { "alias": "cancelLabel"; "required": false; "isSignal": true; }; "chooseIcon": { "alias": "chooseIcon"; "required": false; "isSignal": true; }; "uploadIcon": { "alias": "uploadIcon"; "required": false; "isSignal": true; }; "cancelIcon": { "alias": "cancelIcon"; "required": false; "isSignal": true; }; "showUploadButton": { "alias": "showUploadButton"; "required": false; "isSignal": true; }; "showCancelButton": { "alias": "showCancelButton"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "headers": { "alias": "headers"; "required": false; "isSignal": true; }; "customUpload": { "alias": "customUpload"; "required": false; "isSignal": true; }; "fileLimit": { "alias": "fileLimit"; "required": false; "isSignal": true; }; "uploadStyleClass": { "alias": "uploadStyleClass"; "required": false; "isSignal": true; }; "cancelStyleClass": { "alias": "cancelStyleClass"; "required": false; "isSignal": true; }; "removeStyleClass": { "alias": "removeStyleClass"; "required": false; "isSignal": true; }; "chooseStyleClass": { "alias": "chooseStyleClass"; "required": false; "isSignal": true; }; "chooseButtonProps": { "alias": "chooseButtonProps"; "required": false; "isSignal": true; }; "uploadButtonProps": { "alias": "uploadButtonProps"; "required": false; "isSignal": true; }; "cancelButtonProps": { "alias": "cancelButtonProps"; "required": false; "isSignal": true; }; "filesInput": { "alias": "files"; "required": false; "isSignal": true; }; }, { "onBeforeUpload": "onBeforeUpload"; "onSend": "onSend"; "onUpload": "onUpload"; "onError": "onError"; "onClear": "onClear"; "onRemove": "onRemove"; "onSelect": "onSelect"; "onProgress": "onProgress"; "uploadHandler": "uploadHandler"; "onImageError": "onImageError"; "onRemoveUploadedFile": "onRemoveUploadedFile"; }, ["fileTemplate", "headerTemplate", "contentTemplate", "toolbarTemplate", "chooseIconTemplate", "fileLabelTemplate", "uploadIconTemplate", "cancelIconTemplate", "emptyTemplate"], never, true, [{ directive: typeof i1.Bind; inputs: {}; outputs: {}; }]>;
}
declare class FileUploadModule {
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<FileUploadModule, never>;
    static ɵmod: _angular_core.ɵɵNgModuleDeclaration<FileUploadModule, never, [typeof FileUpload, typeof i2.SharedModule], [typeof FileUpload, typeof i2.SharedModule]>;
    static ɵinj: _angular_core.ɵɵInjectorDeclaration<FileUploadModule>;
}

export { FileUpload, FileUploadClasses, FileUploadModule, FileUploadStyle };
