import { ComponentInterface, EventEmitter } from '../../stencil-public-runtime';
import { HTMLStencilElement } from '../../stencil-public-runtime';
import { BalAriaForm, BalAriaFormLinking } from '../../utils/form';
import { Loggable, LogInstance } from '../../utils/log';
import { BalOptionValue } from './utils/bal-option.type';
export interface BalOptionController extends BalOptionValue {
    id: string;
    textContent: string;
    innerHTML: string;
}
export declare class Select implements ComponentInterface, Loggable, BalAriaFormLinking {
    private inputElement;
    private nativeSelectEl;
    private popoverElement;
    private selectionEl;
    private didInit;
    private inputId;
    private clearScrollToValue;
    private clearSelectValue;
    private mutationO?;
    private initialValue?;
    private inheritedAttributes;
    log: LogInstance;
    createLogger(log: LogInstance): void;
    el: HTMLStencilElement;
    hasFocus: boolean;
    inputValue: string;
    focusIndex: number;
    isPopoverOpen: boolean;
    options: Map<string, BalOptionController>;
    labelToScrollTo: string;
    labelToSelectTo: string;
    ariaForm: BalAriaForm;
    /**
     * PUBLIC PROPERTY API
     * ------------------------------------------------------
     */
    /**
     * The name of the control, which is submitted with the form data.
     */
    name: string;
    /**
     * If `true` the component gets a invalid style.
     */
    invalid: boolean;
    /**
     * If `true` the component gets a invalid style.
     */
    filter: BalProps.BalSelectFilter;
    /**
     * The tabindex of the control.
     */
    balTabindex: number;
    /**
     * If `true` there will be no trigger icon visible, so no UX indicator for a popup
     */
    freeSolo: boolean;
    /**
     * If `true` multiple option can be selected
     */
    multiple: boolean;
    /**
     * Defines the max length of the value.
     */
    maxLength?: number;
    /**
     * This label is shown if typeahead is active and all the options are filtered out.
     */
    noDataLabel?: string;
    /**
     * Indicates whether the value of the control can be automatically completed by the browser.
     */
    autocomplete: BalProps.BalInputAutocomplete;
    /**
     * If `true` the user can search by typing into the input field.
     */
    typeahead: boolean;
    /**
     * If `true` the options are a proposal and the user can also create his
     * own value. Can only be used with the typeahead property.
     */
    selectionOptional: 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 user must fill in a value before submitting a form.
     */
    required: boolean;
    /**
     * @internal
     * Set this to `true` when the component is placed on a dark background.
     * Set this to `true` when the component is placed on a dark background.
     */
    inverted: boolean;
    /**
     * The text to display when the select is empty.
     */
    placeholder?: string;
    /**
     * Defines the height of the popover list.
     */
    scrollable: number;
    /**
     * Defines if the select is in a loading state.
     */
    loading: boolean;
    /**
     * If `true` the filtering is done outside the component.
     */
    remote: boolean;
    /**
     * If `true`, in Angular reactive forms the control will not be set invalid
     */
    autoInvalidOff: boolean;
    /**
     * Selected option values. Could also be passed as a string, which gets transformed.
     */
    value?: string | string[];
    rawValue: string[] | undefined;
    valueWatcher(): void;
    updateRawValue(newValue: string[], isHuman?: boolean): void;
    private emitChangeEvent;
    /**
     * Emitted when a option got selected.
     */
    balChange: EventEmitter<BalEvents.BalSelectChangeDetail>;
    /**
     * Emitted when the input got clicked.
     */
    balInputClick: EventEmitter<BalEvents.BalSelectInputClickDetail>;
    /**
     * Emitted when a keyboard input occurred.
     */
    balInput: EventEmitter<BalEvents.BalSelectInputDetail>;
    /**
     * Emitted when the input loses focus.
     */
    balBlur: EventEmitter<BalEvents.BalSelectBlurDetail>;
    /**
     * Emitted when the input has focus.
     */
    balFocus: EventEmitter<BalEvents.BalSelectFocusDetail>;
    /**
     * Emitted when the user cancels the input.
     */
    balCancel: EventEmitter<BalEvents.BalSelectCancelDetail>;
    /**
     * Emitted when the input has focus and key from the keyboard go hit.
     */
    balKeyPress: EventEmitter<BalEvents.BalSelectKeyPressDetail>;
    /**
     * LIFECYCLE
     * ------------------------------------------------------
     */
    connectedCallback(): void;
    componentWillLoad(): void;
    componentDidLoad(): void;
    disconnectedCallback(): void;
    /**
     * LISTENERS
     * ------------------------------------------------------
     */
    listenOnClick(ev: UIEvent): void;
    private resetHandlerTimer?;
    resetHandler(ev: UIEvent): void;
    handleKeyDown(ev: KeyboardEvent): Promise<void>;
    /**
     * PUBLIC METHODS
     * ------------------------------------------------------
     */
    /**
     * Sets the focus on the input element
     */
    setFocus(): Promise<void>;
    /**
     * Returns the value of the component
     */
    getValue(): Promise<string[]>;
    /**
     * Sets the value to `[]`, the input value to ´''´ and the focus index to ´0´.
     */
    clear(): Promise<void>;
    /**
     * Opens the popover
     */
    open(): Promise<void>;
    /**
     * Closes the popover
     */
    close(): Promise<void>;
    /**
     * Cancel the popover
     */
    cancel(): Promise<void>;
    /**
     * Select option by passed value
     */
    select(value: string): Promise<void>;
    /**
     * @internal
     */
    setAriaForm(ariaForm: BalAriaForm): Promise<void>;
    /**
     * PRIVATE METHODS
     * ------------------------------------------------------
     */
    private waitForOptionsAndThenUpdateRawValuesTimer?;
    private waitForOptionsAndThenUpdateRawValues;
    private updateOptions;
    /**
     * GETTERS
     * ------------------------------------------------------
     */
    private get optionArray();
    private hasOptions;
    private get inputPlaceholder();
    private getChildOpts;
    private getPopoverContent;
    /********************************************************
     * FOCUS
     ********************************************************/
    private updateFocusTimer?;
    private updateFocus;
    private scrollToFocusedOption;
    private scrollTo;
    private selectedFocusedOption;
    private navigateWithArrowKey;
    private focusOptionByLabel;
    private selectOptionByLabel;
    private selectLabel;
    private scrollToLabel;
    /********************************************************
     * VALUE & FILTER & SELECTION
     ********************************************************/
    private syncRawValue;
    private blurSelect;
    private optionSelected;
    private updateValue;
    private removeValue;
    private validateAfterBlur;
    private syncNativeInput;
    private updateInputValueTimer?;
    private updateInputValue;
    /**
     * EVENT BINDING
     * ------------------------------------------------------
     */
    private fireBlur;
    private handleClick;
    private handlePopoverChange;
    private handleInputBlur;
    private handleInputFocus;
    private isChipClicked;
    private handleInputClick;
    private handleKeyPress;
    private handleInputChange;
    private handleInput;
    private handleOptionMouseEnter;
    private isInsideOfFooter;
    /**
     * RENDER
     * ------------------------------------------------------
     */
    render(): any;
}
