import { ComponentInterface, EventEmitter } from '../../stencil-public-runtime';
import { HTMLStencilElement } from '../../stencil-public-runtime';
import { Attributes } from '../../utils/attributes';
import { BalConfigObserver, BalConfigState, BalLanguage, BalRegion } from '../../utils/config';
import { BalOption, DropdownAutoFillUtil, DropdownEventsUtil, DropdownFocus, DropdownFocusUtil, DropdownFormSubmit, DropdownFormSubmitUtil, DropdownOptionUtil, DropdownPopupUtil, DropdownValueUtil } from '../../utils/dropdown';
import { BalAriaForm, BalAriaFormLinking } from '../../utils/form';
import { LogInstance, Loggable } from '../../utils/log';
export declare class Dropdown implements ComponentInterface, Loggable, BalConfigObserver, BalAriaFormLinking, DropdownFormSubmit, DropdownFocus {
    el: HTMLStencilElement;
    panelEl: HTMLDivElement | undefined;
    listEl: HTMLBalOptionListElement | undefined;
    nativeEl: HTMLInputElement | undefined;
    selectEl: HTMLSelectElement | undefined;
    inputId: string;
    inheritedAttributes: Attributes;
    initialValue?: string | string[];
    nativeOptions: string[];
    rawOptions: BalOption[];
    choices: BalOption[];
    rawValue: string[];
    hasFocus: boolean;
    isExpanded: boolean;
    isAutoFilled: boolean;
    isKeyboardMode: boolean;
    inputLabel: string;
    ariaForm: BalAriaForm;
    language: BalLanguage;
    region: BalRegion;
    httpFormSubmit: boolean;
    labelToFocus: string;
    valueUtil: DropdownValueUtil;
    eventsUtil: DropdownEventsUtil;
    popupUtil: DropdownPopupUtil;
    optionUtil: DropdownOptionUtil;
    formSubmitUtil: DropdownFormSubmitUtil;
    focusUtil: DropdownFocusUtil;
    autoFillUtil: DropdownAutoFillUtil;
    log: LogInstance;
    createLogger(log: LogInstance): void;
    /**
     * PUBLIC PROPERTY API
     * ------------------------------------------------------
     */
    /**
     * Indicates whether the value of the control can be automatically completed by the browser.
     */
    autocomplete: BalProps.BalInputAutocomplete;
    /**
     * The name of the control, which is submitted with the form data.
     */
    name: string;
    /**
     * Defines the placeholder of the component. Only shown when the value is empty
     */
    placeholder: string;
    /**
     * Defines a inline label to be shown before the value
     */
    inlineLabel: string;
    /**
     * If `true` there will be on trigger icon visible
     */
    icon: string;
    /**
     * Defines the size of the control.
     */
    size: BalProps.BalDropdownSize;
    /**
     * Defines the color style of the control
     */
    theme: BalProps.BalDropdownTheme;
    /**
     * If `true`, the user cannot interact with the option.
     */
    disabled: boolean;
    /**
     * If `true` the element can not mutated, meaning the user can not edit the control.
     */
    readonly: boolean;
    /**
     * If `true`, the user can select multiple options.
     */
    multiple: boolean;
    /**
     * If `true`, the selected options are shown as chips
     */
    chips: boolean;
    /**
     * If `true`, a cross at the end is visible to clear the selection
     */
    clearable: boolean;
    /**
     * If `true`, the component will be shown as invalid
     */
    invalid: boolean;
    /**
     * If `true`, the user must fill in a value before submitting a form.
     */
    required: boolean;
    /**
     * Defines if the select is in a loading state.
     */
    loading: boolean;
    /**
     * Defines the filter logic of the list
     */
    filter: BalProps.BalOptionListFilter;
    /**
     * Defines the max height of the list element
     */
    contentHeight: number;
    /**
     * @internal
     * Set this to `true` when the component is placed on a dark background.
     */
    inverted: boolean;
    /**
     * Steps can be passed as a property or through HTML markup.
     */
    options: BalOption[];
    protected optionChanged(): Promise<void>;
    /**
     * The value of the selected options.
     */
    value?: string | string[];
    valueChanged(newValue: string | string[] | undefined, oldValue: string | string[] | undefined): void;
    /**
     * Emitted when a option got selected.
     */
    balChange: EventEmitter<BalEvents.BalDropdownChangeDetail>;
    /**
     * Emitted when the input has focus.
     */
    balFocus: EventEmitter<BalEvents.BalDropdownFocusDetail>;
    /**
     * Emitted when the input loses focus.
     */
    balBlur: EventEmitter<BalEvents.BalDropdownBlurDetail>;
    /**
     * LIFECYCLE
     * ------------------------------------------------------
     */
    hasConnected: boolean;
    connectedCallback(): void;
    disconnectedCallback(): void;
    componentWillRender(): Promise<void>;
    componentDidRender(): void;
    componentDidLoad(): void;
    /**
     * LISTENERS
     * ------------------------------------------------------
     */
    /**
     * @internal define config for the component
     */
    configChanged(state: BalConfigState): Promise<void>;
    listenToOptionChange: (ev: BalEvents.BalOptionChange) => void;
    listenOnClickOutside: (ev: UIEvent) => void;
    resetHandler: (ev: UIEvent) => 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 popup with option list
     */
    open(): Promise<void>;
    /**
     * Closes the popup with option list
     */
    close(): Promise<void>;
    /**
     * Select option by passed value
     */
    select(newValue: string | string[]): Promise<void>;
    /**
     * @internal
     */
    setAriaForm(ariaForm: BalAriaForm): Promise<void>;
    /**
     * EVENT BINDING
     * ------------------------------------------------------
     */
    handleAutoFill: (ev: Event) => Promise<void>;
    handleKeyDown: (ev: KeyboardEvent) => void;
    /**
     * RENDER
     * ------------------------------------------------------
     */
    render(): any;
}
