import type { Group } from '@antv/g';
import type { FrozenCellIndex } from '../common/constant/frozen';
import { FrozenGroupType } from '../common/constant/frozen';
import type { CustomHeaderFields, Fields, Pagination, S2BaseFrozenOptions, ScrollSpeedRatio } from '../common/interface';
import type { SimpleBBox } from '../engine';
import type { Indexes } from '../utils/indexes';
import type { ViewCellHeights } from './layout/interface';
import type { Node } from './layout/node';
export declare const isFrozenCol: (colIndex: number, frozenCount: number) => boolean;
export declare const isFrozenTrailingCol: (colIndex: number, frozenCount: number, colLength: number) => boolean;
export declare const isFrozenRow: (rowIndex: number, minRowIndex: number, frozenCount: number) => boolean;
export declare const isFrozenTrailingRow: (rowIndex: number, maxRowIndex: number, frozenCount: number) => boolean;
/**
 * 计算偏移 scrollX、scrollY 的时候，在视窗中的节点索引
 */
export declare const calculateInViewIndexes: (options: {
    scrollX: number;
    scrollY: number;
    widths: number[];
    heights: ViewCellHeights;
    viewport: SimpleBBox;
    rowRemainWidth?: number;
}) => Indexes;
/**
 * 优化滚动方向，对于小角度的滚动，固定为一个方向
 * @param x
 * @param y
 * @param ratio
 */
export declare const optimizeScrollXY: (x: number, y: number, ratio: ScrollSpeedRatio) => [number, number];
export declare const translateGroup: (group: Group, scrollX: number, scrollY: number) => void;
export declare const translateGroupX: (group: Group, scrollX: number) => void;
export declare const translateGroupY: (group: Group, scrollY: number) => void;
/**
 * frozen                     frozenTrailing
 * ColCount                   ColCount
 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 * |     |     frozenRow     |          |  frozenRowCount
 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 * | fro |                   | fro      |
 * | zen |      panel        | zen      |
 * | col |      scroll       | trailing |
 * |     |                   | col      |
 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 * |     | frozenTrailingRow |          |  frozenTrailingRowCount
 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 * @description returns which group data cell belongs in frozen mode
 */
export declare const getFrozenGroupTypeByCell: (meta: {
    colIndex: number;
    rowIndex: number;
}, frozenOptions: S2BaseFrozenOptions, colLength: number, cellRange: {
    start: number;
    end: number;
}) => FrozenGroupType.Row | FrozenGroupType.Col | FrozenGroupType.TrailingCol | FrozenGroupType.TrailingRow | FrozenGroupType.Scroll;
/**
 * @description calculate all cells in frozen group's intersection region
 */
export declare const calculateFrozenCornerCells: (frozenOptions: S2BaseFrozenOptions, colLength: number, cellRange: {
    start: number;
    end: number;
}) => {
    frozenTopLeftGroup: FrozenCellIndex[];
    frozenTopRightGroup: FrozenCellIndex[];
    frozenBottomLeftGroup: FrozenCellIndex[];
    frozenBottomRightGroup: FrozenCellIndex[];
};
/**
 * @description split all cells in current panel with five child group
 */
export declare const splitInViewIndexesWithFrozen: (indexes: Indexes, frozenOptions: S2BaseFrozenOptions, colLength: number, cellRange: {
    start: number;
    end: number;
}) => {
    center: Indexes;
    frozenRow: Indexes;
    frozenCol: Indexes;
    frozenTrailingCol: Indexes;
    frozenTrailingRow: Indexes;
};
export declare const getCellRange: (viewCellHeights: ViewCellHeights, pagination?: Pagination) => {
    start: number;
    end: number;
};
/**
 * 明细表多级表头根据一个 node 返回其所属顶层节点
 * @param node
 * @returns {Node}
 */
export declare const getNodeRoot: (node: Node) => Node;
/**
 * 获取 columns 的所有叶子节点
 * @param columns 列配置
 * @returns {Array} 叶子节点列组成的数组
 */
export declare const getLeafColumns: (columns: CustomHeaderFields) => CustomHeaderFields;
/**
 * 获取 columns 的所有叶子节点的 key
 * @param columns 列配置
 * @returns {Array<string>} 叶子节点列的key组成的数组
 */
export declare const getLeafColumnsWithKey: (columns?: CustomHeaderFields) => string[];
/**
 * 获取一个 node 的最左叶子节点，找不到则返回自身
 * @param node
 * @returns {Node}
 */
export declare const getLeftLeafNode: (node: Node) => Node;
/**
 * fields 的 rows、columns、values 值都为空时，返回 true
 * @param {Fields} fields
 * @return {boolean}
 */
export declare const areAllFieldsEmpty: (fields: Fields) => boolean;
