import * as fuzzy from 'fuzzy';
import { Registry } from '../../../../../Registry';
import { Element } from '../../../../../client/element';
import { Shape } from '../../../../../client/util/geometry';
import { System } from '../../../../../system';
import { Dict } from '../../../../../types/Dict';
import MicrophoneButton from '../../../component/app/MicrophoneButton/Component';
import Div from '../../Div/Component';
import SearchInput from '../SearchInput/Component';
export interface Props {
    className?: string;
    style?: Dict<string>;
    selected?: string;
    selectedColor?: string;
    shape?: Shape;
    filter?: (u: string) => boolean;
    registry?: Registry;
}
export declare const SEARCH_ITEM_HEIGHT: number;
export type ListItem = {
    id: string;
    name: string;
    tags: string[];
    icon: string;
    fuzzyName: string;
};
export declare const SHAPE_TO_ICON: {
    rect: string;
    circle: string;
};
export declare function isSpecFuzzyMatch(str: string, pattern: string): fuzzy.MatchResult;
export default class Search extends Element<HTMLDivElement, Props> {
    private _input_value;
    _search: Div;
    _list: Div;
    _input: SearchInput;
    _microphone: MicrophoneButton;
    private _tooltip;
    private _shape_tooltip;
    private _microphone_tooltip;
    private _shape;
    private _shape_button;
    private _ordered_id_list;
    private _filtered_id_list;
    private _item;
    private _filtered_list_item;
    private _list_item_div;
    private _list_item_content;
    private _list_item_name;
    private _list_hidden;
    private _selected_id;
    private _selected_index;
    private _scrollTop;
    private _registry;
    constructor($props: Props, $system: System);
    private _reset;
    private _refresh_ordered_list;
    private _set_list_item_color;
    onPropChanged(prop: string, current: any): void;
    private _registry_unlisten;
    private _refresh_list;
    private _find_new_item_index;
    private _insert_list_item;
    private _listen_registry;
    private _unlisten_registry;
    private _add_list_item;
    private _remove_list_item;
    private __remove_list_item;
    private _refresh_list_item;
    focus(options?: FocusOptions | undefined): void;
    blur(): void;
    start_microphone: () => void;
    stop_microphone: () => void;
    private _start_microphone;
    private _stop_microphone;
    private _on_input_keydown;
    private _on_input_keyup;
    private _on_input_focus_in;
    private _select_all;
    private _on_input_click;
    private _on_input_focus_out;
    private _to_be_filtered;
    private _show_list;
    private _refresh_last_list_item_border;
    private _dispatch_item_selected;
    private _dispatch_shape;
    private _dispatch_item_pick;
    private _dispatch_list_shown;
    private _dispatch_list_hidden;
    private _dispatch_list_empty;
    private _select_first_list_item;
    private _hide_list;
    private _on_list_item_pointer_enter;
    private _on_list_item_click;
    set_selected_item_id: (id: string, force_scroll?: boolean) => void;
    private _set_selected_item_id;
    select_next: (offset: number) => void;
    private _top_element_index;
    private _scroll_into_item_if_needed;
    private _debounced_refresh_list;
    private _filter_list;
    private _on_input_input;
    private _on_arrow_down_keydown;
    private _on_arrow_up_keydown;
    private _on_ctrl_p_keydown;
    private _on_escape_keydown;
    private _on_enter_keydown;
    getValue: () => string;
    getShape: () => string;
    getList(): string[];
    setValue: (value: string) => void;
    _setValue: (value: string) => void;
    toggleShape: () => void;
    setShape: (shape: "rect" | "circle") => void;
    private _setShape;
    onDestroy(): void;
    showTooltip(): void;
    hideTooltip(): void;
}
