export type LoaderTimingEntry = {
    path: string;
    startTime: number;
    moduleLoadTime?: number;
    executionTime?: number;
    totalTime?: number;
    error?: string;
    source: 'preload' | 'initial' | 'refetch';
};
export declare function getLoaderTimingHistory(): LoaderTimingEntry[];
/**
 * Imperatively refetch loader data for a given path.
 *
 * @param pathname - The route path to refetch (e.g., '/users/123')
 * @returns Promise that resolves when refetch completes
 * @link https://onestack.dev/docs/api/hooks/useLoaderState#refetchloader
 *
 * @example
 * ```tsx
 * await refetchLoader('/users/123')
 * ```
 */
export declare function refetchLoader(pathname: string): Promise<void>;
/**
 * Refetch the loader data for a specific match (identified by routeId) by fetching
 * the current page's loader JS and updating only that match entry in clientMatches.
 *
 * Note: the server's loader JS endpoint runs the *page* loader, so for layout
 * routeIds this fetches fresh page data and stores it on the layout match. A
 * dedicated per-layout refetch endpoint would be needed to truly re-run a layout
 * loader in isolation; that can be added in a follow-up.
 */
export declare function refetchMatchLoader(routeId: string, currentPath: string): Promise<void>;
/**
 * Access loader data with full state control including refetch capability.
 * Use this when you need loading state or refetch; use `useLoader` for just data.
 *
 * @param loader - The loader function (optional - omit for just refetch/state)
 * @returns Object with data, state ('idle' | 'loading'), and refetch function
 * @link https://onestack.dev/docs/api/hooks/useLoaderState
 *
 * @example
 * ```tsx
 * const { data, state, refetch } = useLoaderState(loader)
 *
 * return (
 *   <div>
 *     {state === 'loading' && <Spinner />}
 *     <button onClick={refetch}>Refresh</button>
 *     <pre>{JSON.stringify(data)}</pre>
 *   </div>
 * )
 * ```
 */
export declare function useLoaderState<Loader extends Function = any, Returned = Loader extends (p: any) => any ? ReturnType<Loader> : unknown>(loader?: Loader): Loader extends undefined ? {
    refetch: () => Promise<void>;
    state: 'idle' | 'loading';
} : {
    data: Returned extends Promise<any> ? Awaited<Returned> : Returned;
    refetch: () => Promise<void>;
    state: 'idle' | 'loading';
};
/**
 * Load route data with SSR/SSG support. Returns the loader's data directly.
 * For loading state and refetch capability, use `useLoaderState` instead.
 *
 * @param loader - The loader function exported from the route file
 * @returns The awaited return value of your loader function
 * @link https://onestack.dev/docs/api/hooks/useLoader
 *
 * @example
 * ```tsx
 * export async function loader({ params }) {
 *   return { user: await fetchUser(params.id) }
 * }
 *
 * export default function UserPage() {
 *   const { user } = useLoader(loader)
 *   return <div>{user.name}</div>
 * }
 * ```
 */
export declare function useLoader<Loader extends Function, Returned = Loader extends (p: any) => any ? ReturnType<Loader> : unknown>(loader: Loader): Returned extends Promise<any> ? Awaited<Returned> : Returned;
export { setSSRLoaderData } from './server/ssrLoaderData';
export declare function resetLoaderState(): void;
//# sourceMappingURL=useLoader.d.ts.map