import { IRowNode } from 'ag-grid-community';
export declare const rowSelectionState: {
    readonly indeterminate: "indeterminate";
    readonly selected: "selected";
    readonly unselected: "unselected";
};
export type RowSelectionState = (typeof rowSelectionState)[keyof typeof rowSelectionState];
export interface AffectedRows {
    [id: string]: {
        node: IRowNode;
        selectedState: RowSelectionState;
    };
}
interface ParentChildrenMap {
    [parentId: string]: {
        childRows: IRowNode[];
        selected?: boolean;
        selectedChildRows: Set<IRowNode>;
    };
}
export declare function isNodeRootLevelOfGrid(node: IRowNode | null): boolean;
export declare function getNodeParents(node: IRowNode, parents: IRowNode[]): IRowNode[];
/**
 * Recursive function to build array of child nodes that should be selected
 *
 * @param baseNode the original node clicked
 * @param nextNode the current node being considered
 * @param parentChildrenMap map with parent/child relationships
 * @returns array of child nodes to change selection state of
 */
export declare function getChildrenToSelect(baseNode: IRowNode, nextNode: IRowNode, parentChildrenMap: ParentChildrenMap): IRowNode[];
/**
 * APPROACH: using selectionChanged
 *
 * 1. no grouping, selection
 *   - in this case, skip; let checkbox handle as it were / no changes needed
 *
 * 2. grouping
 * 2a. leaf node selected/deselected
 *   - compare event api selected nodes to existing api selected nodes to find affected
 *   - do indeterminate/selected/unselected logic on parents up the chain
 *
 * 2b. group node selected/deselected
 *   - compare event api selected nodes to existing api selected nodes to find selection
 *   - do indeterminate/selected/unselected logic on parents up the chain
 *   - find all children, probably recursively?
 *   - select/deselect all children
 *     - need to select/deselect here for deselecting parent while we have knowledge of parent selection change
 *
 * 3. initial render (i.e expanding when previously closed)
 *   - if parent is selected, select self
 */
export declare function getAffectedRows(currentRows: IRowNode[], selectionNode: IRowNode, affectedRows: AffectedRows): AffectedRows;
export {};
