import type { DataRequest, DataResponse, DataResponsePinned, QueryFnParams } from "./types";
import { type Piece } from "@1771technologies/lytenyte-core/internal";
import { type RowGroup, type RowLeaf, type RowNode, type RowSelectionState, type RowSource } from "@1771technologies/lytenyte-shared";
export interface RowSourceServer<T> extends RowSource<T> {
    readonly isLoading: Piece<boolean>;
    readonly loadingError: Piece<unknown>;
    readonly requestsForView: Piece<DataRequest[]>;
    readonly seenRequests: Set<string>;
    readonly retry: () => void;
    readonly requestForGroup: (row: RowGroup | number) => DataRequest | null;
    readonly requestForNextSlice: (currentRequest: DataRequest) => DataRequest | null;
    readonly refresh: (onSuccess?: () => void, onError?: (e: unknown) => void) => void;
    readonly pushResponses: (req: (DataResponse | DataResponsePinned)[]) => void;
    readonly pushRequests: (req: DataRequest[], onSuccess?: () => void, onError?: (e: unknown) => void) => void;
    readonly reset: () => void;
    readonly rowAdd: (rows: RowLeaf<T>[], placement?: "start" | "end") => void;
    readonly rowDelete: (rows: RowNode<T>[]) => void;
    readonly rowUpdate: (rows: Map<RowNode<T>, T>) => void;
}
export interface UseServerDataSourceParams<T = any, K extends unknown[] = any[]> {
    readonly queryFn: (params: QueryFnParams<K>) => Promise<(DataResponse | DataResponsePinned)[]>;
    readonly queryKey: K;
    readonly blockSize?: number;
    readonly rowGroupExpansions?: {
        [rowId: string]: boolean | undefined;
    };
    readonly rowGroupDefaultExpansion?: boolean | number;
    readonly onRowGroupExpansionChange?: (state: Record<string, boolean | undefined>) => void;
    readonly rowsIsolatedSelection?: boolean;
    readonly rowSelection?: RowSelectionState;
    readonly rowSelectionIdUniverseAdditions?: {
        readonly id: string;
        readonly root: boolean;
    }[];
    readonly rowSelectionIdUniverseSubtractions?: Set<string>;
    readonly onRowSelectionChange?: (state: RowSelectionState) => void;
    readonly rowSelectKey?: unknown[];
    readonly hasRowBranches?: "infer" | boolean;
    readonly rowUpdateOptimistically?: boolean;
    readonly onRowDataChange?: (params: {
        readonly rows: Map<RowNode<T>, T>;
    }) => Promise<void>;
    readonly onRowsDeleted?: (params: {
        readonly rows: RowNode<T>[];
    }) => Promise<void>;
    readonly onRowsAdded?: (params: {
        readonly rows: RowLeaf<T>[];
        placement: "start" | "end";
    }) => Promise<void>;
}
export declare function useServerDataSource<T, K extends unknown[] = unknown[]>(props: UseServerDataSourceParams<T, K>): RowSourceServer<T>;
