import * as react_jsx_runtime from 'react/jsx-runtime';
import { PropsWithChildren } from 'react';
import * as next_types from 'next/types';
import { GetStaticPropsResult, GetStaticPropsContext } from 'next/types';

type Swr = {
    dedupingInterval?: number;
    expires?: number;
    refreshInterval?: number | ((props: Props) => number);
    revalidateIfStale?: boolean;
    revalidateOnFocus?: boolean;
    revalidateOnMount?: boolean;
    revalidate_f?: number;
    swrPath?: string;
    time?: number;
    times?: {
        offset: number;
        latency?: number;
        firstLoad?: boolean;
    };
};
type Props = {
    [key: string]: unknown;
} & {
    swr?: Swr;
};
type GetStaticPropsSwr = GetStaticPropsResult<Props> & {
    props?: Props;
    swr?: Swr;
};
type UseRevalidateResult = [Props, (newState: Props | ((props: Props) => Props)) => void];
type UseTimesResult = {
    time?: number;
    offset?: number;
    latency?: number;
    firstLoad?: boolean;
};

declare function RevalidateProvider({ children, swr, ...props }: PropsWithChildren<Props>): react_jsx_runtime.JSX.Element;

declare function getStaticPropsRevalidate(getStaticProps: (ctx: GetStaticPropsContext) => Promise<GetStaticPropsSwr>): (ctx: GetStaticPropsContext) => Promise<{
    redirect: next_types.Redirect;
    props: {
        swr: {
            expires: number;
            refreshInterval?: number | ((props: Props) => number) | undefined;
            revalidateIfStale?: boolean | undefined;
            revalidateOnFocus?: boolean | undefined;
            revalidateOnMount?: boolean | undefined;
            swrPath?: string | undefined;
            time: number;
            times?: {
                offset: number;
                latency?: number | undefined;
                firstLoad?: boolean | undefined;
            } | undefined;
            dedupingInterval: number;
        };
    } | {
        swr: Swr;
    } | {
        swr: Swr;
    };
    revalidate: number | boolean;
} | {
    notFound: true;
    props: {
        swr: {
            expires: number;
            refreshInterval?: number | ((props: Props) => number) | undefined;
            revalidateIfStale?: boolean | undefined;
            revalidateOnFocus?: boolean | undefined;
            revalidateOnMount?: boolean | undefined;
            swrPath?: string | undefined;
            time: number;
            times?: {
                offset: number;
                latency?: number | undefined;
                firstLoad?: boolean | undefined;
            } | undefined;
            dedupingInterval: number;
        };
    } | {
        swr: Swr;
    } | {
        swr: Swr;
    };
    revalidate: number | boolean;
} | {
    props: {
        swr: {
            expires: number;
            refreshInterval?: number | ((props: Props) => number) | undefined;
            revalidateIfStale?: boolean | undefined;
            revalidateOnFocus?: boolean | undefined;
            revalidateOnMount?: boolean | undefined;
            swrPath?: string | undefined;
            time: number;
            times?: {
                offset: number;
                latency?: number | undefined;
                firstLoad?: boolean | undefined;
            } | undefined;
            dedupingInterval: number;
        };
    } | {
        swr: Swr;
    } | {
        swr: Swr;
    };
    revalidate: number | boolean;
}>;

declare function useRevalidate(props: Props): UseRevalidateResult;

declare function useTimes(): UseTimesResult;

export { RevalidateProvider, getStaticPropsRevalidate, useRevalidate, useTimes };
