/**
 * DataGrid Integration - 表格初始化集成模块
 *
 * 提供 initDataGrid() 方法，将 AssetMatrix 的 ProgressTableFillerController
 * 与 DataGrid 组件集成，替换原有 fattable 初始化逻辑。
 *
 * 使用方式（在 ProgressTableFillerController 中）：
 * ```typescript
 * public tableInit(tableContainer, isPerspectiveTable = false) {
 *   if (this.props.useCanvasTable) {
 *     this.initDataGrid(tableContainer);
 *   } else {
 *     this.initFattable(tableContainer, isPerspectiveTable);
 *   }
 * }
 * ```
 */
import type { ColumnConfig } from '../core/types';
import type { ITableHeader } from './columnAdapter';
import { type PreprocessedRow } from './rowDataAdapter';
import { DataGridEventAdapter } from './DataGridEventAdapter';
/**
 * DataGrid 初始化配置项
 * 对应 ProgressTableFillerController 的 props 和 fattable 配置
 */
export interface DataGridInitOptions {
    /** 挂载容器元素 */
    container: HTMLElement;
    /** 固定在左侧的列 */
    tableHeadListFixLeft: ITableHeader[];
    /** 非固定的列 */
    tableHeadListRight: ITableHeader[];
    /** 行数据列表 */
    tableDataList: Record<string, any>[];
    /** 行唯一标识字段，默认 'id' */
    rowKey?: string;
    /** 行高，默认 34 */
    rowHeight?: number;
    /** 表头高度，默认 34 */
    headerHeight?: number;
    /** 是否显示底部统计行 */
    showFooter?: boolean;
    /** 列总宽小于表格可视区域宽度时，是否将剩余空间均分到每列（默认 false） */
    autoFillTableWidth?: boolean;
    /** 底部统计行高度，默认 36 */
    footerHeight?: number;
    /** 是否显示斑马纹 */
    striped?: boolean;
    /** 是否是透视子表 */
    isPerspectiveTable?: boolean;
    /** 是否显示复选框列 */
    showCheckbox?: boolean;
    /** 是否显示索引列 */
    showTableIndex?: boolean;
    /** 是否在表头左上角显示全选 checkbox，默认 false */
    showHeaderCheckbox?: boolean;
    /**
     * 索引列模式：
     * - 'auto'：自动模式，行号 = rowIndex + 1（默认）
     * - 'data'：数据驱动模式，行号从行数据的 _tableIndex 字段读取
     */
    tableIndexMode?: 'auto' | 'data';
    /** 是否调试模式 */
    debug?: boolean;
    /** 是否启用内置键盘快捷键监听，默认 false */
    enableKeyboardShortcuts?: boolean;
    /**
     * Whether to disable DataGrid's built-in "click outside to close editing" behavior.
     * When true, the host application is responsible for managing click-outside logic.
     * Default: false.
     */
    disableClickOutside?: boolean;
    /** 主题 */
    theme?: string | Record<string, any>;
    /** WfState Viewer 显示样式：'icon'=图标+文字（默认），'tag'=色块标签 */
    wfStateStyle?: 'icon' | 'tag';
    /** 嵌套表格数据源字段名，默认 '$$pipelineView$$' */
    pipelineViewKey?: string;
    /** 嵌套表格折叠时默认显示行数，默认 3 */
    displayTaskNum?: number;
    /**
     * 分组折叠模式：
     * - 'controlled'：受控模式，由外部通过 onGroupToggle 回调 + loadData 驱动
     * - 'uncontrolled'：非受控模式，DataGrid 内部根据 expanded 状态自行过滤行
     * 默认 'controlled'
     */
    groupToggleMode?: 'controlled' | 'uncontrolled';
    /**
     * 分组维度数（由外部传入，优先级高于行数据遍历推断）。
     * - 0 = 无分组
     * - 1 = 一维分组
     * - 2 = 二维分组
     * - 3 = 三维分组
     * 未传入时退化为遍历行数据推断（旧逻辑）。
     */
    groupDimension?: number;
    /** 业务 props (用于行数据预处理) */
    controllerProps?: Record<string, any>;
    /**
     * 是否启用 TAPD 同步任务名称高亮
     * 当为 true 时，行数据中 tapd_sync_state 处于同步状态的任务名称列将显示 TAPD 蓝色
     */
    tapdInSyncTaskNameHighlight?: boolean;
    /**
     * 嵌套子表数据比对 key 列表（性能优化）。
     * loadData 时比较新旧嵌套数据中这些 key 的值，未变化则复用旧 NestedGrid 实例。
     * 默认 ['id']。
     */
    nestedDataCompareKeys?: string[];
    /**
     * 嵌套子表强制刷新 key 列表（性能优化）。
     * 新嵌套数据中任意一行包含这些 key 且有值时，强制重建 NestedGrid。
     * 默认 []。
     */
    nestedForceRefreshKeys?: string[];
    /** DataGrid 事件回调 */
    callbacks?: DataGridCallbacks;
    /**
     * 自定义 StyleManager Token 覆盖（如字体族）。
     * 传入后会在 DataGrid 初始化和主题切换后自动应用，
     * 使宿主应用可以覆盖默认的 fontFamilyPrimary / fontFamilySystem 等 Token。
     */
    customTokens?: Record<string, any>;
    /**
     * 是否隐藏表头业务图标（TAPD / IOMC / fieldHint / link）。
     * 对齐 DOM 表格的 "显示表头图标" 开关（tableHeaderIconConfigStorage.hideIcon）。
     * 默认 false（显示图标）。
     */
    hideHeaderIcons?: boolean;
}
/**
 * DataGrid 事件回调配置
 * 映射 fattable 配置中的各类回调到 DataGrid 回调
 */
