@tanstack/react-router 0.0.1-beta.209 → 0.0.1-beta.210

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 (72) hide show
  1. package/build/cjs/CatchBoundary.js +125 -0
  2. package/build/cjs/CatchBoundary.js.map +1 -0
  3. package/build/cjs/Matches.js +223 -0
  4. package/build/cjs/Matches.js.map +1 -0
  5. package/build/cjs/RouterProvider.js +99 -53
  6. package/build/cjs/RouterProvider.js.map +1 -1
  7. package/build/cjs/index.js +46 -37
  8. package/build/cjs/index.js.map +1 -1
  9. package/build/cjs/lazyRouteComponent.js +57 -0
  10. package/build/cjs/lazyRouteComponent.js.map +1 -0
  11. package/build/cjs/link.js +150 -0
  12. package/build/cjs/link.js.map +1 -0
  13. package/build/cjs/route.js +9 -5
  14. package/build/cjs/route.js.map +1 -1
  15. package/build/cjs/router.js.map +1 -1
  16. package/build/cjs/searchParams.js.map +1 -1
  17. package/build/cjs/useBlocker.js +64 -0
  18. package/build/cjs/useBlocker.js.map +1 -0
  19. package/build/cjs/useNavigate.js +78 -0
  20. package/build/cjs/useNavigate.js.map +1 -0
  21. package/build/cjs/useParams.js +28 -0
  22. package/build/cjs/useParams.js.map +1 -0
  23. package/build/cjs/useSearch.js +27 -0
  24. package/build/cjs/useSearch.js.map +1 -0
  25. package/build/cjs/utils.js +30 -1
  26. package/build/cjs/utils.js.map +1 -1
  27. package/build/esm/index.js +491 -514
  28. package/build/esm/index.js.map +1 -1
  29. package/build/stats-html.html +1 -1
  30. package/build/stats-react.json +484 -208
  31. package/build/types/CatchBoundary.d.ts +33 -0
  32. package/build/types/Matches.d.ts +31 -0
  33. package/build/types/RouterProvider.d.ts +42 -18
  34. package/build/types/fileRoute.d.ts +7 -7
  35. package/build/types/index.d.ts +13 -7
  36. package/build/types/injectHtml.d.ts +0 -0
  37. package/build/types/lazyRouteComponent.d.ts +2 -0
  38. package/build/types/link.d.ts +10 -3
  39. package/build/types/route.d.ts +39 -7
  40. package/build/types/router.d.ts +6 -7
  41. package/build/types/useBlocker.d.ts +8 -0
  42. package/build/types/useNavigate.d.ts +20 -0
  43. package/build/types/useParams.d.ts +7 -0
  44. package/build/types/useSearch.d.ts +7 -0
  45. package/build/types/utils.d.ts +17 -0
  46. package/build/umd/index.development.js +492 -513
  47. package/build/umd/index.development.js.map +1 -1
  48. package/build/umd/index.production.js +1 -1
  49. package/build/umd/index.production.js.map +1 -1
  50. package/package.json +2 -2
  51. package/src/CatchBoundary.tsx +97 -0
  52. package/src/Matches.tsx +315 -0
  53. package/src/RouterProvider.tsx +317 -251
  54. package/src/index.tsx +17 -8
  55. package/src/injectHtml.ts +28 -0
  56. package/src/lazyRouteComponent.tsx +33 -0
  57. package/src/{link.ts → link.tsx} +163 -3
  58. package/src/location.ts +1 -0
  59. package/src/route.ts +86 -16
  60. package/src/router.ts +6 -7
  61. package/src/searchParams.ts +1 -0
  62. package/src/useBlocker.tsx +34 -0
  63. package/src/useNavigate.tsx +109 -0
  64. package/src/useParams.tsx +25 -0
  65. package/src/useSearch.tsx +25 -0
  66. package/src/utils.ts +83 -3
  67. package/build/cjs/react.js +0 -620
  68. package/build/cjs/react.js.map +0 -1
  69. package/build/types/RouteMatch.d.ts +0 -23
  70. package/build/types/react.d.ts +0 -141
  71. package/src/RouteMatch.ts +0 -28
  72. package/src/react.tsx +0 -1013
