From 71c7e2141708c27a8debe606457b7736b304e969 Mon Sep 17 00:00:00 2001 From: Karolis Narkevicius Date: Tue, 28 Apr 2026 09:40:42 +0100 Subject: [PATCH 01/17] Recenter router around useTransition + Suspense for 1.0 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Why: the 0.6.x escape hatches (onNavigating, onNavigated, useRoute injection prop) predate React's useTransition and force route state out of the router, which breaks Suspense's transition contract — the commit needs to be inside startTransition for the previous route to stay on screen while the next one prepares. Router: drops onNavigating/onNavigated/useRoute props. State is now internal (useState + useTransition). Adds: - prepare(ctx) per route — returns PreparedHandle[] for figbird-style fetch-as-you-render data loading. Router pins handles for the lifetime of the committed nav and releases them on the next commit or on Routes unmount. - resolver: () => import('./Page') — preloaded at navigate time and rendered via React.lazy. - transformRoute() — synchronous pre-commit URL rewrite hook, replaces the one legitimate use case for onNavigating (e.g. persisted-query restoration with history.replaceState). - usePending() — exposes useTransition's isPending for top-bar progress and "click did something" affordances. - DelayedSuspense + Router pendingDelayMs — encapsulates the "hold previous route for N ms then degrade to skeleton" pattern. Internally uses a never-resolving-promise fallback during the hold window so suspension propagates to the outer transition, then swaps to the real fallback once the threshold elapses or the boundary post-commits with reads still pending. - defineRoute / defineRoutes — typed identity helpers. Tests: rewritten for the new API; new coverage for transformRoute, usePending, and the prepare/release lifecycle. Docs: README, docs/content/_index.md fully updated. New MIGRATION.md walks 0.6.x → 1.0 with recipes for the removed surfaces. Demo: examples/loading-modes/ — Vite app showcasing the three loading-mode patterns (immediate+skeletons, wait-for-ready, timed fallback) against simulated chunk + data latencies, so the API choices can be felt against real timings rather than argued in the abstract. dist/ rebuilt. Co-Authored-By: Claude Opus 4.7 --- .claude/launch.json | 11 + MIGRATION.md | 226 +++ README.md | 8 +- dist/index.d.ts | 108 +- dist/index.d.ts.map | 2 +- dist/index.js | 226 ++- dist/index.js.map | 2 +- docs/content/_index.md | 227 ++- examples/loading-modes/index.html | 12 + examples/loading-modes/package-lock.json | 1891 ++++++++++++++++++++ examples/loading-modes/package.json | 23 + examples/loading-modes/src/Shell.tsx | 111 ++ examples/loading-modes/src/data.ts | 89 + examples/loading-modes/src/main.tsx | 20 + examples/loading-modes/src/pages/Home.tsx | 92 + examples/loading-modes/src/pages/ModeA.tsx | 111 ++ examples/loading-modes/src/pages/ModeB.tsx | 82 + examples/loading-modes/src/pages/ModeC.tsx | 100 ++ examples/loading-modes/src/routes.ts | 54 + examples/loading-modes/src/styles.css | 349 ++++ examples/loading-modes/tsconfig.json | 19 + examples/loading-modes/vite.config.ts | 18 + src/index.tsx | 388 +++- test/router.test.tsx | 198 +- 24 files changed, 4127 insertions(+), 240 deletions(-) create mode 100644 .claude/launch.json create mode 100644 MIGRATION.md create mode 100644 examples/loading-modes/index.html create mode 100644 examples/loading-modes/package-lock.json create mode 100644 examples/loading-modes/package.json create mode 100644 examples/loading-modes/src/Shell.tsx create mode 100644 examples/loading-modes/src/data.ts create mode 100644 examples/loading-modes/src/main.tsx create mode 100644 examples/loading-modes/src/pages/Home.tsx create mode 100644 examples/loading-modes/src/pages/ModeA.tsx create mode 100644 examples/loading-modes/src/pages/ModeB.tsx create mode 100644 examples/loading-modes/src/pages/ModeC.tsx create mode 100644 examples/loading-modes/src/routes.ts create mode 100644 examples/loading-modes/src/styles.css create mode 100644 examples/loading-modes/tsconfig.json create mode 100644 examples/loading-modes/vite.config.ts diff --git a/.claude/launch.json b/.claude/launch.json new file mode 100644 index 0000000..0978eb4 --- /dev/null +++ b/.claude/launch.json @@ -0,0 +1,11 @@ +{ + "version": "0.0.1", + "configurations": [ + { + "name": "loading-modes-demo", + "runtimeExecutable": "npm", + "runtimeArgs": ["--prefix", "examples/loading-modes", "run", "dev", "--", "--port", "5273"], + "port": 5273 + } + ] +} diff --git a/MIGRATION.md b/MIGRATION.md new file mode 100644 index 0000000..7c46772 --- /dev/null +++ b/MIGRATION.md @@ -0,0 +1,226 @@ +# Migration Guide + +## 0.6.x → 1.0 + +The Router lifecycle is reframed: the router now owns route state internally +(via `useState` + `useTransition`) and applies it inside a React transition. The +old prop-based escape hatches (`onNavigating`, `onNavigated`, `useRoute`) are +gone, replaced by a single pre-commit transform and an explicit pending hook. + +This is a breaking change for any app that stored route state outside the +router or did async work in `onNavigating`. + +### Surface changes + +| Before | After | +| --- | --- | +| `` | `` | +| External Redux/atom-backed route state | Internal `useState` only | +| Manual `navigating: true/false` flag | `usePending()` | +| `route.data[i].component` only | `route.data[i].component` **or** `resolver: () => import(...)` | +| (no equivalent) | `route.data[i].prepare(ctx)` returning `PreparedHandle[]` | +| `defineRoute`/`defineRoutes` | Same — typed identity helpers (no runtime change) | + +### Why the change + +`useTransition` only works if the router itself owns the state update. If route +state lives in your Redux/Zustand store, the router's commit goes through your +dispatch — which isn't wrapped in `startTransition` — and Suspense fires +fallbacks at the wrong moment. + +Future commit policies (`commit: 'ready'`) make this worse: the router needs to +hold the previous route on screen *while awaiting* prepare promises. If state +lives outside, you'd have to expose "pending next route" + "previous route" + +"is this nav superseded" through your store. That's the router's job, leaking. + +### Migrating `onNavigating` + +`onNavigating` was used for two things. Both have replacements: + +**1. Awaiting `routeData.resolver()` to attach the component.** + +Before: + +```ts +const onNavigating = async (route) => { + await Promise.all( + route.data.map(async (rd) => { + if (!rd.component && rd.resolver) { + rd.component = await rd.resolver() + } + }), + ) +} +``` + +After: delete it. Declare `resolver` on the route segment and the router +preloads + renders via `React.lazy` automatically: + +```ts +{ path: '/issues/:id', resolver: () => import('./pages/IssueDetail') } +``` + +The destination's `` boundary handles the still-cold render. + +**2. Toggling a `navigating` flag for a top-of-page loading bar.** + +Before: + +```ts +const onNavigating = async (route) => { + store.set(routerAtom, (s) => ({ ...s, navigating: true })) + // ... await stuff ... +} +const onNavigated = (route) => { + store.set(routerAtom, (s) => ({ ...s, navigating: false })) +} +``` + +After: + +```ts +import { usePending } from 'react-space-router' + +function LoadingBar() { + const pending = usePending() + return pending ? : null +} +``` + +`usePending()` reads React's transition pending state directly — no manual flag +needed. + +### Migrating `onNavigated` + +Most uses are observers and become plain effects on `useRoute()`. + +**Analytics:** + +```ts +// Before +const onNavigated = (route) => trackPageView(route, prev) + +// After +const route = useRoute() +useEffect(() => trackPageView(route), [route]) +``` + +**Previous route tracking:** + +```ts +// Before +const onNavigated = (route) => store.set(routerAtom, (s) => ({ + ...s, route, previousRoute: s.route, +})) + +// After +const route = useRoute() +const prev = usePrevious(route) // your standard usePrevious hook +``` + +**Param reduction across `route.data`:** + +This was usually done because product code wanted to merge `params` declared on +ancestor segments. Move it to a `useRoute()` selector: + +```ts +function useMergedParams() { + const route = useRoute() + return useMemo( + () => + route?.data.reduce( + (acc, d) => Object.assign(acc, (d as any).params || {}), + { ...route.params }, + ) ?? {}, + [route], + ) +} +``` + +### Migrating persisted-query restoration → `transformRoute` + +This is the one case that genuinely needed pre-commit behavior. `transformRoute` +runs synchronously between match and commit; if it returns a route with a +different `url`, the router calls `history.replaceState` so the address bar +matches. + +Before (`onNavigated` did the rewrite + manual `replaceState`): + +```ts +const onNavigated = (route) => { + const persistKey = getPersistKey(route) + if (persistKey && !hasQuery(route)) { + const saved = persistedQueries.get(persistKey) + if (saved) { + const merged = { ...Object.fromEntries(new URLSearchParams(saved)), ...route.query } + const search = '?' + new URLSearchParams(merged).toString() + const url = route.pathname + search + store.set(routerAtom, (s) => ({ ...s, route: { ...route, query: merged, search, url } })) + window.history.replaceState({}, '', url) + return + } + } + store.set(routerAtom, (s) => ({ ...s, route })) +} +``` + +After: + +```ts +function transformRoute(route) { + const persistKey = getPersistKey(route) + if (!persistKey || hasQuery(route)) return // unchanged + + const saved = persistedQueries.get(persistKey) + if (!saved) return + + const merged = { ...Object.fromEntries(new URLSearchParams(saved)), ...route.query } + const search = '?' + new URLSearchParams(merged).toString() + return { ...route, query: merged, search, url: route.pathname + search } +} + +... +``` + +`transformRoute` must be pure and synchronous. Returning `undefined` (or `void`) +means "commit unchanged". + +### Removing the `useRoute` injection prop + +If you previously did: + +```ts + useSelector(() => routerAtom().route)}> +``` + +…delete it. The router holds route state internally; `useRoute()` from +`react-space-router` is the read API. Components subscribe to it directly. + +The kinfolk/Redux/Zustand atom that mirrored the router's state should be +deleted entirely — it was a relic of the "everything in global state" era and +breaks Suspense's transition contract. + +### What's *not* changing + +- Route definition shape (`{ path, component, routes, ... }`) is unchanged. New + fields (`resolver`, `prepare`, `navigation`) are additive. +- ``, ``, ``, `useLinkProps`, `useMakeHref`, + `useNavigate`, `qs` — unchanged. +- ESM-default components (`{ default: Component }`) still resolve via plain + `component:` — you don't have to switch to `resolver:` unless you want the + preload-and-suspend behavior. +- The `reduceRight` segment-rendering model stays. No `` — parents + receive `children` like any React component. + +### What's coming next + +These are deferred to later milestones. Migrate to 1.0 first; pick these up as +they land: + +- `commit: 'ready'` + `timeoutMs` — keep the previous route on screen while + prepare resolves, with a timeout fallback. Today only `'immediate'` works. +- `defineRoute()` with typed ``, + `navigate(route, args)`, etc. Today `defineRoute` is an identity helper. +- Synchronous initial route seed — remove the brief `null` first render. +- `useBlocker(predicate)` for cancellable navigation guards (unsaved-changes + prompts). Don't try to rebuild this with `transformRoute` — different shape. diff --git a/README.md b/README.md index cc55195..aa6f81f 100755 --- a/README.md +++ b/README.md @@ -6,13 +6,15 @@

Space Router bindings for React