export interface DataGridCallbacks {
    /** 编辑完成 */
    afterEditCell?: (data: any) => void;
    /** 自动填充完成 */
    afterAutofill?: (data: any) => void;
    /** 自定义自动填充逻辑 */
    customAutofill?: (params: any) => void;
    /** autofill 拖拽开始回调 */
    onAutofillStart?: (params: {
        selectionRange: {
            xArr: [number, number];
            yArr: [number, number];
        };
        shiftKey: boolean;
    }) => void;
    /** autofill 拖拽过程回调 */
    onAutofillDragging?: (params: {
        autofillRange: {
            xArr: [number, number];
            yArr: [number, number];
        };
        selectionRange: {
            xArr: [number, number];
            yArr: [number, number];
        };
    }) => void;
    /** 嵌套表格 autofill 拖拽开始回调 */
    onNestedAutofillStart?: (params: {
        parentRowData: any;
        parentColKey: string;
        parentRowIndex: number;
        parentColIndex: number;
        selectionRange: {
            startRow: number;
            startCol: number;
            endRow: number;
            endCol: number;
        };
        shiftKey: boolean;
    }) => void;
    /** 嵌套表格 autofill 拖拽过程回调 */
    onNestedAutofillDragging?: (params: {
        parentRowData: any;
        parentColKey: string;
        parentRowIndex: number;
        parentColIndex: number;
        autofillRange: {
            startRow: number;
            startCol: number;
            endRow: number;
            endCol: number;
        };
        selectionRange: {
            startRow: number;
            startCol: number;
            endRow: number;
            endCol: number;
        };
    }) => void;
    /** 嵌套表格 autofill 拖拽结束回调 */
    onNestedAutofillEnd?: (params: {
        parentRowData: any;
        parentColKey: string;
        parentRowIndex: number;
        parentColIndex: number;
        autofillRange: {
            startRow: number;
            startCol: number;
            endRow: number;
            endCol: number;
        };
        selectionRange: {
            startRow: number;
            startCol: number;
            endRow: number;
            endCol: number;
        };
        nestedGridData: any[];
    }) => void;
    /** 粘贴完成 */
    afterPaste?: (data: any) => void;
    /** 清除完成 */
    afterClear?: (data: any) => void;
    /** 加载完成 */
    onLoad?: () => void;
    /** 行拖拽开始（用于桥接 HTML5 drag 事件） */
    onRowDragStart?: (draggedRows: any[]) => void;
    /** 行拖拽结束（无论成功或取消，用于清理状态） */
    onRowDragEnd?: () => void;
    /** 行拖拽到 canvas 外部释放（用于拖拽到外部组件如 TreeView） */
    onRowDragOutside?: (draggedRows: any[], mouseEvent: MouseEvent) => void;
    /** 行拖拽排序 */
    onRowDragReorder?: (draggedRows: any[], targetIndex: number) => void;
    /** 行拖拽移动 */
    onRowDragMove?: (draggedRows: any[], targetRow: any) => void;
    /** 分组展开/折叠 */
    onGroupToggle?: (groupRow: any, expanded: boolean) => void;
    /** 树节点展开 */
    onTreeExpand?: (rowData: any, expanded: boolean) => void;
    /** 单元格文本点击 */
    onCellTextClick?: (rowData: any, colId: string) => void;
    /** 富文本单元格编辑笔点击：点击右侧编辑图标时触发 */
    onRichTextEditClick?: (info: {
        rowData: any;
        colId: string;
        clientX: number;
        clientY: number;
    }) => void;
    /** 富文本单元格文字区域点击：点击中间文本区域时触发 */
    onRichTextContentClick?: (info: {
        rowData: any;
        colId: string;
        clientX: number;
        clientY: number;
    }) => void;
    /** 列拖拽排序 */
    onColumnDragReorder?: (draggedColIds: string[], targetColId: string, insertBefore: boolean) => void;
    /** 列右键菜单 */
    onColumnContextMenu?: (info: any) => void;
    /** 冻结列总宽度超过表格展示宽度时触发 */
    onFrozenColumnOverflow?: (info: {
        fixedLeftWidth: number;
        fixedRightWidth: number;
        tableWidth: number;
    }) => void;
    /** 行右键菜单：行区域右键时触发，传递行数据、列信息和鼠标屏幕坐标 */
    onRowContextMenu?: (info: any) => void;
    /** 新增行 */
    onAddRow?: (groupInfo?: any) => void;
    /** Footer 单元格点击 */
    onFooterCellClick?: (info: any) => void;
    /** 组头单元格点击 */
    onGroupHeaderCellClick?: (info: any) => void;
    /** 人员工时图标点击 */
    onUserWorkingHoursClick?: (info: {
        groupId: string;
        clientX: number;
        clientY: number;
        isAllGroup: boolean;
        canvasElement: HTMLCanvasElement;
        iconBounds?: {
            x: number;
            y: number;
            width: number;
            height: number;
        };
    }) => void;
    /** Footer 嵌套列统计刷新 */
    onFooterStatRefresh?: (info: any) => void;
    /** 组头嵌套列统计刷新 */
    onGroupHeaderStatRefresh?: (info: any) => void;
    /** 表头排序图标点击 */
    onHeaderSortClick?: (info: {
        colId: string;
        colIndex: number;
        colTitle: string;
        colKey: string;
        colType?: string;
        parentKey?: string;
        clientX: number;
        clientY: number;
    }) => void;
    /** 表头筛选图标点击 */
    onHeaderFilterClick?: (info: {
        colId: string;
        colIndex: number;
        colTitle: string;
        colKey: string;
        colType?: string;
        parentKey?: string;
        clientX: number;
        clientY: number;
        headerBounds: {
            left: number;
            top: number;
            width: number;
            height: number;
        };
    }) => void;
    /** 嵌套列设置图标点击 */
    onNestedSettingsClick?: (info: {
        colId: string;
        colIndex: number;
        colTitle: string;
        clientX: number;
        clientY: number;
    }) => void;
    /** 选中前 */
    beforeSelectCell?: (cell: any) => void;
    /** 选中后 */
    afterSelectCell?: (cell: any) => void;
    /** 编辑前 */
    beforeEditCell?: (cell: any) => void;
    /** Viewer 编辑图标点击（拦截内置编辑器，由外部处理编辑） */
    onEditIconClick?: (info: any) => void;
    /** 嵌套子表格右键菜单回调：子表格区域右键时触发 */
    onNestedGridContextMenu?: (info: {
        parentRowData: any;
        parentColKey: string;
        parentRowIndex: number;
        parentColIndex: number;
        nestedRowData: any | null;
        nestedRowIndex: number;
        nestedColKey: string;
        nestedColIndex: number;
        selectionRange: {
            startRow: number;
            startCol: number;
            endRow: number;
            endCol: number;
        } | null;
        clientX: number;
        clientY: number;
    }) => void;
    /** 嵌套子表格编辑笔点击回调：子表格编辑笔被点击时触发 */
    onNestedEditIconClick?: (info: {
        parentRowData: any;
        parentColKey: string;
        parentRowIndex: number;
        parentColIndex: number;
        nestedRowData: any;
        nestedRowIndex: number;
        nestedColKey: string;
        nestedColIndex: number;
        column: any;
        value: any;
        bounds: {
            x: number;
            y: number;
            width: number;
            height: number;
        };
    }) => void;
    /** 嵌套表格展开/收起回调：展开全部或收起按钮点击时触发，用于通知业务层更新数据 */
    onNestedExpandToggle?: (info: {
        parentRowData: any;
        parentColKey: string;
        parentRowIndex: number;
        expanded: boolean;
    }) => void;
    /** 嵌套子表框选变化回调：选区跨子表或单子表变化时触发 */
    onNestedSelectionChange?: (params: {
        parentColKey: string;
        selections: Array<{
            parentRowData: any;
            parentRowIndex: number;
            parentColIndex: number;
            selectionRange: {
                startRow: number;
                startCol: number;
                endRow: number;
                endCol: number;
            };
        }>;
    }) => void;
    /** 嵌套子表头点击回调：通知外部进行选中逻辑处理 */
    onNestedSubHeadClick?: (params: {
        parentKey: string;
        nestedKey: string;
        nestedChildOffset: number;
        shiftKey: boolean;
        ctrlKey: boolean;
    }) => void;
    /** 嵌套子表跨子表 autofill 结束回调 */
    onNestedCrossAutofillEnd?: (params: {
        parentColKey: string;
        sourceSelections: Array<{
            parentRowData: any;
            parentRowIndex: number;
            selectionRange: {
                startRow: number;
                startCol: number;
                endRow: number;
                endCol: number;
            };
        }>;
        targetSelections: Array<{
            parentRowData: any;
            parentRowIndex: number;
            autofillRange: {
                startRow: number;
                startCol: number;
                endRow: number;
                endCol: number;
            };
            /** NestedGrid 实际渲染的数据数组（行索引与 autofillRange 完全一致） */
            nestedGridData: any[];
        }>;
    }) => void;
    /** 嵌套子表内子行拖动排序回调（Alt + 拖拽触发，不跨外层行） */
    onNestedRowDragReorder?: (params: {
        parentRowData: any;
        parentColKey: string;
        parentRowIndex: number;
        parentColIndex: number;
        /** 被拖拽的子行索引（相对 nestedGridData） */
        fromRowIndex: number;
        /** 目标插入位置索引（相对 nestedGridData） */
        toRowIndex: number;
        /** 插入位置：front 插到目标行之前，tail 插到目标行之后 */
        position: 'front' | 'tail';
        /** 被拖拽子行数据 */
        fromRowData: any;
        /** 目标参考子行数据 */
        toRowData: any;
        /** NestedGrid 实际渲染的数据数组 */
        nestedGridData: any[];
    }) => void;
    /** 滚动回调 */
    onScroll?: (scrollX: number, scrollY: number) => void;
    /** 滚动开始回调 */
    onScrollStart?: () => void;
    /** 滚动结束回调 */
    onScrollEnd?: () => void;
    /** 折叠所有任务 */
    onCollapseAll?: () => void;
    /** 展开所有任务 */
    onExpandAll?: () => void;
    /** 展开前 N 层级 */
    onExpandToLevel?: (level: number) => void;
    /** 表头列宽拖拽开始回调 */
    onResizeHeaderStart?: (width: number, info: {
        headerIndex: number;
    }) => void;
    /** 表头列宽拖拽结束回调（携带最终宽度） */
    onResizeHeader?: (finalWidth: number, info: {
        headerIndex: number;
        viewer: string;
        colKey: string;
    }) => void;
    /** 嵌套子表头列宽拖拽结束回调（携带最终宽度、subIndex、subSize） */
    onResizeSubHeader?: (finalWidth: number, info: {
        headerIndex: number;
        viewer: string;
        colKey: string;
    }, subIndex: number, subSize: number) => void;
    /** 表头列宽拖拽完全结束回调（nextTick 后调用） */
    onResizeHeaderEnd?: () => void;
    /** 表头双击重置列宽回调（双击列宽拖拽热区触发，在 min/max 之间切换宽度） */
    onDblClickResizeHeader?: (info: {
        headerIndex: number;
        colKey: string;
        isNestedChild: boolean;
        nestedChildOffset: number;
    }) => void;
    /** Cell hover 变化回调：当 hover 的单元格变化时通知外部（用于时间型字段 tooltip / 历史变更等） */
    onCellHoverChange?: (info: {
        show: boolean;
        rowIndex: number;
        colIndex: number;
        colKey: string;
        rowData: Record<string, any>;
        position: {
            x: number;
            y: number;
            width: number;
            height: number;
        };
        canvasElement: HTMLCanvasElement;
        displayText: string;
        mouseX: number;
        mouseY: number;
    }) => void;
    /** Error icon hover 回调：鼠标悬停在单元格 warning icon 上时触发（用于外部 AlarmPopper） */
    onErrorIconHover?: (info: {
        show: boolean;
        position: {
            x: number;
            y: number;
            width: number;
            height: number;
        };
        errorMessage: string;
        errorProperty?: string;
        rowData?: Record<string, any>;
    }) => void;
    /** Viewer icon hover 回调：鼠标悬停在 viewer 内部 icon（如任务图标、IOMC 提单图标）上时触发（用于外部 AlarmPopper） */
    onViewerIconHover?: (info: {
        show: boolean;
        position: {
            x: number;
            y: number;
            width: number;
            height: number;
        };
        tooltipText: string;
    }) => void;
    /** Reminder 蓝色三角点击回调：点击单元格右上角蓝色提醒三角时触发（用于外部 ReminderPopper） */
    onReminderClick?: (info: {
        position: {
            x: number;
            y: number;
            width: number;
            height: number;
        };
        rowId: any;
        key: string;
        remindInfo: {
            field_name: string;
            is_filed_admin?: boolean;
            fcr_open_time?: string;
            [key: string]: any;
        };
        rowData: Record<string, any>;
    }) => void;
    /** 表头 Link icon hover 回调：鼠标悬停/离开引用字段表头 link icon 时触发 */
    onHeaderLinkIconHover?: (info: {
        show: boolean;
        colKey: string;
        colIndex: number;
        colTitle: string;
        linkKey?: string;
        linkTask?: string;
        position: {
            x: number;
            y: number;
            width: number;
            height: number;
        };
    }) => void;
    /** 表头 fieldHint info icon hover 回调：鼠标悬停/离开字段提示图标时触发 */
    onHeaderFieldHintIconHover?: (info: {
        show: boolean;
        colKey: string;
        colIndex: number;
        colTitle: string;
        fieldHint: string;
        position: {
            x: number;
            y: number;
            width: number;
            height: number;
        };
    }) => void;
    /** 表体 Link icon 点击回调：点击引用字段单元格的 link icon 时触发 */
    onLinkIconClick?: (info: {
        rowData: Record<string, any>;
        colKey: string;
        colIndex: number;
        rowIndex: number;
        linkKey?: string;
        bounds: {
            x: number;
            y: number;
            width: number;
            height: number;
        };
    }) => void;
    /** 行渲染前回调：每个可见行绘制前触发，用于渐进式数据加载等场景 */
    onBeforeRowRender?: (rowIndex: number, rowData: Record<string, any>) => void;
    /** 嵌套表格渲染前回调：每个嵌套表格格子绘制前触发，用于分组表格管线列渐进式加载 */
    onBeforeNestedGridRender?: (rowIndex: number, rowData: Record<string, any>, colKey: string) => void;
    /** 普通行 checkbox 变更回调（受控模式）：checkbox 点击时通知外部更新 tableSelectedList */
    onRowCheckChange?: (info: {
        rowId: string;
        checked: boolean;
        rowData: any;
        selectedRowIds: string[];
        event?: MouseEvent;
    }) => void;
    /** 组头 checkbox 变更回调（受控模式）：组头 checkbox 点击时通知外部批量更新 tableSelectedList */
    onGroupCheckboxChange?: (info: {
        groupId: string | number;
        checked: boolean;
        data: any;
        selectedRowIds: string[];
    }) => void;
    /** 最大可选行数（超过此数量时阻止勾选并触发 onSelectionLimitExceeded 回调），不设置则不限制 */
    maxSelectedRows?: number;
    /** 勾选超限回调（当勾选操作将导致选中数量超过 maxSelectedRows 时触发） */
    onSelectionLimitExceeded?: (info: {
        currentCount: number;
        attemptCount: number;
        limit: number;
    }) => void;
    /**
     * Cell value transformer callback.
     * Called by Cell.drawWithViewer() before passing data to viewer.draw().
     * Transforms raw cell values to display values at render time.
     * Return undefined to keep the original value.
     */
    cellValueTransformer?: import('../core/viewers/types').CellValueTransformer;
    /**
     * Render error callback: called when draw() throws an exception during the
     * requestAnimationFrame render loop. Receives the error and the count of
     * consecutive errors. When the count exceeds the threshold (default 5),
     * the render loop is paused to prevent the browser from freezing.
     */
    onRenderError?: (error: unknown, consecutiveErrorCount: number) => void;
}
/**
 * DataGrid 初始化结果
 */
