import type { ReactNode } from 'react';
import type { Resolver, ResolverContext, ResolveCellArgs, ResolveHeaderArgs, ResolveHeaderReturn } from '../resolvers/core';
import type { DataGridColumn, DataGridDensity } from '../typings';
import type { UseSortReturn, UseDataGridSortParams } from './useDataGridSort';
import type { DataViewState } from '../../DataView';
export declare function useDataGridState<T>(params: UseDataGridStateParams<T>, resolvers?: Record<string, Resolver<T>> | undefined): DataGridState<T>;
export interface UseDataGridStateParams<T> {
    /**
     * Table column spec
     */
    columns: Array<DataGridColumn<T>>;
    /**
     * data-view state
     */
    view?: DataViewState;
    /**
     * Resolver context
     */
    context?: ResolverContext;
    /**
     * Key extractor
     * @default (item)=>item.id
     */
    getRowKey?: (item: T) => string;
    /**
     * Table items
     * @default []
     */
    items?: T[];
    /**
     * Expected items length
     * @default 5
     */
    length?: number;
    /**
     * Object used in sort hook
     */
    sort?: UseDataGridSortParams<T>;
    /**
     * Table row height
     * @default regular
     */
    density?: DataGridDensity;
    /**
     * Action to dispatch on a row click
     */
    onRowClick?: (item: T) => void;
}
export interface DataGridState<T> {
    /**
     * Collection rendered while loading
     */
    skeletonCollection: T[];
    /**
     * Resolves the cell content
     */
    resolveCell: (args: ResolverCallee<ResolveCellArgs<T>>) => ReactNode;
    /**
     * Resolvers the header content
     */
    resolveHeader: (args: ResolverCallee<ResolveHeaderArgs<T>>) => ResolveHeaderReturn;
    /**
     * Items to render
     */
    data: T[];
    /**
     * Grid columns
     */
    columns: Array<DataGridColumn<T>>;
    /**
     * Current sorting state
     */
    sortState: UseSortReturn;
    /**
     * Key extractor
     */
    getRowKey: (item: T) => string | unknown;
    /**
     * Current grid density
     */
    density: DataGridDensity;
    /**
     * Set the current grid density
     */
    setDensity: React.Dispatch<DataGridDensity>;
    /**
     * Action to take on click a row
     */
    onRowClick?: (item: T) => void;
}
/**
 * Caller of a resolver
 */
declare type ResolverCallee<T> = Omit<T, 'resolvers' | 'context' | 'sortState'>;
export {};
