import { Neovim, Window } from '@chemzqm/neovim';
import { Event } from 'vscode-languageserver-protocol';
import { ListHighlights, ListItem } from '../types';
import ListConfiguration from './configuration';
export declare type MouseEvent = 'mouseDown' | 'mouseDrag' | 'mouseUp' | 'doubleClick';
export interface MousePosition {
    winid: number;
    lnum: number;
    col: number;
    current: boolean;
}
export default class ListUI {
    private nvim;
    private config;
    window: Window;
    private height;
    private newTab;
    private _bufnr;
    private currIndex;
    private highlights;
    private items;
    private disposables;
    private signOffset;
    private selected;
    private mouseDown;
    private creating;
    private _onDidChangeLine;
    private _onDidOpen;
    private _onDidClose;
    private _onDidChange;
    private _onDidLineChange;
    private _onDoubleClick;
    readonly onDidChangeLine: Event<number>;
    readonly onDidLineChange: Event<number>;
    readonly onDidOpen: Event<number>;
    readonly onDidClose: Event<number>;
    readonly onDidChange: Event<void>;
    readonly onDidDoubleClick: Event<void>;
    constructor(nvim: Neovim, config: ListConfiguration);
    index: number;
    getItem(delta: number): ListItem;
    readonly item: Promise<ListItem>;
    echoMessage(item: ListItem): Promise<void>;
    updateItem(item: ListItem, index: number): Promise<void>;
    getItems(): Promise<ListItem[]>;
    onMouse(event: MouseEvent): Promise<void>;
    reset(): void;
    hide(): void;
    resume(name: string, position: string): Promise<void>;
    toggleSelection(): Promise<void>;
    selectLines(start: number, end: number): Promise<void>;
    selectAll(): Promise<void>;
    clearSelection(): void;
    readonly shown: boolean;
    readonly bufnr: number;
    readonly ready: Promise<void>;
    drawItems(items: ListItem[], name: string, position?: string, reload?: boolean): Promise<void>;
    appendItems(items: ListItem[]): Promise<void>;
    private setLines;
    restoreWindow(): void;
    dispose(): void;
    readonly length: number;
    readonly selectedItems: ListItem[];
    private doHighlight;
    setCursor(lnum: number, col: number): void;
    addHighlights(highlights: ListHighlights[], append?: boolean): void;
    private getSelectedRange;
}
