@tanstack/vue-router 0.0.1 → 1.140.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (268) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +66 -45
  3. package/dist/esm/Asset.d.ts +2 -0
  4. package/dist/esm/Asset.js +33 -0
  5. package/dist/esm/Asset.js.map +1 -0
  6. package/dist/esm/CatchBoundary.d.ts +19 -0
  7. package/dist/esm/CatchBoundary.js +135 -0
  8. package/dist/esm/CatchBoundary.js.map +1 -0
  9. package/dist/esm/ClientOnly.d.ts +67 -0
  10. package/dist/esm/HeadContent.d.ts +10 -0
  11. package/dist/esm/HeadContent.js +116 -0
  12. package/dist/esm/HeadContent.js.map +1 -0
  13. package/dist/esm/Match.d.ts +25 -0
  14. package/dist/esm/Match.js +262 -0
  15. package/dist/esm/Match.js.map +1 -0
  16. package/dist/esm/Matches.d.ts +39 -0
  17. package/dist/esm/Matches.js +186 -0
  18. package/dist/esm/Matches.js.map +1 -0
  19. package/dist/esm/RouterProvider.d.ts +33 -0
  20. package/dist/esm/RouterProvider.js +65 -0
  21. package/dist/esm/RouterProvider.js.map +1 -0
  22. package/dist/esm/SafeFragment.d.ts +4 -0
  23. package/dist/esm/ScriptOnce.d.ts +5 -0
  24. package/dist/esm/ScriptOnce.js +21 -0
  25. package/dist/esm/ScriptOnce.js.map +1 -0
  26. package/dist/esm/Scripts.d.ts +1 -0
  27. package/dist/esm/Scripts.js +46 -0
  28. package/dist/esm/Scripts.js.map +1 -0
  29. package/dist/esm/ScrollRestoration.d.ts +14 -0
  30. package/dist/esm/ScrollRestoration.js +36 -0
  31. package/dist/esm/ScrollRestoration.js.map +1 -0
  32. package/dist/esm/Transitioner.d.ts +2 -0
  33. package/dist/esm/Transitioner.js +154 -0
  34. package/dist/esm/Transitioner.js.map +1 -0
  35. package/dist/esm/awaited.d.ts +12 -0
  36. package/dist/esm/awaited.js +40 -0
  37. package/dist/esm/awaited.js.map +1 -0
  38. package/dist/esm/fileRoute.d.ts +54 -0
  39. package/dist/esm/fileRoute.js +103 -0
  40. package/dist/esm/fileRoute.js.map +1 -0
  41. package/dist/esm/history.d.ts +8 -0
  42. package/dist/esm/index.d.ts +51 -0
  43. package/dist/esm/index.js +138 -0
  44. package/dist/esm/index.js.map +1 -0
  45. package/dist/esm/lazyRouteComponent.d.ts +8 -0
  46. package/dist/esm/lazyRouteComponent.js +106 -0
  47. package/dist/esm/lazyRouteComponent.js.map +1 -0
  48. package/dist/esm/link.d.ts +61 -0
  49. package/dist/esm/link.js +376 -0
  50. package/dist/esm/link.js.map +1 -0
  51. package/dist/esm/matchContext.d.ts +20 -0
  52. package/dist/esm/matchContext.js +16 -0
  53. package/dist/esm/matchContext.js.map +1 -0
  54. package/dist/esm/not-found.d.ts +12 -0
  55. package/dist/esm/not-found.js +45 -0
  56. package/dist/esm/not-found.js.map +1 -0
  57. package/dist/esm/renderRouteNotFound.d.ts +11 -0
  58. package/dist/esm/renderRouteNotFound.js +19 -0
  59. package/dist/esm/renderRouteNotFound.js.map +1 -0
  60. package/dist/esm/route.d.ts +96 -0
  61. package/dist/esm/route.js +176 -0
  62. package/dist/esm/route.js.map +1 -0
  63. package/dist/esm/router.d.ts +69 -0
  64. package/dist/esm/router.js +14 -0
  65. package/dist/esm/router.js.map +1 -0
  66. package/dist/esm/routerContext.d.ts +21 -0
  67. package/dist/esm/routerContext.js +21 -0
  68. package/dist/esm/routerContext.js.map +1 -0
  69. package/dist/esm/scroll-restoration.d.ts +1 -0
  70. package/dist/esm/scroll-restoration.js +21 -0
  71. package/dist/esm/scroll-restoration.js.map +1 -0
  72. package/dist/esm/typePrimitives.d.ts +10 -0
  73. package/dist/esm/useBlocker.d.ts +66 -0
  74. package/dist/esm/useBlocker.js +295 -0
  75. package/dist/esm/useBlocker.js.map +1 -0
  76. package/dist/esm/useCanGoBack.d.ts +1 -0
  77. package/dist/esm/useCanGoBack.js +8 -0
  78. package/dist/esm/useCanGoBack.js.map +1 -0
  79. package/dist/esm/useLoaderData.d.ts +8 -0
  80. package/dist/esm/useLoaderData.js +14 -0
  81. package/dist/esm/useLoaderData.js.map +1 -0
  82. package/dist/esm/useLoaderDeps.d.ts +7 -0
  83. package/dist/esm/useLoaderDeps.js +17 -0
  84. package/dist/esm/useLoaderDeps.js.map +1 -0
  85. package/dist/esm/useLocation.d.ts +7 -0
  86. package/dist/esm/useLocation.js +10 -0
  87. package/dist/esm/useLocation.js.map +1 -0
  88. package/dist/esm/useMatch.d.ts +10 -0
  89. package/dist/esm/useMatch.js +39 -0
  90. package/dist/esm/useMatch.js.map +1 -0
  91. package/dist/esm/useNavigate.d.ts +5 -0
  92. package/dist/esm/useNavigate.js +29 -0
  93. package/dist/esm/useNavigate.js.map +1 -0
  94. package/dist/esm/useParams.d.ts +9 -0
  95. package/dist/esm/useParams.js +15 -0
  96. package/dist/esm/useParams.js.map +1 -0
  97. package/dist/esm/useRouteContext.d.ts +4 -0
  98. package/dist/esm/useRouteContext.js +11 -0
  99. package/dist/esm/useRouteContext.js.map +1 -0
  100. package/dist/esm/useRouter.d.ts +4 -0
  101. package/dist/esm/useRouter.js +12 -0
  102. package/dist/esm/useRouter.js.map +1 -0
  103. package/dist/esm/useRouterState.d.ts +8 -0
  104. package/dist/esm/useRouterState.js +20 -0
  105. package/dist/esm/useRouterState.js.map +1 -0
  106. package/dist/esm/useSearch.d.ts +9 -0
  107. package/dist/esm/useSearch.js +15 -0
  108. package/dist/esm/useSearch.js.map +1 -0
  109. package/dist/esm/utils.d.ts +40 -0
  110. package/dist/esm/utils.js +44 -0
  111. package/dist/esm/utils.js.map +1 -0
  112. package/dist/source/Asset.d.ts +2 -0
  113. package/dist/source/Asset.jsx +22 -0
  114. package/dist/source/Asset.jsx.map +1 -0
  115. package/dist/source/CatchBoundary.d.ts +19 -0
  116. package/dist/source/CatchBoundary.jsx +134 -0
  117. package/dist/source/CatchBoundary.jsx.map +1 -0
  118. package/dist/source/ClientOnly.d.ts +67 -0
  119. package/dist/source/ClientOnly.jsx +63 -0
  120. package/dist/source/ClientOnly.jsx.map +1 -0
  121. package/dist/source/HeadContent.d.ts +10 -0
  122. package/dist/source/HeadContent.jsx +133 -0
  123. package/dist/source/HeadContent.jsx.map +1 -0
  124. package/dist/source/Match.d.ts +25 -0
  125. package/dist/source/Match.jsx +316 -0
  126. package/dist/source/Match.jsx.map +1 -0
  127. package/dist/source/Matches.d.ts +39 -0
  128. package/dist/source/Matches.jsx +191 -0
  129. package/dist/source/Matches.jsx.map +1 -0
  130. package/dist/source/RouterProvider.d.ts +33 -0
  131. package/dist/source/RouterProvider.jsx +63 -0
  132. package/dist/source/RouterProvider.jsx.map +1 -0
  133. package/dist/source/SafeFragment.d.ts +4 -0
  134. package/dist/source/SafeFragment.jsx +10 -0
  135. package/dist/source/SafeFragment.jsx.map +1 -0
  136. package/dist/source/ScriptOnce.d.ts +5 -0
  137. package/dist/source/ScriptOnce.jsx +17 -0
  138. package/dist/source/ScriptOnce.jsx.map +1 -0
  139. package/dist/source/Scripts.d.ts +1 -0
  140. package/dist/source/Scripts.jsx +49 -0
  141. package/dist/source/Scripts.jsx.map +1 -0
  142. package/dist/source/ScrollRestoration.d.ts +14 -0
  143. package/dist/source/ScrollRestoration.jsx +37 -0
  144. package/dist/source/ScrollRestoration.jsx.map +1 -0
  145. package/dist/source/Transitioner.d.ts +2 -0
  146. package/dist/source/Transitioner.jsx +181 -0
  147. package/dist/source/Transitioner.jsx.map +1 -0
  148. package/dist/source/awaited.d.ts +12 -0
  149. package/dist/source/awaited.jsx +38 -0
  150. package/dist/source/awaited.jsx.map +1 -0
  151. package/dist/source/fileRoute.d.ts +54 -0
  152. package/dist/source/fileRoute.js +98 -0
  153. package/dist/source/fileRoute.js.map +1 -0
  154. package/dist/source/history.d.ts +8 -0
  155. package/dist/source/history.js +2 -0
  156. package/dist/source/history.js.map +1 -0
  157. package/dist/source/index.d.ts +51 -0
  158. package/dist/source/index.jsx +40 -0
  159. package/dist/source/index.jsx.map +1 -0
  160. package/dist/source/lazyRouteComponent.d.ts +8 -0
  161. package/dist/source/lazyRouteComponent.jsx +135 -0
  162. package/dist/source/lazyRouteComponent.jsx.map +1 -0
  163. package/dist/source/link.d.ts +61 -0
  164. package/dist/source/link.jsx +495 -0
  165. package/dist/source/link.jsx.map +1 -0
  166. package/dist/source/matchContext.d.ts +20 -0
  167. package/dist/source/matchContext.jsx +32 -0
  168. package/dist/source/matchContext.jsx.map +1 -0
  169. package/dist/source/not-found.d.ts +12 -0
  170. package/dist/source/not-found.jsx +48 -0
  171. package/dist/source/not-found.jsx.map +1 -0
  172. package/dist/source/renderRouteNotFound.d.ts +11 -0
  173. package/dist/source/renderRouteNotFound.jsx +24 -0
  174. package/dist/source/renderRouteNotFound.jsx.map +1 -0
  175. package/dist/source/route.d.ts +97 -0
  176. package/dist/source/route.js +167 -0
  177. package/dist/source/route.js.map +1 -0
  178. package/dist/source/router.d.ts +70 -0
  179. package/dist/source/router.js +10 -0
  180. package/dist/source/router.js.map +1 -0
  181. package/dist/source/routerContext.d.ts +21 -0
  182. package/dist/source/routerContext.jsx +37 -0
  183. package/dist/source/routerContext.jsx.map +1 -0
  184. package/dist/source/scroll-restoration.d.ts +1 -0
  185. package/dist/source/scroll-restoration.jsx +16 -0
  186. package/dist/source/scroll-restoration.jsx.map +1 -0
  187. package/dist/source/typePrimitives.d.ts +10 -0
  188. package/dist/source/typePrimitives.js +2 -0
  189. package/dist/source/typePrimitives.js.map +1 -0
  190. package/dist/source/useBlocker.d.ts +66 -0
  191. package/dist/source/useBlocker.jsx +308 -0
  192. package/dist/source/useBlocker.jsx.map +1 -0
  193. package/dist/source/useCanGoBack.d.ts +1 -0
  194. package/dist/source/useCanGoBack.js +5 -0
  195. package/dist/source/useCanGoBack.js.map +1 -0
  196. package/dist/source/useLoaderData.d.ts +8 -0
  197. package/dist/source/useLoaderData.jsx +11 -0
  198. package/dist/source/useLoaderData.jsx.map +1 -0
  199. package/dist/source/useLoaderDeps.d.ts +7 -0
  200. package/dist/source/useLoaderDeps.jsx +11 -0
  201. package/dist/source/useLoaderDeps.jsx.map +1 -0
  202. package/dist/source/useLocation.d.ts +7 -0
  203. package/dist/source/useLocation.jsx +7 -0
  204. package/dist/source/useLocation.jsx.map +1 -0
  205. package/dist/source/useMatch.d.ts +10 -0
  206. package/dist/source/useMatch.jsx +46 -0
  207. package/dist/source/useMatch.jsx.map +1 -0
  208. package/dist/source/useNavigate.d.ts +5 -0
  209. package/dist/source/useNavigate.jsx +18 -0
  210. package/dist/source/useNavigate.jsx.map +1 -0
  211. package/dist/source/useParams.d.ts +9 -0
  212. package/dist/source/useParams.jsx +12 -0
  213. package/dist/source/useParams.jsx.map +1 -0
  214. package/dist/source/useRouteContext.d.ts +4 -0
  215. package/dist/source/useRouteContext.js +8 -0
  216. package/dist/source/useRouteContext.js.map +1 -0
  217. package/dist/source/useRouter.d.ts +4 -0
  218. package/dist/source/useRouter.jsx +9 -0
  219. package/dist/source/useRouter.jsx.map +1 -0
  220. package/dist/source/useRouterState.d.ts +8 -0
  221. package/dist/source/useRouterState.jsx +19 -0
  222. package/dist/source/useRouterState.jsx.map +1 -0
  223. package/dist/source/useSearch.d.ts +9 -0
  224. package/dist/source/useSearch.jsx +12 -0
  225. package/dist/source/useSearch.jsx.map +1 -0
  226. package/dist/source/utils.d.ts +40 -0
  227. package/dist/source/utils.js +78 -0
  228. package/dist/source/utils.js.map +1 -0
  229. package/package.json +77 -7
  230. package/src/Asset.tsx +23 -0
  231. package/src/CatchBoundary.tsx +186 -0
  232. package/src/ClientOnly.tsx +75 -0
  233. package/src/HeadContent.tsx +159 -0
  234. package/src/Match.tsx +415 -0
  235. package/src/Matches.tsx +349 -0
  236. package/src/RouterProvider.tsx +117 -0
  237. package/src/SafeFragment.tsx +10 -0
  238. package/src/ScriptOnce.tsx +30 -0
  239. package/src/Scripts.tsx +65 -0
  240. package/src/ScrollRestoration.tsx +69 -0
  241. package/src/Transitioner.tsx +213 -0
  242. package/src/awaited.tsx +54 -0
  243. package/src/fileRoute.ts +271 -0
  244. package/src/history.ts +9 -0
  245. package/src/index.tsx +346 -0
  246. package/src/lazyRouteComponent.tsx +173 -0
  247. package/src/link.tsx +765 -0
  248. package/src/matchContext.tsx +41 -0
  249. package/src/not-found.tsx +55 -0
  250. package/src/renderRouteNotFound.tsx +35 -0
  251. package/src/route.ts +658 -0
  252. package/src/router.ts +103 -0
  253. package/src/routerContext.tsx +53 -0
  254. package/src/scroll-restoration.tsx +29 -0
  255. package/src/typePrimitives.ts +74 -0
  256. package/src/useBlocker.tsx +501 -0
  257. package/src/useCanGoBack.ts +5 -0
  258. package/src/useLoaderData.tsx +50 -0
  259. package/src/useLoaderDeps.tsx +46 -0
  260. package/src/useLocation.tsx +30 -0
  261. package/src/useMatch.tsx +127 -0
  262. package/src/useNavigate.tsx +40 -0
  263. package/src/useParams.tsx +71 -0
  264. package/src/useRouteContext.ts +31 -0
  265. package/src/useRouter.tsx +15 -0
  266. package/src/useRouterState.tsx +43 -0
  267. package/src/useSearch.tsx +71 -0
  268. package/src/utils.ts +111 -0
