@tanstack/react-router 0.0.1-beta.235 → 0.0.1-beta.236

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 (39) hide show
  1. package/build/cjs/Matches.js +34 -19
  2. package/build/cjs/Matches.js.map +1 -1
  3. package/build/cjs/RouterProvider.js +31 -26
  4. package/build/cjs/RouterProvider.js.map +1 -1
  5. package/build/cjs/index.js +1 -0
  6. package/build/cjs/index.js.map +1 -1
  7. package/build/cjs/route.js +13 -7
  8. package/build/cjs/route.js.map +1 -1
  9. package/build/cjs/router.js +49 -37
  10. package/build/cjs/router.js.map +1 -1
  11. package/build/cjs/useParams.js +7 -2
  12. package/build/cjs/useParams.js.map +1 -1
  13. package/build/cjs/useSearch.js +6 -1
  14. package/build/cjs/useSearch.js.map +1 -1
  15. package/build/cjs/utils.js +4 -1
  16. package/build/cjs/utils.js.map +1 -1
  17. package/build/esm/index.js +144 -94
  18. package/build/esm/index.js.map +1 -1
  19. package/build/stats-html.html +1 -1
  20. package/build/stats-react.json +574 -293
  21. package/build/types/Matches.d.ts +9 -3
  22. package/build/types/RouterProvider.d.ts +3 -0
  23. package/build/types/route.d.ts +30 -10
  24. package/build/types/router.d.ts +6 -3
  25. package/build/types/useParams.d.ts +3 -1
  26. package/build/types/useSearch.d.ts +3 -1
  27. package/build/types/utils.d.ts +3 -1
  28. package/build/umd/index.development.js +412 -97
  29. package/build/umd/index.development.js.map +1 -1
  30. package/build/umd/index.production.js +2 -2
  31. package/build/umd/index.production.js.map +1 -1
  32. package/package.json +4 -2
  33. package/src/Matches.tsx +72 -37
  34. package/src/RouterProvider.tsx +42 -31
  35. package/src/route.ts +37 -15
  36. package/src/router.ts +62 -44
  37. package/src/useParams.tsx +14 -4
  38. package/src/useSearch.tsx +11 -3
  39. package/src/utils.ts +20 -12
@@ -45,7 +45,13 @@ export type MakeMatchRouteOptions<TRouteTree extends AnyRoute = RegisteredRouter
45
45
  children?: ((params?: RouteByPath<TRouteTree, ResolveRelativePath<TFrom, NoInfer<TTo>>>['types']['allParams']) => ReactNode) | React.ReactNode;
46
46
  };
47
47
  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;
48
- export declare function useMatch<TRouteTree extends AnyRoute = RegisteredRouter['routeTree'], TFrom extends RouteIds<TRouteTree> = RouteIds<TRouteTree>, TStrict extends boolean = true, TRouteMatchState = RouteMatch<TRouteTree, TFrom>>(opts: StrictOrFrom<TFrom>): TStrict extends true ? TRouteMatchState : TRouteMatchState | undefined;
48
+ 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> & {
49
+ select?: (match: TRouteMatchState) => TSelected;
50
+ }): TStrict extends true ? TSelected : TSelected | undefined;
49
51
  export declare const matchesContext: React.Context<RouteMatch<AnyRoute, any>[]>;
50
- export declare function useMatches(): RouteMatch[];
51
- export declare function useLoaderData<TRouteTree extends AnyRoute = RegisteredRouter['routeTree'], TFrom extends RouteIds<TRouteTree> = RouteIds<TRouteTree>, TStrict extends boolean = true, TRouteMatch extends RouteMatch<TRouteTree, TFrom> = RouteMatch<TRouteTree, TFrom>>(opts: StrictOrFrom<TFrom>): TStrict extends true ? TRouteMatch['loaderData'] : TRouteMatch['loaderData'] | undefined;
52
+ export declare function useMatches<T = RouteMatch[]>(opts?: {
53
+ select?: (matches: RouteMatch[]) => T;
54
+ }): T;
55
+ export declare function useLoaderData<TRouteTree extends AnyRoute = RegisteredRouter['routeTree'], TFrom extends RouteIds<TRouteTree> = RouteIds<TRouteTree>, TStrict extends boolean = true, TRouteMatch extends RouteMatch<TRouteTree, TFrom> = RouteMatch<TRouteTree, TFrom>, TSelected = TRouteMatch['loaderData']>(opts: StrictOrFrom<TFrom> & {
56
+ select?: (match: TRouteMatch) => TSelected;
57
+ }): TStrict extends true ? TSelected : TSelected | undefined;
@@ -26,6 +26,9 @@ export type InjectedHtmlEntry = string | (() => Promise<string> | string);
26
26
  export declare const routerContext: React.Context<Router<any, Record<string, any>>>;
