@kitbag/router 0.27.0 → 0.29.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. package/dist/components/routerLink.d.ts +1 -0
  2. package/dist/components/viewTransition.d.ts +16 -0
  3. package/dist/components/viewTransition.spec-d.d.ts +1 -0
  4. package/dist/compositions/useViewTransition.d.ts +5 -0
  5. package/dist/kitbag-router.js +2073 -1708
  6. package/dist/kitbag-router.umd.cjs +2 -2
  7. package/dist/main.d.ts +27 -1
  8. package/dist/models/hooks.d.ts +9 -7
  9. package/dist/services/addLoader.d.ts +6 -3
  10. package/dist/services/addRedirect.d.ts +3 -0
  11. package/dist/services/addRedirect.spec.d.ts +1 -0
  12. package/dist/services/addView.d.ts +9 -6
  13. package/dist/services/combineContext.d.ts +2 -0
  14. package/dist/services/createHook.d.ts +7 -0
  15. package/dist/services/createHook.spec-d.d.ts +1 -0
  16. package/dist/services/createHook.spec.d.ts +1 -0
  17. package/dist/services/createLoader.d.ts +7 -0
  18. package/dist/services/createLoader.spec-d.d.ts +1 -0
  19. package/dist/services/createLoader.spec.d.ts +1 -0
  20. package/dist/services/createRoute.d.ts +2 -4
  21. package/dist/services/createRouter.d.ts +2 -2
  22. package/dist/services/createRouterAssets.d.ts +26 -0
  23. package/dist/services/createRouterAssets.spec-d.d.ts +1 -0
  24. package/dist/services/createRouterHistory.d.ts +10 -2
  25. package/dist/services/createRouterHooks.d.ts +4 -2
  26. package/dist/services/createView.d.ts +10 -0
  27. package/dist/services/createView.spec-d.d.ts +1 -0
  28. package/dist/services/createView.spec.d.ts +1 -0
  29. package/dist/services/createViewTransitions.browser.spec.d.ts +1 -0
  30. package/dist/services/createViewTransitions.d.ts +38 -0
  31. package/dist/services/getRouteContext.d.ts +6 -0
  32. package/dist/services/getRoutesForRouter.d.ts +6 -1
  33. package/dist/services/history.d.ts +1 -0
  34. package/dist/services/registerHookContext.spec.d.ts +1 -0
  35. package/dist/services/routeViews.d.ts +7 -0
  36. package/dist/services/toHook.d.ts +3 -0
  37. package/dist/services/urlParser.d.ts +1 -1
  38. package/dist/services/withRouteMethods.d.ts +2 -3
  39. package/dist/tests/navigationBehavior.browser.spec.d.ts +1 -0
  40. package/dist/tests/viewTransitions.browser.spec.d.ts +1 -0
  41. package/dist/types/addLoader.d.ts +7 -4
  42. package/dist/types/addView.d.ts +11 -7
  43. package/dist/types/createRouteOptions.d.ts +17 -65
  44. package/dist/types/hook.d.ts +43 -0
  45. package/dist/types/hooks.d.ts +17 -11
  46. package/dist/types/loader.d.ts +59 -0
  47. package/dist/types/navigation.d.ts +2 -0
  48. package/dist/types/props.d.ts +0 -18
  49. package/dist/types/register.d.ts +2 -2
  50. package/dist/types/resolved.d.ts +4 -0
  51. package/dist/types/route.d.ts +2 -3
  52. package/dist/types/routeContext.d.ts +8 -0
  53. package/dist/types/routeViews.d.ts +5 -7
  54. package/dist/types/routeWithParams.d.ts +1 -1
  55. package/dist/types/router.d.ts +18 -4
  56. package/dist/types/routerPlugin.d.ts +7 -5
  57. package/dist/types/routerPush.d.ts +8 -0
  58. package/dist/types/routerReplace.d.ts +3 -0
  59. package/dist/types/url.d.ts +1 -0
  60. package/dist/types/useLink.d.ts +5 -0
  61. package/dist/types/view.d.ts +58 -0
  62. package/dist/types/viewTransition.d.ts +49 -0
  63. package/dist/utilities/navigation.d.ts +15 -0
  64. package/dist/utilities/promises.d.ts +4 -0
  65. package/dist/utilities/promises.spec.d.ts +1 -0
  66. package/dist/utilities/testHelpers.d.ts +32 -100
  67. package/dist/utilities/viewTransition.d.ts +11 -0
  68. package/dist/utilities/viewTransition.spec.d.ts +1 -0
  69. package/package.json +7 -6
  70. package/dist/services/createRouteRedirects.d.ts +0 -10
  71. package/dist/services/createRouteViews.d.ts +0 -16
  72. /package/dist/{services/createRouteRedirects.spec.d.ts → components/viewTransition.browser.spec.d.ts} +0 -0
@@ -1,20 +1,15 @@
1
- import { Component } from 'vue';
1
+ import { NavigationBehavior } from './navigation';
2
2
  import { Param } from './paramTypes';
3
3
  import { PrefetchConfig } from './prefetch';
4
+ import { ViewTransitionConfig } from './viewTransition';
4
5
  import { RouteMeta } from './register';
5
6
  import { Route, RouteInternal } from './route';
6
- import { ResolvedRoute, WithData } from './resolved';
7
- import { ComponentProps } from '../services/component';
8
- import { PropsCallbackContext } from './props';
9
- import { AnyFunction, Identity, MaybePromise } from './utilities';
10
7
  import { ToMeta } from './meta';
11
8
  import { ToName } from './name';
12
9
  import { UrlPart, UrlQueryPart } from '../services/withParams';
13
10
  import { RouteContext } from './routeContext';
14
- import { RouterViewProps } from '../components/routerView';
15
11
  import { ToUrl } from './url';
16
12
  import { CombineUrl } from '../services/combineUrl';
