import { type OutputTransformer } from './render-node-to-output.js';
import { type ScreenSelection, type FrameCell, type FrameBoundary } from './frame-controller.js';
import { type TextBoundary } from './wrap-text.js';
/**
"Virtual" output class

Handles the positioning and saving of the output of each node in the tree. Also responsible for applying transformations to each character of the output.

Used to generate the final output of all nodes before writing it to actual output stream (e.g. stdout)
*/
type Options = {
    width: number;
    height: number;
};
type Clip = {
    x1: number | undefined;
    x2: number | undefined;
    y1: number | undefined;
    y2: number | undefined;
};
export default class Output {
    width: number;
    height: number;
    private readonly operations;
    private readonly caches;
    constructor(options: Options);
    write(x: number, y: number, text: string, options: {
        transformers: OutputTransformer[];
        selectable?: boolean;
        semantic?: {
            flowId: number;
            selectable: boolean;
            selectableRows: boolean[];
            boundaries: Array<TextBoundary | null>;
        };
    }): void;
    clip(clip: Clip): void;
    unclip(): void;
    get(selection?: ScreenSelection | null): {
        output: string;
        height: number;
        cells: FrameCell[][];
        boundaries: Array<Array<FrameBoundary | null>>;
    };
}
export {};
