import type { Row as TanStackRow, Table as TanStackTable } from '@tanstack/table-core';
import { type TableNode, type TableRecord, type TableSetRecordHierarchyOptions } from '../types';
/**
 * Manages the expanded/collapsed state of rows in the table.
 *
 * We must track the expansion state separately from TanStack because:
 *   1. TanStack does not support having a different initial expansion state per row unless explicitly
 *      specified for each row by ID. This causes problems in the nimble-table because we could have
 *      a different initial expansion state for group rows, parent rows, and parent rows with delay-loaded
 *      children.
 *   2. TanStack does not remove entries from its expanded state when those rows are no longer present
 *      in the data. This is not ideal because the object maintaining the expansion state can grow unbounded.
 */
export declare class ExpansionManager<TData extends TableRecord> {
    private readonly tanStackTable;
    private explicitExpansionStates;
    private hierarchyOptions;
    private isHierarchyEnabled;
    private parentRowsWithChildren;
    constructor(tanStackTable: TanStackTable<TableNode<TData>>);
    isRowExpanded(row: TanStackRow<TableNode<TData>>): boolean;
    toggleRowExpansion(row: TanStackRow<TableNode<TData>>): void;
    collapseAll(): void;
    resetExpansionState(): void;
    resetHierarchyOptions(): void;
    processDataUpdate(rows: TanStackRow<TableNode<TData>>[]): void;
    setHierarchyOptions(hierarchyOptions: TableSetRecordHierarchyOptions[]): void;
    isRowExpandable(row: TanStackRow<TableNode<TData>>): boolean;
    setHierarchyEnabled(isHierarchyEnabled: boolean): void;
    isLoadingChildren(id: string): boolean;
    private canLoadDelayedChildren;
    private getDefaultExpansionState;
}
