import { ReactNode } from 'react';
import ItemModel from './ItemModel';
export declare type ValueGetter<I, V, F> = ((item: I, fieldModel: FieldModel<I, V, F>, itemType: ItemModel<I>) => V);
export interface FilterCellRendererProps<I, V, F> {
    field: FieldModel<I, V, F>;
    filterBy: F | undefined;
    onFilterByChange: (filterBy: F | undefined) => unknown;
}
export interface FilterValueConverter<F> {
    fromStrings: (str: string[]) => F | undefined;
    toStrings: (filterBy: F) => string[];
}
export interface ValueRendererProps<ItemType, ValueType> {
    value: ValueType;
    item: ItemType;
}
interface FieldModel<ItemType, ValueType, FilterValueType> {
    key: string;
    title: string;
    description?: ReactNode;
    hiddenByDefault?: boolean;
    sortable?: boolean;
    renderFilterCell?: React.ComponentType<FilterCellRendererProps<ItemType, ValueType, FilterValueType>>;
    filterValueConverter?: FilterValueConverter<FilterValueType>;
    getter?: ValueGetter<ItemType, ValueType, FilterValueType>;
    render?: React.ComponentType<ValueRendererProps<ItemType, ValueType>>;
    headerCellContent?: React.ComponentType<{
        field: FieldModel<ItemType, ValueType, FilterValueType>;
    }>;
    headerCellProps?: React.ComponentProps<'th'>;
    valueCellProps?: (value: ValueType, item: ItemType, fieldModel: FieldModel<ItemType, ValueType, FilterValueType>) => Record<string, unknown>;
}
export declare const defaultGetter: <I, V, F>(item: I, fieldModel: FieldModel<I, V, F>) => V;
export declare function defaultFilterValueConverter<F>(): FilterValueConverter<F>;
export declare function defaultHeaderCellProps<I, V, F>(): ((fieldModel: FieldModel<I, V, F>) => Record<string, unknown>);
export declare function defaultValueCellProps<I, V, F>(): ((value: V, item: I, fieldModel: FieldModel<I, V, F>) => Record<string, unknown>);
export declare function defaultRender<ValueType>({ value }: ValueRendererProps<ValueType, unknown>): ReactNode;
export default FieldModel;
//# sourceMappingURL=FieldModel.d.ts.map