import { EventManager } from './EventManager';
import { FocusManager } from './FocusManager';
import { Widget, WidgetConstructor } from './Widget';
import { BidirectionalIterator, WidgetContainer } from './WidgetContainer';
export declare type AcceptedImage = HTMLImageElement | HTMLCanvasElement;
export declare type EscapeCallback = (params: EscapeCommandParams) => number;
export interface ImageOffset {
    x: number;
    y: number;
}
export interface ImageSize {
    width: number;
    height: number;
}
export interface ImageCropParams {
    srcX: number;
    srcY: number;
    srcW: number;
    srcH: number;
}
export interface EscapeCommandParams {
    text: string;
    index: number;
    match: string;
    col: number;
    line: number;
    terminal: Terminal;
}
export interface TileSize {
    columns: number;
    rows: number;
}
export interface TilePosition {
    col: number;
    line: number;
}
export interface CharStyle {
    font?: string;
    offsetX?: number;
    offsetY?: number;
    fg?: string;
    bg?: string;
}
export interface ViewPortOptions {
    top?: number;
    right?: number;
    bottom?: number;
    left?: number;
}
export interface TerminalOptions extends CharStyle {
    tileWidth?: number;
    tileHeight?: number;
    columns?: number;
    rows?: number;
    minColumns?: number;
    minRows?: number;
    maxColumns?: number;
    maxRows?: number;
    autoRender?: boolean;
    autoSize?: boolean;
    cursor?: boolean;
    cursorFrequency?: number;
    decayTime?: number;
    decayInitialAlpha?: number;
    commands?: {
        [key: string]: EscapeCallback;
    };
    viewport?: ViewPortOptions;
    avoidDoubleRendering?: boolean;
    verbose?: boolean;
    clearStyle?: TextTile;
}
export interface TextTile extends CharStyle {
    char: string;
}
export interface ImageTile {
    image: AcceptedImage;
    dstW: number;
    dstH: number;
    offset?: ImageOffset;
    crop?: ImageCropParams;
}
export declare class Terminal implements WidgetContainer {
    static defaultOptions: TerminalOptions;
    readonly focusManager: FocusManager;
    readonly eventManager: EventManager;
    protected readonly options: TerminalOptions;
    private readonly canvas;
    private readonly ctx;
    private readonly buffer;
    private dirtyTiles;
    private readonly decayTiles;
    private decayChange;
    private cursorX;
    private cursorY;
    private cursorVisible;
    private updateCursorInterval;
    private escapeCharactersRegExpString;
    private lastRenderTime;
    private readonly attachedWidgets;
    constructor(canvas: HTMLCanvasElement, options?: TerminalOptions);
    setOptions(options: TerminalOptions): void;
    clear(): void;
    clear(col: number, line: number, width: number, height: number): void;
    render(): void;
    renderAll(): void;
    getViewport(): ViewPortOptions;
    getSize(): TileSize;
    isCursorEnabled(): boolean;
    getCursor(): TilePosition;
    setCursor(col: number, line: number): void;
    moveCursor(dx: number, dy: number): void;
    getTilePosition(x: number, y: number): TilePosition;
    setTextStyle(style: CharStyle): void;
    getTextStyle(): CharStyle;
    setText(text: string, col?: number, line?: number): void;
    setImage(img: AcceptedImage, col?: number, line?: number, offset?: ImageOffset, size?: ImageSize, crop?: ImageCropParams): void;
    getText(size?: number, col?: number, line?: number): string;
    setTiles(tiles: TextTile | TextTile[] | ImageTile | ImageTile[], col?: number, line?: number): void;
    getParent(): WidgetContainer;
    attachWidget<WidgetType extends Widget>(WidgetClass: WidgetConstructor<WidgetType>, options?: any): WidgetType;
    dettachWidget(widget: Widget): boolean;
    getWidgetAt(column: number, line: number): Widget;
    getLeafWidgetAt(column: number, line: number): Widget;
    getWidgetPath(widget: Widget): Array<Widget | WidgetContainer>;
    [Symbol.iterator](startWidget?: Widget | number): BidirectionalIterator<Widget>;
    private iterateTiles;
    private setCursorFrequency;
    private info;
    private addDirtyTile;
    private resize;
}
