import { RawElement } from '../types/raw';
import { Wtr } from './Wtr';
import { Wp } from './Wp';
import { ModelGroup, ModelGroupOptions } from '../base';
import { Wtbl } from './Wtbl';
/**
 * w:tc 表格单元格
 */
export declare class Wtc extends ModelGroup {
    name: 'w:tc';
    type: "element";
    parent?: Wtr;
    tcPrRaw?: RawElement;
    colspan?: number;
    rowspan?: number;
    mergeFromId?: string;
    mergeId?: string;
    repeatingId?: string;
    boundedId?: string;
    boundedItemId?: string;
    vMergeType?: 'restart' | 'continue';
    constructor(options: ModelGroupOptions & {
        tcPrRaw?: RawElement;
        colspan?: number;
        rowspan?: number;
        mergeFromId?: string;
        mergeId?: string;
        repeatingId?: string;
        boundedId?: string;
        boundedItemId?: string;
        vMergeType?: 'restart' | 'continue';
    });
    get table(): Wtbl;
    get isMerged(): boolean;
    get contents(): Wp[];
    get firstContent(): Wp | undefined;
    get lastContent(): Wp | undefined;
    /**
     * 查找当前单元格对应的区域
     * @returns
     */
    getRegion(): Wtbl['regions'][number] | undefined;
    /**
     * 清空单元格：清空第一个段落的子元素，移除其余段落
     * @description 保留第一个段落，删除其他段落，使单元格恢复到初始状态
     */
    empty(): void;
    /**
     * 从 XML JSON 创建单元格（返回数组，因为 colspan 会产生多个单元格）
     */
    static fromXmlJson(tcRaw: RawElement): Wtc[];
    /**
     * 转换为 XML JSON
     * 结构：w:tc
     *   ├── w:tcPr（如果存在）
     *   └── w:p（所有段落子元素）
     */
    toXmlJson(): RawElement;
    /**
     * 从模板创建单元格
     * @param width 单元格宽度（DXA/缇）
     * @returns Wtc 实例
     */
    static fromTemplate(width: number): Wtc;
    /**
     * 将当前单元格向下向右扩展，合并指定数量的行和列
     *
     * 当前单元格作为合并的源单元格（master cell），覆盖范围内的其他单元格将被标记为被合并单元格
     *
     * @param rowSpan 要合并的行数（包括当前行），必须大于等于1
     * @param colSpan 要合并的列数（包括当前列），必须大于等于1
     * @returns 返回this，支持链式调用
     * @throws Error 如果rowSpan或colSpan小于1，或无法确定当前单元格在表格中的位置
     *
     * @remarks
     * 执行流程：
     * 1. 设置当前单元格为源单元格（rowspan、colspan、mergeFromId=undefined）
     * 2. 根据当前索引和span范围遍历所有被合并的单元格
     * 3. 被合并单元格设置为：rowspan=1, colspan=1, mergeFromId=当前单元格ID
     *
     * @example
     * // 从单元格(1,1)合并2行2列
     * const cell = table.rows[1].cells[0];
     * cell.merge(2, 2);  // rowspan=2, colspan=2
     *
     * @example
     * // 支持链式调用
     * cell.merge(2, 3).merge(1, 2);
     */
    merge(rowSpan: number, colSpan: number): this;
    /**
     * 取消当前单元格的合并状态
     *
     * 将覆盖范围内的所有单元格恢复为独立单元格状态。覆盖范围由当前单元格的rowspan和colspan决定。
     *
     * @throws Error 如果当前单元格不是合并源（没有rowspan或colspan），或无法确定当前单元格在表格中的位置
     *
     * @remarks
     * 执行流程：
     * 1. 验证当前单元格是合并源（必须有rowspan或colspan）
     * 2. 计算覆盖范围：从当前位置到(startRow + rowSpan - 1, startCol + colSpan - 1)
     * 3. 遍历覆盖范围内的所有单元格，统一重置为：
     *    - rowspan = 1（默认高度）
     *    - colspan = 1（默认宽度）
     *    - mergeFromId = undefined（取消合并关系）
     *
     * @example
     * // 取消一个2×2的合并
     * const cell = table.rows[1].cells[0];  // rowspan=2, colspan=2
     * cell.unmerge();  // 覆盖范围内的所有单元格恢复为独立状态
     */
    unmerge(): void;
}
