@bleedingdev/modern-js-renderer-solid 0.0.0-bootstrap → 3.9.3-ultramodern.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 (296) hide show
  1. package/dist/esm/actions.js +283 -0
  2. package/dist/esm/application-router.js +25 -0
  3. package/dist/esm/client.js +49 -0
  4. package/dist/esm/entry-application.js +60 -0
  5. package/dist/esm/entry-client.js +23 -0
  6. package/dist/esm/federation-context.js +25 -0
  7. package/dist/esm/federation-ssr.js +84 -0
  8. package/dist/esm/federation.js +83 -0
  9. package/dist/esm/i18n/I18nProvider.js +33 -0
  10. package/dist/esm/i18n/LocalizedLink.js +74 -0
  11. package/dist/esm/i18n/context.js +3 -0
  12. package/dist/esm/i18n/index.js +8 -0
  13. package/dist/esm/i18n/languageSync.js +50 -0
  14. package/dist/esm/i18n/types.js +0 -0
  15. package/dist/esm/i18n/useI18n.js +74 -0
  16. package/dist/esm/index.js +58 -0
  17. package/dist/esm/manifest.js +150 -0
  18. package/dist/esm/route-completion.js +150 -0
  19. package/dist/esm/route-data-error.js +108 -0
  20. package/dist/esm/router-binding/Asset.js +201 -0
  21. package/dist/esm/router-binding/CatchBoundary.js +94 -0
  22. package/dist/esm/router-binding/ClientOnly.js +26 -0
  23. package/dist/esm/router-binding/HeadContent.js +8 -0
  24. package/dist/esm/router-binding/LICENSE +21 -0
  25. package/dist/esm/router-binding/Match.js +319 -0
  26. package/dist/esm/router-binding/Matches.js +117 -0
  27. package/dist/esm/router-binding/PROVENANCE.json +94 -0
  28. package/dist/esm/router-binding/RouterProvider.js +51 -0
  29. package/dist/esm/router-binding/SafeFragment.js +5 -0
  30. package/dist/esm/router-binding/ScriptOnce.js +15 -0
  31. package/dist/esm/router-binding/Scripts.js +30 -0
  32. package/dist/esm/router-binding/ScrollRestoration.js +16 -0
  33. package/dist/esm/router-binding/Transitioner.js +103 -0
  34. package/dist/esm/router-binding/awaited.js +48 -0
  35. package/dist/esm/router-binding/fileRoute.js +83 -0
  36. package/dist/esm/router-binding/flightData.js +23 -0
  37. package/dist/esm/router-binding/headContentUtils.js +162 -0
  38. package/dist/esm/router-binding/history.js +0 -0
  39. package/dist/esm/router-binding/index.js +35 -0
  40. package/dist/esm/router-binding/lazyRouteComponent.js +30 -0
  41. package/dist/esm/router-binding/link.js +389 -0
  42. package/dist/esm/router-binding/matchContext.js +7 -0
  43. package/dist/esm/router-binding/nonRouteComponentContext.js +13 -0
  44. package/dist/esm/router-binding/not-found.js +35 -0
  45. package/dist/esm/router-binding/publicMatchData.js +447 -0
  46. package/dist/esm/router-binding/registryTransfer.js +210 -0
  47. package/dist/esm/router-binding/renderRouteNotFound.js +23 -0
  48. package/dist/esm/router-binding/route.js +143 -0
  49. package/dist/esm/router-binding/router.js +13 -0
  50. package/dist/esm/router-binding/routerContext.js +3 -0
  51. package/dist/esm/router-binding/routerStores.js +50 -0
  52. package/dist/esm/router-binding/scroll-restoration.js +13 -0
  53. package/dist/esm/router-binding/typePrimitives.js +0 -0
  54. package/dist/esm/router-binding/useBlocker.js +152 -0
  55. package/dist/esm/router-binding/useCanGoBack.js +7 -0
  56. package/dist/esm/router-binding/useLoaderData.js +9 -0
  57. package/dist/esm/router-binding/useLoaderDeps.js +8 -0
  58. package/dist/esm/router-binding/useLocation.js +14 -0
  59. package/dist/esm/router-binding/useMatch.js +28 -0
  60. package/dist/esm/router-binding/useNavigate.js +19 -0
  61. package/dist/esm/router-binding/useParams.js +13 -0
  62. package/dist/esm/router-binding/useRouteContext.js +8 -0
  63. package/dist/esm/router-binding/useRouter.js +10 -0
  64. package/dist/esm/router-binding/useRouterState.js +19 -0
  65. package/dist/esm/router-binding/useSearch.js +13 -0
  66. package/dist/esm/router-binding/utils.js +23 -0
  67. package/dist/esm/router.js +187 -0
  68. package/dist/esm-node/actions.js +263 -0
  69. package/dist/esm-node/application-router.js +25 -0
  70. package/dist/esm-node/client.js +49 -0
  71. package/dist/esm-node/entry-application.js +110 -0
  72. package/dist/esm-node/entry-client.js +23 -0
  73. package/dist/esm-node/entry-server.js +47 -0
  74. package/dist/esm-node/federation-context.js +25 -0
  75. package/dist/esm-node/federation-ssr.js +84 -0
  76. package/dist/esm-node/federation.js +83 -0
  77. package/dist/esm-node/i18n/I18nProvider.js +42 -0
  78. package/dist/esm-node/i18n/LocalizedLink.js +142 -0
  79. package/dist/esm-node/i18n/context.js +3 -0
  80. package/dist/esm-node/i18n/index.js +8 -0
  81. package/dist/esm-node/i18n/languageSync.js +50 -0
  82. package/dist/esm-node/i18n/types.js +1 -0
  83. package/dist/esm-node/i18n/useI18n.js +74 -0
  84. package/dist/esm-node/index.js +58 -0
  85. package/dist/esm-node/manifest.js +150 -0
  86. package/dist/esm-node/native-promise-serialization.js +113 -0
  87. package/dist/esm-node/plugin/compiler.js +209 -0
  88. package/dist/esm-node/plugin/create.js +235 -0
  89. package/dist/esm-node/plugin/index.js +73 -0
  90. package/dist/esm-node/plugin/profile.js +52 -0
  91. package/dist/esm-node/route-completion.js +160 -0
  92. package/dist/esm-node/route-data-error.js +108 -0
  93. package/dist/esm-node/router-binding/Asset.js +171 -0
  94. package/dist/esm-node/router-binding/CatchBoundary.js +136 -0
  95. package/dist/esm-node/router-binding/ClientOnly.js +46 -0
  96. package/dist/esm-node/router-binding/HeadContent.js +8 -0
  97. package/dist/esm-node/router-binding/LICENSE +21 -0
  98. package/dist/esm-node/router-binding/Match.js +660 -0
  99. package/dist/esm-node/router-binding/Matches.js +161 -0
  100. package/dist/esm-node/router-binding/PROVENANCE.json +94 -0
  101. package/dist/esm-node/router-binding/RouterProvider.js +87 -0
  102. package/dist/esm-node/router-binding/SafeFragment.js +5 -0
  103. package/dist/esm-node/router-binding/ScriptOnce.js +16 -0
  104. package/dist/esm-node/router-binding/Scripts.js +49 -0
  105. package/dist/esm-node/router-binding/ScrollRestoration.js +16 -0
  106. package/dist/esm-node/router-binding/Transitioner.js +103 -0
  107. package/dist/esm-node/router-binding/awaited.js +75 -0
  108. package/dist/esm-node/router-binding/fileRoute.js +83 -0
  109. package/dist/esm-node/router-binding/flightData.js +23 -0
  110. package/dist/esm-node/router-binding/headContentUtils.js +162 -0
  111. package/dist/esm-node/router-binding/history.js +1 -0
  112. package/dist/esm-node/router-binding/index.js +35 -0
  113. package/dist/esm-node/router-binding/lazyRouteComponent.js +30 -0
  114. package/dist/esm-node/router-binding/link.js +399 -0
  115. package/dist/esm-node/router-binding/matchContext.js +7 -0
  116. package/dist/esm-node/router-binding/nonRouteComponentContext.js +22 -0
  117. package/dist/esm-node/router-binding/not-found.js +49 -0
  118. package/dist/esm-node/router-binding/publicMatchData.js +447 -0
  119. package/dist/esm-node/router-binding/registryTransfer.js +210 -0
  120. package/dist/esm-node/router-binding/renderRouteNotFound.js +22 -0
  121. package/dist/esm-node/router-binding/route.js +162 -0
  122. package/dist/esm-node/router-binding/router.js +13 -0
  123. package/dist/esm-node/router-binding/routerContext.js +3 -0
  124. package/dist/esm-node/router-binding/routerStores.js +50 -0
  125. package/dist/esm-node/router-binding/scroll-restoration.js +12 -0
  126. package/dist/esm-node/router-binding/typePrimitives.js +1 -0
  127. package/dist/esm-node/router-binding/useBlocker.js +152 -0
  128. package/dist/esm-node/router-binding/useCanGoBack.js +7 -0
  129. package/dist/esm-node/router-binding/useLoaderData.js +9 -0
  130. package/dist/esm-node/router-binding/useLoaderDeps.js +8 -0
  131. package/dist/esm-node/router-binding/useLocation.js +14 -0
  132. package/dist/esm-node/router-binding/useMatch.js +28 -0
  133. package/dist/esm-node/router-binding/useNavigate.js +19 -0
  134. package/dist/esm-node/router-binding/useParams.js +13 -0
  135. package/dist/esm-node/router-binding/useRouteContext.js +8 -0
  136. package/dist/esm-node/router-binding/useRouter.js +10 -0
  137. package/dist/esm-node/router-binding/useRouterState.js +19 -0
  138. package/dist/esm-node/router-binding/useSearch.js +13 -0
  139. package/dist/esm-node/router-binding/utils.js +23 -0
  140. package/dist/esm-node/router.js +187 -0
  141. package/dist/esm-node/server.js +396 -0
  142. package/dist/types/actions.d.ts +45 -0
  143. package/dist/types/application-router.d.ts +5 -0
  144. package/dist/types/client.d.ts +23 -0
  145. package/dist/types/entry-application.d.ts +10 -0
  146. package/dist/types/entry-client.d.ts +5 -0
  147. package/dist/types/entry-server.d.ts +5 -0
  148. package/dist/types/federation-context.d.ts +16 -0
  149. package/dist/types/federation-ssr.d.ts +21 -0
  150. package/dist/types/federation.d.ts +30 -0
  151. package/dist/types/i18n/I18nProvider.d.ts +21 -0
  152. package/dist/types/i18n/LocalizedLink.d.ts +43 -0
  153. package/dist/types/i18n/context.d.ts +11 -0
  154. package/dist/types/i18n/index.d.ts +9 -0
  155. package/dist/types/i18n/languageSync.d.ts +31 -0
  156. package/dist/types/i18n/types.d.ts +33 -0
  157. package/dist/types/i18n/useI18n.d.ts +24 -0
  158. package/dist/types/index.d.ts +41 -0
  159. package/dist/types/manifest.d.ts +55 -0
  160. package/dist/types/native-promise-serialization.d.ts +9 -0
  161. package/dist/types/plugin/compiler.d.ts +6 -0
  162. package/dist/types/plugin/create.d.ts +21 -0
  163. package/dist/types/plugin/index.d.ts +3 -0
  164. package/dist/types/plugin/lazy-modules.d.cts +15 -0
  165. package/dist/types/plugin/preserve-import-loader.d.cts +3 -0
  166. package/dist/types/plugin/profile.d.ts +2 -0
  167. package/dist/types/plugin/solid-loader.d.cts +2 -0
  168. package/dist/types/plugin/svg-component-template.d.cts +6 -0
  169. package/dist/types/route-completion.d.ts +21 -0
  170. package/dist/types/route-data-error.d.ts +17 -0
  171. package/dist/types/router-binding/Asset.d.ts +3 -0
  172. package/dist/types/router-binding/CatchBoundary.d.ts +13 -0
  173. package/dist/types/router-binding/ClientOnly.d.ts +31 -0
  174. package/dist/types/router-binding/HeadContent.d.ts +13 -0
  175. package/dist/types/router-binding/Match.d.ts +6 -0
  176. package/dist/types/router-binding/Matches.d.ts +26 -0
  177. package/dist/types/router-binding/RouterProvider.d.ts +10 -0
  178. package/dist/types/router-binding/SafeFragment.d.ts +2 -0
  179. package/dist/types/router-binding/ScriptOnce.d.ts +6 -0
  180. package/dist/types/router-binding/Scripts.d.ts +2 -0
  181. package/dist/types/router-binding/ScrollRestoration.d.ts +14 -0
  182. package/dist/types/router-binding/Transitioner.d.ts +2 -0
  183. package/dist/types/router-binding/awaited.d.ts +11 -0
  184. package/dist/types/router-binding/fileRoute.d.ts +54 -0
  185. package/dist/types/router-binding/flightData.d.ts +38 -0
  186. package/dist/types/router-binding/headContentUtils.d.ts +15 -0
  187. package/dist/types/router-binding/history.d.ts +8 -0
  188. package/dist/types/router-binding/index.d.ts +45 -0
  189. package/dist/types/router-binding/lazyRouteComponent.d.ts +2 -0
  190. package/dist/types/router-binding/link.d.ts +43 -0
  191. package/dist/types/router-binding/matchContext.d.ts +7 -0
  192. package/dist/types/router-binding/nonRouteComponentContext.d.ts +5 -0
  193. package/dist/types/router-binding/not-found.d.ts +11 -0
  194. package/dist/types/router-binding/publicMatchData.d.ts +19 -0
  195. package/dist/types/router-binding/registryTransfer.d.ts +47 -0
  196. package/dist/types/router-binding/renderRouteNotFound.d.ts +11 -0
  197. package/dist/types/router-binding/route.d.ts +105 -0
  198. package/dist/types/router-binding/router.d.ts +70 -0
  199. package/dist/types/router-binding/routerContext.d.ts +3 -0
  200. package/dist/types/router-binding/routerStores.d.ts +2 -0
  201. package/dist/types/router-binding/scroll-restoration.d.ts +2 -0
  202. package/dist/types/router-binding/typePrimitives.d.ts +10 -0
  203. package/dist/types/router-binding/useBlocker.d.ts +70 -0
  204. package/dist/types/router-binding/useCanGoBack.d.ts +2 -0
  205. package/dist/types/router-binding/useLoaderData.d.ts +8 -0
  206. package/dist/types/router-binding/useLoaderDeps.d.ts +8 -0
  207. package/dist/types/router-binding/useLocation.d.ts +7 -0
  208. package/dist/types/router-binding/useMatch.d.ts +10 -0
  209. package/dist/types/router-binding/useNavigate.d.ts +5 -0
  210. package/dist/types/router-binding/useParams.d.ts +9 -0
  211. package/dist/types/router-binding/useRouteContext.d.ts +4 -0
  212. package/dist/types/router-binding/useRouter.d.ts +4 -0
  213. package/dist/types/router-binding/useRouterState.d.ts +8 -0
  214. package/dist/types/router-binding/useSearch.d.ts +9 -0
  215. package/dist/types/router-binding/utils.d.ts +25 -0
  216. package/dist/types/router.d.ts +31 -0
  217. package/dist/types/server.d.ts +47 -0
  218. package/package.json +118 -4
  219. package/src/actions.tsx +437 -0
  220. package/src/application-router.tsx +41 -0
  221. package/src/client.ts +106 -0
  222. package/src/entry-application.tsx +73 -0
  223. package/src/entry-client.tsx +48 -0
  224. package/src/entry-server.tsx +85 -0
  225. package/src/federation-context.ts +47 -0
  226. package/src/federation-ssr.ts +117 -0
  227. package/src/federation.tsx +193 -0
  228. package/src/i18n/I18nProvider.tsx +54 -0
  229. package/src/i18n/LocalizedLink.tsx +122 -0
  230. package/src/i18n/context.ts +13 -0
  231. package/src/i18n/index.ts +35 -0
  232. package/src/i18n/languageSync.ts +113 -0
  233. package/src/i18n/types.ts +35 -0
  234. package/src/i18n/useI18n.ts +121 -0
  235. package/src/index.ts +41 -0
  236. package/src/manifest.ts +337 -0
  237. package/src/native-promise-serialization.ts +167 -0
  238. package/src/plugin/compiler.ts +320 -0
  239. package/src/plugin/create.ts +270 -0
  240. package/src/plugin/index.ts +72 -0
  241. package/src/plugin/lazy-modules.cjs +146 -0
  242. package/src/plugin/preserve-import-loader.cjs +46 -0
  243. package/src/plugin/profile.ts +42 -0
  244. package/src/plugin/solid-loader.cjs +83 -0
  245. package/src/plugin/svg-component-template.cjs +19 -0
  246. package/src/route-completion.tsx +222 -0
  247. package/src/route-data-error.ts +175 -0
  248. package/src/router-binding/Asset.tsx +283 -0
  249. package/src/router-binding/CatchBoundary.tsx +130 -0
  250. package/src/router-binding/ClientOnly.tsx +76 -0
  251. package/src/router-binding/HeadContent.tsx +23 -0
  252. package/src/router-binding/LICENSE +21 -0
  253. package/src/router-binding/Match.tsx +397 -0
  254. package/src/router-binding/Matches.tsx +242 -0
  255. package/src/router-binding/PROVENANCE.json +94 -0
  256. package/src/router-binding/RouterProvider.tsx +129 -0
  257. package/src/router-binding/SafeFragment.tsx +5 -0
  258. package/src/router-binding/ScriptOnce.tsx +23 -0
  259. package/src/router-binding/Scripts.tsx +44 -0
  260. package/src/router-binding/ScrollRestoration.tsx +49 -0
  261. package/src/router-binding/Transitioner.tsx +172 -0
  262. package/src/router-binding/awaited.tsx +71 -0
  263. package/src/router-binding/fileRoute.ts +268 -0
  264. package/src/router-binding/flightData.ts +90 -0
  265. package/src/router-binding/headContentUtils.tsx +290 -0
  266. package/src/router-binding/history.ts +9 -0
  267. package/src/router-binding/index.tsx +318 -0
  268. package/src/router-binding/lazyRouteComponent.tsx +70 -0
  269. package/src/router-binding/link.tsx +865 -0
  270. package/src/router-binding/matchContext.tsx +15 -0
  271. package/src/router-binding/nonRouteComponentContext.tsx +23 -0
  272. package/src/router-binding/not-found.tsx +65 -0
  273. package/src/router-binding/publicMatchData.ts +674 -0
  274. package/src/router-binding/registryTransfer.ts +383 -0
  275. package/src/router-binding/renderRouteNotFound.tsx +53 -0
  276. package/src/router-binding/route.tsx +665 -0
  277. package/src/router-binding/router.ts +121 -0
  278. package/src/router-binding/routerContext.tsx +6 -0
  279. package/src/router-binding/routerStores.ts +85 -0
  280. package/src/router-binding/scroll-restoration.tsx +15 -0
  281. package/src/router-binding/typePrimitives.ts +74 -0
  282. package/src/router-binding/useBlocker.tsx +359 -0
  283. package/src/router-binding/useCanGoBack.ts +9 -0
  284. package/src/router-binding/useLoaderData.tsx +50 -0
  285. package/src/router-binding/useLoaderDeps.tsx +46 -0
  286. package/src/router-binding/useLocation.tsx +43 -0
  287. package/src/router-binding/useMatch.tsx +111 -0
  288. package/src/router-binding/useNavigate.tsx +43 -0
  289. package/src/router-binding/useParams.tsx +72 -0
  290. package/src/router-binding/useRouteContext.ts +30 -0
  291. package/src/router-binding/useRouter.tsx +17 -0
  292. package/src/router-binding/useRouterState.tsx +50 -0
  293. package/src/router-binding/useSearch.tsx +72 -0
  294. package/src/router-binding/utils.ts +59 -0
  295. package/src/router.ts +376 -0
  296. package/src/server.ts +645 -0
