declare const WINDOW_DATA_KEY = "__FW_DATA__";
declare const ROUTER_DATA_KEY = "__LOLY_ROUTER_DATA__";
declare const ROUTER_NAVIGATE_KEY = "__LOLY_ROUTER_NAVIGATE__";

type InitialData = {
    pathname: string;
    params: Record<string, string>;
    props: Record<string, any>;
    metadata?: {
        title?: string;
        description?: string;
    } | null;
    className?: string;
    notFound?: boolean;
    error?: boolean;
    theme?: string;
};
type RouterData = {
    pathname: string;
    params: Record<string, string>;
    searchParams: Record<string, unknown>;
};
declare global {
    interface Window {
        [WINDOW_DATA_KEY]?: InitialData;
        [ROUTER_DATA_KEY]?: RouterData;
        [ROUTER_NAVIGATE_KEY]?: (url: string, options?: {
            revalidate?: boolean;
            replace?: boolean;
        }) => Promise<void>;
    }
}
type ClientLoadedComponents = {
    Page: React.ComponentType<any>;
    layouts: React.ComponentType<any>[];
};
type ClientRouteLoaded = {
    pattern: string;
    paramNames: string[];
    load: () => Promise<ClientLoadedComponents>;
};
type ClientRouteMatch = {
    route: ClientRouteLoaded;
    params: Record<string, string>;
};
type RouteViewState = {
    url: string;
    route: ClientRouteLoaded | null;
    params: Record<string, string>;
    components: ClientLoadedComponents | null;
    props: Record<string, any>;
};

/**
 * Bootstraps the client-side application.
 *
 * Simplified flow:
 * 1. Setup hot reload (development only)
 * 2. Get container and initial data
 * 3. Initialize router data
 * 4. Load and hydrate initial route
 *
 * @param routes - Array of client routes
 * @param notFoundRoute - Not-found route definition
 * @param errorRoute - Error route definition
 */
declare function bootstrapClient(routes: ClientRouteLoaded[], notFoundRoute: ClientRouteLoaded | null, errorRoute?: ClientRouteLoaded | null): void;

export { type ClientRouteLoaded as C, type InitialData as I, type RouteViewState as R, type ClientLoadedComponents as a, type ClientRouteMatch as b, bootstrapClient as c };
