one 1.2.57 → 1.2.58

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 (481) hide show
  1. package/dist/cjs/cli/buildPage.cjs +1 -1
  2. package/dist/cjs/cli/buildPage.js +1 -1
  3. package/dist/cjs/cli/buildPage.native.js +1 -1
  4. package/dist/cjs/cli/buildPage.native.js.map +1 -1
  5. package/dist/cjs/cli/dev.cjs +4 -4
  6. package/dist/cjs/cli/dev.js +4 -4
  7. package/dist/cjs/cli/dev.js.map +1 -1
  8. package/dist/cjs/cli/dev.native.js +4 -4
  9. package/dist/cjs/cli/dev.native.js.map +1 -1
  10. package/dist/cjs/createApp.cjs +2 -1
  11. package/dist/cjs/createApp.js +2 -2
  12. package/dist/cjs/createApp.js.map +1 -1
  13. package/dist/cjs/createHandleRequest.test.js +3 -1
  14. package/dist/cjs/createHandleRequest.test.js.map +1 -1
  15. package/dist/cjs/createHandleRequest.test.native.js.map +1 -1
  16. package/dist/cjs/devtools/registry.cjs +30 -0
  17. package/dist/cjs/devtools/registry.js +25 -0
  18. package/dist/cjs/devtools/registry.js.map +6 -0
  19. package/dist/cjs/devtools/registry.native.js +33 -0
  20. package/dist/cjs/devtools/registry.native.js.map +1 -0
  21. package/dist/cjs/fork/createMemoryHistory.cjs +20 -9
  22. package/dist/cjs/fork/createMemoryHistory.js +22 -4
  23. package/dist/cjs/fork/createMemoryHistory.js.map +1 -1
  24. package/dist/cjs/fork/createMemoryHistory.native.js +20 -9
  25. package/dist/cjs/fork/createMemoryHistory.native.js.map +1 -1
  26. package/dist/cjs/fork/useLinking.cjs +11 -5
  27. package/dist/cjs/fork/useLinking.js +6 -6
  28. package/dist/cjs/fork/useLinking.js.map +1 -1
  29. package/dist/cjs/index.cjs +17 -1
  30. package/dist/cjs/index.js +12 -2
  31. package/dist/cjs/index.js.map +1 -1
  32. package/dist/cjs/index.native.js +17 -1
  33. package/dist/cjs/index.native.js.map +1 -1
  34. package/dist/cjs/layouts/withLayoutContext.cjs +34 -15
  35. package/dist/cjs/layouts/withLayoutContext.js +29 -13
  36. package/dist/cjs/layouts/withLayoutContext.js.map +1 -1
  37. package/dist/cjs/layouts/withLayoutContext.native.js +42 -19
  38. package/dist/cjs/layouts/withLayoutContext.native.js.map +1 -1
  39. package/dist/cjs/link/Link.cjs +5 -2
  40. package/dist/cjs/link/Link.js +3 -2
  41. package/dist/cjs/link/Link.js.map +1 -1
  42. package/dist/cjs/link/Link.native.js +6 -1
  43. package/dist/cjs/link/Link.native.js.map +1 -1
  44. package/dist/cjs/link/useLinkTo.cjs +11 -3
  45. package/dist/cjs/link/useLinkTo.js +6 -3
  46. package/dist/cjs/link/useLinkTo.js.map +1 -1
  47. package/dist/cjs/link/useLinkTo.native.js +11 -3
  48. package/dist/cjs/link/useLinkTo.native.js.map +1 -1
  49. package/dist/cjs/router/Route.js.map +1 -1
  50. package/dist/cjs/router/Route.native.js.map +1 -1
  51. package/dist/cjs/router/findRouteNode.cjs +70 -0
  52. package/dist/cjs/router/findRouteNode.js +72 -0
  53. package/dist/cjs/router/findRouteNode.js.map +6 -0
  54. package/dist/cjs/router/findRouteNode.native.js +104 -0
  55. package/dist/cjs/router/findRouteNode.native.js.map +1 -0
  56. package/dist/cjs/router/router.cjs +160 -11
  57. package/dist/cjs/router/router.js +142 -7
  58. package/dist/cjs/router/router.js.map +2 -2
  59. package/dist/cjs/router/router.native.js +241 -57
  60. package/dist/cjs/router/router.native.js.map +1 -1
  61. package/dist/cjs/router/useScreens.cjs +1 -1
  62. package/dist/cjs/router/useScreens.js +1 -1
  63. package/dist/cjs/router/useScreens.js.map +1 -1
  64. package/dist/cjs/router/useScreens.native.js +5 -2
  65. package/dist/cjs/router/useScreens.native.js.map +1 -1
  66. package/dist/cjs/server/oneServe.js.map +1 -1
  67. package/dist/cjs/server/oneServe.native.js.map +1 -1
  68. package/dist/cjs/useBlocker.cjs +158 -0
  69. package/dist/cjs/useBlocker.js +145 -0
  70. package/dist/cjs/useBlocker.js.map +6 -0
  71. package/dist/cjs/useBlocker.native.js +89 -0
  72. package/dist/cjs/useBlocker.native.js.map +1 -0
  73. package/dist/cjs/useLoader.cjs +69 -3
  74. package/dist/cjs/useLoader.js +57 -4
  75. package/dist/cjs/useLoader.js.map +2 -2
  76. package/dist/cjs/useLoader.native.js +90 -6
  77. package/dist/cjs/useLoader.native.js.map +1 -1
  78. package/dist/cjs/useScrollGroup.cjs +37 -0
  79. package/dist/cjs/useScrollGroup.js +30 -0
  80. package/dist/cjs/useScrollGroup.js.map +6 -0
  81. package/dist/cjs/useScrollGroup.native.js +29 -0
  82. package/dist/cjs/useScrollGroup.native.js.map +1 -0
  83. package/dist/cjs/validateParams.cjs +80 -0
  84. package/dist/cjs/validateParams.js +84 -0
  85. package/dist/cjs/validateParams.js.map +6 -0
  86. package/dist/cjs/validateParams.native.js +180 -0
  87. package/dist/cjs/validateParams.native.js.map +1 -0
  88. package/dist/cjs/validateSearch.cjs +104 -0
  89. package/dist/cjs/validateSearch.js +99 -0
  90. package/dist/cjs/validateSearch.js.map +6 -0
  91. package/dist/cjs/validateSearch.native.js +202 -0
  92. package/dist/cjs/validateSearch.native.js.map +1 -0
  93. package/dist/cjs/views/ErrorBoundary.cjs +293 -10
  94. package/dist/cjs/views/ErrorBoundary.js +328 -8
  95. package/dist/cjs/views/ErrorBoundary.js.map +2 -2
  96. package/dist/cjs/views/ErrorBoundary.native.js +159 -4
  97. package/dist/cjs/views/ErrorBoundary.native.js.map +1 -1
  98. package/dist/cjs/views/Navigator.cjs +10 -3
  99. package/dist/cjs/views/Navigator.js +7 -3
  100. package/dist/cjs/views/Navigator.js.map +1 -1
  101. package/dist/cjs/views/Navigator.native.js +12 -3
  102. package/dist/cjs/views/Navigator.native.js.map +1 -1
  103. package/dist/cjs/views/Protected.cjs +36 -0
  104. package/dist/cjs/views/Protected.js +27 -0
  105. package/dist/cjs/views/Protected.js.map +6 -0
  106. package/dist/cjs/views/Protected.native.js +44 -0
  107. package/dist/cjs/views/Protected.native.js.map +1 -0
  108. package/dist/cjs/views/RootErrorBoundary.cjs +193 -8
  109. package/dist/cjs/views/RootErrorBoundary.js +213 -8
  110. package/dist/cjs/views/RootErrorBoundary.js.map +1 -1
  111. package/dist/cjs/views/RootErrorBoundary.native.js +192 -8
  112. package/dist/cjs/views/RootErrorBoundary.native.js.map +1 -1
  113. package/dist/cjs/views/ScrollBehavior.cjs +49 -11
  114. package/dist/cjs/views/ScrollBehavior.js +47 -11
  115. package/dist/cjs/views/ScrollBehavior.js.map +1 -1
  116. package/dist/cjs/views/ScrollBehavior.native.js +68 -10
  117. package/dist/cjs/views/ScrollBehavior.native.js.map +1 -1
  118. package/dist/cjs/views/SourceInspector.cjs +28 -0
  119. package/dist/cjs/views/SourceInspector.js +23 -0
  120. package/dist/cjs/views/SourceInspector.js.map +6 -0
  121. package/dist/cjs/views/SourceInspector.native.js +32 -0
  122. package/dist/cjs/views/SourceInspector.native.js.map +1 -0
  123. package/dist/cjs/views/Try.cjs +40 -7
  124. package/dist/cjs/views/Try.js +38 -4
  125. package/dist/cjs/views/Try.js.map +1 -1
  126. package/dist/cjs/views/Try.native.js +42 -7
  127. package/dist/cjs/views/Try.native.js.map +1 -1
  128. package/dist/cjs/vite/DevHead.cjs +797 -43
  129. package/dist/cjs/vite/DevHead.js +802 -51
  130. package/dist/cjs/vite/DevHead.js.map +1 -1
  131. package/dist/cjs/vite/DevHead.native.js +783 -1
  132. package/dist/cjs/vite/DevHead.native.js.map +1 -1
  133. package/dist/cjs/vite/one.cjs +7 -1
  134. package/dist/cjs/vite/one.js +7 -2
  135. package/dist/cjs/vite/one.js.map +1 -1
  136. package/dist/cjs/vite/one.native.js +11 -1
  137. package/dist/cjs/vite/one.native.js.map +1 -1
  138. package/dist/cjs/vite/plugins/SSRCSSPlugin.cjs +44 -4
  139. package/dist/cjs/vite/plugins/SSRCSSPlugin.js +48 -4
  140. package/dist/cjs/vite/plugins/SSRCSSPlugin.js.map +1 -1
  141. package/dist/cjs/vite/plugins/SSRCSSPlugin.native.js +62 -5
  142. package/dist/cjs/vite/plugins/SSRCSSPlugin.native.js.map +1 -1
  143. package/dist/cjs/vite/plugins/fileSystemRouterPlugin.js +6 -3
  144. package/dist/cjs/vite/plugins/fileSystemRouterPlugin.js.map +1 -1
  145. package/dist/cjs/vite/plugins/fileSystemRouterPlugin.native.js.map +1 -1
  146. package/dist/cjs/vite/plugins/generateFileSystemRouteTypesPlugin.cjs +5 -1
  147. package/dist/cjs/vite/plugins/generateFileSystemRouteTypesPlugin.js +11 -6
  148. package/dist/cjs/vite/plugins/generateFileSystemRouteTypesPlugin.js.map +1 -1
  149. package/dist/cjs/vite/plugins/generateFileSystemRouteTypesPlugin.native.js +1 -0
  150. package/dist/cjs/vite/plugins/generateFileSystemRouteTypesPlugin.native.js.map +1 -1
  151. package/dist/cjs/vite/plugins/sourceInspectorPlugin.cjs +155 -0
  152. package/dist/cjs/vite/plugins/sourceInspectorPlugin.js +148 -0
  153. package/dist/cjs/vite/plugins/sourceInspectorPlugin.js.map +6 -0
  154. package/dist/cjs/vite/plugins/sourceInspectorPlugin.native.js +231 -0
  155. package/dist/cjs/vite/plugins/sourceInspectorPlugin.native.js.map +1 -0
  156. package/dist/cjs/vite/plugins/virtualEntryPlugin.cjs +25 -6
  157. package/dist/cjs/vite/plugins/virtualEntryPlugin.js +16 -6
  158. package/dist/cjs/vite/plugins/virtualEntryPlugin.js.map +1 -1
  159. package/dist/cjs/vite/plugins/virtualEntryPlugin.native.js +26 -7
  160. package/dist/cjs/vite/plugins/virtualEntryPlugin.native.js.map +1 -1
  161. package/dist/esm/cli/buildPage.js +1 -1
  162. package/dist/esm/cli/buildPage.mjs +1 -1
  163. package/dist/esm/cli/buildPage.mjs.map +1 -1
  164. package/dist/esm/cli/buildPage.native.js +1 -1
  165. package/dist/esm/cli/buildPage.native.js.map +1 -1
  166. package/dist/esm/cli/dev.js +4 -4
  167. package/dist/esm/cli/dev.js.map +1 -1
  168. package/dist/esm/cli/dev.mjs +4 -4
  169. package/dist/esm/cli/dev.mjs.map +1 -1
  170. package/dist/esm/cli/dev.native.js +4 -4
  171. package/dist/esm/cli/dev.native.js.map +1 -1
  172. package/dist/esm/createApp.js +2 -2
  173. package/dist/esm/createApp.js.map +1 -1
  174. package/dist/esm/createApp.mjs +2 -1
  175. package/dist/esm/createApp.mjs.map +1 -1
  176. package/dist/esm/createHandleRequest.test.js +3 -1
  177. package/dist/esm/createHandleRequest.test.js.map +1 -1
  178. package/dist/esm/createHandleRequest.test.mjs.map +1 -1
  179. package/dist/esm/createHandleRequest.test.native.js.map +1 -1
  180. package/dist/esm/devtools/registry.js +9 -0
  181. package/dist/esm/devtools/registry.js.map +6 -0
  182. package/dist/esm/devtools/registry.mjs +6 -0
  183. package/dist/esm/devtools/registry.mjs.map +1 -0
  184. package/dist/esm/devtools/registry.native.js +6 -0
  185. package/dist/esm/devtools/registry.native.js.map +1 -0
  186. package/dist/esm/fork/createMemoryHistory.js +22 -4
  187. package/dist/esm/fork/createMemoryHistory.js.map +1 -1
  188. package/dist/esm/fork/createMemoryHistory.mjs +20 -9
  189. package/dist/esm/fork/createMemoryHistory.mjs.map +1 -1
  190. package/dist/esm/fork/createMemoryHistory.native.js +20 -9
  191. package/dist/esm/fork/createMemoryHistory.native.js.map +1 -1
  192. package/dist/esm/fork/useLinking.js +6 -5
  193. package/dist/esm/fork/useLinking.js.map +1 -1
  194. package/dist/esm/fork/useLinking.mjs +11 -5
  195. package/dist/esm/fork/useLinking.mjs.map +1 -1
  196. package/dist/esm/index.js +30 -2
  197. package/dist/esm/index.js.map +1 -1
  198. package/dist/esm/index.mjs +8 -2
  199. package/dist/esm/index.mjs.map +1 -1
  200. package/dist/esm/index.native.js +8 -2
  201. package/dist/esm/index.native.js.map +1 -1
  202. package/dist/esm/layouts/withLayoutContext.js +30 -12
  203. package/dist/esm/layouts/withLayoutContext.js.map +1 -1
  204. package/dist/esm/layouts/withLayoutContext.mjs +34 -15
  205. package/dist/esm/layouts/withLayoutContext.mjs.map +1 -1
  206. package/dist/esm/layouts/withLayoutContext.native.js +42 -19
  207. package/dist/esm/layouts/withLayoutContext.native.js.map +1 -1
  208. package/dist/esm/link/Link.js +3 -2
  209. package/dist/esm/link/Link.js.map +1 -1
  210. package/dist/esm/link/Link.mjs +5 -2
  211. package/dist/esm/link/Link.mjs.map +1 -1
  212. package/dist/esm/link/Link.native.js +6 -1
  213. package/dist/esm/link/Link.native.js.map +1 -1
  214. package/dist/esm/link/useLinkTo.js +6 -3
  215. package/dist/esm/link/useLinkTo.js.map +1 -1
  216. package/dist/esm/link/useLinkTo.mjs +11 -3
  217. package/dist/esm/link/useLinkTo.mjs.map +1 -1
  218. package/dist/esm/link/useLinkTo.native.js +11 -3
  219. package/dist/esm/link/useLinkTo.native.js.map +1 -1
  220. package/dist/esm/router/Route.js.map +1 -1
  221. package/dist/esm/router/Route.mjs.map +1 -1
  222. package/dist/esm/router/Route.native.js.map +1 -1
  223. package/dist/esm/router/findRouteNode.js +56 -0
  224. package/dist/esm/router/findRouteNode.js.map +6 -0
  225. package/dist/esm/router/findRouteNode.mjs +44 -0
  226. package/dist/esm/router/findRouteNode.mjs.map +1 -0
  227. package/dist/esm/router/findRouteNode.native.js +75 -0
  228. package/dist/esm/router/findRouteNode.native.js.map +1 -0
  229. package/dist/esm/router/router.js +154 -6
  230. package/dist/esm/router/router.js.map +1 -1
  231. package/dist/esm/router/router.mjs +151 -10
  232. package/dist/esm/router/router.mjs.map +1 -1
  233. package/dist/esm/router/router.native.js +232 -56
  234. package/dist/esm/router/router.native.js.map +1 -1
  235. package/dist/esm/router/useScreens.js +1 -1
  236. package/dist/esm/router/useScreens.js.map +1 -1
  237. package/dist/esm/router/useScreens.mjs +1 -1
  238. package/dist/esm/router/useScreens.mjs.map +1 -1
  239. package/dist/esm/router/useScreens.native.js +5 -2
  240. package/dist/esm/router/useScreens.native.js.map +1 -1
  241. package/dist/esm/server/oneServe.js.map +1 -1
  242. package/dist/esm/server/oneServe.mjs.map +1 -1
  243. package/dist/esm/server/oneServe.native.js.map +1 -1
  244. package/dist/esm/useBlocker.js +122 -0
  245. package/dist/esm/useBlocker.js.map +6 -0
  246. package/dist/esm/useBlocker.mjs +123 -0
  247. package/dist/esm/useBlocker.mjs.map +1 -0
  248. package/dist/esm/useBlocker.native.js +51 -0
  249. package/dist/esm/useBlocker.native.js.map +1 -0
  250. package/dist/esm/useLoader.js +57 -3
  251. package/dist/esm/useLoader.js.map +2 -2
  252. package/dist/esm/useLoader.mjs +69 -4
  253. package/dist/esm/useLoader.mjs.map +1 -1
  254. package/dist/esm/useLoader.native.js +90 -7
  255. package/dist/esm/useLoader.native.js.map +1 -1
  256. package/dist/esm/useScrollGroup.js +16 -0
  257. package/dist/esm/useScrollGroup.js.map +6 -0
  258. package/dist/esm/useScrollGroup.mjs +14 -0
  259. package/dist/esm/useScrollGroup.mjs.map +1 -0
  260. package/dist/esm/useScrollGroup.native.js +3 -0
  261. package/dist/esm/useScrollGroup.native.js.map +1 -0
  262. package/dist/esm/validateParams.js +68 -0
  263. package/dist/esm/validateParams.js.map +6 -0
  264. package/dist/esm/validateParams.mjs +54 -0
  265. package/dist/esm/validateParams.mjs.map +1 -0
  266. package/dist/esm/validateParams.native.js +151 -0
  267. package/dist/esm/validateParams.native.js.map +1 -0
  268. package/dist/esm/validateSearch.js +83 -0
  269. package/dist/esm/validateSearch.js.map +6 -0
  270. package/dist/esm/validateSearch.mjs +77 -0
  271. package/dist/esm/validateSearch.mjs.map +1 -0
  272. package/dist/esm/validateSearch.native.js +172 -0
  273. package/dist/esm/validateSearch.native.js.map +1 -0
  274. package/dist/esm/views/ErrorBoundary.js +325 -7
  275. package/dist/esm/views/ErrorBoundary.js.map +2 -2
  276. package/dist/esm/views/ErrorBoundary.mjs +289 -6
  277. package/dist/esm/views/ErrorBoundary.mjs.map +1 -1
  278. package/dist/esm/views/ErrorBoundary.native.js +159 -4
  279. package/dist/esm/views/ErrorBoundary.native.js.map +1 -1
  280. package/dist/esm/views/Navigator.js +7 -2
  281. package/dist/esm/views/Navigator.js.map +1 -1
  282. package/dist/esm/views/Navigator.mjs +10 -3
  283. package/dist/esm/views/Navigator.mjs.map +1 -1
  284. package/dist/esm/views/Navigator.native.js +12 -3
  285. package/dist/esm/views/Navigator.native.js.map +1 -1
  286. package/dist/esm/views/Protected.js +14 -0
  287. package/dist/esm/views/Protected.js.map +6 -0
  288. package/dist/esm/views/Protected.mjs +11 -0
  289. package/dist/esm/views/Protected.mjs.map +1 -0
  290. package/dist/esm/views/Protected.native.js +16 -0
  291. package/dist/esm/views/Protected.native.js.map +1 -0
  292. package/dist/esm/views/RootErrorBoundary.js +214 -7
  293. package/dist/esm/views/RootErrorBoundary.js.map +1 -1
  294. package/dist/esm/views/RootErrorBoundary.mjs +192 -7
  295. package/dist/esm/views/RootErrorBoundary.mjs.map +1 -1
  296. package/dist/esm/views/RootErrorBoundary.native.js +191 -7
  297. package/dist/esm/views/RootErrorBoundary.native.js.map +1 -1
  298. package/dist/esm/views/ScrollBehavior.js +47 -11
  299. package/dist/esm/views/ScrollBehavior.js.map +1 -1
  300. package/dist/esm/views/ScrollBehavior.mjs +48 -11
  301. package/dist/esm/views/ScrollBehavior.mjs.map +1 -1
  302. package/dist/esm/views/ScrollBehavior.native.js +67 -10
  303. package/dist/esm/views/ScrollBehavior.native.js.map +1 -1
  304. package/dist/esm/views/SourceInspector.js +7 -0
  305. package/dist/esm/views/SourceInspector.js.map +6 -0
  306. package/dist/esm/views/SourceInspector.mjs +5 -0
  307. package/dist/esm/views/SourceInspector.mjs.map +1 -0
  308. package/dist/esm/views/SourceInspector.native.js +6 -0
  309. package/dist/esm/views/SourceInspector.native.js.map +1 -0
  310. package/dist/esm/views/Try.js +38 -4
  311. package/dist/esm/views/Try.js.map +1 -1
  312. package/dist/esm/views/Try.mjs +40 -7
  313. package/dist/esm/views/Try.mjs.map +1 -1
  314. package/dist/esm/views/Try.native.js +42 -7
  315. package/dist/esm/views/Try.native.js.map +1 -1
  316. package/dist/esm/vite/DevHead.js +802 -51
  317. package/dist/esm/vite/DevHead.js.map +1 -1
  318. package/dist/esm/vite/DevHead.mjs +797 -43
  319. package/dist/esm/vite/DevHead.mjs.map +1 -1
  320. package/dist/esm/vite/DevHead.native.js +782 -0
  321. package/dist/esm/vite/DevHead.native.js.map +1 -1
  322. package/dist/esm/vite/one.js +7 -1
  323. package/dist/esm/vite/one.js.map +1 -1
  324. package/dist/esm/vite/one.mjs +7 -1
  325. package/dist/esm/vite/one.mjs.map +1 -1
  326. package/dist/esm/vite/one.native.js +11 -1
  327. package/dist/esm/vite/one.native.js.map +1 -1
  328. package/dist/esm/vite/plugins/SSRCSSPlugin.js +48 -4
  329. package/dist/esm/vite/plugins/SSRCSSPlugin.js.map +1 -1
  330. package/dist/esm/vite/plugins/SSRCSSPlugin.mjs +44 -4
  331. package/dist/esm/vite/plugins/SSRCSSPlugin.mjs.map +1 -1
  332. package/dist/esm/vite/plugins/SSRCSSPlugin.native.js +61 -4
  333. package/dist/esm/vite/plugins/SSRCSSPlugin.native.js.map +1 -1
  334. package/dist/esm/vite/plugins/fileSystemRouterPlugin.js +6 -3
  335. package/dist/esm/vite/plugins/fileSystemRouterPlugin.js.map +1 -1
  336. package/dist/esm/vite/plugins/fileSystemRouterPlugin.mjs.map +1 -1
  337. package/dist/esm/vite/plugins/fileSystemRouterPlugin.native.js.map +1 -1
  338. package/dist/esm/vite/plugins/generateFileSystemRouteTypesPlugin.js +11 -6
  339. package/dist/esm/vite/plugins/generateFileSystemRouteTypesPlugin.js.map +1 -1
  340. package/dist/esm/vite/plugins/generateFileSystemRouteTypesPlugin.mjs +5 -1
  341. package/dist/esm/vite/plugins/generateFileSystemRouteTypesPlugin.mjs.map +1 -1
  342. package/dist/esm/vite/plugins/generateFileSystemRouteTypesPlugin.native.js +1 -0
  343. package/dist/esm/vite/plugins/generateFileSystemRouteTypesPlugin.native.js.map +1 -1
  344. package/dist/esm/vite/plugins/sourceInspectorPlugin.js +126 -0
  345. package/dist/esm/vite/plugins/sourceInspectorPlugin.js.map +6 -0
  346. package/dist/esm/vite/plugins/sourceInspectorPlugin.mjs +121 -0
  347. package/dist/esm/vite/plugins/sourceInspectorPlugin.mjs.map +1 -0
  348. package/dist/esm/vite/plugins/sourceInspectorPlugin.native.js +194 -0
  349. package/dist/esm/vite/plugins/sourceInspectorPlugin.native.js.map +1 -0
  350. package/dist/esm/vite/plugins/virtualEntryPlugin.js +16 -6
  351. package/dist/esm/vite/plugins/virtualEntryPlugin.js.map +1 -1
  352. package/dist/esm/vite/plugins/virtualEntryPlugin.mjs +25 -6
  353. package/dist/esm/vite/plugins/virtualEntryPlugin.mjs.map +1 -1
  354. package/dist/esm/vite/plugins/virtualEntryPlugin.native.js +26 -7
  355. package/dist/esm/vite/plugins/virtualEntryPlugin.native.js.map +1 -1
  356. package/package.json +11 -9
  357. package/src/cli/buildPage.ts +1 -1
  358. package/src/cli/dev.ts +4 -4
  359. package/src/createApp.tsx +11 -1
  360. package/src/createHandleRequest.test.ts +3 -1
  361. package/src/devtools/registry.ts +21 -0
  362. package/src/fork/createMemoryHistory.tsx +43 -11
  363. package/src/fork/useLinking.ts +14 -4
  364. package/src/index.ts +34 -1
  365. package/src/interfaces/router.ts +48 -0
  366. package/src/layouts/withLayoutContext.tsx +48 -8
  367. package/src/link/Link.tsx +7 -2
  368. package/src/link/useLinkTo.tsx +7 -3
  369. package/src/router/Route.tsx +32 -3
  370. package/src/router/findRouteNode.ts +127 -0
  371. package/src/router/router.ts +286 -2
  372. package/src/router/useScreens.tsx +9 -3
  373. package/src/useBlocker.native.ts +153 -0
  374. package/src/useBlocker.ts +340 -0
  375. package/src/useLoader.ts +139 -1
  376. package/src/useScrollGroup.native.ts +7 -0
  377. package/src/useScrollGroup.ts +44 -0
  378. package/src/validateParams.ts +196 -0
  379. package/src/validateSearch.ts +241 -0
  380. package/src/views/ErrorBoundary.tsx +154 -156
  381. package/src/views/ErrorBoundary.web.tsx +321 -0
  382. package/src/views/Navigator.tsx +14 -2
  383. package/src/views/Protected.tsx +62 -0
  384. package/src/views/RootErrorBoundary.tsx +214 -17
  385. package/src/views/ScrollBehavior.tsx +82 -3
  386. package/src/views/SourceInspector.tsx +39 -0
  387. package/src/views/Try.tsx +81 -12
  388. package/src/vite/DevHead.tsx +819 -54
  389. package/src/vite/one.ts +13 -0
  390. package/src/vite/plugins/SSRCSSPlugin.ts +104 -0
  391. package/src/vite/plugins/fileSystemRouterPlugin.tsx +11 -8
  392. package/src/vite/plugins/generateFileSystemRouteTypesPlugin.tsx +4 -0
  393. package/src/vite/plugins/sourceInspectorPlugin.ts +246 -0
  394. package/src/vite/plugins/virtualEntryPlugin.ts +35 -10
  395. package/src/vite/types.ts +28 -0
  396. package/types/Route.d.ts.map +1 -0
  397. package/types/cleanUrl.d.ts.map +1 -0
  398. package/types/cli/run.d.ts.map +1 -0
  399. package/types/createApp.d.ts +5 -0
  400. package/types/createApp.d.ts.map +1 -1
  401. package/types/createRoute.d.ts.map +1 -0
  402. package/types/devtools/registry.d.ts +15 -0
  403. package/types/devtools/registry.d.ts.map +1 -0
  404. package/types/fork/NavigationContainer.native.d.ts.map +1 -0
  405. package/types/fork/createMemoryHistory.d.ts +8 -3
  406. package/types/fork/createMemoryHistory.d.ts.map +1 -1
  407. package/types/fork/useLinking.d.ts.map +1 -1
  408. package/types/getLinkingConfig.d.ts.map +1 -0
  409. package/types/getRoutes.d.ts.map +1 -0
  410. package/types/imperative-api.d.ts.map +1 -0
  411. package/types/index.d.ts +8 -1
  412. package/types/index.d.ts.map +1 -1
  413. package/types/interfaces/router.d.ts +47 -0
  414. package/types/interfaces/router.d.ts.map +1 -1
  415. package/types/layouts/withLayoutContext.d.ts +2 -1
  416. package/types/layouts/withLayoutContext.d.ts.map +1 -1
  417. package/types/link/Link.d.ts.map +1 -1
  418. package/types/link/useLinkTo.d.ts +1 -0
  419. package/types/link/useLinkTo.d.ts.map +1 -1
  420. package/types/matchers.d.ts.map +1 -0
  421. package/types/platform.d.ts.map +1 -0
  422. package/types/router/Route.d.ts +32 -3
  423. package/types/router/Route.d.ts.map +1 -1
  424. package/types/router/findRouteNode.d.ts +31 -0
  425. package/types/router/findRouteNode.d.ts.map +1 -0
  426. package/types/router/router.d.ts +35 -0
  427. package/types/router/router.d.ts.map +1 -1
  428. package/types/router/useScreens.d.ts +2 -0
  429. package/types/router/useScreens.d.ts.map +1 -1
  430. package/types/server/oneServe.d.ts.map +1 -1
  431. package/types/sortRoutes.d.ts.map +1 -0
  432. package/types/useBlocker.d.ts +72 -0
  433. package/types/useBlocker.d.ts.map +1 -0
  434. package/types/useBlocker.native.d.ts +60 -0
  435. package/types/useBlocker.native.d.ts.map +1 -0
  436. package/types/useLoader.d.ts +10 -0
  437. package/types/useLoader.d.ts.map +1 -1
  438. package/types/useNavigation.d.ts.map +1 -0
  439. package/types/useScreens.d.ts.map +1 -0
  440. package/types/useScrollGroup.d.ts +27 -0
  441. package/types/useScrollGroup.d.ts.map +1 -0
  442. package/types/useScrollGroup.native.d.ts +6 -0
  443. package/types/useScrollGroup.native.d.ts.map +1 -0
  444. package/types/useSearch.d.ts.map +1 -0
  445. package/types/useViteRoutes.d.ts.map +1 -0
  446. package/types/validateParams.d.ts +85 -0
  447. package/types/validateParams.d.ts.map +1 -0
  448. package/types/validateSearch.d.ts +107 -0
  449. package/types/validateSearch.d.ts.map +1 -0
  450. package/types/views/ErrorBoundary.d.ts +11 -1
  451. package/types/views/ErrorBoundary.d.ts.map +1 -1
  452. package/types/views/ErrorBoundary.web.d.ts +13 -0
  453. package/types/views/ErrorBoundary.web.d.ts.map +1 -0
  454. package/types/views/Navigator.d.ts.map +1 -1
  455. package/types/views/Protected.d.ts +39 -0
  456. package/types/views/Protected.d.ts.map +1 -0
  457. package/types/views/RootErrorBoundary.d.ts +14 -8
  458. package/types/views/RootErrorBoundary.d.ts.map +1 -1
  459. package/types/views/ScrollBehavior.d.ts +8 -0
  460. package/types/views/ScrollBehavior.d.ts.map +1 -1
  461. package/types/views/ScrollRestoration.d.ts.map +1 -0
  462. package/types/views/SourceInspector.d.ts +35 -0
  463. package/types/views/SourceInspector.d.ts.map +1 -0
  464. package/types/views/Try.d.ts +29 -6
  465. package/types/views/Try.d.ts.map +1 -1
  466. package/types/vite/DevHead.d.ts.map +1 -1
  467. package/types/vite/build.d.ts.map +1 -0
  468. package/types/vite/headers.d.ts.map +1 -0
  469. package/types/vite/headers.native.d.ts.map +1 -0
  470. package/types/vite/one.d.ts.map +1 -1
  471. package/types/vite/plugins/SSRCSSPlugin.d.ts.map +1 -1
  472. package/types/vite/plugins/fileSystemRouterPlugin.d.ts.map +1 -1
  473. package/types/vite/plugins/generateFileSystemRouteTypesPlugin.d.ts.map +1 -1
  474. package/types/vite/plugins/seoPreviewPlugin.d.ts.map +1 -0
  475. package/types/vite/plugins/sourceInspectorPlugin.d.ts +3 -0
  476. package/types/vite/plugins/sourceInspectorPlugin.d.ts.map +1 -0
  477. package/types/vite/plugins/virtualEntryPlugin.d.ts.map +1 -1
  478. package/types/vite/resolveAPIRequest.d.ts.map +1 -0
  479. package/types/vite/server.d.ts.map +1 -0
  480. package/types/vite/types.d.ts +24 -0
  481. package/types/vite/types.d.ts.map +1 -1
