import { Key, Keyed } from '@synnaxlabs/x';
import { PropsWithChildren, ReactElement } from 'react';
import { UseTransformsReturn } from '../hooks/useTransforms';
import { state } from '../state';
export interface DataContextValue<K extends Key = Key, E extends Keyed<K> = Keyed<K>> {
    transformedData: E[];
    sourceData: E[];
    transformed: boolean;
    emptyContent?: React.ReactElement;
}
export interface DataUtilContextValue<K extends Key = Key, E extends Keyed<K> = Keyed<K>> extends Omit<UseTransformsReturn<E>, "transform"> {
    setSourceData: state.Set<E[]>;
    getSourceData: () => E[];
    getTransformedData: () => E[];
    setEmptyContent: state.Set<React.ReactElement | undefined>;
    getEmptyContent: () => React.ReactElement | undefined;
    getDefaultEmptyContent: () => React.ReactElement | undefined;
    getTransformed: () => boolean;
}
export declare const useDataContext: <K extends Key = Key, E extends Keyed<K> = Keyed<K>>() => DataContextValue<K, E>;
export declare const useDataUtilContext: <K extends Key = Key, E extends Keyed<K> = Keyed<K>>() => DataUtilContextValue<K, E>;
export declare const useTransformedData: <K extends Key = Key, E extends Keyed<K> = Keyed<K>>() => E[];
export declare const useSourceData: <K extends Key = Key, E extends Keyed<K> = Keyed<K>>() => E[];
export declare const useGetTransformedData: <K extends Key = Key, E extends Keyed<K> = Keyed<K>>() => (() => E[]);
export declare const useSetSourceData: <K extends Key = Key, E extends Keyed<K> = Keyed<K>>() => state.Set<E[]>;
export interface DataProviderProps<K extends Key, E extends Keyed<K>> extends PropsWithChildren<{}> {
    data?: E[];
    emptyContent?: React.ReactElement;
}
export declare const DataProvider: <K extends Key = Key, E extends Keyed<K> = Keyed<K>>({ data: sourceData, emptyContent: emptyContentProp, children, }: DataProviderProps<K, E>) => ReactElement;
//# sourceMappingURL=Data.d.ts.map