/*---------------------------------------------------------------------------------------------
 *  Copyright (c) Microsoft Corporation. All rights reserved.
 *  Licensed under the MIT License. See License.txt in the project root for license information.
 *--------------------------------------------------------------------------------------------*/
import { IListOptions, IListOptionsUpdate, IListStyles } from "../list/listWidget.mjs";
import { ITableColumn, ITableContextMenuEvent, ITableEvent, ITableGestureEvent, ITableMouseEvent, ITableRenderer, ITableTouchEvent, ITableVirtualDelegate } from "./table.mjs";
import { Event } from "../../../common/event.mjs";
import { DisposableStore, IDisposable } from "../../../common/lifecycle.mjs";
import { ScrollEvent } from "../../../common/scrollable.mjs";
import { ISpliceable } from "../../../common/sequence.mjs";
import { IThemable } from "../../../common/styler.mjs";
import "../../../../css!./table.mjs";
type TCell = any;
export interface ITableOptions<TRow> extends IListOptions<TRow> {
}
export interface ITableOptionsUpdate extends IListOptionsUpdate {
}
export interface ITableStyles extends IListStyles {
}
export declare class Table<TRow> implements ISpliceable<TRow>, IThemable, IDisposable {
    private virtualDelegate;
    private static InstanceCount;
    readonly domId: string;
    readonly domNode: HTMLElement;
    private splitview;
    private list;
    private styleElement;
    protected readonly disposables: DisposableStore;
    private cachedWidth;
    private cachedHeight;
    get onDidChangeFocus(): Event<ITableEvent<TRow>>;
    get onDidChangeSelection(): Event<ITableEvent<TRow>>;
    get onDidScroll(): Event<ScrollEvent>;
    get onMouseClick(): Event<ITableMouseEvent<TRow>>;
    get onMouseDblClick(): Event<ITableMouseEvent<TRow>>;
    get onMouseMiddleClick(): Event<ITableMouseEvent<TRow>>;
    get onPointer(): Event<ITableMouseEvent<TRow>>;
    get onMouseUp(): Event<ITableMouseEvent<TRow>>;
    get onMouseDown(): Event<ITableMouseEvent<TRow>>;
    get onMouseOver(): Event<ITableMouseEvent<TRow>>;
    get onMouseMove(): Event<ITableMouseEvent<TRow>>;
    get onMouseOut(): Event<ITableMouseEvent<TRow>>;
    get onTouchStart(): Event<ITableTouchEvent<TRow>>;
    get onTap(): Event<ITableGestureEvent<TRow>>;
    get onContextMenu(): Event<ITableContextMenuEvent<TRow>>;
    get onDidFocus(): Event<void>;
    get onDidBlur(): Event<void>;
    get scrollTop(): number;
    set scrollTop(scrollTop: number);
    get scrollLeft(): number;
    set scrollLeft(scrollLeft: number);
    get scrollHeight(): number;
    get renderHeight(): number;
    get onDidDispose(): Event<void>;
    constructor(user: string, container: HTMLElement, virtualDelegate: ITableVirtualDelegate<TRow>, columns: ITableColumn<TRow, TCell>[], renderers: ITableRenderer<TCell, unknown>[], _options?: ITableOptions<TRow>);
    updateOptions(options: ITableOptionsUpdate): void;
    splice(start: number, deleteCount: number, elements?: readonly TRow[]): void;
    rerender(): void;
    row(index: number): TRow;
    indexOf(element: TRow): number;
    get length(): number;
    getHTMLElement(): HTMLElement;
    layout(height?: number, width?: number): void;
    triggerTypeNavigation(): void;
    style(styles: ITableStyles): void;
    domFocus(): void;
    setAnchor(index: number | undefined): void;
    getAnchor(): number | undefined;
    getSelectedElements(): TRow[];
    setSelection(indexes: number[], browserEvent?: UIEvent): void;
    getSelection(): number[];
    setFocus(indexes: number[], browserEvent?: UIEvent): void;
    focusNext(n?: number, loop?: boolean, browserEvent?: UIEvent): void;
    focusPrevious(n?: number, loop?: boolean, browserEvent?: UIEvent): void;
    focusNextPage(browserEvent?: UIEvent): Promise<void>;
    focusPreviousPage(browserEvent?: UIEvent): Promise<void>;
    focusFirst(browserEvent?: UIEvent): void;
    focusLast(browserEvent?: UIEvent): void;
    getFocus(): number[];
    getFocusedElements(): TRow[];
    getRelativeTop(index: number): number | null;
    reveal(index: number, relativeTop?: number): void;
    dispose(): void;
}
export {};
