@tanstack/react-router 1.5.4 → 1.5.5

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.
Files changed (61) hide show
  1. package/build/cjs/Matches.js +15 -14
  2. package/build/cjs/Matches.js.map +1 -1
  3. package/build/cjs/RouterProvider.js +6 -27
  4. package/build/cjs/RouterProvider.js.map +1 -1
  5. package/build/cjs/awaited.js +2 -2
  6. package/build/cjs/awaited.js.map +1 -1
  7. package/build/cjs/index.js +11 -7
  8. package/build/cjs/index.js.map +1 -1
  9. package/build/cjs/link.js +4 -3
  10. package/build/cjs/link.js.map +1 -1
  11. package/build/cjs/router.js.map +1 -1
  12. package/build/cjs/routerContext.js +42 -0
  13. package/build/cjs/routerContext.js.map +1 -0
  14. package/build/cjs/scroll-restoration.js +3 -3
  15. package/build/cjs/scroll-restoration.js.map +1 -1
  16. package/build/cjs/useBlocker.js +2 -2
  17. package/build/cjs/useBlocker.js.map +1 -1
  18. package/build/cjs/useNavigate.js +3 -3
  19. package/build/cjs/useNavigate.js.map +1 -1
  20. package/build/cjs/useParams.js +2 -2
  21. package/build/cjs/useParams.js.map +1 -1
  22. package/build/cjs/useRouteContext.js +23 -0
  23. package/build/cjs/useRouteContext.js.map +1 -0
  24. package/build/cjs/useRouter.js +44 -0
  25. package/build/cjs/useRouter.js.map +1 -0
  26. package/build/cjs/useRouterState.js +24 -0
  27. package/build/cjs/useRouterState.js.map +1 -0
  28. package/build/cjs/utils.js +0 -8
  29. package/build/cjs/utils.js.map +1 -1
  30. package/build/esm/index.js +192 -188
  31. package/build/esm/index.js.map +1 -1
  32. package/build/stats-html.html +1 -1
  33. package/build/stats-react.json +582 -431
  34. package/build/types/RouterProvider.d.ts +2 -13
  35. package/build/types/index.d.ts +4 -1
  36. package/build/types/router.d.ts +6 -5
  37. package/build/types/routerContext.d.ts +3 -0
  38. package/build/types/useRouteContext.d.ts +7 -0
  39. package/build/types/useRouter.d.ts +5 -0
  40. package/build/types/useRouterState.d.ts +6 -0
  41. package/build/types/utils.d.ts +0 -6
  42. package/build/umd/index.development.js +367 -363
  43. package/build/umd/index.development.js.map +1 -1
  44. package/build/umd/index.production.js +1 -1
  45. package/build/umd/index.production.js.map +1 -1
  46. package/package.json +2 -2
  47. package/src/Matches.tsx +2 -1
  48. package/src/RouterProvider.tsx +8 -60
  49. package/src/awaited.tsx +1 -1
  50. package/src/index.tsx +4 -2
  51. package/src/link.tsx +8 -7
  52. package/src/router.ts +18 -5
  53. package/src/routerContext.tsx +11 -0
  54. package/src/scroll-restoration.tsx +1 -1
  55. package/src/useBlocker.tsx +1 -1
  56. package/src/useNavigate.tsx +1 -1
  57. package/src/useParams.tsx +1 -1
  58. package/src/useRouteContext.ts +24 -0
  59. package/src/useRouter.tsx +20 -0
  60. package/src/useRouterState.tsx +17 -0
  61. package/src/utils.ts +0 -24
@@ -14,7 +14,8 @@ var React = require('react');
14
14
  var invariant = require('tiny-invariant');
15
15
  var warning = require('tiny-warning');
16
16
  var CatchBoundary = require('./CatchBoundary.js');
17
- var RouterProvider = require('./RouterProvider.js');
17
+ var useRouterState = require('./useRouterState.js');
18
+ var useRouter = require('./useRouter.js');
18
19
  var utils = require('./utils.js');
19
20
 