export interface DataGridInitResult {
    /** 转换后的列配置 */
    columns: ColumnConfig[];
    /** 预处理后的行数据 */
    data: PreprocessedRow[];
    /** 事件适配器实例 */
    eventAdapter: DataGridEventAdapter;
    /** DataGrid 选项（传入 DataGrid 构造函数或 Vue 组件 props） */
    gridOptions: Record<string, any>;
}
/**
 * 构建 DataGrid 初始化参数
 *
 * 将 AssetMatrix 的 tableHeadList/tableDataList/props 转换为 DataGrid 可消费的配置。
 * 不直接创建 DataGrid 实例（因为实例由 Vue 组件管理），而是返回所有必要的配置数据。
 *
 * @param options - 初始化配置
 * @returns DataGrid 初始化结果
 */
export declare function buildDataGridInitParams(options: DataGridInitOptions): DataGridInitResult;
/**
 * 增量更新行数据
 *
 * 当 tableDataList 变化时，重新预处理并返回新的数据，
 * 可直接调用 DataGrid 组件的 loadData() 方法更新。
 *
 * @param tableDataList - 更新后的行数据
 * @param allHeaders - 所有列头配置
 * @param controllerProps - 业务 props
 * @param columns - 列配置（用于样式预处理的列数）
 * @returns 预处理后的行数据
 */