-React Space Router is a set of hooks and components for keeping your app in sync with the url and performing page navigations. A library built by and used at [Humaans](https://humaans.io/). +React Space Router is a set of hooks and components for keeping your app in sync with the URL and performing page navigations. Suspense-aware and built around React's transition machinery. A library built by and used at [Humaans](https://humaans.io/). - React hooks based - Nested routes -- Async navigation middleware +- Code-split routes via `resolver` (`React.lazy` under the hood) +- Per-route `prepare(ctx)` for fetch-as-you-render data loading +- Pending state via `usePending()` (backed by `useTransition`) +- Optional pre-commit `transformRoute` hook for URL rewrites - Built in query string parser -- Supports external stores for router state - Scrolls to top after navigation - Preserves cmd/ctrl/alt/shift click and mouse middle click diff --git a/dist/index.d.ts b/dist/index.d.ts index fb54eb9..aff6804 100644 --- a/dist/index.d.ts +++ b/dist/index.d.ts @@ -1,27 +1,117 @@ -import { type AnchorHTMLAttributes, type CSSProperties, type MouseEvent, type ReactNode } from 'react'; +import { type AnchorHTMLAttributes, type ComponentType, type CSSProperties, type MouseEvent, type ReactNode } from 'react'; import { type Mode, type NavigateTarget, type Qs, type Route, type RouteDefinition, type Router as SpaceRouter } from 'space-router'; export { qs } from 'space-router'; +export interface RoutePrepareContext { + pathname: string; + url: string; + params: Record; + query: Record; +} +/** + * Lifecycle handle returned by data-layer `prepare()` calls (e.g. `figbird.prepare`). + * The router pins the underlying cache entries via `release()` for the lifetime of + * the navigation; superseded navigations release their handles immediately. + */ +export interface PreparedHandle { + promise: Promise; + release(): void; + priority?: 'route' | 'defer'; + key?: string | number; +} +export type RoutePrepare = (ctx: RoutePrepareContext) => readonly PreparedHandle[] | PreparedHandle[] | void; +export type ResolverModule = { + default: ComponentType; +}; +export type RouteResolver = () => Promise; +export interface RouteNavigationOptions { + /** + * `'immediate'` (default): commit the new route synchronously inside a React + * transition; let any unresolved route-priority data suspend at the + * destination's `` boundary. + * + * `'ready'` is reserved for a follow-up release. + */ + commit?: 'immediate'; +} +export interface RouteData { + path?: string; + component?: ComponentType | { + default: ComponentType; + }; + resolver?: RouteResolver; + prepare?: RoutePrepare; + navigation?: RouteNavigationOptions; + scrollGroup?: string; + routes?: RouteData[]; + [extra: string]: unknown; +} +export declare function defineRoute(route: T): T; +export declare function defineRoutes(routes: T): T; interface RouterContextValue { router: SpaceRouter; - useRoute: () => Route | null; - onNavigating?: (route: Route) => void | Promise; - onNavigated: (route: Route) => void; + route: Route | null; + commit: (route: Route) => void; + isPending: boolean; } export declare const RouterContext: import("react").Context; -export declare const CurrRouteContext: import("react").Context> | null>; export declare function useInternalRouterInstance(): SpaceRouter; export declare function useRoute(): Route | null; +/** + * `true` while the router is between navigation start and commit. Backed by + * React's `useTransition` — flips on as soon as `navigate()` runs and flips off + * once the destination has committed (and any Suspense fallbacks at the new + * route have resolved enough to let React's transition settle). + * + * Use this for top-of-page progress bars, desaturated link states, and "your + * click did something" affordances. Don't use it for skeletons — those belong + * in destination Suspense boundaries. + */ +export declare function usePending(): boolean; export declare function useNavigate(): (to: To) => void; +/** + * Optional pre-commit transform. Runs synchronously between match and commit. + * Return a modified route to change what gets committed (e.g. to merge a + * persisted query). If the returned route's `url` differs from the matched + * route's, the browser URL is synced via `history.replaceState` so the address + * bar matches what the app is rendering. + * + * Must be pure and synchronous. + */ +export type TransformRoute = (route: Route) => Route | void; export interface RouterProps { mode?: Mode; qs?: Qs; sync?: boolean; - useRoute?: () => Route | null; - onNavigating?: (route: Route) => void | Promise; - onNavigated?: (route: Route) => void; + transformRoute?: TransformRoute; + /** + * How long to hold the previous route on screen before `` + * boundaries fall back to their fallback content. Default is `1000` ms. + * No effect on plain `` boundaries — those always show their + * fallback the moment the boundary mounts. + */ + pendingDelayMs?: number; + children?: ReactNode; +} +export declare function Router({ mode, qs, sync, transformRoute, pendingDelayMs, children, }: RouterProps): import("react/jsx-runtime").JSX.Element; +/** + * A `` boundary whose fallback is *delayed* during an in-flight + * router navigation: until the router has been pending for `pendingDelayMs` + * (configured on ``, default 1000ms), the fallback re-throws so + * suspension propagates upward — typically to the router-level transition, + * which keeps the previous route on screen. Past the threshold (or when + * the transition has already committed and a read is still pending), the + * fallback renders normally. + * + * Use this when you want "stay on the previous page for a moment, then if + * it's still loading degrade to a skeleton" — the classic browser-style + * UX for variable-latency data. Outside an in-flight nav, behaves + * identically to plain ``. + */ +export interface DelayedSuspenseProps { + fallback: ReactNode; children?: ReactNode; } -export declare function Router({ mode, qs, sync, useRoute, onNavigating, onNavigated, children }: RouterProps): import("react/jsx-runtime").JSX.Element; +export declare function DelayedSuspense({ fallback, children }: DelayedSuspenseProps): import("react/jsx-runtime").JSX.Element; export interface RoutesProps { routes: RouteDefinition[]; disableScrollToTop?: boolean; diff --git a/dist/index.d.ts.map b/dist/index.d.ts.map index 58be598..d1a1d6f 100644 --- a/dist/index.d.ts.map +++ b/dist/index.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/index.js b/dist/index.js index b6bc559..f532838 100644 --- a/dist/index.js +++ b/dist/index.js @@ -1,100 +1,212 @@ import { jsx as _jsx } from "react/jsx-runtime"; -import { createContext, useCallback, useContext, useState, useEffect, useMemo, useRef, } from 'react'; +import { createContext, lazy as reactLazy, Suspense, useCallback, useContext, useState, useEffect, useMemo, useRef, useTransition, } from 'react'; import { createRouter, } from 'space-router'; export { qs } from 'space-router'; +export function defineRoute(route) { + return route; +} +export function defineRoutes(routes) { + return routes; +} +const resolverPromiseCache = new WeakMap(); +const resolverComponentCache = new WeakMap(); +function preloadResolver(resolver) { + let promise = resolverPromiseCache.get(resolver); + if (!promise) { + promise = resolver(); + resolverPromiseCache.set(resolver, promise); + } + return promise; +} +function getResolverComponent(resolver) { + let component = resolverComponentCache.get(resolver); + if (!component) { + component = reactLazy(() => preloadResolver(resolver)); + resolverComponentCache.set(resolver, component); + } + return component; +} +function buildPrepareContext(route) { + const r = route; + return { + pathname: r.pathname ?? '', + url: r.pathname ?? '', + params: r.params ?? {}, + query: r.query ?? {}, + }; +} export const RouterContext = createContext(undefined); -export const CurrRouteContext = createContext(null); -export function useInternalRouterInstance() { +// Internal context for ``. Set by `` based on +// `usePending()` + a configurable threshold. `holding` is true only during +// the pre-commit window where we want the previous route to stay on screen. +const DelayedSuspenseContext = createContext(false); +function useRouterCtx() { const ctx = useContext(RouterContext); - if (!ctx?.router) { + if (!ctx) { throw new Error('Application must be wrapped in '); } - return ctx.router; + return ctx; +} +export function useInternalRouterInstance() { + return useRouterCtx().router; } export function useRoute() { - return useContext(RouterContext).useRoute(); + return useRouterCtx().route; +} +/** + * `true` while the router is between navigation start and commit. Backed by + * React's `useTransition` — flips on as soon as `navigate()` runs and flips off + * once the destination has committed (and any Suspense fallbacks at the new + * route have resolved enough to let React's transition settle). + * + * Use this for top-of-page progress bars, desaturated link states, and "your + * click did something" affordances. Don't use it for skeletons — those belong + * in destination Suspense boundaries. + */ +export function usePending() { + return useRouterCtx().isPending; } export function useNavigate() { - const currRoute = useRoute(); - const navigate = useInternalRouterInstance().navigate; + const { router, route } = useRouterCtx(); return useCallback((to) => { - return navigate(to, currRoute); - }, [navigate, currRoute]); -} -function defaultUseRoute() { - return useContext(CurrRouteContext); + return router.navigate(to, route); + }, [router, route]); } function makeRouter(routerOpts) { const router = createRouter({ mode: routerOpts.mode, qs: routerOpts.qs, sync: routerOpts.sync }); - router.disableScrollToTop = routerOpts.disableScrollToTop; - return { router: router, routerOpts }; + return { router, routerOpts }; } -export function Router({ mode, qs, sync, useRoute, onNavigating, onNavigated, children }) { +const DEFAULT_PENDING_DELAY_MS = 1000; +export function Router({ mode, qs, sync, transformRoute, pendingDelayMs = DEFAULT_PENDING_DELAY_MS, children, }) { const [{ router, routerOpts }, setRouter] = useState(() => makeRouter({ mode, qs, sync })); const [currRoute, setCurrRoute] = useState(null); - const connectedRouter = useMemo(() => ({ - router, - useRoute: useRoute || defaultUseRoute, - onNavigating, - onNavigated(route) { - if (!useRoute) { - setCurrRoute(route); - } - if (onNavigated) - onNavigated(route); - }, - }), [router, useRoute, onNavigating, onNavigated]); + const [isPending, startRouterTransition] = useTransition(); + // `holding` is true during the pre-commit window where `` + // boundaries should re-throw their fallback (so the previous route stays + // committed). It flips off either after `pendingDelayMs` elapses while + // still pending, or when the transition settles — whichever comes first. + const [holding, setHolding] = useState(false); + useEffect(() => { + if (!isPending) { + setHolding(false); + return; + } + setHolding(true); + const t = setTimeout(() => setHolding(false), pendingDelayMs); + return () => clearTimeout(t); + }, [isPending, pendingDelayMs]); + // Keep the latest transform in a ref so commit() can stay referentially + // stable while always using the freshest function. + const transformRef = useRef(transformRoute); + transformRef.current = transformRoute; + const commit = useCallback((next) => { + const transform = transformRef.current; + const transformed = transform ? (transform(next) ?? next) : next; + startRouterTransition(() => { + setCurrRoute(transformed); + }); + // Sync the address bar if the transform rewrote the URL. We use + // history.replaceState directly so we don't re-trigger the router's + // listener loop. + const matchedUrl = next.url; + const transformedUrl = transformed.url; + if (transformed !== next && + transformedUrl && + transformedUrl !== matchedUrl && + typeof window !== 'undefined' && + window.history) { + window.history.replaceState({}, '', transformedUrl); + } + }, []); + const ctx = useMemo(() => ({ router, route: currRoute, commit, isPending }), [router, currRoute, commit, isPending]); useEffect(() => { if (routerOpts.mode !== mode || routerOpts.qs !== qs || routerOpts.sync !== sync) { setRouter(makeRouter({ mode, qs, sync })); } }, [routerOpts, mode, qs, sync]); - return (_jsx(RouterContext.Provider, { value: connectedRouter, children: _jsx(CurrRouteContext.Provider, { value: currRoute, children: children }) })); + return (_jsx(RouterContext.Provider, { value: ctx, children: _jsx(DelayedSuspenseContext.Provider, { value: holding, children: children }) })); +} +export function DelayedSuspense({ fallback, children }) { + const holding = useContext(DelayedSuspenseContext); + return _jsx(Suspense, { fallback: holding ? _jsx(DelayedSuspenseHold, {}) : fallback, children: children }); +} +const NEVER_RESOLVES = new Promise(() => { }); +/** + * Throws a never-resolving promise so the surrounding Suspense boundary's + * fallback path itself suspends — the suspension bubbles up to the next + * Suspense boundary above, which during a router transition is the + * already-committed root holding the previous route. + */ +function DelayedSuspenseHold() { + throw NEVER_RESOLVES; } export function Routes({ routes, disableScrollToTop }) { - const ctx = useContext(RouterContext); - const { router, onNavigating, onNavigated } = ctx; - const route = ctx.useRoute(); - const onlyLatest = useOnlyLatest(); + const { router, route, commit } = useRouterCtx(); useScrollToTop(route, disableScrollToTop); + // Pinned prepare handles for the currently committed navigation. Released + // when a new navigation commits or when unmounts. + const pinnedHandles = useRef([]); + const releasePinned = useCallback(() => { + const handles = pinnedHandles.current; + pinnedHandles.current = []; + for (const handle of handles) { + try { + handle.release(); + } + catch { + // best-effort + } + } + }, []); useEffect(() => { const transition = (next) => { - onlyLatest(async (isLatest) => { - if (isLatest() && onNavigating) { - await onNavigating(next); - } - if (isLatest()) { - onNavigated(next); + const segments = (next.data ?? []); + const ctx = buildPrepareContext(next); + const nextHandles = []; + for (const segment of segments) { + if (segment.resolver) + preloadResolver(segment.resolver); + if (segment.prepare) { + const result = segment.prepare(ctx); + if (result) { + for (const handle of result) { + nextHandles.push(handle); + } + } } - }); + } + releasePinned(); + pinnedHandles.current = nextHandles; + commit(next); }; return router.listen(routes, transition); - }, [router, routes, onNavigating, onNavigated]); + }, [router, routes, commit, releasePinned]); + useEffect(() => releasePinned, [releasePinned]); return useMemo(() => { - if (!route) { + if (!route) return null; - } return route.data.reduceRight((children, segment) => { const props = segment.props ?? {}; - const component = segment.component; - const Component = resolveComponent(component); - // segments without a component act as transparent passthroughs so descendants still render + const Component = resolveSegmentComponent(segment); + // segments without a component act as transparent passthroughs return Component ? _jsx(Component, { ...props, children: children }) : children; }, null); }, [router, route && route.pathname]); } -function resolveComponent(component) { - if (!component) +function resolveSegmentComponent(segment) { + if (segment.resolver) { + return getResolverComponent(segment.resolver); + } + if (!segment.component) return null; - const c = component; + const c = segment.component; return c.default || c; } function useScrollToTop(route, disabled) { const prevScrollGroup = useRef(undefined); useEffect(() => { - if (!route || disabled) { + if (!route || disabled) return; - } const datas = route.data; const data = datas[datas.length - 1]; const scrollGroup = data.scrollGroup || route.pathname; @@ -106,6 +218,9 @@ function useScrollToTop(route, disabled) { } }, [route && route.pathname, disabled]); } +// --------------------------------------------------------------------------- +// Link / Navigate +// --------------------------------------------------------------------------- export function useMakeHref() { const { href } = useInternalRouterInstance(); return href; @@ -174,13 +289,4 @@ export function shouldNavigate(e) { } return true; } -function useOnlyLatest() { - const seq = useRef(0); - return (fn) => { - seq.current += 1; - const curr = seq.current; - const isLatest = () => seq.current === curr; - return fn(isLatest); - }; -} //# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/dist/index.js.map b/dist/index.js.map index e07874c..994eba7 100644 --- a/dist/index.js.map +++ b/dist/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/docs/content/_index.md b/docs/content/_index.md index 888b8ca..4efa903 100644 --- a/docs/content/_index.md +++ b/docs/content/_index.md @@ -8,19 +8,21 @@ toc: true > [Space Router](https://kidkarolis.github.io/space-router/) bindings for React -React Space Router is a set of hooks and components for keeping your app in sync with the url and performing page navigations. A library built by and used at [Humaans](https://humaans.io/). +React Space Router is a set of hooks and components for keeping your app in sync with the URL and performing page navigations. Suspense-aware and built around React's transition machinery. A library built by and used at [Humaans](https://humaans.io/). - React hooks based - Nested routes -- Async navigation middleware +- Code-split routes via `resolver` (`React.lazy` under the hood) +- Per-route `prepare(ctx)` for fetch-as-you-render data loading +- Pending state via `usePending()` (backed by `useTransition`) +- Optional pre-commit `transformRoute` hook for URL rewrites - Built in query string parser -- Supports external stores for router state - Scrolls to top after navigation - Preserves cmd/ctrl/alt/shift click and mouse middle click ## Why -"Perfection is achieved when there is nothing left to take away." React Space Router is built upon Space Router, a framework agnostic tiny core that handles url listening, route matching and navigation. React Space Router wraps that core into an idiomatic set of React components and hooks. The hope is you'll find React Space Router refreshingly simple compared to the existing alternatives, while still offering enough extensibility. +"Perfection is achieved when there is nothing left to take away." React Space Router is built upon Space Router, a framework-agnostic tiny core that handles URL listening, route matching, and navigation. React Space Router wraps that core into an idiomatic set of React components and hooks. The hope is you'll find React Space Router refreshingly simple compared to the existing alternatives, while still offering enough extensibility for modern Suspense-driven UIs. ## Install @@ -31,24 +33,33 @@ $ npm install react-space-router ## Example ```js -import React from 'react' -import { Router, Routes, Link, useRoute, useNavigate } from 'react-space-router' - -const routes = [ +import React, { Suspense, useEffect } from 'react' +import { + Router, + Routes, + Link, + useRoute, + useNavigate, + defineRoutes, +} from 'react-space-router' + +const routes = defineRoutes([ { path: '/', component: Home }, { component: SettingsContainer, routes: [ { path: '/settings', component: Settings }, - { path: '/settings/billing', component: Billing }, + { path: '/settings/billing', resolver: () => import('./Billing') }, ], }, -] +]) function App() { return ( - + + + ) } @@ -63,7 +74,7 @@ function Home() { ) } -function Settings({ tag }) { +function Settings() { const navigate = useNavigate() useEffect(() => { @@ -83,35 +94,70 @@ function Settings({ tag }) { ### `` -The application needs to be wrapped in the Router component to provides the router context and state. +Wraps the application and provides router context and state. Route state lives inside the router (`useState` + `useTransition`); commits are wrapped in a transition so Suspense can keep the previous route on screen while the next one prepares. Props: -- `mode` one of `history`, `hash`, `memory`, default is `history` -- `qs` a custom query string parser, an object of shape `{ parse, stringify } -- `useRoute` a custom hook for subscribing to current route state. If this is provided, the router will assume you're storing the latest router state passed to you via `onNavigated` callback and will allow subscribing to this state via this custom hook -- `onNavigating(nextRoute)` called when navigation starts, can be an async function which case the router will await before proceeding to finalise the transition and call `onNavigated`, note if a new navigation is started while this function is processing, `onNavigated` will no longer be called for this specific navigation, instead the next navigation kicks on and repeats the same sequence -- `onNavigated(route)` called when navigation completed +- `mode` one of `history`, `hash`, `memory` — default is `history`. +- `qs` a custom query string parser of shape `{ parse, stringify }`. +- `sync` if `true`, the underlying space-router fires synchronous transitions (useful in tests). +- `transformRoute(route)` an optional pure, synchronous function that runs between match and commit. Return a modified `Route` to change what gets committed; if its `url` differs from the matched URL, the router calls `history.replaceState` so the address bar matches. Use this for things like persisted-query restoration. Must not be async. ### `` ```js - + ``` -Render the components that match the current route based on the route config. +Renders the components that match the current route based on the route config. Nested ancestor segments wrap their descendants automatically — parents render `{children}` to position the matched child. + +When a navigation happens, every matched segment's `resolver()` and `prepare()` fire in parallel, so chunk download and data loading overlap. The destination's nearest `` boundary handles any still-cold reads. Props: -- `routes` an array of arrays of route definitions, where each route is an object of shape `{ path, component, props, redirect, scrollGroup, routes, ...metadata }` - - `path` is the URL pattern to match that can include named parameters as segments - - `component` a react component to render, can be a component wrapped in React.lazy - - `props` props to be passed to the component - - `redirect` can be a string or a function that redirects upon entering that route - - `scrollGroup` a string that can group a set of routes, such that navigating between them does not scroll to top, by default each route is in it's own scroll group - - `routes` is an array of nested route definitions - - `...metadata` all other other keys can be chosen by you -- `disableScrollToTop` disable the scroll to top behaviour after each navigation +- `routes` an array of route definitions, where each route is an object of shape `{ path, component, resolver, prepare, navigation, props, redirect, scrollGroup, routes, ...metadata }`: + - `path` URL pattern, may include `:named` segments. + - `component` a React component to render. Accepts an ESM-default module shape (`{ default: Component }`) too. + - `resolver` `() => import('./Screen')` — a dynamic import. The router preloads this at navigation time and renders via `React.lazy`. Cold imports suspend at the destination's Suspense boundary. + - `prepare(ctx)` a function called at navigation time with `{ pathname, url, params, query }`. Returns an array of `PreparedHandle` objects (e.g. from a data layer's `prepare()` call). The router pins them for the lifetime of the committed navigation and releases them when the next navigation commits. + - `navigation` per-route navigation options. Currently supports `commit: 'immediate'` (the only mode). `commit: 'ready'` is reserved for a future release. + - `props` props to pass to the segment's component. + - `redirect` a string or `(route) => to` redirecting upon entering this route. + - `scrollGroup` a string that groups routes; navigations within a group don't scroll to top. + - `routes` nested route definitions. + - `...metadata` any other keys you want — they're available on `route.data[i]`. +- `disableScrollToTop` disables the scroll-to-top behavior after each navigation. + +### `defineRoute` / `defineRoutes` + +```js +import { defineRoute, defineRoutes } from 'react-space-router' + +const routes = defineRoutes([ + defineRoute({ + path: '/issues/:id', + resolver: () => import('./pages/IssueDetail'), + prepare: ({ params }) => [ + figbird.prepare(issueDetail, { id: Number(params.id) }), + ], + }), +]) +``` + +Identity helpers for type-checking route shapes. They have no runtime behavior — the returned value is the input. + +### `PreparedHandle` + +The shape returned by `prepare()` functions. The router collects these from every matched segment, pins them while the route is committed, and calls `release()` when the next navigation commits or `` unmounts. + +```ts +interface PreparedHandle { + promise: Promise + release(): void + priority?: 'route' | 'defer' + key?: string | number +} +``` ### `` @@ -119,21 +165,21 @@ Props: ``` -Renders an `` link with a correct `href` and `onClick` handler that will intercept the click and push a history entry to avoid full page reload. Preserves cmd + click behaviour. +Renders an `` with a correct `href` and `onClick` handler that intercepts the click and pushes a history entry instead of triggering a full page reload. Preserves cmd/ctrl/shift/alt + click and middle-click for new-tab/window/download behavior. Props: -- `href` navigation target, can be a `string` or an `object` with: - - `pathname` the pathname portion of the target url, which can include named segments - - `params` params to interpolate into the named pathname segments - - `query` the query object that will be passed through `qs.stringify` - - `hash` the hash fragment to append to the url of the url - - `merge` merge partial `to` object into the current route -- `replace` set to true to replace the current entry in the navigation stack instead of pushing -- `current` set to true to render link as current page, or false to disable auto current page detection based on the current URL -- `className` can be a function that takes `isCurrent` if the current route is active -- `style` can be a function that takes `isCurrent` if the current route is active -- `extraProps` a function that takes `isCurrent` if the current route is active +- `href` navigation target — a `string` or an object with: + - `pathname` the pathname portion, may include named segments. + - `params` params to interpolate into the pathname. + - `query` query object passed through `qs.stringify`. + - `hash` hash fragment. + - `merge` merge partial `to` object into the current route. +- `replace` replace the current entry in the navigation stack instead of pushing. +- `current` set to true/false to override automatic current-page detection. +- `className` may be a function `(isCurrent) => string` for current-aware styling. +- `style` may be a function `(isCurrent) => CSSProperties`. +- `extraProps` `(isCurrent) => Record` — extra props to spread onto the ``. The rest of the props are spread onto the `` element. @@ -143,11 +189,11 @@ The rest of the props are spread onto the `` element. ``` -Redirect to the target url upon rendering this component. +Redirects to the target URL on mount. Props: -- `to` can be a `string` or an `object` (refer to `navigate` below) +- `to` `string` or object — same shape as `useNavigate`'s argument. ### `useInternalRouterInstance` @@ -155,7 +201,7 @@ Props: const router = useInternalRouterInstance() ``` -Get the Space Router instance. See [space-router docs](https://kidkarolis.github.io/space-router/) for details. Should typically not be necessary to use it directly. All relevant functionality is available via the other hooks. +Get the underlying Space Router instance. See [space-router docs](https://kidkarolis.github.io/space-router/) for details. Rarely needed — the other hooks cover the common cases. ### `useRoute` @@ -163,23 +209,43 @@ Get the Space Router instance. See [space-router docs](https://kidkarolis.github const route = useRoute() ``` -Subscribe to the current route. Route is an object of shape `{ url, pathname, params, query, search, hash, pattern, data }`. +Subscribe to the current route. Route is an object of shape `{ url, pathname, params, query, search, hash, pattern, data }`: + +- `url` full relative URL string including query string and hash if any. +- `pathname` the pathname portion. +- `params` params extracted from named pathname segments. +- `query` query object parsed via `qs.parse`. +- `search` full unparsed query string. +- `hash` hash fragment. +- `pattern` the matched route pattern from the route config. +- `data` array of nested matched route objects (with components and any custom metadata). + +`useRoute()` returns `null` for the very first render before the initial transition lands. -- `url` full relative url string including query string and hash if any -- `pathname` the pathname portion of the target url, which can include named segments -- `params` params extracted from the named pathname segments -- `query` query object that was parsed with `qs.parse` -- `search` full unparsed query string -- `hash` hash fragment -- `pattern` the matched route pattern as defined in the route config -- `data` an array of nested matched route objects with componentns and any additional metadata found in the route config +### `usePending` + +```js +const pending = usePending() +``` + +`true` while the router is between navigation start and commit. Backed by React's `useTransition` — flips on as soon as `navigate()` runs and flips off once the destination has committed and the transition has settled. + +Use this for top-of-page progress bars and "your click did something" affordances: + +```js +function LoadingBar() { + const pending = usePending() + return pending ? : null +} +``` + +Don't use it for skeletons — those belong in destination Suspense boundaries. ### `useNavigate` ```js const navigate = useNavigate() -// examples navigate('/shows') navigate({ url: '/show/1' }) navigate({ url: '/show/2', replace: true }) @@ -188,15 +254,15 @@ navigate({ query: { 'top-rated': 1 }, merge: true }) navigate({ query: { 'top-rated': undefined }, merge: true }) ``` -Get the `navigate` function for performing navigations. Navigate takes a `string` url or an `object` of shape: +Get the `navigate` function for performing programmatic navigations. Accepts a `string` URL or an object: -- `url` url string -- `pathname` the pathname portion of the target url, which can include named segments -- `params` params to interpolate into the named pathname segments -- `query` the query object that will be passed through `qs.stringify` -- `hash` the hash fragment to append to the url of the url -- `merge` merge partial `to` object into the current route -- `replace` set to true to replace the current entry in the navigation stack instead of pushing +- `url` URL string. +- `pathname` pathname portion, may include named segments. +- `params` params to interpolate. +- `query` query object passed through `qs.stringify`. +- `hash` hash fragment. +- `merge` merge partial `to` into the current route. +- `replace` replace the current history entry instead of pushing. ### `useLinkProps` @@ -205,18 +271,12 @@ const linkProps = useLinkProps(to) ``` -Get linkProps that you can spread onto your own links to make them render both `href`, but also handle clicks to perform navigations using the router. Link props is an object of shape `{ href, aria-current, onClick}`. +Returns `{ href, aria-current, onClick }` so you can spread them onto your own anchor and get full router behavior without using ``. -Takes a `string` url or an `object` of shape: +Takes a `string` URL or an object — same fields as `useNavigate`, plus: -- `pathname` the pathname portion of the target url, which can include named segments -- `params` params to interpolate into the named pathname segments -- `query` the query object that will be passed through `qs.stringify` -- `hash` the hash fragment to append to the url of the url -- `merge` merge partial `to` object into the current route -- `replace` set to true to replace the current entry in the navigation stack instead of pushing -- `current` set to true to render link as current page, or false to disable auto current page detection based on the current URL -- `onClick` a click handler to be called before the navigation takes place +- `current` override automatic current-page detection. +- `onClick` a click handler called before the navigation takes place. ### `useMakeHref` @@ -225,11 +285,11 @@ const makeHref = useMakeHref() makeHref(to) ``` -Create a relative url string to use in `` attribute. +Create a relative URL string to use in ``. -- `to` object of shape `{ pathname, params, query, hash }`. The `params` will be interpolated into the pathname if the pathname contains any parametrised segments. The `query` is an object that will be passed through `qs.stringify`. +- `to` object of shape `{ pathname, params, query, hash }`. The `params` interpolate into named pathname segments; `query` is stringified via `qs.stringify`. -Note: `to` can be a string, in which case `href` simply returns the input. Similarly, `to` can contain `{ url }` key in which case `href` returns that url. This is to align the function signature with that of `navigate` so that two can be used interchangeably. +If `to` is a string, `makeHref` returns it as-is. Same for `{ url }` — this matches `navigate`'s signature so the two are interchangeable. ### `shouldNavigate` @@ -237,8 +297,21 @@ Note: `to` can be a string, in which case `href` simply returns the input. Simil shouldNavigate(e) ``` -Check if the current click event should cause a history push, or should be handled by the browser. Used internally by the `` component when intercepting `click` events to let browser handle: +Check whether a click event should result in a router navigation or be left to the browser. Used internally by ``. Returns `false` for: - cmd/ctrl/alt/shift + click - middle mouse click -- stop navigation if `e.defaultPrevented` is true +- `e.defaultPrevented` +- target=\_blank or other non-self targets +- `download` attribute +- cross-origin or non-http(s) URLs + +## Migrating from 0.6.x + +See [MIGRATION.md](https://github.com/humaans/react-space-router/blob/master/MIGRATION.md) for the full migration guide. Headlines: + +- `onNavigating`/`onNavigated`/`useRoute` props have been removed from ``. Route state lives inside the router now. +- Use `resolver` on a route segment instead of awaiting `import()` in `onNavigating`. +- Use `usePending()` instead of a manual `navigating: true/false` flag. +- Use `transformRoute` for the one case that actually needs a pre-commit hook (e.g. persisted-query restoration). +- Replace external Redux/Zustand/atom-backed route state with direct `useRoute()` reads. diff --git a/examples/loading-modes/index.html b/examples/loading-modes/index.html new file mode 100644 index 0000000..c8dd0de --- /dev/null +++ b/examples/loading-modes/index.html @@ -0,0 +1,12 @@ + + + + + + react-space-router · Loading Modes Demo + + +
+ + + diff --git a/examples/loading-modes/package-lock.json b/examples/loading-modes/package-lock.json new file mode 100644 index 0000000..befef00 --- /dev/null +++ b/examples/loading-modes/package-lock.json @@ -0,0 +1,1891 @@ +{ + "name": "loading-modes", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "loading-modes", + "version": "0.0.0", + "dependencies": { + "react": "^19.2.5", + "react-dom": "^19.2.5", + "react-space-router": "file:../.." + }, + "devDependencies": { + "@types/react": "^19.0.0", + "@types/react-dom": "^19.0.0", + "@vitejs/plugin-react": "^4.3.4", + "typescript": "^5.9.0", + "vite": "^6.0.0" + } + }, + "../..": { + "version": "0.6.6", + "license": "ICS", + "dependencies": { + "space-router": "^1.0.0" + }, + "devDependencies": { + "@swc-node/register": "^1.11.1", + "@swc/core": "^1.15.30", + "@types/react": "^19.0.0", + "ava": "^7.0.0", + "c8": "^11.0.0", + "gh-pages": "^6.3.0", + "jsdom": "^29.0.2", + "oxfmt": "^0.46.0", + "oxlint": "^1.61.0", + "react": "^19.2.5", + "react-dom": "^19.2.5", + "typescript": "^5.9.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.28.5", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz", + "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", + "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helpers": "^7.28.6", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.29.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", + "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", + "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.28.6", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", + "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", + "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz", + "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.2.tgz", + "integrity": "sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz", + "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz", + "integrity": "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz", + "integrity": "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", + "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.28.6", + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", + "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz", + "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz", + "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz", + "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz", + "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz", + "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz", + "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz", + "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz", + "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz", + "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz", + "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz", + "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz", + "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz", + "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz", + "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz", + "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz", + "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz", + "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz", + "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz", + "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz", + "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz", + "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz", + "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz", + "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz", + "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz", + "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz", + "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-beta.27", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.27.tgz", + "integrity": "sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.60.2.tgz", + "integrity": "sha512-dnlp69efPPg6Uaw2dVqzWRfAWRnYVb1XJ8CyyhIbZeaq4CA5/mLeZ1IEt9QqQxmbdvagjLIm2ZL8BxXv5lH4Yw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.60.2.tgz", + "integrity": "sha512-OqZTwDRDchGRHHm/hwLOL7uVPB9aUvI0am/eQuWMNyFHf5PSEQmyEeYYheA0EPPKUO/l0uigCp+iaTjoLjVoHg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.60.2.tgz", + "integrity": "sha512-UwRE7CGpvSVEQS8gUMBe1uADWjNnVgP3Iusyda1nSRwNDCsRjnGc7w6El6WLQsXmZTbLZx9cecegumcitNfpmA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.60.2.tgz", + "integrity": "sha512-gjEtURKLCC5VXm1I+2i1u9OhxFsKAQJKTVB8WvDAHF+oZlq0GTVFOlTlO1q3AlCTE/DF32c16ESvfgqR7343/g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.60.2.tgz", + "integrity": "sha512-Bcl6CYDeAgE70cqZaMojOi/eK63h5Me97ZqAQoh77VPjMysA/4ORQBRGo3rRy45x4MzVlU9uZxs8Uwy7ZaKnBw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.60.2.tgz", + "integrity": "sha512-LU+TPda3mAE2QB0/Hp5VyeKJivpC6+tlOXd1VMoXV/YFMvk/MNk5iXeBfB4MQGRWyOYVJ01625vjkr0Az98OJQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.60.2.tgz", + "integrity": "sha512-2QxQrM+KQ7DAW4o22j+XZ6RKdxjLD7BOWTP0Bv0tmjdyhXSsr2Ul1oJDQqh9Zf5qOwTuTc7Ek83mOFaKnodPjg==", + "cpu": [ + "arm" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.60.2.tgz", + "integrity": "sha512-TbziEu2DVsTEOPif2mKWkMeDMLoYjx95oESa9fkQQK7r/Orta0gnkcDpzwufEcAO2BLBsD7mZkXGFqEdMRRwfw==", + "cpu": [ + "arm" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.60.2.tgz", + "integrity": "sha512-bO/rVDiDUuM2YfuCUwZ1t1cP+/yqjqz+Xf2VtkdppefuOFS2OSeAfgafaHNkFn0t02hEyXngZkxtGqXcXwO8Rg==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.60.2.tgz", + "integrity": "sha512-hr26p7e93Rl0Za+JwW7EAnwAvKkehh12BU1Llm9Ykiibg4uIr2rbpxG9WCf56GuvidlTG9KiiQT/TXT1yAWxTA==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.60.2.tgz", + "integrity": "sha512-pOjB/uSIyDt+ow3k/RcLvUAOGpysT2phDn7TTUB3n75SlIgZzM6NKAqlErPhoFU+npgY3/n+2HYIQVbF70P9/A==", + "cpu": [ + "loong64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.60.2.tgz", + "integrity": "sha512-2/w+q8jszv9Ww1c+6uJT3OwqhdmGP2/4T17cu8WuwyUuuaCDDJ2ojdyYwZzCxx0GcsZBhzi3HmH+J5pZNXnd+Q==", + "cpu": [ + "loong64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.60.2.tgz", + "integrity": "sha512-11+aL5vKheYgczxtPVVRhdptAM2H7fcDR5Gw4/bTcteuZBlH4oP9f5s9zYO9aGZvoGeBpqXI/9TZZihZ609wKw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.60.2.tgz", + "integrity": "sha512-i16fokAGK46IVZuV8LIIwMdtqhin9hfYkCh8pf8iC3QU3LpwL+1FSFGej+O7l3E/AoknL6Dclh2oTdnRMpTzFQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.60.2.tgz", + "integrity": "sha512-49FkKS6RGQoriDSK/6E2GkAsAuU5kETFCh7pG4yD/ylj9rKhTmO3elsnmBvRD4PgJPds5W2PkhC82aVwmUcJ7A==", + "cpu": [ + "riscv64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.60.2.tgz", + "integrity": "sha512-mjYNkHPfGpUR00DuM1ZZIgs64Hpf4bWcz9Z41+4Q+pgDx73UwWdAYyf6EG/lRFldmdHHzgrYyge5akFUW0D3mQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.60.2.tgz", + "integrity": "sha512-ALyvJz965BQk8E9Al/JDKKDLH2kfKFLTGMlgkAbbYtZuJt9LU8DW3ZoDMCtQpXAltZxwBHevXz5u+gf0yA0YoA==", + "cpu": [ + "s390x" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.60.2.tgz", + "integrity": "sha512-UQjrkIdWrKI626Du8lCQ6MJp/6V1LAo2bOK9OTu4mSn8GGXIkPXk/Vsp4bLHCd9Z9Iz2OTEaokUE90VweJgIYQ==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.60.2.tgz", + "integrity": "sha512-bTsRGj6VlSdn/XD4CGyzMnzaBs9bsRxy79eTqTCBsA8TMIEky7qg48aPkvJvFe1HyzQ5oMZdg7AnVlWQSKLTnw==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.60.2.tgz", + "integrity": "sha512-6d4Z3534xitaA1FcMWP7mQPq5zGwBmGbhphh2DwaA1aNIXUu3KTOfwrWpbwI4/Gr0uANo7NTtaykFyO2hPuFLg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.60.2.tgz", + "integrity": "sha512-NetAg5iO2uN7eB8zE5qrZ3CSil+7IJt4WDFLcC75Ymywq1VZVD6qJ6EvNLjZ3rEm6gB7XW5JdT60c6MN35Z85Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.60.2.tgz", + "integrity": "sha512-NCYhOotpgWZ5kdxCZsv6Iudx0wX8980Q/oW4pNFNihpBKsDbEA1zpkfxJGC0yugsUuyDZ7gL37dbzwhR0VI7pQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.60.2.tgz", + "integrity": "sha512-RXsaOqXxfoUBQoOgvmmijVxJnW2IGB0eoMO7F8FAjaj0UTywUO/luSqimWBJn04WNgUkeNhh7fs7pESXajWmkg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.60.2.tgz", + "integrity": "sha512-qdAzEULD+/hzObedtmV6iBpdL5TIbKVztGiK7O3/KYSf+HIzU257+MX1EXJcyIiDbMAqmbwaufcYPvyRryeZtA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.60.2.tgz", + "integrity": "sha512-Nd/SgG27WoA9e+/TdK74KnHz852TLa94ovOYySo/yMPuTmpckK/jIF2jSwS3g7ELSKXK13/cVdmg1Z/DaCWKxA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.2" + } + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "19.2.14", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.14.tgz", + "integrity": "sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "csstype": "^3.2.2" + } + }, + "node_modules/@types/react-dom": { + "version": "19.2.3", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.3.tgz", + "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "^19.2.0" + } + }, + "node_modules/@vitejs/plugin-react": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.7.0.tgz", + "integrity": "sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.28.0", + "@babel/plugin-transform-react-jsx-self": "^7.27.1", + "@babel/plugin-transform-react-jsx-source": "^7.27.1", + "@rolldown/pluginutils": "1.0.0-beta.27", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.17.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" + } + }, + "node_modules/baseline-browser-mapping": { + "version": "2.10.23", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.23.tgz", + "integrity": "sha512-xwVXGqevyKPsiuQdLj+dZMVjidjJV508TBqexND5HrF89cGdCYCJFB3qhcxRHSeMctdCfbR1jrxBajhDy7o29g==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/browserslist": { + "version": "4.28.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.2.tgz", + "integrity": "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "baseline-browser-mapping": "^2.10.12", + "caniuse-lite": "^1.0.30001782", + "electron-to-chromium": "^1.5.328", + "node-releases": "^2.0.36", + "update-browserslist-db": "^1.2.3" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001791", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001791.tgz", + "integrity": "sha512-yk0l/YSrOnFZk3UROpDLQD9+kC1l4meK/wed583AXrzoarMGJcbRi2Q4RaUYbKxYAsZ8sWmaSa/DsLmdBeI1vQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.344", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.344.tgz", + "integrity": "sha512-4MxfbmNDm+KPh066EZy+eUnkcDPcZ35wNmOWzFuh/ijvHsve6kbLTLURy88uCNK5FbpN+yk2nQY6BYh1GEt+wg==", + "dev": true, + "license": "ISC" + }, + "node_modules/esbuild": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz", + "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.12", + "@esbuild/android-arm": "0.25.12", + "@esbuild/android-arm64": "0.25.12", + "@esbuild/android-x64": "0.25.12", + "@esbuild/darwin-arm64": "0.25.12", + "@esbuild/darwin-x64": "0.25.12", + "@esbuild/freebsd-arm64": "0.25.12", + "@esbuild/freebsd-x64": "0.25.12", + "@esbuild/linux-arm": "0.25.12", + "@esbuild/linux-arm64": "0.25.12", + "@esbuild/linux-ia32": "0.25.12", + "@esbuild/linux-loong64": "0.25.12", + "@esbuild/linux-mips64el": "0.25.12", + "@esbuild/linux-ppc64": "0.25.12", + "@esbuild/linux-riscv64": "0.25.12", + "@esbuild/linux-s390x": "0.25.12", + "@esbuild/linux-x64": "0.25.12", + "@esbuild/netbsd-arm64": "0.25.12", + "@esbuild/netbsd-x64": "0.25.12", + "@esbuild/openbsd-arm64": "0.25.12", + "@esbuild/openbsd-x64": "0.25.12", + "@esbuild/openharmony-arm64": "0.25.12", + "@esbuild/sunos-x64": "0.25.12", + "@esbuild/win32-arm64": "0.25.12", + "@esbuild/win32-ia32": "0.25.12", + "@esbuild/win32-x64": "0.25.12" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/node-releases": { + "version": "2.0.38", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.38.tgz", + "integrity": "sha512-3qT/88Y3FbH/Kx4szpQQ4HzUbVrHPKTLVpVocKiLfoYvw9XSGOX2FmD2d6DrXbVYyAQTF2HeF6My8jmzx7/CRw==", + "dev": true, + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.12", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.12.tgz", + "integrity": "sha512-W62t/Se6rA0Az3DfCL0AqJwXuKwBeYg6nOaIgzP+xZ7N5BFCI7DYi1qs6ygUYT6rvfi6t9k65UMLJC+PHZpDAA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/react": { + "version": "19.2.5", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.5.tgz", + "integrity": "sha512-llUJLzz1zTUBrskt2pwZgLq59AemifIftw4aB7JxOqf1HY2FDaGDxgwpAPVzHU1kdWabH7FauP4i1oEeer2WCA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "19.2.5", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.5.tgz", + "integrity": "sha512-J5bAZz+DXMMwW/wV3xzKke59Af6CHY7G4uYLN1OvBcKEsWOs4pQExj86BBKamxl/Ik5bx9whOrvBlSDfWzgSag==", + "license": "MIT", + "dependencies": { + "scheduler": "^0.27.0" + }, + "peerDependencies": { + "react": "^19.2.5" + } + }, + "node_modules/react-refresh": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.17.0.tgz", + "integrity": "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-space-router": { + "resolved": "../..", + "link": true + }, + "node_modules/rollup": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.60.2.tgz", + "integrity": "sha512-J9qZyW++QK/09NyN/zeO0dG/1GdGfyp9lV8ajHnRVLfo/uFsbji5mHnDgn/qYdUHyCkM2N+8VyspgZclfAh0eQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.60.2", + "@rollup/rollup-android-arm64": "4.60.2", + "@rollup/rollup-darwin-arm64": "4.60.2", + "@rollup/rollup-darwin-x64": "4.60.2", + "@rollup/rollup-freebsd-arm64": "4.60.2", + "@rollup/rollup-freebsd-x64": "4.60.2", + "@rollup/rollup-linux-arm-gnueabihf": "4.60.2", + "@rollup/rollup-linux-arm-musleabihf": "4.60.2", + "@rollup/rollup-linux-arm64-gnu": "4.60.2", + "@rollup/rollup-linux-arm64-musl": "4.60.2", + "@rollup/rollup-linux-loong64-gnu": "4.60.2", + "@rollup/rollup-linux-loong64-musl": "4.60.2", + "@rollup/rollup-linux-ppc64-gnu": "4.60.2", + "@rollup/rollup-linux-ppc64-musl": "4.60.2", + "@rollup/rollup-linux-riscv64-gnu": "4.60.2", + "@rollup/rollup-linux-riscv64-musl": "4.60.2", + "@rollup/rollup-linux-s390x-gnu": "4.60.2", + "@rollup/rollup-linux-x64-gnu": "4.60.2", + "@rollup/rollup-linux-x64-musl": "4.60.2", + "@rollup/rollup-openbsd-x64": "4.60.2", + "@rollup/rollup-openharmony-arm64": "4.60.2", + "@rollup/rollup-win32-arm64-msvc": "4.60.2", + "@rollup/rollup-win32-ia32-msvc": "4.60.2", + "@rollup/rollup-win32-x64-gnu": "4.60.2", + "@rollup/rollup-win32-x64-msvc": "4.60.2", + "fsevents": "~2.3.2" + } + }, + "node_modules/scheduler": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", + "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.16", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.16.tgz", + "integrity": "sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/vite": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.4.2.tgz", + "integrity": "sha512-2N/55r4JDJ4gdrCvGgINMy+HH3iRpNIz8K6SFwVsA+JbQScLiC+clmAxBgwiSPgcG9U15QmvqCGWzMbqda5zGQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.25.0", + "fdir": "^6.4.4", + "picomatch": "^4.0.2", + "postcss": "^8.5.3", + "rollup": "^4.34.9", + "tinyglobby": "^0.2.13" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "jiti": ">=1.21.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + } + } +} diff --git a/examples/loading-modes/package.json b/examples/loading-modes/package.json new file mode 100644 index 0000000..4e1b745 --- /dev/null +++ b/examples/loading-modes/package.json @@ -0,0 +1,23 @@ +{ + "name": "loading-modes", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "preview": "vite preview" + }, + "dependencies": { + "react": "^19.2.5", + "react-dom": "^19.2.5", + "react-space-router": "file:../.." + }, + "devDependencies": { + "@types/react": "^19.0.0", + "@types/react-dom": "^19.0.0", + "@vitejs/plugin-react": "^4.3.4", + "typescript": "^5.9.0", + "vite": "^6.0.0" + } +} diff --git a/examples/loading-modes/src/Shell.tsx b/examples/loading-modes/src/Shell.tsx new file mode 100644 index 0000000..9b7ed65 --- /dev/null +++ b/examples/loading-modes/src/Shell.tsx @@ -0,0 +1,111 @@ +import React, { useEffect, useRef, useState, type ReactNode } from 'react' +import { Link, usePending, useRoute } from 'react-space-router' +import { clearCache } from './data' + +/** + * Top-of-page progress bar — driven by `usePending()`. Renders nothing + * outside of an in-flight transition. + */ +function ProgressBar() { + const pending = usePending() + return pending ?
: null +} + +/** + * Stopwatch that starts when a navigation begins and freezes when it + * commits. Lets you feel the difference between modes in milliseconds. + */ +function NavTimer() { + const pending = usePending() + const [ms, setMs] = useState(0) + const startRef = useRef(null) + + useEffect(() => { + if (pending) { + startRef.current = performance.now() + setMs(0) + const id = setInterval(() => { + if (startRef.current != null) setMs(performance.now() - startRef.current) + }, 16) + return () => clearInterval(id) + } + if (startRef.current != null) { + setMs(performance.now() - startRef.current) + startRef.current = null + } + }, [pending]) + + return ( + + {pending ? 'navigating…' : 'idle'} · {(ms / 1000).toFixed(2)}s + + ) +} + +function CurrentRoute() { + const route = useRoute() + return {route?.pathname ?? '—'} +} + +export function Shell({ children }: { children: ReactNode }) { + return ( +
+ + +
{children}
+
+ ) +} diff --git a/examples/loading-modes/src/data.ts b/examples/loading-modes/src/data.ts new file mode 100644 index 0000000..8ae2daa --- /dev/null +++ b/examples/loading-modes/src/data.ts @@ -0,0 +1,89 @@ +// A tiny suspense-aware data layer used to simulate prepared queries. +// +// Two surfaces: +// prepare(key, ms) → returns a PreparedHandle for the router to await. +// read(key) → reads a previously-prepared value, suspends if pending. +// +// Cache lives in-module — refreshing the page resets it, exactly what the +// demo expects. + +import type { PreparedHandle } from 'react-space-router' + +type Value = { + key: string + fetchedAt: number + latency: number + payload: string +} + +type Entry = { status: 'pending'; promise: Promise } | { status: 'resolved'; value: Value } + +const cache = new Map() + +const PAYLOADS: Record = { + user: 'Karolis Narkevicius — Founder', + bio: 'Building Humaans, an HRIS for modern teams. Lives in London. Likes simple software.', + posts: '12 posts, 4 drafts, last published 3 days ago', + followers: '1,284 followers · 312 following', + feed: 'Feed item: "What I learned building react-space-router 1.0"', + comments: '8 new comments across 3 threads', + analytics: '24,910 views this week · ↑ 14% week-over-week', + related: 'You might also like: figbird, space-router, kinfolk', +} + +export function clearCache() { + cache.clear() +} + +export function load(key: string, ms: number): Entry { + let entry = cache.get(key) + if (entry) return entry + + const promise = new Promise((resolve) => { + setTimeout(() => { + cache.set(key, { + status: 'resolved', + value: { + key, + fetchedAt: Date.now(), + latency: ms, + payload: PAYLOADS[key] ?? `Payload for ${key}`, + }, + }) + resolve() + }, ms) + }) + + entry = { status: 'pending', promise } + cache.set(key, entry) + return entry +} + +/** Suspense-aware read. Throws the promise if the data isn't ready. */ +export function read(key: string): Value { + const entry = cache.get(key) + if (!entry) { + throw new Error(`read("${key}") called before prepare/load — did you forget to prepare?`) + } + if (entry.status === 'pending') throw entry.promise + return entry.value +} + +/** Returns a PreparedHandle the router can pin while the route is committed. */ +export function prepare(key: string, ms: number): PreparedHandle { + const entry = load(key, ms) + const promise = entry.status === 'pending' ? entry.promise : Promise.resolve() + return { + promise, + release: () => { + // Demo: keep entries around so revisits feel snappy. A real data layer + // would refcount. Use a "Reset cache" button (or full reload) to clear. + }, + } +} + +/** "Slow chunk" simulator for lazy resolvers — wraps a real dynamic import in + * an artificial delay so we can demonstrate code-load behavior on a fast LAN. */ +export function slowImport(ms: number, factory: () => Promise): () => Promise { + return () => new Promise((resolve) => setTimeout(resolve, ms)).then(factory) +} diff --git a/examples/loading-modes/src/main.tsx b/examples/loading-modes/src/main.tsx new file mode 100644 index 0000000..069112f --- /dev/null +++ b/examples/loading-modes/src/main.tsx @@ -0,0 +1,20 @@ +import React, { Suspense } from 'react' +import { createRoot } from 'react-dom/client' +import { Router, Routes } from 'react-space-router' +import { Shell } from './Shell' +import { routes } from './routes' +import './styles.css' + +function App() { + return ( + + + + + + + + ) +} + +createRoot(document.getElementById('root')!).render() diff --git a/examples/loading-modes/src/pages/Home.tsx b/examples/loading-modes/src/pages/Home.tsx new file mode 100644 index 0000000..b1f5fe8 --- /dev/null +++ b/examples/loading-modes/src/pages/Home.tsx @@ -0,0 +1,92 @@ +import React from 'react' + +export default function Home() { + return ( + <> +
+

Loading Modes Demo

+

+ Three pages. Same router, same data layer, same latencies. The only difference is where each page places its{' '} + <Suspense> boundaries. +

+
+ +

+ Each route delays its code chunk by ~800ms (simulating a cold lazy import) and prepares three + data sources with different latencies: +

+ +
+
+ fast read + 200ms +
+
+ medium read + 1000ms +
+
+ slow read + 6000ms +
+
+ +

What to feel

+

+ Click between the three modes back-to-back. Watch the timer in the sidebar, the top-of-page progress bar, and + whether you see old content held, skeletons, or some mix. +

+ +
+

(a) Immediate + skeletons

+

+ Old page held while code chunk loads (~800ms), then new page commits with the fast data already there and + skeletons in place of slow data. Skeletons swap to real content as data arrives. +

+
+ +
+

(b) Wait for ready

+

+ Old page held until everything is ready — chunk + all data — then a clean swap to the fully-loaded + new page. No skeletons, no flicker. Slowest perceived "click → first new pixel," but no loading state to look + at. +

+
+ +
+

(c) Timed fallback

+

+ Behaves like (b) for the first ~1s, then falls back to (a) — meaning if the slow read is still pending after + 1s, we commit anyway and let inner skeletons take over. Best of both worlds for variable-latency data. +

+
+ +

How this is implemented

+

+ Same <Router>, same router code (every nav goes through startTransition), same{' '} + prepare() shape. The three modes differ purely in which Suspense primitive wraps each + read: +

+
    +
  • + (a) — wrap each slow read in <Suspense fallback={'{}'}>. + Skeleton renders the moment the new tree commits. +
  • +
  • + (b) — don't wrap at all. Reads suspend at the outer boundary; transition holds the previous + route until everything resolves. +
  • +
  • + (c) — wrap in <DelayedSuspense fallback={'{}'}>. Behaves + like (b) for the first pendingDelayMs (1s), then like (a). +
  • +
+ +

+ Use Reset in the sidebar (or a hard reload) to clear the in-memory cache between attempts — + otherwise the second visit to a route is instant. +

+ + ) +} diff --git a/examples/loading-modes/src/pages/ModeA.tsx b/examples/loading-modes/src/pages/ModeA.tsx new file mode 100644 index 0000000..6e8ca97 --- /dev/null +++ b/examples/loading-modes/src/pages/ModeA.tsx @@ -0,0 +1,111 @@ +import React, { Suspense } from 'react' +import { read } from '../data' + +/** + * Mode (a): commit immediately (well — once chunk is loaded), then render + * the page shell with inner Suspense boundaries firing skeletons for any + * data that is still pending. + * + * Where the Suspense boundaries are: wrapping each slow read individually + * in this same file. That's the whole "configuration" — no router knob. + */ +export default function ModeA() { + return ( + <> +
+

Mode (a) — Immediate + Skeletons

+

+ Page shell renders as soon as the chunk arrives. Each slow read has its own <Suspense>{' '} + boundary, so skeletons fire while data is pending and swap to content as it arrives. +

+
+ +
+ Recipe: <Suspense fallback={'{}'}> wraps each slow read. The page header and any + already-resolved reads render immediately on commit. +
+ +

User

+ {/* Fast data (200ms) — usually resolved by the time we commit; renders inline. */} + }> + + + +

Posts

+ {/* Medium (1000ms) — likely pending on commit; skeleton fires. */} + }> + + + +

