import { EventEmitter } from '../../stencil-public-runtime';
import { HTMLStencilElement } from '../../stencil-public-runtime';
import { BalAriaForm, BalAriaFormLinking } from '../../utils/form';
import { FormInput } from '../../utils/form-input';
import { LogInstance } from '../../utils/log';
export declare class FileUpload implements FormInput<File[]>, BalAriaFormLinking {
    el: HTMLStencilElement;
    private fileUploadId;
    nativeInput: HTMLInputElement | undefined;
    private labelEl;
    files: File[];
    focused: boolean;
    ariaForm: BalAriaForm;
    log: LogInstance;
    createLogger(log: LogInstance): void;
    /**
     * PUBLIC PROPERTY API
     * ------------------------------------------------------
     */
    /**
     * The name of the control, which is submitted with the form data.
     */
    name: string;
    /**
     * Input value.
     */
    value: File[];
    private initialValue;
    onValueChange(): void;
    /**
     * Label of the drop area.
     */
    label: string;
    /**
     * If `true` multiple file upload is possible.
     */
    multiple: boolean;
    /**
     * If `true`, the element is not mutable, focusable, or even submitted with the form. The user can neither edit nor focus on the control, nor its form control descendants.
     */
    disabled: boolean;
    /**
     * If `true` the element can not mutated, meaning the user can not edit the control.
     */
    readonly: boolean;
    /**
     * If `true` the file upload is disabled and shows a spinner
     */
    loading: boolean;
    /**
     * If `true`, the user must fill in a value before submitting a form.
     */
    required: boolean;
    /**
     * Accepted MIME-Types like `image/png,image/jpeg`.
     */
    accept?: string;
    /**
     * Allowed number of files in the bundle.
     */
    maxFiles?: number;
    /**
     * Allowed max file size in bytes.
     */
    maxFileSize?: number;
    /**
     * Allowed max bundle size in bytes.
     */
    maxBundleSize?: number;
    /**
     * If `true` below the drop-down area it generates a file list.
     */
    hasFileList: boolean;
    /**
     * If `true` the component gets a invalid style.
     */
    invalid: boolean;
    /**
     * Overrides the default subtitle file size
     */
    subTitle?: (file: File) => string;
    /**
     * If `true`, in Angular reactive forms the control will not be set invalid
     */
    autoInvalidOff: boolean;
    /**
     * Triggers when a file is added or removed.
     */
    balChange: EventEmitter<BalEvents.BalFileUploadChangeDetail>;
    /**
     * Triggers when a file is added.
     */
    balFilesAdded: EventEmitter<BalEvents.BalFileUploadFilesAddedDetail>;
    /**
     * Triggers when a file is removed.
     */
    balFilesRemoved: EventEmitter<BalEvents.BalFileUploadFilesRemovedDetail>;
    /**
     * Triggers when a file is rejected due to not allowed MIME-Type and so on.
     */
    balRejectedFile: EventEmitter<BalEvents.BalFileUploadRejectedFileDetail>;
    /**
     * Emitted when the input has clicked.
     */
    balInputClick: EventEmitter<BalEvents.BalFileUploadInputClickDetail>;
    /**
     * Emitted when the input loses focus.
     */
    balBlur: EventEmitter<BalEvents.BalFileUploadBlurDetail>;
    /**
     * Emitted when the input has focus.
     */
    balFocus: EventEmitter<BalEvents.BalFileUploadFocusDetail>;
    /**
     * LIFECYCLE
     * ------------------------------------------------------
     */
    componentWillLoad(): void;
    connectedCallback(): void;
    componentDidLoad(): void;
    disconnectedCallback(): void;
    /**
     * LISTENERS
     * ------------------------------------------------------
     */
    private resetHandlerTimer?;
    resetHandler(ev: UIEvent): void;
    /**
     * PUBLIC METHODS
     * ------------------------------------------------------
     */
    /**
     * Sets the file list to an empty list
     */
    clear(): Promise<void>;
    /**
     * Sets focus on the native `input`. Use this method instead of the global
     * `input.focus()`.
     */
    setFocus(): Promise<void>;
    /**
     * Sets blur on the native `input`. Use this method instead of the global
     * `input.blur()`.
     * @internal
     */
    setBlur(): Promise<void>;
    /**
     * Returns the native `<input>` element used under the hood.
     */
    getInputElement(): Promise<HTMLInputElement | undefined>;
    /**
     * @internal
     */
    setAriaForm(ariaForm: BalAriaForm): Promise<void>;
    /**
     * PRIVATE METHODS
     * ------------------------------------------------------
     */
    private addEventListenerDragAndDrop;
    private removeEventListenerDragAndDrop;
    private handleFiles;
    private updateFileInput;
    /**
     * HANDLERS
     * ------------------------------------------------------
     */
    private onDragenter;
    private onDragover;
    private onDrop;
    private onInputChange;
    private onRemoveFile;
    private onHostClick;
    private onInputFocus;
    private onInputBlur;
    private onInputClick;
    /**
     * RENDER
     * ------------------------------------------------------
     */
    render(): any;
}