27
27
  export declare function RouterProvider<TRouteTree extends AnyRoute = RegisteredRouter['routeTree'], TDehydrated extends Record<string, any> = Record<string, any>>({ router, ...rest }: RouterProps<TRouteTree, TDehydrated>): React.JSX.Element;
28
28
  export declare function getRouteMatch<TRouteTree extends AnyRoute>(state: RouterState<TRouteTree>, id: string): undefined | RouteMatch<TRouteTree>;
29
+ export declare function useRouterState<TSelected = RouterState<RegisteredRouter['routeTree']>>(opts?: {
30
+ select: (state: RouterState<RegisteredRouter['routeTree']>) => TSelected;
31
+ }): TSelected;
29
32
  export type RouterProps<TRouteTree extends AnyRoute = RegisteredRouter['routeTree'], TDehydrated extends Record<string, any> = Record<string, any>> = Omit<RouterOptions<TRouteTree, TDehydrated>, 'context'> & {
30
33
  router: Router<TRouteTree>;
31
34
  context?: Partial<RouterOptions<TRouteTree, TDehydrated>['context']>;
@@ -180,11 +180,21 @@ export declare class Route<TParentRoute extends RouteConstraints['TParentRoute']
180
180
  addChildren: <TNewChildren extends AnyRoute[]>(children: TNewChildren) => Route<TParentRoute, TPath, TFullPath, TCustomId, TId, TSearchSchema, TFullSearchSchema, TParams, TAllParams, TRouteContext, TAllContext, TRouterContext, TNewChildren, TRouteTree, AnyRoute>;
181
181
  update: (options: UpdatableRouteOptions<TFullSearchSchema, TAllParams, Expand<Assign<IsAny<TParentRoute['types']['allContext'], {}>, TRouteContext>>, TLoaderData>) => this;
182
182
  static __onInit: (route: any) => void;
183
- useMatch: () => TAllContext;
184
- useRouteContext: () => TAllContext;
185
- useSearch: () => TFullSearchSchema;
186
- useParams: () => TAllParams;
187
- useLoaderData: () => TLoaderData;
183
+ useMatch: <TSelected = TAllContext>(opts?: {
184
+ select?: ((search: TAllContext) => TSelected) | undefined;
185
+ } | undefined) => TSelected;
186
+ useRouteContext: <TSelected = TAllContext>(opts?: {
187
+ select?: ((search: TAllContext) => TSelected) | undefined;
188
+ } | undefined) => TSelected;
189
+ useSearch: <TSelected = TFullSearchSchema>(opts?: {
190
+ select?: ((search: TFullSearchSchema) => TSelected) | undefined;
191
+ } | undefined) => TSelected;
192
+ useParams: <TSelected = TAllParams>(opts?: {
193
+ select?: ((search: TAllParams) => TSelected) | undefined;
194
+ } | undefined) => TSelected;
195
+ useLoaderData: <TSelected = TLoaderData>(opts?: {
196
+ select?: ((search: TLoaderData) => TSelected) | undefined;
197
+ } | undefined) => TSelected;
188
198
  }
189
199
  export type AnyRootRoute = RootRoute<any, any, any>;
190
200
  export declare function rootRouteWithContext<TRouterContext extends {}>(): <TSearchSchema extends Record<string, any> = {}, TRouteContext extends RouteContext = RouteContext, TLoaderData extends unknown = unknown>(options?: Omit<RouteOptions<AnyRoute, "__root__", "", TSearchSchema, TSearchSchema, {}, {}, TRouteContext, Assign<TRouterContext, TRouteContext>, TLoaderData>, "path" | "id" | "getParentRoute" | "stringifyParams" | "parseParams" | "caseSensitive"> | undefined) => RootRoute<TSearchSchema, TRouteContext, TRouterContext, unknown>;
@@ -232,11 +242,21 @@ export declare function createRouteMask<TRouteTree extends AnyRoute, TFrom exten
232
242
  routeTree: TRouteTree;
233
243
  } & ToSubOptions<TRouteTree, TFrom, TTo>): RouteMask<TRouteTree>;
234
244
  export type RouteProps<TFullSearchSchema extends Record<string, any> = AnySearchSchema, TAllParams extends AnyPathParams = AnyPathParams, TAllContext extends Record<string, any> = AnyContext, TLoaderData extends any = unknown> = {
235
- useMatch: () => TAllContext;
236
- useRouteContext: () => TAllContext;
237
- useSearch: () => TFullSearchSchema;
238
- useParams: () => TAllParams;
239
- useLoaderData: () => TLoaderData;
245
+ useMatch: <TSelected = TAllContext>(opts?: {
246
+ select?: (search: TAllContext) => TSelected;
247
+ }) => TSelected;
248
+ useRouteContext: <TSelected = TAllContext>(opts?: {
249
+ select?: (search: TAllContext) => TSelected;
250
+ }) => TSelected;
251
+ useSearch: <TSelected = TFullSearchSchema>(opts?: {
252
+ select?: (search: TFullSearchSchema) => TSelected;
253
+ }) => TSelected;
254
+ useParams: <TSelected = TAllParams>(opts?: {
255
+ select?: (search: TAllParams) => TSelected;
256
+ }) => TSelected;
257
+ useLoaderData: <TSelected = TLoaderData>(opts?: {
258
+ select?: (search: TLoaderData) => TSelected;
259
+ }) => TSelected;
240
260
  };
