import { Renderable, type RenderableOptions } from "../Renderable.js";
import { Selection, type LocalSelectionBounds } from "../lib/selection.js";
import { TextBuffer } from "../text-buffer.js";
import { TextBufferView } from "../text-buffer-view.js";
import { RGBA } from "../lib/RGBA.js";
import { type RenderContext, type LineInfoProvider } from "../types.js";
import type { OptimizedBuffer } from "../buffer.js";
import type { LineInfo } from "../zig.js";
import { SyntaxStyle } from "../syntax-style.js";
export interface TextBufferOptions extends RenderableOptions<TextBufferRenderable> {
    fg?: string | RGBA;
    bg?: string | RGBA;
    selectionBg?: string | RGBA;
    selectionFg?: string | RGBA;
    selectable?: boolean;
    attributes?: number;
    wrapMode?: "none" | "char" | "word";
    tabIndicator?: string | number;
    tabIndicatorColor?: string | RGBA;
    truncate?: boolean;
}
export declare abstract class TextBufferRenderable extends Renderable implements LineInfoProvider {
    selectable: boolean;
    protected _defaultFg: RGBA;
    protected _defaultBg: RGBA;
    protected _defaultAttributes: number;
    protected _selectionBg: RGBA | undefined;
    protected _selectionFg: RGBA | undefined;
    protected _wrapMode: "none" | "char" | "word";
    protected lastLocalSelection: LocalSelectionBounds | null;
    protected _tabIndicator?: string | number;
    protected _tabIndicatorColor?: RGBA;
    protected _scrollX: number;
    protected _scrollY: number;
    protected _truncate: boolean;
    protected _firstLineOffset: number;
    protected textBuffer: TextBuffer;
    protected textBufferView: TextBufferView;
    protected _textBufferSyntaxStyle: SyntaxStyle;
    protected _defaultOptions: {
        fg: RGBA;
        bg: RGBA;
        selectionBg: undefined;
        selectionFg: undefined;
        selectable: true;
        attributes: number;
        wrapMode: "none" | "char" | "word";
        tabIndicator: undefined;
        tabIndicatorColor: undefined;
        truncate: false;
    };
    constructor(ctx: RenderContext, options: TextBufferOptions);
    protected onMouseEvent(event: any): void;
    protected handleScroll(event: any): void;
    get lineInfo(): LineInfo;
    get lineCount(): number;
    get virtualLineCount(): number;
    get scrollY(): number;
    set scrollY(value: number);
    get scrollX(): number;
    set scrollX(value: number);
    get scrollWidth(): number;
    get scrollHeight(): number;
    get maxScrollY(): number;
    get maxScrollX(): number;
    protected updateViewportOffset(): void;
    get plainText(): string;
    get textLength(): number;
    get fg(): RGBA;
    set fg(value: RGBA | string | undefined);
    get selectionBg(): RGBA | undefined;
    set selectionBg(value: RGBA | string | undefined);
    get selectionFg(): RGBA | undefined;
    set selectionFg(value: RGBA | string | undefined);
    get bg(): RGBA;
    set bg(value: RGBA | string | undefined);
    get attributes(): number;
    set attributes(value: number);
    get wrapMode(): "none" | "char" | "word";
    set wrapMode(value: "none" | "char" | "word");
    get tabIndicator(): string | number | undefined;
    set tabIndicator(value: string | number | undefined);
    get tabIndicatorColor(): RGBA | undefined;
    set tabIndicatorColor(value: RGBA | string | undefined);
    get truncate(): boolean;
    set truncate(value: boolean);
    protected onResize(width: number, height: number): void;
    protected refreshLocalSelection(): boolean;
    private updateLocalSelection;
    protected updateTextInfo(): void;
    private setupMeasureFunc;
    shouldStartSelection(x: number, y: number): boolean;
    onSelectionChanged(selection: Selection | null): boolean;
    getSelectedText(): string;
    hasSelection(): boolean;
    getSelection(): {
        start: number;
        end: number;
    } | null;
    render(buffer: OptimizedBuffer, deltaTime: number): void;
    protected renderSelf(buffer: OptimizedBuffer): void;
    destroy(): void;
    protected onFgChanged(newColor: RGBA): void;
    protected onBgChanged(newColor: RGBA): void;
    protected onAttributesChanged(newAttributes: number): void;
}
