@tanstack/solid-router 1.20.3-alpha.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 (385) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +29 -0
  3. package/dist/cjs/Asset.cjs +49 -0
  4. package/dist/cjs/Asset.cjs.map +1 -0
  5. package/dist/cjs/Asset.d.cts +2 -0
  6. package/dist/cjs/CatchBoundary.cjs +92 -0
  7. package/dist/cjs/CatchBoundary.cjs.map +1 -0
  8. package/dist/cjs/CatchBoundary.d.cts +11 -0
  9. package/dist/cjs/ClientOnly.cjs +36 -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 +146 -0
  13. package/dist/cjs/HeadContent.cjs.map +1 -0
  14. package/dist/cjs/HeadContent.d.cts +8 -0
  15. package/dist/cjs/Match.cjs +339 -0
  16. package/dist/cjs/Match.cjs.map +1 -0
  17. package/dist/cjs/Match.d.cts +8 -0
  18. package/dist/cjs/Matches.cjs +151 -0
  19. package/dist/cjs/Matches.cjs.map +1 -0
  20. package/dist/cjs/Matches.d.cts +24 -0
  21. package/dist/cjs/RouterProvider.cjs +45 -0
  22. package/dist/cjs/RouterProvider.cjs.map +1 -0
  23. package/dist/cjs/RouterProvider.d.cts +10 -0
  24. package/dist/cjs/SafeFragment.cjs +8 -0
  25. package/dist/cjs/SafeFragment.cjs.map +1 -0
  26. package/dist/cjs/SafeFragment.d.cts +1 -0
  27. package/dist/cjs/ScriptOnce.cjs +23 -0
  28. package/dist/cjs/ScriptOnce.cjs.map +1 -0
  29. package/dist/cjs/ScriptOnce.d.cts +5 -0
  30. package/dist/cjs/Scripts.cjs +48 -0
  31. package/dist/cjs/Scripts.cjs.map +1 -0
  32. package/dist/cjs/Scripts.d.cts +1 -0
  33. package/dist/cjs/ScrollRestoration.cjs +37 -0
  34. package/dist/cjs/ScrollRestoration.cjs.map +1 -0
  35. package/dist/cjs/ScrollRestoration.d.cts +14 -0
  36. package/dist/cjs/Transitioner.cjs +124 -0
  37. package/dist/cjs/Transitioner.cjs.map +1 -0
  38. package/dist/cjs/Transitioner.d.cts +1 -0
  39. package/dist/cjs/awaited.cjs +49 -0
  40. package/dist/cjs/awaited.cjs.map +1 -0
  41. package/dist/cjs/awaited.d.cts +11 -0
  42. package/dist/cjs/fileRoute.cjs +103 -0
  43. package/dist/cjs/fileRoute.cjs.map +1 -0
  44. package/dist/cjs/fileRoute.d.cts +54 -0
  45. package/dist/cjs/history.d.cts +8 -0
  46. package/dist/cjs/index.cjs +289 -0
  47. package/dist/cjs/index.cjs.map +1 -0
  48. package/dist/cjs/index.d.cts +52 -0
  49. package/dist/cjs/lazyRouteComponent.cjs +73 -0
  50. package/dist/cjs/lazyRouteComponent.cjs.map +1 -0
  51. package/dist/cjs/lazyRouteComponent.d.cts +2 -0
  52. package/dist/cjs/link.cjs +278 -0
  53. package/dist/cjs/link.cjs.map +1 -0
  54. package/dist/cjs/link.d.cts +44 -0
  55. package/dist/cjs/matchContext.cjs +25 -0
  56. package/dist/cjs/matchContext.cjs.map +1 -0
  57. package/dist/cjs/matchContext.d.cts +3 -0
  58. package/dist/cjs/not-found.cjs +42 -0
  59. package/dist/cjs/not-found.cjs.map +1 -0
  60. package/dist/cjs/not-found.d.cts +8 -0
  61. package/dist/cjs/renderRouteNotFound.cjs +23 -0
  62. package/dist/cjs/renderRouteNotFound.cjs.map +1 -0
  63. package/dist/cjs/renderRouteNotFound.d.cts +2 -0
  64. package/dist/cjs/route.cjs +236 -0
  65. package/dist/cjs/route.cjs.map +1 -0
  66. package/dist/cjs/route.d.cts +95 -0
  67. package/dist/cjs/router.cjs +22 -0
  68. package/dist/cjs/router.cjs.map +1 -0
  69. package/dist/cjs/router.d.cts +69 -0
  70. package/dist/cjs/routerContext.cjs +33 -0
  71. package/dist/cjs/routerContext.cjs.map +1 -0
  72. package/dist/cjs/routerContext.d.cts +8 -0
  73. package/dist/cjs/scroll-restoration.cjs +23 -0
  74. package/dist/cjs/scroll-restoration.cjs.map +1 -0
  75. package/dist/cjs/scroll-restoration.d.cts +1 -0
  76. package/dist/cjs/typePrimitives.d.cts +10 -0
  77. package/dist/cjs/useBlocker.cjs +165 -0
  78. package/dist/cjs/useBlocker.cjs.map +1 -0
  79. package/dist/cjs/useBlocker.d.cts +67 -0
  80. package/dist/cjs/useCanGoBack.cjs +8 -0
  81. package/dist/cjs/useCanGoBack.cjs.map +1 -0
  82. package/dist/cjs/useCanGoBack.d.cts +1 -0
  83. package/dist/cjs/useLoaderData.cjs +14 -0
  84. package/dist/cjs/useLoaderData.cjs.map +1 -0
  85. package/dist/cjs/useLoaderData.d.cts +8 -0
  86. package/dist/cjs/useLoaderDeps.cjs +17 -0
  87. package/dist/cjs/useLoaderDeps.cjs.map +1 -0
  88. package/dist/cjs/useLoaderDeps.d.cts +7 -0
  89. package/dist/cjs/useLocation.cjs +10 -0
  90. package/dist/cjs/useLocation.cjs.map +1 -0
  91. package/dist/cjs/useLocation.d.cts +7 -0
  92. package/dist/cjs/useMatch.cjs +39 -0
  93. package/dist/cjs/useMatch.cjs.map +1 -0
  94. package/dist/cjs/useMatch.d.cts +10 -0
  95. package/dist/cjs/useNavigate.cjs +46 -0
  96. package/dist/cjs/useNavigate.cjs.map +1 -0
  97. package/dist/cjs/useNavigate.d.cts +5 -0
  98. package/dist/cjs/useParams.cjs +15 -0
  99. package/dist/cjs/useParams.cjs.map +1 -0
  100. package/dist/cjs/useParams.d.cts +9 -0
  101. package/dist/cjs/useRouteContext.cjs +11 -0
  102. package/dist/cjs/useRouteContext.cjs.map +1 -0
  103. package/dist/cjs/useRouteContext.d.cts +4 -0
  104. package/dist/cjs/useRouter.cjs +29 -0
  105. package/dist/cjs/useRouter.cjs.map +1 -0
  106. package/dist/cjs/useRouter.d.cts +4 -0
  107. package/dist/cjs/useRouterState.cjs +16 -0
  108. package/dist/cjs/useRouterState.cjs.map +1 -0
  109. package/dist/cjs/useRouterState.d.cts +8 -0
  110. package/dist/cjs/useSearch.cjs +15 -0
  111. package/dist/cjs/useSearch.cjs.map +1 -0
  112. package/dist/cjs/useSearch.d.cts +9 -0
  113. package/dist/cjs/utils.cjs +58 -0
  114. package/dist/cjs/utils.cjs.map +1 -0
  115. package/dist/cjs/utils.d.cts +34 -0
  116. package/dist/esm/Asset.d.ts +2 -0
  117. package/dist/esm/Asset.js +49 -0
  118. package/dist/esm/Asset.js.map +1 -0
  119. package/dist/esm/CatchBoundary.d.ts +11 -0
  120. package/dist/esm/CatchBoundary.js +75 -0
  121. package/dist/esm/CatchBoundary.js.map +1 -0
  122. package/dist/esm/ClientOnly.d.ts +49 -0
  123. package/dist/esm/ClientOnly.js +19 -0
  124. package/dist/esm/ClientOnly.js.map +1 -0
  125. package/dist/esm/HeadContent.d.ts +8 -0
  126. package/dist/esm/HeadContent.js +129 -0
  127. package/dist/esm/HeadContent.js.map +1 -0
  128. package/dist/esm/Match.d.ts +8 -0
  129. package/dist/esm/Match.js +322 -0
  130. package/dist/esm/Match.js.map +1 -0
  131. package/dist/esm/Matches.d.ts +24 -0
  132. package/dist/esm/Matches.js +134 -0
  133. package/dist/esm/Matches.js.map +1 -0
  134. package/dist/esm/RouterProvider.d.ts +10 -0
  135. package/dist/esm/RouterProvider.js +45 -0
  136. package/dist/esm/RouterProvider.js.map +1 -0
  137. package/dist/esm/SafeFragment.d.ts +1 -0
  138. package/dist/esm/SafeFragment.js +8 -0
  139. package/dist/esm/SafeFragment.js.map +1 -0
  140. package/dist/esm/ScriptOnce.d.ts +5 -0
  141. package/dist/esm/ScriptOnce.js +23 -0
  142. package/dist/esm/ScriptOnce.js.map +1 -0
  143. package/dist/esm/Scripts.d.ts +1 -0
  144. package/dist/esm/Scripts.js +48 -0
  145. package/dist/esm/Scripts.js.map +1 -0
  146. package/dist/esm/ScrollRestoration.d.ts +14 -0
  147. package/dist/esm/ScrollRestoration.js +37 -0
  148. package/dist/esm/ScrollRestoration.js.map +1 -0
  149. package/dist/esm/Transitioner.d.ts +1 -0
  150. package/dist/esm/Transitioner.js +107 -0
  151. package/dist/esm/Transitioner.js.map +1 -0
  152. package/dist/esm/awaited.d.ts +11 -0
  153. package/dist/esm/awaited.js +32 -0
  154. package/dist/esm/awaited.js.map +1 -0
  155. package/dist/esm/fileRoute.d.ts +54 -0
  156. package/dist/esm/fileRoute.js +103 -0
  157. package/dist/esm/fileRoute.js.map +1 -0
  158. package/dist/esm/history.d.ts +8 -0
  159. package/dist/esm/index.d.ts +52 -0
  160. package/dist/esm/index.js +151 -0
  161. package/dist/esm/index.js.map +1 -0
  162. package/dist/esm/lazyRouteComponent.d.ts +2 -0
  163. package/dist/esm/lazyRouteComponent.js +73 -0
  164. package/dist/esm/lazyRouteComponent.js.map +1 -0
  165. package/dist/esm/link.d.ts +44 -0
  166. package/dist/esm/link.js +261 -0
  167. package/dist/esm/link.js.map +1 -0
  168. package/dist/esm/matchContext.d.ts +3 -0
  169. package/dist/esm/matchContext.js +8 -0
  170. package/dist/esm/matchContext.js.map +1 -0
  171. package/dist/esm/not-found.d.ts +8 -0
  172. package/dist/esm/not-found.js +42 -0
  173. package/dist/esm/not-found.js.map +1 -0
  174. package/dist/esm/renderRouteNotFound.d.ts +2 -0
  175. package/dist/esm/renderRouteNotFound.js +23 -0
  176. package/dist/esm/renderRouteNotFound.js.map +1 -0
  177. package/dist/esm/route.d.ts +95 -0
  178. package/dist/esm/route.js +236 -0
  179. package/dist/esm/route.js.map +1 -0
  180. package/dist/esm/router.d.ts +69 -0
  181. package/dist/esm/router.js +22 -0
  182. package/dist/esm/router.js.map +1 -0
  183. package/dist/esm/routerContext.d.ts +8 -0
  184. package/dist/esm/routerContext.js +16 -0
  185. package/dist/esm/routerContext.js.map +1 -0
  186. package/dist/esm/scroll-restoration.d.ts +1 -0
  187. package/dist/esm/scroll-restoration.js +23 -0
  188. package/dist/esm/scroll-restoration.js.map +1 -0
  189. package/dist/esm/typePrimitives.d.ts +10 -0
  190. package/dist/esm/useBlocker.d.ts +67 -0
  191. package/dist/esm/useBlocker.js +148 -0
  192. package/dist/esm/useBlocker.js.map +1 -0
  193. package/dist/esm/useCanGoBack.d.ts +1 -0
  194. package/dist/esm/useCanGoBack.js +8 -0
  195. package/dist/esm/useCanGoBack.js.map +1 -0
  196. package/dist/esm/useLoaderData.d.ts +8 -0
  197. package/dist/esm/useLoaderData.js +14 -0
  198. package/dist/esm/useLoaderData.js.map +1 -0
  199. package/dist/esm/useLoaderDeps.d.ts +7 -0
  200. package/dist/esm/useLoaderDeps.js +17 -0
  201. package/dist/esm/useLoaderDeps.js.map +1 -0
  202. package/dist/esm/useLocation.d.ts +7 -0
  203. package/dist/esm/useLocation.js +10 -0
  204. package/dist/esm/useLocation.js.map +1 -0
  205. package/dist/esm/useMatch.d.ts +10 -0
  206. package/dist/esm/useMatch.js +22 -0
  207. package/dist/esm/useMatch.js.map +1 -0
  208. package/dist/esm/useNavigate.d.ts +5 -0
  209. package/dist/esm/useNavigate.js +29 -0
  210. package/dist/esm/useNavigate.js.map +1 -0
  211. package/dist/esm/useParams.d.ts +9 -0
  212. package/dist/esm/useParams.js +15 -0
  213. package/dist/esm/useParams.js.map +1 -0
  214. package/dist/esm/useRouteContext.d.ts +4 -0
  215. package/dist/esm/useRouteContext.js +11 -0
  216. package/dist/esm/useRouteContext.js.map +1 -0
  217. package/dist/esm/useRouter.d.ts +4 -0
  218. package/dist/esm/useRouter.js +12 -0
  219. package/dist/esm/useRouter.js.map +1 -0
  220. package/dist/esm/useRouterState.d.ts +8 -0
  221. package/dist/esm/useRouterState.js +16 -0
  222. package/dist/esm/useRouterState.js.map +1 -0
  223. package/dist/esm/useSearch.d.ts +9 -0
  224. package/dist/esm/useSearch.js +15 -0
  225. package/dist/esm/useSearch.js.map +1 -0
  226. package/dist/esm/utils.d.ts +34 -0
  227. package/dist/esm/utils.js +41 -0
  228. package/dist/esm/utils.js.map +1 -0
  229. package/dist/source/Asset.d.ts +2 -0
  230. package/dist/source/Asset.jsx +23 -0
  231. package/dist/source/Asset.jsx.map +1 -0
  232. package/dist/source/CatchBoundary.d.ts +11 -0
  233. package/dist/source/CatchBoundary.jsx +43 -0
  234. package/dist/source/CatchBoundary.jsx.map +1 -0
  235. package/dist/source/ClientOnly.d.ts +49 -0
  236. package/dist/source/ClientOnly.jsx +51 -0
  237. package/dist/source/ClientOnly.jsx.map +1 -0
  238. package/dist/source/HeadContent.d.ts +8 -0
  239. package/dist/source/HeadContent.jsx +143 -0
  240. package/dist/source/HeadContent.jsx.map +1 -0
  241. package/dist/source/Match.d.ts +8 -0
  242. package/dist/source/Match.jsx +255 -0
  243. package/dist/source/Match.jsx.map +1 -0
  244. package/dist/source/Matches.d.ts +24 -0
  245. package/dist/source/Matches.jsx +103 -0
  246. package/dist/source/Matches.jsx.map +1 -0
  247. package/dist/source/RouterProvider.d.ts +10 -0
  248. package/dist/source/RouterProvider.jsx +27 -0
  249. package/dist/source/RouterProvider.jsx.map +1 -0
  250. package/dist/source/SafeFragment.d.ts +1 -0
  251. package/dist/source/SafeFragment.jsx +4 -0
  252. package/dist/source/SafeFragment.jsx.map +1 -0
  253. package/dist/source/ScriptOnce.d.ts +5 -0
  254. package/dist/source/ScriptOnce.jsx +17 -0
  255. package/dist/source/ScriptOnce.jsx.map +1 -0
  256. package/dist/source/Scripts.d.ts +1 -0
  257. package/dist/source/Scripts.jsx +49 -0
  258. package/dist/source/Scripts.jsx.map +1 -0
  259. package/dist/source/ScrollRestoration.d.ts +14 -0
  260. package/dist/source/ScrollRestoration.jsx +37 -0
  261. package/dist/source/ScrollRestoration.jsx.map +1 -0
  262. package/dist/source/Transitioner.d.ts +1 -0
  263. package/dist/source/Transitioner.jsx +102 -0
  264. package/dist/source/Transitioner.jsx.map +1 -0
  265. package/dist/source/awaited.d.ts +11 -0
  266. package/dist/source/awaited.jsx +19 -0
  267. package/dist/source/awaited.jsx.map +1 -0
  268. package/dist/source/fileRoute.d.ts +54 -0
  269. package/dist/source/fileRoute.js +98 -0
  270. package/dist/source/fileRoute.js.map +1 -0
  271. package/dist/source/history.d.ts +8 -0
  272. package/dist/source/history.js +2 -0
  273. package/dist/source/history.js.map +1 -0
  274. package/dist/source/index.d.ts +52 -0
  275. package/dist/source/index.jsx +43 -0
  276. package/dist/source/index.jsx.map +1 -0
  277. package/dist/source/lazyRouteComponent.d.ts +2 -0
  278. package/dist/source/lazyRouteComponent.jsx +83 -0
  279. package/dist/source/lazyRouteComponent.jsx.map +1 -0
  280. package/dist/source/link.d.ts +44 -0
  281. package/dist/source/link.jsx +335 -0
  282. package/dist/source/link.jsx.map +1 -0
  283. package/dist/source/matchContext.d.ts +3 -0
  284. package/dist/source/matchContext.jsx +5 -0
  285. package/dist/source/matchContext.jsx.map +1 -0
  286. package/dist/source/not-found.d.ts +8 -0
  287. package/dist/source/not-found.jsx +30 -0
  288. package/dist/source/not-found.jsx.map +1 -0
  289. package/dist/source/renderRouteNotFound.d.ts +2 -0
  290. package/dist/source/renderRouteNotFound.jsx +15 -0
  291. package/dist/source/renderRouteNotFound.jsx.map +1 -0
  292. package/dist/source/route.d.ts +96 -0
  293. package/dist/source/route.jsx +179 -0
  294. package/dist/source/route.jsx.map +1 -0
  295. package/dist/source/router.d.ts +70 -0
  296. package/dist/source/router.js +21 -0
  297. package/dist/source/router.js.map +1 -0
  298. package/dist/source/routerContext.d.ts +8 -0
  299. package/dist/source/routerContext.jsx +13 -0
  300. package/dist/source/routerContext.jsx.map +1 -0
  301. package/dist/source/scroll-restoration.d.ts +1 -0
  302. package/dist/source/scroll-restoration.jsx +16 -0
  303. package/dist/source/scroll-restoration.jsx.map +1 -0
  304. package/dist/source/typePrimitives.d.ts +10 -0
  305. package/dist/source/typePrimitives.js +2 -0
  306. package/dist/source/typePrimitives.js.map +1 -0
  307. package/dist/source/useBlocker.d.ts +67 -0
  308. package/dist/source/useBlocker.jsx +136 -0
  309. package/dist/source/useBlocker.jsx.map +1 -0
  310. package/dist/source/useCanGoBack.d.ts +1 -0
  311. package/dist/source/useCanGoBack.js +5 -0
  312. package/dist/source/useCanGoBack.js.map +1 -0
  313. package/dist/source/useLoaderData.d.ts +8 -0
  314. package/dist/source/useLoaderData.jsx +11 -0
  315. package/dist/source/useLoaderData.jsx.map +1 -0
  316. package/dist/source/useLoaderDeps.d.ts +7 -0
  317. package/dist/source/useLoaderDeps.jsx +11 -0
  318. package/dist/source/useLoaderDeps.jsx.map +1 -0
  319. package/dist/source/useLocation.d.ts +7 -0
  320. package/dist/source/useLocation.jsx +7 -0
  321. package/dist/source/useLocation.jsx.map +1 -0
  322. package/dist/source/useMatch.d.ts +10 -0
  323. package/dist/source/useMatch.jsx +19 -0
  324. package/dist/source/useMatch.jsx.map +1 -0
  325. package/dist/source/useNavigate.d.ts +5 -0
  326. package/dist/source/useNavigate.jsx +18 -0
  327. package/dist/source/useNavigate.jsx.map +1 -0
  328. package/dist/source/useParams.d.ts +9 -0
  329. package/dist/source/useParams.jsx +12 -0
  330. package/dist/source/useParams.jsx.map +1 -0
  331. package/dist/source/useRouteContext.d.ts +4 -0
  332. package/dist/source/useRouteContext.js +8 -0
  333. package/dist/source/useRouteContext.js.map +1 -0
  334. package/dist/source/useRouter.d.ts +4 -0
  335. package/dist/source/useRouter.jsx +9 -0
  336. package/dist/source/useRouter.jsx.map +1 -0
  337. package/dist/source/useRouterState.d.ts +8 -0
  338. package/dist/source/useRouterState.jsx +14 -0
  339. package/dist/source/useRouterState.jsx.map +1 -0
  340. package/dist/source/useSearch.d.ts +9 -0
  341. package/dist/source/useSearch.jsx +12 -0
  342. package/dist/source/useSearch.jsx.map +1 -0
  343. package/dist/source/utils.d.ts +34 -0
  344. package/dist/source/utils.js +59 -0
  345. package/dist/source/utils.js.map +1 -0
  346. package/package.json +80 -0
  347. package/src/Asset.tsx +24 -0
  348. package/src/CatchBoundary.tsx +78 -0
  349. package/src/ClientOnly.tsx +65 -0
  350. package/src/HeadContent.tsx +174 -0
  351. package/src/Match.tsx +357 -0
  352. package/src/Matches.tsx +243 -0
  353. package/src/RouterProvider.tsx +79 -0
  354. package/src/SafeFragment.tsx +3 -0
  355. package/src/ScriptOnce.tsx +30 -0
  356. package/src/Scripts.tsx +65 -0
  357. package/src/ScrollRestoration.tsx +69 -0
  358. package/src/Transitioner.tsx +140 -0
  359. package/src/awaited.tsx +40 -0
  360. package/src/fileRoute.ts +256 -0
  361. package/src/history.ts +9 -0
  362. package/src/index.tsx +374 -0
  363. package/src/lazyRouteComponent.tsx +110 -0
  364. package/src/link.tsx +597 -0
  365. package/src/matchContext.tsx +10 -0
  366. package/src/not-found.tsx +42 -0
  367. package/src/renderRouteNotFound.tsx +26 -0
  368. package/src/route.tsx +550 -0
  369. package/src/router.ts +112 -0
  370. package/src/routerContext.tsx +26 -0
  371. package/src/scroll-restoration.tsx +29 -0
  372. package/src/typePrimitives.ts +74 -0
  373. package/src/useBlocker.tsx +305 -0
  374. package/src/useCanGoBack.ts +5 -0
  375. package/src/useLoaderData.tsx +50 -0
  376. package/src/useLoaderDeps.tsx +46 -0
  377. package/src/useLocation.tsx +30 -0
  378. package/src/useMatch.tsx +96 -0
  379. package/src/useNavigate.tsx +40 -0
  380. package/src/useParams.tsx +71 -0
  381. package/src/useRouteContext.ts +31 -0
  382. package/src/useRouter.tsx +15 -0
  383. package/src/useRouterState.tsx +36 -0
  384. package/src/useSearch.tsx +71 -0
  385. package/src/utils.ts +79 -0