241
261
  export type ErrorRouteProps<TFullSearchSchema extends Record<string, any> = AnySearchSchema, TAllParams extends AnyPathParams = AnyPathParams, TAllContext extends Record<string, any> = AnyContext> = {
242
262
  error: unknown;
@@ -1,6 +1,7 @@
1
1
  /// <reference types="react" />
2
2
  /// <reference types="node" />
3
3
  import { RouterHistory } from '@tanstack/history';
4
+ import { Store } from '@tanstack/store';
4
5
  import { AnySearchSchema, AnyRoute, AnyContext, AnyPathParams, RouteMask } from './route';
5
6
  import { FullSearchSchema, RoutesById, RoutesByPath } from './routeInfo';
6
7
  import { PickAsRequired, Updater, NonNullableUpdater } from './utils';
@@ -56,8 +57,10 @@ export interface RouterOptions<TRouteTree extends AnyRoute, TDehydrated extends
56
57
  }
57
58
  export interface RouterState<TRouteTree extends AnyRoute = AnyRoute> {
58
59
  status: 'pending' | 'idle';
60
+ isLoading: boolean;
61
+ isTransitioning: boolean;
59
62
  matches: RouteMatch<TRouteTree>[];
60
- pendingMatches: RouteMatch<TRouteTree>[];
63
+ pendingMatches?: RouteMatch<TRouteTree>[];
61
64
  location: ParsedLocation<FullSearchSchema<TRouteTree>>;
62
65
  resolvedLocation: ParsedLocation<FullSearchSchema<TRouteTree>>;
63
66
  lastUpdated: number;
@@ -122,7 +125,7 @@ export declare class Router<TRouteTree extends AnyRoute = AnyRoute, TDehydrated
122
125
  pendingMatches: AnyRouteMatch[];
123
126
  injectedHtml: InjectedHtmlEntry[];
124
127
  dehydratedData?: TDehydrated;
125
- state: RouterState<TRouteTree>;
128
+ __store: Store<RouterState<TRouteTree>>;
126
129
  options: PickAsRequired<RouterOptions<TRouteTree, TDehydrated>, 'stringifySearch' | 'parseSearch' | 'context'>;
127
130
  history: RouterHistory;
128
131
  latestLocation: ParsedLocation;
@@ -133,8 +136,8 @@ export declare class Router<TRouteTree extends AnyRoute = AnyRoute, TDehydrated
133
136
  flatRoutes: AnyRoute[];
134
137
  constructor(options: RouterConstructorOptions<TRouteTree, TDehydrated>);
135
138
  startReactTransition: (fn: () => void) => void;
136
- setState: (updater: NonNullableUpdater<RouterState<TRouteTree>>) => void;
137
139
  update: (newOptions: RouterConstructorOptions<TRouteTree, TDehydrated>) => void;
140
+ get state(): RouterState<TRouteTree>;
138
141
  buildRouteTree: () => void;
139
142
  subscribe: <TType extends keyof RouterEvents>(eventType: TType, fn: ListenerFn<RouterEvents[TType]>) => () => void;
140
143
  emit: (routerEvent: RouterEvent) => void;
@@ -2,4 +2,6 @@ import { AnyRoute } from './route';
2
2
  import { RouteIds, RouteById, AllParams } from './routeInfo';
3
3
  import { RegisteredRouter } from './router';
4
4
  import { StrictOrFrom } from './utils';
5
- export declare function useParams<TRouteTree extends AnyRoute = RegisteredRouter['routeTree'], TFrom extends RouteIds<TRouteTree> = RouteIds<TRouteTree>>(_opts: StrictOrFrom<TFrom>): AllParams<TRouteTree> & RouteById<TRouteTree, TFrom>['types']['allParams'];
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;
@@ -2,4 +2,6 @@ import { AnyRoute } from './route';
2
2
  import { RouteIds, RouteById } from './routeInfo';
3
3
  import { RegisteredRouter } from './router';
4
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']>(opts: StrictOrFrom<TFrom>): TStrict extends true ? TSearch : TSearch | undefined;
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;
@@ -59,6 +59,8 @@ export type StrictOrFrom<TFrom> = {
59
59
  strict: false;
60
60
  };
61
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>): TStrict extends true ? TSelected : TSelected | undefined;
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;
63
65
  export declare const useLayoutEffect: typeof React.useLayoutEffect;
64
66
  export declare function escapeJSON(jsonString: string): string;