@@ -1,171 +1,169 @@
1
- // import { LogContext } from '@expo/metro-runtime/build/error-overlay/Data/LogContext'
2
- // import { LogBoxInspectorStackFrames } from '@expo/metro-runtime/build/error-overlay/overlay/LogBoxInspectorStackFrames'
3
- // import { LogBoxLog, parseErrorStack } from '@expo/metro-runtime/symbolicate'
4
1
  import { BottomTabBarHeightContext } from '@react-navigation/bottom-tabs'
5
2
  import React from 'react'
6
- import { View } from 'react-native'
3
+ import { Pressable, ScrollView, StyleSheet, Text, View } from 'react-native'
7
4
  import { SafeAreaView } from 'react-native-safe-area-context'
8
5
 
9
6
  import type { ErrorBoundaryProps } from './Try'
10
7
 
11
- // function useMetroSymbolication(error: Error) {
12
- // const [logBoxLog, setLogBoxLog] = React.useState<LogBoxLog | null>(null)
13
-
14
- // React.useEffect(() => {
15
- // let isMounted = true
16
- // const stack = parseErrorStack(error.stack)
17
-
18
- // const log = new LogBoxLog({
19
- // level: 'error',
20
- // message: {
21
- // content: error.message,
22
- // substitutions: [],
23
- // },
24
- // isComponentError: false,
25
- // stack,
26
- // category: error.message,
27
- // componentStack: [],
28
- // })
29
-
30
- // log.symbolicate('stack', (symbolicatedLog) => {
31
- // if (isMounted) {
32
- // setLogBoxLog(log)
33
- // }
34
- // })
8
+ /**
9
+ * Default error boundary component for native platforms.
10
+ * Shows a user-friendly error message with retry capability.
11
+ *
12
+ * This component is used when:
13
+ * - A route doesn't export its own ErrorBoundary
14
+ * - An error occurs during rendering
15
+ *
16
+ * Users can override this by exporting their own ErrorBoundary from a route.
17
+ */
18
+ export function ErrorBoundary({ error, retry, route }: ErrorBoundaryProps) {
19
+ const inTabBar = React.useContext(BottomTabBarHeightContext)
20
+ const Wrapper = inTabBar ? View : SafeAreaView
21
+ const isDev = process.env.NODE_ENV === 'development'
35
22
 
36
- // return () => {
37
- // isMounted = false
38
- // }
39
- // }, [error])
23
+ console.error('[One] Error in route:', route?.routeName || 'unknown', error)
40
24
 
41
- // return logBoxLog
42
- // }
25
+ return (
26
+ <Wrapper style={styles.container}>
27
+ <View style={styles.content}>
28
+ {/* Error icon */}
29
+ <View style={styles.iconContainer}>
30
+ <Text style={styles.iconText}>!</Text>
31
+ </View>
43
32
 
44
- export function ErrorBoundary({ error, retry }: ErrorBoundaryProps) {
45
- // const logBoxLog = useMetroSymbolication(error)
46
- const inTabBar = React.useContext(BottomTabBarHeightContext)
47
- const Wrapper = inTabBar ? View : SafeAreaView
33
+ {/* Title */}
34
+ <Text style={styles.title}>Something went wrong</Text>
48
35
 
49
- console.error('error', error)
36
+ {/* Route info */}
37
+ {route?.routeName && (
38
+ <Text style={styles.routeInfo}>on route: {route.routeName}</Text>
39
+ )}
50
40
 
51
- return null
41
+ {/* Error message */}
42
+ <View style={styles.errorBox}>
43
+ <Text style={styles.errorMessage}>
44
+ {error?.message || 'An unexpected error occurred'}
45
+ </Text>
46
+ </View>
52
47
 
53
- // return (
54
- // <View style={styles.container}>
55
- // <Wrapper style={{ flex: 1, gap: 8, maxWidth: 720, marginHorizontal: 'auto' }}>
56
- // <View
57
- // style={{
58
- // marginBottom: 12,
59
- // flexDirection: 'row',
60
- // flexWrap: 'wrap',
61
- // justifyContent: 'space-between',
62
- // alignItems: 'center',
63
- // }}
64
- // >
65
- // <Text role="heading" aria-level={1} style={styles.title}>
66
- // Something went wrong
67
- // </Text>
68
- // </View>
48
+ {/* Stack trace (dev only) */}
49
+ {isDev && error?.stack && (
50
+ <ScrollView style={styles.stackContainer}>
51
+ <Text style={styles.stackTitle}>Stack trace:</Text>
52
+ <Text style={styles.stackText}>{error.stack}</Text>
53
+ </ScrollView>
54
+ )}
69
55
 
70
- // <StackTrace logData={logBoxLog} />
71
- // {process.env.NODE_ENV === 'development' && (
72
- // <Link href="/_sitemap" style={styles.link}>
73
- // Sitemap
74
- // </Link>
75
- // )}
76
- // <Pressable onPress={retry}>
77
- // {({ hovered, pressed }) => (
78
- // <View
79
- // style={[
80
- // styles.buttonInner,
81
- // (hovered || pressed) && { backgroundColor: 'white' },
82
- // ]}
83
- // >
84
- // <Text
85
- // style={[
86
- // styles.buttonText,
87
- // {
88
- // transitionDuration: '100ms',
89
- // color: hovered || pressed ? 'black' : 'white',
90
- // },
91
- // ]}
92
- // >
93
- // Retry
94
- // </Text>
95
- // </View>
96
- // )}
97
- // </Pressable>
98
- // </Wrapper>
99
- // </View>
100
- // )
56
+ {/* Actions */}
57
+ <View style={styles.actions}>
58
+ <Pressable
59
+ onPress={() => retry()}
60
+ style={({ pressed }) => [
61
+ styles.button,
62
+ styles.primaryButton,
63
+ pressed && styles.buttonPressed,
64
+ ]}
65
+ >
66
+ <Text style={styles.primaryButtonText}>Try Again</Text>
67
+ </Pressable>
68
+ </View>
69
+ </View>
70
+ </Wrapper>
71
+ )
101
72
  }
102
73
 
103
- // function StackTrace({ logData }: { logData: LogBoxLog | null }) {
104
- // if (!logData?.symbolicated?.stack?.stack) {
105
- // return null
106
- // }
107
- // return (
108
- // <ScrollView style={{ flex: 1 }}>
109
- // <LogContext.Provider
110
- // value={{
111
- // isDisabled: false,
112
- // logs: [logData],
113
- // selectedLogIndex: 0,
114
- // }}
115
- // >
116
- // <LogBoxInspectorStackFrames onRetry={function () {}} type="stack" />
117
- // </LogContext.Provider>
118
- // </ScrollView>
119
- // )
120
- // }
121
-
122
- // const styles = StyleSheet.create({
123
- // container: {
124
- // flex: 1,
125
- // backgroundColor: 'black',
126
- // padding: 24,
127
- // alignItems: 'stretch',
128
- // justifyContent: 'center',
129
- // },
130
- // title: {
131
- // color: 'white',
132
- // fontSize: Platform.select({ web: 32, default: 24 }),
133
- // fontWeight: 'bold',
134
- // },
135
- // buttonText: {
136
- // fontSize: 18,
137
- // fontWeight: 'bold',
138
- // color: 'black',
139
- // },
140
- // buttonInner: {
141
- // transitionDuration: '100ms',
142
- // paddingVertical: 12,
143
- // paddingHorizontal: 24,
144
- // borderColor: 'white',
145
- // borderWidth: 2,
146
- // marginLeft: 8,
147
- // justifyContent: 'center',
148
- // alignItems: 'center',
149
- // },
150
- // code: {
151
- // fontFamily: Platform.select({
152
- // default: 'Courier',
153
- // ios: 'Courier New',
154
- // android: 'monospace',
155
- // }),
156
- // fontWeight: '500',
157
- // },
158
- // subtitle: {
159
- // color: 'white',
160
- // fontSize: 14,
161
- // marginBottom: 12,
162
- // // textAlign: "center",
163
- // },
164
- // link: {
165
- // color: 'rgba(255,255,255,0.4)',
166
- // textDecorationStyle: 'solid',
167
- // textDecorationLine: 'underline',
168
- // fontSize: 14,
169
- // textAlign: 'center',
170
- // },
171
- // })
74
+ const styles = StyleSheet.create({
75
+ container: {
76
+ flex: 1,
77
+ backgroundColor: '#0a0a0f',
78
+ },
79
+ content: {
80
+ flex: 1,
81
+ alignItems: 'center',
82
+ justifyContent: 'center',
83
+ padding: 24,
84
+ },
85
+ iconContainer: {
86
+ width: 64,
87
+ height: 64,
88
+ backgroundColor: '#ef4444',
89
+ borderRadius: 32,
90
+ alignItems: 'center',
91
+ justifyContent: 'center',
92
+ marginBottom: 24,
93
+ },
94
+ iconText: {
95
+ color: 'white',
96
+ fontSize: 32,
97
+ fontWeight: 'bold',
98
+ },
99
+ title: {
100
+ fontSize: 22,
101
+ fontWeight: '600',
102
+ color: '#e8e8e8',
103
+ marginBottom: 8,
104
+ textAlign: 'center',
105
+ },
106
+ routeInfo: {
107
+ fontSize: 13,
108
+ color: '#666',
109
+ marginBottom: 16,
110
+ },
111
+ errorBox: {
112
+ backgroundColor: '#1a1a2e',
113
+ borderRadius: 8,
114
+ padding: 16,
115
+ marginBottom: 16,
116
+ width: '100%',
117
+ maxWidth: 400,
118
+ },
119
+ errorMessage: {
120
+ fontFamily: 'monospace',
121
+ fontSize: 14,
122
+ lineHeight: 20,
123
+ color: '#f87171',
124
+ textAlign: 'center',
125
+ },
126
+ stackContainer: {
127
+ maxHeight: 150,
128
+ width: '100%',
129
+ maxWidth: 400,
130
+ backgroundColor: '#16162a',
131
+ borderRadius: 8,
132
+ padding: 12,
133
+ marginBottom: 16,
134
+ },
135
+ stackTitle: {
136
+ fontSize: 11,
137
+ color: '#666',
138
+ marginBottom: 8,
139
+ },
140
+ stackText: {
141
+ fontFamily: 'monospace',
142
+ fontSize: 10,
143
+ lineHeight: 16,
144
+ color: '#a0a0a0',
145
+ },
146
+ actions: {
147
+ flexDirection: 'row',
148
+ gap: 12,
149
+ marginTop: 8,
150
+ },
151
+ button: {
152
+ paddingVertical: 12,
153
+ paddingHorizontal: 24,
154
+ borderRadius: 8,
155
+ minWidth: 120,
156
+ alignItems: 'center',
157
+ },
158
+ primaryButton: {
159
+ backgroundColor: '#3b82f6',
160
+ },
161
+ buttonPressed: {
162
+ opacity: 0.8,
163
+ },
164
+ primaryButtonText: {
165
+ color: 'white',
166
+ fontSize: 14,
167
+ fontWeight: '500',
168
+ },
169
+ })
@@ -0,0 +1,321 @@
1
+ import React from 'react'
2
+ import type { ErrorBoundaryProps } from './Try'
3
+
4
+ /**
5
+ * Default error boundary component for web.
6
+ * Shows a user-friendly error message with retry capability.
7
+ *
8
+ * This component is used when:
9
+ * - A route doesn't export its own ErrorBoundary
10
+ * - An error occurs during rendering
11
+ *
12
+ * Users can override this by exporting their own ErrorBoundary from a route.
13
+ */
14
+ export function ErrorBoundary({ error, retry, route }: ErrorBoundaryProps) {
15
+ const isDev = process.env.NODE_ENV === 'development'
16
+
17
+ // Dispatch error event for devtools
18
+ React.useEffect(() => {
19
+ if (typeof window !== 'undefined') {
20
+ window.dispatchEvent(
21
+ new CustomEvent('one-error', {
22
+ detail: {
23
+ error: {
24
+ message: error.message,
25
+ stack: error.stack,
26
+ name: error.name,
27
+ },
28
+ route: route || {},
29
+ timestamp: Date.now(),
30
+ type: 'render',
31
+ },
32
+ })
33
+ )
34
+ }
35
+ }, [error, route])
36
+
37
+ return (
38
+ <div
39
+ style={{
40
+ minHeight: '100vh',
41
+ display: 'flex',
42
+ alignItems: 'center',
43
+ justifyContent: 'center',
44
+ backgroundColor: '#0a0a0f',
45
+ fontFamily:
46
+ '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif',
47
+ color: '#e8e8e8',
48
+ padding: '24px',
49
+ }}
50
+ >
51
+ <div
52
+ style={{
53
+ maxWidth: '600px',
54
+ width: '100%',
55
+ backgroundColor: '#1a1a2e',
56
+ borderRadius: '12px',
57
+ boxShadow: '0 8px 32px rgba(0, 0, 0, 0.4)',
58
+ overflow: 'hidden',
59
+ }}
60
+ >
61
+ {/* Header */}
62
+ <div
63
+ style={{
64
+ padding: '16px 20px',
65
+ backgroundColor: '#ef4444',
66
+ display: 'flex',
67
+ alignItems: 'center',
68
+ gap: '12px',
69
+ }}
70
+ >
71
+ <svg
72
+ width="24"
73
+ height="24"
74
+ viewBox="0 0 24 24"
75
+ fill="none"
76
+ stroke="white"
77
+ strokeWidth="2"
78
+ >
79
+ <circle cx="12" cy="12" r="10" />
80
+ <line x1="12" y1="8" x2="12" y2="12" />
81
+ <line x1="12" y1="16" x2="12.01" y2="16" />
82
+ </svg>
83
+ <div>
84
+ <div style={{ fontWeight: 600, fontSize: '16px', color: 'white' }}>
85
+ Something went wrong
86
+ </div>
87
+ {route?.pathname && (
88
+ <div
89
+ style={{
90
+ fontSize: '13px',
91
+ color: 'rgba(255,255,255,0.8)',
92
+ marginTop: '2px',
93
+ }}
94
+ >
95
+ on {route.pathname}
96
+ </div>
97
+ )}
98
+ </div>
99
+ </div>
100
+
101
+ {/* Content */}
102
+ <div style={{ padding: '20px' }}>
103
+ {/* Error message */}
104
+ <div
105
+ style={{
106
+ backgroundColor: '#2a2a4a',
107
+ borderRadius: '8px',
108
+ padding: '16px',
109
+ marginBottom: '16px',
110
+ }}
111
+ >
112
+ <div
113
+ style={{
114
+ fontFamily: 'monospace',
115
+ fontSize: '14px',
116
+ lineHeight: '1.5',
117
+ color: '#f87171',
118
+ wordBreak: 'break-word',
119
+ }}
120
+ >
121
+ {error.message || 'An unexpected error occurred'}
122
+ </div>
123
+ </div>
124
+
125
+ {/* Stack trace (dev only) */}
126
+ {isDev && error.stack && (
127
+ <details
128
+ style={{
129
+ marginBottom: '16px',
130
+ }}
131
+ >
132
+ <summary
133
+ style={{
134
+ cursor: 'pointer',
135
+ fontSize: '13px',
136
+ color: '#888',
137
+ marginBottom: '8px',
138
+ }}
139
+ >
140
+ Stack trace
141
+ </summary>
142
+ <div
143
+ style={{
144
+ backgroundColor: '#16162a',
145
+ borderRadius: '8px',
146
+ padding: '12px',
147
+ maxHeight: '200px',
148
+ overflow: 'auto',
149
+ }}
150
+ >
151
+ <pre
152
+ style={{
153
+ fontFamily: 'monospace',
154
+ fontSize: '11px',
155
+ lineHeight: '1.6',
156
+ color: '#a0a0a0',
157
+ margin: 0,
158
+ whiteSpace: 'pre-wrap',
159
+ wordBreak: 'break-word',
160
+ }}
161
+ >
162
+ {error.stack}
163
+ </pre>
164
+ </div>
165
+ </details>
166
+ )}
167
+
168
+ {/* Route info (dev only) */}
169
+ {isDev && route && (
170
+ <details
171
+ style={{
172
+ marginBottom: '16px',
173
+ }}
174
+ >
175
+ <summary
176
+ style={{
177
+ cursor: 'pointer',
178
+ fontSize: '13px',
179
+ color: '#888',
180
+ marginBottom: '8px',
181
+ }}
182
+ >
183
+ Route info
184
+ </summary>
185
+ <div
186
+ style={{
187
+ backgroundColor: '#16162a',
188
+ borderRadius: '8px',
189
+ padding: '12px',
190
+ display: 'grid',
191
+ gridTemplateColumns: 'auto 1fr',
192
+ gap: '8px',
193
+ fontFamily: 'monospace',
194
+ fontSize: '12px',
195
+ }}
196
+ >
197
+ {route.pathname && (
198
+ <>
199
+ <span style={{ color: '#888' }}>pathname</span>
200
+ <span style={{ color: '#e8e8e8' }}>{route.pathname}</span>
201
+ </>
202
+ )}
203
+ {route.routeName && (
204
+ <>
205
+ <span style={{ color: '#888' }}>route</span>
206
+ <span style={{ color: '#e8e8e8' }}>{route.routeName}</span>
207
+ </>
208
+ )}
209
+ {route.params && Object.keys(route.params).length > 0 && (
210
+ <>
211
+ <span style={{ color: '#888' }}>params</span>
212
+ <span style={{ color: '#e8e8e8' }}>
213
+ {JSON.stringify(route.params)}
214
+ </span>
215
+ </>
216
+ )}
217
+ </div>
218
+ </details>
219
+ )}
220
+
221
+ {/* Actions */}
222
+ <div style={{ display: 'flex', gap: '12px' }}>
223
+ <button
224
+ onClick={() => retry()}
225
+ style={{
226
+ flex: 1,
227
+ padding: '12px 20px',
228
+ backgroundColor: '#3b82f6',
229
+ color: 'white',
230
+ border: 'none',
231
+ borderRadius: '8px',
232
+ fontSize: '14px',
233
+ fontWeight: 500,
234
+ cursor: 'pointer',
235
+ transition: 'background-color 0.15s',
236
+ }}
237
+ onMouseOver={(e) => {
238
+ e.currentTarget.style.backgroundColor = '#2563eb'
239
+ }}
240
+ onMouseOut={(e) => {
241
+ e.currentTarget.style.backgroundColor = '#3b82f6'
242
+ }}
243
+ >
244
+ Try Again
245
+ </button>
246
+ <button
247
+ onClick={() => {
248
+ if (typeof window !== 'undefined') {
249
+ window.location.href = '/'
250
+ }
251
+ }}
252
+ style={{
253
+ padding: '12px 20px',
254
+ backgroundColor: 'transparent',
255
+ color: '#888',
256
+ border: '1px solid #3a3a5a',
257
+ borderRadius: '8px',
258
+ fontSize: '14px',
259
+ fontWeight: 500,
260
+ cursor: 'pointer',
261
+ transition: 'all 0.15s',
262
+ }}
263
+ onMouseOver={(e) => {
264
+ e.currentTarget.style.backgroundColor = '#2a2a4a'
265
+ e.currentTarget.style.color = '#e8e8e8'
266
+ }}
267
+ onMouseOut={(e) => {
268
+ e.currentTarget.style.backgroundColor = 'transparent'
269
+ e.currentTarget.style.color = '#888'
270
+ }}
271
+ >
272
+ Go Home
273
+ </button>
274
+ </div>
275
+ </div>
276
+
277
+ {/* Footer */}
278
+ {isDev && (
279
+ <div
280
+ style={{
281
+ padding: '12px 20px',
282
+ backgroundColor: '#16162a',
283
+ borderTop: '1px solid #2a2a4a',
284
+ fontSize: '11px',
285
+ color: '#666',
286
+ display: 'flex',
287
+ alignItems: 'center',
288
+ gap: '8px',
289
+ }}
290
+ >
291
+ <svg
292
+ width="12"
293
+ height="12"
294
+ viewBox="0 0 24 24"
295
+ fill="none"
296
+ stroke="#666"
297
+ strokeWidth="2"
298
+ >
299
+ <circle cx="12" cy="12" r="10" />
300
+ <path d="M12 16v-4" />
301
+ <path d="M12 8h.01" />
302
+ </svg>
303
+ <span>
304
+ Press{' '}
305
+ <kbd
306
+ style={{
307
+ padding: '2px 6px',
308
+ backgroundColor: '#2a2a4a',
309
+ borderRadius: '4px',
310
+ }}
311
+ >
312
+ Alt+E
313
+ </kbd>{' '}
314
+ to open Error Panel
315
+ </span>
316
+ </div>
317
+ )}
318
+ </div>
319
+ </div>
320
+ )
321
+ }
@@ -9,6 +9,7 @@ import { SafeAreaView } from 'react-native-safe-area-context'
9
9
  import { useFilterScreenChildren } from '../layouts/withLayoutContext'
10
10
  import { FlagsContext } from '../router/FlagsContext'
11
11
  import { useContextKey } from '../router/Route'
12
+ import { registerProtectedRoutes, unregisterProtectedRoutes } from '../router/router'
12
13
  import { useSortedScreens } from '../router/useScreens'
13
14
  import { Screen } from './Screen'
14
15
 
@@ -44,12 +45,23 @@ export function Navigator({
44
45
  const contextKey = useContextKey()
45
46
 
46
47
  // Allows adding Screen components as children to configure routes.
47
- const { screens, children: otherSlot } = useFilterScreenChildren(children, {
48
+ const { screens, children: otherSlot, protectedScreens } = useFilterScreenChildren(children, {
48
49
  isCustomNavigator: true,
49
50
  contextKey,
50
51
  })
51
52
 
52
- const sorted = useSortedScreens(screens ?? [])
53
+ // Register protected routes globally so linkTo can block navigation to them
54
+ // Register immediately (not just in effect) to catch navigation attempts during first render
55
+ registerProtectedRoutes(contextKey, protectedScreens)
56
+
57
+ React.useEffect(() => {
58
+ registerProtectedRoutes(contextKey, protectedScreens)
59
+ return () => {
60
+ unregisterProtectedRoutes(contextKey)
61
+ }
62
+ }, [contextKey, protectedScreens])
63
+
64
+ const sorted = useSortedScreens(screens ?? [], { protectedScreens })
53
65
 
54
66
  if (!sorted.length) {
55
67
  console.warn(`Navigator at "${contextKey}" has no children.`)