@@ -0,0 +1,96 @@
1
+ import * as Solid from 'solid-js'
2
+ import invariant from 'tiny-invariant'
3
+ import { useRouterState } from './useRouterState'
4
+ import { dummyMatchContext, matchContext } from './matchContext'
5
+ import type {
6
+ AnyRouter,
7
+ MakeRouteMatch,
8
+ MakeRouteMatchUnion,
9
+ RegisteredRouter,
10
+ StrictOrFrom,
11
+ ThrowConstraint,
12
+ ThrowOrOptional,
13
+ } from '@tanstack/router-core'
14
+
15
+ export interface UseMatchBaseOptions<
16
+ TRouter extends AnyRouter,
17
+ TFrom,
18
+ TStrict extends boolean,
19
+ TThrow extends boolean,
20
+ TSelected,
21
+ > {
22
+ select?: (
23
+ match: MakeRouteMatch<TRouter['routeTree'], TFrom, TStrict>,
24
+ ) => TSelected
25
+ shouldThrow?: TThrow
26
+ }
27
+
28
+ export type UseMatchRoute<out TFrom> = <
29
+ TRouter extends AnyRouter = RegisteredRouter,
30
+ TSelected = unknown,
31
+ >(
32
+ opts?: UseMatchBaseOptions<TRouter, TFrom, true, true, TSelected>,
33
+ ) => Solid.Accessor<UseMatchResult<TRouter, TFrom, true, TSelected>>
34
+
35
+ export type UseMatchOptions<
36
+ TRouter extends AnyRouter,
37
+ TFrom extends string | undefined,
38
+ TStrict extends boolean,
39
+ TThrow extends boolean,
40
+ TSelected,
41
+ > = StrictOrFrom<TRouter, TFrom, TStrict> &
42
+ UseMatchBaseOptions<TRouter, TFrom, TStrict, TThrow, TSelected>
43
+
44
+ export type UseMatchResult<
45
+ TRouter extends AnyRouter,
46
+ TFrom,
47
+ TStrict extends boolean,
48
+ TSelected,
49
+ > = unknown extends TSelected
50
+ ? TStrict extends true
51
+ ? MakeRouteMatch<TRouter['routeTree'], TFrom, TStrict>
52
+ : MakeRouteMatchUnion<TRouter>
53
+ : TSelected
54
+
55
+ export function useMatch<
56
+ TRouter extends AnyRouter = RegisteredRouter,
57
+ const TFrom extends string | undefined = undefined,
58
+ TStrict extends boolean = true,
59
+ TThrow extends boolean = true,
60
+ TSelected = unknown,
61
+ >(
62
+ opts: UseMatchOptions<
63
+ TRouter,
64
+ TFrom,
65
+ TStrict,
66
+ ThrowConstraint<TStrict, TThrow>,
67
+ TSelected
68
+ >,
69
+ ): Solid.Accessor<
70
+ ThrowOrOptional<UseMatchResult<TRouter, TFrom, TStrict, TSelected>, TThrow>
71
+ > {
72
+ const nearestMatchId = Solid.useContext(
73
+ opts.from ? dummyMatchContext : matchContext,
74
+ )
75
+
76
+ const matchSelection = useRouterState({
77
+ select: (state: any) => {
78
+ const match = state.matches.find((d: any) =>
79
+ opts.from ? opts.from === d.routeId : d.id === nearestMatchId(),
80
+ )
81
+
82
+ invariant(
83
+ !((opts.shouldThrow ?? true) && !match),
84
+ `Could not find ${opts.from ? `an active match from "${opts.from}"` : 'a nearest match!'}`,
85
+ )
86
+
87
+ if (match === undefined) {
88
+ return undefined
89
+ }
90
+
91
+ return opts.select ? opts.select(match) : match
92
+ },
93
+ } as any)
94
+
95
+ return matchSelection as any
96
+ }
@@ -0,0 +1,40 @@
1
+ import * as Solid from 'solid-js'
2
+ import { useRouter } from './useRouter'
3
+ import type {
4
+ AnyRouter,
5
+ FromPathOption,
6
+ NavigateOptions,
7
+ RegisteredRouter,
8
+ UseNavigateResult,
9
+ } from '@tanstack/router-core'
10
+
11
+ export function useNavigate<
12
+ TRouter extends AnyRouter = RegisteredRouter,
13
+ TDefaultFrom extends string = string,
14
+ >(_defaultOpts?: {
15
+ from?: FromPathOption<TRouter, TDefaultFrom>
16
+ }): UseNavigateResult<TDefaultFrom> {
17
+ const { navigate } = useRouter()
18
+
19
+ return ((options: NavigateOptions) => {
20
+ return navigate({ from: _defaultOpts?.from, ...options })
21
+ }) as UseNavigateResult<TDefaultFrom>
22
+ }
23
+
24
+ export function Navigate<
25
+ TRouter extends AnyRouter = RegisteredRouter,
26
+ const TFrom extends string = string,
27
+ const TTo extends string | undefined = undefined,
28
+ const TMaskFrom extends string = TFrom,
29
+ const TMaskTo extends string = '',
30
+ >(props: NavigateOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo>): null {
31
+ const { navigate } = useRouter()
32
+
33
+ Solid.onMount(() => {
34
+ navigate({
35
+ ...props,
36
+ })
37
+ })
38
+
39
+ return null
40
+ }
@@ -0,0 +1,71 @@
1
+ import { useMatch } from './useMatch'
2
+ import type { Accessor } from 'solid-js'
3
+ import type {
4
+ AnyRouter,
5
+ RegisteredRouter,
6
+ ResolveUseParams,
7
+ StrictOrFrom,
8
+ ThrowConstraint,
9
+ ThrowOrOptional,
10
+ UseParamsResult,
11
+ } from '@tanstack/router-core'
12
+
13
+ export interface UseParamsBaseOptions<
14
+ TRouter extends AnyRouter,
15
+ TFrom,
16
+ TStrict extends boolean,
17
+ TThrow extends boolean,
18
+ TSelected,
19
+ > {
20
+ select?: (params: ResolveUseParams<TRouter, TFrom, TStrict>) => TSelected
21
+ shouldThrow?: TThrow
22
+ }
23
+
24
+ export type UseParamsOptions<
25
+ TRouter extends AnyRouter,
26
+ TFrom extends string | undefined,
27
+ TStrict extends boolean,
28
+ TThrow extends boolean,
29
+ TSelected,
30
+ > = StrictOrFrom<TRouter, TFrom, TStrict> &
31
+ UseParamsBaseOptions<TRouter, TFrom, TStrict, TThrow, TSelected>
32
+
33
+ export type UseParamsRoute<out TFrom> = <
34
+ TRouter extends AnyRouter = RegisteredRouter,
35
+ TSelected = unknown,
36
+ >(
37
+ opts?: UseParamsBaseOptions<
38
+ TRouter,
39
+ TFrom,
40
+ /* TStrict */ true,
41
+ /* TThrow */ true,
42
+ TSelected
43
+ >,
44
+ ) => Accessor<UseParamsResult<TRouter, TFrom, true, TSelected>>
45
+
46
+ export function useParams<
47
+ TRouter extends AnyRouter = RegisteredRouter,
48
+ const TFrom extends string | undefined = undefined,
49
+ TStrict extends boolean = true,
50
+ TThrow extends boolean = true,
51
+ TSelected = unknown,
52
+ >(
53
+ opts: UseParamsOptions<
54
+ TRouter,
55
+ TFrom,
56
+ TStrict,
57
+ ThrowConstraint<TStrict, TThrow>,
58
+ TSelected
59
+ >,
60
+ ): Accessor<
61
+ ThrowOrOptional<UseParamsResult<TRouter, TFrom, TStrict, TSelected>, TThrow>
62
+ > {
63
+ return useMatch({
64
+ from: opts.from!,
65
+ strict: opts.strict,
66
+ shouldThrow: opts.shouldThrow,
67
+ select: (match: any) => {
68
+ return opts.select ? opts.select(match.params) : match.params
69
+ },
70
+ } as any) as any
71
+ }
@@ -0,0 +1,31 @@
1
+ import { useMatch } from './useMatch'
2
+ import type { Accessor } from 'solid-js'
3
+ import type {
4
+ AnyRouter,
5
+ RegisteredRouter,
6
+ UseRouteContextBaseOptions,
7
+ UseRouteContextOptions,
8
+ UseRouteContextResult,
9
+ } from '@tanstack/router-core'
10
+
11
+ export type UseRouteContextRoute<out TFrom> = <
12
+ TRouter extends AnyRouter = RegisteredRouter,
13
+ TSelected = unknown,
14
+ >(
15
+ opts?: UseRouteContextBaseOptions<TRouter, TFrom, true, TSelected>,
16
+ ) => Accessor<UseRouteContextResult<TRouter, TFrom, true, TSelected>>
17
+
18
+ export function useRouteContext<
19
+ TRouter extends AnyRouter = RegisteredRouter,
20
+ const TFrom extends string | undefined = undefined,
21
+ TStrict extends boolean = true,
22
+ TSelected = unknown,
23
+ >(
24
+ opts: UseRouteContextOptions<TRouter, TFrom, TStrict, TSelected>,
25
+ ): Accessor<UseRouteContextResult<TRouter, TFrom, TStrict, TSelected>> {
26
+ return useMatch({
27
+ ...(opts as any),
28
+ select: (match) =>
29
+ opts.select ? opts.select(match.context) : match.context,
30
+ }) as any
31
+ }
@@ -0,0 +1,15 @@
1
+ import * as Solid from 'solid-js'
2
+ import warning from 'tiny-warning'
3
+ import { getRouterContext } from './routerContext'
4
+ import type { AnyRouter, RegisteredRouter } from '@tanstack/router-core'
5
+
6
+ export function useRouter<TRouter extends AnyRouter = RegisteredRouter>(opts?: {
7
+ warn?: boolean
8
+ }): TRouter {
9
+ const value = Solid.useContext(getRouterContext() as any)
10
+ warning(
11
+ !((opts?.warn ?? true) && !value),
12
+ 'useRouter must be used inside a <RouterProvider> component!',
13
+ )
14
+ return value as any
15
+ }
@@ -0,0 +1,36 @@
1
+ import { useStore } from '@tanstack/solid-store'
2
+ import { useRouter } from './useRouter'
3
+ import type {
4
+ AnyRouter,
5
+ RegisteredRouter,
6
+ RouterState,
7
+ } from '@tanstack/router-core'
8
+ import type { Accessor } from 'solid-js'
9
+
10
+ export type UseRouterStateOptions<TRouter extends AnyRouter, TSelected> = {
11
+ router?: TRouter
12
+ select?: (state: RouterState<TRouter['routeTree']>) => TSelected
13
+ }
14
+
15
+ export type UseRouterStateResult<
16
+ TRouter extends AnyRouter,
17
+ TSelected,
18
+ > = unknown extends TSelected ? RouterState<TRouter['routeTree']> : TSelected
19
+
20
+ export function useRouterState<
21
+ TRouter extends AnyRouter = RegisteredRouter,
22
+ TSelected = unknown,
23
+ >(
24
+ opts?: UseRouterStateOptions<TRouter, TSelected>,
25
+ ): Accessor<UseRouterStateResult<TRouter, TSelected>> {
26
+ const contextRouter = useRouter<TRouter>({
27
+ warn: opts?.router === undefined,
28
+ })
29
+ const router = opts?.router || contextRouter
30
+
31
+ return useStore(router.__store, (state) => {
32
+ if (opts?.select) return opts.select(state)
33
+
34
+ return state
35
+ }) as Accessor<UseRouterStateResult<TRouter, TSelected>>
36
+ }
@@ -0,0 +1,71 @@
1
+ import { useMatch } from './useMatch'
2
+ import type { Accessor } from 'solid-js'
3
+ import type {
4
+ AnyRouter,
5
+ RegisteredRouter,
6
+ ResolveUseSearch,
7
+ StrictOrFrom,
8
+ ThrowConstraint,
9
+ ThrowOrOptional,
10
+ UseSearchResult,
11
+ } from '@tanstack/router-core'
12
+
13
+ export interface UseSearchBaseOptions<
14
+ TRouter extends AnyRouter,
15
+ TFrom,
16
+ TStrict extends boolean,
17
+ TThrow extends boolean,
18
+ TSelected,
19
+ > {
20
+ select?: (state: ResolveUseSearch<TRouter, TFrom, TStrict>) => TSelected
21
+ shouldThrow?: TThrow
22
+ }
23
+
24
+ export type UseSearchOptions<
25
+ TRouter extends AnyRouter,
26
+ TFrom,
27
+ TStrict extends boolean,
28
+ TThrow extends boolean,
29
+ TSelected,
30
+ > = StrictOrFrom<TRouter, TFrom, TStrict> &
31
+ UseSearchBaseOptions<TRouter, TFrom, TStrict, TThrow, TSelected>
32
+
33
+ export type UseSearchRoute<out TFrom> = <
34
+ TRouter extends AnyRouter = RegisteredRouter,
35
+ TSelected = unknown,
36
+ >(
37
+ opts?: UseSearchBaseOptions<
38
+ TRouter,
39
+ TFrom,
40
+ /* TStrict */ true,
41
+ /* TThrow */ true,
42
+ TSelected
43
+ >,
44
+ ) => Accessor<UseSearchResult<TRouter, TFrom, true, TSelected>>
45
+
46
+ export function useSearch<
47
+ TRouter extends AnyRouter = RegisteredRouter,
48
+ const TFrom extends string | undefined = undefined,
49
+ TStrict extends boolean = true,
50
+ TThrow extends boolean = true,
51
+ TSelected = unknown,
52
+ >(
53
+ opts: UseSearchOptions<
54
+ TRouter,
55
+ TFrom,
56
+ TStrict,
57
+ ThrowConstraint<TStrict, TThrow>,
58
+ TSelected
59
+ >,
60
+ ): Accessor<
61
+ ThrowOrOptional<UseSearchResult<TRouter, TFrom, TStrict, TSelected>, TThrow>
62
+ > {
63
+ return useMatch({
64
+ from: opts.from!,
65
+ strict: opts.strict,
66
+ shouldThrow: opts.shouldThrow,
67
+ select: (match: any) => {
68
+ return opts.select ? opts.select(match.search) : match.search
69
+ },
70
+ }) as any
71
+ }
package/src/utils.ts ADDED
@@ -0,0 +1,79 @@
1
+ import * as Solid from 'solid-js'
2
+
3
+ export const useLayoutEffect =
4
+ typeof window !== 'undefined' ? Solid.createRenderEffect : Solid.createEffect
5
+
6
+ export const usePrevious = (fn: () => boolean) => {
7
+ return Solid.createMemo(
8
+ (
9
+ prev: { current: boolean | null; previous: boolean | null } = {
10
+ current: null,
11
+ previous: null,
12
+ },
13
+ ) => {
14
+ const current = fn()
15
+
16
+ if (prev.current !== current) {
17
+ prev.previous = prev.current
18
+ prev.current = current
19
+ }
20
+
21
+ return prev
22
+ },
23
+ )
24
+ }
25
+
26
+ /**
27
+ * React hook to wrap `IntersectionObserver`.
28
+ *
29
+ * This hook will create an `IntersectionObserver` and observe the ref passed to it.
30
+ *
31
+ * When the intersection changes, the callback will be called with the `IntersectionObserverEntry`.
32
+ *
33
+ * @param ref - The ref to observe
34
+ * @param intersectionObserverOptions - The options to pass to the IntersectionObserver
35
+ * @param options - The options to pass to the hook
36
+ * @param callback - The callback to call when the intersection changes
37
+ * @returns The IntersectionObserver instance
38
+ * @example
39
+ * ```tsx
40
+ * const MyComponent = () => {
41
+ * const ref = React.useRef<HTMLDivElement>(null)
42
+ * useIntersectionObserver(
43
+ * ref,
44
+ * (entry) => { doSomething(entry) },
45
+ * { rootMargin: '10px' },
46
+ * { disabled: false }
47
+ * )
48
+ * return <div ref={ref} />
49
+ * ```
50
+ */
51
+ export function useIntersectionObserver<T extends Element>(
52
+ ref: Solid.Accessor<T | null>,
53
+ callback: (entry: IntersectionObserverEntry | undefined) => void,
54
+ intersectionObserverOptions: IntersectionObserverInit = {},
55
+ options: { disabled?: boolean } = {},
56
+ ): Solid.Accessor<IntersectionObserver | null> {
57
+ const isIntersectionObserverAvailable =
58
+ typeof IntersectionObserver === 'function'
59
+ let observerRef: IntersectionObserver | null = null
60
+
61
+ Solid.createEffect(() => {
62
+ const r = ref()
63
+ if (!r || !isIntersectionObserverAvailable || options.disabled) {
64
+ return
65
+ }
66
+
67
+ observerRef = new IntersectionObserver(([entry]) => {
68
+ callback(entry)
69
+ }, intersectionObserverOptions)
70
+
71
+ observerRef.observe(r)
72
+
73
+ Solid.onCleanup(() => {
74
+ observerRef?.disconnect()
75
+ })
76
+ })
77
+
78
+ return () => observerRef
79
+ }