import { Table } from '../view/Table';
/**
 * 表格分页器
 *
 * 功能：将超过最大高度的表格切分成两个表格（当前页和下一页）
 *
 * 核心逻辑：
 * 1. 遍历行，找到超出高度限制的行（切分行）
 * 2. 判断切分行能否行内切分（存在能容纳的单元格内容）
 * 3. 如果能行内切分：将切分行上半部分留在当前页，下半部分移至下一页
 * 4. 如果不能行内切分：将整行换页
 * 5. 处理跨页合并单元格：为跨页的源单元格创建副本（加 _next 后缀）
 * 6. 调整所有合并单元格的 rowspan/colspan 和表格高度
 *
 * @example
 * 原表格（合并单元格跨切分行）：
 * Row 0: Cell A (id="A") + Cell B (mergeFromId="A")
 * Row 1: Cell C (mergeFromId="A") ← 切分行
 *
 * 结果：
 * 当前页: Row 0 原样 + Row 1 上半部分
 * 下一页: 新建 Cell A_next + Row 1 下半部分引用新源单元格
 */
export declare class TableSplitter {
    private readonly table;
    private readonly maxHeight;
    private cellInstanceMap;
    private splitRowIndex;
    private splitCellIndex;
    private accumulatedHeight;
    private curTable?;
    private nextTable?;
    private cellMapping;
    constructor(table: Table, maxHeight: number);
    /**
     * 执行表格切分主流程
     */
    split(): {
        cur?: Table;
        next?: Table;
    };
    /**
     * 检查表格是否超出高度限制
     */
    private needsSplit;
    /**
     * 初始化：构建单元格 ID 引用映射
     * 用于快速查找有 ID 的单元格（源单元格）
     */
    private initialize;
    /**
     * 查找切分点
     *
     * 流程：
     * 1. 遍历行，累积高度
     * 2. 找到超出 maxHeight 的行（切分行）
     * 3. 判断切分行中哪个单元格能容纳第一个段落（行内切分判据）
     * 4. 记录 splitRowIndex 和 splitCellIndex
     */
    private findSplitPoint;
    /**
     * 创建两个新表格（当前页和下一页）
     */
    private createResultTables;
    /**
     * 处理行内切分
     *
     * 流程：
     * 1. 取出原始切分行
     * 2. 创建上行（放在当前页）：高度为剩余可用高度
     * 3. 创建下行（放在当前页）：高度为 0（等待后续内容填充）
     * 4. 复制原始单元格到两行，保持单元格属性
     */
    private splitRow;
    /**
     * 复制切分点之前的完整行到当前表格
     * 这些行完全落在当前页范围内，无需切分
     */
    private copyRowsBeforeSplit;
    /**
     * 复制切分点之后的行到下一页表格
     *
     * 关键处理：跨页合并单元格
     * - 如果单元格有 mergeFromId 且该源单元格未在下一页创建
     * - 则创建新源单元格，后续被合并单元格都引用这个新源
     */
    private copyRemainingRows;
    /**
     * 调整表格（合并单元格和高度）
     */
    private adjustTables;
    /**
     * 记录原始单元格与新单元格的映射关系
     *
     * 用于后续 fillCells() 中的内容分配
     * - 映射关系：originalCellId -> [newCell1, newCell2, ...]
     * - 长度为 1：单元格未被切分
     * - 长度为 2：单元格被切分成上下两部分
     */
    private recordCellMapping;
    /**
     * 回填单元格内容
     *
     * 逻辑：
     * - 未切分（长度=1）：直接将原内容复制到新单元格
     * - 被切分（长度=2）：根据上行能容纳的高度，分配段落
     */
    private fillCells;
    /**
     * 重新生成下一页表格首行单元格的 id
     * 并更新后续行中引用这些单元格的 mergeFromId
     *
     * 逻辑：
     * 1. 遍历下一页表格首行，为源单元格生成新 id
     * 2. 建立旧 id 到新 id 的映射
     * 3. 遍历下一页表格其他行，更新 mergeFromId
     */
    private regenerateNextTableFirstRowIds;
    private provideCellOptions;
}
/**
 * 工具函数：执行表格切分
 *
 * @param table 要切分的表格
 * @param maxHeight 当前页最大高度
 * @returns { cur, next } - 当前页表格和下一页表格
 *
 * @example
 * const { cur, next } = splitTableByHeight(table, 500);
 */
export declare function splitTableByHeight(table: Table, maxHeight: number): {
    cur?: Table;
    next?: Table;
};
