import { CharStyle, Terminal } from '../Terminal';
import { Widget, WidgetOptions } from '../Widget';
import { WidgetContainer } from '../WidgetContainer';
import { TokenizerFunction } from '../util/tokenizer';
export declare const SELECT_INDEX_NONE = -1;
export interface SelectOption<T> {
    text: string;
    value?: T;
    disabled?: boolean;
}
export interface SelectOptionStyle extends CharStyle {
    prefix?: string;
    suffix?: string;
}
export interface SelectOptions<T> extends WidgetOptions {
    options: Array<SelectOption<T>>;
    loop?: boolean;
    multiple?: boolean;
    allowUnselect?: boolean;
    baseStyle?: SelectOptionStyle;
    baseFocusedStyle?: SelectOptionStyle;
    selectedStyle?: SelectOptionStyle;
    selectedFocusedStyle?: SelectOptionStyle;
    disabledStyle?: SelectOptionStyle;
    disabledSelectedStyle?: SelectOptionStyle;
    tokenizer?: TokenizerFunction;
}
export declare class Select<T> extends Widget<SelectOptions<T>> {
    static defaultOptions: SelectOptions<any>;
    private focusedIndex;
    private selectOptions;
    private firstLine;
    constructor(terminal: Terminal, options: SelectOptions<T>, parent?: WidgetContainer);
    render(): void;
    getOptionFromIndex(index: number): SelectOption<T>;
    getValueFromIndex(index: number): T;
    getIndexFromOption(option: SelectOption<T>): number;
    getIndexFromValue(value: T): number;
    getSelectedIndexes(): number[];
    getSelectedOptions(): SelectOption<T>[];
    getSelectedValues(): T[];
    getFocusedIndex(): number;
    getFocusedOption(): SelectOption<T>;
    getFocusedValue(): T;
    getIndexAt(column: number, line: number): number;
    getOptionAt(column: number, line: number): SelectOption<T>;
    getValueAt(column: number, line: number): T;
    isIndexSelected(index: number): boolean;
    isOptionSelected(option: SelectOption<T>): boolean;
    isValueSelected(value: T): boolean;
    toggleIndex(index: number, selected?: boolean): boolean;
    selectOption(option: SelectOption<T>): boolean;
    selectValue(value: T): boolean;
    focusIndex(index: number): boolean;
    focusOption(option: SelectOption<T>): boolean;
    focusValue(value: T): boolean;
    focusPrev(): boolean;
    focusNext(): boolean;
    protected updateOptions(changes: SelectOptions<T>): void;
    private moveFocus;
    private getOptionStyle;
    private getOptionText;
}
