import { EventEmitter } from '../../../stencil-public-runtime';
import { FormMultiselectSizesType } from './constants';
import { FormMultiselectEvent, GovFormMultiSelectItem, GovFormMultiSelectSelectedItem } from './gov-form-multi-select.types';
import { Attributes } from "../../../helpers/Dom/attribute";
export declare class GovFormMultiSelect {
    private f;
    private readonly h;
    private selectRef?;
    private autocompleteRef?;
    private attributeObserver;
    private readonly selectId;
    private readonly listId;
    constructor();
    host: HTMLGovFormSelectElement;
    /**
     * Value of multi-select
     */
    value: string | GovFormMultiSelectSelectedItem[];
    /**
     * Options of multi-select
     */
    options?: string | GovFormMultiSelectItem[];
    /**
     * Custom select identifier.
     */
    readonly identifier: string;
    /**
     * Custom select placeholder.
     */
    readonly placeholder: string;
    /**
     * Select’s size.
     */
    readonly size?: FormMultiselectSizesType;
    /**
     * Name of the select.
     */
    readonly name: string;
    /**
     * Option to hide the list of selected items
     */
    readonly hideSelectedList: boolean;
    /**
     * Set whether the input is required or not. Please note that this is necessary for accessible inputs when the user is required to fill them.
     * When using this property you need to also set “novalidate” attribute to your form element to prevent browser from displaying its own validation errors.
     */
    readonly required: boolean;
    /**
     * Makes the select component disabled.
     * This prevents users from being able to interact with the select, and conveys its inactive state to assistive technologies.
     */
    readonly disabled: boolean;
    /**
     * Indicates the entered value does not conform to the format expected by the application.
     */
    readonly invalid: boolean;
    /**
     * Indicates the entered value of child form element does conform to the format expected by the application.
     */
    readonly success: boolean;
    /**
     * Custom message for when there is a blank sheet
     */
    readonly messageEmpty: string;
    /**
     * Custom message for when data is loaded
     */
    readonly messageLoading: string;
    /**
     * Emitted when the select has focus.
     */
    govFocus: EventEmitter<FormMultiselectEvent>;
    /**
     * Emitted when the select loses focus.
     */
    govBlur: EventEmitter<FormMultiselectEvent>;
    /**
     * Emitted when the select change value.
     */
    govChange: EventEmitter<FormMultiselectEvent>;
    /**
     * Emitted when an item is selected
     */
    govSelect: EventEmitter<FormMultiselectEvent>;
    /**
     * Emitted when an item is removed
     */
    govRemove: EventEmitter<FormMultiselectEvent>;
    focused: boolean;
    valueState: string;
    selectedOptionsState: GovFormMultiSelectSelectedItem[];
    optionsState: GovFormMultiSelectItem[];
    validateSize(newValue: string): void;
    watchOptions(newValue: string | GovFormMultiSelectItem[]): void;
    watchValue(newValue: string | GovFormMultiSelectItem[]): void;
    inheritedAttributes: Attributes;
    componentDidLoad(): void;
    componentWillLoad(): void;
    disconnectedCallback(): void;
    onAriaAttributeChange(attributeName: string, newValue: string): void;
    private getAvailableOptions;
    private initAutocomplete;
    private selectedValueIndex;
    private getOptionElement;
    private getOption;
    private selectOption;
    private removeOption;
    componentDidRender(): Promise<void>;
    render(): any;
    private onFocusHandler;
    private onBlurHandler;
    private onInputHandler;
    private onSelectHandler;
    private onTagRemove;
    /**
     * Returns the current state of the component
     */
    setFocus(options?: FocusOptions): Promise<void>;
    /**
     * Sets the ordered value of the element
     */
    setValue(value: string): Promise<void>;
    /**
     * Returns an instance of the native html select element
     */
    getRef(): Promise<HTMLSelectElement>;
}
