import { default as CxIconButton } from '../../../../../../atoms/src/components/icon-button/icon-button.ts';
import { GroupLoadMoreEventPayload, GroupLoadMoreState } from '../../../../../../types/src/table';
import { default as Row } from '../../core/row/Row';
import { default as GroupComponent } from './GroupComponent';
import { default as GroupRows } from './GroupRows';

type GroupGenerator = (value: any, count: number, data: any[], component: GroupComponent) => string | HTMLElement;
type GroupCalcs = {
    bottom?: Row;
    top?: Row;
};
export default class Group {
    groupManager: GroupRows;
    parent: Group | false;
    key: any;
    level: number;
    field: string | false;
    hasSubGroups: boolean;
    addRow: (row: Row) => void;
    type: string;
    old: Group | false;
    rows: Row[];
    groups: Record<string, Group>;
    groupList: Group[];
    generator: GroupGenerator;
    element: HTMLElement | false;
    elementContents: string | HTMLElement | false;
    height: number;
    outerHeight: number;
    initialized: boolean;
    heightInitialized: boolean;
    calcs: GroupCalcs;
    modules: Record<string, any>;
    arrowElement: CxIconButton | false;
    visible: boolean | ((key: any, count: number, data: any[], component: GroupComponent) => boolean);
    component: GroupComponent | null;
    addBindingsFlag?: boolean;
    private _loadMoreRow;
    private _loadMoreStateKey;
    constructor(groupManager: GroupRows, parent: Group | false, level: number, key: any, field: string | false, generator: GroupGenerator, oldGroup: Group | false);
    wipe(elementsOnly?: boolean): void;
    createElements(): void;
    createValueGroups(): void;
    addBindings(): void;
    _createGroup(groupID: any, level: number): void;
    _addRowToGroup(row: Row): void;
    _addRow(row: Row): void;
    setRowGroupLevel(row: Row): void;
    clearRowGroupLevel(row: Row): void;
    layoutRowGroupLevel(row: Row): void;
    insertRow(row: Row, to: Row, after: boolean): void;
    scrollHeader(left: string): void;
    getRowIndex(_row: Row): void;
    conformRowData(data: Record<string, any>): Record<string, any>;
    removeRow(row: Row): void;
    removeGroup(group: Group): void;
    getPathKey(): string;
    getLoadMoreState(): GroupLoadMoreState | undefined;
    getGroupLoadMoreEventPayload(): GroupLoadMoreEventPayload;
    generateLoadMoreRow(): Row | false;
    private applyGroupIndent;
    getHeadersAndRows(): Array<Group | Row>;
    getData(visible?: boolean, transform?: string): any[];
    getRowCount(): number;
    toggleVisibility(): void;
    hide(): void;
    show(): void;
    _visSet(): void;
    getRowGroup(row: Row): Group | false;
    getSubGroups(component?: boolean): Group[] | GroupComponent[];
    getRows(component?: boolean, includeChildren?: boolean): Row[] | any[];
    generateGroupHeaderContents(): void;
    getPath(path?: any[]): any[];
    getElement(): HTMLElement;
    generateElement(): HTMLElement;
    detachElement(): void;
    normalizeHeight(): void;
    initialize(force?: boolean): void;
    reinitialize(): void;
    setHeight(height: number): void;
    getHeight(): number;
    getGroup(): Group;
    reinitializeHeight(): void;
    calcHeight(): void;
    setCellHeight(): void;
    clearCellHeight(): void;
    deinitializeHeight(): void;
    rendered(): void;
    getComponent(): GroupComponent;
}
export {};
