@depup/tanstack__react-router 1.166.4-depup.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 (363) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +32 -0
  3. package/dist/cjs/Asset.cjs +177 -0
  4. package/dist/cjs/Asset.cjs.map +1 -0
  5. package/dist/cjs/Asset.d.cts +5 -0
  6. package/dist/cjs/CatchBoundary.cjs +114 -0
  7. package/dist/cjs/CatchBoundary.cjs.map +1 -0
  8. package/dist/cjs/CatchBoundary.d.cts +12 -0
  9. package/dist/cjs/ClientOnly.cjs +21 -0
  10. package/dist/cjs/ClientOnly.cjs.map +1 -0
  11. package/dist/cjs/ClientOnly.d.cts +49 -0
  12. package/dist/cjs/HeadContent.cjs +15 -0
  13. package/dist/cjs/HeadContent.cjs.map +1 -0
  14. package/dist/cjs/HeadContent.d.cts +6 -0
  15. package/dist/cjs/HeadContent.dev.cjs +41 -0
  16. package/dist/cjs/HeadContent.dev.cjs.map +1 -0
  17. package/dist/cjs/HeadContent.dev.d.cts +10 -0
  18. package/dist/cjs/Match.cjs +255 -0
  19. package/dist/cjs/Match.cjs.map +1 -0
  20. package/dist/cjs/Match.d.cts +14 -0
  21. package/dist/cjs/Matches.cjs +138 -0
  22. package/dist/cjs/Matches.cjs.map +1 -0
  23. package/dist/cjs/Matches.d.cts +68 -0
  24. package/dist/cjs/RouterProvider.cjs +32 -0
  25. package/dist/cjs/RouterProvider.cjs.map +1 -0
  26. package/dist/cjs/RouterProvider.d.cts +23 -0
  27. package/dist/cjs/SafeFragment.cjs +8 -0
  28. package/dist/cjs/SafeFragment.cjs.map +1 -0
  29. package/dist/cjs/SafeFragment.d.cts +1 -0
  30. package/dist/cjs/ScriptOnce.cjs +22 -0
  31. package/dist/cjs/ScriptOnce.cjs.map +1 -0
  32. package/dist/cjs/ScriptOnce.d.cts +6 -0
  33. package/dist/cjs/Scripts.cjs +56 -0
  34. package/dist/cjs/Scripts.cjs.map +1 -0
  35. package/dist/cjs/Scripts.d.cts +5 -0
  36. package/dist/cjs/ScrollRestoration.cjs +38 -0
  37. package/dist/cjs/ScrollRestoration.cjs.map +1 -0
  38. package/dist/cjs/ScrollRestoration.d.cts +14 -0
  39. package/dist/cjs/Transitioner.cjs +119 -0
  40. package/dist/cjs/Transitioner.cjs.map +1 -0
  41. package/dist/cjs/Transitioner.d.cts +1 -0
  42. package/dist/cjs/awaited.cjs +51 -0
  43. package/dist/cjs/awaited.cjs.map +1 -0
  44. package/dist/cjs/awaited.d.cts +14 -0
  45. package/dist/cjs/fileRoute.cjs +109 -0
  46. package/dist/cjs/fileRoute.cjs.map +1 -0
  47. package/dist/cjs/fileRoute.d.cts +87 -0
  48. package/dist/cjs/headContentUtils.cjs +185 -0
  49. package/dist/cjs/headContentUtils.cjs.map +1 -0
  50. package/dist/cjs/headContentUtils.d.cts +7 -0
  51. package/dist/cjs/history.d.cts +8 -0
  52. package/dist/cjs/index.cjs +241 -0
  53. package/dist/cjs/index.cjs.map +1 -0
  54. package/dist/cjs/index.d.cts +51 -0
  55. package/dist/cjs/index.dev.cjs +241 -0
  56. package/dist/cjs/index.dev.cjs.map +1 -0
  57. package/dist/cjs/index.dev.d.cts +2 -0
  58. package/dist/cjs/lazyRouteComponent.cjs +70 -0
  59. package/dist/cjs/lazyRouteComponent.cjs.map +1 -0
  60. package/dist/cjs/lazyRouteComponent.d.cts +11 -0
  61. package/dist/cjs/link.cjs +573 -0
  62. package/dist/cjs/link.cjs.map +1 -0
  63. package/dist/cjs/link.d.cts +98 -0
  64. package/dist/cjs/matchContext.cjs +27 -0
  65. package/dist/cjs/matchContext.cjs.map +1 -0
  66. package/dist/cjs/matchContext.d.cts +3 -0
  67. package/dist/cjs/not-found.cjs +38 -0
  68. package/dist/cjs/not-found.cjs.map +1 -0
  69. package/dist/cjs/not-found.d.cts +9 -0
  70. package/dist/cjs/renderRouteNotFound.cjs +22 -0
  71. package/dist/cjs/renderRouteNotFound.cjs.map +1 -0
  72. package/dist/cjs/renderRouteNotFound.d.cts +10 -0
  73. package/dist/cjs/route.cjs +198 -0
  74. package/dist/cjs/route.cjs.map +1 -0
  75. package/dist/cjs/route.d.cts +142 -0
  76. package/dist/cjs/router.cjs +22 -0
  77. package/dist/cjs/router.cjs.map +1 -0
  78. package/dist/cjs/router.d.cts +83 -0
  79. package/dist/cjs/routerContext.cjs +23 -0
  80. package/dist/cjs/routerContext.cjs.map +1 -0
  81. package/dist/cjs/routerContext.d.cts +3 -0
  82. package/dist/cjs/scroll-restoration.cjs +39 -0
  83. package/dist/cjs/scroll-restoration.cjs.map +1 -0
  84. package/dist/cjs/scroll-restoration.d.cts +1 -0
  85. package/dist/cjs/ssr/RouterClient.cjs +25 -0
  86. package/dist/cjs/ssr/RouterClient.cjs.map +1 -0
  87. package/dist/cjs/ssr/RouterClient.d.cts +4 -0
  88. package/dist/cjs/ssr/RouterServer.cjs +9 -0
  89. package/dist/cjs/ssr/RouterServer.cjs.map +1 -0
  90. package/dist/cjs/ssr/RouterServer.d.cts +4 -0
  91. package/dist/cjs/ssr/client.cjs +12 -0
  92. package/dist/cjs/ssr/client.cjs.map +1 -0
  93. package/dist/cjs/ssr/client.d.cts +2 -0
  94. package/dist/cjs/ssr/defaultRenderHandler.cjs +15 -0
  95. package/dist/cjs/ssr/defaultRenderHandler.cjs.map +1 -0
  96. package/dist/cjs/ssr/defaultRenderHandler.d.cts +1 -0
  97. package/dist/cjs/ssr/defaultStreamHandler.cjs +16 -0
  98. package/dist/cjs/ssr/defaultStreamHandler.cjs.map +1 -0
  99. package/dist/cjs/ssr/defaultStreamHandler.d.cts +1 -0
  100. package/dist/cjs/ssr/renderRouterToStream.cjs +73 -0
  101. package/dist/cjs/ssr/renderRouterToStream.cjs.map +1 -0
  102. package/dist/cjs/ssr/renderRouterToStream.d.cts +8 -0
  103. package/dist/cjs/ssr/renderRouterToString.cjs +31 -0
  104. package/dist/cjs/ssr/renderRouterToString.cjs.map +1 -0
  105. package/dist/cjs/ssr/renderRouterToString.d.cts +7 -0
  106. package/dist/cjs/ssr/serializer.d.cts +6 -0
  107. package/dist/cjs/ssr/server.cjs +20 -0
  108. package/dist/cjs/ssr/server.cjs.map +1 -0
  109. package/dist/cjs/ssr/server.d.cts +6 -0
  110. package/dist/cjs/structuralSharing.d.cts +8 -0
  111. package/dist/cjs/typePrimitives.d.cts +16 -0
  112. package/dist/cjs/useBlocker.cjs +171 -0
  113. package/dist/cjs/useBlocker.cjs.map +1 -0
  114. package/dist/cjs/useBlocker.d.cts +66 -0
  115. package/dist/cjs/useCanGoBack.cjs +8 -0
  116. package/dist/cjs/useCanGoBack.cjs.map +1 -0
  117. package/dist/cjs/useCanGoBack.d.cts +1 -0
  118. package/dist/cjs/useLoaderData.cjs +15 -0
  119. package/dist/cjs/useLoaderData.cjs.map +1 -0
  120. package/dist/cjs/useLoaderData.d.cts +19 -0
  121. package/dist/cjs/useLoaderDeps.cjs +14 -0
  122. package/dist/cjs/useLoaderDeps.cjs.map +1 -0
  123. package/dist/cjs/useLoaderDeps.d.cts +19 -0
  124. package/dist/cjs/useLocation.cjs +10 -0
  125. package/dist/cjs/useLocation.cjs.map +1 -0
  126. package/dist/cjs/useLocation.d.cts +18 -0
  127. package/dist/cjs/useMatch.cjs +47 -0
  128. package/dist/cjs/useMatch.cjs.map +1 -0
  129. package/dist/cjs/useMatch.d.cts +14 -0
  130. package/dist/cjs/useNavigate.cjs +49 -0
  131. package/dist/cjs/useNavigate.cjs.map +1 -0
  132. package/dist/cjs/useNavigate.d.cts +28 -0
  133. package/dist/cjs/useParams.cjs +17 -0
  134. package/dist/cjs/useParams.cjs.map +1 -0
  135. package/dist/cjs/useParams.d.cts +21 -0
  136. package/dist/cjs/useRouteContext.cjs +11 -0
  137. package/dist/cjs/useRouteContext.cjs.map +1 -0
  138. package/dist/cjs/useRouteContext.d.cts +3 -0
  139. package/dist/cjs/useRouter.cjs +32 -0
  140. package/dist/cjs/useRouter.cjs.map +1 -0
  141. package/dist/cjs/useRouter.d.cts +14 -0
  142. package/dist/cjs/useRouterState.cjs +38 -0
  143. package/dist/cjs/useRouterState.cjs.map +1 -0
  144. package/dist/cjs/useRouterState.d.cts +20 -0
  145. package/dist/cjs/useSearch.cjs +16 -0
  146. package/dist/cjs/useSearch.cjs.map +1 -0
  147. package/dist/cjs/useSearch.d.cts +21 -0
  148. package/dist/cjs/utils.cjs +62 -0
  149. package/dist/cjs/utils.cjs.map +1 -0
  150. package/dist/cjs/utils.d.cts +54 -0
  151. package/dist/esm/Asset.d.ts +5 -0
  152. package/dist/esm/Asset.js +160 -0
  153. package/dist/esm/Asset.js.map +1 -0
  154. package/dist/esm/CatchBoundary.d.ts +12 -0
  155. package/dist/esm/CatchBoundary.js +97 -0
  156. package/dist/esm/CatchBoundary.js.map +1 -0
  157. package/dist/esm/ClientOnly.d.ts +49 -0
  158. package/dist/esm/ClientOnly.js +21 -0
  159. package/dist/esm/ClientOnly.js.map +1 -0
  160. package/dist/esm/HeadContent.d.ts +6 -0
  161. package/dist/esm/HeadContent.dev.d.ts +10 -0
  162. package/dist/esm/HeadContent.dev.js +25 -0
  163. package/dist/esm/HeadContent.dev.js.map +1 -0
  164. package/dist/esm/HeadContent.js +15 -0
  165. package/dist/esm/HeadContent.js.map +1 -0
  166. package/dist/esm/Match.d.ts +14 -0
  167. package/dist/esm/Match.js +238 -0
  168. package/dist/esm/Match.js.map +1 -0
  169. package/dist/esm/Matches.d.ts +68 -0
  170. package/dist/esm/Matches.js +121 -0
  171. package/dist/esm/Matches.js.map +1 -0
  172. package/dist/esm/RouterProvider.d.ts +23 -0
  173. package/dist/esm/RouterProvider.js +32 -0
  174. package/dist/esm/RouterProvider.js.map +1 -0
  175. package/dist/esm/SafeFragment.d.ts +1 -0
  176. package/dist/esm/SafeFragment.js +8 -0
  177. package/dist/esm/SafeFragment.js.map +1 -0
  178. package/dist/esm/ScriptOnce.d.ts +6 -0
  179. package/dist/esm/ScriptOnce.js +22 -0
  180. package/dist/esm/ScriptOnce.js.map +1 -0
  181. package/dist/esm/Scripts.d.ts +5 -0
  182. package/dist/esm/Scripts.js +56 -0
  183. package/dist/esm/Scripts.js.map +1 -0
  184. package/dist/esm/ScrollRestoration.d.ts +14 -0
  185. package/dist/esm/ScrollRestoration.js +38 -0
  186. package/dist/esm/ScrollRestoration.js.map +1 -0
  187. package/dist/esm/Transitioner.d.ts +1 -0
  188. package/dist/esm/Transitioner.js +102 -0
  189. package/dist/esm/Transitioner.js.map +1 -0
  190. package/dist/esm/awaited.d.ts +14 -0
  191. package/dist/esm/awaited.js +34 -0
  192. package/dist/esm/awaited.js.map +1 -0
  193. package/dist/esm/fileRoute.d.ts +87 -0
  194. package/dist/esm/fileRoute.js +109 -0
  195. package/dist/esm/fileRoute.js.map +1 -0
  196. package/dist/esm/headContentUtils.d.ts +7 -0
  197. package/dist/esm/headContentUtils.js +168 -0
  198. package/dist/esm/headContentUtils.js.map +1 -0
  199. package/dist/esm/history.d.ts +8 -0
  200. package/dist/esm/index.d.ts +51 -0
  201. package/dist/esm/index.dev.d.ts +2 -0
  202. package/dist/esm/index.dev.js +133 -0
  203. package/dist/esm/index.dev.js.map +1 -0
  204. package/dist/esm/index.js +133 -0
  205. package/dist/esm/index.js.map +1 -0
  206. package/dist/esm/lazyRouteComponent.d.ts +11 -0
  207. package/dist/esm/lazyRouteComponent.js +53 -0
  208. package/dist/esm/lazyRouteComponent.js.map +1 -0
  209. package/dist/esm/link.d.ts +98 -0
  210. package/dist/esm/link.js +556 -0
  211. package/dist/esm/link.js.map +1 -0
  212. package/dist/esm/matchContext.d.ts +3 -0
  213. package/dist/esm/matchContext.js +10 -0
  214. package/dist/esm/matchContext.js.map +1 -0
  215. package/dist/esm/not-found.d.ts +9 -0
  216. package/dist/esm/not-found.js +38 -0
  217. package/dist/esm/not-found.js.map +1 -0
  218. package/dist/esm/renderRouteNotFound.d.ts +10 -0
  219. package/dist/esm/renderRouteNotFound.js +22 -0
  220. package/dist/esm/renderRouteNotFound.js.map +1 -0
  221. package/dist/esm/route.d.ts +142 -0
  222. package/dist/esm/route.js +198 -0
  223. package/dist/esm/route.js.map +1 -0
  224. package/dist/esm/router.d.ts +83 -0
  225. package/dist/esm/router.js +22 -0
  226. package/dist/esm/router.js.map +1 -0
  227. package/dist/esm/routerContext.d.ts +3 -0
  228. package/dist/esm/routerContext.js +6 -0
  229. package/dist/esm/routerContext.js.map +1 -0
  230. package/dist/esm/scroll-restoration.d.ts +1 -0
  231. package/dist/esm/scroll-restoration.js +39 -0
  232. package/dist/esm/scroll-restoration.js.map +1 -0
  233. package/dist/esm/ssr/RouterClient.d.ts +4 -0
  234. package/dist/esm/ssr/RouterClient.js +25 -0
  235. package/dist/esm/ssr/RouterClient.js.map +1 -0
  236. package/dist/esm/ssr/RouterServer.d.ts +4 -0
  237. package/dist/esm/ssr/RouterServer.js +9 -0
  238. package/dist/esm/ssr/RouterServer.js.map +1 -0
  239. package/dist/esm/ssr/client.d.ts +2 -0
  240. package/dist/esm/ssr/client.js +6 -0
  241. package/dist/esm/ssr/client.js.map +1 -0
  242. package/dist/esm/ssr/defaultRenderHandler.d.ts +1 -0
  243. package/dist/esm/ssr/defaultRenderHandler.js +15 -0
  244. package/dist/esm/ssr/defaultRenderHandler.js.map +1 -0
  245. package/dist/esm/ssr/defaultStreamHandler.d.ts +1 -0
  246. package/dist/esm/ssr/defaultStreamHandler.js +16 -0
  247. package/dist/esm/ssr/defaultStreamHandler.js.map +1 -0
  248. package/dist/esm/ssr/renderRouterToStream.d.ts +8 -0
  249. package/dist/esm/ssr/renderRouterToStream.js +73 -0
  250. package/dist/esm/ssr/renderRouterToStream.js.map +1 -0
  251. package/dist/esm/ssr/renderRouterToString.d.ts +7 -0
  252. package/dist/esm/ssr/renderRouterToString.js +31 -0
  253. package/dist/esm/ssr/renderRouterToString.js.map +1 -0
  254. package/dist/esm/ssr/serializer.d.ts +6 -0
  255. package/dist/esm/ssr/server.d.ts +6 -0
  256. package/dist/esm/ssr/server.js +14 -0
  257. package/dist/esm/ssr/server.js.map +1 -0
  258. package/dist/esm/structuralSharing.d.ts +8 -0
  259. package/dist/esm/typePrimitives.d.ts +16 -0
  260. package/dist/esm/useBlocker.d.ts +66 -0
  261. package/dist/esm/useBlocker.js +154 -0
  262. package/dist/esm/useBlocker.js.map +1 -0
  263. package/dist/esm/useCanGoBack.d.ts +1 -0
  264. package/dist/esm/useCanGoBack.js +8 -0
  265. package/dist/esm/useCanGoBack.js.map +1 -0
  266. package/dist/esm/useLoaderData.d.ts +19 -0
  267. package/dist/esm/useLoaderData.js +15 -0
  268. package/dist/esm/useLoaderData.js.map +1 -0
  269. package/dist/esm/useLoaderDeps.d.ts +19 -0
  270. package/dist/esm/useLoaderDeps.js +14 -0
  271. package/dist/esm/useLoaderDeps.js.map +1 -0
  272. package/dist/esm/useLocation.d.ts +18 -0
  273. package/dist/esm/useLocation.js +10 -0
  274. package/dist/esm/useLocation.js.map +1 -0
  275. package/dist/esm/useMatch.d.ts +14 -0
  276. package/dist/esm/useMatch.js +30 -0
  277. package/dist/esm/useMatch.js.map +1 -0
  278. package/dist/esm/useNavigate.d.ts +28 -0
  279. package/dist/esm/useNavigate.js +32 -0
  280. package/dist/esm/useNavigate.js.map +1 -0
  281. package/dist/esm/useParams.d.ts +21 -0
  282. package/dist/esm/useParams.js +17 -0
  283. package/dist/esm/useParams.js.map +1 -0
  284. package/dist/esm/useRouteContext.d.ts +3 -0
  285. package/dist/esm/useRouteContext.js +11 -0
  286. package/dist/esm/useRouteContext.js.map +1 -0
  287. package/dist/esm/useRouter.d.ts +14 -0
  288. package/dist/esm/useRouter.js +15 -0
  289. package/dist/esm/useRouter.js.map +1 -0
  290. package/dist/esm/useRouterState.d.ts +20 -0
  291. package/dist/esm/useRouterState.js +38 -0
  292. package/dist/esm/useRouterState.js.map +1 -0
  293. package/dist/esm/useSearch.d.ts +21 -0
  294. package/dist/esm/useSearch.js +16 -0
  295. package/dist/esm/useSearch.js.map +1 -0
  296. package/dist/esm/utils.d.ts +54 -0
  297. package/dist/esm/utils.js +45 -0
  298. package/dist/esm/utils.js.map +1 -0
  299. package/dist/llms/index.d.ts +3 -0
  300. package/dist/llms/index.js +43 -0
  301. package/dist/llms/rules/api.d.ts +2 -0
  302. package/dist/llms/rules/api.js +4612 -0
  303. package/dist/llms/rules/guide.d.ts +2 -0
  304. package/dist/llms/rules/guide.js +10690 -0
  305. package/dist/llms/rules/installation.d.ts +2 -0
  306. package/dist/llms/rules/installation.js +1285 -0
  307. package/dist/llms/rules/routing.d.ts +2 -0
  308. package/dist/llms/rules/routing.js +1984 -0
  309. package/dist/llms/rules/setup-and-architecture.d.ts +2 -0
  310. package/dist/llms/rules/setup-and-architecture.js +920 -0
  311. package/package.json +142 -0
  312. package/src/Asset.tsx +219 -0
  313. package/src/CatchBoundary.tsx +120 -0
  314. package/src/ClientOnly.tsx +68 -0
  315. package/src/HeadContent.dev.tsx +46 -0
  316. package/src/HeadContent.tsx +22 -0
  317. package/src/Match.tsx +360 -0
  318. package/src/Matches.tsx +313 -0
  319. package/src/RouterProvider.tsx +92 -0
  320. package/src/SafeFragment.tsx +5 -0
  321. package/src/ScriptOnce.tsx +21 -0
  322. package/src/Scripts.tsx +80 -0
  323. package/src/ScrollRestoration.tsx +69 -0
  324. package/src/Transitioner.tsx +134 -0
  325. package/src/awaited.tsx +55 -0
  326. package/src/fileRoute.ts +313 -0
  327. package/src/headContentUtils.tsx +217 -0
  328. package/src/history.ts +9 -0
  329. package/src/index.dev.tsx +6 -0
  330. package/src/index.tsx +341 -0
  331. package/src/lazyRouteComponent.tsx +96 -0
  332. package/src/link.tsx +984 -0
  333. package/src/matchContext.tsx +8 -0
  334. package/src/not-found.tsx +43 -0
  335. package/src/renderRouteNotFound.tsx +35 -0
  336. package/src/route.tsx +740 -0
  337. package/src/router.ts +127 -0
  338. package/src/routerContext.tsx +4 -0
  339. package/src/scroll-restoration.tsx +45 -0
  340. package/src/ssr/RouterClient.tsx +22 -0
  341. package/src/ssr/RouterServer.tsx +9 -0
  342. package/src/ssr/client.ts +2 -0
  343. package/src/ssr/defaultRenderHandler.tsx +12 -0
  344. package/src/ssr/defaultStreamHandler.tsx +13 -0
  345. package/src/ssr/renderRouterToStream.tsx +90 -0
  346. package/src/ssr/renderRouterToString.tsx +36 -0
  347. package/src/ssr/serializer.ts +7 -0
  348. package/src/ssr/server.ts +6 -0
  349. package/src/structuralSharing.ts +47 -0
  350. package/src/typePrimitives.ts +84 -0
  351. package/src/useBlocker.tsx +320 -0
  352. package/src/useCanGoBack.ts +5 -0
  353. package/src/useLoaderData.tsx +91 -0
  354. package/src/useLoaderDeps.tsx +69 -0
  355. package/src/useLocation.tsx +52 -0
  356. package/src/useMatch.tsx +123 -0
  357. package/src/useNavigate.tsx +78 -0
  358. package/src/useParams.tsx +107 -0
  359. package/src/useRouteContext.ts +30 -0
  360. package/src/useRouter.tsx +25 -0
  361. package/src/useRouterState.tsx +86 -0
  362. package/src/useSearch.tsx +105 -0
  363. package/src/utils.ts +125 -0
