export interface TableData {
    id: number;
    name: string;
    cells: string[][];
    merges?: MergeInfo[];
    colors?: CellColorInfo[];
    sticky?: StickyInfo;
}
export interface MergeInfo {
    row: number;
    col: number;
    down: number;
    right: number;
}
export interface CellColorInfo {
    pos: PositionCompact;
    bg?: string;
    text?: string;
}
export declare const cellBgColorDefault = "#eeeeee";
export declare const cellTextColorDefault = "#000000";
export interface StickyInfo {
    topIdx?: number;
    topFromColIdx?: number;
    leftIdx?: number;
    leftFromRowIdx?: number;
}
export interface Position {
    row: number;
    col: number;
}
export type PositionCompact = [row: number, col: number];
export type Selection = Position[];
export type Direction = "vertical" | "horizontal";
export type SingleDirection = "left" | "right" | "top" | "bottom";
export interface TableRange {
    type: Direction;
    min: number;
    max: number;
}
export interface TableGap {
    dir: Direction;
    idx: number;
}
export interface MergedCellInfo extends Position {
    fromMerge: MergeInfo;
}
export interface CellShown {
    content: string;
    position: Position;
    rowspan?: number;
    colspan?: number;
    bgColor?: string;
    textColor?: string;
}
export declare class Table implements TableData {
    id: number;
    name: string;
    cells: string[][];
    cellsShown: CellShown[][];
    merges: MergeInfo[];
    merged: MergedCellInfo[];
    colors: CellColorInfo[];
    sticky: StickyInfo;
    rowCount: number;
    colCount: number;
    constructor(data: TableData);
    output(): CellShown[][];
    getData(): TableData;
    replaceData(data: TableData): void;
    refreshCellShown(): void;
    refreshSize(): void;
    totalRefresh(): void;
    rmColorRedundant(): void;
    isMergeDangerous(s: Selection): boolean;
    addMerge(s: Selection): Selection;
    removeMerge(p: Position): void;
    isMergedCell(r: number, c: number): MergedCellInfo | undefined;
    isMergeInfoHead(r: number, c: number): MergeInfo | undefined;
    isValidMergeInfo(m: MergeInfo): boolean;
    rectanglifySelection(s: Selection, related: MergeInfo[]): Selection;
    selectionToMergeInfo(s: Selection): MergeInfo;
    private isSameSelection;
    private posCmp;
    private rangeIncludeWholeMerge;
    private rangeIncludeCell;
    refreshMergedPositions(): void;
    enumerateCells(func: (r: number, c: number) => boolean): void;
    enumerateMergeInfo(s: MergeInfo, func: (r: number, c: number) => boolean): void;
    enumerateRange(r: TableRange, func: (r: number, c: number) => boolean): void;
    enumerateRow(rowIdx: number, func: (r: number, c: number) => boolean): void;
    enumerateCol(colIdx: number, func: (r: number, c: number) => boolean): void;
    getSelectionRange(s: Selection, type: Direction): TableRange;
    isRectSelection(s: Selection): boolean;
    isInsideSingleMergeSelection(s: Selection): boolean;
    expandSelection(s: Selection, direction: Direction, mode: "loose" | "strict"): Selection;
    selectSpecificIdx(direction: Direction, zero_based_idx: number): Selection;
    cellPosMapToShownPos(p: Position, recurSafety?: number): Position;
    shownPosMapToCellPos(p: Position): Position;
    nextCellShown(p: Position): Position | undefined;
    insert(s: Selection | undefined, direction: SingleDirection): Selection;
    private locateGap;
    private newStringArr;
    exchange(gap: TableGap): boolean;
    delete(s: Selection, direction: Direction): Selection;
    rotateTableClockwise(times?: 0 | 1 | 2 | 3, s?: Selection | undefined): Selection;
}
export declare const tableDefaultValue: {
    id: number;
    name: string;
    cells: string[][];
    merges: {
        row: number;
        col: number;
        right: number;
        down: number;
    }[];
};
