import { DataStore, Groups, Trimmed } from "../store/index";
import DimensionProvider from './dimension.provider';
import type { GroupLabelTemplateFunc } from '../plugins/groupingRow/grouping.row.types';
import type { DataLookup, DimensionRows, DataType, BeforeSaveDataDetails } from "../types/index";
export type RowDataSources = {
    [T in DimensionRows]: DataStore<DataType, DimensionRows>;
};
/**
 * Data source provider
 *
 * @dependsOn DimensionProvider
 */
export declare class DataProvider {
    private dimensionProvider;
    readonly stores: RowDataSources;
    constructor(dimensionProvider: DimensionProvider);
    /**
     * Replaces the data source for a row type and synchronizes the related dimension metadata.
     *
     * `rgRow` updates also refresh the virtual row model unless `disableVirtualRows` is set.
     * Pinned row types skip virtual row recalculation because they are rendered directly.
     *
     * @param data Full source data assigned to the target row store.
     * @param type Row collection to update. Defaults to the main body rows.
     * @param disableVirtualRows Prevents recalculating virtual rows for the main row store.
     * @param grouping Optional grouping metadata applied together with the new data set.
     * @param silent Preserves the current trimmed state instead of resetting it during the update.
     * @param preserveTrimmed Re-applies current trimmed indexes after a silent update.
     * @returns The same `data` array that was provided to the method.
     */
    setData(data: DataType[], type?: DimensionRows, disableVirtualRows?: boolean, grouping?: {
        depth: number;
        groups?: Groups;
        customRenderer?: GroupLabelTemplateFunc;
    }, silent?: boolean, preserveTrimmed?: boolean): DataType[];
    getModel(virtualIndex: number, type?: DimensionRows): DataType;
    changeOrder({ rowType, from, to }: {
        rowType: DimensionRows;
        from: number;
        to: number;
    }): void;
    setCellData({ type, rowIndex, prop, val }: Pick<BeforeSaveDataDetails, 'type' | 'rowIndex' | 'prop' | 'val'>, mutate?: boolean): void;
    setRangeData(data: DataLookup, type: DimensionRows): void;
    refresh(type?: DimensionRows | 'all'): void;
    refreshItems(type?: DimensionRows): void;
    setGrouping({ depth }: {
        depth: number;
    }, type?: DimensionRows): void;
    setTrimmed(trimmed: Trimmed, type?: DimensionRows): void;
}
