export interface UseApiDataOptions {
    maxRetries?: number;
    /** Base delay in ms for exponential backoff (default 1000). Actual delay = base * 2^attempt. */
    retryBaseMs?: number;
    /**
     * When set, successful responses are cached in-memory keyed by endpoint
     * for this many ms and reused on the next mount, skipping the network
     * (cache-first). Opt-in — omit to keep the default always-fetch
     * behaviour. `refetch()` always bypasses the cache. Useful for views
     * that remount frequently (e.g. dashboard navigation) so they don't
     * re-issue the same requests on every visit.
     */
    cacheMs?: number;
}
/** Test-only: drop all cached responses so cases don't bleed into each other. */
export declare function __clearApiDataCache(): void;
export interface UseApiDataResult<T> {
    data: T | null;
    loading: boolean;
    error: string | null;
    /** True when all retries are exhausted and the request permanently failed. */
    exhausted: boolean;
    refetch: () => void;
}
export declare function useApiData<T>(endpoint: string | null, defaultValue?: T | null, options?: UseApiDataOptions): UseApiDataResult<T>;
//# sourceMappingURL=useApiData.d.ts.map