@@ -0,0 +1,295 @@
1
+ import * as Vue from "vue";
2
+ import { useRouter } from "./useRouter.js";
3
+ function _resolveBlockerOpts(opts, condition) {
4
+ if (opts === void 0) {
5
+ return {
6
+ shouldBlockFn: () => true,
7
+ withResolver: false
8
+ };
9
+ }
10
+ if ("shouldBlockFn" in opts) {
11
+ return opts;
12
+ }
13
+ if (typeof opts === "function") {
14
+ const shouldBlock2 = Boolean(condition ?? true);
15
+ const _customBlockerFn2 = async () => {
16
+ if (shouldBlock2) return await opts();
17
+ return false;
18
+ };
19
+ return {
20
+ shouldBlockFn: _customBlockerFn2,
21
+ enableBeforeUnload: shouldBlock2,
22
+ withResolver: false
23
+ };
24
+ }
25
+ const shouldBlock = Boolean(opts.condition ?? true);
26
+ const fn = opts.blockerFn;
27
+ const _customBlockerFn = async () => {
28
+ if (shouldBlock && fn !== void 0) {
29
+ return await fn();
30
+ }
31
+ return shouldBlock;
32
+ };
33
+ return {
34
+ shouldBlockFn: _customBlockerFn,
35
+ enableBeforeUnload: shouldBlock,
36
+ withResolver: fn === void 0
37
+ };
38
+ }
39
+ function useBlocker(opts, condition) {
40
+ const {
41
+ shouldBlockFn,
42
+ enableBeforeUnload = true,
43
+ disabled = false,
44
+ withResolver = false
45
+ } = _resolveBlockerOpts(opts, condition);
46
+ const router = useRouter();
47
+ const {
48
+ history
49
+ } = router;
50
+ const resolver = Vue.ref({
51
+ status: "idle",
52
+ current: void 0,
53
+ next: void 0,
54
+ action: void 0,
55
+ proceed: void 0,
56
+ reset: void 0
57
+ });
58
+ Vue.watchEffect((onCleanup) => {
59
+ const blockerFnComposed = async (blockerFnArgs) => {
60
+ function getLocation(location) {
61
+ const parsedLocation = router.parseLocation(location);
62
+ const matchedRoutes = router.getMatchedRoutes(parsedLocation.pathname);
63
+ if (matchedRoutes.foundRoute === void 0) {
64
+ return {
65
+ routeId: "__notFound__",
66
+ fullPath: parsedLocation.pathname,
67
+ pathname: parsedLocation.pathname,
68
+ params: matchedRoutes.routeParams,
69
+ search: parsedLocation.search
70
+ };
71
+ }
72
+ return {
73
+ routeId: matchedRoutes.foundRoute.id,
74
+ fullPath: matchedRoutes.foundRoute.fullPath,
75
+ pathname: parsedLocation.pathname,
76
+ params: matchedRoutes.routeParams,
77
+ search: parsedLocation.search
78
+ };
79
+ }
80
+ const current = getLocation(blockerFnArgs.currentLocation);
81
+ const next = getLocation(blockerFnArgs.nextLocation);
82
+ if (current.routeId === "__notFound__" && next.routeId !== "__notFound__") {
83
+ return false;
84
+ }
85
+ const shouldBlock = await shouldBlockFn({
86
+ action: blockerFnArgs.action,
87
+ current,
88
+ next
89
+ });
90
+ if (!withResolver) {
91
+ return shouldBlock;
92
+ }
93
+ if (!shouldBlock) {
94
+ return false;
95
+ }
96
+ const promise = new Promise((resolve) => {
97
+ resolver.value = {
98
+ status: "blocked",
99
+ current,
100
+ next,
101
+ action: blockerFnArgs.action,
102
+ proceed: () => resolve(false),
103
+ reset: () => resolve(true)
104
+ };
105
+ });
106
+ const canNavigateAsync = await promise;
107
+ resolver.value = {
108
+ status: "idle",
109
+ current: void 0,
110
+ next: void 0,
111
+ action: void 0,
112
+ proceed: void 0,
113
+ reset: void 0
114
+ };
115
+ return canNavigateAsync;
116
+ };
117
+ if (disabled) {
118
+ return;
119
+ }
120
+ const unsubscribe = history.block({
121
+ blockerFn: blockerFnComposed,
122
+ enableBeforeUnload
123
+ });
124
+ onCleanup(() => {
125
+ if (unsubscribe) unsubscribe();
126
+ });
127
+ });
128
+ return withResolver ? resolver : void 0;
129
+ }
130
+ const BlockImpl = Vue.defineComponent({
131
+ name: "Block",
132
+ props: {
133
+ shouldBlockFn: {
134
+ type: Function,
135
+ required: false
136
+ },
137
+ enableBeforeUnload: {
138
+ type: [Boolean, Function],
139
+ default: true
140
+ },
141
+ disabled: {
142
+ type: Boolean,
143
+ default: false
144
+ },
145
+ withResolver: {
146
+ type: Boolean,
147
+ default: false
148
+ },
149
+ // Legacy props
150
+ blockerFn: {
151
+ type: Function,
152
+ required: false
153
+ },
154
+ condition: {
155
+ type: [Boolean, Object],
156
+ required: false
157
+ }
158
+ },
159
+ setup(props, {
160
+ slots
161
+ }) {
162
+ const blockerArgs = Vue.computed(() => {
163
+ if (props.shouldBlockFn) {
164
+ return {
165
+ shouldBlockFn: props.shouldBlockFn,
166
+ enableBeforeUnload: props.enableBeforeUnload,
167
+ disabled: props.disabled,
168
+ withResolver: props.withResolver
169
+ };
170
+ }
171
+ const shouldBlock = Boolean(props.condition ?? true);
172
+ const fn = props.blockerFn;
173
+ const _customBlockerFn = async () => {
174
+ if (shouldBlock && fn !== void 0) {
175
+ return await fn();
176
+ }
177
+ return shouldBlock;
178
+ };
179
+ return {
180
+ shouldBlockFn: _customBlockerFn,
181
+ enableBeforeUnload: shouldBlock,
182
+ disabled: props.disabled,
183
+ withResolver: fn === void 0
184
+ };
185
+ });
186
+ const router = useRouter();
187
+ const {
188
+ history
189
+ } = router;
190
+ const resolver = Vue.ref({
191
+ status: "idle",
192
+ current: void 0,
193
+ next: void 0,
194
+ action: void 0,
195
+ proceed: void 0,
196
+ reset: void 0
197
+ });
198
+ Vue.watchEffect((onCleanup) => {
199
+ const args = blockerArgs.value;
200
+ if (args.disabled) {
201
+ return;
202
+ }
203
+ const blockerFnComposed = async (blockerFnArgs) => {
204
+ function getLocation(location) {
205
+ const parsedLocation = router.parseLocation(location);
206
+ const matchedRoutes = router.getMatchedRoutes(parsedLocation.pathname);
207
+ if (matchedRoutes.foundRoute === void 0) {
208
+ return {
209
+ routeId: "__notFound__",
210
+ fullPath: parsedLocation.pathname,
211
+ pathname: parsedLocation.pathname,
212
+ params: matchedRoutes.routeParams,
213
+ search: parsedLocation.search
214
+ };
215
+ }
216
+ return {
217
+ routeId: matchedRoutes.foundRoute.id,
218
+ fullPath: matchedRoutes.foundRoute.fullPath,
219
+ pathname: parsedLocation.pathname,
220
+ params: matchedRoutes.routeParams,
221
+ search: parsedLocation.search
222
+ };
223
+ }
224
+ const current = getLocation(blockerFnArgs.currentLocation);
225
+ const next = getLocation(blockerFnArgs.nextLocation);
226
+ if (current.routeId === "__notFound__" && next.routeId !== "__notFound__") {
227
+ return false;
228
+ }
229
+ const shouldBlock = await args.shouldBlockFn({
230
+ action: blockerFnArgs.action,
231
+ current,
232
+ next
233
+ });
234
+ if (!args.withResolver) {
235
+ return shouldBlock;
236
+ }
237
+ if (!shouldBlock) {
238
+ return false;
239
+ }
240
+ const promise = new Promise((resolve) => {
241
+ resolver.value = {
242
+ status: "blocked",
243
+ current,
244
+ next,
245
+ action: blockerFnArgs.action,
246
+ proceed: () => resolve(false),
247
+ reset: () => resolve(true)
248
+ };
249
+ });
250
+ const canNavigateAsync = await promise;
251
+ resolver.value = {
252
+ status: "idle",
253
+ current: void 0,
254
+ next: void 0,
255
+ action: void 0,
256
+ proceed: void 0,
257
+ reset: void 0
258
+ };
259
+ return canNavigateAsync;
260
+ };
261
+ const unsubscribe = history.block({
262
+ blockerFn: blockerFnComposed,
263
+ enableBeforeUnload: args.enableBeforeUnload
264
+ });
265
+ onCleanup(() => {
266
+ if (unsubscribe) unsubscribe();
267
+ });
268
+ });
269
+ return () => {
270
+ const defaultSlot = slots.default;
271
+ if (!defaultSlot) {
272
+ return Vue.h(Vue.Fragment, null);
273
+ }
274
+ const slotContent = defaultSlot(resolver.value);
275
+ return Vue.h(Vue.Fragment, null, slotContent);
276
+ };
277
+ }
278
+ });
279
+ function Block(opts) {
280
+ const {
281
+ children,
282
+ ...rest
283
+ } = opts;
284
+ const slots = children ? typeof children === "function" ? {
285
+ default: children
286
+ } : {
287
+ default: () => children
288
+ } : void 0;
289
+ return Vue.h(BlockImpl, rest, slots);
290
+ }
291
+ export {
292
+ Block,
293
+ useBlocker
294
+ };
295
+ //# sourceMappingURL=useBlocker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useBlocker.js","sources":["../../src/useBlocker.tsx"],"sourcesContent":["import * as Vue from 'vue'\nimport { useRouter } from './useRouter'\nimport type {\n BlockerFnArgs,\n HistoryAction,\n HistoryLocation,\n} from '@tanstack/history'\nimport type {\n AnyRoute,\n AnyRouter,\n ParseRoute,\n RegisteredRouter,\n} from '@tanstack/router-core'\n\ninterface ShouldBlockFnLocation<\n out TRouteId,\n out TFullPath,\n out TAllParams,\n out TFullSearchSchema,\n> {\n routeId: TRouteId\n fullPath: TFullPath\n pathname: string\n params: TAllParams\n search: TFullSearchSchema\n}\n\ntype AnyShouldBlockFnLocation = ShouldBlockFnLocation<any, any, any, any>\ntype MakeShouldBlockFnLocationUnion<\n TRouter extends AnyRouter = RegisteredRouter,\n TRoute extends AnyRoute = ParseRoute<TRouter['routeTree']>,\n> = TRoute extends any\n ? ShouldBlockFnLocation<\n TRoute['id'],\n TRoute['fullPath'],\n TRoute['types']['allParams'],\n TRoute['types']['fullSearchSchema']\n >\n : never\n\ntype BlockerResolver<TRouter extends AnyRouter = RegisteredRouter> =\n | {\n status: 'blocked'\n current: MakeShouldBlockFnLocationUnion<TRouter>\n next: MakeShouldBlockFnLocationUnion<TRouter>\n action: HistoryAction\n proceed: () => void\n reset: () => void\n }\n | {\n status: 'idle'\n current: undefined\n next: undefined\n action: undefined\n proceed: undefined\n reset: undefined\n }\n\ntype ShouldBlockFnArgs<TRouter extends AnyRouter = RegisteredRouter> = {\n current: MakeShouldBlockFnLocationUnion<TRouter>\n next: MakeShouldBlockFnLocationUnion<TRouter>\n action: HistoryAction\n}\n\nexport type ShouldBlockFn<TRouter extends AnyRouter = RegisteredRouter> = (\n args: ShouldBlockFnArgs<TRouter>,\n) => boolean | Promise<boolean>\nexport type UseBlockerOpts<\n TRouter extends AnyRouter = RegisteredRouter,\n TWithResolver extends boolean = boolean,\n> = {\n shouldBlockFn: ShouldBlockFn<TRouter>\n enableBeforeUnload?: boolean | (() => boolean)\n disabled?: boolean\n withResolver?: TWithResolver\n}\n\ntype LegacyBlockerFn = () => Promise<any> | any\ntype LegacyBlockerOpts = {\n blockerFn?: LegacyBlockerFn\n condition?: boolean | any\n}\n\nfunction _resolveBlockerOpts(\n opts?: UseBlockerOpts | LegacyBlockerOpts | LegacyBlockerFn,\n condition?: boolean | any,\n): UseBlockerOpts {\n if (opts === undefined) {\n return {\n shouldBlockFn: () => true,\n withResolver: false,\n }\n }\n\n if ('shouldBlockFn' in opts) {\n return opts\n }\n\n if (typeof opts === 'function') {\n const shouldBlock = Boolean(condition ?? true)\n\n const _customBlockerFn = async () => {\n if (shouldBlock) return await opts()\n return false\n }\n\n return {\n shouldBlockFn: _customBlockerFn,\n enableBeforeUnload: shouldBlock,\n withResolver: false,\n }\n }\n\n const shouldBlock = Boolean(opts.condition ?? true)\n const fn = opts.blockerFn\n\n const _customBlockerFn = async () => {\n if (shouldBlock && fn !== undefined) {\n return await fn()\n }\n return shouldBlock\n }\n\n return {\n shouldBlockFn: _customBlockerFn,\n enableBeforeUnload: shouldBlock,\n withResolver: fn === undefined,\n }\n}\n\nexport function useBlocker<\n TRouter extends AnyRouter = RegisteredRouter,\n TWithResolver extends boolean = false,\n>(\n opts: UseBlockerOpts<TRouter, TWithResolver>,\n): TWithResolver extends true ? Vue.Ref<BlockerResolver<TRouter>> : void\n\n/**\n * @deprecated Use the shouldBlockFn property instead\n */\nexport function useBlocker(\n blockerFnOrOpts?: LegacyBlockerOpts,\n): Vue.Ref<BlockerResolver>\n\n/**\n * @deprecated Use the UseBlockerOpts object syntax instead\n */\nexport function useBlocker(\n blockerFn?: LegacyBlockerFn,\n condition?: boolean | any,\n): Vue.Ref<BlockerResolver>\n\nexport function useBlocker(\n opts?: UseBlockerOpts | LegacyBlockerOpts | LegacyBlockerFn,\n condition?: boolean | any,\n): Vue.Ref<BlockerResolver> | void {\n const {\n shouldBlockFn,\n enableBeforeUnload = true,\n disabled = false,\n withResolver = false,\n } = _resolveBlockerOpts(opts, condition)\n\n const router = useRouter()\n const { history } = router\n\n const resolver = Vue.ref<BlockerResolver>({\n status: 'idle',\n current: undefined,\n next: undefined,\n action: undefined,\n proceed: undefined,\n reset: undefined,\n })\n\n Vue.watchEffect((onCleanup) => {\n const blockerFnComposed = async (blockerFnArgs: BlockerFnArgs) => {\n function getLocation(\n location: HistoryLocation,\n ): AnyShouldBlockFnLocation {\n const parsedLocation = router.parseLocation(location)\n const matchedRoutes = router.getMatchedRoutes(parsedLocation.pathname)\n if (matchedRoutes.foundRoute === undefined) {\n return {\n routeId: '__notFound__',\n fullPath: parsedLocation.pathname,\n pathname: parsedLocation.pathname,\n params: matchedRoutes.routeParams,\n search: parsedLocation.search,\n }\n }\n return {\n routeId: matchedRoutes.foundRoute.id,\n fullPath: matchedRoutes.foundRoute.fullPath,\n pathname: parsedLocation.pathname,\n params: matchedRoutes.routeParams,\n search: parsedLocation.search,\n }\n }\n\n const current = getLocation(blockerFnArgs.currentLocation)\n const next = getLocation(blockerFnArgs.nextLocation)\n\n // Allow navigation away from 404 pages to valid routes\n if (\n current.routeId === '__notFound__' &&\n next.routeId !== '__notFound__'\n ) {\n return false\n }\n\n const shouldBlock = await shouldBlockFn({\n action: blockerFnArgs.action,\n current,\n next,\n })\n if (!withResolver) {\n return shouldBlock\n }\n\n if (!shouldBlock) {\n return false\n }\n\n const promise = new Promise<boolean>((resolve) => {\n resolver.value = {\n status: 'blocked',\n current,\n next,\n action: blockerFnArgs.action,\n proceed: () => resolve(false),\n reset: () => resolve(true),\n }\n })\n\n const canNavigateAsync = await promise\n resolver.value = {\n status: 'idle',\n current: undefined,\n next: undefined,\n action: undefined,\n proceed: undefined,\n reset: undefined,\n }\n\n return canNavigateAsync\n }\n\n if (disabled) {\n return\n }\n\n const unsubscribe = history.block({\n blockerFn: blockerFnComposed,\n enableBeforeUnload,\n })\n\n onCleanup(() => {\n if (unsubscribe) unsubscribe()\n })\n })\n\n return withResolver ? resolver : undefined\n}\n\nconst _resolvePromptBlockerArgs = (\n props: PromptProps | LegacyPromptProps,\n): UseBlockerOpts => {\n if ('shouldBlockFn' in props) {\n return { ...props }\n }\n\n const shouldBlock = Boolean(props.condition ?? true)\n const fn = props.blockerFn\n\n const _customBlockerFn = async () => {\n if (shouldBlock && fn !== undefined) {\n return await fn()\n }\n return shouldBlock\n }\n\n return {\n shouldBlockFn: _customBlockerFn,\n enableBeforeUnload: shouldBlock,\n withResolver: fn === undefined,\n }\n}\n\n// Internal Block implementation as a proper Vue component for reactivity\nconst BlockImpl = Vue.defineComponent({\n name: 'Block',\n props: {\n shouldBlockFn: {\n type: Function as Vue.PropType<ShouldBlockFn<any>>,\n required: false,\n },\n enableBeforeUnload: {\n type: [Boolean, Function] as Vue.PropType<boolean | (() => boolean)>,\n default: true,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n withResolver: {\n type: Boolean,\n default: false,\n },\n // Legacy props\n blockerFn: {\n type: Function as Vue.PropType<LegacyBlockerFn>,\n required: false,\n },\n condition: {\n type: [Boolean, Object] as Vue.PropType<boolean | any>,\n required: false,\n },\n },\n setup(props, { slots }) {\n // Create a computed that resolves the blocker args reactively\n const blockerArgs = Vue.computed<UseBlockerOpts>(() => {\n if (props.shouldBlockFn) {\n return {\n shouldBlockFn: props.shouldBlockFn,\n enableBeforeUnload: props.enableBeforeUnload,\n disabled: props.disabled,\n withResolver: props.withResolver,\n }\n }\n\n // Legacy handling\n const shouldBlock = Boolean(props.condition ?? true)\n const fn = props.blockerFn\n\n const _customBlockerFn = async () => {\n if (shouldBlock && fn !== undefined) {\n return await fn()\n }\n return shouldBlock\n }\n\n return {\n shouldBlockFn: _customBlockerFn,\n enableBeforeUnload: shouldBlock,\n disabled: props.disabled,\n withResolver: fn === undefined,\n }\n })\n\n // Use a reactive useBlocker that re-subscribes when args change\n const router = useRouter()\n const { history } = router\n\n const resolver = Vue.ref<BlockerResolver>({\n status: 'idle',\n current: undefined,\n next: undefined,\n action: undefined,\n proceed: undefined,\n reset: undefined,\n })\n\n Vue.watchEffect((onCleanup) => {\n const args = blockerArgs.value\n\n if (args.disabled) {\n return\n }\n\n const blockerFnComposed = async (blockerFnArgs: BlockerFnArgs) => {\n function getLocation(\n location: HistoryLocation,\n ): AnyShouldBlockFnLocation {\n const parsedLocation = router.parseLocation(location)\n const matchedRoutes = router.getMatchedRoutes(parsedLocation.pathname)\n if (matchedRoutes.foundRoute === undefined) {\n return {\n routeId: '__notFound__',\n fullPath: parsedLocation.pathname,\n pathname: parsedLocation.pathname,\n params: matchedRoutes.routeParams,\n search: parsedLocation.search,\n }\n }\n return {\n routeId: matchedRoutes.foundRoute.id,\n fullPath: matchedRoutes.foundRoute.fullPath,\n pathname: parsedLocation.pathname,\n params: matchedRoutes.routeParams,\n search: parsedLocation.search,\n }\n }\n\n const current = getLocation(blockerFnArgs.currentLocation)\n const next = getLocation(blockerFnArgs.nextLocation)\n\n // Allow navigation away from 404 pages to valid routes\n if (\n current.routeId === '__notFound__' &&\n next.routeId !== '__notFound__'\n ) {\n return false\n }\n\n const shouldBlock = await args.shouldBlockFn({\n action: blockerFnArgs.action,\n current,\n next,\n })\n if (!args.withResolver) {\n return shouldBlock\n }\n\n if (!shouldBlock) {\n return false\n }\n\n const promise = new Promise<boolean>((resolve) => {\n resolver.value = {\n status: 'blocked',\n current,\n next,\n action: blockerFnArgs.action,\n proceed: () => resolve(false),\n reset: () => resolve(true),\n }\n })\n\n const canNavigateAsync = await promise\n resolver.value = {\n status: 'idle',\n current: undefined,\n next: undefined,\n action: undefined,\n proceed: undefined,\n reset: undefined,\n }\n\n return canNavigateAsync\n }\n\n const unsubscribe = history.block({\n blockerFn: blockerFnComposed,\n enableBeforeUnload: args.enableBeforeUnload,\n })\n\n onCleanup(() => {\n if (unsubscribe) unsubscribe()\n })\n })\n\n return () => {\n const defaultSlot = slots.default\n if (!defaultSlot) {\n return Vue.h(Vue.Fragment, null)\n }\n\n // If slot is a function that takes resolver, call it with the resolver\n const slotContent = defaultSlot(resolver.value as any)\n return Vue.h(Vue.Fragment, null, slotContent)\n }\n },\n})\n\nexport function Block<\n TRouter extends AnyRouter = RegisteredRouter,\n TWithResolver extends boolean = boolean,\n>(opts: PromptProps<TRouter, TWithResolver>): Vue.VNode\n\n/**\n * @deprecated Use the UseBlockerOpts property instead\n */\nexport function Block(opts: LegacyPromptProps): Vue.VNode\n\nexport function Block(opts: PromptProps | LegacyPromptProps): Vue.VNode {\n const { children, ...rest } = opts\n\n // Convert children to slot format for the component\n const slots = children\n ? typeof children === 'function'\n ? { default: children }\n : { default: () => children }\n : undefined\n\n return Vue.h(BlockImpl, rest as any, slots)\n}\n\ntype LegacyPromptProps = {\n blockerFn?: LegacyBlockerFn\n condition?: boolean | any\n children?: Vue.VNode | ((params: BlockerResolver) => Vue.VNode)\n}\n\ntype PromptProps<\n TRouter extends AnyRouter = RegisteredRouter,\n TWithResolver extends boolean = boolean,\n TParams = TWithResolver extends true ? BlockerResolver<TRouter> : void,\n> = UseBlockerOpts<TRouter, TWithResolver> & {\n children?: Vue.VNode | ((params: TParams) => Vue.VNode)\n}\n"],"names":["_resolveBlockerOpts","opts","condition","undefined","shouldBlockFn","withResolver","shouldBlock","Boolean","_customBlockerFn","enableBeforeUnload","fn","blockerFn","useBlocker","disabled","router","useRouter","history","resolver","Vue","ref","status","current","next","action","proceed","reset","watchEffect","onCleanup","blockerFnComposed","blockerFnArgs","getLocation","location","parsedLocation","parseLocation","matchedRoutes","getMatchedRoutes","pathname","foundRoute","routeId","fullPath","params","routeParams","search","id","currentLocation","nextLocation","promise","Promise","resolve","value","canNavigateAsync","unsubscribe","block","BlockImpl","defineComponent","name","props","type","Function","required","default","Object","setup","slots","blockerArgs","computed","args","defaultSlot","h","Fragment","slotContent","Block","children","rest"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function useCanGoBack(): import('vue').Ref<boolean, boolean>;
@@ -0,0 +1,8 @@
1
+ import { useRouterState } from "./useRouterState.js";
2
+ function useCanGoBack() {
3
+ return useRouterState({ select: (s) => s.location.state.__TSR_index !== 0 });
4
+ }
5
+ export {
6
+ useCanGoBack
7
+ };
8
+ //# sourceMappingURL=useCanGoBack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCanGoBack.js","sources":["../../src/useCanGoBack.ts"],"sourcesContent":["import { useRouterState } from './useRouterState'\n\nexport function useCanGoBack() {\n return useRouterState({ select: (s) => s.location.state.__TSR_index !== 0 })\n}\n"],"names":[],"mappings":";AAEO,SAAS,eAAe;AAC7B,SAAO,eAAe,EAAE,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,gBAAgB,GAAG;AAC7E;"}
@@ -0,0 +1,8 @@
1
+ import { AnyRouter, RegisteredRouter, ResolveUseLoaderData, StrictOrFrom, UseLoaderDataResult } from '@tanstack/router-core';
2
+ import type * as Vue from 'vue';
3
+ export interface UseLoaderDataBaseOptions<TRouter extends AnyRouter, TFrom, TStrict extends boolean, TSelected> {
4
+ select?: (match: ResolveUseLoaderData<TRouter, TFrom, TStrict>) => TSelected;
5
+ }
6
+ export type UseLoaderDataOptions<TRouter extends AnyRouter, TFrom extends string | undefined, TStrict extends boolean, TSelected> = StrictOrFrom<TRouter, TFrom, TStrict> & UseLoaderDataBaseOptions<TRouter, TFrom, TStrict, TSelected>;
7
+ export type UseLoaderDataRoute<out TId> = <TRouter extends AnyRouter = RegisteredRouter, TSelected = unknown>(opts?: UseLoaderDataBaseOptions<TRouter, TId, true, TSelected>) => Vue.Ref<UseLoaderDataResult<TRouter, TId, true, TSelected>>;
8
+ export declare function useLoaderData<TRouter extends AnyRouter = RegisteredRouter, const TFrom extends string | undefined = undefined, TStrict extends boolean = true, TSelected = unknown>(opts: UseLoaderDataOptions<TRouter, TFrom, TStrict, TSelected>): Vue.Ref<UseLoaderDataResult<TRouter, TFrom, TStrict, TSelected>>;
@@ -0,0 +1,14 @@
1
+ import { useMatch } from "./useMatch.js";
2
+ function useLoaderData(opts) {
3
+ return useMatch({
4
+ from: opts.from,
5
+ strict: opts.strict,
6
+ select: (s) => {
7
+ return opts.select ? opts.select(s.loaderData) : s.loaderData;
8
+ }
9
+ });
10
+ }
11
+ export {
12
+ useLoaderData
13
+ };
14
+ //# sourceMappingURL=useLoaderData.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useLoaderData.js","sources":["../../src/useLoaderData.tsx"],"sourcesContent":["import { useMatch } from './useMatch'\nimport type * as Vue from 'vue'\nimport type {\n AnyRouter,\n RegisteredRouter,\n ResolveUseLoaderData,\n StrictOrFrom,\n UseLoaderDataResult,\n} from '@tanstack/router-core'\n\nexport interface UseLoaderDataBaseOptions<\n TRouter extends AnyRouter,\n TFrom,\n TStrict extends boolean,\n TSelected,\n> {\n select?: (match: ResolveUseLoaderData<TRouter, TFrom, TStrict>) => TSelected\n}\n\nexport type UseLoaderDataOptions<\n TRouter extends AnyRouter,\n TFrom extends string | undefined,\n TStrict extends boolean,\n TSelected,\n> = StrictOrFrom<TRouter, TFrom, TStrict> &\n UseLoaderDataBaseOptions<TRouter, TFrom, TStrict, TSelected>\n\nexport type UseLoaderDataRoute<out TId> = <\n TRouter extends AnyRouter = RegisteredRouter,\n TSelected = unknown,\n>(\n opts?: UseLoaderDataBaseOptions<TRouter, TId, true, TSelected>,\n) => Vue.Ref<UseLoaderDataResult<TRouter, TId, true, TSelected>>\n\nexport function useLoaderData<\n TRouter extends AnyRouter = RegisteredRouter,\n const TFrom extends string | undefined = undefined,\n TStrict extends boolean = true,\n TSelected = unknown,\n>(\n opts: UseLoaderDataOptions<TRouter, TFrom, TStrict, TSelected>,\n): Vue.Ref<UseLoaderDataResult<TRouter, TFrom, TStrict, TSelected>> {\n return useMatch({\n from: opts.from!,\n strict: opts.strict,\n select: (s: any) => {\n return opts.select ? opts.select(s.loaderData) : s.loaderData\n },\n } as any) as any\n}\n"],"names":["useLoaderData","opts","useMatch","from","strict","select","s","loaderData"],"mappings":";AAkCO,SAASA,cAMdC,MACkE;AAClE,SAAOC,SAAS;AAAA,IACdC,MAAMF,KAAKE;AAAAA,IACXC,QAAQH,KAAKG;AAAAA,IACbC,QAASC,OAAW;AAClB,aAAOL,KAAKI,SAASJ,KAAKI,OAAOC,EAAEC,UAAU,IAAID,EAAEC;AAAAA,IACrD;AAAA,EACF,CAAQ;AACV;"}
@@ -0,0 +1,7 @@
1
+ import { AnyRouter, RegisteredRouter, ResolveUseLoaderDeps, StrictOrFrom, UseLoaderDepsResult } from '@tanstack/router-core';
2
+ export interface UseLoaderDepsBaseOptions<TRouter extends AnyRouter, TFrom, TSelected> {
3
+ select?: (deps: ResolveUseLoaderDeps<TRouter, TFrom>) => TSelected;
4
+ }
5
+ export type UseLoaderDepsOptions<TRouter extends AnyRouter, TFrom extends string | undefined, TSelected> = StrictOrFrom<TRouter, TFrom> & UseLoaderDepsBaseOptions<TRouter, TFrom, TSelected>;
6
+ export type UseLoaderDepsRoute<out TId> = <TRouter extends AnyRouter = RegisteredRouter, TSelected = unknown>(opts?: UseLoaderDepsBaseOptions<TRouter, TId, TSelected>) => UseLoaderDepsResult<TRouter, TId, TSelected>;
7
+ export declare function useLoaderDeps<TRouter extends AnyRouter = RegisteredRouter, const TFrom extends string | undefined = undefined, TSelected = unknown>(opts: UseLoaderDepsOptions<TRouter, TFrom, TSelected>): UseLoaderDepsResult<TRouter, TFrom, TSelected>;
@@ -0,0 +1,17 @@
1
+ import { useMatch } from "./useMatch.js";
2
+ function useLoaderDeps(opts) {
3
+ const {
4
+ select,
5
+ ...rest
6
+ } = opts;
7
+ return useMatch({
8
+ ...rest,
9
+ select: (s) => {
10
+ return select ? select(s.loaderDeps) : s.loaderDeps;
11
+ }
12
+ });
13
+ }
14
+ export {
15
+ useLoaderDeps
16
+ };
17
+ //# sourceMappingURL=useLoaderDeps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useLoaderDeps.js","sources":["../../src/useLoaderDeps.tsx"],"sourcesContent":["import { useMatch } from './useMatch'\nimport type {\n AnyRouter,\n RegisteredRouter,\n ResolveUseLoaderDeps,\n StrictOrFrom,\n UseLoaderDepsResult,\n} from '@tanstack/router-core'\n\nexport interface UseLoaderDepsBaseOptions<\n TRouter extends AnyRouter,\n TFrom,\n TSelected,\n> {\n select?: (deps: ResolveUseLoaderDeps<TRouter, TFrom>) => TSelected\n}\n\nexport type UseLoaderDepsOptions<\n TRouter extends AnyRouter,\n TFrom extends string | undefined,\n TSelected,\n> = StrictOrFrom<TRouter, TFrom> &\n UseLoaderDepsBaseOptions<TRouter, TFrom, TSelected>\n\nexport type UseLoaderDepsRoute<out TId> = <\n TRouter extends AnyRouter = RegisteredRouter,\n TSelected = unknown,\n>(\n opts?: UseLoaderDepsBaseOptions<TRouter, TId, TSelected>,\n) => UseLoaderDepsResult<TRouter, TId, TSelected>\n\nexport function useLoaderDeps<\n TRouter extends AnyRouter = RegisteredRouter,\n const TFrom extends string | undefined = undefined,\n TSelected = unknown,\n>(\n opts: UseLoaderDepsOptions<TRouter, TFrom, TSelected>,\n): UseLoaderDepsResult<TRouter, TFrom, TSelected> {\n const { select, ...rest } = opts\n return useMatch({\n ...rest,\n select: (s) => {\n return select ? select(s.loaderDeps) : s.loaderDeps\n },\n }) as UseLoaderDepsResult<TRouter, TFrom, TSelected>\n}\n"],"names":["useLoaderDeps","opts","select","rest","useMatch","s","loaderDeps"],"mappings":";AA+BO,SAASA,cAKdC,MACgD;AAChD,QAAM;AAAA,IAAEC;AAAAA,IAAQ,GAAGC;AAAAA,EAAK,IAAIF;AAC5B,SAAOG,SAAS;AAAA,IACd,GAAGD;AAAAA,IACHD,QAASG,OAAM;AACb,aAAOH,SAASA,OAAOG,EAAEC,UAAU,IAAID,EAAEC;AAAAA,IAC3C;AAAA,EACF,CAAC;AACH;"}
@@ -0,0 +1,7 @@
1
+ import { AnyRouter, RegisteredRouter, RouterState } from '@tanstack/router-core';
2
+ import type * as Vue from 'vue';
3
+ export interface UseLocationBaseOptions<TRouter extends AnyRouter, TSelected> {
4
+ select?: (state: RouterState<TRouter['routeTree']>['location']) => TSelected;
5
+ }
6
+ export type UseLocationResult<TRouter extends AnyRouter, TSelected> = unknown extends TSelected ? RouterState<TRouter['routeTree']>['location'] : TSelected;
7
+ export declare function useLocation<TRouter extends AnyRouter = RegisteredRouter, TSelected = unknown>(opts?: UseLocationBaseOptions<TRouter, TSelected>): Vue.Ref<UseLocationResult<TRouter, TSelected>>;
@@ -0,0 +1,10 @@
1
+ import { useRouterState } from "./useRouterState.js";
2
+ function useLocation(opts) {
3
+ return useRouterState({
4
+ select: (state) => opts?.select ? opts.select(state.location) : state.location
5
+ });
6
+ }
7
+ export {
8
+ useLocation
9
+ };
10
+ //# sourceMappingURL=useLocation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useLocation.js","sources":["../../src/useLocation.tsx"],"sourcesContent":["import { useRouterState } from './useRouterState'\nimport type {\n AnyRouter,\n RegisteredRouter,\n RouterState,\n} from '@tanstack/router-core'\nimport type * as Vue from 'vue'\n\nexport interface UseLocationBaseOptions<TRouter extends AnyRouter, TSelected> {\n select?: (state: RouterState<TRouter['routeTree']>['location']) => TSelected\n}\n\nexport type UseLocationResult<\n TRouter extends AnyRouter,\n TSelected,\n> = unknown extends TSelected\n ? RouterState<TRouter['routeTree']>['location']\n : TSelected\n\nexport function useLocation<\n TRouter extends AnyRouter = RegisteredRouter,\n TSelected = unknown,\n>(\n opts?: UseLocationBaseOptions<TRouter, TSelected>,\n): Vue.Ref<UseLocationResult<TRouter, TSelected>> {\n return useRouterState({\n select: (state: any) =>\n opts?.select ? opts.select(state.location) : state.location,\n } as any) as Vue.Ref<UseLocationResult<TRouter, TSelected>>\n}\n"],"names":["useLocation","opts","useRouterState","select","state","location"],"mappings":";AAmBO,SAASA,YAIdC,MACgD;AAChD,SAAOC,eAAe;AAAA,IACpBC,QAASC,WACPH,MAAME,SAASF,KAAKE,OAAOC,MAAMC,QAAQ,IAAID,MAAMC;AAAAA,EACvD,CAAQ;AACV;"}
@@ -0,0 +1,10 @@
1
+ import { AnyRouter, MakeRouteMatch, MakeRouteMatchUnion, RegisteredRouter, StrictOrFrom, ThrowConstraint, ThrowOrOptional } from '@tanstack/router-core';
2
+ import * as Vue from 'vue';
3
+ export interface UseMatchBaseOptions<TRouter extends AnyRouter, TFrom, TStrict extends boolean, TThrow extends boolean, TSelected> {
4
+ select?: (match: MakeRouteMatch<TRouter['routeTree'], TFrom, TStrict>) => TSelected;
5
+ shouldThrow?: TThrow;
6
+ }
7
+ export type UseMatchRoute<out TFrom> = <TRouter extends AnyRouter = RegisteredRouter, TSelected = unknown>(opts?: UseMatchBaseOptions<TRouter, TFrom, true, true, TSelected>) => Vue.Ref<UseMatchResult<TRouter, TFrom, true, TSelected>>;
8
+ export type UseMatchOptions<TRouter extends AnyRouter, TFrom extends string | undefined, TStrict extends boolean, TThrow extends boolean, TSelected> = StrictOrFrom<TRouter, TFrom, TStrict> & UseMatchBaseOptions<TRouter, TFrom, TStrict, TThrow, TSelected>;
9
+ export type UseMatchResult<TRouter extends AnyRouter, TFrom, TStrict extends boolean, TSelected> = unknown extends TSelected ? TStrict extends true ? MakeRouteMatch<TRouter['routeTree'], TFrom, TStrict> : MakeRouteMatchUnion<TRouter> : TSelected;
10
+ export declare function useMatch<TRouter extends AnyRouter = RegisteredRouter, const TFrom extends string | undefined = undefined, TStrict extends boolean = true, TThrow extends boolean = true, TSelected = unknown>(opts: UseMatchOptions<TRouter, TFrom, TStrict, ThrowConstraint<TStrict, TThrow>, TSelected>): Vue.Ref<ThrowOrOptional<UseMatchResult<TRouter, TFrom, TStrict, TSelected>, TThrow>>;
@@ -0,0 +1,39 @@
1
+ import * as Vue from "vue";
2
+ import { useRouterState } from "./useRouterState.js";
3
+ import { injectDummyMatch, injectMatch } from "./matchContext.js";
4
+ function useMatch(opts) {
5
+ const nearestMatchId = opts.from ? injectDummyMatch() : injectMatch();
6
+ const pendingError = Vue.ref(null);
7
+ const matchSelection = useRouterState({
8
+ select: (state) => {
9
+ const match = state.matches.find((d) => opts.from ? opts.from === d.routeId : d.id === nearestMatchId.value);
10
+ if (match === void 0) {
11
+ const pendingMatch = state.pendingMatches?.find((d) => opts.from ? opts.from === d.routeId : d.id === nearestMatchId.value);
12
+ if (pendingMatch || state.isTransitioning) {
13
+ pendingError.value = null;
14
+ return void 0;
15
+ }
16
+ if (opts.shouldThrow ?? true) {
17
+ pendingError.value = new Error(`Invariant failed: Could not find ${opts.from ? `an active match from "${opts.from}"` : "a nearest match!"}`);
18
+ }
19
+ return void 0;
20
+ }
21
+ pendingError.value = null;
22
+ return opts.select ? opts.select(match) : match;
23
+ }
24
+ });
25
+ const result = Vue.computed(() => {
26
+ if (pendingError.value) {
27
+ throw pendingError.value;
28
+ }
29
+ return matchSelection.value;
30
+ });
31
+ if (pendingError.value) {
32
+ throw pendingError.value;
33
+ }
34
+ return result;
35
+ }
36
+ export {
37
+ useMatch
38
+ };
39
+ //# sourceMappingURL=useMatch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useMatch.js","sources":["../../src/useMatch.tsx"],"sourcesContent":["import * as Vue from 'vue'\nimport { useRouterState } from './useRouterState'\nimport { injectDummyMatch, injectMatch } from './matchContext'\nimport type {\n AnyRouter,\n MakeRouteMatch,\n MakeRouteMatchUnion,\n RegisteredRouter,\n StrictOrFrom,\n ThrowConstraint,\n ThrowOrOptional,\n} from '@tanstack/router-core'\n\nexport interface UseMatchBaseOptions<\n TRouter extends AnyRouter,\n TFrom,\n TStrict extends boolean,\n TThrow extends boolean,\n TSelected,\n> {\n select?: (\n match: MakeRouteMatch<TRouter['routeTree'], TFrom, TStrict>,\n ) => TSelected\n shouldThrow?: TThrow\n}\n\nexport type UseMatchRoute<out TFrom> = <\n TRouter extends AnyRouter = RegisteredRouter,\n TSelected = unknown,\n>(\n opts?: UseMatchBaseOptions<TRouter, TFrom, true, true, TSelected>,\n) => Vue.Ref<UseMatchResult<TRouter, TFrom, true, TSelected>>\n\nexport type UseMatchOptions<\n TRouter extends AnyRouter,\n TFrom extends string | undefined,\n TStrict extends boolean,\n TThrow extends boolean,\n TSelected,\n> = StrictOrFrom<TRouter, TFrom, TStrict> &\n UseMatchBaseOptions<TRouter, TFrom, TStrict, TThrow, TSelected>\n\nexport type UseMatchResult<\n TRouter extends AnyRouter,\n TFrom,\n TStrict extends boolean,\n TSelected,\n> = unknown extends TSelected\n ? TStrict extends true\n ? MakeRouteMatch<TRouter['routeTree'], TFrom, TStrict>\n : MakeRouteMatchUnion<TRouter>\n : TSelected\n\nexport function useMatch<\n TRouter extends AnyRouter = RegisteredRouter,\n const TFrom extends string | undefined = undefined,\n TStrict extends boolean = true,\n TThrow extends boolean = true,\n TSelected = unknown,\n>(\n opts: UseMatchOptions<\n TRouter,\n TFrom,\n TStrict,\n ThrowConstraint<TStrict, TThrow>,\n TSelected\n >,\n): Vue.Ref<\n ThrowOrOptional<UseMatchResult<TRouter, TFrom, TStrict, TSelected>, TThrow>\n> {\n const nearestMatchId = opts.from ? injectDummyMatch() : injectMatch()\n\n // Store to track pending error for deferred throwing\n const pendingError = Vue.ref<Error | null>(null)\n\n // Select the match from router state\n const matchSelection = useRouterState({\n select: (state: any) => {\n const match = state.matches.find((d: any) =>\n opts.from ? opts.from === d.routeId : d.id === nearestMatchId.value,\n )\n\n if (match === undefined) {\n // During navigation transitions, check if the match exists in pendingMatches\n const pendingMatch = state.pendingMatches?.find((d: any) =>\n opts.from ? opts.from === d.routeId : d.id === nearestMatchId.value,\n )\n\n // If there's a pending match or we're transitioning, return undefined without throwing\n if (pendingMatch || state.isTransitioning) {\n pendingError.value = null\n return undefined\n }\n\n // Store the error to throw later if shouldThrow is enabled\n if (opts.shouldThrow ?? true) {\n pendingError.value = new Error(\n `Invariant failed: Could not find ${opts.from ? `an active match from \"${opts.from}\"` : 'a nearest match!'}`,\n )\n }\n\n return undefined\n }\n\n pendingError.value = null\n return opts.select ? opts.select(match) : match\n },\n } as any)\n\n // Throw the error if we have one - this happens after the selector runs\n // Using a computed so the error is thrown when the return value is accessed\n const result = Vue.computed(() => {\n // Check for pending error first\n if (pendingError.value) {\n throw pendingError.value\n }\n return matchSelection.value\n })\n\n // Also immediately throw if there's already an error from initial render\n // This ensures errors are thrown even if the returned ref is never accessed\n if (pendingError.value) {\n throw pendingError.value\n }\n\n return result as any\n}\n"],"names":["useMatch","opts","nearestMatchId","from","injectDummyMatch","injectMatch","pendingError","Vue","ref","matchSelection","useRouterState","select","state","match","matches","find","d","routeId","id","value","undefined","pendingMatch","pendingMatches","isTransitioning","shouldThrow","Error","result","computed"],"mappings":";;;AAqDO,SAASA,SAOdC,MASA;AACA,QAAMC,iBAAiBD,KAAKE,OAAOC,iBAAgB,IAAKC,YAAW;AAGnE,QAAMC,eAAeC,IAAIC,IAAkB,IAAI;AAG/C,QAAMC,iBAAiBC,eAAe;AAAA,IACpCC,QAASC,WAAe;AACtB,YAAMC,QAAQD,MAAME,QAAQC,KAAMC,OAChCf,KAAKE,OAAOF,KAAKE,SAASa,EAAEC,UAAUD,EAAEE,OAAOhB,eAAeiB,KAChE;AAEA,UAAIN,UAAUO,QAAW;AAEvB,cAAMC,eAAeT,MAAMU,gBAAgBP,KAAMC,OAC/Cf,KAAKE,OAAOF,KAAKE,SAASa,EAAEC,UAAUD,EAAEE,OAAOhB,eAAeiB,KAChE;AAGA,YAAIE,gBAAgBT,MAAMW,iBAAiB;AACzCjB,uBAAaa,QAAQ;AACrB,iBAAOC;AAAAA,QACT;AAGA,YAAInB,KAAKuB,eAAe,MAAM;AAC5BlB,uBAAaa,QAAQ,IAAIM,MACvB,oCAAoCxB,KAAKE,OAAO,yBAAyBF,KAAKE,IAAI,MAAM,kBAAkB,EAC5G;AAAA,QACF;AAEA,eAAOiB;AAAAA,MACT;AAEAd,mBAAaa,QAAQ;AACrB,aAAOlB,KAAKU,SAASV,KAAKU,OAAOE,KAAK,IAAIA;AAAAA,IAC5C;AAAA,EACF,CAAQ;AAIR,QAAMa,SAASnB,IAAIoB,SAAS,MAAM;AAEhC,QAAIrB,aAAaa,OAAO;AACtB,YAAMb,aAAaa;AAAAA,IACrB;AACA,WAAOV,eAAeU;AAAAA,EACxB,CAAC;AAID,MAAIb,aAAaa,OAAO;AACtB,UAAMb,aAAaa;AAAAA,EACrB;AAEA,SAAOO;AACT;"}
@@ -0,0 +1,5 @@
1
+ import { AnyRouter, FromPathOption, NavigateOptions, RegisteredRouter, UseNavigateResult } from '@tanstack/router-core';
2
+ export declare function useNavigate<TRouter extends AnyRouter = RegisteredRouter, TDefaultFrom extends string = string>(_defaultOpts?: {
3
+ from?: FromPathOption<TRouter, TDefaultFrom>;
4
+ }): UseNavigateResult<TDefaultFrom>;
5
+ export declare function Navigate<TRouter extends AnyRouter = RegisteredRouter, const TFrom extends string = string, const TTo extends string | undefined = undefined, const TMaskFrom extends string = TFrom, const TMaskTo extends string = ''>(props: NavigateOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo>): null;
@@ -0,0 +1,29 @@
1
+ import * as Vue from "vue";
2
+ import { useRouter } from "./useRouter.js";
3
+ function useNavigate(_defaultOpts) {
4
+ const {
5
+ navigate
6
+ } = useRouter();
7
+ return (options) => {
8
+ return navigate({
9
+ from: _defaultOpts?.from,
10
+ ...options
11
+ });
12
+ };
13
+ }
14
+ function Navigate(props) {
15
+ const {
16
+ navigate
17
+ } = useRouter();
18
+ Vue.onMounted(() => {
19
+ navigate({
20
+ ...props
21
+ });
22
+ });
23
+ return null;
24
+ }
25
+ export {
26
+ Navigate,
27
+ useNavigate
28
+ };
29
+ //# sourceMappingURL=useNavigate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useNavigate.js","sources":["../../src/useNavigate.tsx"],"sourcesContent":["import * as Vue from 'vue'\nimport { useRouter } from './useRouter'\nimport type {\n AnyRouter,\n FromPathOption,\n NavigateOptions,\n RegisteredRouter,\n UseNavigateResult,\n} from '@tanstack/router-core'\n\nexport function useNavigate<\n TRouter extends AnyRouter = RegisteredRouter,\n TDefaultFrom extends string = string,\n>(_defaultOpts?: {\n from?: FromPathOption<TRouter, TDefaultFrom>\n}): UseNavigateResult<TDefaultFrom> {\n const { navigate } = useRouter()\n\n return ((options: NavigateOptions) => {\n return navigate({ from: _defaultOpts?.from, ...options })\n }) as UseNavigateResult<TDefaultFrom>\n}\n\nexport function Navigate<\n TRouter extends AnyRouter = RegisteredRouter,\n const TFrom extends string = string,\n const TTo extends string | undefined = undefined,\n const TMaskFrom extends string = TFrom,\n const TMaskTo extends string = '',\n>(props: NavigateOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo>): null {\n const { navigate } = useRouter()\n\n Vue.onMounted(() => {\n navigate({\n ...props,\n })\n })\n\n return null\n}\n"],"names":["useNavigate","_defaultOpts","navigate","useRouter","options","from","Navigate","props","Vue","onMounted"],"mappings":";;AAUO,SAASA,YAGdC,cAEkC;AAClC,QAAM;AAAA,IAAEC;AAAAA,MAAaC,UAAS;AAE9B,SAASC,aAA6B;AACpC,WAAOF,SAAS;AAAA,MAAEG,MAAMJ,cAAcI;AAAAA,MAAM,GAAGD;AAAAA,IAAQ,CAAC;AAAA,EAC1D;AACF;AAEO,SAASE,SAMdC,OAAuE;AACvE,QAAM;AAAA,IAAEL;AAAAA,MAAaC,UAAS;AAE9BK,MAAIC,UAAU,MAAM;AAClBP,aAAS;AAAA,MACP,GAAGK;AAAAA,IACL,CAAC;AAAA,EACH,CAAC;AAED,SAAO;AACT;"}
@@ -0,0 +1,9 @@
1
+ import { AnyRouter, RegisteredRouter, ResolveUseParams, StrictOrFrom, ThrowConstraint, ThrowOrOptional, UseParamsResult } from '@tanstack/router-core';
2
+ import type * as Vue from 'vue';
3
+ export interface UseParamsBaseOptions<TRouter extends AnyRouter, TFrom, TStrict extends boolean, TThrow extends boolean, TSelected> {
4
+ select?: (params: ResolveUseParams<TRouter, TFrom, TStrict>) => TSelected;
5
+ shouldThrow?: TThrow;
6
+ }
7
+ export type UseParamsOptions<TRouter extends AnyRouter, TFrom extends string | undefined, TStrict extends boolean, TThrow extends boolean, TSelected> = StrictOrFrom<TRouter, TFrom, TStrict> & UseParamsBaseOptions<TRouter, TFrom, TStrict, TThrow, TSelected>;
8
+ export type UseParamsRoute<out TFrom> = <TRouter extends AnyRouter = RegisteredRouter, TSelected = unknown>(opts?: UseParamsBaseOptions<TRouter, TFrom, true, true, TSelected>) => Vue.Ref<UseParamsResult<TRouter, TFrom, true, TSelected>>;
9
+ export declare function useParams<TRouter extends AnyRouter = RegisteredRouter, const TFrom extends string | undefined = undefined, TStrict extends boolean = true, TThrow extends boolean = true, TSelected = unknown>(opts: UseParamsOptions<TRouter, TFrom, TStrict, ThrowConstraint<TStrict, TThrow>, TSelected>): Vue.Ref<ThrowOrOptional<UseParamsResult<TRouter, TFrom, TStrict, TSelected>, TThrow>>;
@@ -0,0 +1,15 @@
1
+ import { useMatch } from "./useMatch.js";
2
+ function useParams(opts) {
3
+ return useMatch({
4
+ from: opts.from,
5
+ strict: opts.strict,
6
+ shouldThrow: opts.shouldThrow,
7
+ select: (match) => {
8
+ return opts.select ? opts.select(match.params) : match.params;
9
+ }
10
+ });
11
+ }
12
+ export {
13
+ useParams
14
+ };
15
+ //# sourceMappingURL=useParams.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useParams.js","sources":["../../src/useParams.tsx"],"sourcesContent":["import { useMatch } from './useMatch'\nimport type * as Vue from 'vue'\nimport type {\n AnyRouter,\n RegisteredRouter,\n ResolveUseParams,\n StrictOrFrom,\n ThrowConstraint,\n ThrowOrOptional,\n UseParamsResult,\n} from '@tanstack/router-core'\n\nexport interface UseParamsBaseOptions<\n TRouter extends AnyRouter,\n TFrom,\n TStrict extends boolean,\n TThrow extends boolean,\n TSelected,\n> {\n select?: (params: ResolveUseParams<TRouter, TFrom, TStrict>) => TSelected\n shouldThrow?: TThrow\n}\n\nexport type UseParamsOptions<\n TRouter extends AnyRouter,\n TFrom extends string | undefined,\n TStrict extends boolean,\n TThrow extends boolean,\n TSelected,\n> = StrictOrFrom<TRouter, TFrom, TStrict> &\n UseParamsBaseOptions<TRouter, TFrom, TStrict, TThrow, TSelected>\n\nexport type UseParamsRoute<out TFrom> = <\n TRouter extends AnyRouter = RegisteredRouter,\n TSelected = unknown,\n>(\n opts?: UseParamsBaseOptions<\n TRouter,\n TFrom,\n /* TStrict */ true,\n /* TThrow */ true,\n TSelected\n >,\n) => Vue.Ref<UseParamsResult<TRouter, TFrom, true, TSelected>>\n\nexport function useParams<\n TRouter extends AnyRouter = RegisteredRouter,\n const TFrom extends string | undefined = undefined,\n TStrict extends boolean = true,\n TThrow extends boolean = true,\n TSelected = unknown,\n>(\n opts: UseParamsOptions<\n TRouter,\n TFrom,\n TStrict,\n ThrowConstraint<TStrict, TThrow>,\n TSelected\n >,\n): Vue.Ref<\n ThrowOrOptional<UseParamsResult<TRouter, TFrom, TStrict, TSelected>, TThrow>\n> {\n return useMatch({\n from: opts.from!,\n strict: opts.strict,\n shouldThrow: opts.shouldThrow,\n select: (match: any) => {\n return opts.select ? opts.select(match.params) : match.params\n },\n } as any) as any\n}\n"],"names":["useParams","opts","useMatch","from","strict","shouldThrow","select","match","params"],"mappings":";AA6CO,SAASA,UAOdC,MASA;AACA,SAAOC,SAAS;AAAA,IACdC,MAAMF,KAAKE;AAAAA,IACXC,QAAQH,KAAKG;AAAAA,IACbC,aAAaJ,KAAKI;AAAAA,IAClBC,QAASC,WAAe;AACtB,aAAON,KAAKK,SAASL,KAAKK,OAAOC,MAAMC,MAAM,IAAID,MAAMC;AAAAA,IACzD;AAAA,EACF,CAAQ;AACV;"}
@@ -0,0 +1,4 @@
1
+ import { AnyRouter, RegisteredRouter, UseRouteContextBaseOptions, UseRouteContextOptions, UseRouteContextResult } from '@tanstack/router-core';
2
+ import type * as Vue from 'vue';
3
+ export type UseRouteContextRoute<out TFrom> = <TRouter extends AnyRouter = RegisteredRouter, TSelected = unknown>(opts?: UseRouteContextBaseOptions<TRouter, TFrom, true, TSelected>) => Vue.Ref<UseRouteContextResult<TRouter, TFrom, true, TSelected>>;
4
+ export declare function useRouteContext<TRouter extends AnyRouter = RegisteredRouter, const TFrom extends string | undefined = undefined, TStrict extends boolean = true, TSelected = unknown>(opts: UseRouteContextOptions<TRouter, TFrom, TStrict, TSelected>): Vue.Ref<UseRouteContextResult<TRouter, TFrom, TStrict, TSelected>>;
@@ -0,0 +1,11 @@
1
+ import { useMatch } from "./useMatch.js";
2
+ function useRouteContext(opts) {
3
+ return useMatch({
4
+ ...opts,
5
+ select: (match) => opts.select ? opts.select(match.context) : match.context
6
+ });
7
+ }
8
+ export {
9
+ useRouteContext
10
+ };
11
+ //# sourceMappingURL=useRouteContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useRouteContext.js","sources":["../../src/useRouteContext.ts"],"sourcesContent":["import { useMatch } from './useMatch'\nimport type * as Vue from 'vue'\nimport type {\n AnyRouter,\n RegisteredRouter,\n UseRouteContextBaseOptions,\n UseRouteContextOptions,\n UseRouteContextResult,\n} from '@tanstack/router-core'\n\nexport type UseRouteContextRoute<out TFrom> = <\n TRouter extends AnyRouter = RegisteredRouter,\n TSelected = unknown,\n>(\n opts?: UseRouteContextBaseOptions<TRouter, TFrom, true, TSelected>,\n) => Vue.Ref<UseRouteContextResult<TRouter, TFrom, true, TSelected>>\n\nexport function useRouteContext<\n TRouter extends AnyRouter = RegisteredRouter,\n const TFrom extends string | undefined = undefined,\n TStrict extends boolean = true,\n TSelected = unknown,\n>(\n opts: UseRouteContextOptions<TRouter, TFrom, TStrict, TSelected>,\n): Vue.Ref<UseRouteContextResult<TRouter, TFrom, TStrict, TSelected>> {\n return useMatch({\n ...(opts as any),\n select: (match) =>\n opts.select ? opts.select(match.context) : match.context,\n }) as any\n}\n"],"names":[],"mappings":";AAiBO,SAAS,gBAMd,MACoE;AACpE,SAAO,SAAS;AAAA,IACd,GAAI;AAAA,IACJ,QAAQ,CAAC,UACP,KAAK,SAAS,KAAK,OAAO,MAAM,OAAO,IAAI,MAAM;AAAA,EAAA,CACpD;AACH;"}
@@ -0,0 +1,4 @@
1
+ import { AnyRouter, RegisteredRouter } from '@tanstack/router-core';
2
+ export declare function useRouter<TRouter extends AnyRouter = RegisteredRouter>(opts?: {
3
+ warn?: boolean;
4
+ }): TRouter;
@@ -0,0 +1,12 @@
1
+ import * as Vue from "vue";
2
+ import warning from "tiny-warning";
3
+ import { getRouterContext } from "./routerContext.js";
4
+ function useRouter(opts) {
5
+ const value = Vue.inject(getRouterContext(), null);
6
+ warning(!((opts?.warn ?? true) && !value), "useRouter must be used inside a <RouterProvider> component!");
7
+ return value;
8
+ }
9
+ export {
10
+ useRouter
11
+ };
12
+ //# sourceMappingURL=useRouter.js.map