@@ -0,0 +1,92 @@
1
+ import * as React from 'react'
2
+ import { Matches } from './Matches'
3
+ import { routerContext } from './routerContext'
4
+ import type {
5
+ AnyRouter,
6
+ RegisteredRouter,
7
+ RouterOptions,
8
+ } from '@tanstack/router-core'
9
+
10
+ /**
11
+ * Low-level provider that places the router into React context and optionally
12
+ * updates router options from props. Most apps should use `RouterProvider`.
13
+ */
14
+ export function RouterContextProvider<
15
+ TRouter extends AnyRouter = RegisteredRouter,
16
+ TDehydrated extends Record<string, any> = Record<string, any>,
17
+ >({
18
+ router,
19
+ children,
20
+ ...rest
21
+ }: RouterProps<TRouter, TDehydrated> & {
22
+ children: React.ReactNode
23
+ }) {
24
+ if (Object.keys(rest).length > 0) {
25
+ // Allow the router to update options on the router instance
26
+ router.update({
27
+ ...router.options,
28
+ ...rest,
29
+ context: {
30
+ ...router.options.context,
31
+ ...rest.context,
32
+ },
33
+ })
34
+ }
35
+
36
+ const provider = (
37
+ <routerContext.Provider value={router as AnyRouter}>
38
+ {children}
39
+ </routerContext.Provider>
40
+ )
41
+
42
+ if (router.options.Wrap) {
43
+ return <router.options.Wrap>{provider}</router.options.Wrap>
44
+ }
45
+
46
+ return provider
47
+ }
48
+
49
+ /**
50
+ * Top-level component that renders the active route matches and provides the
51
+ * router to the React tree via context.
52
+ *
53
+ * Accepts the same options as `createRouter` via props to update the router
54
+ * instance after creation.
55
+ *
56
+ * @link https://tanstack.com/router/latest/docs/framework/react/api/router/createRouterFunction
57
+ */
58
+ export function RouterProvider<
59
+ TRouter extends AnyRouter = RegisteredRouter,
60
+ TDehydrated extends Record<string, any> = Record<string, any>,
61
+ >({ router, ...rest }: RouterProps<TRouter, TDehydrated>) {
62
+ return (
63
+ <RouterContextProvider router={router} {...rest}>
64
+ <Matches />
65
+ </RouterContextProvider>
66
+ )
67
+ }
68
+
69
+ export type RouterProps<
70
+ TRouter extends AnyRouter = RegisteredRouter,
71
+ TDehydrated extends Record<string, any> = Record<string, any>,
72
+ > = Omit<
73
+ RouterOptions<
74
+ TRouter['routeTree'],
75
+ NonNullable<TRouter['options']['trailingSlash']>,
76
+ NonNullable<TRouter['options']['defaultStructuralSharing']>,
77
+ TRouter['history'],
78
+ TDehydrated
79
+ >,
80
+ 'context'
81
+ > & {
82
+ router: TRouter
83
+ context?: Partial<
84
+ RouterOptions<
85
+ TRouter['routeTree'],
86
+ NonNullable<TRouter['options']['trailingSlash']>,
87
+ NonNullable<TRouter['options']['defaultStructuralSharing']>,
88
+ TRouter['history'],
89
+ TDehydrated
90
+ >['context']
91
+ >
92
+ }
@@ -0,0 +1,5 @@
1
+ import * as React from 'react'
2
+
3
+ export function SafeFragment(props: any) {
4
+ return <>{props.children}</>
5
+ }
@@ -0,0 +1,21 @@
1
+ import { isServer } from '@tanstack/router-core/isServer'
2
+ import { useRouter } from './useRouter'
3
+
4
+ /**
5
+ * Server-only helper to emit a script tag exactly once during SSR.
6
+ */
7
+ export function ScriptOnce({ children }: { children: string }) {
8
+ const router = useRouter()
9
+ if (!(isServer ?? router.isServer)) {
10
+ return null
11
+ }
12
+
13
+ return (
14
+ <script
15
+ nonce={router.options.ssr?.nonce}
16
+ dangerouslySetInnerHTML={{
17
+ __html: children + ';document.currentScript.remove()',
18
+ }}
19
+ />
20
+ )
21
+ }
@@ -0,0 +1,80 @@
1
+ import { Asset } from './Asset'
2
+ import { useRouterState } from './useRouterState'
3
+ import { useRouter } from './useRouter'
4
+ import type { RouterManagedTag } from '@tanstack/router-core'
5
+
6
+ /**
7
+ * Render body script tags collected from route matches and SSR manifests.
8
+ * Should be placed near the end of the document body.
9
+ */
10
+ export const Scripts = () => {
11
+ const router = useRouter()
12
+ const nonce = router.options.ssr?.nonce
13
+ const assetScripts = useRouterState({
14
+ select: (state) => {
15
+ const assetScripts: Array<RouterManagedTag> = []
16
+ const manifest = router.ssr?.manifest
17
+
18
+ if (!manifest) {
19
+ return []
20
+ }
21
+
22
+ state.matches
23
+ .map((match) => router.looseRoutesById[match.routeId]!)
24
+ .forEach((route) =>
25
+ manifest.routes[route.id]?.assets
26
+ ?.filter((d) => d.tag === 'script')
27
+ .forEach((asset) => {
28
+ assetScripts.push({
29
+ tag: 'script',
30
+ attrs: { ...asset.attrs, nonce },
31
+ children: asset.children,
32
+ } as any)
33
+ }),
34
+ )
35
+
36
+ return assetScripts
37
+ },
38
+ structuralSharing: true as any,
39
+ })
40
+
41
+ const { scripts } = useRouterState({
42
+ select: (state) => ({
43
+ scripts: (
44
+ state.matches
45
+ .map((match) => match.scripts!)
46
+ .flat(1)
47
+ .filter(Boolean) as Array<RouterManagedTag>
48
+ ).map(({ children, ...script }) => ({
49
+ tag: 'script',
50
+ attrs: {
51
+ ...script,
52
+ suppressHydrationWarning: true,
53
+ nonce,
54
+ },
55
+ children,
56
+ })),
57
+ }),
58
+ structuralSharing: true as any,
59
+ })
60
+
61
+ let serverBufferedScript: RouterManagedTag | undefined = undefined
62
+
63
+ if (router.serverSsr) {
64
+ serverBufferedScript = router.serverSsr.takeBufferedScripts()
65
+ }
66
+
67
+ const allScripts = [...scripts, ...assetScripts] as Array<RouterManagedTag>
68
+
69
+ if (serverBufferedScript) {
70
+ allScripts.unshift(serverBufferedScript)
71
+ }
72
+
73
+ return (
74
+ <>
75
+ {allScripts.map((asset, i) => (
76
+ <Asset {...asset} key={`tsr-scripts-${asset.tag}-${i}`} />
77
+ ))}
78
+ </>
79
+ )
80
+ }
@@ -0,0 +1,69 @@
1
+ import {
2
+ defaultGetScrollRestorationKey,
3
+ getCssSelector,
4
+ scrollRestorationCache,
5
+ setupScrollRestoration,
6
+ } from '@tanstack/router-core'
7
+ import { useRouter } from './useRouter'
8
+ import type {
9
+ ParsedLocation,
10
+ ScrollRestorationEntry,
11
+ ScrollRestorationOptions,
12
+ } from '@tanstack/router-core'
13
+
14
+ function useScrollRestoration() {
15
+ const router = useRouter()
16
+ setupScrollRestoration(router, true)
17
+ }
18
+
19
+ /**
20
+ * @deprecated Use the `scrollRestoration` router option instead.
21
+ */
22
+ export function ScrollRestoration(_props: ScrollRestorationOptions) {
23
+ useScrollRestoration()
24
+
25
+ if (process.env.NODE_ENV === 'development') {
26
+ console.warn(
27
+ "The ScrollRestoration component is deprecated. Use createRouter's `scrollRestoration` option instead.",
28
+ )
29
+ }
30
+
31
+ return null
32
+ }
33
+
34
+ export function useElementScrollRestoration(
35
+ options: (
36
+ | {
37
+ id: string
38
+ getElement?: () => Window | Element | undefined | null
39
+ }
40
+ | {
41
+ id?: string
42
+ getElement: () => Window | Element | undefined | null
43
+ }
44
+ ) & {
45
+ getKey?: (location: ParsedLocation) => string
46
+ },
47
+ ): ScrollRestorationEntry | undefined {
48
+ useScrollRestoration()
49
+
50
+ const router = useRouter()
51
+ const getKey = options.getKey || defaultGetScrollRestorationKey
52
+
53
+ let elementSelector = ''
54
+
55
+ if (options.id) {
56
+ elementSelector = `[data-scroll-restoration-id="${options.id}"]`
57
+ } else {
58
+ const element = options.getElement?.()
59
+ if (!element) {
60
+ return
61
+ }
62
+ elementSelector =
63
+ element instanceof Window ? 'window' : getCssSelector(element)
64
+ }
65
+
66
+ const restoreKey = getKey(router.latestLocation)
67
+ const byKey = scrollRestorationCache?.state[restoreKey]
68
+ return byKey?.[elementSelector]
69
+ }
@@ -0,0 +1,134 @@
1
+ import * as React from 'react'
2
+ import {
3
+ getLocationChangeInfo,
4
+ handleHashScroll,
5
+ trimPathRight,
6
+ } from '@tanstack/router-core'
7
+ import { useLayoutEffect, usePrevious } from './utils'
8
+ import { useRouter } from './useRouter'
9
+ import { useRouterState } from './useRouterState'
10
+
11
+ export function Transitioner() {
12
+ const router = useRouter()
13
+ const mountLoadForRouter = React.useRef({ router, mounted: false })
14
+
15
+ const [isTransitioning, setIsTransitioning] = React.useState(false)
16
+ // Track pending state changes
17
+ const { hasPendingMatches, isLoading } = useRouterState({
18
+ select: (s) => ({
19
+ isLoading: s.isLoading,
20
+ hasPendingMatches: s.matches.some((d) => d.status === 'pending'),
21
+ }),
22
+ structuralSharing: true,
23
+ })
24
+
25
+ const previousIsLoading = usePrevious(isLoading)
26
+
27
+ const isAnyPending = isLoading || isTransitioning || hasPendingMatches
28
+ const previousIsAnyPending = usePrevious(isAnyPending)
29
+
30
+ const isPagePending = isLoading || hasPendingMatches
31
+ const previousIsPagePending = usePrevious(isPagePending)
32
+
33
+ router.startTransition = (fn: () => void) => {
34
+ setIsTransitioning(true)
35
+ React.startTransition(() => {
36
+ fn()
37
+ setIsTransitioning(false)
38
+ })
39
+ }
40
+
41
+ // Subscribe to location changes
42
+ // and try to load the new location
43
+ React.useEffect(() => {
44
+ const unsub = router.history.subscribe(router.load)
45
+
46
+ const nextLocation = router.buildLocation({
47
+ to: router.latestLocation.pathname,
48
+ search: true,
49
+ params: true,
50
+ hash: true,
51
+ state: true,
52
+ _includeValidateSearch: true,
53
+ })
54
+
55
+ // Check if the current URL matches the canonical form.
56
+ // Compare publicHref (browser-facing URL) for consistency with
57
+ // the server-side redirect check in router.beforeLoad.
58
+ if (
59
+ trimPathRight(router.latestLocation.publicHref) !==
60
+ trimPathRight(nextLocation.publicHref)
61
+ ) {
62
+ router.commitLocation({ ...nextLocation, replace: true })
63
+ }
64
+
65
+ return () => {
66
+ unsub()
67
+ }
68
+ }, [router, router.history])
69
+
70
+ // Try to load the initial location
71
+ useLayoutEffect(() => {
72
+ if (
73
+ // if we are hydrating from SSR, loading is triggered in ssr-client
74
+ (typeof window !== 'undefined' && router.ssr) ||
75
+ (mountLoadForRouter.current.router === router &&
76
+ mountLoadForRouter.current.mounted)
77
+ ) {
78
+ return
79
+ }
80
+ mountLoadForRouter.current = { router, mounted: true }
81
+
82
+ const tryLoad = async () => {
83
+ try {
84
+ await router.load()
85
+ } catch (err) {
86
+ console.error(err)
87
+ }
88
+ }
89
+
90
+ tryLoad()
91
+ }, [router])
92
+
93
+ useLayoutEffect(() => {
94
+ // The router was loading and now it's not
95
+ if (previousIsLoading && !isLoading) {
96
+ router.emit({
97
+ type: 'onLoad', // When the new URL has committed, when the new matches have been loaded into state.matches
98
+ ...getLocationChangeInfo(router.state),
99
+ })
100
+ }
101
+ }, [previousIsLoading, router, isLoading])
102
+
103
+ useLayoutEffect(() => {
104
+ // emit onBeforeRouteMount
105
+ if (previousIsPagePending && !isPagePending) {
106
+ router.emit({
107
+ type: 'onBeforeRouteMount',
108
+ ...getLocationChangeInfo(router.state),
109
+ })
110
+ }
111
+ }, [isPagePending, previousIsPagePending, router])
112
+
113
+ useLayoutEffect(() => {
114
+ if (previousIsAnyPending && !isAnyPending) {
115
+ const changeInfo = getLocationChangeInfo(router.state)
116
+ router.emit({
117
+ type: 'onResolved',
118
+ ...changeInfo,
119
+ })
120
+
121
+ router.__store.setState((s: typeof router.state) => ({
122
+ ...s,
123
+ status: 'idle',
124
+ resolvedLocation: s.location,
125
+ }))
126
+
127
+ if (changeInfo.hrefChanged) {
128
+ handleHashScroll(router)
129
+ }
130
+ }
131
+ }, [isAnyPending, previousIsAnyPending, router])
132
+
133
+ return null
134
+ }
@@ -0,0 +1,55 @@
1
+ import * as React from 'react'
2
+
3
+ import { TSR_DEFERRED_PROMISE, defer } from '@tanstack/router-core'
4
+ import { reactUse } from './utils'
5
+
6
+ export type AwaitOptions<T> = {
7
+ promise: Promise<T>
8
+ }
9
+
10
+ /** Suspend until a deferred promise resolves or rejects and return its data. */
11
+ export function useAwaited<T>({ promise: _promise }: AwaitOptions<T>): T {
12
+ if (reactUse) {
13
+ const data = reactUse(_promise)
14
+ return data
15
+ }
16
+ const promise = defer(_promise)
17
+
18
+ if (promise[TSR_DEFERRED_PROMISE].status === 'pending') {
19
+ throw promise
20
+ }
21
+
22
+ if (promise[TSR_DEFERRED_PROMISE].status === 'error') {
23
+ throw promise[TSR_DEFERRED_PROMISE].error
24
+ }
25
+
26
+ return promise[TSR_DEFERRED_PROMISE].data
27
+ }
28
+
29
+ /**
30
+ * Component that suspends on a deferred promise and renders its child with
31
+ * the resolved value. Optionally provides a Suspense fallback.
32
+ */
33
+ export function Await<T>(
34
+ props: AwaitOptions<T> & {
35
+ fallback?: React.ReactNode
36
+ children: (result: T) => React.ReactNode
37
+ },
38
+ ) {
39
+ const inner = <AwaitInner {...props} />
40
+ if (props.fallback) {
41
+ return <React.Suspense fallback={props.fallback}>{inner}</React.Suspense>
42
+ }
43
+ return inner
44
+ }
45
+
46
+ function AwaitInner<T>(
47
+ props: AwaitOptions<T> & {
48
+ fallback?: React.ReactNode
49
+ children: (result: T) => React.ReactNode
50
+ },
51
+ ): React.JSX.Element {
52
+ const data = useAwaited(props)
53
+
54
+ return props.children(data) as React.JSX.Element
55
+ }