@tanstack/solid-router 1.108.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +29 -0
- package/dist/cjs/Asset.cjs +59 -0
- package/dist/cjs/Asset.cjs.map +1 -0
- package/dist/cjs/Asset.d.cts +2 -0
- package/dist/cjs/CatchBoundary.cjs +92 -0
- package/dist/cjs/CatchBoundary.cjs.map +1 -0
- package/dist/cjs/CatchBoundary.d.cts +11 -0
- package/dist/cjs/HeadContent.cjs +129 -0
- package/dist/cjs/HeadContent.cjs.map +1 -0
- package/dist/cjs/HeadContent.d.cts +8 -0
- package/dist/cjs/Match.cjs +340 -0
- package/dist/cjs/Match.cjs.map +1 -0
- package/dist/cjs/Match.d.cts +8 -0
- package/dist/cjs/Matches.cjs +151 -0
- package/dist/cjs/Matches.cjs.map +1 -0
- package/dist/cjs/Matches.d.cts +69 -0
- package/dist/cjs/RouterProvider.cjs +45 -0
- package/dist/cjs/RouterProvider.cjs.map +1 -0
- package/dist/cjs/RouterProvider.d.cts +35 -0
- package/dist/cjs/SafeFragment.cjs +8 -0
- package/dist/cjs/SafeFragment.cjs.map +1 -0
- package/dist/cjs/SafeFragment.d.cts +1 -0
- package/dist/cjs/ScriptOnce.cjs +23 -0
- package/dist/cjs/ScriptOnce.cjs.map +1 -0
- package/dist/cjs/ScriptOnce.d.cts +5 -0
- package/dist/cjs/Scripts.cjs +48 -0
- package/dist/cjs/Scripts.cjs.map +1 -0
- package/dist/cjs/Scripts.d.cts +1 -0
- package/dist/cjs/ScrollRestoration.cjs +37 -0
- package/dist/cjs/ScrollRestoration.cjs.map +1 -0
- package/dist/cjs/ScrollRestoration.d.cts +15 -0
- package/dist/cjs/Transitioner.cjs +132 -0
- package/dist/cjs/Transitioner.cjs.map +1 -0
- package/dist/cjs/Transitioner.d.cts +1 -0
- package/dist/cjs/awaited.cjs +53 -0
- package/dist/cjs/awaited.cjs.map +1 -0
- package/dist/cjs/awaited.d.cts +11 -0
- package/dist/cjs/fileRoute.cjs +90 -0
- package/dist/cjs/fileRoute.cjs.map +1 -0
- package/dist/cjs/fileRoute.d.cts +58 -0
- package/dist/cjs/history.d.cts +8 -0
- package/dist/cjs/index.cjs +260 -0
- package/dist/cjs/index.cjs.map +1 -0
- package/dist/cjs/index.d.cts +53 -0
- package/dist/cjs/lazyRouteComponent.cjs +74 -0
- package/dist/cjs/lazyRouteComponent.cjs.map +1 -0
- package/dist/cjs/lazyRouteComponent.d.cts +7 -0
- package/dist/cjs/link.cjs +279 -0
- package/dist/cjs/link.cjs.map +1 -0
- package/dist/cjs/link.d.cts +113 -0
- package/dist/cjs/matchContext.cjs +25 -0
- package/dist/cjs/matchContext.cjs.map +1 -0
- package/dist/cjs/matchContext.d.cts +3 -0
- package/dist/cjs/not-found.cjs +51 -0
- package/dist/cjs/not-found.cjs.map +1 -0
- package/dist/cjs/not-found.d.cts +27 -0
- package/dist/cjs/redirects.cjs +29 -0
- package/dist/cjs/redirects.cjs.map +1 -0
- package/dist/cjs/redirects.d.cts +21 -0
- package/dist/cjs/renderRouteNotFound.cjs +23 -0
- package/dist/cjs/renderRouteNotFound.cjs.map +1 -0
- package/dist/cjs/renderRouteNotFound.d.cts +3 -0
- package/dist/cjs/route.cjs +233 -0
- package/dist/cjs/route.cjs.map +1 -0
- package/dist/cjs/route.d.cts +297 -0
- package/dist/cjs/routeInfo.d.cts +53 -0
- package/dist/cjs/router.cjs +1687 -0
- package/dist/cjs/router.cjs.map +1 -0
- package/dist/cjs/router.d.cts +555 -0
- package/dist/cjs/routerContext.cjs +33 -0
- package/dist/cjs/routerContext.cjs.map +1 -0
- package/dist/cjs/routerContext.d.cts +8 -0
- package/dist/cjs/scroll-restoration.cjs +183 -0
- package/dist/cjs/scroll-restoration.cjs.map +1 -0
- package/dist/cjs/scroll-restoration.d.cts +29 -0
- package/dist/cjs/typePrimitives.d.cts +66 -0
- package/dist/cjs/useBlocker.cjs +165 -0
- package/dist/cjs/useBlocker.cjs.map +1 -0
- package/dist/cjs/useBlocker.d.cts +68 -0
- package/dist/cjs/useCanGoBack.cjs +8 -0
- package/dist/cjs/useCanGoBack.cjs.map +1 -0
- package/dist/cjs/useCanGoBack.d.cts +1 -0
- package/dist/cjs/useLoaderData.cjs +14 -0
- package/dist/cjs/useLoaderData.cjs.map +1 -0
- package/dist/cjs/useLoaderData.d.cts +13 -0
- package/dist/cjs/useLoaderDeps.cjs +17 -0
- package/dist/cjs/useLoaderDeps.cjs.map +1 -0
- package/dist/cjs/useLoaderDeps.d.cts +12 -0
- package/dist/cjs/useLocation.cjs +10 -0
- package/dist/cjs/useLocation.cjs.map +1 -0
- package/dist/cjs/useLocation.d.cts +7 -0
- package/dist/cjs/useMatch.cjs +39 -0
- package/dist/cjs/useMatch.cjs.map +1 -0
- package/dist/cjs/useMatch.d.cts +14 -0
- package/dist/cjs/useNavigate.cjs +45 -0
- package/dist/cjs/useNavigate.cjs.map +1 -0
- package/dist/cjs/useNavigate.d.cts +7 -0
- package/dist/cjs/useParams.cjs +15 -0
- package/dist/cjs/useParams.cjs.map +1 -0
- package/dist/cjs/useParams.d.cts +15 -0
- package/dist/cjs/useRouteContext.cjs +11 -0
- package/dist/cjs/useRouteContext.cjs.map +1 -0
- package/dist/cjs/useRouteContext.d.cts +13 -0
- package/dist/cjs/useRouter.cjs +29 -0
- package/dist/cjs/useRouter.cjs.map +1 -0
- package/dist/cjs/useRouter.d.cts +4 -0
- package/dist/cjs/useRouterState.cjs +16 -0
- package/dist/cjs/useRouterState.cjs.map +1 -0
- package/dist/cjs/useRouterState.d.cts +8 -0
- package/dist/cjs/useSearch.cjs +15 -0
- package/dist/cjs/useSearch.cjs.map +1 -0
- package/dist/cjs/useSearch.d.cts +15 -0
- package/dist/cjs/utils.cjs +58 -0
- package/dist/cjs/utils.cjs.map +1 -0
- package/dist/cjs/utils.d.cts +44 -0
- package/dist/esm/Asset.d.ts +2 -0
- package/dist/esm/Asset.js +59 -0
- package/dist/esm/Asset.js.map +1 -0
- package/dist/esm/CatchBoundary.d.ts +11 -0
- package/dist/esm/CatchBoundary.js +75 -0
- package/dist/esm/CatchBoundary.js.map +1 -0
- package/dist/esm/HeadContent.d.ts +8 -0
- package/dist/esm/HeadContent.js +112 -0
- package/dist/esm/HeadContent.js.map +1 -0
- package/dist/esm/Match.d.ts +8 -0
- package/dist/esm/Match.js +323 -0
- package/dist/esm/Match.js.map +1 -0
- package/dist/esm/Matches.d.ts +69 -0
- package/dist/esm/Matches.js +134 -0
- package/dist/esm/Matches.js.map +1 -0
- package/dist/esm/RouterProvider.d.ts +35 -0
- package/dist/esm/RouterProvider.js +45 -0
- package/dist/esm/RouterProvider.js.map +1 -0
- package/dist/esm/SafeFragment.d.ts +1 -0
- package/dist/esm/SafeFragment.js +8 -0
- package/dist/esm/SafeFragment.js.map +1 -0
- package/dist/esm/ScriptOnce.d.ts +5 -0
- package/dist/esm/ScriptOnce.js +23 -0
- package/dist/esm/ScriptOnce.js.map +1 -0
- package/dist/esm/Scripts.d.ts +1 -0
- package/dist/esm/Scripts.js +48 -0
- package/dist/esm/Scripts.js.map +1 -0
- package/dist/esm/ScrollRestoration.d.ts +15 -0
- package/dist/esm/ScrollRestoration.js +37 -0
- package/dist/esm/ScrollRestoration.js.map +1 -0
- package/dist/esm/Transitioner.d.ts +1 -0
- package/dist/esm/Transitioner.js +115 -0
- package/dist/esm/Transitioner.js.map +1 -0
- package/dist/esm/awaited.d.ts +11 -0
- package/dist/esm/awaited.js +36 -0
- package/dist/esm/awaited.js.map +1 -0
- package/dist/esm/fileRoute.d.ts +58 -0
- package/dist/esm/fileRoute.js +90 -0
- package/dist/esm/fileRoute.js.map +1 -0
- package/dist/esm/history.d.ts +8 -0
- package/dist/esm/index.d.ts +53 -0
- package/dist/esm/index.js +149 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/lazyRouteComponent.d.ts +7 -0
- package/dist/esm/lazyRouteComponent.js +74 -0
- package/dist/esm/lazyRouteComponent.js.map +1 -0
- package/dist/esm/link.d.ts +113 -0
- package/dist/esm/link.js +262 -0
- package/dist/esm/link.js.map +1 -0
- package/dist/esm/matchContext.d.ts +3 -0
- package/dist/esm/matchContext.js +8 -0
- package/dist/esm/matchContext.js.map +1 -0
- package/dist/esm/not-found.d.ts +27 -0
- package/dist/esm/not-found.js +51 -0
- package/dist/esm/not-found.js.map +1 -0
- package/dist/esm/redirects.d.ts +21 -0
- package/dist/esm/redirects.js +29 -0
- package/dist/esm/redirects.js.map +1 -0
- package/dist/esm/renderRouteNotFound.d.ts +3 -0
- package/dist/esm/renderRouteNotFound.js +23 -0
- package/dist/esm/renderRouteNotFound.js.map +1 -0
- package/dist/esm/route.d.ts +297 -0
- package/dist/esm/route.js +233 -0
- package/dist/esm/route.js.map +1 -0
- package/dist/esm/routeInfo.d.ts +53 -0
- package/dist/esm/router.d.ts +555 -0
- package/dist/esm/router.js +1687 -0
- package/dist/esm/router.js.map +1 -0
- package/dist/esm/routerContext.d.ts +8 -0
- package/dist/esm/routerContext.js +16 -0
- package/dist/esm/routerContext.js.map +1 -0
- package/dist/esm/scroll-restoration.d.ts +29 -0
- package/dist/esm/scroll-restoration.js +183 -0
- package/dist/esm/scroll-restoration.js.map +1 -0
- package/dist/esm/typePrimitives.d.ts +66 -0
- package/dist/esm/useBlocker.d.ts +68 -0
- package/dist/esm/useBlocker.js +148 -0
- package/dist/esm/useBlocker.js.map +1 -0
- package/dist/esm/useCanGoBack.d.ts +1 -0
- package/dist/esm/useCanGoBack.js +8 -0
- package/dist/esm/useCanGoBack.js.map +1 -0
- package/dist/esm/useLoaderData.d.ts +13 -0
- package/dist/esm/useLoaderData.js +14 -0
- package/dist/esm/useLoaderData.js.map +1 -0
- package/dist/esm/useLoaderDeps.d.ts +12 -0
- package/dist/esm/useLoaderDeps.js +17 -0
- package/dist/esm/useLoaderDeps.js.map +1 -0
- package/dist/esm/useLocation.d.ts +7 -0
- package/dist/esm/useLocation.js +10 -0
- package/dist/esm/useLocation.js.map +1 -0
- package/dist/esm/useMatch.d.ts +14 -0
- package/dist/esm/useMatch.js +22 -0
- package/dist/esm/useMatch.js.map +1 -0
- package/dist/esm/useNavigate.d.ts +7 -0
- package/dist/esm/useNavigate.js +28 -0
- package/dist/esm/useNavigate.js.map +1 -0
- package/dist/esm/useParams.d.ts +15 -0
- package/dist/esm/useParams.js +15 -0
- package/dist/esm/useParams.js.map +1 -0
- package/dist/esm/useRouteContext.d.ts +13 -0
- package/dist/esm/useRouteContext.js +11 -0
- package/dist/esm/useRouteContext.js.map +1 -0
- package/dist/esm/useRouter.d.ts +4 -0
- package/dist/esm/useRouter.js +12 -0
- package/dist/esm/useRouter.js.map +1 -0
- package/dist/esm/useRouterState.d.ts +8 -0
- package/dist/esm/useRouterState.js +16 -0
- package/dist/esm/useRouterState.js.map +1 -0
- package/dist/esm/useSearch.d.ts +15 -0
- package/dist/esm/useSearch.js +15 -0
- package/dist/esm/useSearch.js.map +1 -0
- package/dist/esm/utils.d.ts +44 -0
- package/dist/esm/utils.js +41 -0
- package/dist/esm/utils.js.map +1 -0
- package/package.json +75 -0
- package/src/Asset.tsx +23 -0
- package/src/CatchBoundary.tsx +78 -0
- package/src/HeadContent.tsx +146 -0
- package/src/Match.tsx +356 -0
- package/src/Matches.tsx +348 -0
- package/src/RouterProvider.tsx +130 -0
- package/src/SafeFragment.tsx +3 -0
- package/src/ScriptOnce.tsx +30 -0
- package/src/Scripts.tsx +65 -0
- package/src/ScrollRestoration.tsx +65 -0
- package/src/Transitioner.tsx +152 -0
- package/src/awaited.tsx +49 -0
- package/src/fileRoute.ts +274 -0
- package/src/history.ts +9 -0
- package/src/index.tsx +359 -0
- package/src/lazyRouteComponent.tsx +114 -0
- package/src/link.tsx +1002 -0
- package/src/matchContext.tsx +10 -0
- package/src/not-found.tsx +69 -0
- package/src/redirects.ts +71 -0
- package/src/renderRouteNotFound.tsx +27 -0
- package/src/route.ts +1477 -0
- package/src/routeInfo.ts +239 -0
- package/src/router.ts +3066 -0
- package/src/routerContext.tsx +26 -0
- package/src/scroll-restoration.tsx +337 -0
- package/src/typePrimitives.ts +195 -0
- package/src/useBlocker.tsx +298 -0
- package/src/useCanGoBack.ts +5 -0
- package/src/useLoaderData.tsx +64 -0
- package/src/useLoaderDeps.tsx +52 -0
- package/src/useLocation.tsx +26 -0
- package/src/useMatch.tsx +96 -0
- package/src/useNavigate.tsx +61 -0
- package/src/useParams.tsx +83 -0
- package/src/useRouteContext.ts +62 -0
- package/src/useRouter.tsx +15 -0
- package/src/useRouterState.tsx +32 -0
- package/src/useSearch.tsx +84 -0
- package/src/utils.ts +96 -0
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { AnyRoute } from './route.js';
|
|
2
|
+
import { ControlledPromise, DeepPartial, NoInfer, ResolveRelativePath, StaticDataRouteOption } from '@tanstack/router-core';
|
|
3
|
+
import { AnyRouter, RegisteredRouter } from './router.js';
|
|
4
|
+
import { MakeOptionalPathParams, MakeOptionalSearchParams, MaskOptions, ResolveRoute, ToSubOptionsProps } from './link.js';
|
|
5
|
+
import { AllContext, AllLoaderData, AllParams, FullSearchSchema, ParseRoute, RouteById, RouteByPath, RouteIds } from './routeInfo.js';
|
|
6
|
+
import * as Solid from 'solid-js';
|
|
7
|
+
export type MakeRouteMatchFromRoute<TRoute extends AnyRoute> = RouteMatch<TRoute['types']['id'], TRoute['types']['fullPath'], TRoute['types']['allParams'], TRoute['types']['fullSearchSchema'], TRoute['types']['loaderData'], TRoute['types']['allContext'], TRoute['types']['loaderDeps']>;
|
|
8
|
+
export interface RouteMatch<out TRouteId, out TFullPath, out TAllParams, out TFullSearchSchema, out TLoaderData, out TAllContext, out TLoaderDeps> {
|
|
9
|
+
id: string;
|
|
10
|
+
routeId: TRouteId;
|
|
11
|
+
fullPath: TFullPath;
|
|
12
|
+
index: number;
|
|
13
|
+
pathname: string;
|
|
14
|
+
params: TAllParams;
|
|
15
|
+
_strictParams: TAllParams;
|
|
16
|
+
status: 'pending' | 'success' | 'error' | 'redirected' | 'notFound';
|
|
17
|
+
isFetching: false | 'beforeLoad' | 'loader';
|
|
18
|
+
error: unknown;
|
|
19
|
+
paramsError: unknown;
|
|
20
|
+
searchError: unknown;
|
|
21
|
+
updatedAt: number;
|
|
22
|
+
loadPromise?: ControlledPromise<void>;
|
|
23
|
+
beforeLoadPromise?: ControlledPromise<void>;
|
|
24
|
+
loaderPromise?: ControlledPromise<void>;
|
|
25
|
+
loaderData?: TLoaderData;
|
|
26
|
+
__routeContext: Record<string, unknown>;
|
|
27
|
+
__beforeLoadContext: Record<string, unknown>;
|
|
28
|
+
context: TAllContext;
|
|
29
|
+
search: TFullSearchSchema;
|
|
30
|
+
_strictSearch: TFullSearchSchema;
|
|
31
|
+
fetchCount: number;
|
|
32
|
+
abortController: AbortController;
|
|
33
|
+
cause: 'preload' | 'enter' | 'stay';
|
|
34
|
+
loaderDeps: TLoaderDeps;
|
|
35
|
+
preload: boolean;
|
|
36
|
+
invalid: boolean;
|
|
37
|
+
meta?: Array<Solid.JSX.IntrinsicElements['meta'] | undefined>;
|
|
38
|
+
links?: Array<Solid.JSX.IntrinsicElements['link'] | undefined>;
|
|
39
|
+
scripts?: Array<Solid.JSX.IntrinsicElements['script'] | undefined>;
|
|
40
|
+
headScripts?: Array<Solid.JSX.IntrinsicElements['script'] | undefined>;
|
|
41
|
+
headers?: Record<string, string>;
|
|
42
|
+
globalNotFound?: boolean;
|
|
43
|
+
staticData: StaticDataRouteOption;
|
|
44
|
+
minPendingPromise?: ControlledPromise<void>;
|
|
45
|
+
pendingTimeout?: ReturnType<typeof setTimeout>;
|
|
46
|
+
}
|
|
47
|
+
export type MakeRouteMatch<TRouteTree extends AnyRoute = RegisteredRouter['routeTree'], TRouteId = RouteIds<TRouteTree>, TStrict extends boolean = true> = RouteMatch<TRouteId, RouteById<TRouteTree, TRouteId>['types']['fullPath'], TStrict extends false ? AllParams<TRouteTree> : RouteById<TRouteTree, TRouteId>['types']['allParams'], TStrict extends false ? FullSearchSchema<TRouteTree> : RouteById<TRouteTree, TRouteId>['types']['fullSearchSchema'], TStrict extends false ? AllLoaderData<TRouteTree> : RouteById<TRouteTree, TRouteId>['types']['loaderData'], TStrict extends false ? AllContext<TRouteTree> : RouteById<TRouteTree, TRouteId>['types']['allContext'], RouteById<TRouteTree, TRouteId>['types']['loaderDeps']>;
|
|
48
|
+
export type AnyRouteMatch = RouteMatch<any, any, any, any, any, any, any>;
|
|
49
|
+
export declare function Matches(): Solid.JSX.Element;
|
|
50
|
+
export interface MatchRouteOptions {
|
|
51
|
+
pending?: boolean;
|
|
52
|
+
caseSensitive?: boolean;
|
|
53
|
+
includeSearch?: boolean;
|
|
54
|
+
fuzzy?: boolean;
|
|
55
|
+
}
|
|
56
|
+
export type UseMatchRouteOptions<TRouter extends AnyRouter = RegisteredRouter, TFrom extends string = string, TTo extends string | undefined = undefined, TMaskFrom extends string = TFrom, TMaskTo extends string = ''> = ToSubOptionsProps<TRouter, TFrom, TTo> & DeepPartial<MakeOptionalSearchParams<TRouter, TFrom, TTo>> & DeepPartial<MakeOptionalPathParams<TRouter, TFrom, TTo>> & MaskOptions<TRouter, TMaskFrom, TMaskTo> & MatchRouteOptions;
|
|
57
|
+
export declare function useMatchRoute<TRouter extends AnyRouter = RegisteredRouter>(): <const TFrom extends string = string, const TTo extends string | undefined = undefined, const TMaskFrom extends string = TFrom, const TMaskTo extends string = "">(opts: UseMatchRouteOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo>) => Solid.Accessor<false | ResolveRoute<TRouter, TFrom, TTo>["types"]["allParams"]>;
|
|
58
|
+
export type MakeMatchRouteOptions<TRouter extends AnyRouter = RegisteredRouter, TFrom extends string = string, TTo extends string | undefined = undefined, TMaskFrom extends string = TFrom, TMaskTo extends string = ''> = UseMatchRouteOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo> & {
|
|
59
|
+
children?: ((params?: RouteByPath<TRouter['routeTree'], ResolveRelativePath<TFrom, NoInfer<TTo>>>['types']['allParams']) => Solid.JSX.Element) | Solid.JSX.Element;
|
|
60
|
+
};
|
|
61
|
+
export declare function MatchRoute<TRouter extends AnyRouter = RegisteredRouter, const TFrom extends string = string, const TTo extends string | undefined = undefined, const TMaskFrom extends string = TFrom, const TMaskTo extends string = ''>(props: MakeMatchRouteOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo>): any;
|
|
62
|
+
export type MakeRouteMatchUnion<TRouter extends AnyRouter = RegisteredRouter, TRoute extends AnyRoute = ParseRoute<TRouter['routeTree']>> = TRoute extends any ? RouteMatch<TRoute['id'], TRoute['fullPath'], TRoute['types']['allParams'], TRoute['types']['fullSearchSchema'], TRoute['types']['loaderData'], TRoute['types']['allContext'], TRoute['types']['loaderDeps']> : never;
|
|
63
|
+
export interface UseMatchesBaseOptions<TRouter extends AnyRouter, TSelected> {
|
|
64
|
+
select?: (matches: Array<MakeRouteMatchUnion<TRouter>>) => TSelected;
|
|
65
|
+
}
|
|
66
|
+
export type UseMatchesResult<TRouter extends AnyRouter, TSelected> = unknown extends TSelected ? Array<MakeRouteMatchUnion<TRouter>> : TSelected;
|
|
67
|
+
export declare function useMatches<TRouter extends AnyRouter = RegisteredRouter, TSelected = unknown>(opts?: UseMatchesBaseOptions<TRouter, TSelected>): Solid.Accessor<UseMatchesResult<TRouter, TSelected>>;
|
|
68
|
+
export declare function useParentMatches<TRouter extends AnyRouter = RegisteredRouter, TSelected = unknown>(opts?: UseMatchesBaseOptions<TRouter, TSelected>): Solid.Accessor<UseMatchesResult<TRouter, TSelected>>;
|
|
69
|
+
export declare function useChildMatches<TRouter extends AnyRouter = RegisteredRouter, TSelected = unknown>(opts?: UseMatchesBaseOptions<TRouter, TSelected>): Solid.Accessor<UseMatchesResult<TRouter, TSelected>>;
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { createComponent, memo } from "solid-js/web";
|
|
2
|
+
import * as Solid from "solid-js";
|
|
3
|
+
import warning from "tiny-warning";
|
|
4
|
+
import { CatchBoundary, ErrorComponent } from "./CatchBoundary.js";
|
|
5
|
+
import { useRouterState } from "./useRouterState.js";
|
|
6
|
+
import { useRouter } from "./useRouter.js";
|
|
7
|
+
import { Transitioner } from "./Transitioner.js";
|
|
8
|
+
import { matchContext } from "./matchContext.js";
|
|
9
|
+
import { Match } from "./Match.js";
|
|
10
|
+
import { SafeFragment } from "./SafeFragment.js";
|
|
11
|
+
function Matches() {
|
|
12
|
+
const router = useRouter();
|
|
13
|
+
const pendingElement = router.options.defaultPendingComponent ? createComponent(router.options.defaultPendingComponent, {}) : null;
|
|
14
|
+
const ResolvedSuspense = router.isServer || typeof document !== "undefined" && router.clientSsr ? SafeFragment : Solid.Suspense;
|
|
15
|
+
const inner = createComponent(ResolvedSuspense, {
|
|
16
|
+
fallback: pendingElement,
|
|
17
|
+
get children() {
|
|
18
|
+
return [createComponent(Transitioner, {}), createComponent(MatchesInner, {})];
|
|
19
|
+
}
|
|
20
|
+
});
|
|
21
|
+
return router.options.InnerWrap ? createComponent(router.options.InnerWrap, {
|
|
22
|
+
children: inner
|
|
23
|
+
}) : inner;
|
|
24
|
+
}
|
|
25
|
+
function MatchesInner() {
|
|
26
|
+
const matchId = useRouterState({
|
|
27
|
+
select: (s) => {
|
|
28
|
+
var _a;
|
|
29
|
+
return (_a = s.matches[0]) == null ? void 0 : _a.id;
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
const resetKey = useRouterState({
|
|
33
|
+
select: (s) => s.loadedAt
|
|
34
|
+
});
|
|
35
|
+
return createComponent(matchContext.Provider, {
|
|
36
|
+
value: matchId,
|
|
37
|
+
get children() {
|
|
38
|
+
return createComponent(CatchBoundary, {
|
|
39
|
+
getResetKey: () => resetKey(),
|
|
40
|
+
errorComponent: ErrorComponent,
|
|
41
|
+
onCatch: (error) => {
|
|
42
|
+
warning(false, `The following error wasn't caught by any route! At the very least, consider setting an 'errorComponent' in your RootRoute!`);
|
|
43
|
+
warning(false, error.message || error.toString());
|
|
44
|
+
},
|
|
45
|
+
get children() {
|
|
46
|
+
return memo(() => !!matchId())() ? createComponent(Match, {
|
|
47
|
+
get matchId() {
|
|
48
|
+
return matchId();
|
|
49
|
+
}
|
|
50
|
+
}) : null;
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
function useMatchRoute() {
|
|
57
|
+
const router = useRouter();
|
|
58
|
+
const status = useRouterState({
|
|
59
|
+
select: (s) => s.status
|
|
60
|
+
});
|
|
61
|
+
return (opts) => {
|
|
62
|
+
const {
|
|
63
|
+
pending,
|
|
64
|
+
caseSensitive,
|
|
65
|
+
fuzzy,
|
|
66
|
+
includeSearch,
|
|
67
|
+
...rest
|
|
68
|
+
} = opts;
|
|
69
|
+
const matchRoute = Solid.createMemo(() => {
|
|
70
|
+
status();
|
|
71
|
+
return router.matchRoute(rest, {
|
|
72
|
+
pending,
|
|
73
|
+
caseSensitive,
|
|
74
|
+
fuzzy,
|
|
75
|
+
includeSearch
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
return matchRoute;
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
function MatchRoute(props) {
|
|
82
|
+
const status = useRouterState({
|
|
83
|
+
select: (s) => s.status
|
|
84
|
+
});
|
|
85
|
+
return createComponent(Solid.Show, {
|
|
86
|
+
get when() {
|
|
87
|
+
return status();
|
|
88
|
+
},
|
|
89
|
+
keyed: true,
|
|
90
|
+
children: (_) => {
|
|
91
|
+
const matchRoute = useMatchRoute();
|
|
92
|
+
const params = matchRoute(props)();
|
|
93
|
+
if (typeof props.children === "function") {
|
|
94
|
+
return props.children(params);
|
|
95
|
+
}
|
|
96
|
+
return params ? props.children : null;
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
function useMatches(opts) {
|
|
101
|
+
return useRouterState({
|
|
102
|
+
select: (state) => {
|
|
103
|
+
const matches = state.matches;
|
|
104
|
+
return (opts == null ? void 0 : opts.select) ? opts.select(matches) : matches;
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
function useParentMatches(opts) {
|
|
109
|
+
const contextMatchId = Solid.useContext(matchContext);
|
|
110
|
+
return useMatches({
|
|
111
|
+
select: (matches) => {
|
|
112
|
+
matches = matches.slice(0, matches.findIndex((d) => d.id === contextMatchId()));
|
|
113
|
+
return (opts == null ? void 0 : opts.select) ? opts.select(matches) : matches;
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
function useChildMatches(opts) {
|
|
118
|
+
const contextMatchId = Solid.useContext(matchContext);
|
|
119
|
+
return useMatches({
|
|
120
|
+
select: (matches) => {
|
|
121
|
+
matches = matches.slice(matches.findIndex((d) => d.id === contextMatchId()) + 1);
|
|
122
|
+
return (opts == null ? void 0 : opts.select) ? opts.select(matches) : matches;
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
export {
|
|
127
|
+
MatchRoute,
|
|
128
|
+
Matches,
|
|
129
|
+
useChildMatches,
|
|
130
|
+
useMatchRoute,
|
|
131
|
+
useMatches,
|
|
132
|
+
useParentMatches
|
|
133
|
+
};
|
|
134
|
+
//# sourceMappingURL=Matches.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Matches.js","sources":["../../src/Matches.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\nimport warning from 'tiny-warning'\nimport { CatchBoundary, ErrorComponent } from './CatchBoundary'\nimport { useRouterState } from './useRouterState'\nimport { useRouter } from './useRouter'\nimport { Transitioner } from './Transitioner'\nimport { matchContext } from './matchContext'\nimport { Match } from './Match'\nimport { SafeFragment } from './SafeFragment'\nimport type { AnyRoute } from './route'\nimport type {\n ControlledPromise,\n DeepPartial,\n NoInfer,\n ResolveRelativePath,\n StaticDataRouteOption,\n} from '@tanstack/router-core'\nimport type { AnyRouter, RegisteredRouter, RouterState } from './router'\nimport type {\n MakeOptionalPathParams,\n MakeOptionalSearchParams,\n MaskOptions,\n ResolveRoute,\n ToSubOptionsProps,\n} from './link'\nimport type {\n AllContext,\n AllLoaderData,\n AllParams,\n FullSearchSchema,\n ParseRoute,\n RouteById,\n RouteByPath,\n RouteIds,\n} from './routeInfo'\n\nexport type MakeRouteMatchFromRoute<TRoute extends AnyRoute> = RouteMatch<\n TRoute['types']['id'],\n TRoute['types']['fullPath'],\n TRoute['types']['allParams'],\n TRoute['types']['fullSearchSchema'],\n TRoute['types']['loaderData'],\n TRoute['types']['allContext'],\n TRoute['types']['loaderDeps']\n>\n\nexport interface RouteMatch<\n out TRouteId,\n out TFullPath,\n out TAllParams,\n out TFullSearchSchema,\n out TLoaderData,\n out TAllContext,\n out TLoaderDeps,\n> {\n id: string\n routeId: TRouteId\n fullPath: TFullPath\n index: number\n pathname: string\n params: TAllParams\n _strictParams: TAllParams\n status: 'pending' | 'success' | 'error' | 'redirected' | 'notFound'\n isFetching: false | 'beforeLoad' | 'loader'\n error: unknown\n paramsError: unknown\n searchError: unknown\n updatedAt: number\n loadPromise?: ControlledPromise<void>\n beforeLoadPromise?: ControlledPromise<void>\n loaderPromise?: ControlledPromise<void>\n loaderData?: TLoaderData\n __routeContext: Record<string, unknown>\n __beforeLoadContext: Record<string, unknown>\n context: TAllContext\n search: TFullSearchSchema\n _strictSearch: TFullSearchSchema\n fetchCount: number\n abortController: AbortController\n cause: 'preload' | 'enter' | 'stay'\n loaderDeps: TLoaderDeps\n preload: boolean\n invalid: boolean\n meta?: Array<Solid.JSX.IntrinsicElements['meta'] | undefined>\n links?: Array<Solid.JSX.IntrinsicElements['link'] | undefined>\n scripts?: Array<Solid.JSX.IntrinsicElements['script'] | undefined>\n headScripts?: Array<Solid.JSX.IntrinsicElements['script'] | undefined>\n headers?: Record<string, string>\n globalNotFound?: boolean\n staticData: StaticDataRouteOption\n minPendingPromise?: ControlledPromise<void>\n pendingTimeout?: ReturnType<typeof setTimeout>\n}\n\nexport type MakeRouteMatch<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TRouteId = RouteIds<TRouteTree>,\n TStrict extends boolean = true,\n> = RouteMatch<\n TRouteId,\n RouteById<TRouteTree, TRouteId>['types']['fullPath'],\n TStrict extends false\n ? AllParams<TRouteTree>\n : RouteById<TRouteTree, TRouteId>['types']['allParams'],\n TStrict extends false\n ? FullSearchSchema<TRouteTree>\n : RouteById<TRouteTree, TRouteId>['types']['fullSearchSchema'],\n TStrict extends false\n ? AllLoaderData<TRouteTree>\n : RouteById<TRouteTree, TRouteId>['types']['loaderData'],\n TStrict extends false\n ? AllContext<TRouteTree>\n : RouteById<TRouteTree, TRouteId>['types']['allContext'],\n RouteById<TRouteTree, TRouteId>['types']['loaderDeps']\n>\n\nexport type AnyRouteMatch = RouteMatch<any, any, any, any, any, any, any>\n\nexport function Matches() {\n const router = useRouter()\n\n const pendingElement = router.options.defaultPendingComponent ? (\n <router.options.defaultPendingComponent />\n ) : null\n\n // Do not render a root Suspense during SSR or hydrating from SSR\n const ResolvedSuspense =\n router.isServer || (typeof document !== 'undefined' && router.clientSsr)\n ? SafeFragment\n : Solid.Suspense\n\n const inner = (\n <ResolvedSuspense fallback={pendingElement}>\n <Transitioner />\n <MatchesInner />\n </ResolvedSuspense>\n )\n\n return router.options.InnerWrap ? (\n <router.options.InnerWrap>{inner}</router.options.InnerWrap>\n ) : (\n inner\n )\n}\n\nfunction MatchesInner() {\n const matchId = useRouterState({\n select: (s) => {\n return s.matches[0]?.id\n },\n })\n\n const resetKey = useRouterState({\n select: (s) => s.loadedAt,\n })\n\n return (\n <matchContext.Provider value={matchId}>\n <CatchBoundary\n getResetKey={() => resetKey()}\n errorComponent={ErrorComponent}\n onCatch={(error) => {\n warning(\n false,\n `The following error wasn't caught by any route! At the very least, consider setting an 'errorComponent' in your RootRoute!`,\n )\n warning(false, error.message || error.toString())\n }}\n >\n {matchId() ? <Match matchId={matchId()!} /> : null}\n </CatchBoundary>\n </matchContext.Provider>\n )\n}\n\nexport interface MatchRouteOptions {\n pending?: boolean\n caseSensitive?: boolean\n includeSearch?: boolean\n fuzzy?: boolean\n}\n\nexport type UseMatchRouteOptions<\n TRouter extends AnyRouter = RegisteredRouter,\n TFrom extends string = string,\n TTo extends string | undefined = undefined,\n TMaskFrom extends string = TFrom,\n TMaskTo extends string = '',\n> = ToSubOptionsProps<TRouter, TFrom, TTo> &\n DeepPartial<MakeOptionalSearchParams<TRouter, TFrom, TTo>> &\n DeepPartial<MakeOptionalPathParams<TRouter, TFrom, TTo>> &\n MaskOptions<TRouter, TMaskFrom, TMaskTo> &\n MatchRouteOptions\n\nexport function useMatchRoute<TRouter extends AnyRouter = RegisteredRouter>() {\n const router = useRouter()\n\n const status = useRouterState({\n select: (s) => s.status,\n })\n\n return <\n const TFrom extends string = string,\n const TTo extends string | undefined = undefined,\n const TMaskFrom extends string = TFrom,\n const TMaskTo extends string = '',\n >(\n opts: UseMatchRouteOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo>,\n ): Solid.Accessor<\n false | ResolveRoute<TRouter, TFrom, TTo>['types']['allParams']\n > => {\n const { pending, caseSensitive, fuzzy, includeSearch, ...rest } = opts\n\n const matchRoute = Solid.createMemo(() => {\n status()\n return router.matchRoute(rest as any, {\n pending,\n caseSensitive,\n fuzzy,\n includeSearch,\n })\n })\n\n return matchRoute\n }\n}\n\nexport type MakeMatchRouteOptions<\n TRouter extends AnyRouter = RegisteredRouter,\n TFrom extends string = string,\n TTo extends string | undefined = undefined,\n TMaskFrom extends string = TFrom,\n TMaskTo extends string = '',\n> = UseMatchRouteOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo> & {\n // If a function is passed as a child, it will be given the `isActive` boolean to aid in further styling on the element it returns\n children?:\n | ((\n params?: RouteByPath<\n TRouter['routeTree'],\n ResolveRelativePath<TFrom, NoInfer<TTo>>\n >['types']['allParams'],\n ) => Solid.JSX.Element)\n | Solid.JSX.Element\n}\n\nexport function MatchRoute<\n TRouter extends AnyRouter = RegisteredRouter,\n const TFrom extends string = string,\n const TTo extends string | undefined = undefined,\n const TMaskFrom extends string = TFrom,\n const TMaskTo extends string = '',\n>(props: MakeMatchRouteOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo>): any {\n const status = useRouterState({\n select: (s) => s.status,\n })\n\n return (\n <Solid.Show when={status()} keyed>\n {(_) => {\n const matchRoute = useMatchRoute()\n const params = matchRoute(props as any)() as boolean\n\n if (typeof props.children === 'function') {\n return (props.children as any)(params)\n }\n\n return params ? props.children : null\n }}\n </Solid.Show>\n )\n}\n\nexport type MakeRouteMatchUnion<\n TRouter extends AnyRouter = RegisteredRouter,\n TRoute extends AnyRoute = ParseRoute<TRouter['routeTree']>,\n> = TRoute extends any\n ? RouteMatch<\n TRoute['id'],\n TRoute['fullPath'],\n TRoute['types']['allParams'],\n TRoute['types']['fullSearchSchema'],\n TRoute['types']['loaderData'],\n TRoute['types']['allContext'],\n TRoute['types']['loaderDeps']\n >\n : never\n\nexport interface UseMatchesBaseOptions<TRouter extends AnyRouter, TSelected> {\n select?: (matches: Array<MakeRouteMatchUnion<TRouter>>) => TSelected\n}\n\nexport type UseMatchesResult<\n TRouter extends AnyRouter,\n TSelected,\n> = unknown extends TSelected ? Array<MakeRouteMatchUnion<TRouter>> : TSelected\n\nexport function useMatches<\n TRouter extends AnyRouter = RegisteredRouter,\n TSelected = unknown,\n>(\n opts?: UseMatchesBaseOptions<TRouter, TSelected>,\n): Solid.Accessor<UseMatchesResult<TRouter, TSelected>> {\n return useRouterState({\n select: (state: RouterState<TRouter['routeTree']>) => {\n const matches = state.matches\n return opts?.select\n ? opts.select(matches as Array<MakeRouteMatchUnion<TRouter>>)\n : matches\n },\n } as any) as Solid.Accessor<UseMatchesResult<TRouter, TSelected>>\n}\n\nexport function useParentMatches<\n TRouter extends AnyRouter = RegisteredRouter,\n TSelected = unknown,\n>(\n opts?: UseMatchesBaseOptions<TRouter, TSelected>,\n): Solid.Accessor<UseMatchesResult<TRouter, TSelected>> {\n const contextMatchId = Solid.useContext(matchContext)\n\n return useMatches({\n select: (matches: Array<MakeRouteMatchUnion<TRouter>>) => {\n matches = matches.slice(\n 0,\n matches.findIndex((d) => d.id === contextMatchId()),\n )\n return opts?.select ? opts.select(matches) : matches\n },\n } as any)\n}\n\nexport function useChildMatches<\n TRouter extends AnyRouter = RegisteredRouter,\n TSelected = unknown,\n>(\n opts?: UseMatchesBaseOptions<TRouter, TSelected>,\n): Solid.Accessor<UseMatchesResult<TRouter, TSelected>> {\n const contextMatchId = Solid.useContext(matchContext)\n\n return useMatches({\n select: (matches: Array<MakeRouteMatchUnion<TRouter>>) => {\n matches = matches.slice(\n matches.findIndex((d) => d.id === contextMatchId()) + 1,\n )\n return opts?.select ? opts.select(matches) : matches\n },\n } as any)\n}\n"],"names":["Matches","router","useRouter","pendingElement","options","defaultPendingComponent","_$createComponent","ResolvedSuspense","isServer","document","clientSsr","SafeFragment","Solid","Suspense","inner","fallback","children","Transitioner","MatchesInner","InnerWrap","matchId","useRouterState","select","s","matches","id","resetKey","loadedAt","matchContext","Provider","value","CatchBoundary","getResetKey","errorComponent","ErrorComponent","onCatch","error","warning","message","toString","_$memo","Match","useMatchRoute","status","opts","pending","caseSensitive","fuzzy","includeSearch","rest","matchRoute","createMemo","MatchRoute","props","Show","when","keyed","_","params","useMatches","state","useParentMatches","contextMatchId","useContext","slice","findIndex","d","useChildMatches"],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { NavigateOptions, ToOptions } from './link.js';
|
|
2
|
+
import { ParsedLocation, ViewTransitionOptions } from '@tanstack/router-core';
|
|
3
|
+
import { RoutePaths } from './routeInfo.js';
|
|
4
|
+
import { AnyRouter, RegisteredRouter, Router, RouterOptions } from './router.js';
|
|
5
|
+
import type * as Solid from 'solid-js';
|
|
6
|
+
export interface CommitLocationOptions {
|
|
7
|
+
replace?: boolean;
|
|
8
|
+
resetScroll?: boolean;
|
|
9
|
+
hashScrollIntoView?: boolean | ScrollIntoViewOptions;
|
|
10
|
+
viewTransition?: boolean | ViewTransitionOptions;
|
|
11
|
+
/**
|
|
12
|
+
* @deprecated All navigations use Solid transitions under the hood now
|
|
13
|
+
**/
|
|
14
|
+
startTransition?: boolean;
|
|
15
|
+
ignoreBlocker?: boolean;
|
|
16
|
+
}
|
|
17
|
+
export interface MatchLocation {
|
|
18
|
+
to?: string | number | null;
|
|
19
|
+
fuzzy?: boolean;
|
|
20
|
+
caseSensitive?: boolean;
|
|
21
|
+
from?: string;
|
|
22
|
+
}
|
|
23
|
+
export type NavigateFn = <TRouter extends RegisteredRouter, TTo extends string | undefined, TFrom extends RoutePaths<TRouter['routeTree']> | string = string, TMaskFrom extends RoutePaths<TRouter['routeTree']> | string = TFrom, TMaskTo extends string = ''>(opts: NavigateOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo>) => Promise<void> | void;
|
|
24
|
+
export type BuildLocationFn = <TRouter extends RegisteredRouter, TTo extends string | undefined, TFrom extends RoutePaths<TRouter['routeTree']> | string = string, TMaskFrom extends RoutePaths<TRouter['routeTree']> | string = TFrom, TMaskTo extends string = ''>(opts: ToOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo> & {
|
|
25
|
+
leaveParams?: boolean;
|
|
26
|
+
_includeValidateSearch?: boolean;
|
|
27
|
+
}) => ParsedLocation;
|
|
28
|
+
export declare function RouterContextProvider<TRouter extends AnyRouter = RegisteredRouter, TDehydrated extends Record<string, any> = Record<string, any>>({ router, children, ...rest }: RouterProps<TRouter, TDehydrated> & {
|
|
29
|
+
children: () => Solid.JSX.Element;
|
|
30
|
+
}): Solid.JSX.Element;
|
|
31
|
+
export declare function RouterProvider<TRouter extends AnyRouter = RegisteredRouter, TDehydrated extends Record<string, any> = Record<string, any>>({ router, ...rest }: RouterProps<TRouter, TDehydrated>): Solid.JSX.Element;
|
|
32
|
+
export type RouterProps<TRouter extends AnyRouter = RegisteredRouter, TDehydrated extends Record<string, any> = Record<string, any>> = Omit<RouterOptions<TRouter['routeTree'], NonNullable<TRouter['options']['trailingSlash']>, TRouter['history'], TDehydrated>, 'context'> & {
|
|
33
|
+
router: Router<TRouter['routeTree'], NonNullable<TRouter['options']['trailingSlash']>, TRouter['history']>;
|
|
34
|
+
context?: Partial<RouterOptions<TRouter['routeTree'], NonNullable<TRouter['options']['trailingSlash']>, TRouter['history'], TDehydrated>['context']>;
|
|
35
|
+
};
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { createComponent, mergeProps } from "solid-js/web";
|
|
2
|
+
import { Matches } from "./Matches.js";
|
|
3
|
+
import { getRouterContext } from "./routerContext.js";
|
|
4
|
+
function RouterContextProvider({
|
|
5
|
+
router,
|
|
6
|
+
children,
|
|
7
|
+
...rest
|
|
8
|
+
}) {
|
|
9
|
+
router.update({
|
|
10
|
+
...router.options,
|
|
11
|
+
...rest,
|
|
12
|
+
context: {
|
|
13
|
+
...router.options.context,
|
|
14
|
+
...rest.context
|
|
15
|
+
}
|
|
16
|
+
});
|
|
17
|
+
const routerContext = getRouterContext();
|
|
18
|
+
const provider = createComponent(routerContext.Provider, {
|
|
19
|
+
value: router,
|
|
20
|
+
get children() {
|
|
21
|
+
return children();
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
if (router.options.Wrap) {
|
|
25
|
+
return createComponent(router.options.Wrap, {
|
|
26
|
+
children: provider
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
return provider;
|
|
30
|
+
}
|
|
31
|
+
function RouterProvider({
|
|
32
|
+
router,
|
|
33
|
+
...rest
|
|
34
|
+
}) {
|
|
35
|
+
return createComponent(RouterContextProvider, mergeProps({
|
|
36
|
+
router
|
|
37
|
+
}, rest, {
|
|
38
|
+
children: () => createComponent(Matches, {})
|
|
39
|
+
}));
|
|
40
|
+
}
|
|
41
|
+
export {
|
|
42
|
+
RouterContextProvider,
|
|
43
|
+
RouterProvider
|
|
44
|
+
};
|
|
45
|
+
//# sourceMappingURL=RouterProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RouterProvider.js","sources":["../../src/RouterProvider.tsx"],"sourcesContent":["import { Matches } from './Matches'\nimport { getRouterContext } from './routerContext'\nimport type * as Solid from 'solid-js'\nimport type { NavigateOptions, ToOptions } from './link'\nimport type {\n ParsedLocation,\n ViewTransitionOptions,\n} from '@tanstack/router-core'\nimport type { RoutePaths } from './routeInfo'\nimport type {\n AnyRouter,\n RegisteredRouter,\n Router,\n RouterOptions,\n} from './router'\n\nexport interface CommitLocationOptions {\n replace?: boolean\n resetScroll?: boolean\n hashScrollIntoView?: boolean | ScrollIntoViewOptions\n viewTransition?: boolean | ViewTransitionOptions\n /**\n * @deprecated All navigations use Solid transitions under the hood now\n **/\n startTransition?: boolean\n ignoreBlocker?: boolean\n}\n\nexport interface MatchLocation {\n to?: string | number | null\n fuzzy?: boolean\n caseSensitive?: boolean\n from?: string\n}\n\nexport type NavigateFn = <\n TRouter extends RegisteredRouter,\n TTo extends string | undefined,\n TFrom extends RoutePaths<TRouter['routeTree']> | string = string,\n TMaskFrom extends RoutePaths<TRouter['routeTree']> | string = TFrom,\n TMaskTo extends string = '',\n>(\n opts: NavigateOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo>,\n) => Promise<void> | void\n\nexport type BuildLocationFn = <\n TRouter extends RegisteredRouter,\n TTo extends string | undefined,\n TFrom extends RoutePaths<TRouter['routeTree']> | string = string,\n TMaskFrom extends RoutePaths<TRouter['routeTree']> | string = TFrom,\n TMaskTo extends string = '',\n>(\n opts: ToOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo> & {\n leaveParams?: boolean\n _includeValidateSearch?: boolean\n },\n) => ParsedLocation\n\nexport function RouterContextProvider<\n TRouter extends AnyRouter = RegisteredRouter,\n TDehydrated extends Record<string, any> = Record<string, any>,\n>({\n router,\n children,\n ...rest\n}: RouterProps<TRouter, TDehydrated> & {\n children: () => Solid.JSX.Element\n}) {\n // Allow the router to update options on the router instance\n router.update({\n ...router.options,\n ...rest,\n context: {\n ...router.options.context,\n ...rest.context,\n },\n } as any)\n\n const routerContext = getRouterContext()\n\n const provider = (\n <routerContext.Provider value={router as AnyRouter}>\n {children()}\n </routerContext.Provider>\n )\n\n if (router.options.Wrap) {\n return <router.options.Wrap>{provider}</router.options.Wrap>\n }\n\n return provider\n}\n\nexport function RouterProvider<\n TRouter extends AnyRouter = RegisteredRouter,\n TDehydrated extends Record<string, any> = Record<string, any>,\n>({ router, ...rest }: RouterProps<TRouter, TDehydrated>) {\n return (\n <RouterContextProvider router={router} {...rest}>\n {() => <Matches />}\n </RouterContextProvider>\n )\n}\n\nexport type RouterProps<\n TRouter extends AnyRouter = RegisteredRouter,\n TDehydrated extends Record<string, any> = Record<string, any>,\n> = Omit<\n RouterOptions<\n TRouter['routeTree'],\n NonNullable<TRouter['options']['trailingSlash']>,\n TRouter['history'],\n TDehydrated\n >,\n 'context'\n> & {\n router: Router<\n TRouter['routeTree'],\n NonNullable<TRouter['options']['trailingSlash']>,\n TRouter['history']\n >\n context?: Partial<\n RouterOptions<\n TRouter['routeTree'],\n NonNullable<TRouter['options']['trailingSlash']>,\n TRouter['history'],\n TDehydrated\n >['context']\n >\n}\n"],"names":["RouterContextProvider","router","children","rest","update","options","context","routerContext","getRouterContext","provider","_$createComponent","Provider","value","Wrap","RouterProvider","_$mergeProps","Matches"],"mappings":";;;AA0DO,SAASA,sBAGd;AAAA,EACAC;AAAAA,EACAC;AAAAA,EACA,GAAGC;AAGL,GAAG;AAEDF,SAAOG,OAAO;AAAA,IACZ,GAAGH,OAAOI;AAAAA,IACV,GAAGF;AAAAA,IACHG,SAAS;AAAA,MACP,GAAGL,OAAOI,QAAQC;AAAAA,MAClB,GAAGH,KAAKG;AAAAA,IAAAA;AAAAA,EACV,CACM;AAER,QAAMC,gBAAgBC,iBAAiB;AAEjCC,QAAAA,WAAQC,gBACXH,cAAcI,UAAQ;AAAA,IAACC,OAAOX;AAAAA,IAAmB,IAAAC,WAAA;AAAA,aAC/CA,SAAS;AAAA,IAAA;AAAA,EAAC,CAEd;AAEGD,MAAAA,OAAOI,QAAQQ,MAAM;AACvBH,WAAAA,gBAAQT,OAAOI,QAAQQ,MAAI;AAAA,MAAAX,UAAEO;AAAAA,IAAAA,CAAQ;AAAA,EAAA;AAGhCA,SAAAA;AACT;AAEO,SAASK,eAGd;AAAA,EAAEb;AAAAA,EAAQ,GAAGE;AAAwC,GAAG;AACxDO,SAAAA,gBACGV,uBAAqBe,WAAA;AAAA,IAACd;AAAAA,KAAoBE,MAAI;AAAA,IAAAD,UAC5CA,MAAAQ,gBAAOM,SAAO,CAAA,CAAA;AAAA,EAAA,CAAG,CAAA;AAGxB;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function SafeFragment(props: any): import("solid-js").JSX.Element;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SafeFragment.js","sources":["../../src/SafeFragment.tsx"],"sourcesContent":["export function SafeFragment(props: any) {\n return <>{props.children}</>\n}\n"],"names":["SafeFragment","props","_$memo","children"],"mappings":";AAAO,SAASA,aAAaC,OAAY;AACvCC,SAAAA,KAAA,MAAUD,MAAME,QAAQ;AAC1B;"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { template, effect } from "solid-js/web";
|
|
2
|
+
import jsesc from "jsesc";
|
|
3
|
+
var _tmpl$ = /* @__PURE__ */ template(`<script class=tsr-once>`);
|
|
4
|
+
function ScriptOnce({
|
|
5
|
+
children,
|
|
6
|
+
log
|
|
7
|
+
}) {
|
|
8
|
+
if (typeof document !== "undefined") {
|
|
9
|
+
return null;
|
|
10
|
+
}
|
|
11
|
+
return (() => {
|
|
12
|
+
var _el$ = _tmpl$();
|
|
13
|
+
effect(() => _el$.innerHTML = [children, (log ?? true) && process.env.NODE_ENV === "development" ? `console.info(\`Injected From Server:
|
|
14
|
+
${jsesc(children.toString(), {
|
|
15
|
+
quotes: "backtick"
|
|
16
|
+
})}\`)` : "", 'if (typeof __TSR_SSR__ !== "undefined") __TSR_SSR__.cleanScripts()'].filter(Boolean).join("\n"));
|
|
17
|
+
return _el$;
|
|
18
|
+
})();
|
|
19
|
+
}
|
|
20
|
+
export {
|
|
21
|
+
ScriptOnce
|
|
22
|
+
};
|
|
23
|
+
//# sourceMappingURL=ScriptOnce.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ScriptOnce.js","sources":["../../src/ScriptOnce.tsx"],"sourcesContent":["import jsesc from 'jsesc'\n\nexport function ScriptOnce({\n children,\n log,\n}: {\n children: string\n log?: boolean\n sync?: boolean\n}) {\n if (typeof document !== 'undefined') {\n return null\n }\n\n return (\n <script\n class=\"tsr-once\"\n innerHTML={[\n children,\n (log ?? true) && process.env.NODE_ENV === 'development'\n ? `console.info(\\`Injected From Server:\n${jsesc(children.toString(), { quotes: 'backtick' })}\\`)`\n : '',\n 'if (typeof __TSR_SSR__ !== \"undefined\") __TSR_SSR__.cleanScripts()',\n ]\n .filter(Boolean)\n .join('\\n')}\n />\n )\n}\n"],"names":["ScriptOnce","children","log","document","_el$","_tmpl$","_$effect","innerHTML","process","env","NODE_ENV","jsesc","toString","quotes","filter","Boolean","join"],"mappings":";;;AAEO,SAASA,WAAW;AAAA,EACzBC;AAAAA,EACAC;AAKF,GAAG;AACG,MAAA,OAAOC,aAAa,aAAa;AAC5B,WAAA;AAAA,EAAA;AAGT,UAAA,MAAA;AAAA,QAAAC,OAAAC,OAAA;AAAAC,WAAA,MAAAF,KAAAG,YAGe,CACTN,WACCC,OAAO,SAASM,QAAQC,IAAIC,aAAa,gBACtC;AAAA,EACVC,MAAMV,SAASW,YAAY;AAAA,MAAEC,QAAQ;AAAA,IAAA,CAAY,CAAC,QACxC,IACJ,oEAAoE,EAEnEC,OAAOC,OAAO,EACdC,KAAK,IAAI,CAAC;AAAAZ,WAAAA;AAAAA,EAAAA,GAAA;AAGnB;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const Scripts: () => import("solid-js").JSX.Element;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { memo, createComponent } from "solid-js/web";
|
|
2
|
+
import { Asset } from "./Asset.js";
|
|
3
|
+
import { useRouterState } from "./useRouterState.js";
|
|
4
|
+
import { useRouter } from "./useRouter.js";
|
|
5
|
+
const Scripts = () => {
|
|
6
|
+
const router = useRouter();
|
|
7
|
+
const assetScripts = useRouterState({
|
|
8
|
+
select: (state) => {
|
|
9
|
+
var _a;
|
|
10
|
+
const assetScripts2 = [];
|
|
11
|
+
const manifest = (_a = router.ssr) == null ? void 0 : _a.manifest;
|
|
12
|
+
if (!manifest) {
|
|
13
|
+
return [];
|
|
14
|
+
}
|
|
15
|
+
state.matches.map((match) => router.looseRoutesById[match.routeId]).forEach((route) => {
|
|
16
|
+
var _a2, _b;
|
|
17
|
+
return (_b = (_a2 = manifest.routes[route.id]) == null ? void 0 : _a2.assets) == null ? void 0 : _b.filter((d) => d.tag === "script").forEach((asset) => {
|
|
18
|
+
assetScripts2.push({
|
|
19
|
+
tag: "script",
|
|
20
|
+
attrs: asset.attrs,
|
|
21
|
+
children: asset.children
|
|
22
|
+
});
|
|
23
|
+
});
|
|
24
|
+
});
|
|
25
|
+
return assetScripts2;
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
const scripts = useRouterState({
|
|
29
|
+
select: (state) => ({
|
|
30
|
+
scripts: state.matches.map((match) => match.scripts).flat(1).filter(Boolean).map(({
|
|
31
|
+
children,
|
|
32
|
+
...script
|
|
33
|
+
}) => ({
|
|
34
|
+
tag: "script",
|
|
35
|
+
attrs: {
|
|
36
|
+
...script
|
|
37
|
+
},
|
|
38
|
+
children
|
|
39
|
+
}))
|
|
40
|
+
})
|
|
41
|
+
});
|
|
42
|
+
const allScripts = [...scripts().scripts, ...assetScripts()];
|
|
43
|
+
return memo(() => allScripts.map((asset, i) => createComponent(Asset, asset)));
|
|
44
|
+
};
|
|
45
|
+
export {
|
|
46
|
+
Scripts
|
|
47
|
+
};
|
|
48
|
+
//# sourceMappingURL=Scripts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Scripts.js","sources":["../../src/Scripts.tsx"],"sourcesContent":["import { Asset } from './Asset'\nimport { useRouterState } from './useRouterState'\nimport { useRouter } from './useRouter'\nimport type { RouterManagedTag } from '@tanstack/router-core'\n\nexport const Scripts = () => {\n const router = useRouter()\n\n const assetScripts = useRouterState({\n select: (state) => {\n const assetScripts: Array<RouterManagedTag> = []\n const manifest = router.ssr?.manifest\n\n if (!manifest) {\n return []\n }\n\n state.matches\n .map((match) => router.looseRoutesById[match.routeId]!)\n .forEach((route) =>\n manifest.routes[route.id]?.assets\n ?.filter((d) => d.tag === 'script')\n .forEach((asset) => {\n assetScripts.push({\n tag: 'script',\n attrs: asset.attrs,\n children: asset.children,\n } as any)\n }),\n )\n\n return assetScripts\n },\n })\n\n const scripts = useRouterState({\n select: (state) => ({\n scripts: (\n state.matches\n .map((match) => match.scripts!)\n .flat(1)\n .filter(Boolean) as Array<RouterManagedTag>\n ).map(({ children, ...script }) => ({\n tag: 'script',\n attrs: {\n ...script,\n },\n children,\n })),\n }),\n })\n\n const allScripts = [\n ...scripts().scripts,\n ...assetScripts(),\n ] as Array<RouterManagedTag>\n\n return (\n <>\n {allScripts.map((asset, i) => (\n <Asset {...asset} />\n ))}\n </>\n )\n}\n"],"names":["Scripts","router","useRouter","assetScripts","useRouterState","select","state","manifest","ssr","matches","map","match","looseRoutesById","routeId","forEach","route","routes","id","assets","filter","d","tag","asset","push","attrs","children","scripts","flat","Boolean","script","allScripts","_$memo","i","_$createComponent","Asset"],"mappings":";;;;AAKO,MAAMA,UAAUA,MAAM;AAC3B,QAAMC,SAASC,UAAU;AAEzB,QAAMC,eAAeC,eAAe;AAAA,IAClCC,QAASC,CAAU,UAAA;;AACjB,YAAMH,gBAAwC,CAAE;AAC1CI,YAAAA,YAAWN,YAAOO,QAAPP,mBAAYM;AAE7B,UAAI,CAACA,UAAU;AACb,eAAO,CAAE;AAAA,MAAA;AAGLE,YAAAA,QACHC,IAAKC,CAAAA,UAAUV,OAAOW,gBAAgBD,MAAME,OAAO,CAAE,EACrDC,QAASC,CACRR,UAAAA;;AAAAA,sBAAAA,MAAAA,SAASS,OAAOD,MAAME,EAAE,MAAxBV,gBAAAA,IAA2BW,WAA3BX,mBACIY,OAAQC,CAAAA,MAAMA,EAAEC,QAAQ,UACzBP,QAASQ,CAAU,UAAA;AAClBnB,wBAAaoB,KAAK;AAAA,YAChBF,KAAK;AAAA,YACLG,OAAOF,MAAME;AAAAA,YACbC,UAAUH,MAAMG;AAAAA,UAAAA,CACV;AAAA,QAAA;AAAA,OAEd;AAEKtB,aAAAA;AAAAA,IAAAA;AAAAA,EACT,CACD;AAED,QAAMuB,UAAUtB,eAAe;AAAA,IAC7BC,QAASC,CAAW,WAAA;AAAA,MAClBoB,SACEpB,MAAMG,QACHC,IAAKC,WAAUA,MAAMe,OAAQ,EAC7BC,KAAK,CAAC,EACNR,OAAOS,OAAO,EACjBlB,IAAI,CAAC;AAAA,QAAEe;AAAAA,QAAU,GAAGI;AAAAA,MAAAA,OAAc;AAAA,QAClCR,KAAK;AAAA,QACLG,OAAO;AAAA,UACL,GAAGK;AAAAA,QACL;AAAA,QACAJ;AAAAA,MAAAA,EACA;AAAA,IACJ;AAAA,EAAA,CACD;AAEKK,QAAAA,aAAa,CACjB,GAAGJ,UAAUA,SACb,GAAGvB,cAAc;AAGnB4B,SAAAA,KAEKD,MAAAA,WAAWpB,IAAI,CAACY,OAAOU,MAACC,gBACtBC,OAAUZ,KAAK,CACjB,CAAC;AAGR;"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { ScrollRestorationOptions } from './scroll-restoration.js';
|
|
2
|
+
import { ParsedLocation } from '@tanstack/router-core';
|
|
3
|
+
/**
|
|
4
|
+
* @deprecated use createRouter's `scrollRestoration` option instead
|
|
5
|
+
*/
|
|
6
|
+
export declare function ScrollRestoration(_props: ScrollRestorationOptions): null;
|
|
7
|
+
export declare function useElementScrollRestoration(options: ({
|
|
8
|
+
id: string;
|
|
9
|
+
getElement?: () => Element | undefined | null;
|
|
10
|
+
} | {
|
|
11
|
+
id?: string;
|
|
12
|
+
getElement: () => Element | undefined | null;
|
|
13
|
+
}) & {
|
|
14
|
+
getKey?: (location: ParsedLocation) => string;
|
|
15
|
+
}): import('./scroll-restoration.js').ScrollRestorationEntry | undefined;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { useRouter } from "./useRouter.js";
|
|
2
|
+
import { defaultGetScrollRestorationKey, getCssSelector, scrollRestorationCache, setupScrollRestoration } from "./scroll-restoration.js";
|
|
3
|
+
function useScrollRestoration() {
|
|
4
|
+
const router = useRouter();
|
|
5
|
+
setupScrollRestoration(router, true);
|
|
6
|
+
}
|
|
7
|
+
function ScrollRestoration(_props) {
|
|
8
|
+
useScrollRestoration();
|
|
9
|
+
if (process.env.NODE_ENV === "development") {
|
|
10
|
+
console.warn("The ScrollRestoration component is deprecated. Use createRouter's `scrollRestoration` option instead.");
|
|
11
|
+
}
|
|
12
|
+
return null;
|
|
13
|
+
}
|
|
14
|
+
function useElementScrollRestoration(options) {
|
|
15
|
+
var _a;
|
|
16
|
+
useScrollRestoration();
|
|
17
|
+
const router = useRouter();
|
|
18
|
+
const getKey = options.getKey || defaultGetScrollRestorationKey;
|
|
19
|
+
let elementSelector = "";
|
|
20
|
+
if (options.id) {
|
|
21
|
+
elementSelector = `[data-scroll-restoration-id="${options.id}"]`;
|
|
22
|
+
} else {
|
|
23
|
+
const element = (_a = options.getElement) == null ? void 0 : _a.call(options);
|
|
24
|
+
if (!element) {
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
elementSelector = getCssSelector(element);
|
|
28
|
+
}
|
|
29
|
+
const restoreKey = getKey(router.latestLocation);
|
|
30
|
+
const byKey = scrollRestorationCache.state[restoreKey];
|
|
31
|
+
return byKey == null ? void 0 : byKey[elementSelector];
|
|
32
|
+
}
|
|
33
|
+
export {
|
|
34
|
+
ScrollRestoration,
|
|
35
|
+
useElementScrollRestoration
|
|
36
|
+
};
|
|
37
|
+
//# sourceMappingURL=ScrollRestoration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ScrollRestoration.js","sources":["../../src/ScrollRestoration.tsx"],"sourcesContent":["import { useRouter } from './useRouter'\nimport {\n defaultGetScrollRestorationKey,\n getCssSelector,\n scrollRestorationCache,\n setupScrollRestoration,\n} from './scroll-restoration'\nimport type { ScrollRestorationOptions } from './scroll-restoration'\nimport type { ParsedLocation } from '@tanstack/router-core'\n\nfunction useScrollRestoration() {\n const router = useRouter()\n setupScrollRestoration(router, true)\n}\n\n/**\n * @deprecated use createRouter's `scrollRestoration` option instead\n */\nexport function ScrollRestoration(_props: ScrollRestorationOptions) {\n useScrollRestoration()\n\n if (process.env.NODE_ENV === 'development') {\n console.warn(\n \"The ScrollRestoration component is deprecated. Use createRouter's `scrollRestoration` option instead.\",\n )\n }\n\n return null\n}\n\nexport function useElementScrollRestoration(\n options: (\n | {\n id: string\n getElement?: () => Element | undefined | null\n }\n | {\n id?: string\n getElement: () => Element | undefined | null\n }\n ) & {\n getKey?: (location: ParsedLocation) => string\n },\n) {\n useScrollRestoration()\n\n const router = useRouter()\n const getKey = options.getKey || defaultGetScrollRestorationKey\n\n let elementSelector = ''\n\n if (options.id) {\n elementSelector = `[data-scroll-restoration-id=\"${options.id}\"]`\n } else {\n const element = options.getElement?.()\n if (!element) {\n return\n }\n elementSelector = getCssSelector(element)\n }\n\n const restoreKey = getKey(router.latestLocation)\n const byKey = scrollRestorationCache.state[restoreKey]\n return byKey?.[elementSelector]\n}\n"],"names":["useScrollRestoration","router","useRouter","setupScrollRestoration","ScrollRestoration","_props","process","env","NODE_ENV","console","warn","useElementScrollRestoration","options","getKey","defaultGetScrollRestorationKey","elementSelector","id","element","getElement","getCssSelector","restoreKey","latestLocation","byKey","scrollRestorationCache","state"],"mappings":";;AAUA,SAASA,uBAAuB;AAC9B,QAAMC,SAASC,UAAU;AACzBC,yBAAuBF,QAAQ,IAAI;AACrC;AAKO,SAASG,kBAAkBC,QAAkC;AAC7C,uBAAA;AAEjBC,MAAAA,QAAQC,IAAIC,aAAa,eAAe;AAC1CC,YAAQC,KACN,uGACF;AAAA,EAAA;AAGK,SAAA;AACT;AAEO,SAASC,4BACdC,SAYA;;AACqB,uBAAA;AAErB,QAAMX,SAASC,UAAU;AACnBW,QAAAA,SAASD,QAAQC,UAAUC;AAEjC,MAAIC,kBAAkB;AAEtB,MAAIH,QAAQI,IAAI;AACI,sBAAA,gCAAgCJ,QAAQI,EAAE;AAAA,EAAA,OACvD;AACCC,UAAAA,WAAUL,aAAQM,eAARN;AAChB,QAAI,CAACK,SAAS;AACZ;AAAA,IAAA;AAEFF,sBAAkBI,eAAeF,OAAO;AAAA,EAAA;AAGpCG,QAAAA,aAAaP,OAAOZ,OAAOoB,cAAc;AACzCC,QAAAA,QAAQC,uBAAuBC,MAAMJ,UAAU;AACrD,SAAOE,+BAAQP;AACjB;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function Transitioner(): null;
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import * as Solid from "solid-js";
|
|
2
|
+
import { trimPathRight, getLocationChangeInfo } from "@tanstack/router-core";
|
|
3
|
+
import { useRouter } from "./useRouter.js";
|
|
4
|
+
import { useRouterState } from "./useRouterState.js";
|
|
5
|
+
import { usePrevious } from "./utils.js";
|
|
6
|
+
function Transitioner() {
|
|
7
|
+
const router = useRouter();
|
|
8
|
+
let mountLoadForRouter = {
|
|
9
|
+
router,
|
|
10
|
+
mounted: false
|
|
11
|
+
};
|
|
12
|
+
const isLoading = useRouterState({
|
|
13
|
+
select: ({
|
|
14
|
+
isLoading: isLoading2
|
|
15
|
+
}) => isLoading2
|
|
16
|
+
});
|
|
17
|
+
const [isTransitioning, setIsTransitioning] = Solid.createSignal(false);
|
|
18
|
+
const hasPendingMatches = useRouterState({
|
|
19
|
+
select: (s) => s.matches.some((d) => d.status === "pending")
|
|
20
|
+
});
|
|
21
|
+
const previousIsLoading = usePrevious(isLoading);
|
|
22
|
+
const isAnyPending = () => isLoading() || isTransitioning() || hasPendingMatches();
|
|
23
|
+
const previousIsAnyPending = usePrevious(isAnyPending);
|
|
24
|
+
const isPagePending = () => isLoading() || hasPendingMatches();
|
|
25
|
+
const previousIsPagePending = usePrevious(isPagePending);
|
|
26
|
+
if (!router.isServer) {
|
|
27
|
+
router.startSolidTransition = (fn) => {
|
|
28
|
+
setIsTransitioning(true);
|
|
29
|
+
fn();
|
|
30
|
+
setIsTransitioning(false);
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
Solid.onMount(() => {
|
|
34
|
+
const unsub = router.history.subscribe(router.load);
|
|
35
|
+
const nextLocation = router.buildLocation({
|
|
36
|
+
to: router.latestLocation.pathname,
|
|
37
|
+
search: true,
|
|
38
|
+
params: true,
|
|
39
|
+
hash: true,
|
|
40
|
+
state: true,
|
|
41
|
+
_includeValidateSearch: true
|
|
42
|
+
});
|
|
43
|
+
if (trimPathRight(router.latestLocation.href) !== trimPathRight(nextLocation.href)) {
|
|
44
|
+
router.commitLocation({
|
|
45
|
+
...nextLocation,
|
|
46
|
+
replace: true
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
Solid.onCleanup(() => {
|
|
50
|
+
unsub();
|
|
51
|
+
});
|
|
52
|
+
});
|
|
53
|
+
Solid.createRenderEffect(() => {
|
|
54
|
+
Solid.untrack(() => {
|
|
55
|
+
if (typeof window !== "undefined" && router.clientSsr || mountLoadForRouter.router === router && mountLoadForRouter.mounted) {
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
mountLoadForRouter = {
|
|
59
|
+
router,
|
|
60
|
+
mounted: true
|
|
61
|
+
};
|
|
62
|
+
const tryLoad = async () => {
|
|
63
|
+
try {
|
|
64
|
+
await router.load();
|
|
65
|
+
} catch (err) {
|
|
66
|
+
console.error(err);
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
tryLoad();
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
Solid.createRenderEffect(Solid.on([previousIsLoading, isLoading], ([previousIsLoading2, isLoading2]) => {
|
|
73
|
+
if (previousIsLoading2.previous && !isLoading2) {
|
|
74
|
+
router.emit({
|
|
75
|
+
type: "onLoad",
|
|
76
|
+
...getLocationChangeInfo(router.state)
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
}));
|
|
80
|
+
Solid.createRenderEffect(Solid.on([isPagePending, previousIsPagePending], ([isPagePending2, previousIsPagePending2]) => {
|
|
81
|
+
if (previousIsPagePending2.previous && !isPagePending2) {
|
|
82
|
+
router.emit({
|
|
83
|
+
type: "onBeforeRouteMount",
|
|
84
|
+
...getLocationChangeInfo(router.state)
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
}));
|
|
88
|
+
Solid.createRenderEffect(Solid.on([isAnyPending, previousIsAnyPending], ([isAnyPending2, previousIsAnyPending2]) => {
|
|
89
|
+
if (previousIsAnyPending2.previous && !isAnyPending2) {
|
|
90
|
+
router.emit({
|
|
91
|
+
type: "onResolved",
|
|
92
|
+
...getLocationChangeInfo(router.state)
|
|
93
|
+
});
|
|
94
|
+
router.__store.setState((s) => ({
|
|
95
|
+
...s,
|
|
96
|
+
status: "idle",
|
|
97
|
+
resolvedLocation: s.location
|
|
98
|
+
}));
|
|
99
|
+
if (typeof document !== "undefined" && document.querySelector) {
|
|
100
|
+
const hashScrollIntoViewOptions = router.state.location.state.__hashScrollIntoViewOptions ?? true;
|
|
101
|
+
if (hashScrollIntoViewOptions && router.state.location.hash !== "") {
|
|
102
|
+
const el = document.getElementById(router.state.location.hash);
|
|
103
|
+
if (el) {
|
|
104
|
+
el.scrollIntoView(hashScrollIntoViewOptions);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}));
|
|
110
|
+
return null;
|
|
111
|
+
}
|
|
112
|
+
export {
|
|
113
|
+
Transitioner
|
|
114
|
+
};
|
|
115
|
+
//# sourceMappingURL=Transitioner.js.map
|