import { type RenderableOptions, Renderable } from "../Renderable.js";
import type { KeyEvent, PasteEvent } from "../lib/KeyHandler.js";
import type { RenderContext } from "../types.js";
import type { OptimizedBuffer } from "../buffer.js";
import { type Selection } from "../lib/selection.js";
export type EmbeddedTerminalDataSource = "input" | "response";
export interface EmbeddedTerminalOptions extends RenderableOptions<EmbeddedTerminalRenderable> {
    cols?: number;
    rows?: number;
    maxScrollback?: number;
    onData?: (data: Uint8Array, source: EmbeddedTerminalDataSource) => void;
    onTerminalResize?: (cols: number, rows: number) => void;
    onScreenChange?: () => void;
    selectable?: boolean;
}
export type EmbeddedTerminalScreen = {
    text: string;
    lines: string[];
    columns: number;
    rows: number;
    cursor: {
        x: number;
        y: number;
        visible: boolean;
    };
};
export declare class EmbeddedTerminalRenderable extends Renderable {
    selectable: boolean;
    private readonly lib;
    private handle;
    private _onData?;
    private _onTerminalResize?;
    private _onScreenChange?;
    private keyreleaseHandler;
    private hadRenderHooks;
    private selection;
    constructor(ctx: RenderContext, options: EmbeddedTerminalOptions);
    get onData(): ((data: Uint8Array, source: EmbeddedTerminalDataSource) => void) | undefined;
    set onData(value: ((data: Uint8Array, source: EmbeddedTerminalDataSource) => void) | undefined);
    get onTerminalResize(): ((cols: number, rows: number) => void) | undefined;
    set onTerminalResize(value: ((cols: number, rows: number) => void) | undefined);
    get onScreenChange(): (() => void) | undefined;
    set onScreenChange(value: (() => void) | undefined);
    screen(): EmbeddedTerminalScreen;
    write(data: string | Uint8Array): void;
    invalidate(): void;
    encodeKey(key: KeyEvent): Uint8Array;
    encodePaste(bytes: Uint8Array): Uint8Array;
    shouldStartSelection(x: number, y: number): boolean;
    onSelectionChanged(selection: Selection | null): boolean;
    hasSelection(): boolean;
    getSelectedText(): string;
    focus(): void;
    blur(): void;
    handleKeyPress(key: KeyEvent): boolean;
    handlePaste(event: PasteEvent): void;
    render(buffer: OptimizedBuffer, deltaTime: number): void;
    protected onResize(width: number, height: number): void;
    protected renderSelf(buffer: OptimizedBuffer): void;
    protected destroySelf(): void;
    protected onRemove(): void;
    private setupMouse;
    private forwardMouse;
    private flushResponses;
    private removeKeyreleaseHandler;
    private send;
}
