import { ModelNode, ModelNodeOptions } from './ModelNode';
import { RawElement } from '../types/raw';
export interface ModelGroupOptions<T = ModelNode | RawElement> extends ModelNodeOptions {
    children?: T[];
}
/**
 * 文档树容器节点基类
 * 为有子节点的容器（如段落、表格等）提供子节点管理接口
 *
 * @template T - 子节点的类型
 */
export declare abstract class ModelGroup<T = ModelNode | RawElement> extends ModelNode {
    children: T[];
    constructor(options: ModelGroupOptions<T>);
    /**
     * 在指定位置插入子节点
     * @param index - 插入位置的索引
     * @param child - 要插入的子节点
     */
    insertChildAt(index: number, child: T): void;
    /**
     * 添加子节点到末尾
     * @param child - 要添加的子节点
     */
    appendChild(child: T): void;
    /**
     * 在指定位置删除子节点
     * @param index - 删除位置的索引
     * @returns 被删除的子节点
     */
    removeChildAt(index: number): T | undefined;
    /**
     * 删除指定的子节点
     * @param child - 要删除的子节点
     * @returns 被删除的子节点在数组中的索引，-1 表示未找到
     */
    removeChild(child: T): number;
    /**
     * 获取子节点的索引
     * @param child - 要查询的子节点
     * @returns 子节点的索引，-1 表示未找到
     */
    indexOfChild(child: T): number;
    /**
     * 获取指定索引的子节点
     * @param index - 子节点的索引
     * @returns 子节点，如果索引无效则返回 undefined
     */
    getChildAt(index: number): T | undefined;
    /**
     * 获取第一个子节点
     * @returns 第一个子节点，如果没有子节点则返回 undefined
     */
    getFirstChild(): T | undefined;
    /**
     * 获取最后一个子节点
     * @returns 最后一个子节点，如果没有子节点则返回 undefined
     */
    getLastChild(): T | undefined;
    /**
     * 在指定子节点之后插入新节点
     * @param reference - 参考子节点
     * @param child - 要插入的子节点
     * @returns 是否成功插入
     */
    insertAfter(reference: T, child: T): boolean;
    /**
     * 在指定子节点之前插入新节点
     * @param reference - 参考子节点
     * @param child - 要插入的子节点
     * @returns 是否成功插入
     */
    insertBefore(reference: T, child: T): boolean;
    /**
     * 替换指定位置的子节点
     * @param index - 要替换的子节点索引
     * @param newChild - 新的子节点
     * @returns 被替换的子节点
     */
    replaceChildAt(index: number, newChild: T): T;
    /**
     * 替换指定的子节点
     * @param oldChild - 要被替换的子节点
     * @param newChild - 新的子节点
     * @returns 是否成功替换
     */
    replaceChild(oldChild: T, newChild: T): boolean;
    /**
     * 获取所有子节点
     */
    getChildren(): T[];
    /**
     * 获取子节点数量
     */
    getChildrenCount(): number;
    /**
     * 清空所有子节点
     */
    clearChildren(): void;
    /**
     * 检查是否包含指定子节点
     */
    hasChild(child: T): boolean;
    /**
     * 克隆自身但不包含子节点
     * @param options 可选的属性覆盖
     * @returns 克隆后的新实例（子节点为空）
     */
    cloneWithoutChildren<U extends this>(this: U, options?: Partial<U>): U;
}