export declare function refreshDataGridRows(tableDataList: Record<string, any>[], allHeaders: ITableHeader[], controllerProps: Record<string, any>, columns: ColumnConfig[]): PreprocessedRow[];
/**
 * 增量更新列配置
 *
 * 当 tableHeadList 变化时，重新转换并返回新的列配置。
 *
 * @param tableHeadListFixLeft - 固定左侧列
 * @param tableHeadListRight - 非固定列
 * @returns 转换后的 ColumnConfig 数组
 */
export declare function refreshDataGridColumns(tableHeadListFixLeft: ITableHeader[], tableHeadListRight: ITableHeader[], controllerProps?: Record<string, any>): ColumnConfig[];
/**
 * 生成 tableInit 方法的 feature flag 替换代码示例
 *
 * 在 ProgressTableFillerController.ts 中使用：
 *
 * ```typescript
 * import { buildDataGridInitParams, refreshDataGridRows } from 'arthub-table/adapters';
 *
 * // 在 tableInit 中
 * public tableInit(tableContainer, isPerspectiveTable = false) {
 *   if (this.props.useCanvasTable) {
 *     this.initDataGrid(tableContainer);
 *   } else {
 *     // 原有 fattable 初始化代码...
 *     this.initFattable(tableContainer, isPerspectiveTable);
 *   }
 * }
 *
 * private initDataGrid(tableContainer: HTMLElement) {
 *   const { columns, data, eventAdapter, gridOptions } = buildDataGridInitParams({
 *     container: tableContainer,
 *     tableHeadListFixLeft: this.tableHeadListFixLeft,
 *     tableHeadListRight: this.tableHeadListRight,
 *     tableDataList: this.tableDataList,
 *     rowKey: 'id',
 *     rowHeight: this.props.poolRowHeight || this.props.rowHeight || 34,
 *     headerHeight: this.props.headerHeight || 34,
 *     showFooter: this.props.needStatistics || false,
 *     controllerProps: this.props,
 *     callbacks: {
 *       afterEditCell: (data) => this.onDataChange(data),
 *       onGroupToggle: (groupRow, expanded) => this.expandGroup(groupRow),
 *       onTreeExpand: (rowData, expanded) => this.expandNode(rowData),
 *       onCellTextClick: (rowData, colId) => this.onNameClick(rowData),
 *       onColumnContextMenu: (info) => this.onHeaderContextmenu(info),
 *       onAddRow: (groupInfo) => this.onCreateNewRow(groupInfo),
 *       onFooterCellClick: (info) => this.onFooterCellClick?.(info),
 *       onGroupHeaderCellClick: (info) => this.onGroupHeaderCellClick?.(info),
 *       onRowDragReorder: (rows, idx) => this.onCellDrop(rows, idx),
 *     },
 *   });
 *
 *   // 保存引用
 *   this._dataGridColumns = columns;
 *   this._dataGridData = data;
 *   this._eventAdapter = eventAdapter;
 *   this._gridOptions = gridOptions;
 *
 *   // DataGrid Vue 组件通过 v-if="useCanvasTable" 在模板中条件渲染
 *   // 并通过 :columns="columns" :data="data" 传入数据
 * }
 * ```
 */
