import type { Group } from '../scenegraph/graphic/group';
import type { Icon } from '../scenegraph/graphic/icon';
import type { CellAddress, CellPosition, CellRange, DropDownMenuHighlightInfo, MenuListItem, SortOrder, SortState } from '../ts-types';
import { HighlightScope, InteractionState } from '../ts-types';
import { Bounds } from '@visactor/vutils';
import type { FederatedWheelEvent } from './../vrender';
import type { BaseTableAPI } from '../ts-types/base-table';
export type CustomSelectionStyle = {
    cellBorderColor?: string;
    cellBorderLineWidth?: number;
    cellBorderLineDash?: number[];
    cellBgColor?: string;
};
export declare class StateManager {
    table: BaseTableAPI;
    interactionState: InteractionState;
    interactionStateBeforeScroll?: InteractionState;
    select: {
        ranges: (CellRange & {
            skipBodyMerge?: boolean;
        })[];
        highlightScope: HighlightScope;
        cellPos: CellPosition;
        singleStyle?: boolean;
        disableHeader?: boolean;
        disableCtrlMultiSelect?: boolean;
        headerSelectMode?: 'inline' | 'cell' | 'body';
        highlightInRange?: boolean;
        selecting: boolean;
        customSelectRanges?: {
            range: CellRange;
            style: CustomSelectionStyle;
        }[];
    };
    fillHandle: {
        direction?: 'top' | 'bottom' | 'left' | 'right';
        directionRow?: boolean;
        isFilling: boolean;
        startX: number;
        startY: number;
        beforeFillMinCol?: number;
        beforeFillMinRow?: number;
        beforeFillMaxCol?: number;
        beforeFillMaxRow?: number;
    };
    hover: {
        highlightScope: HighlightScope;
        singleStyle?: boolean;
        disableHeader?: boolean;
        cellPos: CellPosition;
        cellPosContainHeader?: CellPosition;
    };
    hoverIcon: {
        col: number;
        row: number;
        icon: Icon | null;
    };
    residentHoverIcon?: {
        col: number;
        row: number;
        icon: Icon | null;
    };
    columnResize: {
        col: number;
        x: number;
        resizing: boolean;
        isRightFrozen?: boolean;
    };
    rowResize: {
        row: number;
        y: number;
        resizing: boolean;
        isBottomFrozen?: boolean;
    };
    columnMove: {
        colSource: number;
        colTarget: number;
        rowSource: number;
        rowTarget: number;
        x: number;
        y: number;
        moving: boolean;
    };
    menu: {
        x: number;
        y: number;
        isShow: boolean;
        itemList: MenuListItem[];
        bounds: Bounds;
        highlightIndex: number;
        dropDownMenuHighlight?: DropDownMenuHighlightInfo[];
    };
    sort: Array<{
        col: number;
        row: number;
        field?: string;
        order: SortOrder;
        icon?: Icon;
    }>;
    frozen: {
        col: number;
        row: number;
        icon?: Icon;
    };
    scroll: {
        horizontalBarPos: number;
        verticalBarPos: number;
    };
    tablePosition: {
        absoluteX: number;
        absoluteY: number;
    };
    drill: {
        dimensionKey?: string;
        title?: string;
        drillDown?: boolean;
        drillUp?: boolean;
        col: number;
        row: number;
    };
    sparkLine: {
        col: number;
        row: number;
    };
    _clearVerticalScrollBar: any;
    _clearHorizontalScrollBar: any;
    fastScrolling: boolean;
    checkedState: Map<string | number, Record<string | number, boolean | 'indeterminate'>>;
    headerCheckedState: Record<string | number, boolean | 'indeterminate'>;
    _checkboxCellTypeFields: (string | number)[];
    _headerCheckFuncs: Record<string | number, Function>;
    radioState: Record<string | number, boolean | number | Record<number, number>>;
    resetInteractionState: (this: any, ...args: any) => any;
    constructor(table: BaseTableAPI);
    initState(): void;
    updateOptionSetState(): void;
    _updateOptionSetState(): void;
    _initState(): void;
    setHoverState(): void;
    setSelectState(): void;
    isSelected(col: number, row: number): boolean;
    setSortState(sortState: SortState | SortState[]): void;
    setFrozenState(): void;
    updateInteractionState(mode: InteractionState): void;
    updateHoverhighlightScope(mode: HighlightScope): void;
    updateHoverPos(col: number, row: number): void;
    updateSelectPos(col: number, row: number, isShift?: boolean, isCtrl?: boolean, isSelectAll?: boolean, makeSelectCellVisible?: boolean, skipBodyMerge?: boolean): void;
    checkCellRangeInSelect(cellPosStart: CellAddress, cellPosEnd: CellAddress): boolean;
    updateHoverIcon(col: number, row: number, target: any, cellGroup: Group): void;
    isResizeCol(): boolean;
    isResizeRow(): boolean;
    isFillHandle(): boolean;
    isSelecting(): boolean;
    endSelectCells(fireListener?: boolean, fireClear?: boolean): void;
    endResizeCol(): void;
    startResizeCol(col: number, x: number, y: number, isRightFrozen?: boolean): void;
    updateResizeCol(xInTable: number, yInTable: number): void;
    endResizeRow(): void;
    startResizeRow(row: number, x: number, y: number, isBottomFrozen?: boolean): void;
    updateResizeRow(xInTable: number, yInTable: number): void;
    startFillSelect(x: number, y: number): void;
    endFillSelect(): void;
    startMoveCol(col: number, row: number, x: number, y: number, event: MouseEvent | PointerEvent | TouchEvent): void;
    updateMoveCol(col: number, row: number, x: number, y: number, event: MouseEvent | PointerEvent | TouchEvent): void;
    isMoveCol(): boolean;
    endMoveCol(): boolean;
    checkFrozen(): void;
    setFrozenCol(col: number): void;
    setFrozenRow(row: number): void;
    checkVerticalScrollBarEnd(): void;
    checkHorizontalScrollBarEnd(): void;
    updateVerticalScrollBar(yRatio: number): void;
    updateHorizontalScrollBar(xRatio: number): void;
    setScrollTop(top: number, event?: FederatedWheelEvent, triggerEvent?: boolean): void;
    setScrollLeft(left: number, event?: FederatedWheelEvent, triggerEvent?: boolean): void;
    hideVerticalScrollBar(): void;
    showVerticalScrollBar(autoHide?: boolean): void;
    hideHorizontalScrollBar(): void;
    showHorizontalScrollBar(autoHide?: boolean): void;
    triggerContextMenu(col: number, row: number, x: number, y: number): void;
    showContextMenu(col: number, row: number, x: number, y: number): void;
    triggerDropDownMenu(col: number, row: number, x: number, y: number, event: Event): void;
    showDropDownMenu(col: number, row: number, x: number, y: number): void;
    hideMenu(): void;
    setDropDownMenuHighlight(dropDownMenuInfo: DropDownMenuHighlightInfo[]): void;
    dropDownMenuIsHighlight(colNow: number, rowNow: number, index: number): boolean;
    triggerSort(col: number, row: number, iconMark: Icon, event: Event): void;
    updateSortState(sortState: SortState[]): void;
    triggerFreeze(col: number, row: number, iconMark: Icon): void;
    updateCursor(mode?: string): void;
    updateDrillState(dimensionKey: string, title: string, drillDown: boolean, drillUp: boolean, col: number, row: number): void;
    updateSparklineHoverPose(col: number, row: number, x: number, y: number): void;
    setCheckedState(col: number, row: number, field: string | number, checked: boolean | 'indeterminate'): void;
    setHeaderCheckedState(field: string | number, checked: boolean | 'indeterminate'): void;
    syncCheckedState(col: number, row: number, field: string | number, checked: boolean): boolean | 'indeterminate';
    initCheckedState(records: any[]): void;
    updateHeaderCheckedState(field: string | number, col: number, row: number): boolean | 'indeterminate';
    initLeftRecordsCheckState(records: any[]): void;
    setRadioState(col: number, row: number, field: string | number, radioType: 'column' | 'cell', indexInCell: number | undefined): void;
    syncRadioState(col: number, row: number, field: string | number, radioType: 'column' | 'cell', indexInCell: number | undefined, isChecked: boolean): boolean;
    changeCheckboxAndRadioOrder(sourceIndex: number, targetIndex: number): void;
    setCustomSelectRanges(customSelectRanges: {
        range: CellRange;
        style: CustomSelectionStyle;
    }[]): void;
}
