import { ComponentInterface, EventEmitter } from '../../stencil-public-runtime';
import { FileInputChangeEventDetail, FileWithUrl } from './file-upload-interface';
import type { ControlValidity, ControlValidityEventDetail } from '../../types/shared';
interface FileValidation {
    file: File;
    valid: boolean;
    validationMessage?: string;
    location?: string;
}
/**
 * Enables the selection of files for upload.
 *
 * @version 1.0.0
 * @status stable
 *
 * @slot label - A label for the file input. If not provided, the `label` prop will be used.
 * @slot helper - A helper text to display below the input.
 * @slot - The default slot can be used to add additional content, such as instructions or a message.
 */
export declare class FileUpload implements ComponentInterface {
    private inputEl;
    private publicInputEl;
    private mo;
    private fileInputId;
    private canChangeFileList;
    private removeFiles;
    hasHelperSlot: boolean;
    hasLabelSlot: boolean;
    errorMessage: string;
    isDragging: boolean;
    fileList: FileValidation[];
    fileListChange(): void;
    hasFocus: boolean;
    host: HTMLNanoFileUploadElement;
    /** Name of the form control. Submitted with the form as part of a name/value pair. */
    name: string;
    /** The accept attribute value is a string that defines the file types the file input should accept.
     * E.g. for a MS Word file: `.doc, .docx,application/msword, application/vnd.openxmlformats-officedocument.wordprocessingml.document` */
    accept?: string;
    /** Specifies which camera to use for capture of image or video data. `user` for the user-facing camera and/or microphone.
     * `environment` specifies the the outward-facing camera and/or microphone. If the requested facing mode isn't available,
     * the user agent may fall back to its preferred default mode. */
    capture?: 'user' | 'environment';
    /** The maximum file size allowed per file (Megabytes) */
    maxFileSize: number;
    /** The maximum number of files that can be selected. Defaults to 1 */
    maxFiles: number;
    private _label;
    /** String to place within a label element. */
    get label(): string;
    set label(value: string);
    /** Placeholder only used within single file uploads. */
    placeholder: string;
    /** Visually hide the label - but make it accessible. */
    hideLabel?: boolean;
    /** If `true`, the user must select a file to upload before submitting a form. */
    required: boolean;
    /** If `true`, the user cannot interact with the select. */
    disabled: boolean;
    /** If `true`, a clear icon will appear in the input when there is a value.
     * Clicking it clears the input. Only used within single file uploads. */
    clearable: boolean;
    /** Whether to show validation errors underneath input */
    showInlineError: boolean;
    /** When should the field perform validation */
    validateOn?: 'dirty' | 'submit' | 'submitThenDirty';
    /** The form element to associate with this input (its form owner). Must be the id of a form. */
    form?: string | null;
    protected shouldValidate(): void;
    _invalid: any;
    /** This will be true when the control is in an invalid state.
     * Validity is determined by the `required` prop. Or if custom validity message is set. @readonly */
    get invalid(): any;
    /**
     * Current validation message - if any. @readonly
     */
    get validityMessage(): string;
    /** A File array that lists every selected file.
     * Has an added `objectURL` property returning a `DOMString`
     * containing an object URL that can be used to reference the contents of the specified source
     * This list has no more than one member unless the multiple attribute is specified */
    get files(): FileWithUrl[];
    set files(fs: FileWithUrl[]);
    /** A file input's value attribute contains a DOMString that represents the path to the selected file(s).
     * If the user selected multiple files, the value represents the first file in the list of files they selected.
     * You can reset the file-upload control by setting the value to an empty string e.g. `var input.value = ''` */
    get value(): string;
    set value(val: string);
    /** Emitted when the value has changed. */
    nanoChange: EventEmitter<FileInputChangeEventDetail>;
    /** Emited when the checkbox is focused */
    nanoFocus: EventEmitter;
    /** Emited when the checkbox is blurred */
    nanoBlur: EventEmitter;
    /** Called when validation is performed (which depends on `validateOn`).
     * @returns event.detail: `{ isValid: boolean, errorMessage: string, originalEvent: Event }`. */
    nanoValidate: EventEmitter<ControlValidityEventDetail>;
    /** Get the current state of the control.
     * @param validateFirst - perform validation first before reporting
     * @returns `{ isValid: boolean, errorMessage: string }` */
    reportValidity(validateFirst: boolean): Promise<ControlValidity>;
    /** Sets focus on the specified `nano-input`. Use this method instead of the global
     * `input.focus()`. */
    setFocus(): Promise<void>;
    /** @returns the native `<input>` element used under the hood */
    getInputElement(): Promise<HTMLInputElement | HTMLTextAreaElement>;
    /** Invalidate the field and show a custom error message. To clear the error you will need to re-call this method with an empty string.
     * @param message */
    showError(message: string): Promise<void>;
    globalClickHandler(e: Event): void;
    globalKeydownHandler(e: KeyboardEvent): void;
    onReset(e: any): void;
    private onClearClick;
    private onBlur;
    private onFocus;
    private arrToFileList;
    private checkFileSize;
    private checkFileType;
    private validate;
    private showInlineValidation;
    private slotChangeObserver;
    private processSlottedContent;
    private addNewFiles;
    private onInvalid;
    private onFileChoose;
    private onFileRemoveFileClick;
    private onFileRemoveAnim;
    private onInputChange;
    private onDragStop;
    private onDragStart;
    private onDrop;
    disconnectedCallback(): void;
    componentDidLoad(): void;
    componentWillLoad(): void;
    private FileUploadInput;
    private button;
    private dropArea;
    render(): any;
}
export {};
