import type { RefObject } from '@mui/x-internals/types';
import type { GridRowTreeConfig, GridFilterState, GridFilterModel, GridRowModel, GridColDef, GridKeyValue, GridDataSource } from '@mui/x-data-grid-pro';
import { type GridAggregatedFilterItemApplier, type GridColumnRawLookup, GRID_ROW_GROUPING_SINGLE_GROUPING_FIELD, getRowGroupingCriteriaFromGroupingField, isGroupingColumn, RowGroupingStrategy } from '@mui/x-data-grid-pro/internals';
import type { DataGridPremiumProcessedProps } from "../../../models/dataGridPremiumProps.js";
import type { GridGroupingRule, GridGroupingRules, GridRowGroupingModel } from "./gridRowGroupingInterfaces.js";
import type { GridStatePremium } from "../../../models/gridStatePremium.js";
import type { GridPrivateApiPremium } from "../../../models/gridApiPremium.js";
export { GRID_ROW_GROUPING_SINGLE_GROUPING_FIELD, getRowGroupingCriteriaFromGroupingField, isGroupingColumn };
export declare const getRowGroupingFieldFromGroupingCriteria: (groupingCriteria: string | null) => string;
interface FilterRowTreeFromTreeDataParams {
  rowTree: GridRowTreeConfig;
  isRowMatchingFilters: GridAggregatedFilterItemApplier | null;
  filterModel: GridFilterModel;
  filterValueGetter: (row: GridRowModel, column: GridColDef) => any;
  apiRef: RefObject<GridPrivateApiPremium>;
}
/**
 * A leaf is visible if it passed the filter
 * A group is visible if all the following criteria are met:
 * - One of its children is passing the filter
 * - It is passing the filter
 */
export declare const filterRowTreeFromGroupingColumns: (params: FilterRowTreeFromTreeDataParams) => Omit<GridFilterState, "filterModel">;
export declare const getColDefOverrides: (groupingColDefProp: DataGridPremiumProcessedProps["groupingColDef"], fields: string[], strategy?: RowGroupingStrategy) => import("@mui/x-data-grid-pro").GridGroupingColDefOverride<any> | null | undefined;
export declare const mergeStateWithRowGroupingModel: (rowGroupingModel: GridRowGroupingModel) => (state: GridStatePremium) => GridStatePremium;
export declare const setStrategyAvailability: (privateApiRef: RefObject<GridPrivateApiPremium>, disableRowGrouping: boolean, dataSource?: GridDataSource) => void;
export declare const getCellGroupingCriteria: ({
  row,
  colDef,
  groupingRule,
  apiRef
}: {
  row: GridRowModel;
  colDef: GridColDef;
  groupingRule: GridGroupingRule;
  apiRef: RefObject<GridPrivateApiPremium>;
}) => {
  key: GridKeyValue | null | undefined;
  field: string;
};
export declare const getGroupingRules: ({
  sanitizedRowGroupingModel,
  columnsLookup
}: {
  sanitizedRowGroupingModel: GridRowGroupingModel;
  columnsLookup: GridColumnRawLookup;
}) => GridGroupingRules;
/**
 * Compares two sets of grouping rules to determine if they are equal or not.
 */
export declare const areGroupingRulesEqual: (newValue: GridGroupingRules, previousValue: GridGroupingRules) => boolean;