Analytics

+ {/* Slow (6000ms) — definitely pending; skeleton fires longest. */} + }> + + + + ) +} + +function UserCard() { + const v = read('user') + return ( +
+

{v.payload}

+

+ Resolved at +{v.latency}ms after navigation start. +

+
+ ) +} + +function Posts() { + const v = read('posts') + return ( +
+

{v.payload}

+

+ Resolved at +{v.latency}ms. +

+
+ ) +} + +function Analytics() { + const v = read('analytics') + return ( +
+

{v.payload}

+

+ Resolved at +{v.latency}ms. +

+
+ ) +} + +function UserSkeleton() { + return ( +
+ + +
+ ) +} + +function PostsSkeleton() { + return ( +
+ + +
+ ) +} + +function AnalyticsSkeleton() { + return ( +
+ + + +
+ ) +} diff --git a/examples/loading-modes/src/pages/ModeB.tsx b/examples/loading-modes/src/pages/ModeB.tsx new file mode 100644 index 0000000..90541da --- /dev/null +++ b/examples/loading-modes/src/pages/ModeB.tsx @@ -0,0 +1,82 @@ +import React from 'react' +import { read } from '../data' + +/** + * Mode (b): hold the previous route until *everything* is ready. + * + * Where the Suspense boundaries are: nowhere inside this page. Every read + * suspends, and the only boundary that catches them is the outer one + * (around in main.tsx). Inside a transition that boundary is + * "already-committed showing previous content" → React holds. When the + * last suspending read resolves, the entire new tree commits in one go. + * + * No skeletons. No flicker. Slowest "click → first new pixel" time. + */ +export default function ModeB() { + return ( + <> +
+

Mode (b) — Wait for Ready

+

+ The previous page stays on screen until the chunk loads and all reads resolve. Then a single, + flicker-free swap. +

+
+ +
+ Recipe: no inner <Suspense> boundaries. Reads suspend at the outer router boundary; + transition holds the previous route until everything is ready. +
+ +

User

+ + +

Bio

+ + +

Followers

+ + +

+ Notice: when this page finally appears, it's fully populated — no skeletons ever shown. The + sidebar timer reflects the full wait. +

+ + ) +} + +function UserCard() { + const v = read('user') + return ( +
+

{v.payload}

+

+ Resolved at +{v.latency}ms. +

+
+ ) +} + +function Bio() { + const v = read('bio') + return ( +
+

{v.payload}

+

+ Resolved at +{v.latency}ms. +

+
+ ) +} + +function Followers() { + const v = read('followers') + return ( +
+

{v.payload}

+

+ Resolved at +{v.latency}ms — the longest of the three; this is the gate. +

+
+ ) +} diff --git a/examples/loading-modes/src/pages/ModeC.tsx b/examples/loading-modes/src/pages/ModeC.tsx new file mode 100644 index 0000000..59b6298 --- /dev/null +++ b/examples/loading-modes/src/pages/ModeC.tsx @@ -0,0 +1,100 @@ +import React from 'react' +import { DelayedSuspense } from 'react-space-router' +import { read } from '../data' + +/** + * Mode (c): start as (b), fall back to (a) after a threshold. + * + * The whole pattern is just `` — a router-aware Suspense + * boundary whose fallback is delayed until the in-flight nav has been + * pending for `pendingDelayMs` (configured on ``, default 1000ms). + * + * Pre-commit, under threshold: fallback re-throws → outer transition + * holds the previous route. + * Past threshold or post-commit: fallback renders normally — skeleton. + * + * The phase tracking that this used to require in userspace (a Shell-level + * provider, a `PassThrough` trick, careful handling of post-commit phase + * reset) is encapsulated by the component. From here, the call site reads + * exactly like a regular ``. + */ +export default function ModeC() { + return ( + <> +
+

Mode (c) — Timed Fallback

+

+ Acts like (b) until the navigation has been pending for more than the threshold; then flips to (a) and + commits with skeletons in place of any still-pending data. +

+
+ +
+ Recipe: wrap each section in <DelayedSuspense fallback={'{}'}>. The router holds + the previous route until pendingDelayMs (1000ms) has elapsed; past that, the boundaries fall + back to skeletons. +
+ +

Feed

+ }> + + + +

Comments

+ }> + + + +

Related

+ }> + + + +

+ Threshold: 1000ms. If the slow read (6000ms) hasn't resolved by then, you'll see this last section commit + with a skeleton in place of Related. +