/**
 * 增量刷新 DataGrid 中指定列的数据
 *
 * 在异步数据回填场景（如 upstream、thumbnail、files 等异步加载后），
 * 只需更新目标列的值并同步给 DataGrid 缓存的 Cell，无需全量 refreshDataGridRows。
 *
 * 性能：O(rows × colKeys.length)，远优于 refreshDataGridRows 的 O(rows × allColumns)
 *
 * @param dataGrid - DataGrid Vue 组件实例（通过 ref 获取）
 * @param preprocessedData - 当前已预处理的行数据（DataGrid 正在使用的 _dataGridData）
 * @param rawDataList - 原始行数据（AssetMatrix 的 tableDataList / tableTaskList）
 * @param colKeys - 需要刷新的列 key 数组（如 ['upstream_reminder_state']）
 * @param allHeaders - 所有列头配置
 * @param controllerProps - 业务 props（包含 resolver 函数等）
 */
export declare function refreshDataGridColumnByKeys(dataGrid: any, preprocessedData: PreprocessedRow[], rawDataList: Record<string, any>[], colKeys: string[], allHeaders: ITableHeader[], controllerProps: Record<string, any>): void;
/**
 * Fast-path column refresh: skips adapter-layer full-row processing entirely.
 *
 * Only syncs raw values from rawDataList → preprocessedData for the specified
 * columns, then tells DataGrid to refresh cached Cells. No permission
 * recalculation, no transformCellValues.
 *
 * Prerequisites:
 * - Target columns must be "simple" (cellValueTransformer handles display conversion
 *   at render time; transformCellValues would `continue` / skip them).
 * - Business layer has already mutated rawDataList[i][key] with the new values.
 *
 * Performance: O(totalRows × colKeys) simple assignments + O(cachedRows × colKeys)
 * Cell sync ≈ <5ms for 10000 rows (vs ~500ms+ for the full path).
 */
