import { Getter } from '@prefecthq/prefect-design';
import { SubscriptionOptions } from '@prefecthq/vue-compositions';
import { ComputedRef, MaybeRef, Ref } from 'vue';
import { UseSubscriptions } from '../compositions/useSubscriptions';
type PaginationFilter = {
    limit?: number;
    offset?: number;
};
type PaginationParameters = [filter?: PaginationFilter, ...any[]];
type PaginationFetchAction = (...parameters: PaginationParameters) => Promise<unknown[]>;
type PaginationCountAction = (...parameters: PaginationParameters) => Promise<number>;
export type PaginationOptions = SubscriptionOptions & {
    mode?: 'page' | 'infinite';
    page?: MaybeRef<number>;
};
export type UsePaginationParameters<TFetch extends PaginationFetchAction, TFetchParameters extends Getter<Parameters<TFetch> | null>, TCount extends PaginationCountAction, TCountParameters extends Getter<Parameters<TCount> | null>> = {
    fetchMethod: TFetch;
    fetchParameters: TFetchParameters;
    countMethod: TCount;
    countParameters: TCountParameters;
    options?: PaginationOptions;
};
export type UsePaginationEntity<TFetch extends PaginationFetchAction, TCount extends PaginationCountAction, TProperty extends string> = Omit<UsePagination<TFetch, TCount>, 'results'> & {
    [P in TProperty]: ComputedRef<Awaited<ReturnType<TFetch>>>;
};
export type UsePagination<TFetch extends PaginationFetchAction, TCount extends PaginationCountAction> = {
    subscriptions: UseSubscriptions<TCount | TFetch | (() => undefined)>['subscriptions'];
    results: ComputedRef<Awaited<ReturnType<TFetch>>>;
    total: ComputedRef<number>;
    pages: ComputedRef<number>;
    page: Ref<number>;
    next: () => void;
    previous: () => void;
};
export declare function usePagination<TFetch extends PaginationFetchAction, TFetchParameters extends Getter<Parameters<TFetch> | null>, TCount extends PaginationCountAction, TCountParameters extends Getter<Parameters<TCount> | null>>({ fetchMethod, fetchParameters: fetchParametersGetter, countMethod, countParameters: countParametersGetter, options, }: UsePaginationParameters<TFetch, TFetchParameters, TCount, TCountParameters>): UsePagination<TFetch, TCount>;
export {};