+ + ) +} + +function Reader({ name }: { name: string }) { + const v = read(name) + return ( +
+

{v.payload}

+

+ Resolved at +{v.latency}ms. +

+
+ ) +} + +function FeedSkeleton() { + return ( +
+ + +
+ ) +} + +function CommentsSkeleton() { + return ( +
+ + + +
+ ) +} + +function RelatedSkeleton() { + return ( +
+ + + +
+ ) +} diff --git a/examples/loading-modes/src/routes.ts b/examples/loading-modes/src/routes.ts new file mode 100644 index 0000000..f7596da --- /dev/null +++ b/examples/loading-modes/src/routes.ts @@ -0,0 +1,54 @@ +import { defineRoutes } from 'react-space-router' +import { prepare, slowImport } from './data' + +// Latency budgets we'll reuse across routes. Tweak here to see the modes +// react. Reload the page to clear cache and re-feel cold loads. +export const LATENCIES = { + fast: 200, + medium: 1000, + slow: 6000, +} + +// Slow code chunk delay — meant to feel like a cold lazy import on a real +// network. Keeps the page held during chunk download regardless of mode. +const CHUNK_MS = 800 + +export const routes = defineRoutes([ + { + path: '/', + resolver: slowImport(0, () => import('./pages/Home')), + }, + { + path: '/mode-a', + resolver: slowImport(CHUNK_MS, () => import('./pages/ModeA')), + prepare: () => [ + // Mode A: prepare kicks off all data so reads in inner Suspense + // boundaries can suspend on the same promises. Inner skeletons fire + // for whichever data is still pending when the route commits. + prepare('user', LATENCIES.fast), + prepare('posts', LATENCIES.medium), + prepare('analytics', LATENCIES.slow), + ], + }, + { + path: '/mode-b', + resolver: slowImport(CHUNK_MS, () => import('./pages/ModeB')), + prepare: () => [ + // Mode B: same data, different page composition (no inner Suspense + // boundaries → reads suspend at the outer boundary → transition + // holds the previous route until everything is ready). + prepare('user', LATENCIES.fast), + prepare('bio', LATENCIES.medium), + prepare('followers', LATENCIES.slow), + ], + }, + { + path: '/mode-c', + resolver: slowImport(CHUNK_MS, () => import('./pages/ModeC')), + prepare: () => [ + prepare('feed', LATENCIES.fast), + prepare('comments', LATENCIES.medium), + prepare('related', LATENCIES.slow), + ], + }, +]) diff --git a/examples/loading-modes/src/styles.css b/examples/loading-modes/src/styles.css new file mode 100644 index 0000000..920e484 --- /dev/null +++ b/examples/loading-modes/src/styles.css @@ -0,0 +1,349 @@ +:root { + --bg: #0d1117; + --panel: #161b22; + --panel-2: #1c2230; + --text: #e6edf3; + --text-dim: #8b95a5; + --border: #2a3142; + --accent: #5b9bff; + --accent-2: #7ee787; + --warn: #f4d03f; + --danger: #ff7b72; + --skel: #2c3850; + --skel-shine: #4a5a7d; +} + +* { + box-sizing: border-box; +} + +html, +body, +#root { + margin: 0; + padding: 0; + height: 100%; + background: var(--bg); + color: var(--text); + font-family: + 'SF Pro Text', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif; + font-size: 14px; + line-height: 1.5; + -webkit-font-smoothing: antialiased; +} + +a { + color: var(--accent); + text-decoration: none; +} +a:hover { + text-decoration: underline; +} + +/* Top progress bar */ +.progress-bar { + position: fixed; + inset: 0 0 auto 0; + height: 3px; + background: transparent; + z-index: 100; + pointer-events: none; +} +.progress-bar::before { + content: ''; + position: absolute; + inset: 0 auto 0 0; + width: 30%; + background: linear-gradient(90deg, transparent, var(--accent), transparent); + animation: progress 1.2s ease-in-out infinite; +} +@keyframes progress { + 0% { + transform: translateX(-100%); + } + 100% { + transform: translateX(450%); + } +} + +/* Layout */ +.app { + min-height: 100%; + display: grid; + grid-template-columns: 240px 1fr; +} + +.sidebar { + border-right: 1px solid var(--border); + padding: 24px 16px; + background: var(--panel); +} + +.sidebar h1 { + margin: 0 0 20px; + font-size: 14px; + letter-spacing: 0.04em; + text-transform: uppercase; + color: var(--text-dim); +} + +.sidebar nav { + display: flex; + flex-direction: column; + gap: 4px; +} + +.nav-link { + display: block; + padding: 8px 12px; + border-radius: 6px; + color: var(--text); + font-weight: 500; +} + +.nav-link:hover { + background: var(--panel-2); + text-decoration: none; +} + +.nav-link[aria-current='page'] { + background: var(--panel-2); + color: var(--accent); +} + +.nav-link small { + display: block; + color: var(--text-dim); + font-weight: 400; + font-size: 12px; + margin-top: 2px; +} + +.sidebar-footer { + margin-top: 24px; + padding-top: 16px; + border-top: 1px solid var(--border); + display: flex; + flex-direction: column; + gap: 8px; +} + +.button { + background: var(--panel-2); + border: 1px solid var(--border); + color: var(--text); + padding: 6px 10px; + border-radius: 6px; + font-size: 12px; + cursor: pointer; + font-family: inherit; +} +.button:hover { + background: var(--border); +} +.button-primary { + background: var(--accent); + border-color: var(--accent); + color: #0d1117; + font-weight: 600; +} +.button-primary:hover { + background: #4a89eb; +} + +/* Main */ +.main { + padding: 32px 40px; + max-width: 880px; +} + +.main h1 { + margin: 0 0 4px; + font-size: 24px; +} +.main h2 { + margin: 32px 0 12px; + font-size: 16px; + color: var(--text-dim); + text-transform: uppercase; + letter-spacing: 0.04em; + font-weight: 500; +} +.main h3 { + margin: 0 0 8px; + font-size: 16px; +} +.main p { + margin: 0 0 12px; + color: var(--text); +} +.main p.dim { + color: var(--text-dim); +} + +/* Cards */ +.card { + background: var(--panel); + border: 1px solid var(--border); + border-radius: 8px; + padding: 16px 18px; + margin-bottom: 12px; +} +.card-row { + display: flex; + align-items: center; + justify-content: space-between; + gap: 16px; +} + +/* Skeleton */ +.skel { + background: linear-gradient(90deg, var(--skel) 0%, var(--skel-shine) 50%, var(--skel) 100%); + background-size: 200% 100%; + animation: shimmer 1.4s ease-in-out infinite; + border-radius: 4px; + height: 14px; + display: block; + margin: 10px 0; +} +.skel.lg { + height: 20px; +} +.skel.short { + width: 35%; +} +.skel.med { + width: 65%; +} +@keyframes shimmer { + 0% { + background-position: 200% 0; + } + 100% { + background-position: -200% 0; + } +} + +/* Distinguish a skeleton card visually from a regular card so it's + obvious that "loading" is happening even at a glance. */ +.card.is-skeleton { + border-style: dashed; + border-color: rgba(91, 155, 255, 0.35); + position: relative; +} +.card.is-skeleton::before { + content: 'loading'; + position: absolute; + top: 8px; + right: 12px; + font-size: 10px; + letter-spacing: 0.08em; + text-transform: uppercase; + color: var(--accent); + opacity: 0.7; + font-weight: 600; +} + +/* Latency badges */ +.badge { + display: inline-block; + padding: 2px 8px; + border-radius: 999px; + font-size: 11px; + background: var(--panel-2); + color: var(--text-dim); + border: 1px solid var(--border); + margin-left: 8px; + font-variant-numeric: tabular-nums; +} +.badge-fast { + color: var(--accent-2); + border-color: rgba(126, 231, 135, 0.3); +} +.badge-slow { + color: var(--warn); + border-color: rgba(244, 208, 63, 0.3); +} +.badge-very-slow { + color: var(--danger); + border-color: rgba(255, 123, 114, 0.3); +} + +/* Status row */ +.status-row { + display: flex; + gap: 8px; + align-items: center; + margin-top: 6px; + flex-wrap: wrap; +} + +.status-pill { + display: inline-flex; + align-items: center; + gap: 6px; + padding: 4px 10px; + border-radius: 999px; + font-size: 12px; + background: var(--panel-2); + border: 1px solid var(--border); + color: var(--text-dim); + font-variant-numeric: tabular-nums; +} +.status-pill.live { + color: var(--accent); + border-color: rgba(91, 155, 255, 0.4); +} +.status-pill.live::before { + content: ''; + width: 6px; + height: 6px; + border-radius: 50%; + background: var(--accent); + animation: blink 1s ease-in-out infinite; +} +@keyframes blink { + 50% { + opacity: 0.3; + } +} + +/* Mode header */ +.mode-header { + border-left: 3px solid var(--accent); + padding: 4px 0 4px 16px; + margin-bottom: 24px; +} +.mode-header h1 { + margin: 0 0 4px; +} +.mode-header p { + margin: 0; + color: var(--text-dim); +} + +/* Recipe blurb */ +.recipe { + background: var(--panel); + border: 1px solid var(--border); + border-left: 3px solid var(--accent); + border-radius: 6px; + padding: 12px 16px; + margin-bottom: 24px; + font-size: 13px; + color: var(--text-dim); +} +.recipe code { + background: var(--panel-2); + padding: 1px 6px; + border-radius: 3px; + color: var(--text); + font-size: 12px; +} + +/* Note */ +.note { + font-size: 12px; + color: var(--text-dim); + font-style: italic; +} diff --git a/examples/loading-modes/tsconfig.json b/examples/loading-modes/tsconfig.json new file mode 100644 index 0000000..901b4ec --- /dev/null +++ b/examples/loading-modes/tsconfig.json @@ -0,0 +1,19 @@ +{ + "compilerOptions": { + "target": "ES2022", + "lib": ["ES2022", "DOM", "DOM.Iterable"], + "module": "ESNext", + "moduleResolution": "Bundler", + "jsx": "react-jsx", + "strict": true, + "noUnusedLocals": false, + "noUnusedParameters": false, + "esModuleInterop": true, + "skipLibCheck": true, + "resolveJsonModule": true, + "isolatedModules": true, + "allowImportingTsExtensions": true, + "noEmit": true + }, + "include": ["src"] +} diff --git a/examples/loading-modes/vite.config.ts b/examples/loading-modes/vite.config.ts new file mode 100644 index 0000000..8d01438 --- /dev/null +++ b/examples/loading-modes/vite.config.ts @@ -0,0 +1,18 @@ +import { defineConfig } from 'vite' +import react from '@vitejs/plugin-react' +import path from 'node:path' + +// Resolve `react-space-router` to the built dist of the parent package so the +// demo always exercises real router code without symlink quirks. +export default defineConfig({ + plugins: [react()], + resolve: { + alias: { + 'react-space-router': path.resolve(__dirname, '../../dist/index.js'), + }, + dedupe: ['react', 'react-dom'], + }, + server: { + port: 5173, + }, +}) diff --git a/src/index.tsx b/src/index.tsx index 7e505a2..2567bbf 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -1,11 +1,14 @@ import { createContext, + lazy as reactLazy, + Suspense, useCallback, useContext, useState, useEffect, useMemo, useRef, + useTransition, type AnchorHTMLAttributes, type ComponentType, type CSSProperties, @@ -24,89 +27,266 @@ import { export { qs } from 'space-router' +// --------------------------------------------------------------------------- +// Route preparation +// --------------------------------------------------------------------------- + +export interface RoutePrepareContext { + pathname: string + url: string + params: Record + query: Record +} + +/** + * Lifecycle handle returned by data-layer `prepare()` calls (e.g. `figbird.prepare`). + * The router pins the underlying cache entries via `release()` for the lifetime of + * the navigation; superseded navigations release their handles immediately. + */ +export interface PreparedHandle { + promise: Promise + release(): void + priority?: 'route' | 'defer' + key?: string | number +} + +export type RoutePrepare = (ctx: RoutePrepareContext) => readonly PreparedHandle[] | PreparedHandle[] | void + +export type ResolverModule = { default: ComponentType } + +export type RouteResolver = () => Promise + +export interface RouteNavigationOptions { + /** + * `'immediate'` (default): commit the new route synchronously inside a React + * transition; let any unresolved route-priority data suspend at the + * destination's `` boundary. + * + * `'ready'` is reserved for a follow-up release. + */ + commit?: 'immediate' +} + +export interface RouteData { + path?: string + component?: ComponentType | { default: ComponentType } + resolver?: RouteResolver + prepare?: RoutePrepare + navigation?: RouteNavigationOptions + scrollGroup?: string + routes?: RouteData[] + [extra: string]: unknown +} + +export function defineRoute(route: T): T { + return route +} + +export function defineRoutes(routes: T): T { + return routes +} + +const resolverPromiseCache = new WeakMap>() +const resolverComponentCache = new WeakMap>() + +function preloadResolver(resolver: RouteResolver): Promise { + let promise = resolverPromiseCache.get(resolver) + if (!promise) { + promise = resolver() + resolverPromiseCache.set(resolver, promise) + } + return promise +} + +function getResolverComponent(resolver: RouteResolver): ComponentType { + let component = resolverComponentCache.get(resolver) + if (!component) { + component = reactLazy(() => preloadResolver(resolver)) + resolverComponentCache.set(resolver, component) + } + return component +} + +function buildPrepareContext(route: Route): RoutePrepareContext { + const r = route as Route & { + pathname?: string + params?: Record + query?: Record + } + return { + pathname: r.pathname ?? '', + url: r.pathname ?? '', + params: r.params ?? {}, + query: r.query ?? {}, + } +} + +// --------------------------------------------------------------------------- +// Router context +// --------------------------------------------------------------------------- + interface RouterContextValue { router: SpaceRouter - useRoute: () => Route | null - onNavigating?: (route: Route) => void | Promise - onNavigated: (route: Route) => void + route: Route | null + commit: (route: Route) => void + isPending: boolean } export const RouterContext = createContext(undefined) -export const CurrRouteContext = createContext(null) -export function useInternalRouterInstance(): SpaceRouter { +// Internal context for ``. Set by `` based on +// `usePending()` + a configurable threshold. `holding` is true only during +// the pre-commit window where we want the previous route to stay on screen. +const DelayedSuspenseContext = createContext(false) + +function useRouterCtx(): RouterContextValue { const ctx = useContext(RouterContext) - if (!ctx?.router) { + if (!ctx) { throw new Error('Application must be wrapped in ') } - return ctx.router + return ctx +} + +export function useInternalRouterInstance(): SpaceRouter { + return useRouterCtx().router } export function useRoute(): Route | null { - return useContext(RouterContext)!.useRoute() + return useRouterCtx().route +} + +/** + * `true` while the router is between navigation start and commit. Backed by + * React's `useTransition` — flips on as soon as `navigate()` runs and flips off + * once the destination has committed (and any Suspense fallbacks at the new + * route have resolved enough to let React's transition settle). + * + * Use this for top-of-page progress bars, desaturated link states, and "your + * click did something" affordances. Don't use it for skeletons — those belong + * in destination Suspense boundaries. + */ +export function usePending(): boolean { + return useRouterCtx().isPending } export function useNavigate() { - const currRoute = useRoute() - const navigate = useInternalRouterInstance().navigate + const { router, route } = useRouterCtx() return useCallback( (to: To) => { - return navigate(to, currRoute as Route | undefined) + return router.navigate(to, route as Route | undefined) }, - [navigate, currRoute], + [router, route], ) } -function defaultUseRoute(): Route | null { - return useContext(CurrRouteContext) -} +// --------------------------------------------------------------------------- +// Router +// --------------------------------------------------------------------------- interface RouterOpts { mode: Mode | undefined qs: Qs | undefined sync: boolean | undefined - disableScrollToTop?: boolean } interface InternalRouter { - router: SpaceRouter & { disableScrollToTop?: boolean } + router: SpaceRouter routerOpts: RouterOpts } function makeRouter(routerOpts: RouterOpts): InternalRouter { const router = createRouter({ mode: routerOpts.mode, qs: routerOpts.qs, sync: routerOpts.sync }) - ;(router as InternalRouter['router']).disableScrollToTop = routerOpts.disableScrollToTop - return { router: router as InternalRouter['router'], routerOpts } + return { router, routerOpts } } +/** + * Optional pre-commit transform. Runs synchronously between match and commit. + * Return a modified route to change what gets committed (e.g. to merge a + * persisted query). If the returned route's `url` differs from the matched + * route's, the browser URL is synced via `history.replaceState` so the address + * bar matches what the app is rendering. + * + * Must be pure and synchronous. + */ +export type TransformRoute = (route: Route) => Route | void + export interface RouterProps { mode?: Mode qs?: Qs sync?: boolean - useRoute?: () => Route | null - onNavigating?: (route: Route) => void | Promise - onNavigated?: (route: Route) => void + transformRoute?: TransformRoute + /** + * How long to hold the previous route on screen before `` + * boundaries fall back to their fallback content. Default is `1000` ms. + * No effect on plain `` boundaries — those always show their + * fallback the moment the boundary mounts. + */ + pendingDelayMs?: number children?: ReactNode } -export function Router({ mode, qs, sync, useRoute, onNavigating, onNavigated, children }: RouterProps) { +const DEFAULT_PENDING_DELAY_MS = 1000 + +export function Router({ + mode, + qs, + sync, + transformRoute, + pendingDelayMs = DEFAULT_PENDING_DELAY_MS, + children, +}: RouterProps) { const [{ router, routerOpts }, setRouter] = useState(() => makeRouter({ mode, qs, sync })) const [currRoute, setCurrRoute] = useState(null) + const [isPending, startRouterTransition] = useTransition() - const connectedRouter = useMemo( - () => ({ - router, - useRoute: useRoute || defaultUseRoute, - onNavigating, - onNavigated(route: Route) { - if (!useRoute) { - setCurrRoute(route) - } - if (onNavigated) onNavigated(route) - }, - }), - [router, useRoute, onNavigating, onNavigated], + // `holding` is true during the pre-commit window where `` + // boundaries should re-throw their fallback (so the previous route stays + // committed). It flips off either after `pendingDelayMs` elapses while + // still pending, or when the transition settles — whichever comes first. + const [holding, setHolding] = useState(false) + useEffect(() => { + if (!isPending) { + setHolding(false) + return + } + setHolding(true) + const t = setTimeout(() => setHolding(false), pendingDelayMs) + return () => clearTimeout(t) + }, [isPending, pendingDelayMs]) + + // Keep the latest transform in a ref so commit() can stay referentially + // stable while always using the freshest function. + const transformRef = useRef(transformRoute) + transformRef.current = transformRoute + + const commit = useCallback((next: Route) => { + const transform = transformRef.current + const transformed = transform ? (transform(next) ?? next) : next + + startRouterTransition(() => { + setCurrRoute(transformed) + }) + + // Sync the address bar if the transform rewrote the URL. We use + // history.replaceState directly so we don't re-trigger the router's + // listener loop. + const matchedUrl = (next as Route & { url?: string }).url + const transformedUrl = (transformed as Route & { url?: string }).url + if ( + transformed !== next && + transformedUrl && + transformedUrl !== matchedUrl && + typeof window !== 'undefined' && + window.history + ) { + window.history.replaceState({}, '', transformedUrl) + } + }, []) + + const ctx = useMemo( + () => ({ router, route: currRoute, commit, isPending }), + [router, currRoute, commit, isPending], ) useEffect(() => { @@ -116,56 +296,125 @@ export function Router({ mode, qs, sync, useRoute, onNavigating, onNavigated, ch }, [routerOpts, mode, qs, sync]) return ( - - {children} + + {children} ) } +// --------------------------------------------------------------------------- +// DelayedSuspense +// --------------------------------------------------------------------------- + +/** + * A `` boundary whose fallback is *delayed* during an in-flight + * router navigation: until the router has been pending for `pendingDelayMs` + * (configured on ``, default 1000ms), the fallback re-throws so + * suspension propagates upward — typically to the router-level transition, + * which keeps the previous route on screen. Past the threshold (or when + * the transition has already committed and a read is still pending), the + * fallback renders normally. + * + * Use this when you want "stay on the previous page for a moment, then if + * it's still loading degrade to a skeleton" — the classic browser-style + * UX for variable-latency data. Outside an in-flight nav, behaves + * identically to plain ``. + */ +export interface DelayedSuspenseProps { + fallback: ReactNode + children?: ReactNode +} + +export function DelayedSuspense({ fallback, children }: DelayedSuspenseProps) { + const holding = useContext(DelayedSuspenseContext) + return : fallback}>{children} +} + +const NEVER_RESOLVES: Promise = new Promise(() => {}) + +/** + * Throws a never-resolving promise so the surrounding Suspense boundary's + * fallback path itself suspends — the suspension bubbles up to the next + * Suspense boundary above, which during a router transition is the + * already-committed root holding the previous route. + */ +function DelayedSuspenseHold(): null { + throw NEVER_RESOLVES +} + +// --------------------------------------------------------------------------- +// Routes +// --------------------------------------------------------------------------- + export interface RoutesProps { routes: RouteDefinition[] disableScrollToTop?: boolean } export function Routes({ routes, disableScrollToTop }: RoutesProps) { - const ctx = useContext(RouterContext)! - const { router, onNavigating, onNavigated } = ctx - const route = ctx.useRoute() - const onlyLatest = useOnlyLatest() + const { router, route, commit } = useRouterCtx() useScrollToTop(route, disableScrollToTop) + // Pinned prepare handles for the currently committed navigation. Released + // when a new navigation commits or when unmounts. + const pinnedHandles = useRef([]) + const releasePinned = useCallback(() => { + const handles = pinnedHandles.current + pinnedHandles.current = [] + for (const handle of handles) { + try { + handle.release() + } catch { + // best-effort + } + } + }, []) + useEffect(() => { const transition = (next: Route) => { - onlyLatest(async (isLatest) => { - if (isLatest() && onNavigating) { - await onNavigating(next) - } - if (isLatest()) { - onNavigated(next) + const segments = (next.data ?? []) as RouteData[] + const ctx = buildPrepareContext(next) + const nextHandles: PreparedHandle[] = [] + + for (const segment of segments) { + if (segment.resolver) preloadResolver(segment.resolver) + if (segment.prepare) { + const result = segment.prepare(ctx) + if (result) { + for (const handle of result) { + nextHandles.push(handle) + } + } } - }) + } + + releasePinned() + pinnedHandles.current = nextHandles + commit(next) } return router.listen(routes, transition) - }, [router, routes, onNavigating, onNavigated]) + }, [router, routes, commit, releasePinned]) + + useEffect(() => releasePinned, [releasePinned]) return useMemo(() => { - if (!route) { - return null - } + if (!route) return null - return route.data.reduceRight((children, segment) => { + return (route.data as RouteData[]).reduceRight((children, segment) => { const props = (segment as { props?: Record }).props ?? {} - const component = (segment as { component?: unknown }).component - const Component = resolveComponent(component) - // segments without a component act as transparent passthroughs so descendants still render + const Component = resolveSegmentComponent(segment) + // segments without a component act as transparent passthroughs return Component ? {children} : children }, null) }, [router, route && route.pathname]) } -function resolveComponent(component: unknown): ComponentType | null { - if (!component) return null - const c = component as { default?: ComponentType } & ComponentType +function resolveSegmentComponent(segment: RouteData): ComponentType | null { + if (segment.resolver) { + return getResolverComponent(segment.resolver) + } + if (!segment.component) return null + const c = segment.component as { default?: ComponentType } & ComponentType return c.default || c } @@ -173,9 +422,7 @@ function useScrollToTop(route: Route | null, disabled?: boolean) { const prevScrollGroup = useRef(undefined) useEffect(() => { - if (!route || disabled) { - return - } + if (!route || disabled) return const datas = route.data const data = datas[datas.length - 1] as { scrollGroup?: string } @@ -189,6 +436,10 @@ function useScrollToTop(route: Route | null, disabled?: boolean) { }, [route && route.pathname, disabled]) } +// --------------------------------------------------------------------------- +// Link / Navigate +// --------------------------------------------------------------------------- + export function useMakeHref() { const { href } = useInternalRouterInstance() return href @@ -316,14 +567,3 @@ export function shouldNavigate(e: MouseEvent): boolean { } return true } - -function useOnlyLatest() { - const seq = useRef(0) - - return (fn: (isLatest: () => boolean) => void) => { - seq.current += 1 - const curr = seq.current - const isLatest = () => seq.current === curr - return fn(isLatest) - } -} diff --git a/test/router.test.tsx b/test/router.test.tsx index 96a9f50..93a0c3e 100755 --- a/test/router.test.tsx +++ b/test/router.test.tsx @@ -10,7 +10,11 @@ import { Navigate, useInternalRouterInstance, useLinkProps, + usePending, + useRoute, qs, + type PreparedHandle, + type Route, } from '../src/index.tsx' ;(globalThis as any).IS_REACT_ACT_ENVIRONMENT = true @@ -18,7 +22,7 @@ import { const g = globalThis as any function setup() { - const dom = new JSDOM('
') + const dom = new JSDOM('
', { url: 'http://localhost/' }) g.window = dom.window g.window.scrollTo = () => {} g.document = dom.window.document @@ -30,6 +34,9 @@ function setup() { const popstate = new dom.window.PopStateEvent('popstate') dom.window.dispatchEvent(popstate) }, + replaceState() { + // no-op for tests; real replaceState would update the address bar + }, } g.location = { href: '/', @@ -235,19 +242,23 @@ test.serial('Link click navigates and invokes to.onClick', (t) => { t.truthy(stringLink) }) -test.serial('onNavigating is awaited before onNavigated', async (t) => { +test.serial('transformRoute rewrites the route before commit and syncs the URL', async (t) => { setup() const root = document.getElementById('root') - const events = [] const routes = [ { path: '/', component: () =>
Home
}, - { path: '/stuff', component: () =>
Stuff
}, + { + path: '/people', + component: () => { + const r = useRoute() + return
status={String(r?.query?.status ?? 'none')}
+ }, + }, ] let router - function Capture() { const r = useInternalRouterInstance() useEffect(() => { @@ -256,18 +267,76 @@ test.serial('onNavigating is awaited before onNavigated', async (t) => { return null } - async function onNavigating(route) { - events.push(`navigating:${route.pathname}`) - await Promise.resolve() + // Simulate persisted-query restoration: if /people has no `status`, inject one. + function transformRoute(route: Route): Route | void { + if (route.pathname === '/people' && !(route as any).query?.status) { + const query = { ...((route as any).query ?? {}), status: 'active' } + const search = '?status=active' + return { ...route, query, search, url: '/people' + search } as Route + } + } + + function App() { + return ( + + + + + ) + } + + await act(async () => { + const r = ReactDOM.createRoot(root) + r.render() + }) + + await act(async () => { + router.navigate('/people') + }) + + t.regex(window.document.body.innerHTML, /status=active/) +}) + +test.serial('usePending flips while a transition is in flight', async (t) => { + setup() + + const root = document.getElementById('root') + + let resolveSlow: (() => void) | null = null + const slowGate = new Promise((r) => { + resolveSlow = r + }) + + function Slow() { + // The first render of /slow throws this promise to suspend until the gate resolves. + if (!(Slow as any).ready) { + throw slowGate.then(() => { + ;(Slow as any).ready = true + }) + } + return
Slow
} - function onNavigated(route) { - events.push(`navigated:${route.pathname}`) + const routes = [ + { path: '/', component: () =>
Home
}, + { path: '/slow', component: Slow }, + ] + + const pendingSamples: boolean[] = [] + let router + function Capture() { + const r = useInternalRouterInstance() + const pending = usePending() + pendingSamples.push(pending) + useEffect(() => { + router = r + }, [r]) + return null } function App() { return ( - + @@ -279,13 +348,23 @@ test.serial('onNavigating is awaited before onNavigated', async (t) => { r.render() }) + pendingSamples.length = 0 + await act(async () => { - router.navigate('/stuff') + router.navigate('/slow') }) - t.true(events.includes('navigating:/stuff')) - t.true(events.includes('navigated:/stuff')) - t.is(events.indexOf('navigating:/stuff') < events.indexOf('navigated:/stuff'), true) + // While suspended, React is mid-transition: pending should have flipped true. + t.true(pendingSamples.includes(true), 'usePending was true during the suspended transition') + + await act(async () => { + resolveSlow!() + await Promise.resolve() + await Promise.resolve() + }) + + // After commit, the latest pending sample is false. + t.is(pendingSamples[pendingSamples.length - 1], false, 'usePending settles to false after commit') }) test.serial('Routes resolves ESM-default components and skips null components', (t) => { @@ -575,6 +654,95 @@ test.serial('Link with download attribute lets the browser handle it', (t) => { t.is(location.pathname, '/') }) +test.serial('Routes pins prepare handles for the committed nav and releases on the next', async (t) => { + setup() + + const root = document.getElementById('root') + + const released: string[] = [] + let nextHandleId = 0 + + function makeHandle(label: string): PreparedHandle { + const key = `${label}#${++nextHandleId}` + return { + key, + promise: new Promise(() => {}), + release() { + released.push(key) + }, + } + } + + const routes = [ + { path: '/', component: () =>
Home
}, + { path: '/a', component: () =>
A
, prepare: () => [makeHandle('a')] }, + { path: '/b', component: () =>
B
, prepare: () => [makeHandle('b')] }, + { path: '/c', component: () =>
C
, prepare: () => [makeHandle('c')] }, + ] + + let router + + function Capture() { + const r = useInternalRouterInstance() + useEffect(() => { + router = r + }, [r]) + return null + } + + function App() { + return ( + + + + + ) + } + + let rootHandle + await act(async () => { + rootHandle = ReactDOM.createRoot(root) + rootHandle.render() + }) + + await act(async () => { + router.navigate('/a') + }) + + t.deepEqual(released, [], '/a pinned, nothing released yet') + + await act(async () => { + router.navigate('/b') + }) + + t.true( + released.some((k) => k.startsWith('a#')), + '/a released when /b committed', + ) + t.false( + released.some((k) => k.startsWith('b#')), + '/b still pinned', + ) + + await act(async () => { + router.navigate('/c') + }) + + t.true( + released.some((k) => k.startsWith('b#')), + '/b released when /c committed', + ) + + await act(async () => { + rootHandle.unmount() + }) + + t.true( + released.some((k) => k.startsWith('c#')), + '/c released on unmount', + ) +}) + test.serial('Router recreates router when mode prop changes', (t) => { setup() From 6186509110a7cf9964c388a6dd04585aec27c354 Mon Sep 17 00:00:00 2001 From: Karolis Narkevicius Date: Tue, 28 Apr 2026 20:13:49 +0100 Subject: [PATCH 02/17] Add detail swap fade loading demo --- examples/loading-modes/src/Shell.tsx | 27 ++-- examples/loading-modes/src/data.ts | 4 + examples/loading-modes/src/pages/Home.tsx | 20 ++- examples/loading-modes/src/pages/ModeD.tsx | 133 +++++++++++++++++++ examples/loading-modes/src/routes.ts | 7 + examples/loading-modes/src/styles.css | 145 ++++++++++++++++++++- 6 files changed, 315 insertions(+), 21 deletions(-) create mode 100644 examples/loading-modes/src/pages/ModeD.tsx diff --git a/examples/loading-modes/src/Shell.tsx b/examples/loading-modes/src/Shell.tsx index 9b7ed65..0c87dce 100644 --- a/examples/loading-modes/src/Shell.tsx +++ b/examples/loading-modes/src/Shell.tsx @@ -48,40 +48,35 @@ function CurrentRoute() { } export function Shell({ children }: { children: ReactNode }) { + const route = useRoute() + const isModeD = route?.pathname?.startsWith('/mode-d/') + return (
}> + + + + ) + } + + await act(async () => { + const r = ReactDOM.createRoot(root) + r.render() + }) + + await act(async () => { + router.navigate('/lazy') + await Promise.resolve() + await Promise.resolve() + }) + + t.is(window.document.body.innerHTML, '
Lazy
') + t.is(resolverCalls, 1) + + await act(async () => { + router.navigate('/') + }) + await act(async () => { + router.navigate('/lazy') + await Promise.resolve() + }) + + t.is(resolverCalls, 1, 'resolver result is cached by function reference') +}) + +test.serial('Routes observes rejected resolver preload promises', async (t) => { + setup() + + const root = document.getElementById('root') + const originalConsoleError = console.error + console.error = () => {} + + class ErrorBoundary extends Component<{ children: ReactNode }, { hasError: boolean }> { + state = { hasError: false } + + static getDerivedStateFromError() { + return { hasError: true } + } + + render() { + return this.state.hasError ?
Error
: this.props.children + } + } + + const routes = [ + { path: '/', component: () =>
Home
}, + { + path: '/broken', + resolver: () => Promise.reject(new Error('broken import')), + }, + ] + + let router + + function Capture() { + const r = useInternalRouterInstance() + useEffect(() => { + router = r + }, [r]) + return null + } + + function App() { + return ( + + + + Loading
}> + +
+ +
+ ) + } + + try { + await act(async () => { + const r = ReactDOM.createRoot(root) + r.render() + }) + + await act(async () => { + router.navigate('/broken') + await Promise.resolve() + await Promise.resolve() + }) + + t.is(window.document.body.innerHTML, '
Error
') + } finally { + console.error = originalConsoleError + } +}) + +test.serial('DelayedSuspense renders fallback normally outside delayed navigation hold', async (t) => { + setup() + + const root = document.getElementById('root') + let resolveChild: (() => void) | null = null + const childGate = new Promise((r) => { + resolveChild = r + }) + + function Child() { + if (!(Child as any).ready) { + throw childGate.then(() => { + ;(Child as any).ready = true + }) + } + return Ready + } + + function App() { + return ( + + Fallback}> + + + + ) + } + + await act(async () => { + const r = ReactDOM.createRoot(root) + r.render() + }) + + t.is(window.document.body.innerHTML, '
Fallback
') + + await act(async () => { + resolveChild!() + await Promise.resolve() + }) + + t.is(window.document.body.innerHTML, '
Ready
') +}) + +test.serial('DelayedSuspense holds fallback during route transition delay', async (t) => { + setup() + + const root = document.getElementById('root') + let resolveSlow: (() => void) | null = null + const slowGate = new Promise((r) => { + resolveSlow = r + }) + + function SlowChild() { + if (!(SlowChild as any).ready) { + throw slowGate.then(() => { + ;(SlowChild as any).ready = true + }) + } + return
Slow
+ } + + function SlowPage() { + return ( + Inner fallback}> + + + ) + } + + const routes = [ + { path: '/', component: () =>
Home
}, + { path: '/slow', component: SlowPage }, + ] + + let router + + function Capture() { + const r = useInternalRouterInstance() + useEffect(() => { + router = r + }, [r]) + return null + } + + function App() { + return ( + + + Outer fallback}> + + + + ) + } + + await act(async () => { + const r = ReactDOM.createRoot(root) + r.render() + }) + + await act(async () => { + router.navigate('/slow') + }) + + t.is(window.document.body.innerHTML, '
Home
') + + await act(async () => { + resolveSlow!() + await Promise.resolve() + await Promise.resolve() + }) + + t.is(window.document.body.innerHTML, '
Slow
') +}) + test.serial('Link honours current override and regular className/style props', (t) => { setup() @@ -720,7 +1008,7 @@ test.serial('Link rendered alongside Routes in async mode does not crash', async t.is(link?.getAttribute('aria-current'), null) }) -test.serial('Routes passes children through when a middle segment has no component', (t) => { +test.serial('Link clears pending href when async navigation commits', async (t) => { setup() const root = document.getElementById('root') @@ -728,6 +1016,47 @@ test.serial('Routes passes children through when a middle segment has no compone const routes = [ { path: '/', + component: () => Next, + }, + { path: '/next', component: () =>
Next
}, + ] + + function PendingProbe() { + const props = useLinkProps('/next') + return + } + + function App() { + return ( + + + + + ) + } + + await act(async () => { + const r = ReactDOM.createRoot(root) + r.render() + }) + + await act(async () => { + window.document.querySelector('a')!.click() + await Promise.resolve() + await Promise.resolve() + }) + + t.is(window.document.querySelector('[data-pending]')?.getAttribute('data-pending'), 'false') + t.is(window.document.body.innerHTML, '
Next
') +}) + +test.serial('Routes passes children through when a middle segment has no component', (t) => { + setup() + + const root = document.getElementById('root') + + const routes = [ + { component: ({ children }) =>
{children}
, routes: [ { @@ -811,6 +1140,81 @@ test.serial('Routes injects path params as component props', (t) => { t.is(window.document.body.innerHTML, '
item=beacon
') }) +test.serial('Routes parses query hash splat optional params and wildcard routes', (t) => { + setup() + + const root = document.getElementById('root') + + function Inspector() { + const route = useRoute() + return ( +
+ path={route?.pathname}; params={JSON.stringify(route?.params)}; query={JSON.stringify(route?.query)}; hash= + {route?.hash} +
+ ) + } + + const routes = [ + { path: '/files/:path+', component: Inspector }, + { path: '/needs/:id+', component: Inspector }, + { path: '/optional/:id?', component: Inspector }, + { path: '*', component: Inspector }, + ] + + let router + + function Capture() { + const r = useInternalRouterInstance() + useEffect(() => { + router = r + }, [r]) + return null + } + + function App() { + return ( + + + + + ) + } + + act(() => { + const r = ReactDOM.createRoot(root) + r.render() + }) + + act(() => { + router.navigate('/files/a/b?q=1#top') + }) + + t.regex(window.document.body.innerHTML, /path=\/files\/a\/b/) + t.regex(window.document.body.innerHTML, /"path":"a\/b"/) + t.regex(window.document.body.innerHTML, /"q":"1"/) + t.regex(window.document.body.innerHTML, /hash=#top/) + + act(() => { + router.navigate('/needs') + }) + + t.regex(window.document.body.innerHTML, /path=\/needs/) + t.notRegex(window.document.body.innerHTML, /"id":/) + + act(() => { + router.navigate('/optional') + }) + + t.regex(window.document.body.innerHTML, /"id":""/) + + act(() => { + router.navigate('/anything-else') + }) + + t.regex(window.document.body.innerHTML, /path=\/anything-else/) +}) + test.serial('Link with target=_blank lets the browser open in a new tab', (t) => { setup() @@ -852,6 +1256,43 @@ test.serial('Link with target=_blank lets the browser open in a new tab', (t) => t.is(location.pathname, '/') }) +test.serial('Link with modifier key lets the browser handle it', (t) => { + setup() + + const root = document.getElementById('root') + + const routes = [ + { + path: '/', + component: () => Modified, + }, + { path: '/foo', component: () =>
Foo
}, + ] + + function App() { + return ( + + + + ) + } + + act(() => { + const r = ReactDOM.createRoot(root) + r.render() + }) + + const link = window.document.querySelector('a')! + let event: MouseEvent + act(() => { + event = new window.MouseEvent('click', { bubbles: true, button: 0, cancelable: true, metaKey: true }) + link.dispatchEvent(event) + }) + + t.false(event!.defaultPrevented) + t.is(location.pathname, '/') +}) + test.serial('Link with cross-origin URL lets the browser handle it', (t) => { setup() @@ -1093,6 +1534,109 @@ test.serial('Routes keeps current prepare handles pinned until a suspended navig t.false(released.includes('slow'), 'slow handle remains pinned after /slow commits') }) +test.serial('Routes releases superseded pending handles and ignores release errors', async (t) => { + setup() + + const root = document.getElementById('root') + + const released: string[] = [] + let resolveA: (() => void) | null = null + const gateA = new Promise((r) => { + resolveA = r + }) + let resolveB: (() => void) | null = null + const gateB = new Promise((r) => { + resolveB = r + }) + + function makeSlow(label: string, gate: Promise) { + function Slow() { + if (!(Slow as any).ready) { + throw gate.then(() => { + ;(Slow as any).ready = true + }) + } + return
{label}
+ } + return Slow + } + + const SlowA = makeSlow('A', gateA) + const SlowB = makeSlow('B', gateB) + + const routes = [ + { path: '/', component: () =>
Home
}, + { + path: '/a', + component: SlowA, + prepare: () => [ + { + promise: Promise.resolve(), + release() { + released.push('a') + throw new Error('ignored') + }, + }, + ], + }, + { + path: '/b', + component: SlowB, + prepare: () => [ + { + promise: Promise.resolve(), + release() { + released.push('b') + }, + }, + ], + }, + ] + + let router + + function Capture() { + const r = useInternalRouterInstance() + useEffect(() => { + router = r + }, [r]) + return null + } + + function App() { + return ( + + + + + ) + } + + await act(async () => { + const r = ReactDOM.createRoot(root) + r.render() + }) + + await act(async () => { + router.navigate('/a') + }) + await act(async () => { + router.navigate('/b') + }) + + t.deepEqual(released, ['a']) + + await act(async () => { + resolveA!() + resolveB!() + await Promise.resolve() + await Promise.resolve() + }) + + t.is(window.document.body.innerHTML, '
B
') + t.false(released.includes('b')) +}) + test.serial('Router recreates router when mode prop changes', (t) => { setup() From e7d9b84b2ec864ff77b14f00016e7a1e919394ae Mon Sep 17 00:00:00 2001 From: Karolis Narkevicius Date: Tue, 28 Apr 2026 23:45:18 +0100 Subject: [PATCH 11/17] Fix router edge case regressions --- dist/index.d.ts.map | 2 +- dist/index.js | 69 +++++++---- dist/index.js.map | 2 +- src/index.tsx | 67 ++++++---- test/router.test.tsx | 283 +++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 374 insertions(+), 49 deletions(-) diff --git a/dist/index.d.ts.map b/dist/index.d.ts.map index 718229d..1883b51 100644 --- a/dist/index.d.ts.map +++ b/dist/index.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAWL,KAAK,oBAAoB,EACzB,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,KAAK,SAAS,EACf,MAAM,OAAO,CAAA;AACd,OAAO,EAGL,KAAK,IAAI,EACT,KAAK,cAAc,EACnB,KAAK,EAAE,EACP,KAAK,KAAK,EACV,KAAK,eAAe,EACpB,KAAK,MAAM,IAAI,WAAW,EAC3B,MAAM,cAAc,CAAA;AAErB,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAA;AAMjC,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAA;IAChB,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC9B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAC/B;AAED;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAA;IACzB,OAAO,IAAI,IAAI,CAAA;IACf,QAAQ,CAAC,EAAE,OAAO,GAAG,OAAO,CAAA;IAC5B,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;CACtB;AAED,MAAM,MAAM,YAAY,GAAG,CAAC,GAAG,EAAE,mBAAmB,KAAK,SAAS,cAAc,EAAE,GAAG,cAAc,EAAE,GAAG,IAAI,CAAA;AAE5G,MAAM,MAAM,cAAc,GAAG;IAAE,OAAO,EAAE,aAAa,CAAC,GAAG,CAAC,CAAA;CAAE,CAAA;AAE5D,MAAM,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC,cAAc,CAAC,CAAA;AAEzD,MAAM,WAAW,sBAAsB;IACrC;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,WAAW,CAAA;CACrB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,aAAa,CAAC,GAAG,CAAC,GAAG;QAAE,OAAO,EAAE,aAAa,CAAC,GAAG,CAAC,CAAA;KAAE,CAAA;IAChE,QAAQ,CAAC,EAAE,aAAa,CAAA;IACxB,OAAO,CAAC,EAAE,YAAY,CAAA;IACtB,UAAU,CAAC,EAAE,sBAAsB,CAAA;IACnC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,CAAC,EAAE,SAAS,EAAE,CAAA;IACpB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAA;CACzB;AAsDD,MAAM,MAAM,EAAE,GACV,MAAM,GACN,CAAC,cAAc,GAAG;IAChB,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB,CAAC,CAAA;AAEN,UAAU,kBAAkB;IAC1B,MAAM,EAAE,WAAW,CAAA;IACnB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAA;IACnB,cAAc,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,KAAK,CAAA;IACvC,YAAY,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,KAAK,IAAI,CAAA;IAC1D,MAAM,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,KAAK,KAAK,IAAI,CAAA;IAC/C,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,KAAK,KAAK,IAAI,CAAA;IACxC,SAAS,EAAE,OAAO,CAAA;IAClB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,EAAE,EAAE,EAAE,GAAG,SAAS,CAAA;CACnB;AAED,eAAO,MAAM,aAAa,yDAA2D,CAAA;AAgBrF,wBAAgB,yBAAyB,IAAI,WAAW,CAEvD;AAED,wBAAgB,QAAQ,IAAI,KAAK,GAAG,IAAI,CAGvC;AAED;;;;;;;;;GASG;AACH,wBAAgB,UAAU,IAAI,OAAO,CAEpC;AAED,wBAAgB,WAAW,SAIlB,EAAE,UAKV;AAsBD;;;;;;;;GAQG;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,KAAK,EAAE,KAAK,KAAK,KAAK,GAAG,IAAI,CAAA;AAE3D,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,IAAI,CAAA;IACX,EAAE,CAAC,EAAE,EAAE,CAAA;IACP,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,cAAc,CAAC,EAAE,cAAc,CAAA;IAC/B;;;;;OAKG;IACH,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,EAAE,SAAS,CAAA;CACrB;AAID,wBAAgB,MAAM,CAAC,EACrB,IAAI,EACJ,EAAE,EACF,IAAI,EACJ,cAAc,EACd,cAAyC,EACzC,QAAQ,GACT,EAAE,WAAW,2CA2Gb;AAMD;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,SAAS,CAAA;IACnB,QAAQ,CAAC,EAAE,SAAS,CAAA;CACrB;AAED,wBAAgB,eAAe,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,oBAAoB,2CAG3E;AAkBD,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,eAAe,EAAE,CAAA;IACzB,kBAAkB,CAAC,EAAE,OAAO,CAAA;CAC7B;AAqJD,wBAAgB,MAAM,CAAC,EAAE,MAAM,EAAE,kBAAkB,EAAE,EAAE,WAAW,kDA+HjE;AAkDD,wBAAgB,WAAW,iGAG1B;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,cAAc,EAAE,MAAM,GAAG,SAAS,CAAA;IAClC,OAAO,EAAE,CAAC,CAAC,EAAE,UAAU,CAAC,iBAAiB,CAAC,KAAK,IAAI,CAAA;IACnD,SAAS,EAAE,OAAO,CAAA;IAClB,SAAS,EAAE,OAAO,CAAA;CACnB;AAED,wBAAgB,YAAY,CAAC,EAAE,EAAE,EAAE,GAAG,eAAe,CAoCpD;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,EAAE,CAAA;IACT,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,aAAa,CAAA;IACrB,QAAQ,CAAC,EAAE,SAAS,CAAA;CACrB;AAED,MAAM,MAAM,SAAS,GAAG,YAAY,GAAG,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,EAAE,MAAM,YAAY,CAAC,CAAA;AAExG,wBAAgB,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,WAAW,EAAE,EAAE,SAAS,2CAyBlH;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,EAAE,CAAA;CACP;AAED,wBAAgB,QAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,aAAa,QAc7C;AAED,wBAAgB,cAAc,CAAC,CAAC,EAAE,UAAU,GAAG,OAAO,CAarD"} \ No newline at end of file diff --git a/dist/index.js b/dist/index.js index c2f7834..2e6c085 100644 --- a/dist/index.js +++ b/dist/index.js @@ -33,6 +33,9 @@ function buildPrepareContext(route) { query: r.query ?? {}, }; } +function routeHasRedirect(route) { + return !!route?.data?.some((segment) => Boolean(segment.redirect)); +} export const RouterContext = createContext(undefined); const RouteContext = createContext(undefined); // Internal context for ``. Set by `` based on @@ -82,8 +85,6 @@ export function Router({ mode, qs, sync, transformRoute, pendingDelayMs = DEFAUL const [{ router, routerOpts }, setRouter] = useState(() => makeRouter({ mode, qs, sync })); const [currRoute, setCurrRoute] = useState(null); const [pendingHref, setPendingHref] = useState(null); - const pendingHrefRef = useRef(null); - pendingHrefRef.current = pendingHref; const [isPending, startRouterTransition] = useTransition(); // `holding` is true during the pre-commit window where `` // boundaries should re-throw their fallback (so the previous route stays @@ -123,15 +124,19 @@ export function Router({ mode, qs, sync, transformRoute, pendingDelayMs = DEFAUL const transformedUrl = next.url; startRouterTransition(() => { setCurrRoute(next); - if (pendingHrefRef.current === matchedUrl || pendingHrefRef.current === transformedUrl) { - setPendingHref(null); - } + setPendingHref((current) => { + if (!current) + return current; + if (current === matchedUrl || current === transformedUrl) + return null; + return routeHasRedirect(router.match(current)) ? null : current; + }); }); // Sync the address bar if the transform rewrote the URL. We use // history.replaceState directly so we don't re-trigger the router's // listener loop. syncRouteUrl(matched, next); - }, [syncRouteUrl]); + }, [router, syncRouteUrl]); const navigate = useCallback((to, curr) => { const href = router.href(to, curr); setPendingHref(href); @@ -140,13 +145,6 @@ export function Router({ mode, qs, sync, transformRoute, pendingDelayMs = DEFAUL setPendingHref(null); } }, [router]); - useEffect(() => { - if (!pendingHref) - return; - if (!isPending && currRoute?.url === pendingHref) { - setPendingHref(null); - } - }, [pendingHref, isPending, currRoute?.url]); const ctx = useMemo(() => ({ router, route: currRoute, @@ -308,6 +306,7 @@ export function Routes({ routes, disableScrollToTop }) { const committed = useRef(null); const pending = useRef(null); const didSeedInitialRoute = useRef(false); + const previousRoutes = useRef(routes); const prepareMatched = useCallback((matched) => { const transformed = transformRoute(matched); return { route: transformed, matched, handles: prepareRoute(transformed) }; @@ -336,6 +335,10 @@ export function Routes({ routes, disableScrollToTop }) { const matched = matchRoutes(routes, nextUrl, qs) ?? next; const matchedRoute = transformRoute(matched); if (committed.current?.route.url === matchedRoute.url) { + if (pending.current) { + releaseHandles(pending.current.handles); + pending.current = null; + } commit(committed.current.route, committed.current.matched); return; } @@ -350,6 +353,21 @@ export function Routes({ routes, disableScrollToTop }) { }; return router.listen(routes, transition); }, [router, routes, qs, transformRoute, prepareMatched, commit]); + useEffect(() => { + if (previousRoutes.current === routes) + return; + previousRoutes.current = routes; + const currentUrl = route?.url ?? committed.current?.route.url ?? router.getUrl(); + if (!currentUrl) + return; + const matched = matchRoutes(routes, currentUrl, qs); + if (!matched) + return; + if (pending.current) + releaseHandles(pending.current.handles); + pending.current = prepareMatched(matched); + commit(pending.current.route, pending.current.matched); + }, [routes, router, qs, prepareMatched, commit, route?.url]); useEffect(() => { const prepared = pending.current; if (!route || !prepared || prepared.route.url !== route.url) @@ -359,7 +377,7 @@ export function Routes({ routes, disableScrollToTop }) { pending.current = null; if (previous) releaseHandles(previous.handles); - }, [route?.url]); + }, [route]); useEffect(() => releaseAll, [releaseAll]); return useMemo(() => { if (!activeRoute) @@ -467,9 +485,11 @@ export function useLinkProps(to) { return result; } export function Link({ href: to, replace, current, className, style, onClick, children, ...anchorProps }) { - const linkTo = typeof to === 'string' - ? { url: to, replace, current } - : { ...to, replace, current }; + const linkTo = typeof to === 'string' ? { url: to } : { ...to }; + if (replace !== undefined) + linkTo.replace = replace; + if (current !== undefined) + linkTo.current = current; const linkProps = useLinkProps(linkTo); function handleClick(event) { if (onClick) @@ -481,14 +501,17 @@ export function Link({ href: to, replace, current, className, style, onClick, ch onClick: handleClick, children: children })); } export function Navigate({ to }) { - const [navigated, setNavigated] = useState(false); + const router = useInternalRouterInstance(); const navigate = useNavigate(); + const route = useRoute(); + const href = router.href(to, route); + const navigatedHref = useRef(null); useEffect(() => { - if (!navigated) { - navigate(to); - setNavigated(true); - } - }, [navigated]); + if (navigatedHref.current === href) + return; + navigatedHref.current = href; + navigate(to); + }, [href, navigate, to]); return null; } export function shouldNavigate(e) { diff --git a/dist/index.js.map b/dist/index.js.map index b53d579..812e9f6 100644 --- a/dist/index.js.map +++ b/dist/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/src/index.tsx b/src/index.tsx index 843bfb3..d91a6f5 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -123,6 +123,10 @@ function buildPrepareContext(route: Route): RoutePrepareContext { } } +function routeHasRedirect(route: Route | undefined): boolean { + return !!route?.data?.some((segment) => Boolean((segment as { redirect?: unknown }).redirect)) +} + // --------------------------------------------------------------------------- // Router context // --------------------------------------------------------------------------- @@ -255,8 +259,6 @@ export function Router({ const [currRoute, setCurrRoute] = useState(null) const [pendingHref, setPendingHref] = useState(null) - const pendingHrefRef = useRef(null) - pendingHrefRef.current = pendingHref const [isPending, startRouterTransition] = useTransition() // `holding` is true during the pre-commit window where `` @@ -306,9 +308,11 @@ export function Router({ startRouterTransition(() => { setCurrRoute(next) - if (pendingHrefRef.current === matchedUrl || pendingHrefRef.current === transformedUrl) { - setPendingHref(null) - } + setPendingHref((current) => { + if (!current) return current + if (current === matchedUrl || current === transformedUrl) return null + return routeHasRedirect(router.match(current)) ? null : current + }) }) // Sync the address bar if the transform rewrote the URL. We use @@ -316,7 +320,7 @@ export function Router({ // listener loop. syncRouteUrl(matched, next) }, - [syncRouteUrl], + [router, syncRouteUrl], ) const navigate = useCallback( @@ -331,13 +335,6 @@ export function Router({ [router], ) - useEffect(() => { - if (!pendingHref) return - if (!isPending && currRoute?.url === pendingHref) { - setPendingHref(null) - } - }, [pendingHref, isPending, currRoute?.url]) - const ctx = useMemo( () => ({ router, @@ -570,6 +567,7 @@ export function Routes({ routes, disableScrollToTop }: RoutesProps) { const committed = useRef(null) const pending = useRef(null) const didSeedInitialRoute = useRef(false) + const previousRoutes = useRef(routes) const prepareMatched = useCallback( (matched: Route): PreparedRoute => { @@ -607,6 +605,10 @@ export function Routes({ routes, disableScrollToTop }: RoutesProps) { const matchedRoute = transformRoute(matched) if (committed.current?.route.url === matchedRoute.url) { + if (pending.current) { + releaseHandles(pending.current.handles) + pending.current = null + } commit(committed.current.route, committed.current.matched) return } @@ -624,6 +626,21 @@ export function Routes({ routes, disableScrollToTop }: RoutesProps) { return router.listen(routes, transition) }, [router, routes, qs, transformRoute, prepareMatched, commit]) + useEffect(() => { + if (previousRoutes.current === routes) return + previousRoutes.current = routes + + const currentUrl = route?.url ?? committed.current?.route.url ?? router.getUrl() + if (!currentUrl) return + + const matched = matchRoutes(routes, currentUrl, qs) + if (!matched) return + + if (pending.current) releaseHandles(pending.current.handles) + pending.current = prepareMatched(matched) + commit(pending.current.route, pending.current.matched) + }, [routes, router, qs, prepareMatched, commit, route?.url]) + useEffect(() => { const prepared = pending.current if (!route || !prepared || prepared.route.url !== route.url) return @@ -632,7 +649,7 @@ export function Routes({ routes, disableScrollToTop }: RoutesProps) { committed.current = prepared pending.current = null if (previous) releaseHandles(previous.handles) - }, [route?.url]) + }, [route]) useEffect(() => releaseAll, [releaseAll]) @@ -782,10 +799,10 @@ export interface LinkOwnProps { export type LinkProps = LinkOwnProps & Omit, keyof LinkOwnProps> export function Link({ href: to, replace, current, className, style, onClick, children, ...anchorProps }: LinkProps) { - const linkTo: To = - typeof to === 'string' - ? { url: to, replace, current } - : { ...(to as NavigateTarget & { current?: boolean }), replace, current } + const linkTo: NavigateTarget & { current?: boolean } = + typeof to === 'string' ? { url: to } : { ...(to as NavigateTarget & { current?: boolean }) } + if (replace !== undefined) linkTo.replace = replace + if (current !== undefined) linkTo.current = current const linkProps = useLinkProps(linkTo) function handleClick(event: MouseEvent) { @@ -813,15 +830,17 @@ export interface NavigateProps { } export function Navigate({ to }: NavigateProps) { - const [navigated, setNavigated] = useState(false) + const router = useInternalRouterInstance() const navigate = useNavigate() + const route = useRoute() + const href = router.href(to, route as Route | undefined) + const navigatedHref = useRef(null) useEffect(() => { - if (!navigated) { - navigate(to) - setNavigated(true) - } - }, [navigated]) + if (navigatedHref.current === href) return + navigatedHref.current = href + navigate(to) + }, [href, navigate, to]) return null } diff --git a/test/router.test.tsx b/test/router.test.tsx index 7e72411..bdea6b4 100755 --- a/test/router.test.tsx +++ b/test/router.test.tsx @@ -169,6 +169,42 @@ test.serial('useLinkProps()', async function (t) { t.false(linkProps.isPending) }) +test.serial('Navigate follows to prop changes while mounted', async (t) => { + setup() + + const root = document.getElementById('root') + let setTarget + + const routes = [ + { path: '/a', component: () =>
A
}, + { path: '/b', component: () =>
B
}, + ] + + function App() { + const [target, _setTarget] = useState('/a') + setTarget = _setTarget + return ( + + + + + ) + } + + await act(async () => { + const r = ReactDOM.createRoot(root) + r.render() + }) + + t.is(window.document.body.innerHTML, '
A
') + + await act(async () => { + setTarget('/b') + }) + + t.is(window.document.body.innerHTML, '
B
') +}) + test.serial('Routes seeds the initial route synchronously for route components', async (t) => { setup() @@ -907,6 +943,74 @@ test.serial('Link honours current override and regular className/style props', ( t.is(disabled.getAttribute('aria-current'), null) }) +test.serial('Link preserves replace and current from object href when props are omitted', (t) => { + setup() + + const root = document.getElementById('root') + let pushCalls = 0 + let replaceCalls = 0 + const originalPushState = history.pushState + const originalReplaceState = history.replaceState + + history.pushState = (state: unknown, title: string, url: string) => { + pushCalls++ + originalPushState.call(history, state, title, url) + } + history.replaceState = (_state: unknown, _title: string, url: string) => { + replaceCalls++ + location.href = url + location.pathname = url + const popstate = new window.PopStateEvent('popstate') + window.dispatchEvent(popstate) + } + + const routes = [ + { + path: '/', + component: () => ( +
+ Next + Forced + + PropReplace + +
+ ), + }, + { path: '/next', component: () =>
Next
}, + ] + + function App() { + return ( + + + + ) + } + + try { + act(() => { + const r = ReactDOM.createRoot(root) + r.render() + }) + + const [next, forced, propReplace] = window.document.querySelectorAll('a') + t.is(forced.getAttribute('aria-current'), 'page') + t.is(propReplace.getAttribute('href'), '/next') + + act(() => { + next.click() + }) + + t.is(replaceCalls, 1) + t.is(pushCalls, 0) + t.is(window.document.body.innerHTML, '
Next
') + } finally { + history.pushState = originalPushState + history.replaceState = originalReplaceState + } +}) + test.serial('useLinkProps exposes per-link pending state', async (t) => { setup() @@ -1050,6 +1154,62 @@ test.serial('Link clears pending href when async navigation commits', async (t) t.is(window.document.body.innerHTML, '
Next
') }) +test.serial('Link clears pending href after a route-level redirect commits', async (t) => { + setup() + + const root = document.getElementById('root') + + const routes = [ + { + path: '/', + component: () => Old, + }, + { path: '/old', redirect: '/new' } as RouteDefinition, + { path: '/new', component: () =>
New
}, + ] + + function PendingProbe() { + const props = useLinkProps('/old') + return + } + + let router + + function Capture() { + const r = useInternalRouterInstance() + useEffect(() => { + router = r + }, [r]) + return null + } + + function App() { + return ( + + + + + + ) + } + + await act(async () => { + const r = ReactDOM.createRoot(root) + r.render() + }) + + await act(async () => { + router.navigate('/') + }) + + await act(async () => { + window.document.querySelector('a')!.click() + await Promise.resolve() + }) + + t.is(window.document.body.innerHTML, '
New
') +}) + test.serial('Routes passes children through when a middle segment has no component', (t) => { setup() @@ -1637,6 +1797,129 @@ test.serial('Routes releases superseded pending handles and ignores release erro t.false(released.includes('b')) }) +test.serial('Routes releases pending handles when navigation returns to the committed route', async (t) => { + setup() + + const root = document.getElementById('root') + const released: string[] = [] + let resolveSlow: (() => void) | null = null + const slowGate = new Promise((r) => { + resolveSlow = r + }) + + function Slow() { + if (!(Slow as any).ready) { + throw slowGate.then(() => { + ;(Slow as any).ready = true + }) + } + return
Slow
+ } + + const routes = [ + { path: '/', component: () =>
Home
}, + { + path: '/slow', + component: Slow, + prepare: () => [ + { + promise: Promise.resolve(), + release() { + released.push('slow') + }, + }, + ], + }, + ] + + let router + + function Capture() { + const r = useInternalRouterInstance() + useEffect(() => { + router = r + }, [r]) + return null + } + + function App() { + return ( + + + + + ) + } + + await act(async () => { + const r = ReactDOM.createRoot(root) + r.render() + }) + + await act(async () => { + router.navigate('/slow') + }) + + t.is(window.document.body.innerHTML, '
Home
') + + await act(async () => { + router.navigate('/') + }) + + t.deepEqual(released, ['slow']) + + await act(async () => { + resolveSlow!() + await Promise.resolve() + }) + + t.is(window.document.body.innerHTML, '
Home
') +}) + +test.serial('Routes rematches the current URL when the route map changes in memory mode', async (t) => { + setup() + + const root = document.getElementById('root') + let router + let setRoutes + + function Capture() { + const r = useInternalRouterInstance() + useEffect(() => { + router = r + }, [r]) + return null + } + + function App() { + const [routes, _setRoutes] = useState([{ path: '/swap', component: () =>
A
}]) + setRoutes = _setRoutes + return ( + + + + + ) + } + + await act(async () => { + const r = ReactDOM.createRoot(root) + r.render() + }) + + await act(async () => { + router.navigate('/swap') + }) + + t.is(window.document.body.innerHTML, '
A
') + + await act(async () => { + setRoutes([{ path: '/swap', component: () =>
B
}]) + }) + + t.is(window.document.body.innerHTML, '
B
') +}) + test.serial('Router recreates router when mode prop changes', (t) => { setup() From b9c170c162908406b83ea9fa65868e7782858daa Mon Sep 17 00:00:00 2001 From: Karolis Narkevicius Date: Tue, 28 Apr 2026 23:50:49 +0100 Subject: [PATCH 12/17] Use space-router matcher --- dist/index.d.ts | 2 +- dist/index.d.ts.map | 2 +- dist/index.js | 96 +++--------------------------------- dist/index.js.map | 2 +- src/index.tsx | 115 +++----------------------------------------- 5 files changed, 18 insertions(+), 199 deletions(-) diff --git a/dist/index.d.ts b/dist/index.d.ts index baf9654..f4c289e 100644 --- a/dist/index.d.ts +++ b/dist/index.d.ts @@ -119,7 +119,7 @@ export interface DelayedSuspenseProps { } export declare function DelayedSuspense({ fallback, children }: DelayedSuspenseProps): import("react/jsx-runtime").JSX.Element; export interface RoutesProps { - routes: RouteDefinition[]; + routes: RouteDefinition[]; disableScrollToTop?: boolean; } export declare function Routes({ routes, disableScrollToTop }: RoutesProps): import("react/jsx-runtime").JSX.Element | null; diff --git a/dist/index.d.ts.map b/dist/index.d.ts.map index 1883b51..e2676b7 100644 --- a/dist/index.d.ts.map +++ b/dist/index.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/index.js b/dist/index.js index 2e6c085..24f8d57 100644 --- a/dist/index.js +++ b/dist/index.js @@ -1,6 +1,6 @@ import { jsx as _jsx } from "react/jsx-runtime"; import { createContext, lazy as reactLazy, Suspense, useCallback, useContext, useState, useEffect, useMemo, useRef, useTransition, } from 'react'; -import { createRouter, qs as defaultQs, } from 'space-router'; +import { createMatcher, createRouter, } from 'space-router'; export { qs } from 'space-router'; const resolverPromiseCache = new WeakMap(); const resolverComponentCache = new WeakMap(); @@ -177,89 +177,6 @@ const NEVER_RESOLVES = new Promise(() => { }); function DelayedSuspenseHold() { throw NEVER_RESOLVES; } -const PARAM_SEGMENT_RE = /^:([A-Za-z0-9_]+)([+*?])?$/; -const URL_SUFFIX_RE = /(?:\?([^#]*))?(#.*)?$/; -function matchRoutes(routes, url, queryParser = defaultQs) { - const flatRoutes = flattenRoutes(routes); - for (const route of flatRoutes) { - const match = matchRoute(route.pattern, url, queryParser); - if (match) { - return { ...match, data: route.data }; - } - } -} -function flattenRoutes(routes) { - const flatRoutes = []; - const parentData = []; - function addLevel(level) { - for (const route of level) { - const { path = '', routes: children, ...routeDataWithoutPath } = route; - const routeData = { path, ...routeDataWithoutPath }; - flatRoutes.push({ pattern: path, data: parentData.concat([routeData]) }); - if (children) { - parentData.push(routeData); - addLevel(children); - parentData.pop(); - } - } - } - addLevel(routes); - return flatRoutes; -} -function matchRoute(pattern, url, queryParser) { - if (!pattern || !url) - return; - const suffix = url.match(URL_SUFFIX_RE); - const params = {}; - let query = {}; - let search = ''; - let hash = ''; - if (suffix?.[1]) { - search = '?' + suffix[1]; - query = queryParser.parse(suffix[1]); - } - if (suffix?.[2]) { - hash = suffix[2]; - } - if (pattern !== '*') { - const urlSegments = segmentize(url.replace(URL_SUFFIX_RE, '')); - const patternSegments = segmentize(pattern); - const max = Math.max(urlSegments.length, patternSegments.length); - for (let i = 0; i < max; i++) { - const patternSegment = patternSegments[i]; - const paramMatch = patternSegment?.match(PARAM_SEGMENT_RE); - if (paramMatch) { - const [, name, flags = ''] = paramMatch; - const plus = flags.includes('+'); - const star = flags.includes('*'); - const optional = flags.includes('?'); - const value = urlSegments[i] || ''; - if (!value && !star && (!optional || plus)) - return; - params[name] = decodeURIComponent(value); - if (plus || star) { - params[name] = urlSegments.slice(i).map(decodeURIComponent).join('/'); - break; - } - } - else if (patternSegment !== urlSegments[i]) { - return; - } - } - } - return { - pattern, - url, - pathname: url.replace(URL_SUFFIX_RE, ''), - params, - query, - search, - hash, - }; -} -function segmentize(url) { - return url.replace(/(^\/+|\/+$)/g, '').split('/'); -} function prepareRoute(route) { const segments = (route.data ?? []); const ctx = buildPrepareContext(route); @@ -307,6 +224,7 @@ export function Routes({ routes, disableScrollToTop }) { const pending = useRef(null); const didSeedInitialRoute = useRef(false); const previousRoutes = useRef(routes); + const matcher = useMemo(() => createMatcher(routes, { qs }), [routes, qs]); const prepareMatched = useCallback((matched) => { const transformed = transformRoute(matched); return { route: transformed, matched, handles: prepareRoute(transformed) }; @@ -318,7 +236,7 @@ export function Routes({ routes, disableScrollToTop }) { }, []); if (!didSeedInitialRoute.current && !route) { didSeedInitialRoute.current = true; - const matched = matchRoutes(routes, router.getUrl(), qs); + const matched = matcher.match(router.getUrl()); if (matched) { committed.current = prepareMatched(matched); } @@ -332,7 +250,7 @@ export function Routes({ routes, disableScrollToTop }) { useEffect(() => { const transition = (next) => { const nextUrl = next.url ?? next.pathname; - const matched = matchRoutes(routes, nextUrl, qs) ?? next; + const matched = matcher.match(nextUrl) ?? next; const matchedRoute = transformRoute(matched); if (committed.current?.route.url === matchedRoute.url) { if (pending.current) { @@ -352,7 +270,7 @@ export function Routes({ routes, disableScrollToTop }) { commit(pending.current.route, pending.current.matched); }; return router.listen(routes, transition); - }, [router, routes, qs, transformRoute, prepareMatched, commit]); + }, [router, routes, matcher, transformRoute, prepareMatched, commit]); useEffect(() => { if (previousRoutes.current === routes) return; @@ -360,14 +278,14 @@ export function Routes({ routes, disableScrollToTop }) { const currentUrl = route?.url ?? committed.current?.route.url ?? router.getUrl(); if (!currentUrl) return; - const matched = matchRoutes(routes, currentUrl, qs); + const matched = matcher.match(currentUrl); if (!matched) return; if (pending.current) releaseHandles(pending.current.handles); pending.current = prepareMatched(matched); commit(pending.current.route, pending.current.matched); - }, [routes, router, qs, prepareMatched, commit, route?.url]); + }, [routes, router, matcher, prepareMatched, commit, route?.url]); useEffect(() => { const prepared = pending.current; if (!route || !prepared || prepared.route.url !== route.url) diff --git a/dist/index.js.map b/dist/index.js.map index 812e9f6..9a4801c 100644 --- a/dist/index.js.map +++ b/dist/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":";AAAA,OAAO,EACL,aAAa,EACb,IAAI,IAAI,SAAS,EACjB,QAAQ,EACR,WAAW,EACX,UAAU,EACV,QAAQ,EACR,SAAS,EACT,OAAO,EACP,MAAM,EACN,aAAa,GAMd,MAAM,OAAO,CAAA;AACd,OAAO,EACL,YAAY,EACZ,EAAE,IAAI,SAAS,GAOhB,MAAM,cAAc,CAAA;AAErB,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAA;AA0DjC,MAAM,oBAAoB,GAAG,IAAI,OAAO,EAAyD,CAAA;AACjG,MAAM,sBAAsB,GAAG,IAAI,OAAO,EAAmC,CAAA;AAE7E,SAAS,eAAe,CAAC,QAAqB;IAC5C,IAAI,OAAO,GAAG,oBAAoB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;IAChD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,GAAG,QAAQ,EAAE,CAAA;QACpB,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE;YACjB,iEAAiE;YACjE,uDAAuD;QACzD,CAAC,CAAC,CAAA;QACF,oBAAoB,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;IAC7C,CAAC;IACD,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,SAAS,oBAAoB,CAAC,QAAqB;IACjD,IAAI,SAAS,GAAG,sBAAsB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;IACpD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,SAAS,GAAG,SAAS,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAA;QACtD,sBAAsB,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAA;IACjD,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAY;IACvC,MAAM,CAAC,GAAG,KAIT,CAAA;IACD,OAAO;QACL,QAAQ,EAAE,CAAC,CAAC,QAAQ,IAAI,EAAE;QAC1B,GAAG,EAAG,CAA8B,CAAC,GAAG,IAAI,CAAC,CAAC,QAAQ,IAAI,EAAE;QAC5D,MAAM,EAAE,CAAC,CAAC,MAAM,IAAI,EAAE;QACtB,KAAK,EAAE,CAAC,CAAC,KAAK,IAAI,EAAE;KACrB,CAAA;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAwB;IAChD,OAAO,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAE,OAAkC,CAAC,QAAQ,CAAC,CAAC,CAAA;AAChG,CAAC;AAwBD,MAAM,CAAC,MAAM,aAAa,GAAG,aAAa,CAAiC,SAAS,CAAC,CAAA;AACrF,MAAM,YAAY,GAAG,aAAa,CAA2B,SAAS,CAAC,CAAA;AAEvE,uEAAuE;AACvE,2EAA2E;AAC3E,4EAA4E;AAC5E,MAAM,sBAAsB,GAAG,aAAa,CAAU,KAAK,CAAC,CAAA;AAE5D,SAAS,YAAY;IACnB,MAAM,GAAG,GAAG,UAAU,CAAC,aAAa,CAAC,CAAA;IACrC,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAA;IAC9D,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,MAAM,UAAU,yBAAyB;IACvC,OAAO,YAAY,EAAE,CAAC,MAAM,CAAA;AAC9B,CAAC;AAED,MAAM,UAAU,QAAQ;IACtB,MAAM,KAAK,GAAG,UAAU,CAAC,YAAY,CAAC,CAAA;IACtC,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAA;AAC3D,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,UAAU;IACxB,OAAO,YAAY,EAAE,CAAC,SAAS,CAAA;AACjC,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,MAAM,EAAE,QAAQ,EAAE,GAAG,YAAY,EAAE,CAAA;IACnC,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAA;IACxB,OAAO,WAAW,CAChB,CAAC,EAAM,EAAE,EAAE;QACT,OAAO,QAAQ,CAAC,EAAE,EAAE,KAA0B,CAAC,CAAA;IACjD,CAAC,EACD,CAAC,QAAQ,EAAE,KAAK,CAAC,CAClB,CAAA;AACH,CAAC;AAiBD,SAAS,UAAU,CAAC,UAAsB;IACxC,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,EAAE,EAAE,UAAU,CAAC,EAAE,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,CAAC,CAAA;IAChG,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,CAAA;AAC/B,CAAC;AA4BD,MAAM,wBAAwB,GAAG,IAAI,CAAA;AAErC,MAAM,UAAU,MAAM,CAAC,EACrB,IAAI,EACJ,EAAE,EACF,IAAI,EACJ,cAAc,EACd,cAAc,GAAG,wBAAwB,EACzC,QAAQ,GACI;IACZ,MAAM,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAiB,GAAG,EAAE,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;IAE1G,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAe,IAAI,CAAC,CAAA;IAC9D,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAA;IACnE,MAAM,CAAC,SAAS,EAAE,qBAAqB,CAAC,GAAG,aAAa,EAAE,CAAA;IAE1D,2EAA2E;IAC3E,yEAAyE;IACzE,uEAAuE;IACvE,yEAAyE;IACzE,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAC7C,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,UAAU,CAAC,KAAK,CAAC,CAAA;YACjB,OAAM;QACR,CAAC;QACD,UAAU,CAAC,IAAI,CAAC,CAAA;QAChB,MAAM,CAAC,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,cAAc,CAAC,CAAA;QAC7D,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;IAC9B,CAAC,EAAE,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC,CAAA;IAE/B,wEAAwE;IACxE,mDAAmD;IACnD,MAAM,YAAY,GAAG,MAAM,CAAC,cAAc,CAAC,CAAA;IAC3C,YAAY,CAAC,OAAO,GAAG,cAAc,CAAA;IAErC,MAAM,cAAc,GAAG,WAAW,CAAC,CAAC,IAAW,EAAE,EAAE;QACjD,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,CAAA;QACtC,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IACrD,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,MAAM,YAAY,GAAG,WAAW,CAAC,CAAC,OAAc,EAAE,WAAkB,EAAE,EAAE;QACtE,MAAM,UAAU,GAAI,OAAoC,CAAC,GAAG,CAAA;QAC5D,MAAM,cAAc,GAAI,WAAwC,CAAC,GAAG,CAAA;QAEpE,IACE,WAAW,KAAK,OAAO;YACvB,cAAc;YACd,cAAc,KAAK,UAAU;YAC7B,OAAO,MAAM,KAAK,WAAW;YAC7B,MAAM,CAAC,OAAO,EACd,CAAC;YACD,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,EAAE,cAAc,CAAC,CAAA;QACrD,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,MAAM,MAAM,GAAG,WAAW,CACxB,CAAC,IAAW,EAAE,UAAiB,IAAI,EAAE,EAAE;QACrC,MAAM,UAAU,GAAI,OAAoC,CAAC,GAAG,CAAA;QAC5D,MAAM,cAAc,GAAI,IAAiC,CAAC,GAAG,CAAA;QAE7D,qBAAqB,CAAC,GAAG,EAAE;YACzB,YAAY,CAAC,IAAI,CAAC,CAAA;YAClB,cAAc,CAAC,CAAC,OAAO,EAAE,EAAE;gBACzB,IAAI,CAAC,OAAO;oBAAE,OAAO,OAAO,CAAA;gBAC5B,IAAI,OAAO,KAAK,UAAU,IAAI,OAAO,KAAK,cAAc;oBAAE,OAAO,IAAI,CAAA;gBACrE,OAAO,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAA;YACjE,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QAEF,gEAAgE;QAChE,oEAAoE;QACpE,iBAAiB;QACjB,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;IAC7B,CAAC,EACD,CAAC,MAAM,EAAE,YAAY,CAAC,CACvB,CAAA;IAED,MAAM,QAAQ,GAAG,WAAW,CAC1B,CAAC,EAAM,EAAE,IAAY,EAAE,EAAE;QACvB,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;QAClC,cAAc,CAAC,IAAI,CAAC,CAAA;QACpB,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;QACzB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,cAAc,CAAC,IAAI,CAAC,CAAA;QACtB,CAAC;IACH,CAAC,EACD,CAAC,MAAM,CAAC,CACT,CAAA;IAED,MAAM,GAAG,GAAG,OAAO,CACjB,GAAG,EAAE,CAAC,CAAC;QACL,MAAM;QACN,KAAK,EAAE,SAAS;QAChB,cAAc,EAAE,cAAc;QAC9B,YAAY;QACZ,MAAM;QACN,QAAQ;QACR,SAAS;QACT,WAAW;QACX,EAAE;KACH,CAAC,EACF,CAAC,MAAM,EAAE,SAAS,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,EAAE,CAAC,CAChG,CAAA;IAED,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,UAAU,CAAC,IAAI,KAAK,IAAI,IAAI,UAAU,CAAC,EAAE,KAAK,EAAE,IAAI,UAAU,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;YACjF,SAAS,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;QAC3C,CAAC;IACH,CAAC,EAAE,CAAC,UAAU,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,CAAA;IAEhC,OAAO,CACL,KAAC,aAAa,CAAC,QAAQ,IAAC,KAAK,EAAE,GAAG,YAChC,KAAC,sBAAsB,CAAC,QAAQ,IAAC,KAAK,EAAE,OAAO,YAAG,QAAQ,GAAmC,GACtE,CAC1B,CAAA;AACH,CAAC;AAyBD,MAAM,UAAU,eAAe,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAwB;IAC1E,MAAM,OAAO,GAAG,UAAU,CAAC,sBAAsB,CAAC,CAAA;IAClD,OAAO,KAAC,QAAQ,IAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,KAAC,mBAAmB,KAAG,CAAC,CAAC,CAAC,QAAQ,YAAG,QAAQ,GAAY,CAAA;AAChG,CAAC;AAED,MAAM,cAAc,GAAmB,IAAI,OAAO,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;AAE5D;;;;;GAKG;AACH,SAAS,mBAAmB;IAC1B,MAAM,cAAc,CAAA;AACtB,CAAC;AAsBD,MAAM,gBAAgB,GAAG,4BAA4B,CAAA;AACrD,MAAM,aAAa,GAAG,uBAAuB,CAAA;AAE7C,SAAS,WAAW,CAAC,MAAyB,EAAE,GAAW,EAAE,cAAkB,SAAS;IACtF,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,CAAA;IACxC,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,WAAW,CAAC,CAAA;QACzD,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAW,CAAA;QAChD,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,MAAyB;IAC9C,MAAM,UAAU,GAAgB,EAAE,CAAA;IAClC,MAAM,UAAU,GAAgB,EAAE,CAAA;IAElC,SAAS,QAAQ,CAAC,KAAwB;QACxC,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE,CAAC;YAC1B,MAAM,EAAE,IAAI,GAAG,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,oBAAoB,EAAE,GAAG,KAAkB,CAAA;YACnF,MAAM,SAAS,GAAG,EAAE,IAAI,EAAE,GAAG,oBAAoB,EAAE,CAAA;YACnD,UAAU,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAA;YACxE,IAAI,QAAQ,EAAE,CAAC;gBACb,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;gBAC1B,QAAQ,CAAC,QAA6B,CAAC,CAAA;gBACvC,UAAU,CAAC,GAAG,EAAE,CAAA;YAClB,CAAC;QACH,CAAC;IACH,CAAC;IAED,QAAQ,CAAC,MAAM,CAAC,CAAA;IAChB,OAAO,UAAU,CAAA;AACnB,CAAC;AAED,SAAS,UAAU,CAAC,OAAe,EAAE,GAAW,EAAE,WAAe;IAC/D,IAAI,CAAC,OAAO,IAAI,CAAC,GAAG;QAAE,OAAM;IAE5B,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,CAAA;IACvC,MAAM,MAAM,GAA2B,EAAE,CAAA;IACzC,IAAI,KAAK,GAA4B,EAAE,CAAA;IACvC,IAAI,MAAM,GAAG,EAAE,CAAA;IACf,IAAI,IAAI,GAAG,EAAE,CAAA;IAEb,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChB,MAAM,GAAG,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;QACxB,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAA4B,CAAA;IACjE,CAAC;IACD,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChB,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;IAClB,CAAC;IAED,IAAI,OAAO,KAAK,GAAG,EAAE,CAAC;QACpB,MAAM,WAAW,GAAG,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,CAAA;QAC9D,MAAM,eAAe,GAAG,UAAU,CAAC,OAAO,CAAC,CAAA;QAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,EAAE,eAAe,CAAC,MAAM,CAAC,CAAA;QAEhE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7B,MAAM,cAAc,GAAG,eAAe,CAAC,CAAC,CAAC,CAAA;YACzC,MAAM,UAAU,GAAG,cAAc,EAAE,KAAK,CAAC,gBAAgB,CAAC,CAAA;YAE1D,IAAI,UAAU,EAAE,CAAC;gBACf,MAAM,CAAC,EAAE,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC,GAAG,UAAU,CAAA;gBACvC,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;gBAChC,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;gBAChC,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;gBACpC,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;gBAElC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,QAAQ,IAAI,IAAI,CAAC;oBAAE,OAAM;gBAElD,MAAM,CAAC,IAAI,CAAC,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAA;gBACxC,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;oBACjB,MAAM,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;oBACrE,MAAK;gBACP,CAAC;YACH,CAAC;iBAAM,IAAI,cAAc,KAAK,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7C,OAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO;QACL,OAAO;QACP,GAAG;QACH,QAAQ,EAAE,GAAG,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC;QACxC,MAAM;QACN,KAAK;QACL,MAAM;QACN,IAAI;KACkB,CAAA;AAC1B,CAAC;AAED,SAAS,UAAU,CAAC,GAAW;IAC7B,OAAO,GAAG,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;AACnD,CAAC;AAED,SAAS,YAAY,CAAC,KAAY;IAChC,MAAM,QAAQ,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAgB,CAAA;IAClD,MAAM,GAAG,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAA;IACtC,MAAM,OAAO,GAAqB,EAAE,CAAA;IAEpC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,OAAO,CAAC,QAAQ;YAAE,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;QACvD,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;YACnC,IAAI,MAAM,EAAE,CAAC;gBACX,KAAK,MAAM,MAAM,IAAI,MAAM,EAAE,CAAC;oBAC5B,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;gBACtB,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,SAAS,cAAc,CAAC,OAAyB;IAC/C,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,CAAC;YACH,MAAM,CAAC,OAAO,EAAE,CAAA;QAClB,CAAC;QAAC,MAAM,CAAC;YACP,cAAc;QAChB,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,oBAAoB,CAAC,YAAgC;IAC5D,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAA;IAC1C,KAAK,MAAM,OAAO,IAAI,YAAY,EAAE,CAAC;QACnC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,IAAI,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC;gBAAE,SAAQ;YAClC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;YACpB,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC,CAAA;QAC1B,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,EAAE,MAAM,EAAE,kBAAkB,EAAe;IAChE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,YAAY,EAAE,CAAA;IAElF,0EAA0E;IAC1E,2DAA2D;IAC3D,MAAM,SAAS,GAAG,MAAM,CAAuB,IAAI,CAAC,CAAA;IACpD,MAAM,OAAO,GAAG,MAAM,CAAuB,IAAI,CAAC,CAAA;IAClD,MAAM,mBAAmB,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;IACzC,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,CAAA;IAErC,MAAM,cAAc,GAAG,WAAW,CAChC,CAAC,OAAc,EAAiB,EAAE;QAChC,MAAM,WAAW,GAAG,cAAc,CAAC,OAAO,CAAC,CAAA;QAC3C,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,CAAC,WAAW,CAAC,EAAE,CAAA;IAC5E,CAAC,EACD,CAAC,cAAc,CAAC,CACjB,CAAA;IAED,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE;QAClC,oBAAoB,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,OAAO,IAAI,EAAE,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC,CAAA;QACxF,SAAS,CAAC,OAAO,GAAG,IAAI,CAAA;QACxB,OAAO,CAAC,OAAO,GAAG,IAAI,CAAA;IACxB,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,IAAI,CAAC,mBAAmB,CAAC,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC;QAC3C,mBAAmB,CAAC,OAAO,GAAG,IAAI,CAAA;QAClC,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,EAAE,EAAE,CAAC,CAAA;QACxD,IAAI,OAAO,EAAE,CAAC;YACZ,SAAS,CAAC,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC,CAAA;QAC7C,CAAC;IACH,CAAC;IAED,MAAM,WAAW,GAAG,KAAK,IAAI,SAAS,CAAC,OAAO,EAAE,KAAK,IAAI,IAAI,CAAA;IAC7D,cAAc,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAA;IAE/C,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,SAAS,CAAC,OAAO;YAAE,YAAY,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;IACzF,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAA;IAElB,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,UAAU,GAAG,CAAC,IAAW,EAAE,EAAE;YACjC,MAAM,OAAO,GAAI,IAAoD,CAAC,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAA;YAC1F,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC,IAAI,IAAI,CAAA;YACxD,MAAM,YAAY,GAAG,cAAc,CAAC,OAAO,CAAC,CAAA;YAE5C,IAAI,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,KAAK,YAAY,CAAC,GAAG,EAAE,CAAC;gBACtD,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;oBACpB,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;oBACvC,OAAO,CAAC,OAAO,GAAG,IAAI,CAAA;gBACxB,CAAC;gBACD,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;gBAC1D,OAAM;YACR,CAAC;YAED,IAAI,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,KAAK,YAAY,CAAC,GAAG,EAAE,CAAC;gBACpD,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;gBACtD,OAAM;YACR,CAAC;YAED,IAAI,OAAO,CAAC,OAAO;gBAAE,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;YAE5D,OAAO,CAAC,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC,CAAA;YACzC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;QACxD,CAAC,CAAA;QACD,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;IAC1C,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,CAAC,CAAC,CAAA;IAEhE,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,cAAc,CAAC,OAAO,KAAK,MAAM;YAAE,OAAM;QAC7C,cAAc,CAAC,OAAO,GAAG,MAAM,CAAA;QAE/B,MAAM,UAAU,GAAG,KAAK,EAAE,GAAG,IAAI,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,IAAI,MAAM,CAAC,MAAM,EAAE,CAAA;QAChF,IAAI,CAAC,UAAU;YAAE,OAAM;QAEvB,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,EAAE,UAAU,EAAE,EAAE,CAAC,CAAA;QACnD,IAAI,CAAC,OAAO;YAAE,OAAM;QAEpB,IAAI,OAAO,CAAC,OAAO;YAAE,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;QAC5D,OAAO,CAAC,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC,CAAA;QACzC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IACxD,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,cAAc,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,CAAA;IAE5D,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAA;QAChC,IAAI,CAAC,KAAK,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,KAAK,CAAC,GAAG,KAAK,KAAK,CAAC,GAAG;YAAE,OAAM;QAEnE,MAAM,QAAQ,GAAG,SAAS,CAAC,OAAO,CAAA;QAClC,SAAS,CAAC,OAAO,GAAG,QAAQ,CAAA;QAC5B,OAAO,CAAC,OAAO,GAAG,IAAI,CAAA;QACtB,IAAI,QAAQ;YAAE,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;IAChD,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAA;IAEX,SAAS,CAAC,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC,UAAU,CAAC,CAAC,CAAA;IAEzC,OAAO,OAAO,CAAC,GAAG,EAAE;QAClB,IAAI,CAAC,WAAW;YAAE,OAAO,IAAI,CAAA;QAE7B,uEAAuE;QACvE,oEAAoE;QACpE,qEAAqE;QACrE,kEAAkE;QAClE,sEAAsE;QACtE,qEAAqE;QACrE,iDAAiD;QACjD,EAAE;QACF,uEAAuE;QACvE,iEAAiE;QACjE,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAmB,CAAA;QAChD,MAAM,aAAa,GAAG,CAAE,WAA2D,CAAC,MAAM,IAAI,EAAE,CAG/F,CAAA;QAED,MAAM,QAAQ,GAAG,QAAQ,CAAC,WAAW,CAAY,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE;YACrE,MAAM,QAAQ,GAAI,OAA+C,CAAC,KAAK,IAAI,EAAE,CAAA;YAC7E,MAAM,SAAS,GAAG,uBAAuB,CAAC,OAAO,CAAC,CAAA;YAClD,IAAI,CAAC,SAAS;gBAAE,OAAO,QAAQ,CAAA;YAC/B,MAAM,SAAS,GAAG,gBAAgB,CAAC,OAAO,CAAC,IAAI,EAAE,aAAa,CAAC,CAAA;YAC/D,OAAO,CACL,KAAC,SAAS,OAAK,SAAS,KAAM,QAAQ,YACnC,QAAQ,GACC,CACb,CAAA;QACH,CAAC,EAAE,IAAI,CAAC,CAAA;QAER,OAAO,KAAC,YAAY,CAAC,QAAQ,IAAC,KAAK,EAAE,WAAW,YAAG,QAAQ,GAAyB,CAAA;IACtF,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAA;AACnB,CAAC;AAED,MAAM,kBAAkB,GAAG,mBAAmB,CAAA;AAE9C;;;;GAIG;AACH,SAAS,gBAAgB,CAAC,IAAwB,EAAE,OAA+B;IACjF,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAA;IACpB,MAAM,GAAG,GAA2B,EAAE,CAAA;IACtC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;QACtD,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;QACrB,IAAI,IAAI,IAAI,OAAO;YAAE,GAAG,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAChD,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,SAAS,uBAAuB,CAAC,OAAkB;IACjD,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACrB,OAAO,oBAAoB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;IAC/C,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,SAAS;QAAE,OAAO,IAAI,CAAA;IACnC,MAAM,CAAC,GAAG,OAAO,CAAC,SAAkE,CAAA;IACpF,OAAO,CAAC,CAAC,OAAO,IAAI,CAAC,CAAA;AACvB,CAAC;AAED,SAAS,cAAc,CAAC,KAAmB,EAAE,QAAkB;IAC7D,MAAM,eAAe,GAAG,MAAM,CAAqB,SAAS,CAAC,CAAA;IAE7D,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,KAAK,IAAI,QAAQ;YAAE,OAAM;QAE9B,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAA;QACxB,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAA6B,CAAA;QAChE,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,KAAK,CAAC,QAAQ,CAAA;QACtD,IAAI,eAAe,CAAC,OAAO,KAAK,WAAW,EAAE,CAAC;YAC5C,eAAe,CAAC,OAAO,GAAG,WAAW,CAAA;YACrC,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;gBAClC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;YACvB,CAAC;QACH,CAAC;IACH,CAAC,EAAE,CAAC,KAAK,IAAI,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAA;AACzC,CAAC;AAED,8EAA8E;AAC9E,kBAAkB;AAClB,8EAA8E;AAE9E,MAAM,UAAU,WAAW;IACzB,MAAM,EAAE,IAAI,EAAE,GAAG,yBAAyB,EAAE,CAAA;IAC5C,OAAO,IAAI,CAAA;AACb,CAAC;AAUD,MAAM,UAAU,YAAY,CAAC,EAAM;IACjC,MAAM,MAAM,GAA2C,OAAO,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;IAEhG,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,YAAY,EAAE,CAAA;IAC9C,MAAM,SAAS,GAAG,QAAQ,EAAE,CAAA;IAC5B,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAA;IAC9B,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAA;IAE9B,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,EAAE,SAA8B,CAAC,CAAA;IACvF,MAAM,eAAe,GAAG,SAAS,EAAE,QAAQ,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,QAAQ,CAAA;IACtF,MAAM,SAAS,GACb,OAAO,MAAM,CAAC,OAAO,KAAK,WAAW,CAAC,CAAC,CAAC,eAAe,KAAK,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAA;IAEnH,SAAS,OAAO,CAAC,KAAoC;QACnD,IAAI,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1B,KAAK,CAAC,cAAc,EAAE,CAAA;YACtB,QAAQ,CAAC,MAAM,CAAC,CAAA;QAClB,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG;QACb,IAAI;QACJ,cAAc,EAAE,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;QAC9C,OAAO;KACW,CAAA;IAEpB,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,WAAW,EAAE;QACzC,UAAU,EAAE,KAAK;QACjB,KAAK,EAAE,WAAW,KAAK,IAAI;KAC5B,CAAC,CAAA;IACF,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,WAAW,EAAE;QACzC,UAAU,EAAE,KAAK;QACjB,KAAK,EAAE,SAAS;KACjB,CAAC,CAAA;IAEF,OAAO,MAAM,CAAA;AACf,CAAC;AAaD,MAAM,UAAU,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,WAAW,EAAa;IACjH,MAAM,MAAM,GACV,OAAO,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,GAAI,EAA6C,EAAE,CAAA;IAC9F,IAAI,OAAO,KAAK,SAAS;QAAE,MAAM,CAAC,OAAO,GAAG,OAAO,CAAA;IACnD,IAAI,OAAO,KAAK,SAAS;QAAE,MAAM,CAAC,OAAO,GAAG,OAAO,CAAA;IACnD,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,CAAA;IAEtC,SAAS,WAAW,CAAC,KAAoC;QACvD,IAAI,OAAO;YAAE,OAAO,CAAC,KAAK,CAAC,CAAA;QAC3B,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;IAC1B,CAAC;IAED,OAAO,CACL,4BACgB,SAAS,CAAC,cAAc,CAAC,KACnC,WAAW,EACf,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,SAAS,CAAC,IAAI;QACpB,mDAAmD;QACnD,OAAO,EAAE,WAAW,YAEnB,QAAQ,GACP,CACL,CAAA;AACH,CAAC;AAMD,MAAM,UAAU,QAAQ,CAAC,EAAE,EAAE,EAAiB;IAC5C,MAAM,MAAM,GAAG,yBAAyB,EAAE,CAAA;IAC1C,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAA;IAC9B,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAA;IACxB,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,KAA0B,CAAC,CAAA;IACxD,MAAM,aAAa,GAAG,MAAM,CAAgB,IAAI,CAAC,CAAA;IAEjD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,aAAa,CAAC,OAAO,KAAK,IAAI;YAAE,OAAM;QAC1C,aAAa,CAAC,OAAO,GAAG,IAAI,CAAA;QAC5B,QAAQ,CAAC,EAAE,CAAC,CAAA;IACd,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAA;IAExB,OAAO,IAAI,CAAA;AACb,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,CAAa;IAC1C,IAAI,CAAC,CAAC,gBAAgB,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAA;IACtD,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,QAAQ;QAAE,OAAO,KAAK,CAAA;IAClE,MAAM,EAAE,GAAG,CAAC,CAAC,aAA+B,CAAA;IAC5C,IAAI,EAAE,IAAI,EAAE,CAAC,OAAO,KAAK,GAAG,EAAE,CAAC;QAC7B,MAAM,CAAC,GAAG,EAAuB,CAAA;QACjC,wEAAwE;QACxE,iEAAiE;QACjE,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,KAAK,OAAO;YAAE,OAAO,KAAK,CAAA;QAClD,IAAI,CAAC,CAAC,YAAY,CAAC,UAAU,CAAC;YAAE,OAAO,KAAK,CAAA;QAC5C,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,QAAQ,CAAC,MAAM;YAAE,OAAO,KAAK,CAAA;IACnE,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC"} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/src/index.tsx b/src/index.tsx index d91a6f5..1a19346 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -16,8 +16,8 @@ import { type ReactNode, } from 'react' import { + createMatcher, createRouter, - qs as defaultQs, type Mode, type NavigateTarget, type Qs, @@ -408,7 +408,7 @@ function DelayedSuspenseHold(): null { // --------------------------------------------------------------------------- export interface RoutesProps { - routes: RouteDefinition[] + routes: RouteDefinition[] disableScrollToTop?: boolean } @@ -418,106 +418,6 @@ interface PreparedRoute { handles: PreparedHandle[] } -interface FlatRoute { - pattern: string - data: RouteData[] -} - -const PARAM_SEGMENT_RE = /^:([A-Za-z0-9_]+)([+*?])?$/ -const URL_SUFFIX_RE = /(?:\?([^#]*))?(#.*)?$/ - -function matchRoutes(routes: RouteDefinition[], url: string, queryParser: Qs = defaultQs): Route | undefined { - const flatRoutes = flattenRoutes(routes) - for (const route of flatRoutes) { - const match = matchRoute(route.pattern, url, queryParser) - if (match) { - return { ...match, data: route.data } as Route - } - } -} - -function flattenRoutes(routes: RouteDefinition[]): FlatRoute[] { - const flatRoutes: FlatRoute[] = [] - const parentData: RouteData[] = [] - - function addLevel(level: RouteDefinition[]) { - for (const route of level) { - const { path = '', routes: children, ...routeDataWithoutPath } = route as RouteData - const routeData = { path, ...routeDataWithoutPath } - flatRoutes.push({ pattern: path, data: parentData.concat([routeData]) }) - if (children) { - parentData.push(routeData) - addLevel(children as RouteDefinition[]) - parentData.pop() - } - } - } - - addLevel(routes) - return flatRoutes -} - -function matchRoute(pattern: string, url: string, queryParser: Qs): Omit | undefined { - if (!pattern || !url) return - - const suffix = url.match(URL_SUFFIX_RE) - const params: Record = {} - let query: Record = {} - let search = '' - let hash = '' - - if (suffix?.[1]) { - search = '?' + suffix[1] - query = queryParser.parse(suffix[1]) as Record - } - if (suffix?.[2]) { - hash = suffix[2] - } - - if (pattern !== '*') { - const urlSegments = segmentize(url.replace(URL_SUFFIX_RE, '')) - const patternSegments = segmentize(pattern) - const max = Math.max(urlSegments.length, patternSegments.length) - - for (let i = 0; i < max; i++) { - const patternSegment = patternSegments[i] - const paramMatch = patternSegment?.match(PARAM_SEGMENT_RE) - - if (paramMatch) { - const [, name, flags = ''] = paramMatch - const plus = flags.includes('+') - const star = flags.includes('*') - const optional = flags.includes('?') - const value = urlSegments[i] || '' - - if (!value && !star && (!optional || plus)) return - - params[name] = decodeURIComponent(value) - if (plus || star) { - params[name] = urlSegments.slice(i).map(decodeURIComponent).join('/') - break - } - } else if (patternSegment !== urlSegments[i]) { - return - } - } - } - - return { - pattern, - url, - pathname: url.replace(URL_SUFFIX_RE, ''), - params, - query, - search, - hash, - } as Omit -} - -function segmentize(url: string): string[] { - return url.replace(/(^\/+|\/+$)/g, '').split('/') -} - function prepareRoute(route: Route): PreparedHandle[] { const segments = (route.data ?? []) as RouteData[] const ctx = buildPrepareContext(route) @@ -568,6 +468,7 @@ export function Routes({ routes, disableScrollToTop }: RoutesProps) { const pending = useRef(null) const didSeedInitialRoute = useRef(false) const previousRoutes = useRef(routes) + const matcher = useMemo(() => createMatcher(routes, { qs }), [routes, qs]) const prepareMatched = useCallback( (matched: Route): PreparedRoute => { @@ -585,7 +486,7 @@ export function Routes({ routes, disableScrollToTop }: RoutesProps) { if (!didSeedInitialRoute.current && !route) { didSeedInitialRoute.current = true - const matched = matchRoutes(routes, router.getUrl(), qs) + const matched = matcher.match(router.getUrl()) if (matched) { committed.current = prepareMatched(matched) } @@ -601,7 +502,7 @@ export function Routes({ routes, disableScrollToTop }: RoutesProps) { useEffect(() => { const transition = (next: Route) => { const nextUrl = (next as Route & { url?: string; pathname?: string }).url ?? next.pathname - const matched = matchRoutes(routes, nextUrl, qs) ?? next + const matched = matcher.match(nextUrl) ?? next const matchedRoute = transformRoute(matched) if (committed.current?.route.url === matchedRoute.url) { @@ -624,7 +525,7 @@ export function Routes({ routes, disableScrollToTop }: RoutesProps) { commit(pending.current.route, pending.current.matched) } return router.listen(routes, transition) - }, [router, routes, qs, transformRoute, prepareMatched, commit]) + }, [router, routes, matcher, transformRoute, prepareMatched, commit]) useEffect(() => { if (previousRoutes.current === routes) return @@ -633,13 +534,13 @@ export function Routes({ routes, disableScrollToTop }: RoutesProps) { const currentUrl = route?.url ?? committed.current?.route.url ?? router.getUrl() if (!currentUrl) return - const matched = matchRoutes(routes, currentUrl, qs) + const matched = matcher.match(currentUrl) if (!matched) return if (pending.current) releaseHandles(pending.current.handles) pending.current = prepareMatched(matched) commit(pending.current.route, pending.current.matched) - }, [routes, router, qs, prepareMatched, commit, route?.url]) + }, [routes, router, matcher, prepareMatched, commit, route?.url]) useEffect(() => { const prepared = pending.current From 28a8e5a55dd1e0837a66b5eafb65a09399d0ef18 Mon Sep 17 00:00:00 2001 From: Karolis Narkevicius Date: Wed, 29 Apr 2026 21:54:44 +0100 Subject: [PATCH 13/17] Document client-side scope --- README.md | 6 ++++++ dist/index.js | 2 +- dist/index.js.map | 2 +- src/index.tsx | 2 +- test/router.test.tsx | 31 +++++++++++++++++++++++++++++++ 5 files changed, 40 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index ee74c45..fc250f8 100755 --- a/README.md +++ b/README.md @@ -24,6 +24,12 @@ React Space Router is a set of hooks and components for keeping your app in sync "Perfection is achieved when there is nothing left to take away." React Space Router is built upon Space Router, a framework agnostic tiny core that handles URL listening, route matching and navigation. React Space Router wraps that core into an idiomatic set of React components and hooks. The hope is you'll find React Space Router refreshingly simple compared to the existing alternatives, while still offering enough extensibility for modern Suspense-driven UIs. +## Scope + +RSP is a client-side React router for production SPAs. SSR is intentionally out of scope. + +If you need SSR, use a framework/router designed around request-time rendering. RSP optimizes for rich authenticated apps where client routing, Suspense-aware navigation, and data cache lifecycles matter more than first-request HTML. + ## Install ```sh diff --git a/dist/index.js b/dist/index.js index 24f8d57..1f1b21c 100644 --- a/dist/index.js +++ b/dist/index.js @@ -446,7 +446,7 @@ export function shouldNavigate(e) { return false; if (a.hasAttribute('download')) return false; - if (a.origin && a.origin !== window.location.origin) + if (typeof window !== 'undefined' && a.origin && a.origin !== window.location.origin) return false; } return true; diff --git a/dist/index.js.map b/dist/index.js.map index 9a4801c..6e210b5 100644 --- a/dist/index.js.map +++ b/dist/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/src/index.tsx b/src/index.tsx index 1a19346..4ab39e3 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -756,7 +756,7 @@ export function shouldNavigate(e: MouseEvent): boolean { // and cross-origin or non-http(s) protocols (mailto:, tel:, ...) if (a.target && a.target !== '_self') return false if (a.hasAttribute('download')) return false - if (a.origin && a.origin !== window.location.origin) return false + if (typeof window !== 'undefined' && a.origin && a.origin !== window.location.origin) return false } return true } diff --git a/test/router.test.tsx b/test/router.test.tsx index bdea6b4..07c727d 100755 --- a/test/router.test.tsx +++ b/test/router.test.tsx @@ -1,6 +1,7 @@ import test from 'ava' import { act, Component, Suspense, useEffect, useState, type ReactNode } from 'react' import ReactDOM from 'react-dom/client' +import { renderToString } from 'react-dom/server' import { JSDOM, VirtualConsole } from 'jsdom' import { Router, @@ -125,6 +126,36 @@ test.serial('usage', async function (t) { t.is(window.document.body.innerHTML, '
Stuff
') }) +test.serial('Router and Link render without browser globals', (t) => { + const previous = { + window: g.window, + document: g.document, + history: g.history, + location: g.location, + } + + delete g.window + delete g.document + delete g.history + delete g.location + + try { + const html = renderToString( + + X +
Home
}]} /> +
, + ) + + t.is(html, 'X') + } finally { + g.window = previous.window + g.document = previous.document + g.history = previous.history + g.location = previous.location + } +}) + test.serial('useLinkProps()', async function (t) { setup() From ded3cb7caf71ac286c92adc1ccf65a04030296f2 Mon Sep 17 00:00:00 2001 From: Karolis Narkevicius Date: Wed, 29 Apr 2026 21:59:09 +0100 Subject: [PATCH 14/17] Let same-page hash links use browser navigation --- dist/index.d.ts.map | 2 +- dist/index.js | 7 +++++++ dist/index.js.map | 2 +- src/index.tsx | 9 +++++++++ test/router.test.tsx | 43 +++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 61 insertions(+), 2 deletions(-) diff --git a/dist/index.d.ts.map b/dist/index.d.ts.map index e2676b7..f79f798 100644 --- a/dist/index.d.ts.map +++ b/dist/index.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/index.js b/dist/index.js index 1f1b21c..156d985 100644 --- a/dist/index.js +++ b/dist/index.js @@ -448,6 +448,13 @@ export function shouldNavigate(e) { return false; if (typeof window !== 'undefined' && a.origin && a.origin !== window.location.origin) return false; + if (typeof window !== 'undefined' && + a.hash && + a.origin === window.location.origin && + a.pathname === window.location.pathname && + a.search === window.location.search) { + return false; + } } return true; } diff --git a/dist/index.js.map b/dist/index.js.map index 6e210b5..082bb5d 100644 --- a/dist/index.js.map +++ b/dist/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":";AAAA,OAAO,EACL,aAAa,EACb,IAAI,IAAI,SAAS,EACjB,QAAQ,EACR,WAAW,EACX,UAAU,EACV,QAAQ,EACR,SAAS,EACT,OAAO,EACP,MAAM,EACN,aAAa,GAMd,MAAM,OAAO,CAAA;AACd,OAAO,EACL,aAAa,EACb,YAAY,GAOb,MAAM,cAAc,CAAA;AAErB,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAA;AA0DjC,MAAM,oBAAoB,GAAG,IAAI,OAAO,EAAyD,CAAA;AACjG,MAAM,sBAAsB,GAAG,IAAI,OAAO,EAAmC,CAAA;AAE7E,SAAS,eAAe,CAAC,QAAqB;IAC5C,IAAI,OAAO,GAAG,oBAAoB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;IAChD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,GAAG,QAAQ,EAAE,CAAA;QACpB,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE;YACjB,iEAAiE;YACjE,uDAAuD;QACzD,CAAC,CAAC,CAAA;QACF,oBAAoB,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;IAC7C,CAAC;IACD,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,SAAS,oBAAoB,CAAC,QAAqB;IACjD,IAAI,SAAS,GAAG,sBAAsB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;IACpD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,SAAS,GAAG,SAAS,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAA;QACtD,sBAAsB,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAA;IACjD,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAY;IACvC,MAAM,CAAC,GAAG,KAIT,CAAA;IACD,OAAO;QACL,QAAQ,EAAE,CAAC,CAAC,QAAQ,IAAI,EAAE;QAC1B,GAAG,EAAG,CAA8B,CAAC,GAAG,IAAI,CAAC,CAAC,QAAQ,IAAI,EAAE;QAC5D,MAAM,EAAE,CAAC,CAAC,MAAM,IAAI,EAAE;QACtB,KAAK,EAAE,CAAC,CAAC,KAAK,IAAI,EAAE;KACrB,CAAA;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAwB;IAChD,OAAO,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAE,OAAkC,CAAC,QAAQ,CAAC,CAAC,CAAA;AAChG,CAAC;AAwBD,MAAM,CAAC,MAAM,aAAa,GAAG,aAAa,CAAiC,SAAS,CAAC,CAAA;AACrF,MAAM,YAAY,GAAG,aAAa,CAA2B,SAAS,CAAC,CAAA;AAEvE,uEAAuE;AACvE,2EAA2E;AAC3E,4EAA4E;AAC5E,MAAM,sBAAsB,GAAG,aAAa,CAAU,KAAK,CAAC,CAAA;AAE5D,SAAS,YAAY;IACnB,MAAM,GAAG,GAAG,UAAU,CAAC,aAAa,CAAC,CAAA;IACrC,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAA;IAC9D,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,MAAM,UAAU,yBAAyB;IACvC,OAAO,YAAY,EAAE,CAAC,MAAM,CAAA;AAC9B,CAAC;AAED,MAAM,UAAU,QAAQ;IACtB,MAAM,KAAK,GAAG,UAAU,CAAC,YAAY,CAAC,CAAA;IACtC,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAA;AAC3D,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,UAAU;IACxB,OAAO,YAAY,EAAE,CAAC,SAAS,CAAA;AACjC,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,MAAM,EAAE,QAAQ,EAAE,GAAG,YAAY,EAAE,CAAA;IACnC,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAA;IACxB,OAAO,WAAW,CAChB,CAAC,EAAM,EAAE,EAAE;QACT,OAAO,QAAQ,CAAC,EAAE,EAAE,KAA0B,CAAC,CAAA;IACjD,CAAC,EACD,CAAC,QAAQ,EAAE,KAAK,CAAC,CAClB,CAAA;AACH,CAAC;AAiBD,SAAS,UAAU,CAAC,UAAsB;IACxC,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,EAAE,EAAE,UAAU,CAAC,EAAE,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,CAAC,CAAA;IAChG,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,CAAA;AAC/B,CAAC;AA4BD,MAAM,wBAAwB,GAAG,IAAI,CAAA;AAErC,MAAM,UAAU,MAAM,CAAC,EACrB,IAAI,EACJ,EAAE,EACF,IAAI,EACJ,cAAc,EACd,cAAc,GAAG,wBAAwB,EACzC,QAAQ,GACI;IACZ,MAAM,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAiB,GAAG,EAAE,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;IAE1G,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAe,IAAI,CAAC,CAAA;IAC9D,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAA;IACnE,MAAM,CAAC,SAAS,EAAE,qBAAqB,CAAC,GAAG,aAAa,EAAE,CAAA;IAE1D,2EAA2E;IAC3E,yEAAyE;IACzE,uEAAuE;IACvE,yEAAyE;IACzE,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAC7C,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,UAAU,CAAC,KAAK,CAAC,CAAA;YACjB,OAAM;QACR,CAAC;QACD,UAAU,CAAC,IAAI,CAAC,CAAA;QAChB,MAAM,CAAC,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,cAAc,CAAC,CAAA;QAC7D,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;IAC9B,CAAC,EAAE,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC,CAAA;IAE/B,wEAAwE;IACxE,mDAAmD;IACnD,MAAM,YAAY,GAAG,MAAM,CAAC,cAAc,CAAC,CAAA;IAC3C,YAAY,CAAC,OAAO,GAAG,cAAc,CAAA;IAErC,MAAM,cAAc,GAAG,WAAW,CAAC,CAAC,IAAW,EAAE,EAAE;QACjD,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,CAAA;QACtC,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IACrD,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,MAAM,YAAY,GAAG,WAAW,CAAC,CAAC,OAAc,EAAE,WAAkB,EAAE,EAAE;QACtE,MAAM,UAAU,GAAI,OAAoC,CAAC,GAAG,CAAA;QAC5D,MAAM,cAAc,GAAI,WAAwC,CAAC,GAAG,CAAA;QAEpE,IACE,WAAW,KAAK,OAAO;YACvB,cAAc;YACd,cAAc,KAAK,UAAU;YAC7B,OAAO,MAAM,KAAK,WAAW;YAC7B,MAAM,CAAC,OAAO,EACd,CAAC;YACD,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,EAAE,cAAc,CAAC,CAAA;QACrD,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,MAAM,MAAM,GAAG,WAAW,CACxB,CAAC,IAAW,EAAE,UAAiB,IAAI,EAAE,EAAE;QACrC,MAAM,UAAU,GAAI,OAAoC,CAAC,GAAG,CAAA;QAC5D,MAAM,cAAc,GAAI,IAAiC,CAAC,GAAG,CAAA;QAE7D,qBAAqB,CAAC,GAAG,EAAE;YACzB,YAAY,CAAC,IAAI,CAAC,CAAA;YAClB,cAAc,CAAC,CAAC,OAAO,EAAE,EAAE;gBACzB,IAAI,CAAC,OAAO;oBAAE,OAAO,OAAO,CAAA;gBAC5B,IAAI,OAAO,KAAK,UAAU,IAAI,OAAO,KAAK,cAAc;oBAAE,OAAO,IAAI,CAAA;gBACrE,OAAO,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAA;YACjE,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QAEF,gEAAgE;QAChE,oEAAoE;QACpE,iBAAiB;QACjB,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;IAC7B,CAAC,EACD,CAAC,MAAM,EAAE,YAAY,CAAC,CACvB,CAAA;IAED,MAAM,QAAQ,GAAG,WAAW,CAC1B,CAAC,EAAM,EAAE,IAAY,EAAE,EAAE;QACvB,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;QAClC,cAAc,CAAC,IAAI,CAAC,CAAA;QACpB,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;QACzB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,cAAc,CAAC,IAAI,CAAC,CAAA;QACtB,CAAC;IACH,CAAC,EACD,CAAC,MAAM,CAAC,CACT,CAAA;IAED,MAAM,GAAG,GAAG,OAAO,CACjB,GAAG,EAAE,CAAC,CAAC;QACL,MAAM;QACN,KAAK,EAAE,SAAS;QAChB,cAAc,EAAE,cAAc;QAC9B,YAAY;QACZ,MAAM;QACN,QAAQ;QACR,SAAS;QACT,WAAW;QACX,EAAE;KACH,CAAC,EACF,CAAC,MAAM,EAAE,SAAS,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,EAAE,CAAC,CAChG,CAAA;IAED,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,UAAU,CAAC,IAAI,KAAK,IAAI,IAAI,UAAU,CAAC,EAAE,KAAK,EAAE,IAAI,UAAU,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;YACjF,SAAS,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;QAC3C,CAAC;IACH,CAAC,EAAE,CAAC,UAAU,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,CAAA;IAEhC,OAAO,CACL,KAAC,aAAa,CAAC,QAAQ,IAAC,KAAK,EAAE,GAAG,YAChC,KAAC,sBAAsB,CAAC,QAAQ,IAAC,KAAK,EAAE,OAAO,YAAG,QAAQ,GAAmC,GACtE,CAC1B,CAAA;AACH,CAAC;AAyBD,MAAM,UAAU,eAAe,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAwB;IAC1E,MAAM,OAAO,GAAG,UAAU,CAAC,sBAAsB,CAAC,CAAA;IAClD,OAAO,KAAC,QAAQ,IAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,KAAC,mBAAmB,KAAG,CAAC,CAAC,CAAC,QAAQ,YAAG,QAAQ,GAAY,CAAA;AAChG,CAAC;AAED,MAAM,cAAc,GAAmB,IAAI,OAAO,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;AAE5D;;;;;GAKG;AACH,SAAS,mBAAmB;IAC1B,MAAM,cAAc,CAAA;AACtB,CAAC;AAiBD,SAAS,YAAY,CAAC,KAAY;IAChC,MAAM,QAAQ,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAgB,CAAA;IAClD,MAAM,GAAG,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAA;IACtC,MAAM,OAAO,GAAqB,EAAE,CAAA;IAEpC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,OAAO,CAAC,QAAQ;YAAE,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;QACvD,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;YACnC,IAAI,MAAM,EAAE,CAAC;gBACX,KAAK,MAAM,MAAM,IAAI,MAAM,EAAE,CAAC;oBAC5B,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;gBACtB,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,SAAS,cAAc,CAAC,OAAyB;IAC/C,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,CAAC;YACH,MAAM,CAAC,OAAO,EAAE,CAAA;QAClB,CAAC;QAAC,MAAM,CAAC;YACP,cAAc;QAChB,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,oBAAoB,CAAC,YAAgC;IAC5D,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAA;IAC1C,KAAK,MAAM,OAAO,IAAI,YAAY,EAAE,CAAC;QACnC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,IAAI,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC;gBAAE,SAAQ;YAClC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;YACpB,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC,CAAA;QAC1B,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,EAAE,MAAM,EAAE,kBAAkB,EAAe;IAChE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,YAAY,EAAE,CAAA;IAElF,0EAA0E;IAC1E,2DAA2D;IAC3D,MAAM,SAAS,GAAG,MAAM,CAAuB,IAAI,CAAC,CAAA;IACpD,MAAM,OAAO,GAAG,MAAM,CAAuB,IAAI,CAAC,CAAA;IAClD,MAAM,mBAAmB,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;IACzC,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,CAAA;IACrC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAA;IAE1E,MAAM,cAAc,GAAG,WAAW,CAChC,CAAC,OAAc,EAAiB,EAAE;QAChC,MAAM,WAAW,GAAG,cAAc,CAAC,OAAO,CAAC,CAAA;QAC3C,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,CAAC,WAAW,CAAC,EAAE,CAAA;IAC5E,CAAC,EACD,CAAC,cAAc,CAAC,CACjB,CAAA;IAED,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE;QAClC,oBAAoB,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,OAAO,IAAI,EAAE,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC,CAAA;QACxF,SAAS,CAAC,OAAO,GAAG,IAAI,CAAA;QACxB,OAAO,CAAC,OAAO,GAAG,IAAI,CAAA;IACxB,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,IAAI,CAAC,mBAAmB,CAAC,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC;QAC3C,mBAAmB,CAAC,OAAO,GAAG,IAAI,CAAA;QAClC,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAA;QAC9C,IAAI,OAAO,EAAE,CAAC;YACZ,SAAS,CAAC,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC,CAAA;QAC7C,CAAC;IACH,CAAC;IAED,MAAM,WAAW,GAAG,KAAK,IAAI,SAAS,CAAC,OAAO,EAAE,KAAK,IAAI,IAAI,CAAA;IAC7D,cAAc,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAA;IAE/C,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,SAAS,CAAC,OAAO;YAAE,YAAY,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;IACzF,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAA;IAElB,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,UAAU,GAAG,CAAC,IAAW,EAAE,EAAE;YACjC,MAAM,OAAO,GAAI,IAAoD,CAAC,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAA;YAC1F,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,IAAI,CAAA;YAC9C,MAAM,YAAY,GAAG,cAAc,CAAC,OAAO,CAAC,CAAA;YAE5C,IAAI,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,KAAK,YAAY,CAAC,GAAG,EAAE,CAAC;gBACtD,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;oBACpB,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;oBACvC,OAAO,CAAC,OAAO,GAAG,IAAI,CAAA;gBACxB,CAAC;gBACD,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;gBAC1D,OAAM;YACR,CAAC;YAED,IAAI,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,KAAK,YAAY,CAAC,GAAG,EAAE,CAAC;gBACpD,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;gBACtD,OAAM;YACR,CAAC;YAED,IAAI,OAAO,CAAC,OAAO;gBAAE,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;YAE5D,OAAO,CAAC,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC,CAAA;YACzC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;QACxD,CAAC,CAAA;QACD,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;IAC1C,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,CAAC,CAAC,CAAA;IAErE,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,cAAc,CAAC,OAAO,KAAK,MAAM;YAAE,OAAM;QAC7C,cAAc,CAAC,OAAO,GAAG,MAAM,CAAA;QAE/B,MAAM,UAAU,GAAG,KAAK,EAAE,GAAG,IAAI,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,IAAI,MAAM,CAAC,MAAM,EAAE,CAAA;QAChF,IAAI,CAAC,UAAU;YAAE,OAAM;QAEvB,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;QACzC,IAAI,CAAC,OAAO;YAAE,OAAM;QAEpB,IAAI,OAAO,CAAC,OAAO;YAAE,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;QAC5D,OAAO,CAAC,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC,CAAA;QACzC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IACxD,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,CAAA;IAEjE,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAA;QAChC,IAAI,CAAC,KAAK,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,KAAK,CAAC,GAAG,KAAK,KAAK,CAAC,GAAG;YAAE,OAAM;QAEnE,MAAM,QAAQ,GAAG,SAAS,CAAC,OAAO,CAAA;QAClC,SAAS,CAAC,OAAO,GAAG,QAAQ,CAAA;QAC5B,OAAO,CAAC,OAAO,GAAG,IAAI,CAAA;QACtB,IAAI,QAAQ;YAAE,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;IAChD,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAA;IAEX,SAAS,CAAC,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC,UAAU,CAAC,CAAC,CAAA;IAEzC,OAAO,OAAO,CAAC,GAAG,EAAE;QAClB,IAAI,CAAC,WAAW;YAAE,OAAO,IAAI,CAAA;QAE7B,uEAAuE;QACvE,oEAAoE;QACpE,qEAAqE;QACrE,kEAAkE;QAClE,sEAAsE;QACtE,qEAAqE;QACrE,iDAAiD;QACjD,EAAE;QACF,uEAAuE;QACvE,iEAAiE;QACjE,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAmB,CAAA;QAChD,MAAM,aAAa,GAAG,CAAE,WAA2D,CAAC,MAAM,IAAI,EAAE,CAG/F,CAAA;QAED,MAAM,QAAQ,GAAG,QAAQ,CAAC,WAAW,CAAY,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE;YACrE,MAAM,QAAQ,GAAI,OAA+C,CAAC,KAAK,IAAI,EAAE,CAAA;YAC7E,MAAM,SAAS,GAAG,uBAAuB,CAAC,OAAO,CAAC,CAAA;YAClD,IAAI,CAAC,SAAS;gBAAE,OAAO,QAAQ,CAAA;YAC/B,MAAM,SAAS,GAAG,gBAAgB,CAAC,OAAO,CAAC,IAAI,EAAE,aAAa,CAAC,CAAA;YAC/D,OAAO,CACL,KAAC,SAAS,OAAK,SAAS,KAAM,QAAQ,YACnC,QAAQ,GACC,CACb,CAAA;QACH,CAAC,EAAE,IAAI,CAAC,CAAA;QAER,OAAO,KAAC,YAAY,CAAC,QAAQ,IAAC,KAAK,EAAE,WAAW,YAAG,QAAQ,GAAyB,CAAA;IACtF,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAA;AACnB,CAAC;AAED,MAAM,kBAAkB,GAAG,mBAAmB,CAAA;AAE9C;;;;GAIG;AACH,SAAS,gBAAgB,CAAC,IAAwB,EAAE,OAA+B;IACjF,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAA;IACpB,MAAM,GAAG,GAA2B,EAAE,CAAA;IACtC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;QACtD,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;QACrB,IAAI,IAAI,IAAI,OAAO;YAAE,GAAG,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAChD,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,SAAS,uBAAuB,CAAC,OAAkB;IACjD,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACrB,OAAO,oBAAoB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;IAC/C,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,SAAS;QAAE,OAAO,IAAI,CAAA;IACnC,MAAM,CAAC,GAAG,OAAO,CAAC,SAAkE,CAAA;IACpF,OAAO,CAAC,CAAC,OAAO,IAAI,CAAC,CAAA;AACvB,CAAC;AAED,SAAS,cAAc,CAAC,KAAmB,EAAE,QAAkB;IAC7D,MAAM,eAAe,GAAG,MAAM,CAAqB,SAAS,CAAC,CAAA;IAE7D,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,KAAK,IAAI,QAAQ;YAAE,OAAM;QAE9B,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAA;QACxB,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAA6B,CAAA;QAChE,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,KAAK,CAAC,QAAQ,CAAA;QACtD,IAAI,eAAe,CAAC,OAAO,KAAK,WAAW,EAAE,CAAC;YAC5C,eAAe,CAAC,OAAO,GAAG,WAAW,CAAA;YACrC,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;gBAClC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;YACvB,CAAC;QACH,CAAC;IACH,CAAC,EAAE,CAAC,KAAK,IAAI,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAA;AACzC,CAAC;AAED,8EAA8E;AAC9E,kBAAkB;AAClB,8EAA8E;AAE9E,MAAM,UAAU,WAAW;IACzB,MAAM,EAAE,IAAI,EAAE,GAAG,yBAAyB,EAAE,CAAA;IAC5C,OAAO,IAAI,CAAA;AACb,CAAC;AAUD,MAAM,UAAU,YAAY,CAAC,EAAM;IACjC,MAAM,MAAM,GAA2C,OAAO,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;IAEhG,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,YAAY,EAAE,CAAA;IAC9C,MAAM,SAAS,GAAG,QAAQ,EAAE,CAAA;IAC5B,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAA;IAC9B,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAA;IAE9B,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,EAAE,SAA8B,CAAC,CAAA;IACvF,MAAM,eAAe,GAAG,SAAS,EAAE,QAAQ,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,QAAQ,CAAA;IACtF,MAAM,SAAS,GACb,OAAO,MAAM,CAAC,OAAO,KAAK,WAAW,CAAC,CAAC,CAAC,eAAe,KAAK,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAA;IAEnH,SAAS,OAAO,CAAC,KAAoC;QACnD,IAAI,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1B,KAAK,CAAC,cAAc,EAAE,CAAA;YACtB,QAAQ,CAAC,MAAM,CAAC,CAAA;QAClB,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG;QACb,IAAI;QACJ,cAAc,EAAE,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;QAC9C,OAAO;KACW,CAAA;IAEpB,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,WAAW,EAAE;QACzC,UAAU,EAAE,KAAK;QACjB,KAAK,EAAE,WAAW,KAAK,IAAI;KAC5B,CAAC,CAAA;IACF,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,WAAW,EAAE;QACzC,UAAU,EAAE,KAAK;QACjB,KAAK,EAAE,SAAS;KACjB,CAAC,CAAA;IAEF,OAAO,MAAM,CAAA;AACf,CAAC;AAaD,MAAM,UAAU,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,WAAW,EAAa;IACjH,MAAM,MAAM,GACV,OAAO,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,GAAI,EAA6C,EAAE,CAAA;IAC9F,IAAI,OAAO,KAAK,SAAS;QAAE,MAAM,CAAC,OAAO,GAAG,OAAO,CAAA;IACnD,IAAI,OAAO,KAAK,SAAS;QAAE,MAAM,CAAC,OAAO,GAAG,OAAO,CAAA;IACnD,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,CAAA;IAEtC,SAAS,WAAW,CAAC,KAAoC;QACvD,IAAI,OAAO;YAAE,OAAO,CAAC,KAAK,CAAC,CAAA;QAC3B,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;IAC1B,CAAC;IAED,OAAO,CACL,4BACgB,SAAS,CAAC,cAAc,CAAC,KACnC,WAAW,EACf,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,SAAS,CAAC,IAAI;QACpB,mDAAmD;QACnD,OAAO,EAAE,WAAW,YAEnB,QAAQ,GACP,CACL,CAAA;AACH,CAAC;AAMD,MAAM,UAAU,QAAQ,CAAC,EAAE,EAAE,EAAiB;IAC5C,MAAM,MAAM,GAAG,yBAAyB,EAAE,CAAA;IAC1C,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAA;IAC9B,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAA;IACxB,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,KAA0B,CAAC,CAAA;IACxD,MAAM,aAAa,GAAG,MAAM,CAAgB,IAAI,CAAC,CAAA;IAEjD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,aAAa,CAAC,OAAO,KAAK,IAAI;YAAE,OAAM;QAC1C,aAAa,CAAC,OAAO,GAAG,IAAI,CAAA;QAC5B,QAAQ,CAAC,EAAE,CAAC,CAAA;IACd,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAA;IAExB,OAAO,IAAI,CAAA;AACb,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,CAAa;IAC1C,IAAI,CAAC,CAAC,gBAAgB,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAA;IACtD,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,QAAQ;QAAE,OAAO,KAAK,CAAA;IAClE,MAAM,EAAE,GAAG,CAAC,CAAC,aAA+B,CAAA;IAC5C,IAAI,EAAE,IAAI,EAAE,CAAC,OAAO,KAAK,GAAG,EAAE,CAAC;QAC7B,MAAM,CAAC,GAAG,EAAuB,CAAA;QACjC,wEAAwE;QACxE,iEAAiE;QACjE,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,KAAK,OAAO;YAAE,OAAO,KAAK,CAAA;QAClD,IAAI,CAAC,CAAC,YAAY,CAAC,UAAU,CAAC;YAAE,OAAO,KAAK,CAAA;QAC5C,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,QAAQ,CAAC,MAAM;YAAE,OAAO,KAAK,CAAA;IACpG,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC"} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/src/index.tsx b/src/index.tsx index 4ab39e3..ebf45e3 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -757,6 +757,15 @@ export function shouldNavigate(e: MouseEvent): boolean { if (a.target && a.target !== '_self') return false if (a.hasAttribute('download')) return false if (typeof window !== 'undefined' && a.origin && a.origin !== window.location.origin) return false + if ( + typeof window !== 'undefined' && + a.hash && + a.origin === window.location.origin && + a.pathname === window.location.pathname && + a.search === window.location.search + ) { + return false + } } return true } diff --git a/test/router.test.tsx b/test/router.test.tsx index 07c727d..ddc7fba 100755 --- a/test/router.test.tsx +++ b/test/router.test.tsx @@ -1559,6 +1559,49 @@ test.serial('Link with download attribute lets the browser handle it', (t) => { t.is(location.pathname, '/') }) +test.serial('Link with same-page hash lets the browser handle it', (t) => { + setup() + + const root = document.getElementById('root') + + const routes = [ + { + path: '/', + component: () => ( +
+ Jump +
Target
+
+ ), + }, + { path: '/target', component: () =>
Wrong route
}, + ] + + function App() { + return ( + + + + ) + } + + act(() => { + const r = ReactDOM.createRoot(root) + r.render() + }) + + const link = window.document.querySelector('a')! + let event: MouseEvent + act(() => { + event = dispatchClick(link) + }) + + t.false(event!.defaultPrevented) + t.is(location.pathname, '/') + t.regex(window.document.body.innerHTML, /Target/) + t.notRegex(window.document.body.innerHTML, /Wrong route/) +}) + test.serial('Routes pins prepare handles for the committed nav and releases on the next', async (t) => { setup() From 33d79e0dcf21374c09deefc76f6ab750c7a9fddb Mon Sep 17 00:00:00 2001 From: Karolis Narkevicius Date: Wed, 29 Apr 2026 22:13:26 +0100 Subject: [PATCH 15/17] Fix Link usage test href --- test/router.test.tsx | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/test/router.test.tsx b/test/router.test.tsx index ddc7fba..26cfdab 100755 --- a/test/router.test.tsx +++ b/test/router.test.tsx @@ -85,7 +85,7 @@ test.serial('usage', async function (t) { function Home() { return (
- StuffHello + StuffHello
) } @@ -114,10 +114,7 @@ test.serial('usage', async function (t) { r.render() }) - t.is( - window.document.body.innerHTML, - '
StuffHello
', - ) + t.is(window.document.body.innerHTML, '
StuffHello
') act(() => { router.navigate('/stuff') From e9a767008b4325950eaa81feb1f961087ece9922 Mon Sep 17 00:00:00 2001 From: Karolis Narkevicius Date: Wed, 29 Apr 2026 22:53:56 +0100 Subject: [PATCH 16/17] Fix initial route prepare lifecycle --- dist/index.d.ts.map | 2 +- dist/index.js | 27 +++++++++++++-------- dist/index.js.map | 2 +- src/index.tsx | 26 +++++++++++++------- test/router.test.tsx | 56 ++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 92 insertions(+), 21 deletions(-) diff --git a/dist/index.d.ts.map b/dist/index.d.ts.map index f79f798..d45bb9f 100644 --- a/dist/index.d.ts.map +++ b/dist/index.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAWL,KAAK,oBAAoB,EACzB,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,KAAK,SAAS,EACf,MAAM,OAAO,CAAA;AACd,OAAO,EAGL,KAAK,IAAI,EACT,KAAK,cAAc,EACnB,KAAK,EAAE,EACP,KAAK,KAAK,EACV,KAAK,eAAe,EACpB,KAAK,MAAM,IAAI,WAAW,EAC3B,MAAM,cAAc,CAAA;AAErB,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAA;AAMjC,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAA;IAChB,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC9B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAC/B;AAED;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAA;IACzB,OAAO,IAAI,IAAI,CAAA;IACf,QAAQ,CAAC,EAAE,OAAO,GAAG,OAAO,CAAA;IAC5B,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;CACtB;AAED,MAAM,MAAM,YAAY,GAAG,CAAC,GAAG,EAAE,mBAAmB,KAAK,SAAS,cAAc,EAAE,GAAG,cAAc,EAAE,GAAG,IAAI,CAAA;AAE5G,MAAM,MAAM,cAAc,GAAG;IAAE,OAAO,EAAE,aAAa,CAAC,GAAG,CAAC,CAAA;CAAE,CAAA;AAE5D,MAAM,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC,cAAc,CAAC,CAAA;AAEzD,MAAM,WAAW,sBAAsB;IACrC;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,WAAW,CAAA;CACrB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,aAAa,CAAC,GAAG,CAAC,GAAG;QAAE,OAAO,EAAE,aAAa,CAAC,GAAG,CAAC,CAAA;KAAE,CAAA;IAChE,QAAQ,CAAC,EAAE,aAAa,CAAA;IACxB,OAAO,CAAC,EAAE,YAAY,CAAA;IACtB,UAAU,CAAC,EAAE,sBAAsB,CAAA;IACnC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,CAAC,EAAE,SAAS,EAAE,CAAA;IACpB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAA;CACzB;AAsDD,MAAM,MAAM,EAAE,GACV,MAAM,GACN,CAAC,cAAc,GAAG;IAChB,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB,CAAC,CAAA;AAEN,UAAU,kBAAkB;IAC1B,MAAM,EAAE,WAAW,CAAA;IACnB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAA;IACnB,cAAc,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,KAAK,CAAA;IACvC,YAAY,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,KAAK,IAAI,CAAA;IAC1D,MAAM,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,KAAK,KAAK,IAAI,CAAA;IAC/C,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,KAAK,KAAK,IAAI,CAAA;IACxC,SAAS,EAAE,OAAO,CAAA;IAClB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,EAAE,EAAE,EAAE,GAAG,SAAS,CAAA;CACnB;AAED,eAAO,MAAM,aAAa,yDAA2D,CAAA;AAgBrF,wBAAgB,yBAAyB,IAAI,WAAW,CAEvD;AAED,wBAAgB,QAAQ,IAAI,KAAK,GAAG,IAAI,CAGvC;AAED;;;;;;;;;GASG;AACH,wBAAgB,UAAU,IAAI,OAAO,CAEpC;AAED,wBAAgB,WAAW,SAIlB,EAAE,UAKV;AAsBD;;;;;;;;GAQG;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,KAAK,EAAE,KAAK,KAAK,KAAK,GAAG,IAAI,CAAA;AAE3D,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,IAAI,CAAA;IACX,EAAE,CAAC,EAAE,EAAE,CAAA;IACP,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,cAAc,CAAC,EAAE,cAAc,CAAA;IAC/B;;;;;OAKG;IACH,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,EAAE,SAAS,CAAA;CACrB;AAID,wBAAgB,MAAM,CAAC,EACrB,IAAI,EACJ,EAAE,EACF,IAAI,EACJ,cAAc,EACd,cAAyC,EACzC,QAAQ,GACT,EAAE,WAAW,2CA2Gb;AAMD;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,SAAS,CAAA;IACnB,QAAQ,CAAC,EAAE,SAAS,CAAA;CACrB;AAED,wBAAgB,eAAe,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,oBAAoB,2CAG3E;AAkBD,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,eAAe,CAAC,SAAS,CAAC,EAAE,CAAA;IACpC,kBAAkB,CAAC,EAAE,OAAO,CAAA;CAC7B;AAiDD,wBAAgB,MAAM,CAAC,EAAE,MAAM,EAAE,kBAAkB,EAAE,EAAE,WAAW,kDAwIjE;AAkDD,wBAAgB,WAAW,iGAG1B;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,cAAc,EAAE,MAAM,GAAG,SAAS,CAAA;IAClC,OAAO,EAAE,CAAC,CAAC,EAAE,UAAU,CAAC,iBAAiB,CAAC,KAAK,IAAI,CAAA;IACnD,SAAS,EAAE,OAAO,CAAA;IAClB,SAAS,EAAE,OAAO,CAAA;CACnB;AAED,wBAAgB,YAAY,CAAC,EAAE,EAAE,EAAE,GAAG,eAAe,CAoCpD;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,EAAE,CAAA;IACT,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,aAAa,CAAA;IACrB,QAAQ,CAAC,EAAE,SAAS,CAAA;CACrB;AAED,MAAM,MAAM,SAAS,GAAG,YAAY,GAAG,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,EAAE,MAAM,YAAY,CAAC,CAAA;AAExG,wBAAgB,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,WAAW,EAAE,EAAE,SAAS,2CAyBlH;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,EAAE,CAAA;CACP;AAED,wBAAgB,QAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,aAAa,QAc7C;AAED,wBAAgB,cAAc,CAAC,CAAC,EAAE,UAAU,GAAG,OAAO,CAsBrD"} \ No newline at end of file diff --git a/dist/index.js b/dist/index.js index 156d985..f6fe343 100644 --- a/dist/index.js +++ b/dist/index.js @@ -222,7 +222,6 @@ export function Routes({ routes, disableScrollToTop }) { // when a new navigation commits or when unmounts. const committed = useRef(null); const pending = useRef(null); - const didSeedInitialRoute = useRef(false); const previousRoutes = useRef(routes); const matcher = useMemo(() => createMatcher(routes, { qs }), [routes, qs]); const prepareMatched = useCallback((matched) => { @@ -234,19 +233,27 @@ export function Routes({ routes, disableScrollToTop }) { committed.current = null; pending.current = null; }, []); - if (!didSeedInitialRoute.current && !route) { - didSeedInitialRoute.current = true; + const initialRoute = useMemo(() => { + if (route) + return null; const matched = matcher.match(router.getUrl()); if (matched) { - committed.current = prepareMatched(matched); + return { route: transformRoute(matched), matched }; } - } - const activeRoute = route ?? committed.current?.route ?? null; - useScrollToTop(activeRoute, disableScrollToTop); + return null; + }, [route, router, matcher, transformRoute]); + const activeRoute = route ?? committed.current?.route ?? initialRoute?.route ?? null; useEffect(() => { - if (committed.current) - syncRouteUrl(committed.current.matched, committed.current.route); - }, [syncRouteUrl]); + if (!initialRoute || route || committed.current || pending.current) + return; + const prepared = { + ...initialRoute, + handles: prepareRoute(initialRoute.route), + }; + committed.current = prepared; + syncRouteUrl(prepared.matched, prepared.route); + }, [initialRoute, route, syncRouteUrl]); + useScrollToTop(activeRoute, disableScrollToTop); useEffect(() => { const transition = (next) => { const nextUrl = next.url ?? next.pathname; diff --git a/dist/index.js.map b/dist/index.js.map index 082bb5d..51a0585 100644 --- a/dist/index.js.map +++ b/dist/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/src/index.tsx b/src/index.tsx index ebf45e3..a174fce 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -466,7 +466,6 @@ export function Routes({ routes, disableScrollToTop }: RoutesProps) { // when a new navigation commits or when unmounts. const committed = useRef(null) const pending = useRef(null) - const didSeedInitialRoute = useRef(false) const previousRoutes = useRef(routes) const matcher = useMemo(() => createMatcher(routes, { qs }), [routes, qs]) @@ -484,20 +483,29 @@ export function Routes({ routes, disableScrollToTop }: RoutesProps) { pending.current = null }, []) - if (!didSeedInitialRoute.current && !route) { - didSeedInitialRoute.current = true + const initialRoute = useMemo | null>(() => { + if (route) return null const matched = matcher.match(router.getUrl()) if (matched) { - committed.current = prepareMatched(matched) + return { route: transformRoute(matched), matched } } - } + return null + }, [route, router, matcher, transformRoute]) - const activeRoute = route ?? committed.current?.route ?? null - useScrollToTop(activeRoute, disableScrollToTop) + const activeRoute = route ?? committed.current?.route ?? initialRoute?.route ?? null useEffect(() => { - if (committed.current) syncRouteUrl(committed.current.matched, committed.current.route) - }, [syncRouteUrl]) + if (!initialRoute || route || committed.current || pending.current) return + + const prepared = { + ...initialRoute, + handles: prepareRoute(initialRoute.route), + } + committed.current = prepared + syncRouteUrl(prepared.matched, prepared.route) + }, [initialRoute, route, syncRouteUrl]) + + useScrollToTop(activeRoute, disableScrollToTop) useEffect(() => { const transition = (next: Route) => { diff --git a/test/router.test.tsx b/test/router.test.tsx index 26cfdab..78beeae 100755 --- a/test/router.test.tsx +++ b/test/router.test.tsx @@ -153,6 +153,62 @@ test.serial('Router and Link render without browser globals', (t) => { } }) +test.serial('Routes does not prepare the initial route during render', (t) => { + let prepareCalls = 0 + + const routes = [ + { + path: '/', + prepare: () => { + prepareCalls++ + }, + component: () =>
Home
, + }, + ] + + const matched = { + pattern: '/', + url: '/', + pathname: '/', + params: {}, + query: {}, + search: '', + hash: '', + data: routes, + } as Route + + const router = { + getUrl: () => '/', + match: () => matched, + listen: () => () => {}, + href: () => '/', + navigate: () => {}, + } + + const html = renderToString( + route, + syncRouteUrl: () => {}, + commit: () => {}, + navigate: () => {}, + isPending: false, + pendingHref: null, + qs: undefined, + } as any + } + > + + , + ) + + t.is(html, '
Home
') + t.is(prepareCalls, 0) +}) + test.serial('useLinkProps()', async function (t) { setup() From da02b597b63bc783903f1ae260e287bba49c7179 Mon Sep 17 00:00:00 2001 From: Karolis Narkevicius Date: Wed, 29 Apr 2026 22:54:53 +0100 Subject: [PATCH 17/17] Allow null route components --- dist/index.d.ts | 2 +- dist/index.d.ts.map | 2 +- src/index.tsx | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/dist/index.d.ts b/dist/index.d.ts index f4c289e..798cc10 100644 --- a/dist/index.d.ts +++ b/dist/index.d.ts @@ -37,7 +37,7 @@ export interface RouteData { path?: string; component?: ComponentType | { default: ComponentType; - }; + } | null; resolver?: RouteResolver; prepare?: RoutePrepare; navigation?: RouteNavigationOptions; diff --git a/dist/index.d.ts.map b/dist/index.d.ts.map index d45bb9f..931edf8 100644 --- a/dist/index.d.ts.map +++ b/dist/index.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/src/index.tsx b/src/index.tsx index a174fce..ea71bf0 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -70,7 +70,7 @@ export interface RouteNavigationOptions { export interface RouteData { path?: string - component?: ComponentType | { default: ComponentType } + component?: ComponentType | { default: ComponentType } | null resolver?: RouteResolver prepare?: RoutePrepare navigation?: RouteNavigationOptions