import { Terminal, TilePosition, TileSize } from './Terminal';
import { WidgetContainer } from './WidgetContainer';
export declare type WidgetConstructor<WidgetClass> = new (terminal: Terminal, options?: any, parent?: WidgetContainer) => WidgetClass;
export interface WidgetOptions {
    col?: number;
    line?: number;
    width?: number;
    height?: number;
    focusable?: boolean;
    tabIndex?: number;
}
export declare abstract class Widget<OptionsType extends WidgetOptions = WidgetOptions> {
    static defaultOptions: WidgetOptions;
    protected terminal: Terminal;
    protected parent?: WidgetContainer;
    protected options: OptionsType;
    protected focused: boolean;
    protected allocated: boolean;
    constructor(terminal: Terminal, options?: OptionsType, parent?: WidgetContainer);
    destruct(): void;
    getParent(): WidgetContainer;
    setOptions(options: OptionsType): void;
    getSize(): TileSize;
    getPosition(): TilePosition;
    isAt(column: number, line: number): boolean;
    isFocusable(): boolean;
    focus(): boolean;
    blur(): boolean;
    isFocused(): boolean;
    abstract render(): void;
    protected abstract updateOptions(changedOptions: OptionsType): void;
}