@@ -0,0 +1,33 @@
1
+ import * as React from 'react';
2
+ export declare function CatchBoundary(props: {
3
+ resetKey: string;
4
+ children: any;
5
+ errorComponent?: any;
6
+ onCatch: (error: any) => void;
7
+ }): JSX.Element;
8
+ export declare class CatchBoundaryImpl extends React.Component<{
9
+ resetKey: string;
10
+ children: (props: {
11
+ error: any;
12
+ reset: () => void;
13
+ }) => any;
14
+ onCatch?: (error: any) => void;
15
+ }> {
16
+ state: any;
17
+ static getDerivedStateFromError(error: any): {
18
+ error: any;
19
+ };
20
+ componentDidUpdate(prevProps: Readonly<{
21
+ resetKey: string;
22
+ children: (props: {
23
+ error: any;
24
+ reset: () => void;
25
+ }) => any;
26
+ onCatch?: ((error: any, info: any) => void) | undefined;
27
+ }>, prevState: any): void;
28
+ componentDidCatch(error: any): void;
29
+ render(): any;
30
+ }
31
+ export declare function ErrorComponent({ error }: {
32
+ error: any;
33
+ }): JSX.Element;
@@ -0,0 +1,31 @@
1
+ import * as React from 'react';
2
+ import { RouteMatch } from './RouterProvider';
3
+ import { ResolveRelativePath, ToOptions } from './link';
4
+ import { AnyRoute, ReactNode } from './route';
5
+ import { RouteById, RouteByPath, RouteIds, RoutePaths } from './routeInfo';
6
+ import { RegisteredRouter } from './router';
7
+ import { NoInfer, StrictOrFrom } from './utils';
8
+ export declare function Matches(): JSX.Element;
9
+ export declare function Match({ matches }: {
10
+ matches: RouteMatch[];
11
+ }): JSX.Element;
12
+ export declare function Outlet(): JSX.Element | null;
13
+ export interface MatchRouteOptions {
14
+ pending?: boolean;
15
+ caseSensitive?: boolean;
16
+ includeSearch?: boolean;
17
+ fuzzy?: boolean;
18
+ }
19
+ export type MakeUseMatchRouteOptions<TRouteTree extends AnyRoute = RegisteredRouter['routeTree'], TFrom extends RoutePaths<TRouteTree> = '/', TTo extends string = '', TMaskFrom extends RoutePaths<TRouteTree> = '/', TMaskTo extends string = ''> = ToOptions<AnyRoute, TFrom, TTo, TMaskFrom, TMaskTo> & MatchRouteOptions;
20
+ export declare function useMatchRoute<TRouteTree extends AnyRoute = RegisteredRouter['routeTree']>(): <TFrom extends RoutePaths<TRouteTree> = "/", TTo extends string = "", TMaskFrom extends RoutePaths<TRouteTree> = "/", TMaskTo extends string = "", TResolved extends string = ResolveRelativePath<TFrom, NoInfer<TTo>>>(opts: MakeUseMatchRouteOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo>) => false | RouteById<TRouteTree, TResolved>["types"]["allParams"];
21
+ export type MakeMatchRouteOptions<TRouteTree extends AnyRoute = RegisteredRouter['routeTree'], TFrom extends RoutePaths<TRouteTree> = '/', TTo extends string = '', TMaskFrom extends RoutePaths<TRouteTree> = '/', TMaskTo extends string = ''> = ToOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo> & MatchRouteOptions & {
22
+ children?: ((params?: RouteByPath<TRouteTree, ResolveRelativePath<TFrom, NoInfer<TTo>>>['types']['allParams']) => ReactNode) | React.ReactNode;
23
+ };
24
+ export declare function MatchRoute<TRouteTree extends AnyRoute = RegisteredRouter['routeTree'], TFrom extends RoutePaths<TRouteTree> = '/', TTo extends string = '', TMaskFrom extends RoutePaths<TRouteTree> = '/', TMaskTo extends string = ''>(props: MakeMatchRouteOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo>): any;
25
+ export declare function useMatch<TRouteTree extends AnyRoute = RegisteredRouter['routeTree'], TFrom extends RouteIds<TRouteTree> = RouteIds<TRouteTree>, TStrict extends boolean = true, TRouteMatchState = RouteMatch<TRouteTree, TFrom>, TSelected = TRouteMatchState>(opts: StrictOrFrom<TFrom> & {
26
+ select?: (match: TRouteMatchState) => TSelected;
27
+ }): TStrict extends true ? TRouteMatchState : TRouteMatchState | undefined;
28
+ export declare const matchesContext: React.Context<RouteMatch<AnyRoute, any>[]>;
29
+ export declare function useMatches<T = RouteMatch[]>(opts?: {
30
+ select?: (matches: RouteMatch[]) => T;
31
+ }): T;
@@ -1,17 +1,16 @@
1
+ import { RouterHistory } from '@tanstack/history';
1
2
  import * as React from 'react';
2
- import { RegisteredRouter, DehydratedRouteMatch, RouterOptions } from './router';
3
- import { ParsedLocation } from './location';
4
- import { RouteMatch } from './RouteMatch';
5
- import { NoInfer } from './utils';
6
- import { RouterProps } from './react';
7
- import { RouteById, RoutePaths, RoutesById } from './routeInfo';
8
3
  import { LinkInfo, LinkOptions, NavigateOptions, ResolveRelativePath, ToOptions } from './link';
9
- import { RouterHistory } from '.';
4
+ import { ParsedLocation } from './location';
10
5
  import { AnyRoute } from './route';
11
- import { RouterState } from './router';
6
+ import { FullSearchSchema, ParseRoute, RouteById, RouteIds, RoutePaths, RoutesById } from './routeInfo';
7
+ import { BuildNextOptions, DehydratedRouteMatch, RegisteredRouter, Router, RouterOptions, RouterState } from './router';
8
+ import { NoInfer } from './utils';
9
+ import { MatchRouteOptions } from './Matches';
12
10
  export interface CommitLocationOptions {
13
11
  replace?: boolean;
14
12
  resetScroll?: boolean;
13
+ startTransition?: boolean;
15
14
  }