20
21
  function _interopNamespaceDefault(e) {
@@ -38,8 +39,8 @@ var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
38
39
 
39
40
  const matchContext = /*#__PURE__*/React__namespace.createContext(undefined);
40
41
  function Matches() {
41
- const router = RouterProvider.useRouter();
42
- const matchId = RouterProvider.useRouterState({
42
+ const router = useRouter.useRouter();
43
+ const matchId = useRouterState.useRouterState({
43
44
  select: s => {
44
45
  return getRenderedMatches(s)[0]?.id;
45
46
  }
@@ -62,8 +63,8 @@ function SafeFragment(props) {
62
63
  function Match({
63
64
  matchId
64
65
  }) {
65
- const router = RouterProvider.useRouter();
66
- const routeId = RouterProvider.useRouterState({
66
+ const router = useRouter.useRouter();
67
+ const routeId = useRouterState.useRouterState({
67
68
  select: s => getRenderedMatches(s).find(d => d.id === matchId)?.routeId
68
69
  });
69
70
  invariant(routeId, `Could not find routeId for matchId "${matchId}". Please file an issue!`);
@@ -92,12 +93,12 @@ function MatchInner({
92
93
  matchId,
93
94
  pendingElement
94
95
  }) {
95
- const router = RouterProvider.useRouter();
96
- const routeId = RouterProvider.useRouterState({
96
+ const router = useRouter.useRouter();
97
+ const routeId = useRouterState.useRouterState({
97
98
  select: s => getRenderedMatches(s).find(d => d.id === matchId)?.routeId
98
99
  });
99
100
  const route = router.routesById[routeId];
100
- const match = RouterProvider.useRouterState({
101
+ const match = useRouterState.useRouterState({
101
102
  select: s => utils.pick(getRenderedMatches(s).find(d => d.id === matchId), ['status', 'error', 'showPending', 'loadPromise'])
102
103
  });
103
104
  if (match.status === 'error') {
@@ -120,7 +121,7 @@ function MatchInner({
120
121
  }
121
122
  const Outlet = /*#__PURE__*/React__namespace.memo(function Outlet() {
122
123
  const matchId = React__namespace.useContext(matchContext);
123
- const childMatchId = RouterProvider.useRouterState({
124
+ const childMatchId = useRouterState.useRouterState({
124
125
  select: s => {
125
126
  const matches = getRenderedMatches(s);
126
127
  const index = matches.findIndex(d => d.id === matchId);
@@ -135,12 +136,12 @@ const Outlet = /*#__PURE__*/React__namespace.memo(function Outlet() {
135
136
  });
136
137
  });
137
138
  function useMatchRoute() {
138
- RouterProvider.useRouterState({
139
+ useRouterState.useRouterState({
139
140
  select: s => [s.location, s.resolvedLocation]
140
141
  });
141
142
  const {
142
143
  matchRoute
143
- } = RouterProvider.useRouter();
144
+ } = useRouter.useRouter();
144
145
  return React__namespace.useCallback(opts => {
145
146
  const {
146
147
  pending,
@@ -169,7 +170,7 @@ function getRenderedMatches(state) {
169
170
  return state.pendingMatches?.some(d => d.showPending) ? state.pendingMatches : state.matches;
170
171
  }
171
172
  function useMatch(opts) {
172
- const router = RouterProvider.useRouter();
173
+ const router = useRouter.useRouter();
173
174
  const nearestMatchId = React__namespace.useContext(matchContext);
174
175
  const nearestMatchRouteId = getRenderedMatches(router.state).find(d => d.id === nearestMatchId)?.routeId;
175
176
  const matchRouteId = (() => {
@@ -180,7 +181,7 @@ function useMatch(opts) {
180
181
  if (opts?.strict ?? true) {
181
182
  invariant(nearestMatchRouteId == matchRouteId, `useMatch("${matchRouteId}") is being called in a component that is meant to render the '${nearestMatchRouteId}' route. Did you mean to 'useMatch("${matchRouteId}", { strict: false })' or 'useRoute("${matchRouteId}")' instead?`);
182
183
  }
183
- const matchSelection = RouterProvider.useRouterState({
184
+ const matchSelection = useRouterState.useRouterState({
184
185
  select: state => {
185
186
  const match = getRenderedMatches(state).find(d => d.id === nearestMatchId);
186
187
  invariant(match, `Could not find ${opts?.from ? `an active match from "${opts.from}"` : 'a nearest match!'}`);
@@ -190,7 +191,7 @@ function useMatch(opts) {
190
191
  return matchSelection;
191
192
  }
192
193
  function useMatches(opts) {
193
- return RouterProvider.useRouterState({
194
+ return useRouterState.useRouterState({
194
195
  select: state => {
195
196
  let matches = getRenderedMatches(state);
196
197
  return opts?.select ? opts.select(matches) : matches;
@@ -1 +1 @@
1
- {"version":3,"file":"Matches.js","sources":["../../src/Matches.tsx"],"sourcesContent":["import * as React from 'react'\nimport invariant from 'tiny-invariant'\nimport warning from 'tiny-warning'\nimport { CatchBoundary, ErrorComponent } from './CatchBoundary'\nimport { useRouter, useRouterState } from './RouterProvider'\nimport { ResolveRelativePath, ToOptions } from './link'\nimport { AnyRoute, ReactNode, RootSearchSchema } from './route'\nimport {\n ParseRoute,\n RouteById,\n RouteByPath,\n RouteIds,\n RoutePaths,\n} from './routeInfo'\nimport { RegisteredRouter, RouterState } from './router'\nimport { NoInfer, StrictOrFrom, pick } from './utils'\n\nexport const matchContext = React.createContext<string | undefined>(undefined)\n\nexport interface RouteMatch<\n TRouteTree extends AnyRoute = AnyRoute,\n TRouteId extends RouteIds<TRouteTree> = ParseRoute<TRouteTree>['id'],\n> {\n id: string\n routeId: TRouteId\n pathname: string\n params: RouteById<TRouteTree, TRouteId>['types']['allParams']\n status: 'pending' | 'success' | 'error'\n isFetching: boolean\n showPending: boolean\n error: unknown\n paramsError: unknown\n searchError: unknown\n updatedAt: number\n loadPromise?: Promise<void>\n loaderData?: RouteById<TRouteTree, TRouteId>['types']['loaderData']\n routeContext: RouteById<TRouteTree, TRouteId>['types']['routeContext']\n context: RouteById<TRouteTree, TRouteId>['types']['allContext']\n search: Exclude<\n RouteById<TRouteTree, TRouteId>['types']['fullSearchSchema'],\n RootSearchSchema\n >\n fetchCount: number\n abortController: AbortController\n cause: 'preload' | 'enter' | 'stay'\n loaderDeps: RouteById<TRouteTree, TRouteId>['types']['loaderDeps']\n preload: boolean\n invalid: boolean\n pendingPromise?: Promise<void>\n}\n\nexport type AnyRouteMatch = RouteMatch<any, any>\n\nexport function Matches() {\n const router = useRouter()\n const matchId = useRouterState({\n select: (s) => {\n return getRenderedMatches(s)[0]?.id\n },\n })\n\n return (\n <matchContext.Provider value={matchId}>\n <CatchBoundary\n getResetKey={() => router.state.resolvedLocation.state?.key}\n errorComponent={ErrorComponent}\n onCatch={() => {\n warning(\n false,\n `Error in router! Consider setting an 'errorComponent' in your RootRoute! 👍`,\n )\n }}\n >\n {matchId ? <Match matchId={matchId} /> : null}\n </CatchBoundary>\n </matchContext.Provider>\n )\n}\n\nfunction SafeFragment(props: any) {\n return <>{props.children}</>\n}\n\nexport function Match({ matchId }: { matchId: string }) {\n const router = useRouter()\n const routeId = useRouterState({\n select: (s) =>\n getRenderedMatches(s).find((d) => d.id === matchId)?.routeId as string,\n })\n\n invariant(\n routeId,\n `Could not find routeId for matchId \"${matchId}\". Please file an issue!`,\n )\n\n const route = router.routesById[routeId]!\n\n const PendingComponent = (route.options.pendingComponent ??\n router.options.defaultPendingComponent) as any\n\n const pendingElement = PendingComponent ? <PendingComponent /> : null\n\n const routeErrorComponent =\n route.options.errorComponent ??\n router.options.defaultErrorComponent ??\n ErrorComponent\n\n const ResolvedSuspenseBoundary =\n route.options.wrapInSuspense ??\n PendingComponent ??\n route.options.component?.preload ??\n route.options.pendingComponent?.preload ??\n (route.options.errorComponent as any)?.preload\n ? React.Suspense\n : SafeFragment\n\n const ResolvedCatchBoundary = routeErrorComponent\n ? CatchBoundary\n : SafeFragment\n\n return (\n <matchContext.Provider value={matchId}>\n <ResolvedSuspenseBoundary fallback={pendingElement}>\n <ResolvedCatchBoundary\n getResetKey={() => router.state.resolvedLocation.state?.key}\n errorComponent={routeErrorComponent}\n onCatch={() => {\n warning(false, `Error in route match: ${matchId}`)\n }}\n >\n <MatchInner matchId={matchId!} pendingElement={pendingElement} />\n </ResolvedCatchBoundary>\n </ResolvedSuspenseBoundary>\n </matchContext.Provider>\n )\n}\n\nfunction MatchInner({\n matchId,\n pendingElement,\n}: {\n matchId: string\n pendingElement: any\n}): any {\n const router = useRouter()\n const routeId = useRouterState({\n select: (s) =>\n getRenderedMatches(s).find((d) => d.id === matchId)?.routeId as string,\n })\n\n const route = router.routesById[routeId]!\n\n const match = useRouterState({\n select: (s) =>\n pick(getRenderedMatches(s).find((d) => d.id === matchId)!, [\n 'status',\n 'error',\n 'showPending',\n 'loadPromise',\n ]),\n })\n\n if (match.status === 'error') {\n throw match.error\n }\n\n if (match.status === 'pending') {\n if (match.showPending) {\n return pendingElement\n }\n throw match.loadPromise\n }\n\n if (match.status === 'success') {\n let Comp = route.options.component ?? router.options.defaultComponent\n\n if (Comp) {\n return <Comp />\n }\n\n return <Outlet />\n }\n\n invariant(\n false,\n 'Idle routeMatch status encountered during rendering! You should never see this. File an issue!',\n )\n}\n\nexport const Outlet = React.memo(function Outlet() {\n const matchId = React.useContext(matchContext)\n\n const childMatchId = useRouterState({\n select: (s) => {\n const matches = getRenderedMatches(s)\n const index = matches.findIndex((d) => d.id === matchId)\n return matches[index + 1]?.id\n },\n })\n\n if (!childMatchId) {\n return null\n }\n\n return <Match matchId={childMatchId} />\n})\n\nexport interface MatchRouteOptions {\n pending?: boolean\n caseSensitive?: boolean\n includeSearch?: boolean\n fuzzy?: boolean\n}\n\nexport type UseMatchRouteOptions<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TFrom extends RoutePaths<TRouteTree> = '/',\n TTo extends string = '',\n TMaskFrom extends RoutePaths<TRouteTree> = '/',\n TMaskTo extends string = '',\n> = ToOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo> & MatchRouteOptions\n\nexport function useMatchRoute<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n>() {\n useRouterState({ select: (s) => [s.location, s.resolvedLocation] })\n const { matchRoute } = useRouter()\n\n return React.useCallback(\n <\n TFrom extends RoutePaths<TRouteTree> = '/',\n TTo extends string = '',\n TMaskFrom extends RoutePaths<TRouteTree> = '/',\n TMaskTo extends string = '',\n TResolved extends string = ResolveRelativePath<TFrom, NoInfer<TTo>>,\n >(\n opts: UseMatchRouteOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo>,\n ): false | RouteById<TRouteTree, TResolved>['types']['allParams'] => {\n const { pending, caseSensitive, fuzzy, includeSearch, ...rest } = opts\n\n return matchRoute(rest as any, {\n pending,\n caseSensitive,\n fuzzy,\n includeSearch,\n })\n },\n [],\n )\n}\n\nexport type MakeMatchRouteOptions<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TFrom extends RoutePaths<TRouteTree> = '/',\n TTo extends string = '',\n TMaskFrom extends RoutePaths<TRouteTree> = '/',\n TMaskTo extends string = '',\n> = ToOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo> &\n MatchRouteOptions & {\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 TRouteTree,\n ResolveRelativePath<TFrom, NoInfer<TTo>>\n >['types']['allParams'],\n ) => ReactNode)\n | React.ReactNode\n }\n\nexport function MatchRoute<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TFrom extends RoutePaths<TRouteTree> = '/',\n TTo extends string = '',\n TMaskFrom extends RoutePaths<TRouteTree> = '/',\n TMaskTo extends string = '',\n>(\n props: MakeMatchRouteOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo>,\n): any {\n const matchRoute = useMatchRoute()\n const params = matchRoute(props as any)\n\n if (typeof props.children === 'function') {\n return (props.children as any)(params)\n }\n\n return !!params ? props.children : null\n}\n\nexport function getRenderedMatches(state: RouterState) {\n return state.pendingMatches?.some((d) => d.showPending)\n ? state.pendingMatches\n : state.matches\n}\n\nexport function useMatch<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TFrom extends RouteIds<TRouteTree> = RouteIds<TRouteTree>,\n TRouteMatchState = RouteMatch<TRouteTree, TFrom>,\n TSelected = TRouteMatchState,\n>(\n opts: StrictOrFrom<TFrom> & {\n select?: (match: TRouteMatchState) => TSelected\n },\n): TSelected {\n const router = useRouter()\n const nearestMatchId = React.useContext(matchContext)\n\n const nearestMatchRouteId = getRenderedMatches(router.state).find(\n (d) => d.id === nearestMatchId,\n )?.routeId\n\n const matchRouteId = (() => {\n const matches = getRenderedMatches(router.state)\n const match = opts?.from\n ? matches.find((d) => d.routeId === opts?.from)\n : matches.find((d) => d.id === nearestMatchId)\n return match!.routeId\n })()\n\n if (opts?.strict ?? true) {\n invariant(\n nearestMatchRouteId == matchRouteId,\n `useMatch(\"${\n matchRouteId as string\n }\") is being called in a component that is meant to render the '${nearestMatchRouteId}' route. Did you mean to 'useMatch(\"${\n matchRouteId as string\n }\", { strict: false })' or 'useRoute(\"${\n matchRouteId as string\n }\")' instead?`,\n )\n }\n\n const matchSelection = useRouterState({\n select: (state) => {\n const match = getRenderedMatches(state).find(\n (d) => d.id === nearestMatchId,\n )\n\n invariant(\n match,\n `Could not find ${\n opts?.from\n ? `an active match from \"${opts.from}\"`\n : 'a nearest match!'\n }`,\n )\n\n return opts?.select ? opts.select(match as any) : match\n },\n })\n\n return matchSelection as any\n}\n\nexport function useMatches<T = RouteMatch[]>(opts?: {\n select?: (matches: RouteMatch[]) => T\n}): T {\n return useRouterState({\n select: (state) => {\n let matches = getRenderedMatches(state)\n return opts?.select ? opts.select(matches) : (matches as T)\n },\n })\n}\n\nexport function useParentMatches<T = RouteMatch[]>(opts?: {\n select?: (matches: RouteMatch[]) => T\n}): T {\n const contextMatchId = React.useContext(matchContext)\n\n return useMatches({\n select: (matches) => {\n matches = matches.slice(matches.findIndex((d) => d.id === contextMatchId))\n return opts?.select ? opts.select(matches) : (matches as T)\n },\n })\n}\n\nexport function useLoaderDeps<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TFrom extends RouteIds<TRouteTree> = RouteIds<TRouteTree>,\n TRouteMatch extends RouteMatch<TRouteTree, TFrom> = RouteMatch<\n TRouteTree,\n TFrom\n >,\n TSelected = Required<TRouteMatch>['loaderDeps'],\n>(\n opts: StrictOrFrom<TFrom> & {\n select?: (match: TRouteMatch) => TSelected\n },\n): TSelected {\n return useMatch({\n ...opts,\n select: (s) => {\n return typeof opts.select === 'function'\n ? opts.select(s?.loaderDeps)\n : s?.loaderDeps\n },\n })\n}\n\nexport function useLoaderData<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TFrom extends RouteIds<TRouteTree> = RouteIds<TRouteTree>,\n TRouteMatch extends RouteMatch<TRouteTree, TFrom> = RouteMatch<\n TRouteTree,\n TFrom\n >,\n TSelected = Required<TRouteMatch>['loaderData'],\n>(\n opts: StrictOrFrom<TFrom> & {\n select?: (match: TRouteMatch) => TSelected\n },\n): TSelected {\n return useMatch({\n ...opts,\n select: (s) => {\n return typeof opts.select === 'function'\n ? opts.select(s?.loaderData)\n : s?.loaderData\n },\n })\n}\n"],"names":["matchContext","React","createContext","undefined","Matches","router","useRouter","matchId","useRouterState","select","s","getRenderedMatches","id","createElement","Provider","value","CatchBoundary","getResetKey","state","resolvedLocation","key","errorComponent","ErrorComponent","onCatch","warning","Match","SafeFragment","props","Fragment","children","routeId","find","d","invariant","route","routesById","PendingComponent","options","pendingComponent","defaultPendingComponent","pendingElement","routeErrorComponent","defaultErrorComponent","ResolvedSuspenseBoundary","wrapInSuspense","component","preload","Suspense","ResolvedCatchBoundary","fallback","MatchInner","match","pick","status","error","showPending","loadPromise","Comp","defaultComponent","Outlet","memo","useContext","childMatchId","matches","index","findIndex","useMatchRoute","location","matchRoute","useCallback","opts","pending","caseSensitive","fuzzy","includeSearch","rest","MatchRoute","params","pendingMatches","some","useMatch","nearestMatchId","nearestMatchRouteId","matchRouteId","from","strict","matchSelection","useMatches","useParentMatches","contextMatchId","slice","useLoaderDeps","loaderDeps","useLoaderData","loaderData"],"mappings":"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"}
1
+ {"version":3,"file":"Matches.js","sources":["../../src/Matches.tsx"],"sourcesContent":["import * as React from 'react'\nimport invariant from 'tiny-invariant'\nimport warning from 'tiny-warning'\nimport { CatchBoundary, ErrorComponent } from './CatchBoundary'\nimport { useRouterState } from './useRouterState'\nimport { useRouter } from './useRouter'\nimport { ResolveRelativePath, ToOptions } from './link'\nimport { AnyRoute, ReactNode, RootSearchSchema } from './route'\nimport {\n ParseRoute,\n RouteById,\n RouteByPath,\n RouteIds,\n RoutePaths,\n} from './routeInfo'\nimport { RegisteredRouter, RouterState } from './router'\nimport { NoInfer, StrictOrFrom, pick } from './utils'\n\nexport const matchContext = React.createContext<string | undefined>(undefined)\n\nexport interface RouteMatch<\n TRouteTree extends AnyRoute = AnyRoute,\n TRouteId extends RouteIds<TRouteTree> = ParseRoute<TRouteTree>['id'],\n> {\n id: string\n routeId: TRouteId\n pathname: string\n params: RouteById<TRouteTree, TRouteId>['types']['allParams']\n status: 'pending' | 'success' | 'error'\n isFetching: boolean\n showPending: boolean\n error: unknown\n paramsError: unknown\n searchError: unknown\n updatedAt: number\n loadPromise?: Promise<void>\n loaderData?: RouteById<TRouteTree, TRouteId>['types']['loaderData']\n routeContext: RouteById<TRouteTree, TRouteId>['types']['routeContext']\n context: RouteById<TRouteTree, TRouteId>['types']['allContext']\n search: Exclude<\n RouteById<TRouteTree, TRouteId>['types']['fullSearchSchema'],\n RootSearchSchema\n >\n fetchCount: number\n abortController: AbortController\n cause: 'preload' | 'enter' | 'stay'\n loaderDeps: RouteById<TRouteTree, TRouteId>['types']['loaderDeps']\n preload: boolean\n invalid: boolean\n pendingPromise?: Promise<void>\n}\n\nexport type AnyRouteMatch = RouteMatch<any, any>\n\nexport function Matches() {\n const router = useRouter()\n const matchId = useRouterState({\n select: (s) => {\n return getRenderedMatches(s)[0]?.id\n },\n })\n\n return (\n <matchContext.Provider value={matchId}>\n <CatchBoundary\n getResetKey={() => router.state.resolvedLocation.state?.key}\n errorComponent={ErrorComponent}\n onCatch={() => {\n warning(\n false,\n `Error in router! Consider setting an 'errorComponent' in your RootRoute! 👍`,\n )\n }}\n >\n {matchId ? <Match matchId={matchId} /> : null}\n </CatchBoundary>\n </matchContext.Provider>\n )\n}\n\nfunction SafeFragment(props: any) {\n return <>{props.children}</>\n}\n\nexport function Match({ matchId }: { matchId: string }) {\n const router = useRouter()\n const routeId = useRouterState({\n select: (s) =>\n getRenderedMatches(s).find((d) => d.id === matchId)?.routeId as string,\n })\n\n invariant(\n routeId,\n `Could not find routeId for matchId \"${matchId}\". Please file an issue!`,\n )\n\n const route = router.routesById[routeId]!\n\n const PendingComponent = (route.options.pendingComponent ??\n router.options.defaultPendingComponent) as any\n\n const pendingElement = PendingComponent ? <PendingComponent /> : null\n\n const routeErrorComponent =\n route.options.errorComponent ??\n router.options.defaultErrorComponent ??\n ErrorComponent\n\n const ResolvedSuspenseBoundary =\n route.options.wrapInSuspense ??\n PendingComponent ??\n route.options.component?.preload ??\n route.options.pendingComponent?.preload ??\n (route.options.errorComponent as any)?.preload\n ? React.Suspense\n : SafeFragment\n\n const ResolvedCatchBoundary = routeErrorComponent\n ? CatchBoundary\n : SafeFragment\n\n return (\n <matchContext.Provider value={matchId}>\n <ResolvedSuspenseBoundary fallback={pendingElement}>\n <ResolvedCatchBoundary\n getResetKey={() => router.state.resolvedLocation.state?.key}\n errorComponent={routeErrorComponent}\n onCatch={() => {\n warning(false, `Error in route match: ${matchId}`)\n }}\n >\n <MatchInner matchId={matchId!} pendingElement={pendingElement} />\n </ResolvedCatchBoundary>\n </ResolvedSuspenseBoundary>\n </matchContext.Provider>\n )\n}\n\nfunction MatchInner({\n matchId,\n pendingElement,\n}: {\n matchId: string\n pendingElement: any\n}): any {\n const router = useRouter()\n const routeId = useRouterState({\n select: (s) =>\n getRenderedMatches(s).find((d) => d.id === matchId)?.routeId as string,\n })\n\n const route = router.routesById[routeId]!\n\n const match = useRouterState({\n select: (s) =>\n pick(getRenderedMatches(s).find((d) => d.id === matchId)!, [\n 'status',\n 'error',\n 'showPending',\n 'loadPromise',\n ]),\n })\n\n if (match.status === 'error') {\n throw match.error\n }\n\n if (match.status === 'pending') {\n if (match.showPending) {\n return pendingElement\n }\n throw match.loadPromise\n }\n\n if (match.status === 'success') {\n let Comp = route.options.component ?? router.options.defaultComponent\n\n if (Comp) {\n return <Comp />\n }\n\n return <Outlet />\n }\n\n invariant(\n false,\n 'Idle routeMatch status encountered during rendering! You should never see this. File an issue!',\n )\n}\n\nexport const Outlet = React.memo(function Outlet() {\n const matchId = React.useContext(matchContext)\n\n const childMatchId = useRouterState({\n select: (s) => {\n const matches = getRenderedMatches(s)\n const index = matches.findIndex((d) => d.id === matchId)\n return matches[index + 1]?.id\n },\n })\n\n if (!childMatchId) {\n return null\n }\n\n return <Match matchId={childMatchId} />\n})\n\nexport interface MatchRouteOptions {\n pending?: boolean\n caseSensitive?: boolean\n includeSearch?: boolean\n fuzzy?: boolean\n}\n\nexport type UseMatchRouteOptions<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TFrom extends RoutePaths<TRouteTree> = '/',\n TTo extends string = '',\n TMaskFrom extends RoutePaths<TRouteTree> = '/',\n TMaskTo extends string = '',\n> = ToOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo> & MatchRouteOptions\n\nexport function useMatchRoute<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n>() {\n useRouterState({ select: (s) => [s.location, s.resolvedLocation] })\n const { matchRoute } = useRouter()\n\n return React.useCallback(\n <\n TFrom extends RoutePaths<TRouteTree> = '/',\n TTo extends string = '',\n TMaskFrom extends RoutePaths<TRouteTree> = '/',\n TMaskTo extends string = '',\n TResolved extends string = ResolveRelativePath<TFrom, NoInfer<TTo>>,\n >(\n opts: UseMatchRouteOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo>,\n ): false | RouteById<TRouteTree, TResolved>['types']['allParams'] => {\n const { pending, caseSensitive, fuzzy, includeSearch, ...rest } = opts\n\n return matchRoute(rest as any, {\n pending,\n caseSensitive,\n fuzzy,\n includeSearch,\n })\n },\n [],\n )\n}\n\nexport type MakeMatchRouteOptions<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TFrom extends RoutePaths<TRouteTree> = '/',\n TTo extends string = '',\n TMaskFrom extends RoutePaths<TRouteTree> = '/',\n TMaskTo extends string = '',\n> = ToOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo> &\n MatchRouteOptions & {\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 TRouteTree,\n ResolveRelativePath<TFrom, NoInfer<TTo>>\n >['types']['allParams'],\n ) => ReactNode)\n | React.ReactNode\n }\n\nexport function MatchRoute<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TFrom extends RoutePaths<TRouteTree> = '/',\n TTo extends string = '',\n TMaskFrom extends RoutePaths<TRouteTree> = '/',\n TMaskTo extends string = '',\n>(\n props: MakeMatchRouteOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo>,\n): any {\n const matchRoute = useMatchRoute()\n const params = matchRoute(props as any)\n\n if (typeof props.children === 'function') {\n return (props.children as any)(params)\n }\n\n return !!params ? props.children : null\n}\n\nexport function getRenderedMatches(state: RouterState) {\n return state.pendingMatches?.some((d) => d.showPending)\n ? state.pendingMatches\n : state.matches\n}\n\nexport function useMatch<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TFrom extends RouteIds<TRouteTree> = RouteIds<TRouteTree>,\n TRouteMatchState = RouteMatch<TRouteTree, TFrom>,\n TSelected = TRouteMatchState,\n>(\n opts: StrictOrFrom<TFrom> & {\n select?: (match: TRouteMatchState) => TSelected\n },\n): TSelected {\n const router = useRouter()\n const nearestMatchId = React.useContext(matchContext)\n\n const nearestMatchRouteId = getRenderedMatches(router.state).find(\n (d) => d.id === nearestMatchId,\n )?.routeId\n\n const matchRouteId = (() => {\n const matches = getRenderedMatches(router.state)\n const match = opts?.from\n ? matches.find((d) => d.routeId === opts?.from)\n : matches.find((d) => d.id === nearestMatchId)\n return match!.routeId\n })()\n\n if (opts?.strict ?? true) {\n invariant(\n nearestMatchRouteId == matchRouteId,\n `useMatch(\"${\n matchRouteId as string\n }\") is being called in a component that is meant to render the '${nearestMatchRouteId}' route. Did you mean to 'useMatch(\"${\n matchRouteId as string\n }\", { strict: false })' or 'useRoute(\"${\n matchRouteId as string\n }\")' instead?`,\n )\n }\n\n const matchSelection = useRouterState({\n select: (state) => {\n const match = getRenderedMatches(state).find(\n (d) => d.id === nearestMatchId,\n )\n\n invariant(\n match,\n `Could not find ${\n opts?.from\n ? `an active match from \"${opts.from}\"`\n : 'a nearest match!'\n }`,\n )\n\n return opts?.select ? opts.select(match as any) : match\n },\n })\n\n return matchSelection as any\n}\n\nexport function useMatches<T = RouteMatch[]>(opts?: {\n select?: (matches: RouteMatch[]) => T\n}): T {\n return useRouterState({\n select: (state) => {\n let matches = getRenderedMatches(state)\n return opts?.select ? opts.select(matches) : (matches as T)\n },\n })\n}\n\nexport function useParentMatches<T = RouteMatch[]>(opts?: {\n select?: (matches: RouteMatch[]) => T\n}): T {\n const contextMatchId = React.useContext(matchContext)\n\n return useMatches({\n select: (matches) => {\n matches = matches.slice(matches.findIndex((d) => d.id === contextMatchId))\n return opts?.select ? opts.select(matches) : (matches as T)\n },\n })\n}\n\nexport function useLoaderDeps<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TFrom extends RouteIds<TRouteTree> = RouteIds<TRouteTree>,\n TRouteMatch extends RouteMatch<TRouteTree, TFrom> = RouteMatch<\n TRouteTree,\n TFrom\n >,\n TSelected = Required<TRouteMatch>['loaderDeps'],\n>(\n opts: StrictOrFrom<TFrom> & {\n select?: (match: TRouteMatch) => TSelected\n },\n): TSelected {\n return useMatch({\n ...opts,\n select: (s) => {\n return typeof opts.select === 'function'\n ? opts.select(s?.loaderDeps)\n : s?.loaderDeps\n },\n })\n}\n\nexport function useLoaderData<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TFrom extends RouteIds<TRouteTree> = RouteIds<TRouteTree>,\n TRouteMatch extends RouteMatch<TRouteTree, TFrom> = RouteMatch<\n TRouteTree,\n TFrom\n >,\n TSelected = Required<TRouteMatch>['loaderData'],\n>(\n opts: StrictOrFrom<TFrom> & {\n select?: (match: TRouteMatch) => TSelected\n },\n): TSelected {\n return useMatch({\n ...opts,\n select: (s) => {\n return typeof opts.select === 'function'\n ? opts.select(s?.loaderData)\n : s?.loaderData\n },\n })\n}\n"],"names":["matchContext","React","createContext","undefined","Matches","router","useRouter","matchId","useRouterState","select","s","getRenderedMatches","id","createElement","Provider","value","CatchBoundary","getResetKey","state","resolvedLocation","key","errorComponent","ErrorComponent","onCatch","warning","Match","SafeFragment","props","Fragment","children","routeId","find","d","invariant","route","routesById","PendingComponent","options","pendingComponent","defaultPendingComponent","pendingElement","routeErrorComponent","defaultErrorComponent","ResolvedSuspenseBoundary","wrapInSuspense","component","preload","Suspense","ResolvedCatchBoundary","fallback","MatchInner","match","pick","status","error","showPending","loadPromise","Comp","defaultComponent","Outlet","memo","useContext","childMatchId","matches","index","findIndex","useMatchRoute","location","matchRoute","useCallback","opts","pending","caseSensitive","fuzzy","includeSearch","rest","MatchRoute","params","pendingMatches","some","useMatch","nearestMatchId","nearestMatchRouteId","matchRouteId","from","strict","matchSelection","useMatches","useParentMatches","contextMatchId","slice","useLoaderDeps","loaderDeps","useLoaderData","loaderData"],"mappings":"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"}
@@ -11,10 +11,11 @@
11
11
  'use strict';
12
12
 
13
13
  var React = require('react');
14
- var warning = require('tiny-warning');
15
- var reactStore = require('@tanstack/react-store');
16
14
  var Matches = require('./Matches.js');
17
15
  var utils = require('./utils.js');
16
+ var useRouter = require('./useRouter.js');
17
+ var useRouterState = require('./useRouterState.js');
18
+ var routerContext = require('./routerContext.js');
18
19
 
19
20
  function _interopNamespaceDefault(e) {
20
21
  var n = Object.create(null);
@@ -38,14 +39,6 @@ var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
38
39
  const useTransition = React__namespace.useTransition || (() => [false, cb => {
39
40
  cb();
40
41
  }]);
41
- exports.routerContext = /*#__PURE__*/React__namespace.createContext(null);
42
- if (typeof document !== 'undefined') {
43
- if (window.__TSR_ROUTER_CONTEXT__) {
44
- exports.routerContext = window.__TSR_ROUTER_CONTEXT__;
45
- } else {
46
- window.__TSR_ROUTER_CONTEXT__ = exports.routerContext;
47
- }
48
- }
49
42
  function RouterProvider({
50
43
  router,
51
44
  ...rest
@@ -60,7 +53,7 @@ function RouterProvider({
60
53
  }
61
54
  });
62
55
  const matches = router.options.InnerWrap ? /*#__PURE__*/React__namespace.createElement(router.options.InnerWrap, null, /*#__PURE__*/React__namespace.createElement(Matches.Matches, null)) : /*#__PURE__*/React__namespace.createElement(Matches.Matches, null);
63
- const provider = /*#__PURE__*/React__namespace.createElement(exports.routerContext.Provider, {
56
+ const provider = /*#__PURE__*/React__namespace.createElement(routerContext.routerContext.Provider, {
64
57
  value: router
65
58
  }, matches, /*#__PURE__*/React__namespace.createElement(Transitioner, null));
66
59
  if (router.options.Wrap) {
@@ -70,8 +63,8 @@ function RouterProvider({
70
63
  }
71
64
  function Transitioner() {
72
65
  const mountLoadCount = React__namespace.useRef(0);
73
- const router = useRouter();
74
- const routerState = useRouterState({
66
+ const router = useRouter.useRouter();
67
+ const routerState = useRouterState.useRouterState({
75
68
  select: s => utils.pick(s, ['isLoading', 'location', 'resolvedLocation', 'isTransitioning'])
76
69
  });
77
70
  const [isTransitioning, startReactTransition] = useTransition();
@@ -157,21 +150,7 @@ function Transitioner() {
157
150
  function getRouteMatch(state, id) {
158
151
  return [...state.cachedMatches, ...(state.pendingMatches ?? []), ...state.matches].find(d => d.id === id);
159
152
  }
160
- function useRouterState(opts) {
161
- const contextRouter = useRouter({
162
- warn: opts?.router === undefined
163
- });
164
- return reactStore.useStore((opts?.router || contextRouter).__store, opts?.select);
165
- }
166
- function useRouter(opts) {
167
- const resolvedContext = typeof document !== 'undefined' ? window.__TSR_ROUTER_CONTEXT__ || exports.routerContext : exports.routerContext;
168
- const value = React__namespace.useContext(resolvedContext);
169
- warning(!((opts?.warn ?? true) && !value), 'useRouter must be used inside a <RouterProvider> component!');
170
- return value;
171
- }
172
153
 
173
154
  exports.RouterProvider = RouterProvider;
174
155
  exports.getRouteMatch = getRouteMatch;
175
- exports.useRouter = useRouter;
176
- exports.useRouterState = useRouterState;
177
156
  //# sourceMappingURL=RouterProvider.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"RouterProvider.js","sources":["../../src/RouterProvider.tsx"],"sourcesContent":["import * as React from 'react'\nimport warning from 'tiny-warning'\nimport { useStore } from '@tanstack/react-store'\nimport { Matches } from './Matches'\nimport { NavigateOptions, ResolveRelativePath, ToOptions } from './link'\nimport { ParsedLocation } from './location'\nimport { AnyRoute } from './route'\nimport { RouteById, RoutePaths } from './routeInfo'\nimport {\n BuildNextOptions,\n RegisteredRouter,\n Router,\n RouterOptions,\n RouterState,\n} from './router'\nimport { NoInfer, pick, useLayoutEffect } from './utils'\nimport { MatchRouteOptions } from './Matches'\nimport { RouteMatch } from './Matches'\n\nconst useTransition =\n React.useTransition ||\n (() => [\n false,\n (cb) => {\n cb()\n },\n ])\n\nexport interface CommitLocationOptions {\n replace?: boolean\n resetScroll?: boolean\n startTransition?: 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<TRouteTree extends AnyRoute> = <\n TFrom extends RoutePaths<TRouteTree> | string = string,\n TTo extends string = '',\n TMaskFrom extends RoutePaths<TRouteTree> | string = TFrom,\n TMaskTo extends string = '',\n>(\n opts: NavigateOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo>,\n) => Promise<void>\n\nexport type MatchRouteFn<TRouteTree extends AnyRoute> = <\n TFrom extends RoutePaths<TRouteTree> = '/',\n TTo extends string = '',\n TResolved = ResolveRelativePath<TFrom, NoInfer<TTo>>,\n>(\n location: ToOptions<TRouteTree, TFrom, TTo>,\n opts?: MatchRouteOptions,\n) => false | RouteById<TRouteTree, TResolved>['types']['allParams']\n\nexport type BuildLocationFn<TRouteTree extends AnyRoute> = (\n opts: ToOptions<TRouteTree>,\n) => ParsedLocation\n\nexport type InjectedHtmlEntry = string | (() => Promise<string> | string)\n\nexport let routerContext = React.createContext<Router<any>>(null!)\n\nif (typeof document !== 'undefined') {\n if (window.__TSR_ROUTER_CONTEXT__) {\n routerContext = window.__TSR_ROUTER_CONTEXT__\n } else {\n window.__TSR_ROUTER_CONTEXT__ = routerContext as any\n }\n}\n\nexport function RouterProvider<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TDehydrated extends Record<string, any> = Record<string, any>,\n>({ router, ...rest }: RouterProps<TRouteTree, TDehydrated>) {\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 matches = router.options.InnerWrap ? (\n <router.options.InnerWrap>\n <Matches />\n </router.options.InnerWrap>\n ) : (\n <Matches />\n )\n\n const provider = (\n <routerContext.Provider value={router}>\n {matches}\n <Transitioner />\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\nfunction Transitioner() {\n const mountLoadCount = React.useRef(0)\n const router = useRouter()\n const routerState = useRouterState({\n select: (s) =>\n pick(s, ['isLoading', 'location', 'resolvedLocation', 'isTransitioning']),\n })\n\n const [isTransitioning, startReactTransition] = useTransition()\n\n router.startReactTransition = startReactTransition\n\n React.useEffect(() => {\n if (isTransitioning) {\n router.__store.setState((s) => ({\n ...s,\n isTransitioning,\n }))\n }\n }, [isTransitioning])\n\n const tryLoad = () => {\n const apply = (cb: () => void) => {\n if (!routerState.isTransitioning) {\n startReactTransition(() => cb())\n } else {\n cb()\n }\n }\n\n apply(() => {\n try {\n router.load()\n } catch (err) {\n console.error(err)\n }\n })\n }\n\n useLayoutEffect(() => {\n const unsub = router.history.subscribe(() => {\n router.latestLocation = router.parseLocation(router.latestLocation)\n if (routerState.location !== router.latestLocation) {\n tryLoad()\n }\n })\n\n const nextLocation = router.buildLocation({\n search: true,\n params: true,\n hash: true,\n state: true,\n })\n\n if (routerState.location.href !== nextLocation.href) {\n router.commitLocation({ ...nextLocation, replace: true })\n }\n\n return () => {\n unsub()\n }\n }, [router.history])\n\n useLayoutEffect(() => {\n if (\n (React.useTransition as any)\n ? routerState.isTransitioning && !isTransitioning\n : true &&\n !routerState.isLoading &&\n routerState.resolvedLocation !== routerState.location\n ) {\n router.emit({\n type: 'onResolved',\n fromLocation: routerState.resolvedLocation,\n toLocation: routerState.location,\n pathChanged:\n routerState.location!.href !== routerState.resolvedLocation?.href,\n })\n\n if ((document as any).querySelector) {\n if (routerState.location.hash !== '') {\n const el = document.getElementById(\n routerState.location.hash,\n ) as HTMLElement | null\n if (el) {\n el.scrollIntoView()\n }\n }\n }\n\n router.__store.setState((s) => ({\n ...s,\n isTransitioning: false,\n resolvedLocation: s.location,\n }))\n }\n }, [\n routerState.isTransitioning,\n isTransitioning,\n routerState.isLoading,\n routerState.resolvedLocation,\n routerState.location,\n ])\n\n useLayoutEffect(() => {\n if (!window.__TSR_DEHYDRATED__ && !mountLoadCount.current) {\n mountLoadCount.current++\n tryLoad()\n }\n }, [])\n\n return null\n}\n\nexport function getRouteMatch<TRouteTree extends AnyRoute>(\n state: RouterState<TRouteTree>,\n id: string,\n): undefined | RouteMatch<TRouteTree> {\n return [\n ...state.cachedMatches,\n ...(state.pendingMatches ?? []),\n ...state.matches,\n ].find((d) => d.id === id)\n}\n\nexport function useRouterState<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TSelected = RouterState<TRouteTree>,\n>(opts?: {\n router?: Router<TRouteTree>\n select: (state: RouterState<RegisteredRouter['routeTree']>) => TSelected\n}): TSelected {\n const contextRouter = useRouter<TRouteTree>({\n warn: opts?.router === undefined,\n })\n return useStore((opts?.router || contextRouter).__store, opts?.select as any)\n}\n\nexport type RouterProps<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TDehydrated extends Record<string, any> = Record<string, any>,\n> = Omit<RouterOptions<TRouteTree, TDehydrated>, 'context'> & {\n router: Router<TRouteTree>\n context?: Partial<RouterOptions<TRouteTree, TDehydrated>['context']>\n}\n\nexport function useRouter<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n>(opts?: { warn?: boolean }): Router<TRouteTree> {\n const resolvedContext =\n typeof document !== 'undefined'\n ? window.__TSR_ROUTER_CONTEXT__ || routerContext\n : routerContext\n const value = React.useContext(resolvedContext)\n warning(\n !((opts?.warn ?? true) && !value),\n 'useRouter must be used inside a <RouterProvider> component!',\n )\n return value as any\n}\n"],"names":["useTransition","React","cb","routerContext","createContext","document","window","__TSR_ROUTER_CONTEXT__","RouterProvider","router","rest","update","options","context","matches","InnerWrap","createElement","Matches","provider","Provider","value","Transitioner","Wrap","mountLoadCount","useRef","useRouter","routerState","useRouterState","select","s","pick","isTransitioning","startReactTransition","useEffect","__store","setState","tryLoad","apply","load","err","console","error","useLayoutEffect","unsub","history","subscribe","latestLocation","parseLocation","location","nextLocation","buildLocation","search","params","hash","state","href","commitLocation","replace","isLoading","resolvedLocation","emit","type","fromLocation","toLocation","pathChanged","querySelector","el","getElementById","scrollIntoView","__TSR_DEHYDRATED__","current","getRouteMatch","id","cachedMatches","pendingMatches","find","d","opts","contextRouter","warn","undefined","useStore","resolvedContext","useContext","warning"],"mappings":"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"}
1
+ {"version":3,"file":"RouterProvider.js","sources":["../../src/RouterProvider.tsx"],"sourcesContent":["import * as React from 'react'\nimport { Matches } from './Matches'\nimport { NavigateOptions, ToOptions } from './link'\nimport { ParsedLocation } from './location'\nimport { AnyRoute } from './route'\nimport { RoutePaths } from './routeInfo'\nimport { RegisteredRouter, Router, RouterOptions, RouterState } from './router'\nimport { pick, useLayoutEffect } from './utils'\n\nimport { RouteMatch } from './Matches'\nimport { useRouter } from './useRouter'\nimport { useRouterState } from './useRouterState'\nimport { routerContext } from './routerContext'\n\nconst useTransition =\n React.useTransition ||\n (() => [\n false,\n (cb) => {\n cb()\n },\n ])\n\nexport interface CommitLocationOptions {\n replace?: boolean\n resetScroll?: boolean\n startTransition?: 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<TRouteTree extends AnyRoute> = <\n TFrom extends RoutePaths<TRouteTree> | string = string,\n TTo extends string = '',\n TMaskFrom extends RoutePaths<TRouteTree> | string = TFrom,\n TMaskTo extends string = '',\n>(\n opts: NavigateOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo>,\n) => Promise<void>\n\nexport type BuildLocationFn<TRouteTree extends AnyRoute> = (\n opts: ToOptions<TRouteTree>,\n) => ParsedLocation\n\nexport type InjectedHtmlEntry = string | (() => Promise<string> | string)\n\nexport function RouterProvider<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TDehydrated extends Record<string, any> = Record<string, any>,\n>({ router, ...rest }: RouterProps<TRouteTree, TDehydrated>) {\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 matches = router.options.InnerWrap ? (\n <router.options.InnerWrap>\n <Matches />\n </router.options.InnerWrap>\n ) : (\n <Matches />\n )\n\n const provider = (\n <routerContext.Provider value={router}>\n {matches}\n <Transitioner />\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\nfunction Transitioner() {\n const mountLoadCount = React.useRef(0)\n const router = useRouter()\n const routerState = useRouterState({\n select: (s) =>\n pick(s, ['isLoading', 'location', 'resolvedLocation', 'isTransitioning']),\n })\n\n const [isTransitioning, startReactTransition] = useTransition()\n\n router.startReactTransition = startReactTransition\n\n React.useEffect(() => {\n if (isTransitioning) {\n router.__store.setState((s) => ({\n ...s,\n isTransitioning,\n }))\n }\n }, [isTransitioning])\n\n const tryLoad = () => {\n const apply = (cb: () => void) => {\n if (!routerState.isTransitioning) {\n startReactTransition(() => cb())\n } else {\n cb()\n }\n }\n\n apply(() => {\n try {\n router.load()\n } catch (err) {\n console.error(err)\n }\n })\n }\n\n useLayoutEffect(() => {\n const unsub = router.history.subscribe(() => {\n router.latestLocation = router.parseLocation(router.latestLocation)\n if (routerState.location !== router.latestLocation) {\n tryLoad()\n }\n })\n\n const nextLocation = router.buildLocation({\n search: true,\n params: true,\n hash: true,\n state: true,\n })\n\n if (routerState.location.href !== nextLocation.href) {\n router.commitLocation({ ...nextLocation, replace: true })\n }\n\n return () => {\n unsub()\n }\n }, [router.history])\n\n useLayoutEffect(() => {\n if (\n (React.useTransition as any)\n ? routerState.isTransitioning && !isTransitioning\n : true &&\n !routerState.isLoading &&\n routerState.resolvedLocation !== routerState.location\n ) {\n router.emit({\n type: 'onResolved',\n fromLocation: routerState.resolvedLocation,\n toLocation: routerState.location,\n pathChanged:\n routerState.location!.href !== routerState.resolvedLocation?.href,\n })\n\n if ((document as any).querySelector) {\n if (routerState.location.hash !== '') {\n const el = document.getElementById(\n routerState.location.hash,\n ) as HTMLElement | null\n if (el) {\n el.scrollIntoView()\n }\n }\n }\n\n router.__store.setState((s) => ({\n ...s,\n isTransitioning: false,\n resolvedLocation: s.location,\n }))\n }\n }, [\n routerState.isTransitioning,\n isTransitioning,\n routerState.isLoading,\n routerState.resolvedLocation,\n routerState.location,\n ])\n\n useLayoutEffect(() => {\n if (!window.__TSR_DEHYDRATED__ && !mountLoadCount.current) {\n mountLoadCount.current++\n tryLoad()\n }\n }, [])\n\n return null\n}\n\nexport function getRouteMatch<TRouteTree extends AnyRoute>(\n state: RouterState<TRouteTree>,\n id: string,\n): undefined | RouteMatch<TRouteTree> {\n return [\n ...state.cachedMatches,\n ...(state.pendingMatches ?? []),\n ...state.matches,\n ].find((d) => d.id === id)\n}\n\nexport type RouterProps<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TDehydrated extends Record<string, any> = Record<string, any>,\n> = Omit<RouterOptions<TRouteTree, TDehydrated>, 'context'> & {\n router: Router<TRouteTree>\n context?: Partial<RouterOptions<TRouteTree, TDehydrated>['context']>\n}\n"],"names":["useTransition","React","cb","RouterProvider","router","rest","update","options","context","matches","InnerWrap","createElement","Matches","provider","routerContext","Provider","value","Transitioner","Wrap","mountLoadCount","useRef","useRouter","routerState","useRouterState","select","s","pick","isTransitioning","startReactTransition","useEffect","__store","setState","tryLoad","apply","load","err","console","error","useLayoutEffect","unsub","history","subscribe","latestLocation","parseLocation","location","nextLocation","buildLocation","search","params","hash","state","href","commitLocation","replace","isLoading","resolvedLocation","emit","type","fromLocation","toLocation","pathChanged","document","querySelector","el","getElementById","scrollIntoView","window","__TSR_DEHYDRATED__","current","getRouteMatch","id","cachedMatches","pendingMatches","find","d"],"mappings":"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"}
@@ -10,13 +10,13 @@
10
10
  */
11
11
  'use strict';
12
12
 
13
- var RouterProvider = require('./RouterProvider.js');
13
+ var useRouter = require('./useRouter.js');
14
14
  var defer = require('./defer.js');
15
15
 
16
16
  function useAwaited({
17
17
  promise
18
18
  }) {
19
- const router = RouterProvider.useRouter();
19
+ const router = useRouter.useRouter();
20
20
  let state = promise.__deferredState;
21
21
  const key = `__TSR__DEFERRED__${state.uid}`;
22
22
  if (defer.isDehydratedDeferred(promise)) {
@@ -1 +1 @@
1
- {"version":3,"file":"awaited.js","sources":["../../src/awaited.tsx"],"sourcesContent":["import { useRouter } from './RouterProvider'\nimport { DeferredPromise, isDehydratedDeferred } from './defer'\n\nexport type AwaitOptions<T> = {\n promise: DeferredPromise<T>\n}\n\nexport function useAwaited<T>({ promise }: AwaitOptions<T>): [T] {\n const router = useRouter()\n\n let state = promise.__deferredState\n const key = `__TSR__DEFERRED__${state.uid}`\n\n if (isDehydratedDeferred(promise)) {\n state = router.hydrateData(key)!\n promise = Promise.resolve(state.data) as DeferredPromise<any>\n promise.__deferredState = state\n }\n\n if (state.status === 'pending') {\n throw promise\n }\n\n if (state.status === 'error') {\n throw state.error\n }\n\n router.dehydrateData(key, state)\n\n return [state.data]\n}\n\nexport function Await<T>(\n props: AwaitOptions<T> & {\n children: (result: T) => JSX.Element\n },\n) {\n const awaited = useAwaited(props)\n return props.children(...awaited)\n}\n"],"names":["useAwaited","promise","router","useRouter","state","__deferredState","key","uid","isDehydratedDeferred","hydrateData","Promise","resolve","data","status","error","dehydrateData","Await","props","awaited","children"],"mappings":";;;;;;;;;;;;;;;AAOO,SAASA,UAAUA,CAAI;AAAEC,EAAAA,OAAAA;AAAyB,CAAC,EAAO;AAC/D,EAAA,MAAMC,MAAM,GAAGC,wBAAS,EAAE,CAAA;AAE1B,EAAA,IAAIC,KAAK,GAAGH,OAAO,CAACI,eAAe,CAAA;AACnC,EAAA,MAAMC,GAAG,GAAI,CAAA,iBAAA,EAAmBF,KAAK,CAACG,GAAI,CAAC,CAAA,CAAA;AAE3C,EAAA,IAAIC,0BAAoB,CAACP,OAAO,CAAC,EAAE;AACjCG,IAAAA,KAAK,GAAGF,MAAM,CAACO,WAAW,CAACH,GAAG,CAAE,CAAA;IAChCL,OAAO,GAAGS,OAAO,CAACC,OAAO,CAACP,KAAK,CAACQ,IAAI,CAAyB,CAAA;IAC7DX,OAAO,CAACI,eAAe,GAAGD,KAAK,CAAA;AACjC,GAAA;AAEA,EAAA,IAAIA,KAAK,CAACS,MAAM,KAAK,SAAS,EAAE;AAC9B,IAAA,MAAMZ,OAAO,CAAA;AACf,GAAA;AAEA,EAAA,IAAIG,KAAK,CAACS,MAAM,KAAK,OAAO,EAAE;IAC5B,MAAMT,KAAK,CAACU,KAAK,CAAA;AACnB,GAAA;AAEAZ,EAAAA,MAAM,CAACa,aAAa,CAACT,GAAG,EAAEF,KAAK,CAAC,CAAA;AAEhC,EAAA,OAAO,CAACA,KAAK,CAACQ,IAAI,CAAC,CAAA;AACrB,CAAA;AAEO,SAASI,KAAKA,CACnBC,KAEC,EACD;AACA,EAAA,MAAMC,OAAO,GAAGlB,UAAU,CAACiB,KAAK,CAAC,CAAA;AACjC,EAAA,OAAOA,KAAK,CAACE,QAAQ,CAAC,GAAGD,OAAO,CAAC,CAAA;AACnC;;;;;"}
1
+ {"version":3,"file":"awaited.js","sources":["../../src/awaited.tsx"],"sourcesContent":["import { useRouter } from './useRouter'\nimport { DeferredPromise, isDehydratedDeferred } from './defer'\n\nexport type AwaitOptions<T> = {\n promise: DeferredPromise<T>\n}\n\nexport function useAwaited<T>({ promise }: AwaitOptions<T>): [T] {\n const router = useRouter()\n\n let state = promise.__deferredState\n const key = `__TSR__DEFERRED__${state.uid}`\n\n if (isDehydratedDeferred(promise)) {\n state = router.hydrateData(key)!\n promise = Promise.resolve(state.data) as DeferredPromise<any>\n promise.__deferredState = state\n }\n\n if (state.status === 'pending') {\n throw promise\n }\n\n if (state.status === 'error') {\n throw state.error\n }\n\n router.dehydrateData(key, state)\n\n return [state.data]\n}\n\nexport function Await<T>(\n props: AwaitOptions<T> & {\n children: (result: T) => JSX.Element\n },\n) {\n const awaited = useAwaited(props)\n return props.children(...awaited)\n}\n"],"names":["useAwaited","promise","router","useRouter","state","__deferredState","key","uid","isDehydratedDeferred","hydrateData","Promise","resolve","data","status","error","dehydrateData","Await","props","awaited","children"],"mappings":";;;;;;;;;;;;;;;AAOO,SAASA,UAAUA,CAAI;AAAEC,EAAAA,OAAAA;AAAyB,CAAC,EAAO;AAC/D,EAAA,MAAMC,MAAM,GAAGC,mBAAS,EAAE,CAAA;AAE1B,EAAA,IAAIC,KAAK,GAAGH,OAAO,CAACI,eAAe,CAAA;AACnC,EAAA,MAAMC,GAAG,GAAI,CAAA,iBAAA,EAAmBF,KAAK,CAACG,GAAI,CAAC,CAAA,CAAA;AAE3C,EAAA,IAAIC,0BAAoB,CAACP,OAAO,CAAC,EAAE;AACjCG,IAAAA,KAAK,GAAGF,MAAM,CAACO,WAAW,CAACH,GAAG,CAAE,CAAA;IAChCL,OAAO,GAAGS,OAAO,CAACC,OAAO,CAACP,KAAK,CAACQ,IAAI,CAAyB,CAAA;IAC7DX,OAAO,CAACI,eAAe,GAAGD,KAAK,CAAA;AACjC,GAAA;AAEA,EAAA,IAAIA,KAAK,CAACS,MAAM,KAAK,SAAS,EAAE;AAC9B,IAAA,MAAMZ,OAAO,CAAA;AACf,GAAA;AAEA,EAAA,IAAIG,KAAK,CAACS,MAAM,KAAK,OAAO,EAAE;IAC5B,MAAMT,KAAK,CAACU,KAAK,CAAA;AACnB,GAAA;AAEAZ,EAAAA,MAAM,CAACa,aAAa,CAACT,GAAG,EAAEF,KAAK,CAAC,CAAA;AAEhC,EAAA,OAAO,CAACA,KAAK,CAACQ,IAAI,CAAC,CAAA;AACrB,CAAA;AAEO,SAASI,KAAKA,CACnBC,KAEC,EACD;AACA,EAAA,MAAMC,OAAO,GAAGlB,UAAU,CAACiB,KAAK,CAAC,CAAA;AACjC,EAAA,OAAOA,KAAK,CAACE,QAAQ,CAAC,GAAGD,OAAO,CAAC,CAAA;AACnC;;;;;"}
@@ -32,6 +32,10 @@ var useBlocker = require('./useBlocker.js');
32
32
  var useNavigate = require('./useNavigate.js');
33
33
  var useParams = require('./useParams.js');
34
34
  var useSearch = require('./useSearch.js');
35
+ var routerContext = require('./routerContext.js');
36
+ var useRouteContext = require('./useRouteContext.js');
37
+ var useRouter = require('./useRouter.js');
38
+ var useRouterState = require('./useRouterState.js');
35
39
  var utils = require('./utils.js');
36
40
 
37
41
 
@@ -92,12 +96,6 @@ exports.getInitialRouterState = router.getInitialRouterState;
92
96
  exports.lazyFn = router.lazyFn;
93
97
  exports.RouterProvider = RouterProvider.RouterProvider;
94
98
  exports.getRouteMatch = RouterProvider.getRouteMatch;
95
- Object.defineProperty(exports, 'routerContext', {
96
- enumerable: true,
97
- get: function () { return RouterProvider.routerContext; }
98
- });
99
- exports.useRouter = RouterProvider.useRouter;
100
- exports.useRouterState = RouterProvider.useRouterState;
101
99
  exports.ScrollRestoration = scrollRestoration.ScrollRestoration;
102
100
  exports.useElementScrollRestoration = scrollRestoration.useElementScrollRestoration;
103
101
  exports.useScrollRestoration = scrollRestoration.useScrollRestoration;
@@ -111,6 +109,13 @@ exports.Navigate = useNavigate.Navigate;
111
109
  exports.useNavigate = useNavigate.useNavigate;
112
110
  exports.useParams = useParams.useParams;
113
111
  exports.useSearch = useSearch.useSearch;
112
+ Object.defineProperty(exports, 'routerContext', {
113
+ enumerable: true,
114
+ get: function () { return routerContext.routerContext; }
115
+ });
116
+ exports.useRouteContext = useRouteContext.useRouteContext;
117
+ exports.useRouter = useRouter.useRouter;
118
+ exports.useRouterState = useRouterState.useRouterState;
114
119
  exports.deepEqual = utils.deepEqual;
115
120
  exports.escapeJSON = utils.escapeJSON;
116
121
  exports.functionalUpdate = utils.functionalUpdate;
@@ -122,7 +127,6 @@ exports.pick = utils.pick;
122
127
  exports.replaceEqualDeep = utils.replaceEqualDeep;
123
128
  exports.shallow = utils.shallow;
124
129
  exports.useLayoutEffect = utils.useLayoutEffect;
125
- exports.useRouteContext = utils.useRouteContext;
126
130
  exports.useStableCallback = utils.useStableCallback;
127
131
  Object.keys(history).forEach(function (k) {
128
132
  if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) Object.defineProperty(exports, k, {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
package/build/cjs/link.js CHANGED
@@ -13,7 +13,8 @@
13
13
  var _rollupPluginBabelHelpers = require('./_virtual/_rollupPluginBabelHelpers.js');
14
14
  var React = require('react');
15
15
  var Matches = require('./Matches.js');
16
- var RouterProvider = require('./RouterProvider.js');
16
+ var useRouterState = require('./useRouterState.js');
17
+ var useRouter = require('./useRouter.js');
17
18
  var utils = require('./utils.js');
18
19
 
19
20
  function _interopNamespaceDefault(e) {
@@ -37,7 +38,7 @@ var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
37
38
 
38
39
  const preloadWarning = 'Error preloading route! ☝️';
39
40
  function useLinkProps(options) {
40
- const router = RouterProvider.useRouter();
41
+ const router = useRouter.useRouter();
41
42
  const matchPathname = Matches.useMatch({
42
43
  strict: false,
43
44
  select: s => s.pathname
@@ -97,7 +98,7 @@ function useLinkProps(options) {
97
98
  const next = router.buildLocation(dest);
98
99
  const preload = userPreload ?? router.options.defaultPreload;
99
100
  const preloadDelay = userPreloadDelay ?? router.options.defaultPreloadDelay ?? 0;
100
- const isActive = RouterProvider.useRouterState({
101
+ const isActive = useRouterState.useRouterState({
101
102
  select: s => {
102
103
  // Compare path/hash for matches
103
104
  const currentPathSplit = s.location.pathname.split('/');
@@ -1 +1 @@
1
- {"version":3,"file":"link.js","sources":["../../src/link.tsx"],"sourcesContent":["import * as React from 'react'\nimport { useMatch } from './Matches'\nimport { useRouter, useRouterState } from './RouterProvider'\nimport { Trim } from './fileRoute'\nimport { AnyRoute, ReactNode, RootSearchSchema } from './route'\nimport {\n RouteByPath,\n RouteIds,\n RoutePaths,\n} from './routeInfo'\nimport { RegisteredRouter } from './router'\nimport { LinkProps, UseLinkPropsOptions } from './useNavigate'\nimport {\n Expand,\n NoInfer,\n NonNullableUpdater,\n PickRequired,\n StringLiteral,\n Updater,\n WithoutEmpty,\n deepEqual,\n functionalUpdate,\n} from './utils'\nimport { HistoryState } from '@tanstack/history'\n\nexport type CleanPath<T extends string> = T extends `${infer L}//${infer R}`\n ? CleanPath<`${CleanPath<L>}/${CleanPath<R>}`>\n : T extends `${infer L}//`\n ? `${CleanPath<L>}/`\n : T extends `//${infer L}`\n ? `/${CleanPath<L>}`\n : T\n\nexport type Split<S, TIncludeTrailingSlash = true> = S extends unknown\n ? string extends S\n ? string[]\n : S extends string\n ? CleanPath<S> extends ''\n ? []\n : TIncludeTrailingSlash extends true\n ? CleanPath<S> extends `${infer T}/`\n ? [...Split<T>, '/']\n : CleanPath<S> extends `/${infer U}`\n ? Split<U>\n : CleanPath<S> extends `${infer T}/${infer U}`\n ? [...Split<T>, ...Split<U>]\n : [S]\n : CleanPath<S> extends `${infer T}/${infer U}`\n ? [...Split<T>, ...Split<U>]\n : S extends string\n ? [S]\n : never\n : never\n : never\n\nexport type ParsePathParams<T extends string> = keyof {\n [K in Trim<Split<T>[number], '_'> as K extends `$${infer L}` ? L : never]: K\n}\n\nexport type Join<T, Delimiter extends string = '/'> = T extends []\n ? ''\n : T extends [infer L extends string]\n ? L\n : T extends [infer L extends string, ...infer Tail extends [...string[]]]\n ? CleanPath<`${L}${Delimiter}${Join<Tail>}`>\n : never\n\nexport type Last<T extends any[]> = T extends [...infer _, infer L] ? L : never\n\nexport type RelativeToPathAutoComplete<\n AllPaths extends string,\n TFrom extends string,\n TTo extends string,\n SplitPaths extends string[] = Split<AllPaths, false>,\n> = TTo extends `..${infer _}`\n ? SplitPaths extends [\n ...Split<ResolveRelativePath<TFrom, TTo>, false>,\n ...infer TToRest,\n ]\n ? `${CleanPath<\n Join<\n [\n ...Split<TTo, false>,\n ...(\n | TToRest\n | (Split<\n ResolveRelativePath<TFrom, TTo>,\n false\n >['length'] extends 1\n ? never\n : ['../'])\n ),\n ]\n >\n >}`\n : never\n : TTo extends `./${infer RestTTo}`\n ? SplitPaths extends [\n ...Split<TFrom, false>,\n ...Split<RestTTo, false>,\n ...infer RestPath,\n ]\n ? `${TTo}${Join<RestPath>}`\n : never\n :\n | (TFrom extends `/`\n ? never\n : SplitPaths extends [...Split<TFrom, false>, ...infer RestPath]\n ? Join<RestPath> extends { length: 0 }\n ? never\n : './'\n : never)\n | (TFrom extends `/` ? never : '../')\n | AllPaths\n\nexport type NavigateOptions<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TFrom extends RoutePaths<TRouteTree> | string = RoutePaths<TRouteTree>,\n TTo extends string = '',\n TMaskFrom extends RoutePaths<TRouteTree> | string = TFrom,\n TMaskTo extends string = '',\n> = ToOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo> & {\n // `replace` is a boolean that determines whether the navigation should replace the current history entry or push a new one.\n replace?: boolean\n resetScroll?: boolean\n // If set to `true`, the link's underlying navigate() call will be wrapped in a `React.startTransition` call. Defaults to `true`.\n startTransition?: boolean\n}\n\nexport type ToOptions<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TFrom extends RoutePaths<TRouteTree> | string = RoutePaths<TRouteTree>,\n TTo extends string = '',\n TMaskFrom extends RoutePaths<TRouteTree> | string = TFrom,\n TMaskTo extends string = '',\n> = ToSubOptions<TRouteTree, TFrom, TTo> & {\n mask?: ToMaskOptions<TRouteTree, TMaskFrom, TMaskTo>\n}\n\nexport type ToMaskOptions<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TMaskFrom extends RoutePaths<TRouteTree> | string = RoutePaths<TRouteTree>,\n TMaskTo extends string = '',\n> = ToSubOptions<TRouteTree, TMaskFrom, TMaskTo> & {\n unmaskOnReload?: boolean\n}\n\nexport type ToSubOptions<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TFrom extends RoutePaths<TRouteTree> | string = RoutePaths<TRouteTree>,\n TTo extends string = '',\n TResolved = ResolveRelativePath<TFrom, NoInfer<TTo>>,\n> = {\n to?: ToPathOption<TRouteTree, TFrom, TTo>\n // The new has string or a function to update it\n hash?: true | Updater<string>\n // State to pass to the history stack\n state?: true | NonNullableUpdater<HistoryState>\n // The source route path. This is automatically set when using route-level APIs, but for type-safe relative routing on the router itself, this is required\n from?: StringLiteral<TFrom>\n // // When using relative route paths, this option forces resolution from the current path, instead of the route API's path or `from` path\n} & CheckPath<TRouteTree, NoInfer<TResolved>, {}> &\n SearchParamOptions<TRouteTree, TFrom, TTo, TResolved> &\n PathParamOptions<TRouteTree, TFrom, TTo, TResolved>\n\ntype ParamsReducer<TFrom, TTo> = TTo | ((current: TFrom) => TTo)\n\ntype ParamVariant = 'PATH' | 'SEARCH'\nexport type ParamOptions<\n TRouteTree extends AnyRoute,\n TFrom,\n TTo extends string,\n TResolved,\n TParamVariant extends ParamVariant,\n TFromRouteType extends\n | 'allParams'\n | 'fullSearchSchema' = TParamVariant extends 'PATH'\n ? 'allParams'\n : 'fullSearchSchema',\n TToRouteType extends\n | 'allParams'\n | 'fullSearchSchemaInput' = TParamVariant extends 'PATH'\n ? 'allParams'\n : 'fullSearchSchemaInput',\n TFromParams = Expand<\n Exclude<\n RouteByPath<TRouteTree, TFrom>['types'][TFromRouteType],\n RootSearchSchema\n >\n >,\n TToIndex = TTo extends '' ? '' : RouteByPath<TRouteTree, `${TTo}/`> extends never ? TTo : `${TTo}/`,\n TToParams = TToIndex extends ''\n ? TFromParams\n : never extends TResolved\n ? Expand<\n Exclude<\n RouteByPath<TRouteTree, TToIndex>['types'][TToRouteType],\n RootSearchSchema\n >\n >\n : Expand<\n Exclude<\n RouteByPath<TRouteTree, TResolved>['types'][TToRouteType],\n RootSearchSchema\n >\n >,\n TReducer = ParamsReducer<TFromParams, TToParams>,\n> = Expand<WithoutEmpty<PickRequired<TToParams>>> extends never\n ? Partial<MakeParamOption<TParamVariant, true | TReducer>>\n : TFromParams extends Expand<WithoutEmpty<PickRequired<TToParams>>>\n ? MakeParamOption<TParamVariant, true | TReducer>\n : MakeParamOption<TParamVariant, TReducer>\n\ntype MakeParamOption<\n TParamVariant extends ParamVariant,\n T,\n> = TParamVariant extends 'PATH'\n ? MakePathParamOptions<T>\n : MakeSearchParamOptions<T>\ntype MakeSearchParamOptions<T> = { search: T }\ntype MakePathParamOptions<T> = { params: T }\n\nexport type SearchParamOptions<\n TRouteTree extends AnyRoute,\n TFrom,\n TTo extends string,\n TResolved,\n> = ParamOptions<TRouteTree, TFrom, TTo, TResolved, 'SEARCH'>\n\nexport type PathParamOptions<\n TRouteTree extends AnyRoute,\n TFrom,\n TTo extends string,\n TResolved,\n> = ParamOptions<TRouteTree, TFrom, TTo, TResolved, 'PATH'>\n\nexport type ToPathOption<\n TRouteTree extends AnyRoute = AnyRoute,\n TFrom extends RoutePaths<TRouteTree> | string = string,\n TTo extends string = '',\n> =\n | TTo\n | RelativeToPathAutoComplete<\n RoutePaths<TRouteTree>,\n NoInfer<TFrom> extends string ? NoInfer<TFrom> : '',\n NoInfer<TTo> & string\n >\n\nexport interface ActiveOptions {\n exact?: boolean\n includeHash?: boolean\n includeSearch?: boolean\n}\n\nexport type LinkOptions<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TFrom extends RoutePaths<TRouteTree> | string = string,\n TTo extends string = '',\n TMaskFrom extends RoutePaths<TRouteTree> | string = TFrom,\n TMaskTo extends string = '',\n> = NavigateOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo> & {\n // The standard anchor tag target attribute\n target?: HTMLAnchorElement['target']\n // Defaults to `{ exact: false, includeHash: false }`\n activeOptions?: ActiveOptions\n // If set, will preload the linked route on hover and cache it for this many milliseconds in hopes that the user will eventually navigate there.\n preload?: false | 'intent'\n // Delay intent preloading by this many milliseconds. If the intent exits before this delay, the preload will be cancelled.\n preloadDelay?: number\n // If true, will render the link without the href attribute\n disabled?: boolean\n}\n\nexport type CheckPath<TRouteTree extends AnyRoute, TPath, TPass> = Exclude<\n TPath,\n RoutePaths<TRouteTree>\n> extends never\n ? TPass\n : CheckPathError<TRouteTree, Exclude<TPath, RoutePaths<TRouteTree>>>\n\nexport type CheckPathError<TRouteTree extends AnyRoute, TInvalids> = {\n to: RoutePaths<TRouteTree>\n}\n\nexport type ResolveRelativePath<TFrom, TTo = '.'> = TFrom extends string\n ? TTo extends string\n ? TTo extends '.'\n ? TFrom\n : TTo extends `./`\n ? Join<[TFrom, '/']>\n : TTo extends `./${infer TRest}`\n ? ResolveRelativePath<TFrom, TRest>\n : TTo extends `/${infer TRest}`\n ? TTo\n : Split<TTo> extends ['..', ...infer ToRest]\n ? Split<TFrom> extends [...infer FromRest, infer FromTail]\n ? ToRest extends ['/']\n ? Join<[...FromRest, '/']>\n : ResolveRelativePath<Join<FromRest>, Join<ToRest>>\n : never\n : Split<TTo> extends ['.', ...infer ToRest]\n ? ToRest extends ['/']\n ? Join<[TFrom, '/']>\n : ResolveRelativePath<TFrom, Join<ToRest>>\n : CleanPath<Join<['/', ...Split<TFrom>, ...Split<TTo>]>>\n : never\n : never\n\ntype LinkCurrentTargetElement = {\n preloadTimeout?: null | ReturnType<typeof setTimeout>\n}\n\nconst preloadWarning = 'Error preloading route! ☝️'\n\nexport function useLinkProps<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TFrom extends RoutePaths<TRouteTree> | string = string,\n TTo extends string = '',\n TMaskFrom extends RoutePaths<TRouteTree> | string = TFrom,\n TMaskTo extends string = '',\n>(\n options: UseLinkPropsOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo>,\n): React.AnchorHTMLAttributes<HTMLAnchorElement> {\n const router = useRouter()\n const matchPathname = useMatch({\n strict: false,\n select: (s) => s.pathname,\n })\n\n const {\n // custom props\n children,\n target,\n activeProps = () => ({ className: 'active' }),\n inactiveProps = () => ({}),\n activeOptions,\n disabled,\n hash,\n search,\n params,\n to,\n state,\n mask,\n preload: userPreload,\n preloadDelay: userPreloadDelay,\n replace,\n startTransition,\n resetScroll,\n // element props\n style,\n className,\n onClick,\n onFocus,\n onMouseEnter,\n onMouseLeave,\n onTouchStart,\n ...rest\n } = options\n\n // If this link simply reloads the current route,\n // make sure it has a new key so it will trigger a data refresh\n\n // If this `to` is a valid external URL, return\n // null for LinkUtils\n\n const dest = {\n from: options.to ? matchPathname : undefined,\n ...options,\n }\n\n let type: 'internal' | 'external' = 'internal'\n\n try {\n new URL(`${to}`)\n type = 'external'\n } catch {}\n\n if (type === 'external') {\n return {\n href: to,\n }\n }\n\n const next = router.buildLocation(dest as any)\n const preload = userPreload ?? router.options.defaultPreload\n const preloadDelay =\n userPreloadDelay ?? router.options.defaultPreloadDelay ?? 0\n\n const isActive = useRouterState({\n select: (s) => {\n // Compare path/hash for matches\n const currentPathSplit = s.location.pathname.split('/')\n const nextPathSplit = next.pathname.split('/')\n const pathIsFuzzyEqual = nextPathSplit.every(\n (d, i) => d === currentPathSplit[i],\n )\n // Combine the matches based on user router.options\n const pathTest = activeOptions?.exact\n ? s.location.pathname === next.pathname\n : pathIsFuzzyEqual\n const hashTest = activeOptions?.includeHash\n ? s.location.hash === next.hash\n : true\n const searchTest =\n activeOptions?.includeSearch ?? true\n ? deepEqual(s.location.search, next.search, !activeOptions?.exact)\n : true\n\n // The final \"active\" test\n return pathTest && hashTest && searchTest\n },\n })\n\n // The click handler\n const handleClick = (e: MouseEvent) => {\n if (\n !disabled &&\n !isCtrlEvent(e) &&\n !e.defaultPrevented &&\n (!target || target === '_self') &&\n e.button === 0\n ) {\n e.preventDefault()\n\n // All is well? Navigate!\n router.commitLocation({ ...next, replace, resetScroll, startTransition })\n }\n }\n\n // The click handler\n const handleFocus = (e: MouseEvent) => {\n if (preload) {\n router.preloadRoute(dest as any).catch((err) => {\n console.warn(err)\n console.warn(preloadWarning)\n })\n }\n }\n\n const handleTouchStart = (e: TouchEvent) => {\n if (preload) {\n router.preloadRoute(dest as any).catch((err) => {\n console.warn(err)\n console.warn(preloadWarning)\n })\n }\n }\n\n const handleEnter = (e: MouseEvent) => {\n const target = (e.target || {}) as LinkCurrentTargetElement\n\n if (preload) {\n if (target.preloadTimeout) {\n return\n }\n\n target.preloadTimeout = setTimeout(() => {\n target.preloadTimeout = null\n router.preloadRoute(dest as any).catch((err) => {\n console.warn(err)\n console.warn(preloadWarning)\n })\n }, preloadDelay)\n }\n }\n\n const handleLeave = (e: MouseEvent) => {\n const target = (e.target || {}) as LinkCurrentTargetElement\n\n if (target.preloadTimeout) {\n clearTimeout(target.preloadTimeout)\n target.preloadTimeout = null\n }\n }\n\n const composeHandlers =\n (handlers: (undefined | ((e: any) => void))[]) =>\n (e: React.SyntheticEvent) => {\n if (e.persist) e.persist()\n handlers.filter(Boolean).forEach((handler) => {\n if (e.defaultPrevented) return\n handler!(e)\n })\n }\n\n // Get the active props\n const resolvedActiveProps: React.HTMLAttributes<HTMLAnchorElement> = isActive\n ? functionalUpdate(activeProps as any, {}) ?? {}\n : {}\n\n // Get the inactive props\n const resolvedInactiveProps: React.HTMLAttributes<HTMLAnchorElement> =\n isActive ? {} : functionalUpdate(inactiveProps, {}) ?? {}\n\n return {\n ...resolvedActiveProps,\n ...resolvedInactiveProps,\n ...rest,\n href: disabled\n ? undefined\n : next.maskedLocation\n ? next.maskedLocation.href\n : next.href,\n onClick: composeHandlers([onClick, handleClick]),\n onFocus: composeHandlers([onFocus, handleFocus]),\n onMouseEnter: composeHandlers([onMouseEnter, handleEnter]),\n onMouseLeave: composeHandlers([onMouseLeave, handleLeave]),\n onTouchStart: composeHandlers([onTouchStart, handleTouchStart]),\n target,\n style: {\n ...style,\n ...resolvedActiveProps.style,\n ...resolvedInactiveProps.style,\n },\n className:\n [\n className,\n resolvedActiveProps.className,\n resolvedInactiveProps.className,\n ]\n .filter(Boolean)\n .join(' ') || undefined,\n ...(disabled\n ? {\n role: 'link',\n 'aria-disabled': true,\n }\n : undefined),\n ['data-status']: isActive ? 'active' : undefined,\n }\n}\n\nexport interface LinkComponent<TProps extends Record<string, any> = {}> {\n <\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TFrom extends RoutePaths<TRouteTree> | string = string,\n TTo extends string = '',\n TMaskFrom extends RoutePaths<TRouteTree> | string = TFrom,\n TMaskTo extends string = '',\n >(\n props: LinkProps<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo> &\n TProps &\n React.RefAttributes<HTMLAnchorElement>,\n ): ReactNode\n}\n\nexport const Link: LinkComponent = React.forwardRef((props: any, ref) => {\n const linkProps = useLinkProps(props)\n\n return (\n <a\n {...{\n ref: ref as any,\n ...linkProps,\n children:\n typeof props.children === 'function'\n ? props.children({\n isActive: (linkProps as any)['data-status'] === 'active',\n })\n : props.children,\n }}\n />\n )\n}) as any\n\nfunction isCtrlEvent(e: MouseEvent) {\n return !!(e.metaKey || e.altKey || e.ctrlKey || e.shiftKey)\n}\n"],"names":["preloadWarning","useLinkProps","options","router","useRouter","matchPathname","useMatch","strict","select","s","pathname","children","target","activeProps","className","inactiveProps","activeOptions","disabled","hash","search","params","to","state","mask","preload","userPreload","preloadDelay","userPreloadDelay","replace","startTransition","resetScroll","style","onClick","onFocus","onMouseEnter","onMouseLeave","onTouchStart","rest","dest","from","undefined","type","URL","href","next","buildLocation","defaultPreload","defaultPreloadDelay","isActive","useRouterState","currentPathSplit","location","split","nextPathSplit","pathIsFuzzyEqual","every","d","i","pathTest","exact","hashTest","includeHash","searchTest","includeSearch","deepEqual","handleClick","e","isCtrlEvent","defaultPrevented","button","preventDefault","commitLocation","handleFocus","preloadRoute","catch","err","console","warn","handleTouchStart","handleEnter","preloadTimeout","setTimeout","handleLeave","clearTimeout","composeHandlers","handlers","persist","filter","Boolean","forEach","handler","resolvedActiveProps","functionalUpdate","resolvedInactiveProps","maskedLocation","join","role","Link","React","forwardRef","props","ref","linkProps","createElement","_extends","metaKey","altKey","ctrlKey","shiftKey"],"mappings":"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"}
1
+ {"version":3,"file":"link.js","sources":["../../src/link.tsx"],"sourcesContent":["import * as React from 'react'\nimport { useMatch } from './Matches'\nimport { useRouterState } from './useRouterState'\nimport { useRouter } from './useRouter'\nimport { Trim } from './fileRoute'\nimport { AnyRoute, ReactNode, RootSearchSchema } from './route'\nimport { RouteByPath, RouteIds, RoutePaths } from './routeInfo'\nimport { RegisteredRouter } from './router'\nimport { LinkProps, UseLinkPropsOptions } from './useNavigate'\nimport {\n Expand,\n NoInfer,\n NonNullableUpdater,\n PickRequired,\n StringLiteral,\n Updater,\n WithoutEmpty,\n deepEqual,\n functionalUpdate,\n} from './utils'\nimport { HistoryState } from '@tanstack/history'\n\nexport type CleanPath<T extends string> = T extends `${infer L}//${infer R}`\n ? CleanPath<`${CleanPath<L>}/${CleanPath<R>}`>\n : T extends `${infer L}//`\n ? `${CleanPath<L>}/`\n : T extends `//${infer L}`\n ? `/${CleanPath<L>}`\n : T\n\nexport type Split<S, TIncludeTrailingSlash = true> = S extends unknown\n ? string extends S\n ? string[]\n : S extends string\n ? CleanPath<S> extends ''\n ? []\n : TIncludeTrailingSlash extends true\n ? CleanPath<S> extends `${infer T}/`\n ? [...Split<T>, '/']\n : CleanPath<S> extends `/${infer U}`\n ? Split<U>\n : CleanPath<S> extends `${infer T}/${infer U}`\n ? [...Split<T>, ...Split<U>]\n : [S]\n : CleanPath<S> extends `${infer T}/${infer U}`\n ? [...Split<T>, ...Split<U>]\n : S extends string\n ? [S]\n : never\n : never\n : never\n\nexport type ParsePathParams<T extends string> = keyof {\n [K in Trim<Split<T>[number], '_'> as K extends `$${infer L}` ? L : never]: K\n}\n\nexport type Join<T, Delimiter extends string = '/'> = T extends []\n ? ''\n : T extends [infer L extends string]\n ? L\n : T extends [infer L extends string, ...infer Tail extends [...string[]]]\n ? CleanPath<`${L}${Delimiter}${Join<Tail>}`>\n : never\n\nexport type Last<T extends any[]> = T extends [...infer _, infer L] ? L : never\n\nexport type RelativeToPathAutoComplete<\n AllPaths extends string,\n TFrom extends string,\n TTo extends string,\n SplitPaths extends string[] = Split<AllPaths, false>,\n> = TTo extends `..${infer _}`\n ? SplitPaths extends [\n ...Split<ResolveRelativePath<TFrom, TTo>, false>,\n ...infer TToRest,\n ]\n ? `${CleanPath<\n Join<\n [\n ...Split<TTo, false>,\n ...(\n | TToRest\n | (Split<\n ResolveRelativePath<TFrom, TTo>,\n false\n >['length'] extends 1\n ? never\n : ['../'])\n ),\n ]\n >\n >}`\n : never\n : TTo extends `./${infer RestTTo}`\n ? SplitPaths extends [\n ...Split<TFrom, false>,\n ...Split<RestTTo, false>,\n ...infer RestPath,\n ]\n ? `${TTo}${Join<RestPath>}`\n : never\n :\n | (TFrom extends `/`\n ? never\n : SplitPaths extends [...Split<TFrom, false>, ...infer RestPath]\n ? Join<RestPath> extends { length: 0 }\n ? never\n : './'\n : never)\n | (TFrom extends `/` ? never : '../')\n | AllPaths\n\nexport type NavigateOptions<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TFrom extends RoutePaths<TRouteTree> | string = RoutePaths<TRouteTree>,\n TTo extends string = '',\n TMaskFrom extends RoutePaths<TRouteTree> | string = TFrom,\n TMaskTo extends string = '',\n> = ToOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo> & {\n // `replace` is a boolean that determines whether the navigation should replace the current history entry or push a new one.\n replace?: boolean\n resetScroll?: boolean\n // If set to `true`, the link's underlying navigate() call will be wrapped in a `React.startTransition` call. Defaults to `true`.\n startTransition?: boolean\n}\n\nexport type ToOptions<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TFrom extends RoutePaths<TRouteTree> | string = RoutePaths<TRouteTree>,\n TTo extends string = '',\n TMaskFrom extends RoutePaths<TRouteTree> | string = TFrom,\n TMaskTo extends string = '',\n> = ToSubOptions<TRouteTree, TFrom, TTo> & {\n mask?: ToMaskOptions<TRouteTree, TMaskFrom, TMaskTo>\n}\n\nexport type ToMaskOptions<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TMaskFrom extends RoutePaths<TRouteTree> | string = RoutePaths<TRouteTree>,\n TMaskTo extends string = '',\n> = ToSubOptions<TRouteTree, TMaskFrom, TMaskTo> & {\n unmaskOnReload?: boolean\n}\n\nexport type ToSubOptions<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TFrom extends RoutePaths<TRouteTree> | string = RoutePaths<TRouteTree>,\n TTo extends string = '',\n TResolved = ResolveRelativePath<TFrom, NoInfer<TTo>>,\n> = {\n to?: ToPathOption<TRouteTree, TFrom, TTo>\n // The new has string or a function to update it\n hash?: true | Updater<string>\n // State to pass to the history stack\n state?: true | NonNullableUpdater<HistoryState>\n // The source route path. This is automatically set when using route-level APIs, but for type-safe relative routing on the router itself, this is required\n from?: StringLiteral<TFrom>\n // // When using relative route paths, this option forces resolution from the current path, instead of the route API's path or `from` path\n} & CheckPath<TRouteTree, NoInfer<TResolved>, {}> &\n SearchParamOptions<TRouteTree, TFrom, TTo, TResolved> &\n PathParamOptions<TRouteTree, TFrom, TTo, TResolved>\n\ntype ParamsReducer<TFrom, TTo> = TTo | ((current: TFrom) => TTo)\n\ntype ParamVariant = 'PATH' | 'SEARCH'\nexport type ParamOptions<\n TRouteTree extends AnyRoute,\n TFrom,\n TTo extends string,\n TResolved,\n TParamVariant extends ParamVariant,\n TFromRouteType extends\n | 'allParams'\n | 'fullSearchSchema' = TParamVariant extends 'PATH'\n ? 'allParams'\n : 'fullSearchSchema',\n TToRouteType extends\n | 'allParams'\n | 'fullSearchSchemaInput' = TParamVariant extends 'PATH'\n ? 'allParams'\n : 'fullSearchSchemaInput',\n TFromParams = Expand<\n Exclude<\n RouteByPath<TRouteTree, TFrom>['types'][TFromRouteType],\n RootSearchSchema\n >\n >,\n TToIndex = TTo extends ''\n ? ''\n : RouteByPath<TRouteTree, `${TTo}/`> extends never\n ? TTo\n : `${TTo}/`,\n TToParams = TToIndex extends ''\n ? TFromParams\n : never extends TResolved\n ? Expand<\n Exclude<\n RouteByPath<TRouteTree, TToIndex>['types'][TToRouteType],\n RootSearchSchema\n >\n >\n : Expand<\n Exclude<\n RouteByPath<TRouteTree, TResolved>['types'][TToRouteType],\n RootSearchSchema\n >\n >,\n TReducer = ParamsReducer<TFromParams, TToParams>,\n> = Expand<WithoutEmpty<PickRequired<TToParams>>> extends never\n ? Partial<MakeParamOption<TParamVariant, true | TReducer>>\n : TFromParams extends Expand<WithoutEmpty<PickRequired<TToParams>>>\n ? MakeParamOption<TParamVariant, true | TReducer>\n : MakeParamOption<TParamVariant, TReducer>\n\ntype MakeParamOption<\n TParamVariant extends ParamVariant,\n T,\n> = TParamVariant extends 'PATH'\n ? MakePathParamOptions<T>\n : MakeSearchParamOptions<T>\ntype MakeSearchParamOptions<T> = { search: T }\ntype MakePathParamOptions<T> = { params: T }\n\nexport type SearchParamOptions<\n TRouteTree extends AnyRoute,\n TFrom,\n TTo extends string,\n TResolved,\n> = ParamOptions<TRouteTree, TFrom, TTo, TResolved, 'SEARCH'>\n\nexport type PathParamOptions<\n TRouteTree extends AnyRoute,\n TFrom,\n TTo extends string,\n TResolved,\n> = ParamOptions<TRouteTree, TFrom, TTo, TResolved, 'PATH'>\n\nexport type ToPathOption<\n TRouteTree extends AnyRoute = AnyRoute,\n TFrom extends RoutePaths<TRouteTree> | string = string,\n TTo extends string = '',\n> =\n | TTo\n | RelativeToPathAutoComplete<\n RoutePaths<TRouteTree>,\n NoInfer<TFrom> extends string ? NoInfer<TFrom> : '',\n NoInfer<TTo> & string\n >\n\nexport interface ActiveOptions {\n exact?: boolean\n includeHash?: boolean\n includeSearch?: boolean\n}\n\nexport type LinkOptions<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TFrom extends RoutePaths<TRouteTree> | string = string,\n TTo extends string = '',\n TMaskFrom extends RoutePaths<TRouteTree> | string = TFrom,\n TMaskTo extends string = '',\n> = NavigateOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo> & {\n // The standard anchor tag target attribute\n target?: HTMLAnchorElement['target']\n // Defaults to `{ exact: false, includeHash: false }`\n activeOptions?: ActiveOptions\n // If set, will preload the linked route on hover and cache it for this many milliseconds in hopes that the user will eventually navigate there.\n preload?: false | 'intent'\n // Delay intent preloading by this many milliseconds. If the intent exits before this delay, the preload will be cancelled.\n preloadDelay?: number\n // If true, will render the link without the href attribute\n disabled?: boolean\n}\n\nexport type CheckPath<TRouteTree extends AnyRoute, TPath, TPass> = Exclude<\n TPath,\n RoutePaths<TRouteTree>\n> extends never\n ? TPass\n : CheckPathError<TRouteTree, Exclude<TPath, RoutePaths<TRouteTree>>>\n\nexport type CheckPathError<TRouteTree extends AnyRoute, TInvalids> = {\n to: RoutePaths<TRouteTree>\n}\n\nexport type ResolveRelativePath<TFrom, TTo = '.'> = TFrom extends string\n ? TTo extends string\n ? TTo extends '.'\n ? TFrom\n : TTo extends `./`\n ? Join<[TFrom, '/']>\n : TTo extends `./${infer TRest}`\n ? ResolveRelativePath<TFrom, TRest>\n : TTo extends `/${infer TRest}`\n ? TTo\n : Split<TTo> extends ['..', ...infer ToRest]\n ? Split<TFrom> extends [...infer FromRest, infer FromTail]\n ? ToRest extends ['/']\n ? Join<[...FromRest, '/']>\n : ResolveRelativePath<Join<FromRest>, Join<ToRest>>\n : never\n : Split<TTo> extends ['.', ...infer ToRest]\n ? ToRest extends ['/']\n ? Join<[TFrom, '/']>\n : ResolveRelativePath<TFrom, Join<ToRest>>\n : CleanPath<Join<['/', ...Split<TFrom>, ...Split<TTo>]>>\n : never\n : never\n\ntype LinkCurrentTargetElement = {\n preloadTimeout?: null | ReturnType<typeof setTimeout>\n}\n\nconst preloadWarning = 'Error preloading route! ☝️'\n\nexport function useLinkProps<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TFrom extends RoutePaths<TRouteTree> | string = string,\n TTo extends string = '',\n TMaskFrom extends RoutePaths<TRouteTree> | string = TFrom,\n TMaskTo extends string = '',\n>(\n options: UseLinkPropsOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo>,\n): React.AnchorHTMLAttributes<HTMLAnchorElement> {\n const router = useRouter()\n const matchPathname = useMatch({\n strict: false,\n select: (s) => s.pathname,\n })\n\n const {\n // custom props\n children,\n target,\n activeProps = () => ({ className: 'active' }),\n inactiveProps = () => ({}),\n activeOptions,\n disabled,\n hash,\n search,\n params,\n to,\n state,\n mask,\n preload: userPreload,\n preloadDelay: userPreloadDelay,\n replace,\n startTransition,\n resetScroll,\n // element props\n style,\n className,\n onClick,\n onFocus,\n onMouseEnter,\n onMouseLeave,\n onTouchStart,\n ...rest\n } = options\n\n // If this link simply reloads the current route,\n // make sure it has a new key so it will trigger a data refresh\n\n // If this `to` is a valid external URL, return\n // null for LinkUtils\n\n const dest = {\n from: options.to ? matchPathname : undefined,\n ...options,\n }\n\n let type: 'internal' | 'external' = 'internal'\n\n try {\n new URL(`${to}`)\n type = 'external'\n } catch {}\n\n if (type === 'external') {\n return {\n href: to,\n }\n }\n\n const next = router.buildLocation(dest as any)\n const preload = userPreload ?? router.options.defaultPreload\n const preloadDelay =\n userPreloadDelay ?? router.options.defaultPreloadDelay ?? 0\n\n const isActive = useRouterState({\n select: (s) => {\n // Compare path/hash for matches\n const currentPathSplit = s.location.pathname.split('/')\n const nextPathSplit = next.pathname.split('/')\n const pathIsFuzzyEqual = nextPathSplit.every(\n (d, i) => d === currentPathSplit[i],\n )\n // Combine the matches based on user router.options\n const pathTest = activeOptions?.exact\n ? s.location.pathname === next.pathname\n : pathIsFuzzyEqual\n const hashTest = activeOptions?.includeHash\n ? s.location.hash === next.hash\n : true\n const searchTest =\n activeOptions?.includeSearch ?? true\n ? deepEqual(s.location.search, next.search, !activeOptions?.exact)\n : true\n\n // The final \"active\" test\n return pathTest && hashTest && searchTest\n },\n })\n\n // The click handler\n const handleClick = (e: MouseEvent) => {\n if (\n !disabled &&\n !isCtrlEvent(e) &&\n !e.defaultPrevented &&\n (!target || target === '_self') &&\n e.button === 0\n ) {\n e.preventDefault()\n\n // All is well? Navigate!\n router.commitLocation({ ...next, replace, resetScroll, startTransition })\n }\n }\n\n // The click handler\n const handleFocus = (e: MouseEvent) => {\n if (preload) {\n router.preloadRoute(dest as any).catch((err) => {\n console.warn(err)\n console.warn(preloadWarning)\n })\n }\n }\n\n const handleTouchStart = (e: TouchEvent) => {\n if (preload) {\n router.preloadRoute(dest as any).catch((err) => {\n console.warn(err)\n console.warn(preloadWarning)\n })\n }\n }\n\n const handleEnter = (e: MouseEvent) => {\n const target = (e.target || {}) as LinkCurrentTargetElement\n\n if (preload) {\n if (target.preloadTimeout) {\n return\n }\n\n target.preloadTimeout = setTimeout(() => {\n target.preloadTimeout = null\n router.preloadRoute(dest as any).catch((err) => {\n console.warn(err)\n console.warn(preloadWarning)\n })\n }, preloadDelay)\n }\n }\n\n const handleLeave = (e: MouseEvent) => {\n const target = (e.target || {}) as LinkCurrentTargetElement\n\n if (target.preloadTimeout) {\n clearTimeout(target.preloadTimeout)\n target.preloadTimeout = null\n }\n }\n\n const composeHandlers =\n (handlers: (undefined | ((e: any) => void))[]) =>\n (e: React.SyntheticEvent) => {\n if (e.persist) e.persist()\n handlers.filter(Boolean).forEach((handler) => {\n if (e.defaultPrevented) return\n handler!(e)\n })\n }\n\n // Get the active props\n const resolvedActiveProps: React.HTMLAttributes<HTMLAnchorElement> = isActive\n ? functionalUpdate(activeProps as any, {}) ?? {}\n : {}\n\n // Get the inactive props\n const resolvedInactiveProps: React.HTMLAttributes<HTMLAnchorElement> =\n isActive ? {} : functionalUpdate(inactiveProps, {}) ?? {}\n\n return {\n ...resolvedActiveProps,\n ...resolvedInactiveProps,\n ...rest,\n href: disabled\n ? undefined\n : next.maskedLocation\n ? next.maskedLocation.href\n : next.href,\n onClick: composeHandlers([onClick, handleClick]),\n onFocus: composeHandlers([onFocus, handleFocus]),\n onMouseEnter: composeHandlers([onMouseEnter, handleEnter]),\n onMouseLeave: composeHandlers([onMouseLeave, handleLeave]),\n onTouchStart: composeHandlers([onTouchStart, handleTouchStart]),\n target,\n style: {\n ...style,\n ...resolvedActiveProps.style,\n ...resolvedInactiveProps.style,\n },\n className:\n [\n className,\n resolvedActiveProps.className,\n resolvedInactiveProps.className,\n ]\n .filter(Boolean)\n .join(' ') || undefined,\n ...(disabled\n ? {\n role: 'link',\n 'aria-disabled': true,\n }\n : undefined),\n ['data-status']: isActive ? 'active' : undefined,\n }\n}\n\nexport interface LinkComponent<TProps extends Record<string, any> = {}> {\n <\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TFrom extends RoutePaths<TRouteTree> | string = string,\n TTo extends string = '',\n TMaskFrom extends RoutePaths<TRouteTree> | string = TFrom,\n TMaskTo extends string = '',\n >(\n props: LinkProps<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo> &\n TProps &\n React.RefAttributes<HTMLAnchorElement>,\n ): ReactNode\n}\n\nexport const Link: LinkComponent = React.forwardRef((props: any, ref) => {\n const linkProps = useLinkProps(props)\n\n return (\n <a\n {...{\n ref: ref as any,\n ...linkProps,\n children:\n typeof props.children === 'function'\n ? props.children({\n isActive: (linkProps as any)['data-status'] === 'active',\n })\n : props.children,\n }}\n />\n )\n}) as any\n\nfunction isCtrlEvent(e: MouseEvent) {\n return !!(e.metaKey || e.altKey || e.ctrlKey || e.shiftKey)\n}\n"],"names":["preloadWarning","useLinkProps","options","router","useRouter","matchPathname","useMatch","strict","select","s","pathname","children","target","activeProps","className","inactiveProps","activeOptions","disabled","hash","search","params","to","state","mask","preload","userPreload","preloadDelay","userPreloadDelay","replace","startTransition","resetScroll","style","onClick","onFocus","onMouseEnter","onMouseLeave","onTouchStart","rest","dest","from","undefined","type","URL","href","next","buildLocation","defaultPreload","defaultPreloadDelay","isActive","useRouterState","currentPathSplit","location","split","nextPathSplit","pathIsFuzzyEqual","every","d","i","pathTest","exact","hashTest","includeHash","searchTest","includeSearch","deepEqual","handleClick","e","isCtrlEvent","defaultPrevented","button","preventDefault","commitLocation","handleFocus","preloadRoute","catch","err","console","warn","handleTouchStart","handleEnter","preloadTimeout","setTimeout","handleLeave","clearTimeout","composeHandlers","handlers","persist","filter","Boolean","forEach","handler","resolvedActiveProps","functionalUpdate","resolvedInactiveProps","maskedLocation","join","role","Link","React","forwardRef","props","ref","linkProps","createElement","_extends","metaKey","altKey","ctrlKey","shiftKey"],"mappings":"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"}