import { type RenderableOptions, Renderable } from "../Renderable.js";
import type { OptimizedBuffer } from "../buffer.js";
import { type BorderCharacters, type BorderSides, type BorderSidesConfig, type BorderStyle } from "../lib/index.js";
import { type ColorInput, RGBA } from "../lib/RGBA.js";
import type { RenderContext } from "../types.js";
export interface BoxOptions<TRenderable extends Renderable = BoxRenderable> extends RenderableOptions<TRenderable> {
    backgroundColor?: string | RGBA;
    borderStyle?: BorderStyle;
    border?: boolean | BorderSides[];
    borderColor?: string | RGBA;
    customBorderChars?: BorderCharacters;
    shouldFill?: boolean;
    title?: string;
    titleColor?: string | RGBA;
    titleAlignment?: "left" | "center" | "right";
    bottomTitle?: string;
    bottomTitleAlignment?: "left" | "center" | "right";
    focusedBorderColor?: ColorInput;
    focusable?: boolean;
    gap?: number | `${number}%`;
    rowGap?: number | `${number}%`;
    columnGap?: number | `${number}%`;
}
export declare class BoxRenderable extends Renderable {
    protected _backgroundColor: RGBA;
    protected _border: boolean | BorderSides[];
    protected _borderStyle: BorderStyle;
    protected _borderColor: RGBA;
    protected _focusedBorderColor: RGBA;
    private _customBorderCharsObj;
    protected _customBorderChars?: Uint32Array;
    protected borderSides: BorderSidesConfig;
    shouldFill: boolean;
    protected _title?: string;
    protected _titleColor?: RGBA;
    protected _titleAlignment: "left" | "center" | "right";
    protected _bottomTitle?: string;
    protected _bottomTitleAlignment: "left" | "center" | "right";
    protected _defaultOptions: {
        backgroundColor: string;
        borderStyle: "single";
        border: false;
        borderColor: string;
        shouldFill: true;
        titleAlignment: "left";
        bottomTitleAlignment: "left";
        focusedBorderColor: string;
    };
    constructor(ctx: RenderContext, options: BoxOptions);
    private initializeBorder;
    get customBorderChars(): BorderCharacters | undefined;
    set customBorderChars(value: BorderCharacters | undefined);
    get backgroundColor(): RGBA;
    set backgroundColor(value: RGBA | string | undefined);
    get border(): boolean | BorderSides[];
    set border(value: boolean | BorderSides[]);
    get borderStyle(): BorderStyle;
    set borderStyle(value: BorderStyle);
    get borderColor(): RGBA;
    set borderColor(value: RGBA | string);
    get focusedBorderColor(): RGBA;
    set focusedBorderColor(value: RGBA | string);
    get title(): string | undefined;
    set title(value: string | undefined);
    get titleColor(): RGBA | undefined;
    set titleColor(value: string | RGBA | undefined);
    get titleAlignment(): "left" | "center" | "right";
    set titleAlignment(value: "left" | "center" | "right");
    get bottomTitle(): string | undefined;
    set bottomTitle(value: string | undefined);
    get bottomTitleAlignment(): "left" | "center" | "right";
    set bottomTitleAlignment(value: "left" | "center" | "right");
    protected renderSelf(buffer: OptimizedBuffer): void;
    protected getScissorRect(): {
        x: number;
        y: number;
        width: number;
        height: number;
    };
    private applyYogaBorders;
    private applyYogaGap;
    set gap(gap: number | `${number}%` | undefined);
    set rowGap(rowGap: number | `${number}%` | undefined);
    set columnGap(columnGap: number | `${number}%` | undefined);
}
