/** * URL helpers shared by every piece of UI that builds a list-view URL: * the search box, the filter sidebar links, and pagination. * * Every list URL MUST go through `buildListUrl` — including pagination, * which today builds `?page=N` by hand. A hand-rolled URL bypasses the * "always drop `page` on filter change" invariant (docs/design §3.3, §7.1) * and risks parameter-order drift, which makes snapshots flaky. */ /** * Build a list-view URL from the current one, applying a patch of query * params. `null` in the patch removes that key. `page` is ALWAYS dropped * unless the patch explicitly sets it (pagination is the one caller that * does) — every other caller (search box, filter link) resets to page 1 * implicitly by omitting `page` from its patch. * * Keys are sorted before serialization so the resulting URL is * deterministic — required for stable snapshot tests, and incidentally * nicer to read/bookmark. */ export declare function buildListUrl(currentUrl: URL, patch: Record): string; /** * Hidden `` params to re-emit inside a `
` so * submitting it doesn't wipe out every other active param — a bare GET * form REPLACES the whole query string with just its own fields (docs/design * §3.3). `exclude` lists the param(s) the form itself controls (e.g. `q` * for the search box, `f.published` for a single-field filter form); * `page` is always excluded too, since any new search/filter resets it. */ export declare function hiddenParams(currentUrl: URL, exclude: string[]): { name: string; value: string; }[];