import { RTETableBlock } from '../dto/table-block';
import { RTETableCellBlock } from '../dto/table-cell-block';
import { InsertTableColumnAction } from '../actions/insert-table-column-action';
import { RTETableHeadCellBlock } from '../dto/table-head-cell-block';
import { TableColumnStrategy } from './table-column-strategy.abstract';
export declare type InsertPosition = {
  anchorCell: RTETableCellBlock | RTETableHeadCellBlock;
  templateCell: RTETableCellBlock | RTETableHeadCellBlock;
  before: boolean;
};
/**
 * Strategy to handle the insertion of a table column into the RTETable.
 */
export declare class InsertTableColumnStrategy extends TableColumnStrategy<InsertTableColumnAction> {
  /**
   * @inheritDoc
   */
  protected handleAction(action: InsertTableColumnAction, target: RTETableBlock): void;
  /**
   * Find a spanning cell that should absorb the inserted logical column by increasing colspan.
   *
   * @param {RTETableRowBlock} row - The row to check.
   * @param {number} rowIndex - The row index in the grid.
   * @param {number} targetCol - The target logical column.
   * @param {string[][]} tableGrid - The table grid.
   * @param {InsertTableColumnDirection} insertDirection - Insert direction.
   * @param {Set<string>} selectedCellIds - The set of selected cell IDs.
   * @param {boolean} hasSelectedCellInsideTargetCol - Whether any selected merged cell covers the target column internally.
   * @returns {Nullable<RTETableCellBlock | RTETableHeadCellBlock>} Expandable cell or null.
   */
  private findExpandableCell;
  /**
   * Check whether any selected merged cell covers the target column internally.
   *
   * @param {RTETableRowBlock[]} allRows - All table rows.
   * @param {string[][]} tableGrid - The 2D grid representation of the table.
   * @param {number} targetCol - The target logical column.
   * @param {Set<string>} selectedCellIds - The set of selected cell IDs.
   * @returns {boolean} True if any selected cell internally covers the target column.
   */
  private hasSelectedCellInsideTargetColumn;
  /**
   * Find the correct cell and position to insert a new cell in a row.
   *
   * @param {RTETableRowBlock} row - The row to insert into.
   * @param {number} rowIndex - The index of the row.
   * @param {number} targetCol - The target logical column position.
   * @param {string[][]} tableGrid - The 2D grid representation of the table.
   * @param {RTETableRowBlock[]} allRows - All table rows.
   * @returns {InsertPosition | null} The insert position or null.
   */
  private findInsertPosition;
  /**
   * Generate a new table cell based on the original cell type.
   *
   * @param {RTETableCellBlock | RTETableHeadCellBlock} originalCell The original table cell block to base the new cell on.
   * @returns {RTETableCellBlock | RTETableHeadCellBlock} The newly generated table cell block.
   */
  private generateTableCell;
}
