import { nothing } from "lit-html";
import type { ComponentType } from "../Template/x-x.types";
import { type RouterScrollOption } from "./scrollOutlet";
type RouteConfig = {
path: string;
component: ComponentType;
};
export type RouterOptions = {
/**
* Scroll this router's outlet into view when `patternsAtom` changes
* (matched route pattern changed — not param-only / qs / hash).
* - `true` / omitted — enabled (default)
* - `false` — opt out
* - `ScrollIntoViewOptions` — enabled with custom options
*/
scroll?: RouterScrollOption;
};
/**
* Internal matcher used by {@link Router}. Not part of the public API —
* nest UI with `paramsAtom` / `qsAtom` conditionals instead of calling this.
*/
export declare const route: (path: string, viewFn: ComponentType, props?: Record) => typeof nothing | import("lit-html").TemplateResult<1> | null;
/**
* Ordered router — first match wins. **Only one** {@link Router} or
* {@link animatedRouter} may be mounted per app/scope (shared `patternsAtom`).
* Nest screens with conditionals on `paramsAtom` / `qsAtom` / `pathAtom`.
*
* By default, scrolls the outlet into view when **`patternsAtom` changes**.
* Param-only / qs / hash updates do not scroll. Skipped on first paint.
*
* @example
* const appRouter = Router([
* { path: "/", component: HomePage },
* { path: "/users/:id", component: UserPage },
* ], NotFoundPage);
*
* ${appRouter()}
*
* // Nested UI inside UserPage — no second router:
* paramsAtom().photoId ? x(Photo) : nothing
*/
export declare const Router: (routeConfig: RouteConfig[], NotFound?: ComponentType, options?: RouterOptions) => () => import("lit-html").TemplateResult<1>;
export {};
//# sourceMappingURL=Router.d.ts.map