export declare function refreshDataGridColumnByKeysFast(dataGrid: any, preprocessedData: PreprocessedRow[], rawDataList: Record<string, any>[], colKeys: string[]): void;
/**
 * [Optimization B] Async time-sliced version of refreshDataGridColumnByKeys.
 * Processes rows in batches via refreshColumnCellValuesAsync, yielding to the
 * main thread between batches to prevent long tasks from blocking scrolling.
 * After all batches are processed, triggers a single DataGrid repaint.
 *
 * @param batchSize - Number of rows per batch (default 200)
 */
export declare function refreshDataGridColumnByKeysAsync(dataGrid: any, preprocessedData: PreprocessedRow[], rawDataList: Record<string, any>[], colKeys: string[], allHeaders: ITableHeader[], controllerProps: Record<string, any>, batchSize?: number, isStale?: () => boolean): Promise<void>;
/**
 * Incrementally update a single row in the DataGrid.
 *
 * Re-preprocesses only the specified row (O(columns)) and patches it into
 * the DataGrid via `updateRowByIndex`, avoiding a full O(rows × columns)
 * `refreshDataGridRows` + `loadData` cycle.
 *
 * @param dataGrid - DataGrid Vue component instance (ref)
 * @param rowIndex - Zero-based index of the row to update in preprocessedData / DataGrid body.data
 * @param rawRow - Latest raw row data (already through convertErrorInfosForDataGrid / convertRemindsForDataGrid)
 * @param allHeaders - Column header definitions (filtered, excluding tableIndex / switcher)
 * @param controllerProps - Business props (resolvers, searchMatchList, etc. — same as refreshDataGrid)
 * @param preprocessedData - Current preprocessed row array that DataGrid is using (_dataGridData)
 * @param columns - Current column config array (used for columnsLength in style computation)
 */
export declare function refreshDataGridRowByIndex(dataGrid: any, rowIndex: number, rawRow: Record<string, any>, allHeaders: ITableHeader[], controllerProps: Record<string, any>, preprocessedData: PreprocessedRow[], columns: ColumnConfig[]): void;
