import { GroupLoadMoreMeta } from '../../../../../../types/src/table';
import { default as Module } from '../../core/Module';
import { default as Row } from '../../core/row/Row';
import { default as RowComponent } from '../../core/row/RowComponent';
import { GroupArg, GroupValuesArg } from '../../core/types';
import { default as Group } from './Group';
import { default as GroupComponent } from './GroupComponent';

type GroupIDLookup = {
    field: string | false;
    func: (data: any) => any;
    values: any[] | false;
};
type GroupHeaderGenerator = (value: any, count: number, data: any[], component: GroupComponent) => string | HTMLElement;
type GroupStartOpen = boolean | ((value: any, count: number, data: any[], component: GroupComponent) => boolean);
export default class GroupRows extends Module {
    static readonly moduleName = "groupRows";
    groupIDLookups: GroupIDLookup[] | false;
    startOpen: GroupStartOpen[];
    headerGenerator: GroupHeaderGenerator[];
    groupList: Group[];
    allowedValues: GroupValuesArg | false;
    groups: Record<string, Group>;
    displayHandler: (rows: Row[]) => Row[];
    blockRedraw: boolean;
    initialized: boolean;
    constructor(table: any);
    initialize(): void;
    layoutRowGroupLevel(row: Row): void;
    _blockRedrawing(): void;
    _restore_redrawing(): void;
    configureGroupSetup(): void;
    rowSample(rows: Row[], prevValue: Row[]): Row[];
    virtualRenderFill(): Row[] | void;
    rowAddingIndex(row: Row, index: Row | false, top: boolean): Row | false;
    trackChanges(): void;
    setGroupBy(groups: GroupArg | false): void;
    setGroupValues(groupValues: GroupValuesArg): void;
    setGroupStartOpen(values: GroupStartOpen | GroupStartOpen[]): void;
    private updateGroupVisibility;
    setGroupHeader(values: GroupHeaderGenerator | GroupHeaderGenerator[] | false): void;
    setGroupLoadMoreMeta(meta: GroupLoadMoreMeta | undefined): void;
    userGetGroups(_values?: boolean): GroupComponent[];
    userGetGroup(key: any): GroupComponent | false;
    private findGroupByKey;
    userGetGroupedData(): any[];
    rowGetGroup(row: RowComponent): GroupComponent | false;
    rowMoving(from: Row | Group, to: Row | Group, after: boolean): void;
    rowDeleting(row: Row): void;
    rowsUpdated(_row?: Row): void;
    cellUpdated(cell: any): void;
    getRows(rows: Row[]): Row[];
    getGroups(component: boolean): Group[] | GroupComponent[];
    getChildGroups(group?: Group): Group[];
    wipe(): void;
    pullGroupListData(groupList: Group[]): any[];
    getGroupedData(): any[];
    getRowGroup(row: Row): Group | false;
    countGroups(): number;
    generateGroups(rows: Row[]): void;
    createGroup(groupID: any, level: number, oldGroups?: Record<string, Group>): void;
    assignRowToExistingGroup(row: Row): void;
    assignRowToGroup(row: Row, oldGroups?: Record<string, Group>): boolean;
    reassignRowToGroup(row: Row): void;
    getExpectedPath(row: Row): any[];
    updateGroupRows(force?: boolean): Row[];
    scrollHeaders(left: number): void;
    removeGroup(group: Group): void;
    checkBasicModeGroupHeaderWidth(): void;
}
export {};
