import { TableBorderInfoProvider } from '../../layout-formatter/table/borders/border-helper';
import { BorderInfo } from '../../model/borders/border-info';
import { ColorProvider } from '../../model/color/color-provider';
import { SubDocument } from '../../model/sub-document';
import { Table } from '../../model/tables/main-structures/table';
import { TableCell } from '../../model/tables/main-structures/table-cell';
import { SelectedTableInfo } from '../../selection/selected-cells-engine';
import { CommandBase, CommandSimpleOptions } from '../command-base';
import { SimpleCommandState } from '../command-states';
export declare abstract class ToggleTableCellsBorderCommandBase extends CommandBase<SimpleCommandState> {
    affectNeighbours: boolean;
    affectInner: boolean;
    affectOuter: boolean;
    affectOnStateFlags: TableBorderGridCellInfo;
    patternBorder: BorderInfo;
    get colorProvider(): ColorProvider;
    static isBorderVisible(border: BorderInfo): boolean;
    DEPRECATEDConvertOptionsParameter(parameter: any): BorderInfo;
    protected getRelatedCommands(): Record<number, boolean>;
    getState(options?: CommandSimpleOptions<BorderInfo>): SimpleCommandState;
    isEnabled(): boolean;
    isChecked(tableInfo: SelectedTableInfo): boolean;
    executeCore(state: SimpleCommandState, options: CommandSimpleOptions<BorderInfo>): boolean;
    private isCheckedInParticallyTableSelection;
    protected shouldApplyTableBorderForCollapsedSelection(tableInfo: SelectedTableInfo, grid: TableBorderGridCell[][]): boolean;
    protected getTableCheckedStateWhenNoAffectedCells(_table: Table): boolean | null;
    protected hasAffectedCells(grid: TableBorderGridCell[][]): boolean;
    createCellBorderGrid(table: Table, tableInfo: SelectedTableInfo, tableBordersInfo: TableBorderInfoProvider): TableBorderGridCell[][];
    private createCellBorderGridCore;
    private checkBottomSibling;
    private static checkVSiblingSelected;
    private static checkVSiblingUnselected;
    private checkLeftRightSiblingSelected;
    protected abstract checkBorderActiveInPartialSelection(table: Table, grid: TableBorderGridCell[][], currentCell: TableBorderGridCell, rowIndex: number, columnIndex: number, tableBordersInfo: TableBorderInfoProvider): boolean;
    protected abstract applyBorderToTable(subDocument: SubDocument, table: Table, borderInfo: BorderInfo): any;
    protected abstract applyBorderToCell(subDocument: SubDocument, table: Table, gridCell: TableBorderGridCell, rowIndex: number, cellIndex: number, borderInfo: BorderInfo): any;
    protected getActualLeftBorder(tableBordersInfo: TableBorderInfoProvider, table: Table, rowIndex: number, columnIndex: number): BorderInfo;
    protected getActualRightBorder(tableBordersInfo: TableBorderInfoProvider, table: Table, rowIndex: number, columnIndex: number): BorderInfo;
    protected getActualTopBorder(grid: TableBorderGridCell[][], currentCell: TableBorderGridCell, tableBordersInfo: TableBorderInfoProvider, table: Table, rowIndex: number, columnIndex: number): BorderInfo;
    protected getActualBottomBorder(grid: TableBorderGridCell[][], currentCell: TableBorderGridCell, tableBordersInfo: TableBorderInfoProvider, table: Table, rowIndex: number, columnIndex: number): BorderInfo;
}
export declare abstract class ToggleSingleTableCellsBorderCommand extends ToggleTableCellsBorderCommandBase {
    abstract getActualCellBorder(table: Table, grid: TableBorderGridCell[][], currentCell: TableBorderGridCell, rowIndex: number, columnIndex: number, tableBordersInfo: TableBorderInfoProvider): BorderInfo;
    protected checkBorderActiveInPartialSelection(table: Table, grid: TableBorderGridCell[][], currentCell: TableBorderGridCell, rowIndex: number, columnIndex: number, tableBordersInfo: TableBorderInfoProvider): boolean;
    getGeneralizedBorder(): BorderInfo;
}
export declare class ToggleTableCellsTopBorderCommand extends ToggleSingleTableCellsBorderCommand {
    affectOnStateFlags: TableBorderGridCellInfo;
    affectInner: boolean;
    getActualCellBorder(table: Table, grid: TableBorderGridCell[][], currentCell: TableBorderGridCell, rowIndex: number, columnIndex: number, tableBordersInfo: TableBorderInfoProvider): BorderInfo;
    protected applyBorderToTable(subDocument: SubDocument, table: Table, borderInfo: BorderInfo): void;
    protected applyBorderToCell(subDocument: SubDocument, table: Table, gridCell: TableBorderGridCell, rowIndex: number, cellIndex: number, borderInfo: BorderInfo): void;
}
export declare class ToggleTableCellsRightBorderCommand extends ToggleSingleTableCellsBorderCommand {
    affectInner: boolean;
    affectOnStateFlags: TableBorderGridCellInfo;
    getActualCellBorder(table: Table, _grid: TableBorderGridCell[][], _currentCell: TableBorderGridCell, rowIndex: number, columnIndex: number, tableBordersInfo: TableBorderInfoProvider): BorderInfo;
    protected applyBorderToTable(subDocument: SubDocument, table: Table, borderInfo: BorderInfo): void;
    protected applyBorderToCell(subDocument: SubDocument, table: Table, gridCell: TableBorderGridCell, rowIndex: number, cellIndex: number, borderInfo: BorderInfo): void;
}
export declare class ToggleTableCellsBottomBorderCommand extends ToggleSingleTableCellsBorderCommand {
    affectInner: boolean;
    affectOnStateFlags: TableBorderGridCellInfo;
    getActualCellBorder(table: Table, grid: TableBorderGridCell[][], currentCell: TableBorderGridCell, rowIndex: number, columnIndex: number, tableBordersInfo: TableBorderInfoProvider): BorderInfo;
    protected applyBorderToTable(subDocument: SubDocument, table: Table, borderInfo: BorderInfo): void;
    protected applyBorderToCell(subDocument: SubDocument, table: Table, gridCell: TableBorderGridCell, rowIndex: number, cellIndex: number, borderInfo: BorderInfo): void;
}
export declare class ToggleTableCellsLeftBorderCommand extends ToggleSingleTableCellsBorderCommand {
    affectInner: boolean;
    affectOnStateFlags: TableBorderGridCellInfo;
    getActualCellBorder(table: Table, _grid: TableBorderGridCell[][], _currentCell: TableBorderGridCell, rowIndex: number, columnIndex: number, tableBordersInfo: TableBorderInfoProvider): BorderInfo;
    protected applyBorderToTable(subDocument: SubDocument, table: Table, borderInfo: BorderInfo): void;
    protected applyBorderToCell(subDocument: SubDocument, table: Table, gridCell: TableBorderGridCell, rowIndex: number, cellIndex: number, borderInfo: BorderInfo): void;
}
export declare class ToggleTableCellAllBordersCommand extends ToggleTableCellsBorderCommandBase {
    affectOnStateFlags: TableBorderGridCellInfo;
    protected checkBorderActiveInPartialSelection(table: Table, grid: TableBorderGridCell[][], currentCell: TableBorderGridCell, rowIndex: number, columnIndex: number, tableBordersInfo: TableBorderInfoProvider): boolean;
    protected applyBorderToTable(subDocument: SubDocument, table: Table, borderInfo: BorderInfo): void;
    protected applyBorderToCell(subDocument: SubDocument, table: Table, gridCell: TableBorderGridCell, rowIndex: number, cellIndex: number, borderInfo: BorderInfo): void;
}
export declare class ToggleTableCellNoBorderCommand extends ToggleTableCellAllBordersCommand {
    isChecked(_tableInfo: SelectedTableInfo): boolean;
    protected applyBorderToTable(subDocument: SubDocument, table: Table, _borderInfo: BorderInfo): void;
    protected applyBorderToCell(subDocument: SubDocument, table: Table, gridCell: TableBorderGridCell, rowIndex: number, cellIndex: number, _borderInfo: BorderInfo): void;
}
export declare class ToggleTableCellInsideBordersCommand extends ToggleTableCellsBorderCommandBase {
    affectOuter: boolean;
    affectNeighbours: boolean;
    affectOnStateFlags: TableBorderGridCellInfo;
    protected getTableCheckedStateWhenNoAffectedCells(table: Table): boolean | null;
    protected checkBorderActiveInPartialSelection(table: Table, grid: TableBorderGridCell[][], currentCell: TableBorderGridCell, rowIndex: number, columnIndex: number, tableBordersInfo: TableBorderInfoProvider): boolean;
    protected applyBorderToTable(subDocument: SubDocument, table: Table, borderInfo: BorderInfo): void;
    protected applyBorderToCell(subDocument: SubDocument, table: Table, gridCell: TableBorderGridCell, rowIndex: number, cellIndex: number, borderInfo: BorderInfo): void;
}
export declare class ToggleTableCellInsideHorizontalBordersCommand extends ToggleSingleTableCellsBorderCommand {
    affectOuter: boolean;
    affectNeighbours: boolean;
    affectOnStateFlags: TableBorderGridCellInfo;
    protected getTableCheckedStateWhenNoAffectedCells(table: Table): boolean | null;
    getActualCellBorder(table: Table, grid: TableBorderGridCell[][], currentCell: TableBorderGridCell, rowIndex: number, columnIndex: number, tableBordersInfo: TableBorderInfoProvider): BorderInfo;
    protected checkBorderActiveInPartialSelection(table: Table, grid: TableBorderGridCell[][], currentCell: TableBorderGridCell, rowIndex: number, columnIndex: number, tableBordersInfo: TableBorderInfoProvider): boolean;
    protected applyBorderToTable(subDocument: SubDocument, table: Table, borderInfo: BorderInfo): void;
    protected applyBorderToCell(subDocument: SubDocument, table: Table, gridCell: TableBorderGridCell, rowIndex: number, cellIndex: number, borderInfo: BorderInfo): void;
}
export declare class ToggleTableCellInsideVerticalBordersCommand extends ToggleSingleTableCellsBorderCommand {
    affectOuter: boolean;
    affectNeighbours: boolean;
    affectOnStateFlags: TableBorderGridCellInfo;
    protected getTableCheckedStateWhenNoAffectedCells(table: Table): boolean | null;
    getActualCellBorder(table: Table, _grid: TableBorderGridCell[][], currentCell: TableBorderGridCell, rowIndex: number, columnIndex: number, tableBordersInfo: TableBorderInfoProvider): BorderInfo;
    protected checkBorderActiveInPartialSelection(table: Table, grid: TableBorderGridCell[][], currentCell: TableBorderGridCell, rowIndex: number, columnIndex: number, tableBordersInfo: TableBorderInfoProvider): boolean;
    protected applyBorderToTable(subDocument: SubDocument, table: Table, borderInfo: BorderInfo): void;
    protected applyBorderToCell(subDocument: SubDocument, table: Table, gridCell: TableBorderGridCell, rowIndex: number, cellIndex: number, borderInfo: BorderInfo): void;
}
export declare class ToggleTableCellOutsideBordersCommand extends ToggleTableCellsBorderCommandBase {
    affectInner: boolean;
    affectOnStateFlags: TableBorderGridCellInfo;
    protected checkBorderActiveInPartialSelection(table: Table, grid: TableBorderGridCell[][], currentCell: TableBorderGridCell, rowIndex: number, columnIndex: number, tableBordersInfo: TableBorderInfoProvider): boolean;
    protected applyBorderToTable(subDocument: SubDocument, table: Table, borderInfo: BorderInfo): void;
    protected applyBorderToCell(subDocument: SubDocument, table: Table, gridCell: TableBorderGridCell, rowIndex: number, cellIndex: number, borderInfo: BorderInfo): void;
}
export interface TableBorderGridCell {
    cell: TableCell;
    info: TableBorderGridCellInfo;
    selected: boolean;
}
export declare enum TableBorderGridCellInfo {
    None = 0,
    LeftOuter = 1,
    RightOuter = 2,
    BottomOuter = 4,
    TopOuter = 8,
    RightNeighbour = 16,
    TopNeighbour = 32,
    LeftNeighbour = 64,
    BottomNeighbour = 128,
    RightInner = 256,
    TopInner = 512,
    LeftInner = 1024,
    BottomInner = 2048,
    LeftTableOuter = 4096,
    RightTableOuter = 8192,
    TopTableOuter = 16384,
    BottomTableOuter = 32768,
    All = -1
}