@@ -0,0 +1,50 @@
1
+ import type {
2
+ AnyRouter,
3
+ RegisteredRouter,
4
+ ResolveUseLoaderData,
5
+ StrictOrFrom,
6
+ UseLoaderDataResult,
7
+ } from '@tanstack/router-core';
8
+ import type { Accessor } from 'solid-js';
9
+ import { useMatch } from './useMatch';
10
+
11
+ export interface UseLoaderDataBaseOptions<
12
+ TRouter extends AnyRouter,
13
+ TFrom,
14
+ TStrict extends boolean,
15
+ TSelected,
16
+ > {
17
+ select?: (match: ResolveUseLoaderData<TRouter, TFrom, TStrict>) => TSelected;
18
+ }
19
+
20
+ export type UseLoaderDataOptions<
21
+ TRouter extends AnyRouter,
22
+ TFrom extends string | undefined,
23
+ TStrict extends boolean,
24
+ TSelected,
25
+ > = StrictOrFrom<TRouter, TFrom, TStrict> &
26
+ UseLoaderDataBaseOptions<TRouter, TFrom, TStrict, TSelected>;
27
+
28
+ export type UseLoaderDataRoute<out TId> = <
29
+ TRouter extends AnyRouter = RegisteredRouter,
30
+ TSelected = unknown,
31
+ >(
32
+ opts?: UseLoaderDataBaseOptions<TRouter, TId, true, TSelected>,
33
+ ) => Accessor<UseLoaderDataResult<TRouter, TId, true, TSelected>>;
34
+
35
+ export function useLoaderData<
36
+ TRouter extends AnyRouter = RegisteredRouter,
37
+ const TFrom extends string | undefined = undefined,
38
+ TStrict extends boolean = true,
39
+ TSelected = unknown,
40
+ >(
41
+ opts: UseLoaderDataOptions<TRouter, TFrom, TStrict, TSelected>,
42
+ ): Accessor<UseLoaderDataResult<TRouter, TFrom, TStrict, TSelected>> {
43
+ return useMatch({
44
+ from: opts.from!,
45
+ strict: opts.strict,
46
+ select: match => {
47
+ return opts.select ? opts.select(match.loaderData) : match.loaderData;
48
+ },
49
+ }) as any;
50
+ }
@@ -0,0 +1,46 @@
1
+ import type {
2
+ AnyRouter,
3
+ RegisteredRouter,
4
+ ResolveUseLoaderDeps,
5
+ StrictOrFrom,
6
+ UseLoaderDepsResult,
7
+ } from '@tanstack/router-core';
8
+ import type { Accessor } from 'solid-js';
9
+ import { useMatch } from './useMatch';
10
+
11
+ export interface UseLoaderDepsBaseOptions<
12
+ TRouter extends AnyRouter,
13
+ TFrom,
14
+ TSelected,
15
+ > {
16
+ select?: (deps: ResolveUseLoaderDeps<TRouter, TFrom>) => TSelected;
17
+ }
18
+
19
+ export type UseLoaderDepsOptions<
20
+ TRouter extends AnyRouter,
21
+ TFrom extends string | undefined,
22
+ TSelected,
23
+ > = StrictOrFrom<TRouter, TFrom> &
24
+ UseLoaderDepsBaseOptions<TRouter, TFrom, TSelected>;
25
+
26
+ export type UseLoaderDepsRoute<out TId> = <
27
+ TRouter extends AnyRouter = RegisteredRouter,
28
+ TSelected = unknown,
29
+ >(
30
+ opts?: UseLoaderDepsBaseOptions<TRouter, TId, TSelected>,
31
+ ) => Accessor<UseLoaderDepsResult<TRouter, TId, TSelected>>;
32
+
33
+ export function useLoaderDeps<
34
+ TRouter extends AnyRouter = RegisteredRouter,
35
+ const TFrom extends string | undefined = undefined,
36
+ TSelected = unknown,
37
+ >(
38
+ opts: UseLoaderDepsOptions<TRouter, TFrom, TSelected>,
39
+ ): Accessor<UseLoaderDepsResult<TRouter, TFrom, TSelected>> {
40
+ return useMatch({
41
+ ...opts,
42
+ select: match => {
43
+ return opts.select ? opts.select(match.loaderDeps) : match.loaderDeps;
44
+ },
45
+ }) as Accessor<UseLoaderDepsResult<TRouter, TFrom, TSelected>>;
46
+ }
@@ -0,0 +1,43 @@
1
+ import type {
2
+ AnyRouter,
3
+ RegisteredRouter,
4
+ RouterState,
5
+ } from '@tanstack/router-core';
6
+ import { replaceEqualDeep } from '@tanstack/router-core';
7
+ import type { Accessor } from 'solid-js';
8
+ import * as Solid from 'solid-js';
9
+ import { useRouter } from './useRouter';
10
+
11
+ export interface UseLocationBaseOptions<TRouter extends AnyRouter, TSelected> {
12
+ select?: (state: RouterState<TRouter['routeTree']>['location']) => TSelected;
13
+ }
14
+
15
+ export type UseLocationResult<
16
+ TRouter extends AnyRouter,
17
+ TSelected,
18
+ > = unknown extends TSelected
19
+ ? RouterState<TRouter['routeTree']>['location']
20
+ : TSelected;
21
+
22
+ export function useLocation<
23
+ TRouter extends AnyRouter = RegisteredRouter,
24
+ TSelected = unknown,
25
+ >(
26
+ opts?: UseLocationBaseOptions<TRouter, TSelected>,
27
+ ): Accessor<UseLocationResult<TRouter, TSelected>> {
28
+ const router = useRouter<TRouter>();
29
+
30
+ if (!opts?.select) {
31
+ return (() => router.stores.location.get()) as Accessor<
32
+ UseLocationResult<TRouter, TSelected>
33
+ >;
34
+ }
35
+
36
+ const select = opts.select;
37
+
38
+ return Solid.createMemo((prev: TSelected | undefined) => {
39
+ const res = select(router.stores.location.get());
40
+ if (prev === undefined) return res;
41
+ return replaceEqualDeep(prev, res);
42
+ }) as Accessor<UseLocationResult<TRouter, TSelected>>;
43
+ }
@@ -0,0 +1,111 @@
1
+ import type {
2
+ AnyRouter,
3
+ MakeRouteMatch,
4
+ MakeRouteMatchUnion,
5
+ RegisteredRouter,
6
+ StrictOrFrom,
7
+ ThrowConstraint,
8
+ ThrowOrOptional,
9
+ } from '@tanstack/router-core';
10
+ import { invariant, replaceEqualDeep } from '@tanstack/router-core';
11
+ import * as Solid from 'solid-js';
12
+ import { nearestMatchContext } from './matchContext';
13
+ import { useRouter } from './useRouter';
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 router = useRouter<TRouter>();
73
+ const contextMatch = Solid.useContext(nearestMatchContext);
74
+ const nearestMatch = opts.from ? undefined : contextMatch;
75
+
76
+ const match = () => {
77
+ if (opts.from) {
78
+ return router.stores.getMatchStore(opts.from).get();
79
+ }
80
+
81
+ return nearestMatch?.[1 /* match */]();
82
+ };
83
+
84
+ Solid.createEffect(match, selectedMatch => {
85
+ if (selectedMatch !== undefined) {
86
+ return;
87
+ }
88
+
89
+ if (opts.shouldThrow ?? true) {
90
+ if (process.env.NODE_ENV !== 'production') {
91
+ throw new Error(
92
+ `Invariant failed: Could not find ${opts.from ? `an active match from "${opts.from}"` : 'a nearest match!'}`,
93
+ );
94
+ }
95
+
96
+ invariant();
97
+ }
98
+ });
99
+
100
+ return Solid.createMemo((prev: TSelected | undefined) => {
101
+ const selectedMatch = match();
102
+
103
+ if (selectedMatch === undefined) {
104
+ return undefined;
105
+ }
106
+
107
+ const res = opts.select ? opts.select(selectedMatch) : selectedMatch;
108
+ if (prev === undefined) return res as TSelected;
109
+ return replaceEqualDeep(prev, res) as TSelected;
110
+ }) as any;
111
+ }
@@ -0,0 +1,43 @@
1
+ import type {
2
+ AnyRouter,
3
+ FromPathOption,
4
+ NavigateOptions,
5
+ RegisteredRouter,
6
+ UseNavigateResult,
7
+ } from '@tanstack/router-core';
8
+ import * as Solid from 'solid-js';
9
+ import { useRouter } from './useRouter';
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 router = useRouter();
18
+
19
+ return ((options: NavigateOptions) => {
20
+ return router.navigate({
21
+ ...options,
22
+ from: options.from ?? _defaultOpts?.from,
23
+ });
24
+ }) as UseNavigateResult<TDefaultFrom>;
25
+ }
26
+
27
+ export function Navigate<
28
+ TRouter extends AnyRouter = RegisteredRouter,
29
+ const TFrom extends string = string,
30
+ const TTo extends string | undefined = undefined,
31
+ const TMaskFrom extends string = TFrom,
32
+ const TMaskTo extends string = '',
33
+ >(props: NavigateOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo>): null {
34
+ const { navigate } = useRouter();
35
+
36
+ Solid.onSettled(() => {
37
+ navigate({
38
+ ...props,
39
+ });
40
+ });
41
+
42
+ return null;
43
+ }
@@ -0,0 +1,72 @@
1
+ import type {
2
+ AnyRouter,
3
+ RegisteredRouter,
4
+ ResolveUseParams,
5
+ StrictOrFrom,
6
+ ThrowConstraint,
7
+ ThrowOrOptional,
8
+ UseParamsResult,
9
+ } from '@tanstack/router-core';
10
+ import type { Accessor } from 'solid-js';
11
+ import { useMatch } from './useMatch';
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 => {
68
+ const params = opts.strict === false ? match.params : match._strictParams;
69
+ return opts.select ? opts.select(params) : params;
70
+ },
71
+ }) as Accessor<any>;
72
+ }
@@ -0,0 +1,30 @@
1
+ import type {
2
+ AnyRouter,
3
+ RegisteredRouter,
4
+ UseRouteContextBaseOptions,
5
+ UseRouteContextOptions,
6
+ UseRouteContextResult,
7
+ } from '@tanstack/router-core';
8
+ import type { Accessor } from 'solid-js';
9
+ import { useMatch } from './useMatch';
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,
28
+ select: match => (opts.select ? opts.select(match.context) : match.context),
29
+ }) as any;
30
+ }
@@ -0,0 +1,17 @@
1
+ import type { AnyRouter, RegisteredRouter } from '@tanstack/router-core';
2
+ import * as Solid from 'solid-js';
3
+ import { routerContext } from './routerContext';
4
+
5
+ export function useRouter<TRouter extends AnyRouter = RegisteredRouter>(opts?: {
6
+ warn?: boolean;
7
+ }): TRouter {
8
+ const value = Solid.useContext(routerContext);
9
+ if (process.env.NODE_ENV !== 'production') {
10
+ if ((opts?.warn ?? true) && !value) {
11
+ console.warn(
12
+ 'Warning: useRouter must be used inside a <RouterProvider> component!',
13
+ );
14
+ }
15
+ }
16
+ return value as TRouter;
17
+ }
@@ -0,0 +1,50 @@
1
+ import type {
2
+ AnyRouter,
3
+ RegisteredRouter,
4
+ RouterState,
5
+ } from '@tanstack/router-core';
6
+ import { replaceEqualDeep } from '@tanstack/router-core';
7
+ import type { Accessor } from 'solid-js';
8
+ import * as Solid from 'solid-js';
9
+ import { useRouter } from './useRouter';
10
+
11
+ export type UseRouterStateOptions<TRouter extends AnyRouter, TSelected> = {
12
+ router?: TRouter;
13
+ select?: (state: RouterState<TRouter['routeTree']>) => TSelected;
14
+ };
15
+
16
+ export type UseRouterStateResult<
17
+ TRouter extends AnyRouter,
18
+ TSelected,
19
+ > = unknown extends TSelected ? RouterState<TRouter['routeTree']> : TSelected;
20
+
21
+ export function useRouterState<
22
+ TRouter extends AnyRouter = RegisteredRouter,
23
+ TSelected = unknown,
24
+ >(
25
+ opts?: UseRouterStateOptions<TRouter, TSelected>,
26
+ ): Accessor<UseRouterStateResult<TRouter, TSelected>> {
27
+ const contextRouter = useRouter<TRouter>({
28
+ warn: opts?.router === undefined,
29
+ });
30
+ const router = opts?.router || contextRouter;
31
+
32
+ if (!opts?.select) {
33
+ return (() => router.stores.__store.get()) as Accessor<
34
+ UseRouterStateResult<TRouter, TSelected>
35
+ >;
36
+ }
37
+
38
+ const select = opts.select;
39
+
40
+ return Solid.createMemo(
41
+ (prev: TSelected | undefined) => {
42
+ const res = select(router.stores.__store.get());
43
+ if (prev === undefined) return res;
44
+ return replaceEqualDeep(prev, res);
45
+ },
46
+ { transparent: true } as Solid.MemoOptions<TSelected> & {
47
+ ssrSource?: 'server' | 'hybrid';
48
+ },
49
+ ) as Accessor<UseRouterStateResult<TRouter, TSelected>>;
50
+ }
@@ -0,0 +1,72 @@
1
+ import type {
2
+ AnyRouter,
3
+ RegisteredRouter,
4
+ ResolveUseSearch,
5
+ StrictOrFrom,
6
+ ThrowConstraint,
7
+ ThrowOrOptional,
8
+ UseSearchResult,
9
+ } from '@tanstack/router-core';
10
+ import type { Accessor } from 'solid-js';
11
+ import { useMatch } from './useMatch';
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 => {
68
+ const search = match.search;
69
+ return opts.select ? opts.select(search) : search;
70
+ },
71
+ }) as any;
72
+ }
@@ -0,0 +1,59 @@
1
+ import * as Solid from 'solid-js';
2
+
3
+ /**
4
+ * React hook to wrap `IntersectionObserver`.
5
+ *
6
+ * This hook will create an `IntersectionObserver` and observe the ref passed to it.
7
+ *
8
+ * When the intersection changes, the callback will be called with the `IntersectionObserverEntry`.
9
+ *
10
+ * @param ref - The ref to observe
11
+ * @param callback - The callback to call when the intersection changes
12
+ * @param disabled - Whether observation is disabled
13
+ * @returns The IntersectionObserver instance
14
+ * @example
15
+ * ```tsx
16
+ * const MyComponent = () => {
17
+ * const ref = React.useRef<HTMLDivElement>(null)
18
+ * useIntersectionObserver(
19
+ * ref,
20
+ * (entry) => { doSomething(entry) },
21
+ * false
22
+ * )
23
+ * return <div ref={ref} />
24
+ * ```
25
+ */
26
+ export function useIntersectionObserver<T extends Element>(
27
+ ref: Solid.Accessor<T | null>,
28
+ callback: (entry?: IntersectionObserverEntry) => void,
29
+ disabled: Solid.Accessor<boolean>,
30
+ ): Solid.Accessor<IntersectionObserver | null> {
31
+ const isIntersectionObserverAvailable =
32
+ typeof IntersectionObserver === 'function';
33
+ let observerRef: IntersectionObserver | null = null;
34
+
35
+ Solid.createEffect(
36
+ () => [ref(), disabled()] as const,
37
+ ([r, isDisabled]) => {
38
+ if (isDisabled || !r || !isIntersectionObserverAvailable) {
39
+ return () => callback();
40
+ }
41
+
42
+ observerRef = new IntersectionObserver(
43
+ entries => {
44
+ callback(entries.pop());
45
+ },
46
+ { rootMargin: '100px' },
47
+ );
48
+
49
+ observerRef.observe(r);
50
+
51
+ return () => {
52
+ observerRef?.disconnect();
53
+ callback();
54
+ };
55
+ },
56
+ );
57
+
58
+ return () => observerRef;
59
+ }