16
15
  export interface MatchLocation {
17
16
  to?: string | number | null;
@@ -19,20 +18,15 @@ export interface MatchLocation {
19
18
  caseSensitive?: boolean;
20
19
  from?: string;
21
20
  }
22
- export interface MatchRouteOptions {
23
- pending?: boolean;
24
- caseSensitive?: boolean;
25
- includeSearch?: boolean;
26
- fuzzy?: boolean;
27
- }
28
- export type BuildLinkFn<TRouteTree extends AnyRoute> = <TFrom extends RoutePaths<TRouteTree> = '/', TTo extends string = ''>(state: RouterState, dest: LinkOptions<TRouteTree, TFrom, TTo>) => LinkInfo;
21
+ export type BuildLinkFn<TRouteTree extends AnyRoute> = <TFrom extends RoutePaths<TRouteTree> = '/', TTo extends string = ''>(dest: LinkOptions<TRouteTree, TFrom, TTo>) => LinkInfo;
29
22
  export type NavigateFn<TRouteTree extends AnyRoute> = <TRouteTree extends AnyRoute, TFrom extends RoutePaths<TRouteTree> = '/', TTo extends string = '', TMaskFrom extends RoutePaths<TRouteTree> = TFrom, TMaskTo extends string = ''>({ from, to, ...rest }: NavigateOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo>) => Promise<void>;
30
- export type MatchRouteFn<TRouteTree extends AnyRoute> = <TFrom extends RoutePaths<TRouteTree> = '/', TTo extends string = '', TResolved = ResolveRelativePath<TFrom, NoInfer<TTo>>>(state: RouterState<TRouteTree>, location: ToOptions<TRouteTree, TFrom, TTo>, opts?: MatchRouteOptions) => false | RouteById<TRouteTree, TResolved>['types']['allParams'];
23
+ export type MatchRouteFn<TRouteTree extends AnyRoute> = <TFrom extends RoutePaths<TRouteTree> = '/', TTo extends string = '', TResolved = ResolveRelativePath<TFrom, NoInfer<TTo>>>(location: ToOptions<TRouteTree, TFrom, TTo>, opts?: MatchRouteOptions) => false | RouteById<TRouteTree, TResolved>['types']['allParams'];
31
24
  export type LoadFn = (opts?: {
32
25
  next?: ParsedLocation;
33
26
  throwOnError?: boolean;
34
27
  __dehydratedMatches?: DehydratedRouteMatch[];
35
28
  }) => Promise<void>;
29
+ export type BuildLocationFn<TRouteTree extends AnyRoute> = (opts: BuildNextOptions) => ParsedLocation;
36
30
  export type RouterContext<TRouteTree extends AnyRoute> = {
37
31
  buildLink: BuildLinkFn<TRouteTree>;
38
32
  state: RouterState<TRouteTree>;
@@ -43,12 +37,42 @@ export type RouterContext<TRouteTree extends AnyRoute> = {
43
37
  options: RouterOptions<TRouteTree>;
44
38
  history: RouterHistory;
45
39
  load: LoadFn;
40
+ buildLocation: BuildLocationFn<TRouteTree>;
46
41
  };
47
42
  export declare const routerContext: React.Context<RouterContext<any>>;
48
- export declare function getInitialRouterState(location: ParsedLocation): RouterState<any>;
49
- export declare function RouterProvider<TRouteTree extends AnyRoute = RegisteredRouter['routeTree'], TDehydrated extends Record<string, any> = Record<string, any>>({ router, ...rest }: RouterProps<TRouteTree, TDehydrated>): JSX.Element;
50
43
  export declare class SearchParamError extends Error {
51
44
  }
52
45
  export declare class PathParamError extends Error {
53
46
  }
47
+ export declare function getInitialRouterState(location: ParsedLocation): RouterState<any>;
48
+ export declare function RouterProvider<TRouteTree extends AnyRoute = RegisteredRouter['routeTree'], TDehydrated extends Record<string, any> = Record<string, any>>({ router, ...rest }: RouterProps<TRouteTree, TDehydrated>): JSX.Element;
54
49
  export declare function getRouteMatch<TRouteTree extends AnyRoute>(state: RouterState<TRouteTree>, id: string): undefined | RouteMatch<TRouteTree>;
50
+ export declare function useRouterState<TSelected = RouterState<RegisteredRouter['routeTree']>>(opts?: {
51
+ select: (state: RouterState<RegisteredRouter['routeTree']>) => TSelected;
52
+ }): TSelected;
53
+ export type RouterProps<TRouteTree extends AnyRoute = RegisteredRouter['routeTree'], TDehydrated extends Record<string, any> = Record<string, any>> = Omit<RouterOptions<TRouteTree, TDehydrated>, 'context'> & {
54
+ router: Router<TRouteTree>;
55
+ context?: Partial<RouterOptions<TRouteTree, TDehydrated>['context']>;
56
+ };
57
+ export declare function useRouter<TRouteTree extends AnyRoute = RegisteredRouter['routeTree']>(): RouterContext<TRouteTree>;
58
+ export interface RouteMatch<TRouteTree extends AnyRoute = AnyRoute, TRouteId extends RouteIds<TRouteTree> = ParseRoute<TRouteTree>['id']> {
59
+ id: string;
60
+ routeId: TRouteId;
61
+ pathname: string;
62
+ params: RouteById<TRouteTree, TRouteId>['types']['allParams'];
63
+ status: 'pending' | 'success' | 'error';
64
+ isFetching: boolean;
65
+ invalid: boolean;
66
+ error: unknown;
67
+ paramsError: unknown;
68
+ searchError: unknown;
69
+ updatedAt: number;
70
+ loadPromise?: Promise<void>;
71
+ __resolveLoadPromise?: () => void;
72
+ context: RouteById<TRouteTree, TRouteId>['types']['allContext'];
73
+ routeSearch: RouteById<TRouteTree, TRouteId>['types']['searchSchema'];
74
+ search: FullSearchSchema<TRouteTree> & RouteById<TRouteTree, TRouteId>['types']['fullSearchSchema'];
75
+ fetchedAt: number;
76
+ abortController: AbortController;
77
+ }
78
+ export type AnyRouteMatch = RouteMatch<any>;
@@ -12,20 +12,20 @@ export type FileRoutePath<TParentRoute extends AnyRoute, TFilePath extends strin
12
12
  export declare class FileRoute<TFilePath extends keyof FileRoutesByPath, TParentRoute extends AnyRoute = FileRoutesByPath[TFilePath]['parentRoute'], TId extends RouteConstraints['TId'] = TFilePath, TPath extends RouteConstraints['TPath'] = FileRoutePath<TParentRoute, TFilePath>, TFullPath extends RouteConstraints['TFullPath'] = ResolveFullPath<TParentRoute, RemoveUnderScores<TPath>>> {
13
13
  path: TFilePath;
14
14
  constructor(path: TFilePath);
15
- createRoute: <TSearchSchema extends import("./route").AnySearchSchema = {}, TFullSearchSchema extends import("./route").AnySearchSchema = Expand<Assign<import("./route").InferFullSearchSchema<TParentRoute>, TSearchSchema>>, TParams extends Record<string, any> = (TrimLeft<TrimRight<import("./link").Split<TPath, true>[number], "_">, "_"> extends infer T ? T extends TrimLeft<TrimRight<import("./link").Split<TPath, true>[number], "_">, "_"> ? T extends `$${infer L}` ? L : never : never : never) extends never ? AnyPathParams : Record<TrimLeft<TrimRight<import("./link").Split<TPath, true>[number], "_">, "_"> extends infer T ? T extends TrimLeft<TrimRight<import("./link").Split<TPath, true>[number], "_">, "_"> ? T extends `$${infer L}` ? L : never : never : never, string>, TAllParams extends Record<string, any> = IsAny<TParentRoute["types"]["allParams"], TParams, TParentRoute["types"]["allParams"] & TParams>, TRouteContext extends RouteContext = RouteContext, TContext extends Expand<Assign<IsAny<TParentRoute["types"]["allContext"], {}, TParentRoute["types"]["allContext"]>, TRouteContext>> = Expand<Assign<IsAny<TParentRoute["types"]["allContext"], {}, TParentRoute["types"]["allContext"]>, TRouteContext>>, TRouterContext extends AnyContext = AnyContext, TChildren extends unknown = unknown, TRouteTree extends AnyRoute = AnyRoute>(options: Omit<RouteOptions<TParentRoute, string, string, TSearchSchema, TFullSearchSchema, TParams, TAllParams, TRouteContext, TContext>, "id" | "path" | "getParentRoute"> & {
15
+ createRoute: <TSearchSchema extends import("./route").AnySearchSchema = {}, TFullSearchSchema extends import("./route").AnySearchSchema = Expand<Assign<import("./route").InferFullSearchSchema<TParentRoute>, TSearchSchema>>, TParams extends Record<string, any> = (TrimLeft<TrimRight<import("./link").Split<TPath, true>[number], "_">, "_"> extends infer T ? T extends TrimLeft<TrimRight<import("./link").Split<TPath, true>[number], "_">, "_"> ? T extends `$${infer L}` ? L : never : never : never) extends never ? AnyPathParams : Record<TrimLeft<TrimRight<import("./link").Split<TPath, true>[number], "_">, "_"> extends infer T ? T extends TrimLeft<TrimRight<import("./link").Split<TPath, true>[number], "_">, "_"> ? T extends `$${infer L}` ? L : never : never : never, string>, TAllParams extends Record<string, any> = IsAny<TParentRoute["types"]["allParams"], TParams, TParentRoute["types"]["allParams"] & TParams>, TRouteContext extends RouteContext = RouteContext, TContext extends Expand<Assign<IsAny<TParentRoute["types"]["allContext"], {}, TParentRoute["types"]["allContext"]>, TRouteContext>> = Expand<Assign<IsAny<TParentRoute["types"]["allContext"], {}, TParentRoute["types"]["allContext"]>, TRouteContext>>, TRouterContext extends AnyContext = AnyContext, TChildren extends unknown = unknown, TRouteTree extends AnyRoute = AnyRoute>(options: Omit<RouteOptions<TParentRoute, string, string, TSearchSchema, TFullSearchSchema, TParams, TAllParams, TRouteContext, TContext>, "path" | "id" | "getParentRoute"> & {
16
16
  meta?: import("./route").RouteMeta | undefined;
17
17
  } & {
18
18
  caseSensitive?: boolean | undefined;
19
19
  wrapInSuspense?: boolean | undefined;
20
- component?: import("./react").RouteComponent<TFullSearchSchema, TAllParams, TContext> | undefined;
21
- errorComponent?: import("./react").ErrorRouteComponent<TFullSearchSchema, TAllParams, {}> | undefined;
22
- pendingComponent?: import("./react").PendingRouteComponent<TFullSearchSchema, TAllParams, TContext> | undefined;
20
+ component?: import("./route").RouteComponent<TFullSearchSchema, TAllParams, TContext> | undefined;
21
+ errorComponent?: import("./route").ErrorRouteComponent<TFullSearchSchema, TAllParams, {}> | undefined;
22
+ pendingComponent?: import("./route").PendingRouteComponent<TFullSearchSchema, TAllParams, TContext> | undefined;
23
23
  preSearchFilters?: import("./route").SearchFilter<TFullSearchSchema, TFullSearchSchema>[] | undefined;
24
24
  postSearchFilters?: import("./route").SearchFilter<TFullSearchSchema, TFullSearchSchema>[] | undefined;
25
25
  onError?: ((err: any) => void) | undefined;
26
- onEnter?: ((match: import("./RouteMatch").AnyRouteMatch) => void) | undefined;
27
- onTransition?: ((match: import("./RouteMatch").AnyRouteMatch) => void) | undefined;
28
- onLeave?: ((match: import("./RouteMatch").AnyRouteMatch) => void) | undefined;
26
+ onEnter?: ((match: import("./RouterProvider").AnyRouteMatch) => void) | undefined;
27
+ onTransition?: ((match: import("./RouterProvider").AnyRouteMatch) => void) | undefined;
28
+ onLeave?: ((match: import("./RouterProvider").AnyRouteMatch) => void) | undefined;
29
29
  reloadOnWindowFocus?: boolean | undefined;
30
30
  }) => Route<TParentRoute, TPath, TFullPath, TFilePath, TId, TSearchSchema, TFullSearchSchema, TParams, TAllParams, TRouteContext, TContext, TRouterContext, TChildren, TRouteTree>;
31
31
  }
@@ -1,18 +1,24 @@
1
1
  export * from '@tanstack/history';
2
2
  export { default as invariant } from 'tiny-invariant';
3
3
  export { default as warning } from 'tiny-warning';
4
+ export * from './CatchBoundary';
5
+ export * from './fileRoute';
6
+ export * from './history';
7
+ export * from './index';
8
+ export * from './lazyRouteComponent';
4
9
  export * from './link';
10
+ export * from './location';
11
+ export * from './Matches';
5
12
  export * from './path';
6
13
  export * from './qss';
14
+ export * from './redirects';
7
15
  export * from './route';
8
- export * from './fileRoute';
9
16
  export * from './routeInfo';
10
17
  export * from './router';
18
+ export * from './RouterProvider';
11
19
  export * from './searchParams';
20
+ export * from './useBlocker';
21
+ export * from './useNavigate';
22
+ export * from './useParams';
23
+ export * from './useSearch';
12
24
  export * from './utils';
13
- export * from './react';
14
- export * from './history';
15
- export * from './RouteMatch';
16
- export * from './redirects';
17
- export * from './location';
18
- export * from './RouterProvider';
File without changes
@@ -0,0 +1,2 @@
1
+ import { AsyncRouteComponent } from './route';
2
+ export declare function lazyRouteComponent<T extends Record<string, any>, TKey extends keyof T = 'default'>(importer: () => Promise<T>, exportName?: TKey): T[TKey] extends (props: infer TProps) => any ? AsyncRouteComponent<TProps> : never;
@@ -1,9 +1,10 @@
1
+ import * as React from 'react';
1
2
  import { Trim } from './fileRoute';
2
- import { AnyRoute } from './route';
3
+ import { LocationState, ParsedLocation } from './location';
4
+ import { AnyRoute, ReactNode } from './route';
3
5
  import { AllParams, FullSearchSchema, RouteByPath, RouteIds, RoutePaths } from './routeInfo';
4
6
  import { RegisteredRouter } from './router';
5
- import { LocationState } from './location';
6
- import { ParsedLocation } from './location';
7
+ import { MakeLinkOptions, MakeLinkPropsOptions } from './useNavigate';
7
8
  import { Expand, NoInfer, NonNullableUpdater, PickRequired, UnionToIntersection, Updater } from './utils';
8
9
  export type LinkInfo = {
9
10
  type: 'external';
@@ -42,6 +43,7 @@ export type RelativeToPathAutoComplete<AllPaths extends string, TFrom extends st
42
43
  export type NavigateOptions<TRouteTree extends AnyRoute = RegisteredRouter['routeTree'], TFrom extends RoutePaths<TRouteTree> = '/', TTo extends string = '', TMaskFrom extends RoutePaths<TRouteTree> = TFrom, TMaskTo extends string = ''> = ToOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo> & {
43
44
  replace?: boolean;
44
45
  resetScroll?: boolean;
46
+ startTransition?: boolean;
45
47
  };
46
48
  export type ToOptions<TRouteTree extends AnyRoute = RegisteredRouter['routeTree'], TFrom extends RoutePaths<TRouteTree> = '/', TTo extends string = '', TMaskFrom extends RoutePaths<TRouteTree> = '/', TMaskTo extends string = ''> = ToSubOptions<TRouteTree, TFrom, TTo> & {
47
49
  mask?: ToMaskOptions<TRouteTree, TMaskFrom, TMaskTo>;
@@ -95,4 +97,9 @@ export type CheckIdError<TRouteTree extends AnyRoute, TInvalids> = {
95
97
  'Valid Route IDs': RouteIds<TRouteTree>;
96
98
  };
97
99
  export type ResolveRelativePath<TFrom, TTo = '.'> = TFrom extends string ? TTo extends string ? TTo extends '.' ? TFrom : TTo extends `./` ? Join<[TFrom, '/']> : TTo extends `./${infer TRest}` ? ResolveRelativePath<TFrom, TRest> : TTo extends `/${infer TRest}` ? TTo : Split<TTo> extends ['..', ...infer ToRest] ? Split<TFrom> extends [...infer FromRest, infer FromTail] ? ToRest extends ['/'] ? Join<[...FromRest, '/']> : ResolveRelativePath<Join<FromRest>, Join<ToRest>> : never : Split<TTo> extends ['.', ...infer ToRest] ? ToRest extends ['/'] ? Join<[TFrom, '/']> : ResolveRelativePath<TFrom, Join<ToRest>> : CleanPath<Join<['/', ...Split<TFrom>, ...Split<TTo>]>> : never : never;
100
+ export declare function useLinkProps<TRouteTree extends AnyRoute = RegisteredRouter['routeTree'], TFrom extends RoutePaths<TRouteTree> = '/', TTo extends string = '', TMaskFrom extends RoutePaths<TRouteTree> = '/', TMaskTo extends string = ''>(options: MakeLinkPropsOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo>): React.AnchorHTMLAttributes<HTMLAnchorElement>;
101
+ export interface LinkComponent<TProps extends Record<string, any> = {}> {
102
+ <TRouteTree extends AnyRoute = RegisteredRouter['routeTree'], TFrom extends RoutePaths<TRouteTree> = '/', TTo extends string = '', TMaskFrom extends RoutePaths<TRouteTree> = '/', TMaskTo extends string = ''>(props: MakeLinkOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo> & TProps & React.RefAttributes<HTMLAnchorElement>): ReactNode;
103
+ }
104
+ export declare const Link: LinkComponent;
98
105
  export {};
@@ -1,10 +1,11 @@
1
- import { RoutePaths } from './routeInfo';
2
- import { AnyRouter } from './router';
3
- import { AnyRouteMatch } from './RouteMatch';
4
- import { Expand, IsAny, NoInfer, PickRequired, UnionToIntersection, Assign } from './utils';
1
+ import * as React from 'react';
2
+ import { AnyRouteMatch } from './RouterProvider';
5
3
  import { NavigateOptions, ParsePathParams, ToSubOptions } from './link';
6
- import { ErrorRouteComponent, PendingRouteComponent, RouteComponent } from './react';
7
4
  import { ParsedLocation } from './location';
5
+ import { RoutePaths } from './routeInfo';
6
+ import { AnyRouter } from './router';
7
+ import { Assign, Expand, IsAny, NoInfer, PickRequired, UnionToIntersection } from './utils';
8
+ import { BuildLocationFn, NavigateFn } from './RouterProvider';
8
9
  export declare const rootRouteId: "__root__";
9
10
  export type RootRouteId = typeof rootRouteId;
10
11
  export type AnyPathParams = {};
@@ -53,7 +54,8 @@ type BeforeLoadFn<TFullSearchSchema extends Record<string, any>, TParentRoute ex
53
54
  params: TAllParams;
54
55
  context: TParentRoute['types']['allContext'];
55
56
  location: ParsedLocation;
56
- navigate: (opts: NavigateOptions<AnyRoute>) => Promise<void>;
57
+ navigate: NavigateFn<AnyRoute>;
58
+ buildLocation: BuildLocationFn<AnyRoute>;
57
59
  }) => Promise<TRouteContext> | TRouteContext | void;
58
60
  export type UpdatableRouteOptions<TFullSearchSchema extends Record<string, any>, TAllParams extends AnyPathParams, TAllContext extends AnyContext> = MetaOptions & {
59
61
  caseSensitive?: boolean;
@@ -183,7 +185,7 @@ export declare class Route<TParentRoute extends RouteConstraints['TParentRoute']
183
185
  } | undefined) => TSelected;
184
186
  }
185
187
  export type AnyRootRoute = RootRoute<any, any, any>;
186
- export declare function rootRouteWithContext<TRouterContext extends {}>(): <TSearchSchema extends Record<string, any> = {}, TRouteContext extends RouteContext = RouteContext>(options?: Omit<RouteOptions<AnyRoute, "__root__", "", TSearchSchema, TSearchSchema, {}, {}, TRouteContext, Assign<TRouterContext, TRouteContext>>, "id" | "path" | "getParentRoute" | "stringifyParams" | "parseParams" | "caseSensitive"> | undefined) => RootRoute<TSearchSchema, TRouteContext, TRouterContext>;
188
+ export declare function rootRouteWithContext<TRouterContext extends {}>(): <TSearchSchema extends Record<string, any> = {}, TRouteContext extends RouteContext = RouteContext>(options?: Omit<RouteOptions<AnyRoute, "__root__", "", TSearchSchema, TSearchSchema, {}, {}, TRouteContext, Assign<TRouterContext, TRouteContext>>, "path" | "id" | "getParentRoute" | "stringifyParams" | "parseParams" | "caseSensitive"> | undefined) => RootRoute<TSearchSchema, TRouteContext, TRouterContext>;
187
189
  export declare class RootRoute<TSearchSchema extends Record<string, any> = {}, TRouteContext extends RouteContext = RouteContext, TRouterContext extends {} = {}> extends Route<any, // TParentRoute
188
190
  '/', // TPath
189
191
  '/', // TFullPath
@@ -226,4 +228,34 @@ export type RouteMask<TRouteTree extends AnyRoute> = {
226
228
  export declare function createRouteMask<TRouteTree extends AnyRoute, TFrom extends RoutePaths<TRouteTree>, TTo extends string>(opts: {
227
229
  routeTree: TRouteTree;
228
230
  } & ToSubOptions<TRouteTree, TFrom, TTo>): RouteMask<TRouteTree>;
231
+ export type RouteProps<TFullSearchSchema extends Record<string, any> = AnySearchSchema, TAllParams extends AnyPathParams = AnyPathParams, TAllContext extends Record<string, any> = AnyContext> = {
232
+ useMatch: <TSelected = TAllContext>(opts?: {
233
+ select?: (search: TAllContext) => TSelected;
234
+ }) => TSelected;
235
+ useRouteContext: <TSelected = TAllContext>(opts?: {
236
+ select?: (search: TAllContext) => TSelected;
237
+ }) => TSelected;
238
+ useSearch: <TSelected = TFullSearchSchema>(opts?: {
239
+ select?: (search: TFullSearchSchema) => TSelected;
240
+ }) => TSelected;
241
+ useParams: <TSelected = TAllParams>(opts?: {
242
+ select?: (search: TAllParams) => TSelected;
243
+ }) => TSelected;
244
+ };
245
+ export type ErrorRouteProps<TFullSearchSchema extends Record<string, any> = AnySearchSchema, TAllParams extends AnyPathParams = AnyPathParams, TAllContext extends Record<string, any> = AnyContext> = {
246
+ error: unknown;
247
+ info: {
248
+ componentStack: string;
249
+ };
250
+ } & RouteProps<TFullSearchSchema, TAllParams, TAllContext>;
251
+ export type PendingRouteProps<TFullSearchSchema extends Record<string, any> = AnySearchSchema, TAllParams extends AnyPathParams = AnyPathParams, TAllContext extends Record<string, any> = AnyContext> = RouteProps<TFullSearchSchema, TAllParams, TAllContext>;
252
+ export type ReactNode = any;
253
+ export type SyncRouteComponent<TProps> = ((props: TProps) => ReactNode) | React.LazyExoticComponent<(props: TProps) => ReactNode>;
254
+ export type AsyncRouteComponent<TProps> = SyncRouteComponent<TProps> & {
255
+ preload?: () => Promise<void>;
256
+ };
257
+ export type RouteComponent<TFullSearchSchema extends Record<string, any>, TAllParams extends AnyPathParams, TAllContext extends Record<string, any>> = AsyncRouteComponent<RouteProps<TFullSearchSchema, TAllParams, TAllContext>>;
258
+ export type ErrorRouteComponent<TFullSearchSchema extends Record<string, any>, TAllParams extends AnyPathParams, TAllContext extends Record<string, any>> = AsyncRouteComponent<ErrorRouteProps<TFullSearchSchema, TAllParams, TAllContext>>;
259
+ export type PendingRouteComponent<TFullSearchSchema extends Record<string, any>, TAllParams extends AnyPathParams, TAllContext extends Record<string, any>> = AsyncRouteComponent<PendingRouteProps<TFullSearchSchema, TAllParams, TAllContext>>;
260
+ export type AnyRouteComponent = RouteComponent<any, any, any>;
229
261
  export {};
@@ -3,8 +3,8 @@ import { RouterHistory } from '@tanstack/history';
3
3
  import { AnySearchSchema, AnyRoute, AnyContext, AnyPathParams, RouteMask } from './route';
4
4
  import { FullSearchSchema } from './routeInfo';
5
5
  import { PickAsRequired, Updater, NonNullableUpdater } from './utils';
6
- import { ErrorRouteComponent, PendingRouteComponent, RouteComponent } from './react';
7
- import { RouteMatch } from './RouteMatch';
6
+ import { ErrorRouteComponent, PendingRouteComponent, RouteComponent } from './route';
7
+ import { RouteMatch } from './RouterProvider';
8
8
  import { ParsedLocation } from './location';
9
9
  import { LocationState } from './location';
10
10
  import { SearchSerializer, SearchParser } from './searchParams';
@@ -54,12 +54,11 @@ export interface RouterOptions<TRouteTree extends AnyRoute, TDehydrated extends
54
54
  unmaskOnReload?: boolean;
55
55
  }
56
56
  export interface RouterState<TRouteTree extends AnyRoute = AnyRoute> {
57
- status: 'idle' | 'pending';
58
- isFetching: boolean;
57
+ status: 'pending' | 'idle';
59
58
  matches: RouteMatch<TRouteTree>[];
60
59
  pendingMatches: RouteMatch<TRouteTree>[];
61
60
  location: ParsedLocation<FullSearchSchema<TRouteTree>>;
62
- resolvedLocation: ParsedLocation<FullSearchSchema<TRouteTree>>;
61
+ resolvedLocation: undefined | ParsedLocation<FullSearchSchema<TRouteTree>>;
63
62
  lastUpdated: number;
64
63
  }
65
64
  export type ListenerFn<TEvent extends RouterEvent> = (event: TEvent) => void;
@@ -91,13 +90,13 @@ export declare const componentTypes: readonly ["component", "errorComponent", "p
91
90
  export type RouterEvents = {
92
91
  onBeforeLoad: {
93
92
  type: 'onBeforeLoad';
94
- from: ParsedLocation;
93
+ from: undefined | ParsedLocation;
95
94
  to: ParsedLocation;
96
95
  pathChanged: boolean;
97
96
  };
98
97
  onLoad: {
99
98
  type: 'onLoad';
100
- from: ParsedLocation;
99
+ from: undefined | ParsedLocation;
101
100
  to: ParsedLocation;
102
101
  pathChanged: boolean;
103
102
  };
@@ -0,0 +1,8 @@
1
+ import { ReactNode } from './route';
2
+ export declare function useBlocker(message: string, condition?: boolean | any): void;
3
+ export declare function Block({ message, condition, children }: PromptProps): any;
4
+ export type PromptProps = {
5
+ message: string;
6
+ condition?: boolean | any;
7
+ children?: ReactNode;
8
+ };
@@ -0,0 +1,20 @@
1
+ import * as React from 'react';
2
+ import { LinkOptions, NavigateOptions } from './link';
3
+ import { AnyRoute } from './route';
4
+ import { RoutePaths } from './routeInfo';
5
+ import { RegisteredRouter } from './router';
6
+ export declare function useNavigate<TRouteTree extends AnyRoute = RegisteredRouter['routeTree'], TDefaultFrom extends RoutePaths<TRouteTree> = '/'>(defaultOpts?: {
7
+ from?: TDefaultFrom;
8
+ }): <TFrom extends RoutePaths<TRouteTree> = TDefaultFrom, TTo extends string = "", TMaskFrom extends RoutePaths<TRouteTree> = "/", TMaskTo extends string = "">(opts?: NavigateOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo> | undefined) => Promise<void>;
9
+ export declare function typedNavigate<TRouteTree extends AnyRoute = RegisteredRouter['routeTree'], TDefaultFrom extends RoutePaths<TRouteTree> = '/'>(navigate: (opts: NavigateOptions<any>) => Promise<void>): <TFrom extends RoutePaths<TRouteTree> = TDefaultFrom, TTo extends string = "", TMaskFrom extends RoutePaths<TRouteTree> = "/", TMaskTo extends string = "">(opts?: NavigateOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo> | undefined) => Promise<void>;
10
+ export declare function Navigate<TRouteTree extends AnyRoute = RegisteredRouter['routeTree'], TFrom extends RoutePaths<TRouteTree> = '/', TTo extends string = '', TMaskFrom extends RoutePaths<TRouteTree> = '/', TMaskTo extends string = ''>(props: NavigateOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo>): null;
11
+ export type MakeLinkPropsOptions<TRouteTree extends AnyRoute = RegisteredRouter['routeTree'], TFrom extends RoutePaths<TRouteTree> = '/', TTo extends string = '', TMaskFrom extends RoutePaths<TRouteTree> = '/', TMaskTo extends string = ''> = LinkPropsOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo> & React.AnchorHTMLAttributes<HTMLAnchorElement>;
12
+ export type MakeLinkOptions<TRouteTree extends AnyRoute = RegisteredRouter['routeTree'], TFrom extends RoutePaths<TRouteTree> = '/', TTo extends string = '', TMaskFrom extends RoutePaths<TRouteTree> = '/', TMaskTo extends string = ''> = LinkPropsOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo> & Omit<React.AnchorHTMLAttributes<HTMLAnchorElement>, 'children'> & {
13
+ children?: React.ReactNode | ((state: {
14
+ isActive: boolean;
15
+ }) => React.ReactNode);
16
+ };
17
+ export type LinkPropsOptions<TRouteTree extends AnyRoute = RegisteredRouter['routeTree'], TFrom extends RoutePaths<TRouteTree> = '/', TTo extends string = '', TMaskFrom extends RoutePaths<TRouteTree> = '/', TMaskTo extends string = ''> = LinkOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo> & {
18
+ activeProps?: React.AnchorHTMLAttributes<HTMLAnchorElement> | (() => React.AnchorHTMLAttributes<HTMLAnchorElement>);
19
+ inactiveProps?: React.AnchorHTMLAttributes<HTMLAnchorElement> | (() => React.AnchorHTMLAttributes<HTMLAnchorElement>);
20
+ };
@@ -0,0 +1,7 @@
1
+ import { AnyRoute } from './route';
2
+ import { RouteIds, RouteById, AllParams } from './routeInfo';
3
+ import { RegisteredRouter } from './router';
4
+ import { StrictOrFrom } from './utils';
5
+ export declare function useParams<TRouteTree extends AnyRoute = RegisteredRouter['routeTree'], TFrom extends RouteIds<TRouteTree> = RouteIds<TRouteTree>, TDefaultSelected = AllParams<TRouteTree> & RouteById<TRouteTree, TFrom>['types']['allParams'], TSelected = TDefaultSelected>(opts: StrictOrFrom<TFrom> & {
6
+ select?: (search: TDefaultSelected) => TSelected;
7
+ }): TSelected;
@@ -0,0 +1,7 @@
1
+ import { AnyRoute } from './route';
2
+ import { RouteIds, RouteById } from './routeInfo';
3
+ import { RegisteredRouter } from './router';
4
+ import { StrictOrFrom } from './utils';
5
+ export declare function useSearch<TRouteTree extends AnyRoute = RegisteredRouter['routeTree'], TFrom extends RouteIds<TRouteTree> = RouteIds<TRouteTree>, TStrict extends boolean = true, TSearch = RouteById<TRouteTree, TFrom>['types']['fullSearchSchema'], TSelected = TSearch>(opts: StrictOrFrom<TFrom> & {
6
+ select?: (search: TSearch) => TSelected;
7
+ }): TStrict extends true ? TSelected : TSelected | undefined;
@@ -1,3 +1,7 @@
1
+ import * as React from 'react';
2
+ import { AnyRoute } from './route';
3
+ import { ParseRoute, RouteIds, RoutesById, RouteById } from './routeInfo';
4
+ import { RegisteredRouter } from './router';
1
5
  export type NoInfer<T> = [T][T extends any ? 0 : never];
2
6
  export type IsAny<T, Y, N = T> = 1 extends 0 & T ? Y : N;
3
7
  export type IsAnyBoolean<T> = 1 extends 0 & T ? true : false;
@@ -46,3 +50,16 @@ export declare function replaceEqualDeep<T>(prev: any, _next: T): T;
46
50
  export declare function isPlainObject(o: any): boolean;
47
51
  export declare function partialDeepEqual(a: any, b: any): boolean;
48
52
  export declare function useStableCallback<T extends (...args: any[]) => any>(fn: T): T;
53
+ export declare function shallow<T>(objA: T, objB: T): boolean;
54
+ export type StrictOrFrom<TFrom> = {
55
+ from: TFrom;
56
+ strict?: true;
57
+ } | {
58
+ from?: never;
59
+ strict: false;
60
+ };
61
+ export type RouteFromIdOrRoute<T, TRouteTree extends AnyRoute = RegisteredRouter['routeTree']> = T extends ParseRoute<TRouteTree> ? T : T extends RouteIds<TRouteTree> ? RoutesById<TRouteTree>[T] : T extends string ? RouteIds<TRouteTree> : never;
62
+ export declare function useRouteContext<TRouteTree extends AnyRoute = RegisteredRouter['routeTree'], TFrom extends RouteIds<TRouteTree> = RouteIds<TRouteTree>, TStrict extends boolean = true, TRouteContext = RouteById<TRouteTree, TFrom>['types']['allContext'], TSelected = TRouteContext>(opts: StrictOrFrom<TFrom> & {
63
+ select?: (search: TRouteContext) => TSelected;
64
+ }): TStrict extends true ? TSelected : TSelected | undefined;
65
+ export declare const useLayoutEffect: typeof React.useLayoutEffect;