import type { Accessor } from './signals.js'; import type { Component } from './component.js'; import type { QueryClient, DehydratedState } from './query.js'; import type { JSX } from '../jsx-runtime.js'; export interface Location { pathname: string; search: string; hash: string; state: unknown; } export interface NavigateOptions { replace?: boolean; state?: unknown; basename?: string; preventScrollReset?: boolean; } export declare function navigate( to: string, options?: NavigateOptions ): void | Promise; export declare function setNavigateBasename(basename?: string): void; export declare function getNavigateBasename(): string; export interface RouteProps { path?: string; component?: Component>; element?: JSX.Element | Component>; index?: boolean; id?: string; loader?: RouteLoader; action?: RouteAction; shouldRevalidate?: ShouldRevalidate; errorElement?: JSX.Element | Component>; handle?: unknown; meta?: RouteMeta; getStaticPaths?: () => | Array | { params: Record }> | Promise | { params: Record }>>; children?: JSX.Element; } export declare function Route(props: RouteProps): JSX.Element; export interface RouterProps { mode?: 'flat' | 'nested'; basename?: string; routes?: RouteDescriptor[]; children?: JSX.Element; pageProps?: Record; context?: unknown; queryClient?: QueryClient; hydrationState?: DehydratedRouteState; fallback?: JSX.Element | ((navigation: NavigationSnapshot) => JSX.Element); errorElement?: Component<{ error: unknown }>; scrollRestoration?: boolean; } export interface RouteLoaderArgs { request: Request; params: Record; location: Location; signal: AbortSignal; queryClient?: QueryClient; context?: unknown; formData?: FormData | null; } export type RouteLoader = (args: RouteLoaderArgs) => unknown | Promise; export type RouteAction = RouteLoader; export type ShouldRevalidate = (args: { currentLocation: Location; nextLocation: Location; reason: string; }) => boolean; export type RouteMeta = | Record | Record[] | ((args: { data: unknown; location: Location; params: Record; }) => Record | Record[]); export interface RouteDescriptor extends Omit { path?: string; children?: RouteDescriptor[]; } export declare function Router(props: RouterProps): JSX.Element; export interface LinkProps { href?: string; to?: string; class?: string; className?: string; activeClass?: string; replace?: boolean; state?: unknown; target?: string; children?: JSX.Element; onClick?: (e: MouseEvent) => void; onclick?: (e: MouseEvent) => void; [key: string]: unknown; } export declare function Link(props: LinkProps): JSX.Element; export declare function useLocation(): Accessor; export declare function useParams< T extends Record = Record, >(): Accessor; export interface PathMatch { params: Record; score: number; } export interface FlatRouteMatch extends PathMatch { route: RouteDescriptor; path: string; component?: Component; } export interface RouteMatch { id: string; path: string; pathname: string; params: Record; route: RouteDescriptor; handle?: unknown; } export declare function matchPath( pattern: string, pathname: string ): PathMatch | null; export declare function matchRoutes( routes: RouteDescriptor[], pathname: string ): FlatRouteMatch | null; export declare function matchRouteBranch( routes: RouteDescriptor[], pathname: string ): RouteMatch[] | null; export declare function Outlet(props?: { context?: unknown }): JSX.Element; export declare function useMatches(): Accessor; export declare function useOutletContext(): T; export declare function useRouteLoaderData( routeId?: string ): Accessor; export declare function useRouteActionData( routeId?: string ): Accessor; export declare function useRouteError( routeId?: string ): Accessor; export interface NavigationSnapshot { state: 'idle' | 'loading' | 'submitting'; location?: Location; formAction?: string; formData?: FormData | null; formMethod?: string; } export declare function useNavigation(): { state: Accessor; location: Accessor; formAction: Accessor; formData: Accessor; formMethod: Accessor; }; export interface SubmitOptions extends NavigateOptions { method?: string; formData?: FormData; data?: FormData; navigate?: boolean; } export declare function submitRoute( target: string, options?: SubmitOptions ): Promise; export declare function useSubmit(): typeof submitRoute; export declare function redirect( to: string, options?: { replace?: boolean; status?: number } ): never; export declare function useSearchParams(): [ Accessor, ( value: | string | URLSearchParams | Record | ((current: URLSearchParams) => URLSearchParams), options?: NavigateOptions ) => void | Promise, ]; export declare function queryLoader( options: | Record | ((args: RouteLoaderArgs) => Record) ): RouteLoader; export interface DehydratedRouteState { actionData: [string, unknown][]; errors?: [string, { message: string; name: string; status?: number }][]; loaderData: [string, unknown][]; locationKey: string | null; matches: Omit[]; } export declare function dehydrateRouteState(): DehydratedRouteState; export declare function hydrateRouteState(state: DehydratedRouteState): void; export declare function RouteHydrationBoundary(props: { state: DehydratedRouteState; children?: JSX.Element; }): JSX.Element; export interface PreparedRoutes { status: number; redirect: string | null; headers: Headers; location: Location; matches: RouteMatch[]; metadata: Record[]; routeState: DehydratedRouteState; queryState?: DehydratedState; errors: Map; } export declare function prepareRoutes( routes: RouteDescriptor[], url: string, options?: { basename?: string; context?: unknown; queryClient?: QueryClient; } ): Promise; export declare function renderRoute( Component: Component, props?: Record, options?: { routes?: RouteDescriptor[]; url?: string; basename?: string; context?: unknown; queryClient?: QueryClient; request?: Request; maxPasses?: number; } ): Promise; export declare function renderRouteDocument( Component: Component, props?: Record, options?: Parameters[2] & { document?: Record; } ): Promise> & { document: string }>; export declare function renderRouteToReadableStream( Component: Component, props?: Record, options?: Parameters[2] & { document?: Record; nonce?: string; signal?: AbortSignal; } ): Promise & { shellReady: Promise; allReady: Promise; }; }>; export declare function hydrateRouterState( state: { route: DehydratedRouteState; query?: DehydratedState }, queryClient?: QueryClient ): void;