import { type QueryKey, type UseQueryOptions, useQuery } from "@tanstack/react-query";
import type { InferSafeActionFnInput, InferSafeActionFnResult, SafeActionFn } from "next-safe-action";
import type { HookSafeActionFn } from "next-safe-action/hooks";
export declare class SafeActionError extends Error {
    readonly type: "server" | "validation" | "network";
    readonly details?: unknown | undefined;
    constructor(message: string, type: "server" | "validation" | "network", details?: unknown | undefined);
}
export interface UseSafeActionQueryOptions<TData, TInput> extends Omit<UseQueryOptions<TData, SafeActionError>, "queryKey" | "queryFn"> {
    actionInput: TInput;
    onServerError?: (error: string) => void;
    onValidationErrors?: (errors: string[]) => void;
    onNetworkError?: (error: Error) => void;
}
export type SafeActionQueryOptionsWithOutInput<TAction extends SafeActionFn<any, any, any, any, any>> = Omit<UseSafeActionQueryOptions<InferSafeActionFnResult<TAction>["data"], InferSafeActionFnInput<TAction>["clientInput"]>, "actionInput">;
/**
 * Generic hook for using Next Safe Actions with TanStack Query
 * Properly infers types from the safe action function
 * Supports actions with or without bind arguments
 */
export declare function useSafeActionQuery<TAction extends HookSafeActionFn<any, any, any, any>, TData = NonNullable<InferSafeActionFnResult<TAction>["data"]>, TInput = InferSafeActionFnInput<TAction>["clientInput"]>(queryKey: QueryKey, action: TAction, options: UseSafeActionQueryOptions<TData, TInput>): SafeActionQueryResult<TData>;
export type SafeActionQueryResult<TData> = ReturnType<typeof useQuery<TData, SafeActionError>>;
//# sourceMappingURL=index.d.ts.map