/**
 * Copyright (c) Cisco Systems, Inc. and its affiliates.
 *
 * This source code is licensed under the MIT license found in the
 * LICENSE file in the root directory of this source tree.
 *
 */
import "../icon/Icon";
import { LitElement, nothing, PropertyValues } from "lit";
export declare namespace Dropdown {
    export type OptionMember = {
        [key: string]: string;
    };
    export type Option = string | OptionMember;
    type RenderOptionMember = {
        key: string;
        value: string;
        option?: Option;
    };
    export type EventDetail = {
        "dropdown-focus-in": undefined;
        "dropdown-focus-out": undefined;
        "dropdown-selected": {
            option: Option;
        };
        "dropdown-selection-removed": undefined;
    };
    export type MessageType = "error" | "success" | "warning";
    export type Message = {
        type: MessageType;
        message: string;
        id?: string;
        ariaLive?: "off" | "assertive" | "polite";
    };
    export class MessageController {
        determineMessageType(array: Dropdown.Message[]): MessageType;
        filterMessagesByType(array: Dropdown.Message[], value: string): string[];
    }
    const ELEMENT_base: import("../../mixins/FocusMixin").FocusMixinReturnType<typeof LitElement>;
    export class ELEMENT extends ELEMENT_base {
        title: string;
        options: Option[];
        optionId: string;
        optionValue: string;
        defaultOption: Option;
        disabled: boolean;
        customTabIndex: number;
        allowUnselected: boolean;
        visibleOptions: number;
        newMomentum: boolean;
        compact: boolean;
        searchable: boolean;
        searchItem: boolean;
        inputValue: string;
        placeholder: string;
        readOnly: boolean;
        autofocus: boolean;
        leftIcon: string;
        trimSpace: boolean;
        resultsTextLocalization: string;
        pill: boolean | null;
        helpText: string;
        messageArr: Dropdown.Message[];
        htmlId: string;
        clearAriaLabel: string;
        clearIconHeight: string;
        arrowAriaLabel: string;
        popupChevronAriaHidden: string;
        ariaLabel: string;
        searchResultAriaLabel: string;
        private ariaLabelForDropdown;
        private dropdownRenderOptions;
        private selectedKey;
        private expanded;
        private focusedIndex;
        label: HTMLLabelElement;
        input?: HTMLInputElement;
        optionsList: HTMLUListElement;
        optionsListItems?: HTMLLIElement[];
        private readonly messageController;
        private lastMaxHeight;
        connectedCallback(): void;
        disconnectedCallback(): void;
        protected firstUpdated(changedProperties: PropertyValues): void;
        protected updated(changedProperties: PropertyValues): void;
        private notifySearchResultCount;
        private setInitialValue;
        private getOptionValue;
        private getOptionId;
        private isOptionObject;
        updateRenderOptions(): void;
        private updateActiveDescendant;
        updateListDOM(): Promise<void>;
        resizeDropdownList(): Promise<void>;
        protected handleFocusIn(event: Event): void;
        protected handleFocusOut(event: Event): void;
        static get styles(): import("lit").CSSResult[];
        get filteredOptions(): RenderOptionMember[] | {
            key: string;
            value: string;
            disabled: boolean;
        }[];
        get messageType(): Dropdown.MessageType | null;
        get messages(): string[] | null;
        private setVisualListbox;
        private updateOnNextFrame;
        private setInputValue;
        private shouldChangeButton;
        toggleVisualListBox(e: any): void;
        handleRemoveAll(event: MouseEvent): void;
        private removeAllSelected;
        setupEvents(): void;
        teardownEvents(): void;
        expand(): void;
        collapse(): void;
        toggle(): void;
        select(): void;
        onOutsideClick: (e: MouseEvent) => void;
        onKeyDown: (e: KeyboardEvent) => void;
        onLabelClick(): void;
        focusFirst(): void;
        focusLast(): void;
        focusNext(): void;
        focusPrev(): void;
        focusToIndex(n: number): void;
        focusToIndexWithOption(o: RenderOptionMember): void;
        focusReset(): void;
        scrollToIndex(n: number): Promise<void>;
        getOptionKeyValuePair(option: Option): {
            key: string;
            value: string;
        };
        get labelTitle(): string;
        get dropDownClassMap(): {
            [x: string]: boolean;
            "md-dropdown__expanded": boolean;
            "md-new-dropdown": boolean;
            "md-dropdown--pill": boolean;
        };
        handleInput(event: Event): void;
        private notifyInputValueChanged;
        helpTextTemplate(): import("lit-html").TemplateResult<1> | typeof nothing;
        messagesTemplate(): import("lit-html").TemplateResult<1> | typeof nothing;
        iconTemplate(): import("lit-html").TemplateResult<1>;
        clearButtonTemplate(): import("lit-html").TemplateResult<1>;
        arrowButtonTemplate(): import("lit-html").TemplateResult<1>;
        render(): import("lit-html").TemplateResult<1>;
    }
    export {};
}
declare global {
    interface HTMLElementTagNameMap {
        "md-dropdown": Dropdown.ELEMENT;
    }
    interface HTMLElementEventMap {
        "dropdown-focus-in": CustomEvent<undefined>;
        "dropdown-focus-out": CustomEvent<undefined>;
        "dropdown-selected": CustomEvent<{
            option: Dropdown.Option;
        }>;
        "dropdown-input": CustomEvent<{
            value: string;
        }>;
        "combobox-on-expand": CustomEvent<undefined>;
        "remove-all-selected": CustomEvent<undefined>;
    }
}
