import { EventEmitter } from "../../stencil-public-runtime";
import { IcInformationStatusOrEmpty, IcMenuOption, IcSearchMatchPositions, IcMultiValueEventDetail, IcSizes, IcThemeMode } from "../../utils/types";
import { IcOptionSelectEventDetail } from "../ic-menu/ic-menu.types";
/**
 * @slot icon - Content will be placed to the left of the select text input.
 */
export declare class Select {
    private anchorEl?;
    private blurredBecauseButtonPressed;
    private characterKeyPressTimer;
    private clearButton?;
    private customSelectElement?;
    private debounceAria;
    private hasSetDefaultValue;
    private hasTimedOut;
    private inheritedAttributes;
    private initialOptionsEmpty;
    private inputId;
    private menu?;
    private menuId;
    private nativeSelectElement?;
    private retryButtonClick;
    private searchableMenuItemSelected;
    private searchableSelectElement?;
    private timeoutTimer;
    private ungroupedOptions;
    private hostMutationObserver;
    el: HTMLIcSelectElement;
    ariaActiveDescendant: string;
    clearButtonFocused: boolean;
    debounceIcInput: number;
    hiddenInputValue: string | null;
    noOptions: IcMenuOption[] | null;
    open: boolean;
    pressedCharacters: string;
    searchableSelectInputValue: string | null;
    /**
     * If `true`, the disabled state will be set.
     */
    disabled?: boolean;
    watchDisabledHandler(): void;
    /**
     * If `true`, the built in filtering will be disabled for a searchable variant. For example, if options will already be filtered from external source.
     */
    disableAutoFiltering?: boolean;
    /**
     * The text displayed when there are no options in the option list.
     */
    emptyOptionListText?: string;
    /**
     * The <form> element to associate the select with.
     */
    form?: string;
    /**
     * If `true`, the select will fill the width of the container.
     */
    fullWidth?: boolean;
    /**
     * The helper text that will be displayed for additional field guidance.
     */
    helperText?: string;
    /**
     * If `true`, the label will be hidden and the required label value will be applied as an aria-label.
     */
    hideLabel?: boolean;
    /**
     * If `true`, descriptions of options will be included when filtering options in a searchable select. Only applies to built in filtering.
     */
    includeDescriptionsInSearch?: boolean;
    /**
     * If `true`, group titles of grouped options will be included when filtering options in a searchable select. Only applies to built in filtering.
     */
    includeGroupTitlesInSearch?: boolean;
    /**
     * The label for the select.
     */
    label: string;
    /**
     * The message displayed when external loading times out.
     */
    loadingErrorLabel?: string;
    /**
     * The message displayed whilst the options are being loaded externally.
     */
    loadingLabel?: string;
    /**
     * If `true`, multiple options can be selected.
     */
    multiple?: boolean;
    /**
     * The name of the control, which is submitted with the form data.
     */
    name?: string;
    /**
     * The placeholder value to be displayed.
     */
    placeholder?: string;
    /**
     * If `true`, the readonly state will be set.
     */
    readonly?: boolean;
    /**
     * If `true`, the select will require a value.
     */
    required?: boolean;
    /**
     * If `true`, a searchable variant of the select will be displayed which can be typed in to filter options. This functionality is only available on the single-select variant of the select component.
     */
    searchable?: boolean;
    /**
     * Whether the search string of the searchable select should match the start of or anywhere in the options. Only applies to built in filtering.
     */
    searchMatchPosition?: IcSearchMatchPositions;
    /**
     * If `true`, the icOptionSelect event will be fired on enter instead of ArrowUp and ArrowDown on the single select.
     */
    selectOnEnter?: boolean;
    /**
     * If `true`, a button which clears the select input when clicked will be displayed. The button will always appear on the searchable select.
     */
    showClearButton?: boolean;
    /**
     * The size of the select.
     */
    size?: IcSizes;
    /**
     * If using external filtering, set a timeout for when loading takes too long.
     */
    timeout?: number;
    /**
     * Sets the theme color to the dark or light theme color. "inherit" will set the color based on the system settings or ic-theme component.
     */
    theme?: IcThemeMode;
    /**
     * The validation status - e.g. 'error' | 'warning' | 'success'.
     */
    validationStatus?: IcInformationStatusOrEmpty;
    /**
     * The text to display as the validation message.
     */
    validationText?: string;
    /**
     * If `true`, the loading state will be triggered when fetching options asynchronously.
     */
    loading?: boolean;
    loadingHandler(newValue: boolean): void;
    /**
     * The possible selection options.
     */
    options?: IcMenuOption[];
    filteredOptions: IcMenuOption[];
    uniqueOptions: IcMenuOption[];
    watchOptionsHandler(): void;
    /**
     * The amount of time, in milliseconds, to wait to trigger the `icInput` event after each keystroke.
     */
    debounce?: number;
    currDebounce: number | undefined;
    debounceChangedHandler(newValue: number): void;
    /**
     * The value of the select, reflected by the value of the currently selected option.
     * For the searchable variant, the value is also reflected by the user input.
     * For the multi-select variant, the value must be an array of option values.
     */
    value?: string | string[] | null;
    initialValue: string | string[] | null | undefined;
    inputValueToFilter: string | null;
    currValue?: string | string[] | null;
    valueChangedHandler(): void;
    openChangedHandler(): void;
    /**
     * Emitted when the select loses focus.
     */
    icBlur: EventEmitter<void>;
    /**
     * Emitted when the value changes.
     */
    icChange: EventEmitter<IcMultiValueEventDetail>;
    /**
     * Emitted when the clear or clear all button is clicked.
     */
    icClear: EventEmitter<void>;
    /**
     * Emitted when the select options menu is closed.
     */
    icClose: EventEmitter<void>;
    /**
     * Emitted when the select gains focus.
     */
    icFocus: EventEmitter<void>;
    /**
     * Emitted when a keyboard input occurred.
     */
    icInput: EventEmitter<IcMultiValueEventDetail>;
    /**
     * Emitted when the select options menu is opened.
     */
    icOpen: EventEmitter<void>;
    /**
     * Emitted when an option is selected.
     * Selecting an option will also trigger an `icChange/onIcChange` due to the value being updated.
     */
    icOptionSelect: EventEmitter<IcOptionSelectEventDetail>;
    /**
     * Emitted when `multiple` is `true` and an option is deselected.
     */
    icOptionDeselect: EventEmitter<IcOptionSelectEventDetail>;
    /**
     * Emitted when the 'retry loading' button is clicked for a searchable variant.
     */
    icRetryLoad: EventEmitter<IcMultiValueEventDetail>;
    disconnectedCallback(): void;
    componentWillLoad(): void;
    componentDidLoad(): void;
    componentDidRender(): void;
    /**
     * Sets focus on the input box.
     */
    setFocus(): Promise<void>;
    private hostMutationCallback;
    private handleRetry;
    private updateOnChangeDebounce;
    private emitIcChange;
    private emitIcInput;
    private setOptions;
    /**
     * Processes the provided array of IcMenuOptions, removing duplicates and reporting them with a console.warn
     * @param options array of IcMenuOptions
     * @returns a new options object, with all entries possessing a duplicate 'value' field removed
     */
    private deduplicateOptions;
    /**
     * Loop through options array and for all options with no value, infer it from the label
     */
    private setOptionsValuesFromLabels;
    private setUngroupedOptions;
    private setTextColor;
    private setMenuChange;
    private getLabelFromValue;
    private getMultipleOptionsString;
    private getFilteredChildMenuOptions;
    private getValueSortedByOptions;
    private handleNativeSelectChange;
    private handleCustomSelectChange;
    private handleMultipleSelectChange;
    private handleSelectAllChange;
    private handleMenuChange;
    private handleMenuKeyPress;
    private handleFocusIndicatorDisplay;
    private handleMouseDown;
    private isExternalFiltering;
    private handleClick;
    private handleExpandIconMouseDown;
    private handleClear;
    private handleCharacterKeyDown;
    private handleNativeSelectKeyDown;
    private handleKeyDown;
    private handleClearButtonFocus;
    private handleClearButtonBlur;
    private handleFilter;
    /**
     * Put the select component into loading state.
     * Replace options with the loading message. If timeout is enabled, set the timeout and once passed, replace options with the loading error message
     */
    private triggerLoading;
    private getValueFromLabel;
    private handleSearchableSelectInput;
    private updateSearchableSelectResultAriaLive;
    private debounceAriaLiveUpdate;
    private updateMultiSelectedCountAriaLive;
    private getDefaultValue;
    private setDefaultValue;
    private onFocus;
    private onBlur;
    private onTimeoutBlur;
    private handleFormReset;
    private clearInput;
    render(): any;
}
