@tanstack/solid-router 1.20.3-alpha.1
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 +49 -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/ClientOnly.cjs +36 -0
- package/dist/cjs/ClientOnly.cjs.map +1 -0
- package/dist/cjs/ClientOnly.d.cts +49 -0
- package/dist/cjs/HeadContent.cjs +146 -0
- package/dist/cjs/HeadContent.cjs.map +1 -0
- package/dist/cjs/HeadContent.d.cts +8 -0
- package/dist/cjs/Match.cjs +339 -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 +24 -0
- package/dist/cjs/RouterProvider.cjs +45 -0
- package/dist/cjs/RouterProvider.cjs.map +1 -0
- package/dist/cjs/RouterProvider.d.cts +10 -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 +14 -0
- package/dist/cjs/Transitioner.cjs +124 -0
- package/dist/cjs/Transitioner.cjs.map +1 -0
- package/dist/cjs/Transitioner.d.cts +1 -0
- package/dist/cjs/awaited.cjs +49 -0
- package/dist/cjs/awaited.cjs.map +1 -0
- package/dist/cjs/awaited.d.cts +11 -0
- package/dist/cjs/fileRoute.cjs +103 -0
- package/dist/cjs/fileRoute.cjs.map +1 -0
- package/dist/cjs/fileRoute.d.cts +54 -0
- package/dist/cjs/history.d.cts +8 -0
- package/dist/cjs/index.cjs +289 -0
- package/dist/cjs/index.cjs.map +1 -0
- package/dist/cjs/index.d.cts +52 -0
- package/dist/cjs/lazyRouteComponent.cjs +73 -0
- package/dist/cjs/lazyRouteComponent.cjs.map +1 -0
- package/dist/cjs/lazyRouteComponent.d.cts +2 -0
- package/dist/cjs/link.cjs +278 -0
- package/dist/cjs/link.cjs.map +1 -0
- package/dist/cjs/link.d.cts +44 -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 +42 -0
- package/dist/cjs/not-found.cjs.map +1 -0
- package/dist/cjs/not-found.d.cts +8 -0
- package/dist/cjs/renderRouteNotFound.cjs +23 -0
- package/dist/cjs/renderRouteNotFound.cjs.map +1 -0
- package/dist/cjs/renderRouteNotFound.d.cts +2 -0
- package/dist/cjs/route.cjs +236 -0
- package/dist/cjs/route.cjs.map +1 -0
- package/dist/cjs/route.d.cts +95 -0
- package/dist/cjs/router.cjs +22 -0
- package/dist/cjs/router.cjs.map +1 -0
- package/dist/cjs/router.d.cts +69 -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 +23 -0
- package/dist/cjs/scroll-restoration.cjs.map +1 -0
- package/dist/cjs/scroll-restoration.d.cts +1 -0
- package/dist/cjs/typePrimitives.d.cts +10 -0
- package/dist/cjs/useBlocker.cjs +165 -0
- package/dist/cjs/useBlocker.cjs.map +1 -0
- package/dist/cjs/useBlocker.d.cts +67 -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 +8 -0
- package/dist/cjs/useLoaderDeps.cjs +17 -0
- package/dist/cjs/useLoaderDeps.cjs.map +1 -0
- package/dist/cjs/useLoaderDeps.d.cts +7 -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 +10 -0
- package/dist/cjs/useNavigate.cjs +46 -0
- package/dist/cjs/useNavigate.cjs.map +1 -0
- package/dist/cjs/useNavigate.d.cts +5 -0
- package/dist/cjs/useParams.cjs +15 -0
- package/dist/cjs/useParams.cjs.map +1 -0
- package/dist/cjs/useParams.d.cts +9 -0
- package/dist/cjs/useRouteContext.cjs +11 -0
- package/dist/cjs/useRouteContext.cjs.map +1 -0
- package/dist/cjs/useRouteContext.d.cts +4 -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 +9 -0
- package/dist/cjs/utils.cjs +58 -0
- package/dist/cjs/utils.cjs.map +1 -0
- package/dist/cjs/utils.d.cts +34 -0
- package/dist/esm/Asset.d.ts +2 -0
- package/dist/esm/Asset.js +49 -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/ClientOnly.d.ts +49 -0
- package/dist/esm/ClientOnly.js +19 -0
- package/dist/esm/ClientOnly.js.map +1 -0
- package/dist/esm/HeadContent.d.ts +8 -0
- package/dist/esm/HeadContent.js +129 -0
- package/dist/esm/HeadContent.js.map +1 -0
- package/dist/esm/Match.d.ts +8 -0
- package/dist/esm/Match.js +322 -0
- package/dist/esm/Match.js.map +1 -0
- package/dist/esm/Matches.d.ts +24 -0
- package/dist/esm/Matches.js +134 -0
- package/dist/esm/Matches.js.map +1 -0
- package/dist/esm/RouterProvider.d.ts +10 -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 +14 -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 +107 -0
- package/dist/esm/Transitioner.js.map +1 -0
- package/dist/esm/awaited.d.ts +11 -0
- package/dist/esm/awaited.js +32 -0
- package/dist/esm/awaited.js.map +1 -0
- package/dist/esm/fileRoute.d.ts +54 -0
- package/dist/esm/fileRoute.js +103 -0
- package/dist/esm/fileRoute.js.map +1 -0
- package/dist/esm/history.d.ts +8 -0
- package/dist/esm/index.d.ts +52 -0
- package/dist/esm/index.js +151 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/lazyRouteComponent.d.ts +2 -0
- package/dist/esm/lazyRouteComponent.js +73 -0
- package/dist/esm/lazyRouteComponent.js.map +1 -0
- package/dist/esm/link.d.ts +44 -0
- package/dist/esm/link.js +261 -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 +8 -0
- package/dist/esm/not-found.js +42 -0
- package/dist/esm/not-found.js.map +1 -0
- package/dist/esm/renderRouteNotFound.d.ts +2 -0
- package/dist/esm/renderRouteNotFound.js +23 -0
- package/dist/esm/renderRouteNotFound.js.map +1 -0
- package/dist/esm/route.d.ts +95 -0
- package/dist/esm/route.js +236 -0
- package/dist/esm/route.js.map +1 -0
- package/dist/esm/router.d.ts +69 -0
- package/dist/esm/router.js +22 -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 +1 -0
- package/dist/esm/scroll-restoration.js +23 -0
- package/dist/esm/scroll-restoration.js.map +1 -0
- package/dist/esm/typePrimitives.d.ts +10 -0
- package/dist/esm/useBlocker.d.ts +67 -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 +8 -0
- package/dist/esm/useLoaderData.js +14 -0
- package/dist/esm/useLoaderData.js.map +1 -0
- package/dist/esm/useLoaderDeps.d.ts +7 -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 +10 -0
- package/dist/esm/useMatch.js +22 -0
- package/dist/esm/useMatch.js.map +1 -0
- package/dist/esm/useNavigate.d.ts +5 -0
- package/dist/esm/useNavigate.js +29 -0
- package/dist/esm/useNavigate.js.map +1 -0
- package/dist/esm/useParams.d.ts +9 -0
- package/dist/esm/useParams.js +15 -0
- package/dist/esm/useParams.js.map +1 -0
- package/dist/esm/useRouteContext.d.ts +4 -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 +9 -0
- package/dist/esm/useSearch.js +15 -0
- package/dist/esm/useSearch.js.map +1 -0
- package/dist/esm/utils.d.ts +34 -0
- package/dist/esm/utils.js +41 -0
- package/dist/esm/utils.js.map +1 -0
- package/dist/source/Asset.d.ts +2 -0
- package/dist/source/Asset.jsx +23 -0
- package/dist/source/Asset.jsx.map +1 -0
- package/dist/source/CatchBoundary.d.ts +11 -0
- package/dist/source/CatchBoundary.jsx +43 -0
- package/dist/source/CatchBoundary.jsx.map +1 -0
- package/dist/source/ClientOnly.d.ts +49 -0
- package/dist/source/ClientOnly.jsx +51 -0
- package/dist/source/ClientOnly.jsx.map +1 -0
- package/dist/source/HeadContent.d.ts +8 -0
- package/dist/source/HeadContent.jsx +143 -0
- package/dist/source/HeadContent.jsx.map +1 -0
- package/dist/source/Match.d.ts +8 -0
- package/dist/source/Match.jsx +255 -0
- package/dist/source/Match.jsx.map +1 -0
- package/dist/source/Matches.d.ts +24 -0
- package/dist/source/Matches.jsx +103 -0
- package/dist/source/Matches.jsx.map +1 -0
- package/dist/source/RouterProvider.d.ts +10 -0
- package/dist/source/RouterProvider.jsx +27 -0
- package/dist/source/RouterProvider.jsx.map +1 -0
- package/dist/source/SafeFragment.d.ts +1 -0
- package/dist/source/SafeFragment.jsx +4 -0
- package/dist/source/SafeFragment.jsx.map +1 -0
- package/dist/source/ScriptOnce.d.ts +5 -0
- package/dist/source/ScriptOnce.jsx +17 -0
- package/dist/source/ScriptOnce.jsx.map +1 -0
- package/dist/source/Scripts.d.ts +1 -0
- package/dist/source/Scripts.jsx +49 -0
- package/dist/source/Scripts.jsx.map +1 -0
- package/dist/source/ScrollRestoration.d.ts +14 -0
- package/dist/source/ScrollRestoration.jsx +37 -0
- package/dist/source/ScrollRestoration.jsx.map +1 -0
- package/dist/source/Transitioner.d.ts +1 -0
- package/dist/source/Transitioner.jsx +102 -0
- package/dist/source/Transitioner.jsx.map +1 -0
- package/dist/source/awaited.d.ts +11 -0
- package/dist/source/awaited.jsx +19 -0
- package/dist/source/awaited.jsx.map +1 -0
- package/dist/source/fileRoute.d.ts +54 -0
- package/dist/source/fileRoute.js +98 -0
- package/dist/source/fileRoute.js.map +1 -0
- package/dist/source/history.d.ts +8 -0
- package/dist/source/history.js +2 -0
- package/dist/source/history.js.map +1 -0
- package/dist/source/index.d.ts +52 -0
- package/dist/source/index.jsx +43 -0
- package/dist/source/index.jsx.map +1 -0
- package/dist/source/lazyRouteComponent.d.ts +2 -0
- package/dist/source/lazyRouteComponent.jsx +83 -0
- package/dist/source/lazyRouteComponent.jsx.map +1 -0
- package/dist/source/link.d.ts +44 -0
- package/dist/source/link.jsx +335 -0
- package/dist/source/link.jsx.map +1 -0
- package/dist/source/matchContext.d.ts +3 -0
- package/dist/source/matchContext.jsx +5 -0
- package/dist/source/matchContext.jsx.map +1 -0
- package/dist/source/not-found.d.ts +8 -0
- package/dist/source/not-found.jsx +30 -0
- package/dist/source/not-found.jsx.map +1 -0
- package/dist/source/renderRouteNotFound.d.ts +2 -0
- package/dist/source/renderRouteNotFound.jsx +15 -0
- package/dist/source/renderRouteNotFound.jsx.map +1 -0
- package/dist/source/route.d.ts +96 -0
- package/dist/source/route.jsx +179 -0
- package/dist/source/route.jsx.map +1 -0
- package/dist/source/router.d.ts +70 -0
- package/dist/source/router.js +21 -0
- package/dist/source/router.js.map +1 -0
- package/dist/source/routerContext.d.ts +8 -0
- package/dist/source/routerContext.jsx +13 -0
- package/dist/source/routerContext.jsx.map +1 -0
- package/dist/source/scroll-restoration.d.ts +1 -0
- package/dist/source/scroll-restoration.jsx +16 -0
- package/dist/source/scroll-restoration.jsx.map +1 -0
- package/dist/source/typePrimitives.d.ts +10 -0
- package/dist/source/typePrimitives.js +2 -0
- package/dist/source/typePrimitives.js.map +1 -0
- package/dist/source/useBlocker.d.ts +67 -0
- package/dist/source/useBlocker.jsx +136 -0
- package/dist/source/useBlocker.jsx.map +1 -0
- package/dist/source/useCanGoBack.d.ts +1 -0
- package/dist/source/useCanGoBack.js +5 -0
- package/dist/source/useCanGoBack.js.map +1 -0
- package/dist/source/useLoaderData.d.ts +8 -0
- package/dist/source/useLoaderData.jsx +11 -0
- package/dist/source/useLoaderData.jsx.map +1 -0
- package/dist/source/useLoaderDeps.d.ts +7 -0
- package/dist/source/useLoaderDeps.jsx +11 -0
- package/dist/source/useLoaderDeps.jsx.map +1 -0
- package/dist/source/useLocation.d.ts +7 -0
- package/dist/source/useLocation.jsx +7 -0
- package/dist/source/useLocation.jsx.map +1 -0
- package/dist/source/useMatch.d.ts +10 -0
- package/dist/source/useMatch.jsx +19 -0
- package/dist/source/useMatch.jsx.map +1 -0
- package/dist/source/useNavigate.d.ts +5 -0
- package/dist/source/useNavigate.jsx +18 -0
- package/dist/source/useNavigate.jsx.map +1 -0
- package/dist/source/useParams.d.ts +9 -0
- package/dist/source/useParams.jsx +12 -0
- package/dist/source/useParams.jsx.map +1 -0
- package/dist/source/useRouteContext.d.ts +4 -0
- package/dist/source/useRouteContext.js +8 -0
- package/dist/source/useRouteContext.js.map +1 -0
- package/dist/source/useRouter.d.ts +4 -0
- package/dist/source/useRouter.jsx +9 -0
- package/dist/source/useRouter.jsx.map +1 -0
- package/dist/source/useRouterState.d.ts +8 -0
- package/dist/source/useRouterState.jsx +14 -0
- package/dist/source/useRouterState.jsx.map +1 -0
- package/dist/source/useSearch.d.ts +9 -0
- package/dist/source/useSearch.jsx +12 -0
- package/dist/source/useSearch.jsx.map +1 -0
- package/dist/source/utils.d.ts +34 -0
- package/dist/source/utils.js +59 -0
- package/dist/source/utils.js.map +1 -0
- package/package.json +80 -0
- package/src/Asset.tsx +24 -0
- package/src/CatchBoundary.tsx +78 -0
- package/src/ClientOnly.tsx +65 -0
- package/src/HeadContent.tsx +174 -0
- package/src/Match.tsx +357 -0
- package/src/Matches.tsx +243 -0
- package/src/RouterProvider.tsx +79 -0
- package/src/SafeFragment.tsx +3 -0
- package/src/ScriptOnce.tsx +30 -0
- package/src/Scripts.tsx +65 -0
- package/src/ScrollRestoration.tsx +69 -0
- package/src/Transitioner.tsx +140 -0
- package/src/awaited.tsx +40 -0
- package/src/fileRoute.ts +256 -0
- package/src/history.ts +9 -0
- package/src/index.tsx +374 -0
- package/src/lazyRouteComponent.tsx +110 -0
- package/src/link.tsx +597 -0
- package/src/matchContext.tsx +10 -0
- package/src/not-found.tsx +42 -0
- package/src/renderRouteNotFound.tsx +26 -0
- package/src/route.tsx +550 -0
- package/src/router.ts +112 -0
- package/src/routerContext.tsx +26 -0
- package/src/scroll-restoration.tsx +29 -0
- package/src/typePrimitives.ts +74 -0
- package/src/useBlocker.tsx +305 -0
- package/src/useCanGoBack.ts +5 -0
- package/src/useLoaderData.tsx +50 -0
- package/src/useLoaderDeps.tsx +46 -0
- package/src/useLocation.tsx +30 -0
- package/src/useMatch.tsx +96 -0
- package/src/useNavigate.tsx +40 -0
- package/src/useParams.tsx +71 -0
- package/src/useRouteContext.ts +31 -0
- package/src/useRouter.tsx +15 -0
- package/src/useRouterState.tsx +36 -0
- package/src/useSearch.tsx +71 -0
- package/src/utils.ts +79 -0
package/src/router.ts
ADDED
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { RouterCore } from '@tanstack/router-core'
|
|
2
|
+
import { createFileRoute, createLazyFileRoute } from './fileRoute'
|
|
3
|
+
import type { RouterHistory } from '@tanstack/history'
|
|
4
|
+
import type {
|
|
5
|
+
AnyRoute,
|
|
6
|
+
CreateRouterFn,
|
|
7
|
+
RouterConstructorOptions,
|
|
8
|
+
TrailingSlashOption,
|
|
9
|
+
} from '@tanstack/router-core'
|
|
10
|
+
import type {
|
|
11
|
+
ErrorRouteComponent,
|
|
12
|
+
NotFoundRouteComponent,
|
|
13
|
+
RouteComponent,
|
|
14
|
+
} from './route'
|
|
15
|
+
import type { JSX } from 'solid-js'
|
|
16
|
+
|
|
17
|
+
declare module '@tanstack/router-core' {
|
|
18
|
+
export interface RouterOptionsExtensions {
|
|
19
|
+
/**
|
|
20
|
+
* The default `component` a route should use if no component is provided.
|
|
21
|
+
*
|
|
22
|
+
* @default Outlet
|
|
23
|
+
* @link [API Docs](https://tanstack.com/router/latest/docs/framework/solid/api/router/RouterOptionsType#defaultcomponent-property)
|
|
24
|
+
*/
|
|
25
|
+
defaultComponent?: RouteComponent
|
|
26
|
+
/**
|
|
27
|
+
* The default `errorComponent` a route should use if no error component is provided.
|
|
28
|
+
*
|
|
29
|
+
* @default ErrorComponent
|
|
30
|
+
* @link [API Docs](https://tanstack.com/router/latest/docs/framework/solid/api/router/RouterOptionsType#defaulterrorcomponent-property)
|
|
31
|
+
* @link [Guide](https://tanstack.com/router/latest/docs/framework/solid/guide/data-loading#handling-errors-with-routeoptionserrorcomponent)
|
|
32
|
+
*/
|
|
33
|
+
defaultErrorComponent?: ErrorRouteComponent
|
|
34
|
+
/**
|
|
35
|
+
* The default `pendingComponent` a route should use if no pending component is provided.
|
|
36
|
+
*
|
|
37
|
+
* @link [API Docs](https://tanstack.com/router/latest/docs/framework/solid/api/router/RouterOptionsType#defaultpendingcomponent-property)
|
|
38
|
+
* @link [Guide](https://tanstack.com/router/latest/docs/framework/solid/guide/data-loading#showing-a-pending-component)
|
|
39
|
+
*/
|
|
40
|
+
defaultPendingComponent?: RouteComponent
|
|
41
|
+
/**
|
|
42
|
+
* The default `notFoundComponent` a route should use if no notFound component is provided.
|
|
43
|
+
*
|
|
44
|
+
* @default NotFound
|
|
45
|
+
* @link [API Docs](https://tanstack.com/router/latest/docs/framework/solid/api/router/RouterOptionsType#defaultnotfoundcomponent-property)
|
|
46
|
+
* @link [Guide](https://tanstack.com/router/latest/docs/framework/solid/guide/not-found-errors#default-router-wide-not-found-handling)
|
|
47
|
+
*/
|
|
48
|
+
defaultNotFoundComponent?: NotFoundRouteComponent
|
|
49
|
+
/**
|
|
50
|
+
* A component that will be used to wrap the entire router.
|
|
51
|
+
*
|
|
52
|
+
* This is useful for providing a context to the entire router.
|
|
53
|
+
*
|
|
54
|
+
* @link [API Docs](https://tanstack.com/router/latest/docs/framework/solid/api/router/RouterOptionsType#wrap-property)
|
|
55
|
+
*/
|
|
56
|
+
Wrap?: (props: { children: any }) => JSX.Element
|
|
57
|
+
/**
|
|
58
|
+
* A component that will be used to wrap the inner contents of the router.
|
|
59
|
+
*
|
|
60
|
+
* This is useful for providing a context to the inner contents of the router where you also need access to the router context and hooks.
|
|
61
|
+
*
|
|
62
|
+
* @link [API Docs](https://tanstack.com/router/latest/docs/framework/solid/api/router/RouterOptionsType#innerwrap-property)
|
|
63
|
+
*/
|
|
64
|
+
InnerWrap?: (props: { children: any }) => JSX.Element
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* The default `onCatch` handler for errors caught by the Router ErrorBoundary
|
|
68
|
+
*
|
|
69
|
+
* @link [API Docs](https://tanstack.com/router/latest/docs/framework/react/api/router/RouterOptionsType#defaultoncatch-property)
|
|
70
|
+
* @link [Guide](https://tanstack.com/router/latest/docs/framework/react/guide/data-loading#handling-errors-with-routeoptionsoncatch)
|
|
71
|
+
*/
|
|
72
|
+
defaultOnCatch?: (error: Error) => void
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
export const createRouter: CreateRouterFn = (options) => {
|
|
77
|
+
return new Router(options)
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
export class Router<
|
|
81
|
+
in out TRouteTree extends AnyRoute,
|
|
82
|
+
in out TTrailingSlashOption extends TrailingSlashOption = 'never',
|
|
83
|
+
in out TDefaultStructuralSharingOption extends boolean = false,
|
|
84
|
+
in out TRouterHistory extends RouterHistory = RouterHistory,
|
|
85
|
+
in out TDehydrated extends Record<string, any> = Record<string, any>,
|
|
86
|
+
> extends RouterCore<
|
|
87
|
+
TRouteTree,
|
|
88
|
+
TTrailingSlashOption,
|
|
89
|
+
TDefaultStructuralSharingOption,
|
|
90
|
+
TRouterHistory,
|
|
91
|
+
TDehydrated
|
|
92
|
+
> {
|
|
93
|
+
constructor(
|
|
94
|
+
options: RouterConstructorOptions<
|
|
95
|
+
TRouteTree,
|
|
96
|
+
TTrailingSlashOption,
|
|
97
|
+
TDefaultStructuralSharingOption,
|
|
98
|
+
TRouterHistory,
|
|
99
|
+
TDehydrated
|
|
100
|
+
>,
|
|
101
|
+
) {
|
|
102
|
+
super(options)
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
if (typeof globalThis !== 'undefined') {
|
|
107
|
+
;(globalThis as any).createFileRoute = createFileRoute
|
|
108
|
+
;(globalThis as any).createLazyFileRoute = createLazyFileRoute
|
|
109
|
+
} else if (typeof window !== 'undefined') {
|
|
110
|
+
;(window as any).createFileRoute = createFileRoute
|
|
111
|
+
;(window as any).createFileRoute = createLazyFileRoute
|
|
112
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import * as Solid from 'solid-js'
|
|
2
|
+
import type { AnyRouter } from '@tanstack/router-core'
|
|
3
|
+
|
|
4
|
+
declare global {
|
|
5
|
+
interface Window {
|
|
6
|
+
__TSR_ROUTER_CONTEXT__?: Solid.Context<AnyRouter>
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
const routerContext = Solid.createContext<AnyRouter>(
|
|
11
|
+
null as unknown as AnyRouter,
|
|
12
|
+
)
|
|
13
|
+
|
|
14
|
+
export function getRouterContext() {
|
|
15
|
+
if (typeof document === 'undefined') {
|
|
16
|
+
return routerContext
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
if (window.__TSR_ROUTER_CONTEXT__) {
|
|
20
|
+
return window.__TSR_ROUTER_CONTEXT__
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
window.__TSR_ROUTER_CONTEXT__ = routerContext as any
|
|
24
|
+
|
|
25
|
+
return routerContext
|
|
26
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import {
|
|
2
|
+
defaultGetScrollRestorationKey,
|
|
3
|
+
restoreScroll,
|
|
4
|
+
storageKey,
|
|
5
|
+
} from '@tanstack/router-core'
|
|
6
|
+
import { useRouter } from './useRouter'
|
|
7
|
+
import { ScriptOnce } from './ScriptOnce'
|
|
8
|
+
|
|
9
|
+
export function ScrollRestoration() {
|
|
10
|
+
const router = useRouter()
|
|
11
|
+
const getKey =
|
|
12
|
+
router.options.getScrollRestorationKey || defaultGetScrollRestorationKey
|
|
13
|
+
const userKey = getKey(router.latestLocation)
|
|
14
|
+
const resolvedKey =
|
|
15
|
+
userKey !== defaultGetScrollRestorationKey(router.latestLocation)
|
|
16
|
+
? userKey
|
|
17
|
+
: null
|
|
18
|
+
|
|
19
|
+
if (!router.isScrollRestoring || !router.isServer) {
|
|
20
|
+
return null
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
return (
|
|
24
|
+
<ScriptOnce
|
|
25
|
+
children={`(${restoreScroll.toString()})(${JSON.stringify(storageKey)},${JSON.stringify(resolvedKey)}, undefined, true)`}
|
|
26
|
+
log={false}
|
|
27
|
+
/>
|
|
28
|
+
)
|
|
29
|
+
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import type { LinkComponentProps } from './link'
|
|
2
|
+
import type { UseParamsOptions } from './useParams'
|
|
3
|
+
import type { UseSearchOptions } from './useSearch'
|
|
4
|
+
import type {
|
|
5
|
+
AnyRouter,
|
|
6
|
+
Constrain,
|
|
7
|
+
InferFrom,
|
|
8
|
+
InferMaskFrom,
|
|
9
|
+
InferMaskTo,
|
|
10
|
+
InferSelected,
|
|
11
|
+
InferShouldThrow,
|
|
12
|
+
InferStrict,
|
|
13
|
+
InferTo,
|
|
14
|
+
RegisteredRouter,
|
|
15
|
+
} from '@tanstack/router-core'
|
|
16
|
+
|
|
17
|
+
export type ValidateLinkOptions<
|
|
18
|
+
TRouter extends AnyRouter = RegisteredRouter,
|
|
19
|
+
TOptions = unknown,
|
|
20
|
+
TDefaultFrom extends string = string,
|
|
21
|
+
TComp = 'a',
|
|
22
|
+
> = Constrain<
|
|
23
|
+
TOptions,
|
|
24
|
+
LinkComponentProps<
|
|
25
|
+
TComp,
|
|
26
|
+
TRouter,
|
|
27
|
+
InferFrom<TOptions, TDefaultFrom>,
|
|
28
|
+
InferTo<TOptions>,
|
|
29
|
+
InferMaskFrom<TOptions>,
|
|
30
|
+
InferMaskTo<TOptions>
|
|
31
|
+
>
|
|
32
|
+
>
|
|
33
|
+
|
|
34
|
+
export type ValidateLinkOptionsArray<
|
|
35
|
+
TRouter extends AnyRouter = RegisteredRouter,
|
|
36
|
+
TOptions extends ReadonlyArray<any> = ReadonlyArray<unknown>,
|
|
37
|
+
TDefaultFrom extends string = string,
|
|
38
|
+
TComp = 'a',
|
|
39
|
+
> = {
|
|
40
|
+
[K in keyof TOptions]: ValidateLinkOptions<
|
|
41
|
+
TRouter,
|
|
42
|
+
TOptions[K],
|
|
43
|
+
TDefaultFrom,
|
|
44
|
+
TComp
|
|
45
|
+
>
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export type ValidateUseSearchOptions<
|
|
49
|
+
TOptions,
|
|
50
|
+
TRouter extends AnyRouter = RegisteredRouter,
|
|
51
|
+
> = Constrain<
|
|
52
|
+
TOptions,
|
|
53
|
+
UseSearchOptions<
|
|
54
|
+
TRouter,
|
|
55
|
+
InferFrom<TOptions>,
|
|
56
|
+
InferStrict<TOptions>,
|
|
57
|
+
InferShouldThrow<TOptions>,
|
|
58
|
+
InferSelected<TOptions>
|
|
59
|
+
>
|
|
60
|
+
>
|
|
61
|
+
|
|
62
|
+
export type ValidateUseParamsOptions<
|
|
63
|
+
TOptions,
|
|
64
|
+
TRouter extends AnyRouter = RegisteredRouter,
|
|
65
|
+
> = Constrain<
|
|
66
|
+
TOptions,
|
|
67
|
+
UseParamsOptions<
|
|
68
|
+
TRouter,
|
|
69
|
+
InferFrom<TOptions>,
|
|
70
|
+
InferStrict<TOptions>,
|
|
71
|
+
InferShouldThrow<TOptions>,
|
|
72
|
+
InferSelected<TOptions>
|
|
73
|
+
>
|
|
74
|
+
>
|
|
@@ -0,0 +1,305 @@
|
|
|
1
|
+
import * as Solid from 'solid-js'
|
|
2
|
+
import { useRouter } from './useRouter'
|
|
3
|
+
import type {
|
|
4
|
+
BlockerFnArgs,
|
|
5
|
+
HistoryAction,
|
|
6
|
+
HistoryLocation,
|
|
7
|
+
} from '@tanstack/history'
|
|
8
|
+
import type { SolidNode } from './route'
|
|
9
|
+
import type {
|
|
10
|
+
AnyRoute,
|
|
11
|
+
AnyRouter,
|
|
12
|
+
ParseRoute,
|
|
13
|
+
RegisteredRouter,
|
|
14
|
+
} from '@tanstack/router-core'
|
|
15
|
+
|
|
16
|
+
interface ShouldBlockFnLocation<
|
|
17
|
+
out TRouteId,
|
|
18
|
+
out TFullPath,
|
|
19
|
+
out TAllParams,
|
|
20
|
+
out TFullSearchSchema,
|
|
21
|
+
> {
|
|
22
|
+
routeId: TRouteId
|
|
23
|
+
fullPath: TFullPath
|
|
24
|
+
pathname: string
|
|
25
|
+
params: TAllParams
|
|
26
|
+
search: TFullSearchSchema
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
type AnyShouldBlockFnLocation = ShouldBlockFnLocation<any, any, any, any>
|
|
30
|
+
type MakeShouldBlockFnLocationUnion<
|
|
31
|
+
TRouter extends AnyRouter = RegisteredRouter,
|
|
32
|
+
TRoute extends AnyRoute = ParseRoute<TRouter['routeTree']>,
|
|
33
|
+
> = TRoute extends any
|
|
34
|
+
? ShouldBlockFnLocation<
|
|
35
|
+
TRoute['id'],
|
|
36
|
+
TRoute['fullPath'],
|
|
37
|
+
TRoute['types']['allParams'],
|
|
38
|
+
TRoute['types']['fullSearchSchema']
|
|
39
|
+
>
|
|
40
|
+
: never
|
|
41
|
+
|
|
42
|
+
type BlockerResolver<TRouter extends AnyRouter = RegisteredRouter> =
|
|
43
|
+
| {
|
|
44
|
+
status: 'blocked'
|
|
45
|
+
current: MakeShouldBlockFnLocationUnion<TRouter>
|
|
46
|
+
next: MakeShouldBlockFnLocationUnion<TRouter>
|
|
47
|
+
action: HistoryAction
|
|
48
|
+
proceed: () => void
|
|
49
|
+
reset: () => void
|
|
50
|
+
}
|
|
51
|
+
| {
|
|
52
|
+
status: 'idle'
|
|
53
|
+
current: undefined
|
|
54
|
+
next: undefined
|
|
55
|
+
action: undefined
|
|
56
|
+
proceed: undefined
|
|
57
|
+
reset: undefined
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
type ShouldBlockFnArgs<TRouter extends AnyRouter = RegisteredRouter> = {
|
|
61
|
+
current: MakeShouldBlockFnLocationUnion<TRouter>
|
|
62
|
+
next: MakeShouldBlockFnLocationUnion<TRouter>
|
|
63
|
+
action: HistoryAction
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
export type ShouldBlockFn<TRouter extends AnyRouter = RegisteredRouter> = (
|
|
67
|
+
args: ShouldBlockFnArgs<TRouter>,
|
|
68
|
+
) => boolean | Promise<boolean>
|
|
69
|
+
export type UseBlockerOpts<
|
|
70
|
+
TRouter extends AnyRouter = RegisteredRouter,
|
|
71
|
+
TWithResolver extends boolean = boolean,
|
|
72
|
+
> = {
|
|
73
|
+
shouldBlockFn: ShouldBlockFn<TRouter>
|
|
74
|
+
enableBeforeUnload?: boolean | (() => boolean)
|
|
75
|
+
disabled?: boolean
|
|
76
|
+
withResolver?: TWithResolver
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
type LegacyBlockerFn = () => Promise<any> | any
|
|
80
|
+
type LegacyBlockerOpts = {
|
|
81
|
+
blockerFn?: LegacyBlockerFn
|
|
82
|
+
condition?: boolean | any
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
function _resolveBlockerOpts(
|
|
86
|
+
opts?: UseBlockerOpts | LegacyBlockerOpts | LegacyBlockerFn,
|
|
87
|
+
condition?: boolean | any,
|
|
88
|
+
): UseBlockerOpts {
|
|
89
|
+
if (opts === undefined) {
|
|
90
|
+
return {
|
|
91
|
+
shouldBlockFn: () => true,
|
|
92
|
+
withResolver: false,
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
if ('shouldBlockFn' in opts) {
|
|
97
|
+
return opts
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
if (typeof opts === 'function') {
|
|
101
|
+
const shouldBlock = Boolean(condition ?? true)
|
|
102
|
+
|
|
103
|
+
const _customBlockerFn = async () => {
|
|
104
|
+
if (shouldBlock) return await opts()
|
|
105
|
+
return false
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
return {
|
|
109
|
+
shouldBlockFn: _customBlockerFn,
|
|
110
|
+
enableBeforeUnload: shouldBlock,
|
|
111
|
+
withResolver: false,
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
const shouldBlock = Boolean(opts.condition ?? true)
|
|
116
|
+
const fn = opts.blockerFn
|
|
117
|
+
|
|
118
|
+
const _customBlockerFn = async () => {
|
|
119
|
+
if (shouldBlock && fn !== undefined) {
|
|
120
|
+
return await fn()
|
|
121
|
+
}
|
|
122
|
+
return shouldBlock
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
return {
|
|
126
|
+
shouldBlockFn: _customBlockerFn,
|
|
127
|
+
enableBeforeUnload: shouldBlock,
|
|
128
|
+
withResolver: fn === undefined,
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
export function useBlocker<
|
|
133
|
+
TRouter extends AnyRouter = RegisteredRouter,
|
|
134
|
+
TWithResolver extends boolean = false,
|
|
135
|
+
>(
|
|
136
|
+
opts: UseBlockerOpts<TRouter, TWithResolver>,
|
|
137
|
+
): TWithResolver extends true ? Solid.Accessor<BlockerResolver<TRouter>> : void
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* @deprecated Use the shouldBlockFn property instead
|
|
141
|
+
*/
|
|
142
|
+
export function useBlocker(
|
|
143
|
+
blockerFnOrOpts?: LegacyBlockerOpts,
|
|
144
|
+
): Solid.Accessor<BlockerResolver>
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* @deprecated Use the UseBlockerOpts object syntax instead
|
|
148
|
+
*/
|
|
149
|
+
export function useBlocker(
|
|
150
|
+
blockerFn?: LegacyBlockerFn,
|
|
151
|
+
condition?: boolean | any,
|
|
152
|
+
): Solid.Accessor<BlockerResolver>
|
|
153
|
+
|
|
154
|
+
export function useBlocker(
|
|
155
|
+
opts?: UseBlockerOpts | LegacyBlockerOpts | LegacyBlockerFn,
|
|
156
|
+
condition?: boolean | any,
|
|
157
|
+
): Solid.Accessor<BlockerResolver> | void {
|
|
158
|
+
const {
|
|
159
|
+
shouldBlockFn,
|
|
160
|
+
enableBeforeUnload = true,
|
|
161
|
+
disabled = false,
|
|
162
|
+
withResolver = false,
|
|
163
|
+
} = _resolveBlockerOpts(opts, condition)
|
|
164
|
+
|
|
165
|
+
const router = useRouter()
|
|
166
|
+
const { history } = router
|
|
167
|
+
|
|
168
|
+
const [resolver, setResolver] = Solid.createSignal<BlockerResolver>({
|
|
169
|
+
status: 'idle',
|
|
170
|
+
current: undefined,
|
|
171
|
+
next: undefined,
|
|
172
|
+
action: undefined,
|
|
173
|
+
proceed: undefined,
|
|
174
|
+
reset: undefined,
|
|
175
|
+
})
|
|
176
|
+
|
|
177
|
+
Solid.createEffect(() => {
|
|
178
|
+
const blockerFnComposed = async (blockerFnArgs: BlockerFnArgs) => {
|
|
179
|
+
function getLocation(
|
|
180
|
+
location: HistoryLocation,
|
|
181
|
+
): AnyShouldBlockFnLocation {
|
|
182
|
+
const parsedLocation = router.parseLocation(undefined, location)
|
|
183
|
+
const matchedRoutes = router.getMatchedRoutes(
|
|
184
|
+
parsedLocation.pathname,
|
|
185
|
+
undefined,
|
|
186
|
+
)
|
|
187
|
+
if (matchedRoutes.foundRoute === undefined) {
|
|
188
|
+
throw new Error(`No route found for location ${location.href}`)
|
|
189
|
+
}
|
|
190
|
+
return {
|
|
191
|
+
routeId: matchedRoutes.foundRoute.id,
|
|
192
|
+
fullPath: matchedRoutes.foundRoute.fullPath,
|
|
193
|
+
pathname: parsedLocation.pathname,
|
|
194
|
+
params: matchedRoutes.routeParams,
|
|
195
|
+
search: parsedLocation.search,
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
const current = getLocation(blockerFnArgs.currentLocation)
|
|
200
|
+
const next = getLocation(blockerFnArgs.nextLocation)
|
|
201
|
+
|
|
202
|
+
const shouldBlock = await shouldBlockFn({
|
|
203
|
+
action: blockerFnArgs.action,
|
|
204
|
+
current,
|
|
205
|
+
next,
|
|
206
|
+
})
|
|
207
|
+
if (!withResolver) {
|
|
208
|
+
return shouldBlock
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
if (!shouldBlock) {
|
|
212
|
+
return false
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
const promise = new Promise<boolean>((resolve) => {
|
|
216
|
+
setResolver({
|
|
217
|
+
status: 'blocked',
|
|
218
|
+
current,
|
|
219
|
+
next,
|
|
220
|
+
action: blockerFnArgs.action,
|
|
221
|
+
proceed: () => resolve(false),
|
|
222
|
+
reset: () => resolve(true),
|
|
223
|
+
})
|
|
224
|
+
})
|
|
225
|
+
|
|
226
|
+
const canNavigateAsync = await promise
|
|
227
|
+
setResolver({
|
|
228
|
+
status: 'idle',
|
|
229
|
+
current: undefined,
|
|
230
|
+
next: undefined,
|
|
231
|
+
action: undefined,
|
|
232
|
+
proceed: undefined,
|
|
233
|
+
reset: undefined,
|
|
234
|
+
})
|
|
235
|
+
|
|
236
|
+
return canNavigateAsync
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
return disabled
|
|
240
|
+
? undefined
|
|
241
|
+
: history.block({ blockerFn: blockerFnComposed, enableBeforeUnload })
|
|
242
|
+
})
|
|
243
|
+
|
|
244
|
+
return resolver
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
const _resolvePromptBlockerArgs = (
|
|
248
|
+
props: PromptProps | LegacyPromptProps,
|
|
249
|
+
): UseBlockerOpts => {
|
|
250
|
+
if ('shouldBlockFn' in props) {
|
|
251
|
+
return { ...props }
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
const shouldBlock = Boolean(props.condition ?? true)
|
|
255
|
+
const fn = props.blockerFn
|
|
256
|
+
|
|
257
|
+
const _customBlockerFn = async () => {
|
|
258
|
+
if (shouldBlock && fn !== undefined) {
|
|
259
|
+
return await fn()
|
|
260
|
+
}
|
|
261
|
+
return shouldBlock
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
return {
|
|
265
|
+
shouldBlockFn: _customBlockerFn,
|
|
266
|
+
enableBeforeUnload: shouldBlock,
|
|
267
|
+
withResolver: fn === undefined,
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
export function Block<
|
|
272
|
+
TRouter extends AnyRouter = RegisteredRouter,
|
|
273
|
+
TWithResolver extends boolean = boolean,
|
|
274
|
+
>(opts: PromptProps<TRouter, TWithResolver>): SolidNode
|
|
275
|
+
|
|
276
|
+
/**
|
|
277
|
+
* @deprecated Use the UseBlockerOpts property instead
|
|
278
|
+
*/
|
|
279
|
+
export function Block(opts: LegacyPromptProps): SolidNode
|
|
280
|
+
|
|
281
|
+
export function Block(opts: PromptProps | LegacyPromptProps): SolidNode {
|
|
282
|
+
const { children, ...rest } = opts
|
|
283
|
+
const args = _resolvePromptBlockerArgs(rest)
|
|
284
|
+
|
|
285
|
+
const resolver = useBlocker(args)
|
|
286
|
+
return children
|
|
287
|
+
? typeof children === 'function'
|
|
288
|
+
? children(resolver as any)
|
|
289
|
+
: children
|
|
290
|
+
: null
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
type LegacyPromptProps = {
|
|
294
|
+
blockerFn?: LegacyBlockerFn
|
|
295
|
+
condition?: boolean | any
|
|
296
|
+
children?: SolidNode | ((params: BlockerResolver) => SolidNode)
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
type PromptProps<
|
|
300
|
+
TRouter extends AnyRouter = RegisteredRouter,
|
|
301
|
+
TWithResolver extends boolean = boolean,
|
|
302
|
+
TParams = TWithResolver extends true ? BlockerResolver<TRouter> : void,
|
|
303
|
+
> = UseBlockerOpts<TRouter, TWithResolver> & {
|
|
304
|
+
children?: SolidNode | ((params: TParams) => SolidNode)
|
|
305
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { useMatch } from './useMatch'
|
|
2
|
+
import type { Accessor } from 'solid-js'
|
|
3
|
+
import type {
|
|
4
|
+
AnyRouter,
|
|
5
|
+
RegisteredRouter,
|
|
6
|
+
ResolveUseLoaderData,
|
|
7
|
+
StrictOrFrom,
|
|
8
|
+
UseLoaderDataResult,
|
|
9
|
+
} from '@tanstack/router-core'
|
|
10
|
+
|
|
11
|
+
export interface UseLoaderDataBaseOptions<
|
|
12
|
+
TRouter extends AnyRouter,
|
|
13
|
+
TFrom,
|
|
14
|
+
TStrict extends boolean,
|
|
15
|
+
TSelected,
|
|
16
|
+
> {
|
|
17
|
+
select?: (match: ResolveUseLoaderData<TRouter, TFrom, TStrict>) => TSelected
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export type UseLoaderDataOptions<
|
|
21
|
+
TRouter extends AnyRouter,
|
|
22
|
+
TFrom extends string | undefined,
|
|
23
|
+
TStrict extends boolean,
|
|
24
|
+
TSelected,
|
|
25
|
+
> = StrictOrFrom<TRouter, TFrom, TStrict> &
|
|
26
|
+
UseLoaderDataBaseOptions<TRouter, TFrom, TStrict, TSelected>
|
|
27
|
+
|
|
28
|
+
export type UseLoaderDataRoute<out TId> = <
|
|
29
|
+
TRouter extends AnyRouter = RegisteredRouter,
|
|
30
|
+
TSelected = unknown,
|
|
31
|
+
>(
|
|
32
|
+
opts?: UseLoaderDataBaseOptions<TRouter, TId, true, TSelected>,
|
|
33
|
+
) => Accessor<UseLoaderDataResult<TRouter, TId, true, TSelected>>
|
|
34
|
+
|
|
35
|
+
export function useLoaderData<
|
|
36
|
+
TRouter extends AnyRouter = RegisteredRouter,
|
|
37
|
+
const TFrom extends string | undefined = undefined,
|
|
38
|
+
TStrict extends boolean = true,
|
|
39
|
+
TSelected = unknown,
|
|
40
|
+
>(
|
|
41
|
+
opts: UseLoaderDataOptions<TRouter, TFrom, TStrict, TSelected>,
|
|
42
|
+
): Accessor<UseLoaderDataResult<TRouter, TFrom, TStrict, TSelected>> {
|
|
43
|
+
return useMatch({
|
|
44
|
+
from: opts.from!,
|
|
45
|
+
strict: opts.strict,
|
|
46
|
+
select: (s: any) => {
|
|
47
|
+
return opts.select ? opts.select(s.loaderData) : s.loaderData
|
|
48
|
+
},
|
|
49
|
+
} as any) as any
|
|
50
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { useMatch } from './useMatch'
|
|
2
|
+
import type {
|
|
3
|
+
AnyRouter,
|
|
4
|
+
RegisteredRouter,
|
|
5
|
+
ResolveUseLoaderDeps,
|
|
6
|
+
StrictOrFrom,
|
|
7
|
+
UseLoaderDepsResult,
|
|
8
|
+
} from '@tanstack/router-core'
|
|
9
|
+
|
|
10
|
+
export interface UseLoaderDepsBaseOptions<
|
|
11
|
+
TRouter extends AnyRouter,
|
|
12
|
+
TFrom,
|
|
13
|
+
TSelected,
|
|
14
|
+
> {
|
|
15
|
+
select?: (deps: ResolveUseLoaderDeps<TRouter, TFrom>) => TSelected
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export type UseLoaderDepsOptions<
|
|
19
|
+
TRouter extends AnyRouter,
|
|
20
|
+
TFrom extends string | undefined,
|
|
21
|
+
TSelected,
|
|
22
|
+
> = StrictOrFrom<TRouter, TFrom> &
|
|
23
|
+
UseLoaderDepsBaseOptions<TRouter, TFrom, TSelected>
|
|
24
|
+
|
|
25
|
+
export type UseLoaderDepsRoute<out TId> = <
|
|
26
|
+
TRouter extends AnyRouter = RegisteredRouter,
|
|
27
|
+
TSelected = unknown,
|
|
28
|
+
>(
|
|
29
|
+
opts?: UseLoaderDepsBaseOptions<TRouter, TId, TSelected>,
|
|
30
|
+
) => UseLoaderDepsResult<TRouter, TId, TSelected>
|
|
31
|
+
|
|
32
|
+
export function useLoaderDeps<
|
|
33
|
+
TRouter extends AnyRouter = RegisteredRouter,
|
|
34
|
+
const TFrom extends string | undefined = undefined,
|
|
35
|
+
TSelected = unknown,
|
|
36
|
+
>(
|
|
37
|
+
opts: UseLoaderDepsOptions<TRouter, TFrom, TSelected>,
|
|
38
|
+
): UseLoaderDepsResult<TRouter, TFrom, TSelected> {
|
|
39
|
+
const { select, ...rest } = opts
|
|
40
|
+
return useMatch({
|
|
41
|
+
...rest,
|
|
42
|
+
select: (s) => {
|
|
43
|
+
return select ? select(s.loaderDeps) : s.loaderDeps
|
|
44
|
+
},
|
|
45
|
+
}) as UseLoaderDepsResult<TRouter, TFrom, TSelected>
|
|
46
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { useRouterState } from './useRouterState'
|
|
2
|
+
import type {
|
|
3
|
+
AnyRouter,
|
|
4
|
+
RegisteredRouter,
|
|
5
|
+
RouterState,
|
|
6
|
+
} from '@tanstack/router-core'
|
|
7
|
+
import type { Accessor } from 'solid-js'
|
|
8
|
+
|
|
9
|
+
export interface UseLocationBaseOptions<TRouter extends AnyRouter, TSelected> {
|
|
10
|
+
select?: (state: RouterState<TRouter['routeTree']>['location']) => TSelected
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export type UseLocationResult<
|
|
14
|
+
TRouter extends AnyRouter,
|
|
15
|
+
TSelected,
|
|
16
|
+
> = unknown extends TSelected
|
|
17
|
+
? RouterState<TRouter['routeTree']>['location']
|
|
18
|
+
: TSelected
|
|
19
|
+
|
|
20
|
+
export function useLocation<
|
|
21
|
+
TRouter extends AnyRouter = RegisteredRouter,
|
|
22
|
+
TSelected = unknown,
|
|
23
|
+
>(
|
|
24
|
+
opts?: UseLocationBaseOptions<TRouter, TSelected>,
|
|
25
|
+
): Accessor<UseLocationResult<TRouter, TSelected>> {
|
|
26
|
+
return useRouterState({
|
|
27
|
+
select: (state: any) =>
|
|
28
|
+
opts?.select ? opts.select(state.location) : state.location,
|
|
29
|
+
} as any) as Accessor<UseLocationResult<TRouter, TSelected>>
|
|
30
|
+
}
|