import type { GroupedData, UngroupedData } from '../../dataModelTypes';
import type { DataModelContext } from '../dataModelContext';
import type { DataModelResolvers } from '../utils/resolvers';
import type { ScopeCacheManager } from '../utils/scopeCache';
/**
 * Aggregator handles aggregation of values within groups and post-processing of grouped data.
 *
 * AGGREGATION RESPONSIBILITIES:
 * - Applies aggregate functions to group values
 * - Calculates aggregate domains for visualization
 * - Supports both ungrouped and grouped data aggregation
 * - Handles group-level value processing
 *
 * UNGROUPED vs GROUPED AGGREGATION:
 * - Ungrouped: Each datum gets its own aggregation result
 * - Grouped: Multiple datums in a group share aggregation results
 */
export declare class Aggregator<D extends object, K extends keyof D & string> {
    private readonly ctx;
    private readonly scopeCacheManager;
    private readonly resolvers;
    constructor(ctx: DataModelContext<D, K>, scopeCacheManager: ScopeCacheManager<K>, resolvers: DataModelResolvers<D, K>);
    /**
     * Aggregates data for ungrouped datasets.
     * Each datum gets its own aggregation result.
     */
    aggregateUngroupedData(processedData: UngroupedData<any>): void;
    /**
     * Aggregates data for grouped datasets.
     * Multiple datums in a group share aggregation results.
     */
    aggregateGroupedData(processedData: GroupedData<any>): void;
    /**
     * Post-processes groups after grouping is complete.
     * Applies group value processors to adjust group values and recompute domains.
     */
    postProcessGroups(processedData: GroupedData<any>): void;
    private valueGroupIdxLookup;
}
