import { ComponentInterface } from '../../stencil-public-runtime';
import { HTMLStencilElement } from '../../stencil-public-runtime';
import { BalOption } from '../../utils/dropdown';
import { BalAriaForm } from '../../utils/form';
import { Loggable, LogInstance } from '../../utils/log';
export declare class OptionList implements ComponentInterface, Loggable {
    private inputId;
    private inheritAttributes;
    private focusRaf;
    el: HTMLStencilElement;
    log: LogInstance;
    ariaForm: BalAriaForm;
    createLogger(log: LogInstance): void;
    /**
     * PUBLIC PROPERTY API
     * ------------------------------------------------------
     */
    /**
     * If `true` the list supports multiple selections
     */
    multiple: boolean;
    /**
     * If `true`, the user cannot interact with the option.
     */
    disabled: boolean;
    /**
     * If `true`, the user must fill in a value before submitting a form.
     */
    required: boolean;
    /**
     * Defines the focused option with his index value
     */
    focusIndex: number;
    /**
     * Id of the label element to describe this option list
     */
    labelledby?: string;
    /**
     * Defines the filter logic of the list
     */
    filter: BalProps.BalOptionListFilter;
    /**
     * Defines the max height of the list element
     */
    contentHeight?: number;
    contentHeightChanged(value?: number): void;
    /**
     * LIFECYCLE
     * ------------------------------------------------------
     */
    componentDidLoad(): void;
    componentWillRender(): void;
    /**
     * LISTENERS
     * ------------------------------------------------------
     */
    listenToMouseEnter(ev: BalEvents.BalOptionFocus): void;
    listenToOptionChange({ detail }: BalEvents.BalOptionFocus): void;
    /**
     * PUBLIC METHODS
     * ------------------------------------------------------
     */
    /**
     * Focus the selected visible option in the list, if no option is selected it selects the first one
     */
    focusSelected(): Promise<number>;
    /**
     * Focus the first visible option in the list
     * @returns focusIndex
     */
    focusFirst(): Promise<number>;
    /**
     * Focus the last visible option in the list
     * @returns focusIndex
     */
    focusLast(): Promise<number>;
    /**
     * Focus the next visible option in the list
     * @returns focusIndex
     */
    focusNext(): Promise<number>;
    /**
     * Focus the previous visible option in the list
     * @returns focusIndex
     */
    focusPrevious(): Promise<number>;
    /**
     * Focus the option with the label that starts with the search property
     * @returns focusIndex
     */
    focusByLabel(search: string, config: Partial<{
        select: boolean;
    }>): Promise<number>;
    /**
     * Filter the options by the given filter property and hides options
     * @returns focusIndex
     */
    filterByContent(search: string): Promise<number>;
    /**
     * Shows or hides all options
     */
    resetHidden(hidden?: boolean): Promise<void>;
    /**
     * Selects or deselects all options
     */
    resetSelected(selected?: boolean): Promise<void>;
    /**
     * Updates options
     */
    updateSelected(values?: string[]): Promise<void>;
    /**
     * Resets the focus index to pristine and scrolls to the top of the list
     */
    resetFocus(): Promise<number>;
    /**
     * Returns a list of option values
     */
    getSelectedValues(): Promise<string[]>;
    /**
     * Returns a list of option labels
     */
    getSelectedOptions(values?: string[]): Promise<BalOption[]>;
    /**
     * Returns a list of options
     */
    getValues(): Promise<string[]>;
    /**
     * Returns a list of options
     */
    getLabels(): Promise<string[]>;
    /**
     * Returns a list of accessible options
     */
    getOptions(): Promise<BalOption[]>;
    /**
     * Selects the option with the current focus
     */
    selectByFocus(): Promise<void>;
    /**
     * @internal
     */
    setAriaForm(ariaForm: BalAriaForm): Promise<void>;
    /**
     * GETTERS
     * ------------------------------------------------------
     */
    private get options();
    private get allOptions();
    /**
     * PRIVATE METHODS
     * ------------------------------------------------------
     */
    private filterOptions;
    private isOptionVisible;
    private updateScrollTopPosition;
    private updateScrollBottomPosition;
    private getScrollTopForTopPosition;
    private getScrollTopForBottomPosition;
    private scrollTo;
    private updateFocus;
    private getOptionIndex;
    private getSelectedOptionIndex;
    private getFirstOptionIndex;
    private getNextOptionIndex;
    private getPreviousOptionIndex;
    private getLastOptionIndex;
    private getOptionIndexByLabel;
    private getLength;
    /**
     * RENDER
     * ------------------------------------------------------
     */
    render(): any;
}