17
- import { RouteView } from './routeViews';
18
13
  export type WithHost<THost extends string | UrlPart = string | UrlPart> = {
19
14
  /**
20
15
  * Host part of URL.
@@ -31,20 +26,6 @@ export declare function isWithParent<T extends Record<string, unknown>>(options:
31
26
  export type WithoutParent = {
32
27
  parent?: never;
33
28
  };
34
- /**
35
- * This type is used to strip the component and components properties from the options object
36
- * when creating a Route to simplify and minimize the output type.
37
- */
38
- type WithoutComponents = {
39
- component: never;
40
- components: never;
41
- };
42
- export declare function isWithComponent<T extends Record<string, unknown>>(options: T): options is T & {
43
- component: Component;
44
- };
45
- export declare function isWithComponents<T extends Record<string, unknown>>(options: T): options is T & {
46
- components: Record<string, Component>;
47
- };
48
29
  export type CreateRouteOptions<TName extends string | undefined = string | undefined, TMeta extends RouteMeta = RouteMeta> = {
49
30
  /**
50
31
  * Name for route, used to create route keys and in navigation.
@@ -70,6 +51,12 @@ export type CreateRouteOptions<TName extends string | undefined = string | undef
70
51
  * Determines what assets are prefetched when router-link is rendered for this route. Overrides router level prefetch.
71
52
  */
72
53
  prefetch?: PrefetchConfig;
54
+ /** Overrides the parent route and router navigation behavior. */
55
+ navigation?: NavigationBehavior;
56
+ /**
57
+ * Animates navigations to this route with the View Transitions API. Overrides router level viewTransition.
58
+ */
59
+ viewTransition?: ViewTransitionConfig;
73
60
  /**
74
61
  * Type params for additional data intended to be stored in history state, all keys will be optional unless a default is provided.
75
62
  */
@@ -79,20 +66,7 @@ export type CreateRouteOptions<TName extends string | undefined = string | undef
79
66
  */
80
67
  parent?: Route;
81
68
  /**
82
- * An optional component to render when this route is matched.
83
- *
84
- * @default RouterView
85
- * @deprecated Use the chainable `addView` method on the route instead: `createRoute({ ... }).addView(component, { props })`.
86
- */
87
- component?: Component;
88
- /**
89
- * An object of named components to render using named views
90
- *
91
- * @deprecated Use the chainable `addView` method on the route instead: `createRoute({ ... }).addView(component, { name, props })`.
92
- */
93
- components?: Record<string, Component>;
94
- /**
95
- * Related routes and rejections for the route. The context is exposed to the hooks and props callback functions for this route.
69
+ * See [Context](https://kitbag-router.netlify.app/advanced-concepts/context).
96
70
  */
97
71
  context?: RouteContext[];
98
72
  /**
@@ -100,16 +74,7 @@ export type CreateRouteOptions<TName extends string | undefined = string | undef
100
74
  */
101
75
  hoist?: boolean;
102
76
  };
103
- export type PropsGetter<TOptions extends CreateRouteOptions = CreateRouteOptions, TComponent extends Component = Component> = (route: ResolvedRoute<ToRoute<TOptions>> & WithData<ToRoute<TOptions>>, context: PropsCallbackContext<ToRoute<TOptions>, TOptions>) => MaybePromise<ComponentProps<TComponent>>;
104
- export type RouterViewPropsGetter<TOptions extends CreateRouteOptions = CreateRouteOptions> = (route: ResolvedRoute<ToRoute<TOptions>> & WithData<ToRoute<TOptions>>, context: PropsCallbackContext<ToRoute<TOptions>, TOptions>) => MaybePromise<RouterViewProps & Record<string, unknown>>;
105
- export type ComponentPropsAreOptional<TComponent extends Component> = Partial<ComponentProps<TComponent>> extends ComponentProps<TComponent> ? true : false;
106
- type RoutePropsRecord<TOptions extends CreateRouteOptions = CreateRouteOptions, TComponents extends Record<string, Component> = Record<string, Component>> = {
107
- [K in keyof TComponents as ComponentPropsAreOptional<TComponents[K]> extends true ? K : never]?: PropsGetter<TOptions, TComponents[K]>;
108
- } & {
109
- [K in keyof TComponents as ComponentPropsAreOptional<TComponents[K]> extends false ? K : never]: PropsGetter<TOptions, TComponents[K]>;
110
- };
111
- export type CreateRouteProps<TOptions extends CreateRouteOptions = CreateRouteOptions> = TOptions['component'] extends Component ? PropsGetter<TOptions, TOptions['component']> : TOptions['components'] extends Record<string, Component> ? RoutePropsRecord<TOptions, TOptions['components']> : RouterViewPropsGetter<TOptions>;
112
- type ToMatch<TOptions extends CreateRouteOptions, TProps = undefined> = Omit<TOptions, 'meta' | 'name' | 'component' | 'components' | 'parent'> & {
77
+ type ToMatch<TOptions extends CreateRouteOptions> = Omit<TOptions, 'meta' | 'name' | 'parent'> & {
113
78
  id: string;
114
79
  name: ToName<TOptions['name']>;
115
80
  /**
@@ -117,9 +82,9 @@ type ToMatch<TOptions extends CreateRouteOptions, TProps = undefined> = Omit<TOp
117
82
  */
118
83
  meta: ToMeta<TOptions['meta']>;
119
84
  /**
120
- * The views this route renders, keyed by view name.
85
+ * The views this route renders, keyed by view name. Added by `addView`.
121
86
  */
122
- views: PropsToViews<TProps>;
87
+ views: {};
123
88
  /**
124
89
  * The loaders this route runs, keyed by loader name. Always empty here — loaders are only added via
125
90
  * the route's `addLoader`.
@@ -130,29 +95,16 @@ type ToMatch<TOptions extends CreateRouteOptions, TProps = undefined> = Omit<TOp
130
95
  * The matches for a route, from greatest ancestor to the route itself. Each carries its own views, so
131
96
  * there is no second tuple to keep aligned with this one.
132
97
  */
133
- type ToMatches<TOptions extends CreateRouteOptions, TProps = undefined> = TOptions extends {
134
- parent: infer TParent extends Route;
135
- } ? [...TParent['matches'], ToMatch<TOptions, TProps>] : [ToMatch<TOptions, TProps>];
136
- /**
137
- * Builds a views record from the props argument, which is either a single getter for the unnamed view or
138
- * a record of getters keyed by view name.
139
- */
140
- type PropsToViews<TProps> = [TProps] extends [AnyFunction] ? {
141
- default: RouteView<ReturnType<TProps>>;
142
- } : [TProps] extends [Record<string, AnyFunction>] ? {
143
- [K in keyof TProps]: RouteView<ReturnType<TProps[K]>>;
144
- } : {};
98
+ type ToMatches<TOptions extends CreateRouteOptions> = TOptions extends WithParent ? [...TOptions['parent']['matches'], ToMatch<TOptions>] : [ToMatch<TOptions>];
145
99
  /**
146
100
  * The url a route resolves to, combined with its parent's unless the route is hoisted.
147
101
  */
148
- export type ToRouteUrl<TOptions extends CreateRouteOptions> = TOptions extends {
149
- parent: infer TParent extends Route;
150
- } ? TOptions['hoist'] extends true ? ToUrl<TOptions & WithoutComponents> : CombineUrl<TParent, ToUrl<TOptions & WithoutComponents>> : ToUrl<Identity<TOptions & WithoutComponents>>;
102
+ export type ToRouteUrl<TOptions extends CreateRouteOptions> = TOptions extends WithParent ? TOptions['hoist'] extends true ? ToUrl<TOptions> : CombineUrl<TOptions['parent'], ToUrl<TOptions>> : ToUrl<TOptions>;
151
103
  /**
152
- * The matches for a route, with the props argument resolved to the views of its own match.
104
+ * The matches for a route, before any views or loaders are added.
153
105
  */
154
- export type ToRouteMatches<TOptions extends CreateRouteOptions, TProps> = ToMatches<TOptions, CreateRouteProps<TOptions> extends TProps ? undefined : TProps>;
155
- export type ToRoute<TOptions extends CreateRouteOptions, TProps extends CreateRouteProps<TOptions> | undefined = undefined> = CreateRouteOptions extends TOptions ? Route : Route<ToRouteUrl<TOptions>, ToRouteMatches<TOptions, TProps>>;
106
+ export type ToRouteMatches<TOptions extends CreateRouteOptions> = ToMatches<TOptions>;
107
+ export type ToRoute<TOptions extends CreateRouteOptions> = CreateRouteOptions extends TOptions ? Route : Route<ToRouteUrl<TOptions>, ToRouteMatches<TOptions>>;
156
108
  /**
157
109
  * Nests a route under its parent. A hoisted route keeps everything of its parent's except the url: its own
158
110
  * url stands alone and it inherits none of the parent's aliases.
@@ -0,0 +1,43 @@
1
+ import { RouteContext, RouteContextToRejection, RouteContextToRoute } from './routeContext';
2
+ import { ResolvedRouteUnion } from './resolved';
3
+ import { Route, Routes } from './route';
4
+ import { BeforeHookContext, AfterHookContext } from './hooks';
5
+ import { RouteUpdate } from './routeUpdate';
6
+ import { AnyFunction, MaybePromise } from './utilities';
7
+ export declare const IS_HOOK_SYMBOL: unique symbol;
8
+ export type HookInternal = {
9
+ [IS_HOOK_SYMBOL]: true;
10
+ };
11
+ /**
12
+ * Context provided to a reusable hook, narrowed by whether it runs before or after navigation.
13
+ */
14
+ export type HookCallbackContext<TContext extends readonly RouteContext[] = [], TRoutes extends Routes = Routes> = {
15
+ from: ResolvedRouteUnion<TRoutes[number]> | null;
16
+ update?: RouteUpdate;
17
+ } & (Omit<BeforeHookContext<Route, RouteContextToRoute<[...TContext]>, RouteContextToRejection<[...TContext]>>, 'update'> | Omit<AfterHookContext<Route, RouteContextToRoute<[...TContext]>, RouteContextToRejection<[...TContext]>>, 'update'>);
18
+ /**
19
+ * Options for a reusable route hook.
20
+ */
21
+ export type CreateHookOptions<TContext extends readonly RouteContext[] = [], TRoutes extends Routes = Routes> = {
22
+ hook: (route: ResolvedRouteUnion<TRoutes[number]> | null, context: HookCallbackContext<TContext, TRoutes>) => MaybePromise<void>;
23
+ /**
24
+ * See [Context](https://kitbag-router.netlify.app/advanced-concepts/context).
25
+ */
26
+ context?: TContext;
27
+ };
28
+ /**
29
+ * Creates hooks with callbacks typed to the router's resolved routes.
30
+ */
31
+ export type CreateHook<TRoutes extends Routes = Routes> = <const TContext extends readonly RouteContext[] = []>(options: CreateHookOptions<TContext, TRoutes>) => Hook<TContext>;
32
+ /**
33
+ * A reusable hook that can be attached before or after a route enters, updates, or leaves.
34
+ */
35
+ export type Hook<TContext extends readonly RouteContext[] = []> = {
36
+ hook: AnyFunction<MaybePromise<void>>;
37
+ context: TContext;
38
+ };
39
+ export type AnyHook = Hook<readonly RouteContext[]>;
40
+ /**
41
+ * Determines whether a value is a reusable hook.
42
+ */
43
+ export declare function isHook(value: unknown): value is AnyHook & HookInternal;
@@ -1,6 +1,7 @@
1
+ import { AnyHook } from './hook';
1
2
  import { Hooks } from '../models/hooks';
2
3
  import { RouterResolvedRouteUnion, ResolvedRouteUnion } from './resolved';
3
- import { MaybePromise } from './utilities';
4
+ import { AnyFunction, MaybePromise } from './utilities';
4
5
  import { Route, Routes } from './route';
5
6
  import { RouterReject } from './routerReject';
6
7
  import { RouterPush } from './routerPush';
@@ -61,7 +62,7 @@ export type ComponentHook = BeforeEnterHook | BeforeUpdateHook | BeforeLeaveHook
61
62
  */
62
63
  export type ComponentHookRegistration = {
63
64
  lifecycle: HookLifecycle;
64
- hook: ComponentHook;
65
+ hook: ComponentHook | AnyHook;
65
66
  depth: number;
66
67
  };
67
68
  /**
@@ -73,6 +74,10 @@ export type AddGlobalHooks = (hooks: Hooks) => void;
73
74
  * A function to remove a previously added route hook.
74
75
  */
75
76
  export type HookRemove = () => void;
77
+ /**
78
+ * Registers an inline callback or a reusable hook definition.
79
+ */
80
+ export type AddHook<THook extends AnyFunction> = (hook: THook | AnyHook) => HookRemove;
76
81
  /**
77
82
  * Enumerates the lifecycle events for before route hooks.
78
83
  */
@@ -85,14 +90,16 @@ export type AfterHookLifecycle = 'onAfterRouteEnter' | 'onAfterRouteUpdate' | 'o
85
90
  * Union type for all route hook lifecycle events.
86
91
  */
87
92
  export type HookLifecycle = BeforeHookLifecycle | AfterHookLifecycle;
88
- type AfterHookContext<TRoute extends Route, TRoutes extends Routes, TRejections extends Rejections> = {
93
+ export type AfterHookContext<TRoute extends Route, TRoutes extends Routes, TRejections extends Rejections> = {
94
+ lifecycle: 'after';
89
95
  reject: RouterReject<TRejections>;
90
96
  push: RouterPush<TRoutes>;
91
97
  replace: RouterReplace<TRoutes>;
92
98
  update: RouteUpdate<ResolvedRouteUnion<TRoute>>;
93
99
  signal: AbortSignal;
94
100
  };
95
- type BeforeHookContext<TRouteTo extends Route, TRoutes extends Routes, TRejections extends Rejections> = {
101
+ export type BeforeHookContext<TRouteTo extends Route, TRoutes extends Routes, TRejections extends Rejections> = {
102
+ lifecycle: 'before';
96
103
  reject: RouterReject<TRejections>;
97
104
  push: RouterPush<TRoutes>;
98
105
  replace: RouterReplace<TRoutes>;
@@ -104,32 +111,32 @@ export type BeforeEnterHookContext<TRoutes extends Routes = Routes, TRejections
104
111
  from: ResolvedRouteUnion<TRouteFrom> | null;
105
112
  };
106
113
  export type BeforeEnterHook<TRoutes extends Routes = Routes, TRejections extends Rejections = Rejections, TRouteTo extends Route = TRoutes[number], TRouteFrom extends Route = TRoutes[number]> = (to: ResolvedRouteUnion<TRouteTo>, context: BeforeEnterHookContext<TRoutes, TRejections, TRouteTo, TRouteFrom>) => MaybePromise<void>;
107
- export type AddBeforeEnterHook<TRoutes extends Routes = Routes, TRejections extends Rejections = Rejections, TRouteTo extends Route = TRoutes[number], TRouteFrom extends Route = TRoutes[number]> = (hook: BeforeEnterHook<TRoutes, TRejections, TRouteTo, TRouteFrom>) => HookRemove;
114
+ export type AddBeforeEnterHook<TRoutes extends Routes = Routes, TRejections extends Rejections = Rejections, TRouteTo extends Route = TRoutes[number], TRouteFrom extends Route = TRoutes[number]> = AddHook<BeforeEnterHook<TRoutes, TRejections, TRouteTo, TRouteFrom>>;
108
115
  export type BeforeUpdateHookContext<TRoutes extends Routes = Routes, TRejections extends Rejections = Rejections, TRouteTo extends Route = TRoutes[number], TRouteFrom extends Route = TRoutes[number]> = BeforeHookContext<TRouteTo, TRoutes, TRejections> & {
109
116
  from: ResolvedRouteUnion<TRouteFrom> | null;
110
117
  };
111
118
  export type BeforeUpdateHook<TRoutes extends Routes = Routes, TRejections extends Rejections = Rejections, TRouteTo extends Route = TRoutes[number], TRouteFrom extends Route = TRoutes[number]> = (to: ResolvedRouteUnion<TRouteTo>, context: BeforeUpdateHookContext<TRoutes, TRejections, TRouteTo, TRouteFrom>) => MaybePromise<void>;
112
- export type AddBeforeUpdateHook<TRoutes extends Routes = Routes, TRejections extends Rejections = Rejections, TRouteTo extends Route = TRoutes[number], TRouteFrom extends Route = TRoutes[number]> = (hook: BeforeUpdateHook<TRoutes, TRejections, TRouteTo, TRouteFrom>) => HookRemove;
119
+ export type AddBeforeUpdateHook<TRoutes extends Routes = Routes, TRejections extends Rejections = Rejections, TRouteTo extends Route = TRoutes[number], TRouteFrom extends Route = TRoutes[number]> = AddHook<BeforeUpdateHook<TRoutes, TRejections, TRouteTo, TRouteFrom>>;
113
120
  export type BeforeLeaveHookContext<TRoutes extends Routes = Routes, TRejections extends Rejections = Rejections, TRouteTo extends Route = TRoutes[number], TRouteFrom extends Route = TRoutes[number]> = Omit<BeforeHookContext<TRouteTo, TRoutes, TRejections>, 'update'> & {
114
121
  from: ResolvedRouteUnion<TRouteFrom>;
115
122
  };
116
123
  export type BeforeLeaveHook<TRoutes extends Routes = Routes, TRejections extends Rejections = Rejections, TRouteTo extends Route = TRoutes[number], TRouteFrom extends Route = TRoutes[number]> = (to: ResolvedRouteUnion<TRouteTo> | null, context: BeforeLeaveHookContext<TRoutes, TRejections, TRouteTo, TRouteFrom>) => MaybePromise<void>;
117
- export type AddBeforeLeaveHook<TRoutes extends Routes = Routes, TRejections extends Rejections = Rejections, TRouteTo extends Route = TRoutes[number], TRouteFrom extends Route = TRoutes[number]> = (hook: BeforeLeaveHook<TRoutes, TRejections, TRouteTo, TRouteFrom>) => HookRemove;
124
+ export type AddBeforeLeaveHook<TRoutes extends Routes = Routes, TRejections extends Rejections = Rejections, TRouteTo extends Route = TRoutes[number], TRouteFrom extends Route = TRoutes[number]> = AddHook<BeforeLeaveHook<TRoutes, TRejections, TRouteTo, TRouteFrom>>;
118
125
  export type AfterEnterHookContext<TRoutes extends Routes = Routes, TRejections extends Rejections = Rejections, TRouteTo extends Route = TRoutes[number], TRouteFrom extends Route = TRoutes[number]> = AfterHookContext<TRouteTo, TRoutes, TRejections> & {
119
126
  from: ResolvedRouteUnion<TRouteFrom> | null;
120
127
  };
121
128
  export type AfterEnterHook<TRoutes extends Routes = Routes, TRejections extends Rejections = Rejections, TRouteTo extends Route = TRoutes[number], TRouteFrom extends Route = TRoutes[number]> = (to: ResolvedRouteUnion<TRouteTo>, context: AfterEnterHookContext<TRoutes, TRejections, TRouteTo, TRouteFrom>) => MaybePromise<void>;
122
- export type AddAfterEnterHook<TRoutes extends Routes = Routes, TRejections extends Rejections = Rejections, TRouteTo extends Route = TRoutes[number], TRouteFrom extends Route = TRoutes[number]> = (hook: AfterEnterHook<TRoutes, TRejections, TRouteTo, TRouteFrom>) => HookRemove;
129
+ export type AddAfterEnterHook<TRoutes extends Routes = Routes, TRejections extends Rejections = Rejections, TRouteTo extends Route = TRoutes[number], TRouteFrom extends Route = TRoutes[number]> = AddHook<AfterEnterHook<TRoutes, TRejections, TRouteTo, TRouteFrom>>;
123
130
  export type AfterUpdateHookContext<TRoutes extends Routes = Routes, TRejections extends Rejections = Rejections, TRouteTo extends Route = TRoutes[number], TRouteFrom extends Route = TRoutes[number]> = AfterHookContext<TRouteTo, TRoutes, TRejections> & {
124
131
  from: ResolvedRouteUnion<TRouteFrom> | null;
125
132
  };
126
133
  export type AfterUpdateHook<TRoutes extends Routes = Routes, TRejections extends Rejections = Rejections, TRouteTo extends Route = TRoutes[number], TRouteFrom extends Route = TRoutes[number]> = (to: ResolvedRouteUnion<TRouteTo>, context: AfterUpdateHookContext<TRoutes, TRejections, TRouteTo, TRouteFrom>) => MaybePromise<void>;
127
- export type AddAfterUpdateHook<TRoutes extends Routes = Routes, TRejections extends Rejections = Rejections, TRouteTo extends Route = TRoutes[number], TRouteFrom extends Route = TRoutes[number]> = (hook: AfterUpdateHook<TRoutes, TRejections, TRouteTo, TRouteFrom>) => HookRemove;
134
+ export type AddAfterUpdateHook<TRoutes extends Routes = Routes, TRejections extends Rejections = Rejections, TRouteTo extends Route = TRoutes[number], TRouteFrom extends Route = TRoutes[number]> = AddHook<AfterUpdateHook<TRoutes, TRejections, TRouteTo, TRouteFrom>>;
128
135
  export type AfterLeaveHookContext<TRoutes extends Routes = Routes, TRejections extends Rejections = Rejections, TRouteTo extends Route = TRoutes[number], TRouteFrom extends Route = TRoutes[number]> = Omit<AfterHookContext<TRouteTo, TRoutes, TRejections>, 'update'> & {
129
136
  from: ResolvedRouteUnion<TRouteFrom>;
130
137
  };
131
138
  export type AfterLeaveHook<TRoutes extends Routes = Routes, TRejections extends Rejections = Rejections, TRouteTo extends Route = TRoutes[number], TRouteFrom extends Route = TRoutes[number]> = (to: ResolvedRouteUnion<TRouteTo> | null, context: AfterLeaveHookContext<TRoutes, TRejections, TRouteTo, TRouteFrom>) => MaybePromise<void>;
132
- export type AddAfterLeaveHook<TRoutes extends Routes = Routes, TRejections extends Rejections = Rejections, TRouteTo extends Route = TRoutes[number], TRouteFrom extends Route = TRoutes[number]> = (hook: AfterLeaveHook<TRoutes, TRejections, TRouteTo, TRouteFrom>) => HookRemove;
139
+ export type AddAfterLeaveHook<TRoutes extends Routes = Routes, TRejections extends Rejections = Rejections, TRouteTo extends Route = TRoutes[number], TRouteFrom extends Route = TRoutes[number]> = AddHook<AfterLeaveHook<TRoutes, TRejections, TRouteTo, TRouteFrom>>;
133
140
  export type BeforeHookResponse = CallbackContextSuccess | CallbackContextPush | CallbackContextRedirect | CallbackContextReject | CallbackContextAbort;
134
141
  export type AfterHookResponse = CallbackContextSuccess | CallbackContextPush | CallbackContextReject;
135
142
  export type HookRunnerContext<TRoutes extends Routes = Routes> = {
@@ -167,4 +174,3 @@ export type ErrorHookRunnerContext<TRoutes extends Routes = Routes> = {
167
174
  source: 'props' | 'loader' | 'hook';
168
175
  };
169
176
  export type ErrorHookRunner = (error: unknown, context: ErrorHookRunnerContext) => void;
170
- export {};
@@ -0,0 +1,59 @@
1
+ import { TransformerOptions } from '../services/payload';
2
+ import { PrefetchConfig } from './prefetch';
3
+ import { RouteContext, RouteContextToRejection, RouteContextToRoute } from './routeContext';
4
+ import { RouterPush } from './routerPush';
5
+ import { RouterReject } from './routerReject';
6
+ import { RouterReplace } from './routerReplace';
7
+ import { AnyFunction } from './utilities';
8
+ import { ResolvedRouteUnion } from './resolved';
9
+ import { Routes } from './route';
10
+ export declare const IS_LOADER_SYMBOL: unique symbol;
11
+ export type LoaderInternal = {
12
+ [IS_LOADER_SYMBOL]: true;
13
+ };
14
+ /**
15
+ * Navigation helpers available to a reusable loader, typed from its declared context.
16
+ */
17
+ export type LoaderCallbackContext<TContext extends readonly RouteContext[] = []> = {
18
+ push: RouterPush<RouteContextToRoute<[...TContext]>>;
19
+ replace: RouterReplace<RouteContextToRoute<[...TContext]>>;
20
+ reject: RouterReject<RouteContextToRejection<[...TContext]>>;
21
+ signal: AbortSignal;
22
+ };
23
+ /**
24
+ * Options for a reusable loader that receives the resolved route and its declared context helpers.
25
+ */
26
+ export type CreateLoaderOptions<TContext extends readonly RouteContext[] = [], TData = unknown, TRoutes extends Routes = Routes> = TransformerOptions<NoInfer<Awaited<TData>>> & {
27
+ /**
28
+ * Loads a value or promise from the resolved route.
29
+ */
30
+ load: (route: ResolvedRouteUnion<TRoutes[number]>, context: LoaderCallbackContext<TContext>) => TData;
31
+ /**
32
+ * See [Context](https://kitbag-router.netlify.app/advanced-concepts/context).
33
+ */
34
+ context?: TContext;
35
+ /**
36
+ * Default prefetch behavior, overridable when attaching the loader.
37
+ */
38
+ prefetch?: PrefetchConfig;
39
+ };
40
+ /**
41
+ * Creates loaders with callbacks typed to the router's resolved routes.
42
+ */
43
+ export type CreateLoader<TRoutes extends Routes = Routes> = <const TContext extends readonly RouteContext[] = [], TData = unknown>(options: CreateLoaderOptions<TContext, TData, TRoutes>) => Loader<TData, TContext>;
44
+ /**
45
+ * A reusable loader definition, with its context normalized to an array.
46
+ */
47
+ export type Loader<TData = unknown, TContext extends readonly RouteContext[] = []> = TransformerOptions<Awaited<TData>> & {
48
+ load: AnyFunction<TData>;
49
+ context: TContext;
50
+ prefetch?: PrefetchConfig;
51
+ };
52
+ /**
53
+ * The runtime shape after a loader's route, context, and return types have been erased.
54
+ */
55
+ export type AnyLoader = Loader<any, readonly RouteContext[]>;
56
+ /**
57
+ * Determines whether a value is a reusable loader created by `createLoader`.
58
+ */
59
+ export declare function isLoader(value: unknown): value is AnyLoader & LoaderInternal;
@@ -1,5 +1,7 @@
1
1
  import { ComputedRef } from 'vue';
2
2
  import { ResolvedRoute } from './resolved';
3
+ /** Whether navigation commits immediately or waits for its props, loaders, and components. */
4
+ export type NavigationBehavior = 'progressive' | 'blocking';
3
5
  /**
4
6
  * The navigation under way, if any, and how far it has come. A navigation is under way from the moment it
5
7
  * is asked for until the route it leads to has everything it renders with, or it is rejected, aborted, or
@@ -1,25 +1,7 @@
1
- import { CreateRouteOptions } from './createRouteOptions';
2
1
  import { Route } from './route';
3
- import { RouterReject } from './routerReject';
4
- import { RouterPush } from './routerPush';
5
- import { RouterReplace } from './routerReplace';
6
- import { ExtractRouteContextRejections, ExtractRouteContextRoutes } from './routeContext';
7
- import { ResolvedRoute } from './resolved';
8
- import { RouteUpdate } from './routeUpdate';
9
2
  import { LoadersDataReturnType } from './routeLoaders';
10
3
  import { ViewsPropsReturnType } from './routeViews';
11
4
  import { LastInArray } from './utilities';
12
- /**
13
- * Context provided to props callback functions
14
- */
15
- export type PropsCallbackContext<TRoute extends Route = Route, TOptions extends CreateRouteOptions = CreateRouteOptions> = {
16
- reject: RouterReject<ExtractRouteContextRejections<TOptions>>;
17
- push: RouterPush<[TRoute] | ExtractRouteContextRoutes<TOptions>>;
18
- replace: RouterReplace<[TRoute] | ExtractRouteContextRoutes<TOptions>>;
19
- update: RouteUpdate<ResolvedRoute<TRoute>>;
20
- signal: AbortSignal;
21
- parent: PropsCallbackParent<TOptions['parent']>;
22
- };
23
5
  export type PropsCallbackParent<TParent extends Route | undefined = Route | undefined> = Route | undefined extends TParent ? undefined | {
24
6
  name: string;
25
7
  props: unknown;
@@ -19,8 +19,8 @@ export interface Register {
19
19
  * Represents the Router property within {@link Register}
20
20
  */
21
21
  export type RegisteredRouter<T = Register> = T extends {
22
- router: infer TRouter;
23
- } ? TRouter : Router;
22
+ router: unknown;
23
+ } ? T['router'] : Router;
24
24
  /**
25
25
  * Represents additional metadata associated with a route, customizable via declaration merging.
26
26
  */
@@ -105,4 +105,8 @@ export type RouterResolvedRouteUnion<TRoutes extends Routes> = {
105
105
  * type ResolvedUnion = ResolvedRouteUnion<RouteUnion> // ResolvedRoute<RouteA> | ResolvedRoute<RouteB>
106
106
  */
107
107
  export type ResolvedRouteUnion<TRoute extends Route> = TRoute extends Route ? ResolvedRoute<TRoute> : never;
108
+ /**
109
+ * Converts a route union to resolved routes with their corresponding loader data.
110
+ */
111
+ export type ResolvedRouteWithDataUnion<TRoute extends Route> = TRoute extends Route ? ResolvedRoute<TRoute> & WithData<TRoute> : never;
108
112
  export {};
@@ -29,10 +29,9 @@ export type RouteInternal = {
29
29
  export type Routes = readonly Route[];
30
30
  /**
31
31
  * The Route properties originally provided to `createRoute`, plus the views that route renders and the
32
- * loaders it runs. The deprecated `component`/`components` options are folded into `views` (see
33
- * {@link RouteViews}).
32
+ * loaders it runs.
34
33
  */
35
- export type CreatedRouteOptions = Omit<CreateRouteOptions, 'component' | 'components'> & {
34
+ export type CreatedRouteOptions = CreateRouteOptions & {
36
35
  id: string;
37
36
  views: RouteViews;
38
37
  loaders: RouteLoaders;
@@ -3,6 +3,14 @@ import { Rejection, Rejections } from './rejection';
3
3
  import { GenericRoute, Route, Routes } from './route';
4
4
  export type RouteContext = GenericRoute | Rejection;
5
5
  export type ToRouteContext<TContext extends RouteContext[] | readonly RouteContext[] | undefined> = TContext extends RouteContext[] ? TContext : [];
6
+ /**
7
+ * Adds context to an options type while preserving its existing properties and context.
8
+ */
9
+ export type WithRouteContext<TOptions extends {
10
+ context?: RouteContext[];
11
+ }, TContext extends RouteContext[]> = TContext extends [] ? TOptions : Omit<TOptions, 'context'> & {
12
+ context: [...ToRouteContext<TOptions['context']>, ...TContext];
13
+ };
6
14
  export type ExtractRouteContext<TOptions extends CreateRouteOptions> = TOptions extends {
7
15
  context: infer TContext extends RouteContext[];
8
16
  } ? TOptions extends {
@@ -3,26 +3,24 @@ import { Component } from 'vue';
3
3
  import { PrefetchConfig } from './prefetch';
4
4
  import { AnyFunction } from './utilities';
5
5
  /**
6
- * A single view: what to render, how to get its props, and how to prefetch it. `component` is optional
7
- * because a route can bind props to the nested RouterView it renders without declaring a component.
6
+ * A single view: what to render, how to get its props, and how to prefetch it.
8
7
  *
9
8
  * @template TProps - What this view's props getter returns, carried so parent props can be typed from it.
10
9
  */
11
10
  export type RouteView<TProps = undefined> = {
12
- component?: Component;
11
+ component: Component;
13
12
  props?: AnyFunction<TProps>;
14
13
  prefetch?: PrefetchConfig;
15
14
  transformer?: AnyPayloadTransformer;
16
15
  };
17
16
  /**
18
- * The views for a single route, keyed by view name (the unnamed view under 'default'). Indexed by depth in
19
- * `route.views` — parallel to how `route.matches` indexes the matched options, which is where a route's id
20
- * comes from at a given depth.
17
+ * The views for a single match, keyed by view name (the unnamed view under 'default'). Each match in
18
+ * `route.matches` carries its own views.
21
19
  */
22
20
  export type RouteViews = Record<string, RouteView<unknown>>;
23
21
  /**
24
22
  * The props a child sees for a parent's views. A lone unnamed view is given directly rather than under a
25
- * 'default' key, matching how the props argument is written. Each view's props are always a promise,
23
+ * 'default' key. Each view's props are always a promise,
26
24
  * since the parent's props may not have been computed when the child's getter runs.
27
25
  */
28
26
  export type ViewsPropsReturnType<TViews> = keyof ViewsWithProps<TViews> extends never ? undefined : keyof ViewsWithProps<TViews> extends 'default' ? ParentViewProps<Extract<ViewsWithProps<TViews>, {
@@ -2,4 +2,4 @@ import { Route, Routes } from './route';
2
2
  import { RoutesName, RoutesMap } from './routesMap';
3
3
  import { UrlParamsWriting } from './url';
4
4
  export type RouteGetByKey<TRoutes extends Routes, TKey extends RoutesName<TRoutes>> = RoutesMap<TRoutes>[TKey];
5
- export type RouteParamsByKey<TRoutes extends Routes, TKey extends string> = RouteGetByKey<TRoutes, TKey> extends Route ? UrlParamsWriting<RouteGetByKey<TRoutes, TKey>> : Record<string, unknown>;
5
+ export type RouteParamsByKey<TRoutes extends Routes, TKey extends string> = TKey extends string ? RouteGetByKey<TRoutes, TKey> extends Route ? UrlParamsWriting<RouteGetByKey<TRoutes, TKey>> : Record<string, unknown> : never;
@@ -1,3 +1,4 @@
1
+ import { NavigationBehavior } from './navigation';
1
2
  import { App, InjectionKey, Ref } from 'vue';
2
3
  import { RouterHistoryMode } from '../services/createRouterHistory';
3
4
  import { TransformerOptions } from '../services/payload';
@@ -5,7 +6,7 @@ import { RouterRoute } from './routerRoute';
5
6
  import { AddBeforeEnterHook, AddBeforeUpdateHook, AddBeforeLeaveHook, AddAfterEnterHook, AddAfterUpdateHook, AddAfterLeaveHook, AddErrorHook, AddRejectionHook } from './hooks';
6
7
  import { PrefetchConfig } from './prefetch';
7
8
  import { ResolvedRoute } from './resolved';
8
- import { Route, Routes } from './route';
9
+ import { Routes } from './route';
9
10
  import { RouterPush } from './routerPush';
10
11
  import { RouterReplace } from './routerReplace';
11
12
  import { RouterResolve, RouterResolveOptions } from './routerResolve';
@@ -14,6 +15,7 @@ import { RouterPlugin } from './routerPlugin';
14
15
  import { RoutesName } from './routesMap';
15
16
  import { ExtractRejections, ExtractRejectionTypes, Rejections, BuiltInRejectionType } from './rejection';
16
17
  import { PayloadValueError } from '../errors/payloadValueError';
18
+ import { ViewTransitionConfig } from './viewTransition';
17
19
  /**
18
20
  * Options to initialize a {@link Router} instance.
19
21
  */
@@ -44,6 +46,17 @@ export type RouterOptions = TransformerOptions & {
44
46
  * Determines what assets are prefetched when router-link is rendered for a specific route
45
47
  */
46
48
  prefetch?: PrefetchConfig;
49
+ /**
50
+ * Whether navigation waits for props, loaders, and components before committing.
51
+ * @default 'progressive'
52
+ */
53
+ navigation?: NavigationBehavior;
54
+ /**
55
+ * Animates navigations with the View Transitions API. Overridden per route and per navigation.
56
+ *
57
+ * @default false
58
+ */
59
+ viewTransition?: ViewTransitionConfig;
47
60
  /**
48
61
  * Components assigned to each type of rejection your router supports.
49
62
  */
@@ -243,7 +256,8 @@ export type Router<TRoutes extends Routes = any, TOptions extends RouterOptions
243
256
  */
244
257
  render: () => Promise<ServerRenderResponse>;
245
258
  /**
246
- * Stops the router. Tears down the history listener and ignores any navigation still in flight or started afterwards.
259
+ * Stops the router. Releases history listeners and context subscriptions and ignores any navigation
260
+ * still in flight or started afterwards. Called automatically when the Vue app unmounts.
247
261
  */
248
262
  stop: () => void;
249
263
  /**
@@ -265,6 +279,6 @@ export type Router<TRoutes extends Routes = any, TOptions extends RouterOptions
265
279
  export type RouterRouteUnion<TRoutes extends Routes> = {
266
280
  [K in keyof TRoutes]: TRoutes[K]['name'] extends '' ? never : RouterRoute<ResolvedRoute<TRoutes[K]>>;
267
281
  }[number];
268
- export type RouterRoutes<TRouter extends Router> = TRouter extends Router<infer TRoutes extends Routes> ? TRoutes : Routes;
282
+ export type RouterRoutes<TRouter extends Router> = TRouter extends Router<infer TRoutes extends Routes, any, infer TPlugin extends RouterPlugin> ? Routes extends TRoutes | TPlugin['routes'] ? Routes : TRoutes | TPlugin['routes'] : Routes;
269
283
  export type RouterRejections<TRouter extends Router> = TRouter extends Router<any, infer TOptions extends RouterOptions, infer TPlugins extends RouterPlugin> ? ExtractRejections<TOptions> | ExtractRejections<TPlugins> : [];
270
- export type RouterRouteName<TRouter extends Router> = TRouter extends Router<infer TRoutes extends Routes> ? RoutesName<TRoutes> : RoutesName<Route[]>;
284
+ export type RouterRouteName<TRouter extends Router> = RoutesName<RouterRoutes<TRouter>>;
@@ -1,4 +1,4 @@
1
- import { HookRemove } from './hooks';
1
+ import { AddHook, HookRemove } from './hooks';
2
2
  import { Routes } from './route';
3
3
  import { Rejections } from './rejection';
4
4
  import { Hooks } from '../models/hooks';
@@ -30,6 +30,7 @@ export type RouterPlugin<TRoutes extends Routes = Routes, TRejections extends Re
30
30
  rejections: TRejections;
31
31
  };
32
32
  type PluginBeforeRouteHookContext<TRoutes extends Routes, TRejections extends Rejections> = {
33
+ lifecycle: 'before';
33
34
  from: ResolvedRoute | null;
34
35
  reject: RouterReject<TRejections>;
35
36
  push: RouterPush<TRoutes>;
@@ -37,6 +38,7 @@ type PluginBeforeRouteHookContext<TRoutes extends Routes, TRejections extends Re
37
38
  abort: CallbackContextAbort;
38
39
  };
39
40
  type PluginAfterRouteHookContext<TRoutes extends Routes, TRejections extends Rejections> = {
41
+ lifecycle: 'after';
40
42
  from: ResolvedRoute | null;
41
43
  reject: RouterReject<TRejections>;
42
44
  push: RouterPush<TRoutes>;
@@ -44,12 +46,12 @@ type PluginAfterRouteHookContext<TRoutes extends Routes, TRejections extends Rej
44
46
  };
45
47
  export type PluginBeforeRouteHook<TRoutes extends Routes = Routes, TRejections extends Rejections = Rejections> = (to: ResolvedRoute, context: PluginBeforeRouteHookContext<TRoutes, TRejections>) => MaybePromise<void>;
46
48
  export type PluginBeforeRouteLeaveHook<TRoutes extends Routes = Routes, TRejections extends Rejections = Rejections> = (to: ResolvedRoute | null, context: PluginBeforeRouteHookContext<TRoutes, TRejections>) => MaybePromise<void>;
47
- type AddPluginBeforeRouteLeaveHook<TRoutes extends Routes = Routes, TRejections extends Rejections = Rejections> = (hook: PluginBeforeRouteLeaveHook<TRoutes, TRejections>) => HookRemove;
49
+ type AddPluginBeforeRouteLeaveHook<TRoutes extends Routes = Routes, TRejections extends Rejections = Rejections> = AddHook<PluginBeforeRouteLeaveHook<TRoutes, TRejections>>;
48
50
  export type PluginAfterRouteLeaveHook<TRoutes extends Routes = Routes, TRejections extends Rejections = Rejections> = (to: ResolvedRoute | null, context: PluginAfterRouteHookContext<TRoutes, TRejections>) => MaybePromise<void>;
49
- type AddPluginAfterRouteLeaveHook<TRoutes extends Routes = Routes, TRejections extends Rejections = Rejections> = (hook: PluginAfterRouteLeaveHook<TRoutes, TRejections>) => HookRemove;
51
+ type AddPluginAfterRouteLeaveHook<TRoutes extends Routes = Routes, TRejections extends Rejections = Rejections> = AddHook<PluginAfterRouteLeaveHook<TRoutes, TRejections>>;
50
52
  export type PluginAfterRouteHook<TRoutes extends Routes = Routes, TRejections extends Rejections = Rejections> = (to: ResolvedRoute, context: PluginAfterRouteHookContext<TRoutes, TRejections>) => MaybePromise<void>;
51
- type AddPluginBeforeRouteHook<TRoutes extends Routes, TRejections extends Rejections> = (hook: PluginBeforeRouteHook<TRoutes, TRejections>) => HookRemove;
52
- type AddPluginAfterRouteHook<TRoutes extends Routes, TRejections extends Rejections> = (hook: PluginAfterRouteHook<TRoutes, TRejections>) => HookRemove;
53
+ type AddPluginBeforeRouteHook<TRoutes extends Routes, TRejections extends Rejections> = AddHook<PluginBeforeRouteHook<TRoutes, TRejections>>;
54
+ type AddPluginAfterRouteHook<TRoutes extends Routes, TRejections extends Rejections> = AddHook<PluginAfterRouteHook<TRoutes, TRejections>>;
53
55
  export type PluginErrorHookContext<TRoutes extends Routes = Routes, TRejections extends Rejections = Rejections> = {
54
56
  to: ResolvedRoute | null;
55
57
  from: ResolvedRoute | null;
@@ -1,3 +1,4 @@
1
+ import { NavigationBehavior } from './navigation';
1
2
  import { Routes } from './route';
2
3
  import { RoutesName } from './routesMap';
3
4
  import { RouteParamsByKey } from './routeWithParams';
@@ -6,6 +7,7 @@ import { UrlString } from './urlString';
6
7
  import { AllPropertiesAreOptional } from './utilities';
7
8
  import { QuerySource } from './querySource';
8
9
  import { ResolvedRoute } from './resolved';
10
+ import { ViewTransitionConfig } from './viewTransition';
9
11
  export type RouterPushOptions<TState = unknown> = {
10
12
  /**
11
13
  * The query string to add to the url.
@@ -19,10 +21,16 @@ export type RouterPushOptions<TState = unknown> = {
19
21
  * Whether to replace the current history entry.
20
22
  */
21
23
  replace?: boolean;
24
+ /** Overrides the route and router navigation behavior. */
25
+ navigation?: NavigationBehavior;
22
26
  /**
23
27
  * State values to pass to the route.
24
28
  */
25
29
  state?: Partial<TState>;
30
+ /**
31
+ * Animates the navigation with the View Transitions API. Overrides route and router level viewTransition.
32
+ */
33
+ viewTransition?: ViewTransitionConfig;
26
34
  };
27
35
  type RouterPushArgs<TRoutes extends Routes, TSource extends RoutesName<TRoutes>> = AllPropertiesAreOptional<RouteParamsByKey<TRoutes, TSource>> extends true ? [params?: RouteParamsByKey<TRoutes, TSource>, options?: RouterPushOptions<RouteStateByName<TRoutes, TSource>>] : [params: RouteParamsByKey<TRoutes, TSource>, options?: RouterPushOptions<RouteStateByName<TRoutes, TSource>>];
28
36
  export type RouterPush<TRoutes extends Routes = any> = {
@@ -1,3 +1,4 @@
1
+ import { NavigationBehavior } from './navigation';
1
2
  import { Routes } from './route';
2
3
  import { RoutesName } from './routesMap';
3
4
  import { RouteParamsByKey } from './routeWithParams';
@@ -8,6 +9,8 @@ import { QuerySource } from './querySource';
8
9
  import { ResolvedRoute } from './resolved';
9
10
  export type RouterReplaceOptions<TState = unknown> = {
10
11
  query?: QuerySource;
12
+ /** Overrides the route and router navigation behavior. */
13
+ navigation?: NavigationBehavior;
11
14
  hash?: string;
12
15
  state?: Partial<TState>;
13
16
  };
@@ -9,6 +9,7 @@ export type UrlInternal = {
9
9
  [IS_URL_SYMBOL]: true;
10
10
  schema: Record<string, UrlPart>;
11
11
  params: {};
12
+ isMatch: (url: string, options?: ParseUrlOptions) => boolean;
12
13
  };
13
14
  export type CreateUrlOptions = {
14
15
  host?: string | UrlPart | undefined;