import { RawElement } from '../types/raw';
import { Wtr } from './Wtr';
import { Wp } from './Wp';
import { ModelGroup, ModelGroupOptions } from '../base';
import { Wtbl } from './Wtbl';
import { SubTableBodyType, SubTableItemType, TableHeaderRefType, WtcHeaderRef, WtcSubTableItemRef, WtcSubTableRef } from './wtcRegionRef';
/** 单元格上需随行列复制同步的引用字段 */
export declare const WTC_REF_KEYS: readonly ["mergeId", "subTable", "subTableItem", "header"];
/**
 * w:tc 表格单元格
 */
export declare class Wtc extends ModelGroup {
    name: 'w:tc';
    type: "element";
    parent?: Wtr;
    tcPrRaw?: RawElement;
    colspan?: number;
    rowspan?: number;
    backgroundColor?: string;
    mergeFromId?: string;
    mergeId?: string;
    /** 子表主体（动态表 / 固定表 / 二维表 / 检验表） */
    subTable?: WtcSubTableRef;
    /** 子表内数据分组或数据关联 */
    subTableItem?: WtcSubTableItemRef;
    /** 表头 / 子表表头 */
    header?: WtcHeaderRef;
    vMergeType?: 'restart' | 'continue';
    tempMergeId?: string;
    constructor(options: ModelGroupOptions & {
        tcPrRaw?: RawElement;
        colspan?: number;
        rowspan?: number;
        mergeFromId?: string;
        mergeId?: string;
        subTable?: WtcSubTableRef;
        subTableItem?: WtcSubTableItemRef;
        header?: WtcHeaderRef;
        backgroundColor?: string;
        vMergeType?: 'restart' | 'continue';
        tempMergeId?: string;
    });
    get table(): Wtbl;
    /** 是否是被合并单元格 */
    get isMergeSlave(): boolean;
    /** 是否是合并起始单元格 */
    get isMergeStart(): boolean;
    get contents(): Wp[];
    /** 单元格垂直对齐（w:tcPr/w:vAlign） */
    get vAlign(): 'top' | 'center' | 'bottom' | undefined;
    get firstContent(): Wp | undefined;
    get lastContent(): Wp | undefined;
    get cellMergeInfo(): {
        /** 是否属于合并单元格(不包括起点的) */
        isMerged: boolean;
        /** 合并方向 */
        direction: 'horizontal' | 'vertical' | null;
        /** 当前单元格在 XML 生成时是否需要跳过 */
        skip: boolean;
        /** 合并来源位置（左上角） */
        from: null | {
            row: number;
            col: number;
        };
        /** 合并区域尺寸 */
        span: null | {
            rows: number;
            cols: number;
        };
        /**
         * 当前单元格是否是“某一行的起点”
         * 用于决定是否输出 w:gridSpan
         */
        isRowStart: boolean;
        /**
         * 当前单元格是否是“整个合并区域的起点（左上角）”
         * 用于决定 vMerge restart
         */
        isRoot: boolean;
    };
    setSubTable(type: SubTableBodyType, regionId: string): void;
    clearSubTable(): void;
    setSubTableItem(type: SubTableItemType, regionId: string): void;
    clearSubTableItem(): void;
    setHeaderRef(type: TableHeaderRefType, regionId: string): void;
    clearHeaderRef(): void;
    /** 按 regionId 清除单元格上的子表 / 表头引用 */
    clearRegionRef(regionId: string): void;
    /**
     * 查找当前单元格对应的区域
     * @returns
     */
    getRegion(): Wtbl['regions'][number] | undefined;
    /**
     * 清空单元格：清空第一个段落的子元素，移除其余段落
     * @description 保留第一个段落，删除其他段落，使单元格恢复到初始状态
     */
    empty(): void;
    clearFieldRuns(): void;
    /**
     * 从 XML JSON 创建单元格（返回数组，因为 colspan 会产生多个单元格）
     */
    static fromXmlJson(tcRaw: RawElement): Wtc[];
    /**
     * 转换为 XML JSON
     * 结构：w:tc
     *   ├── w:tcPr（如果存在）
     *   └── w:p（所有段落子元素）
     */
    toXmlJson(): RawElement | null;
    private buildTcPr;
    private static normalizeWordColor;
    /**
     * 从模板创建单元格
     * @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, options?: {
        skipConsistency?: boolean;
    }): 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(options?: {
        skipConsistency?: boolean;
    }): void;
}
