one 1.21.13 → 1.23.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (750) hide show
  1. package/dist/cjs/Root.cjs +2 -2
  2. package/dist/cjs/Root.native.js +2 -2
  3. package/dist/cjs/Root.native.js.map +1 -1
  4. package/dist/cjs/cli/build.cjs +9 -17
  5. package/dist/cjs/cli/build.native.js +8 -16
  6. package/dist/cjs/cli/build.native.js.map +1 -1
  7. package/dist/cjs/cli.native.js.map +1 -1
  8. package/dist/cjs/clientLoaderResolver.native.js.map +1 -1
  9. package/dist/cjs/config.native.js.map +1 -1
  10. package/dist/cjs/constants.native.js.map +1 -1
  11. package/dist/cjs/constants.test.native.js.map +1 -1
  12. package/dist/cjs/createAPIRoute.native.js.map +1 -1
  13. package/dist/cjs/createApp.cjs +12 -35
  14. package/dist/cjs/createHandleRequest.cjs +4 -2
  15. package/dist/cjs/createHandleRequest.native.js +4 -2
  16. package/dist/cjs/createHandleRequest.native.js.map +1 -1
  17. package/dist/cjs/fallbackViews/Sitemap.cjs +123 -55
  18. package/dist/cjs/fallbackViews/Sitemap.native.js.map +1 -1
  19. package/dist/cjs/fallbackViews/Unmatched.cjs +92 -37
  20. package/dist/cjs/fallbackViews/Unmatched.native.js.map +1 -1
  21. package/dist/cjs/fork/NavigationContainer.cjs +6 -28
  22. package/dist/cjs/fork/NavigationContainer.native.js +5 -27
  23. package/dist/cjs/fork/NavigationContainer.native.js.map +1 -1
  24. package/dist/cjs/{router/renderingRegistry.cjs → fork/localeDirection.cjs} +6 -29
  25. package/dist/cjs/{router/web/ScreenRenderContext.cjs → fork/localeDirection.native.js} +10 -12
  26. package/dist/cjs/fork/localeDirection.native.js.map +1 -0
  27. package/dist/cjs/fork/theme.cjs +71 -0
  28. package/dist/cjs/{router/renderingRegistry.native.js → fork/theme.native.js} +7 -31
  29. package/dist/cjs/fork/theme.native.js.map +1 -0
  30. package/dist/cjs/headless/Presentations.cjs +51 -0
  31. package/dist/cjs/headless/Presentations.native.js +56 -0
  32. package/dist/cjs/headless/Presentations.native.js.map +1 -0
  33. package/dist/cjs/headless/children.cjs +43 -0
  34. package/dist/cjs/headless/children.native.js +46 -0
  35. package/dist/cjs/headless/children.native.js.map +1 -0
  36. package/dist/cjs/headless/devHeadlessNote.cjs +34 -0
  37. package/dist/cjs/{router/web/ScreenRenderContext.native.js → headless/devHeadlessNote.native.js} +11 -12
  38. package/dist/cjs/headless/devHeadlessNote.native.js.map +1 -0
  39. package/dist/cjs/headless/keepMounted.cjs +58 -0
  40. package/dist/cjs/headless/keepMounted.native.js +64 -0
  41. package/dist/cjs/headless/keepMounted.native.js.map +1 -0
  42. package/dist/cjs/headless/types.cjs +18 -0
  43. package/dist/cjs/headless/types.native.js +21 -0
  44. package/dist/cjs/headless/types.native.js.map +1 -0
  45. package/dist/cjs/headless/useDrawer.cjs +83 -0
  46. package/dist/cjs/headless/useDrawer.native.js +95 -0
  47. package/dist/cjs/headless/useDrawer.native.js.map +1 -0
  48. package/dist/cjs/headless/useStack.cjs +75 -0
  49. package/dist/cjs/headless/useStack.native.js +79 -0
  50. package/dist/cjs/headless/useStack.native.js.map +1 -0
  51. package/dist/cjs/headless/useTabs.cjs +62 -0
  52. package/dist/cjs/headless/useTabs.native.js +65 -0
  53. package/dist/cjs/headless/useTabs.native.js.map +1 -0
  54. package/dist/cjs/index.cjs +8 -3
  55. package/dist/cjs/index.native.js +8 -3
  56. package/dist/cjs/index.native.js.map +1 -1
  57. package/dist/cjs/layouts/Drawer.cjs +71 -42
  58. package/dist/cjs/layouts/Drawer.native.js +1 -25
  59. package/dist/cjs/layouts/Drawer.native.js.map +1 -1
  60. package/dist/cjs/layouts/Stack.cjs +9 -13
  61. package/dist/cjs/layouts/Stack.native.js +11 -13
  62. package/dist/cjs/layouts/Stack.native.js.map +1 -1
  63. package/dist/cjs/layouts/Tabs.cjs +104 -88
  64. package/dist/cjs/layouts/Tabs.native.js +1 -13
  65. package/dist/cjs/layouts/Tabs.native.js.map +1 -1
  66. package/dist/cjs/layouts/stack-navigator.cjs +10 -2
  67. package/dist/cjs/layouts/stack-navigator.native.js +5 -1
  68. package/dist/cjs/layouts/stack-navigator.native.js.map +1 -1
  69. package/dist/cjs/layouts/stack-utils/StackHeaderBackButton.cjs +4 -0
  70. package/dist/cjs/layouts/stack-utils/StackHeaderBackButton.native.js +4 -0
  71. package/dist/cjs/layouts/stack-utils/StackHeaderBackButton.native.js.map +1 -1
  72. package/dist/cjs/layouts/stack-utils/StackHeaderComponent.cjs +13 -9
  73. package/dist/cjs/layouts/stack-utils/StackHeaderComponent.native.js +13 -9
  74. package/dist/cjs/layouts/stack-utils/StackHeaderComponent.native.js.map +1 -1
  75. package/dist/cjs/layouts/stack-utils/StackHeaderLeft.cjs +4 -0
  76. package/dist/cjs/layouts/stack-utils/StackHeaderLeft.native.js +4 -0
  77. package/dist/cjs/layouts/stack-utils/StackHeaderLeft.native.js.map +1 -1
  78. package/dist/cjs/layouts/stack-utils/StackHeaderRight.cjs +4 -0
  79. package/dist/cjs/layouts/stack-utils/StackHeaderRight.native.js +4 -0
  80. package/dist/cjs/layouts/stack-utils/StackHeaderRight.native.js.map +1 -1
  81. package/dist/cjs/layouts/stack-utils/StackHeaderSearchBar.cjs +4 -0
  82. package/dist/cjs/layouts/stack-utils/StackHeaderSearchBar.native.js +4 -0
  83. package/dist/cjs/layouts/stack-utils/StackHeaderSearchBar.native.js.map +1 -1
  84. package/dist/cjs/layouts/stack-utils/StackHeaderTitle.cjs +8 -4
  85. package/dist/cjs/layouts/stack-utils/StackHeaderTitle.native.js +8 -4
  86. package/dist/cjs/layouts/stack-utils/StackHeaderTitle.native.js.map +1 -1
  87. package/dist/cjs/layouts/stack-utils/StackScreen.cjs +10 -23
  88. package/dist/cjs/layouts/stack-utils/StackScreen.native.js +21 -27
  89. package/dist/cjs/layouts/stack-utils/StackScreen.native.js.map +1 -1
  90. package/dist/cjs/layouts/stack-utils/__tests__/composition.test.cjs +11 -6
  91. package/dist/cjs/layouts/stack-utils/__tests__/composition.test.native.js +15 -6
  92. package/dist/cjs/layouts/stack-utils/__tests__/composition.test.native.js.map +1 -1
  93. package/dist/cjs/layouts/stack-utils/index.cjs +2 -0
  94. package/dist/cjs/layouts/stack-utils/index.native.js +2 -0
  95. package/dist/cjs/layouts/stack-utils/index.native.js.map +1 -1
  96. package/dist/cjs/layouts/withLayoutContext.cjs +2 -2
  97. package/dist/cjs/layouts/withLayoutContext.native.js +2 -2
  98. package/dist/cjs/layouts/withLayoutContext.native.js.map +1 -1
  99. package/dist/cjs/link/Link.cjs +55 -69
  100. package/dist/cjs/link/Link.native.js.map +1 -1
  101. package/dist/cjs/link/useLinkTo.cjs +3 -17
  102. package/dist/cjs/link/useLinkTo.native.js +1 -23
  103. package/dist/cjs/link/useLinkTo.native.js.map +1 -1
  104. package/dist/cjs/metro-config/withOne.test.cjs +2 -2
  105. package/dist/cjs/metro-config/withOne.test.native.js +2 -2
  106. package/dist/cjs/metro-config/withOne.test.native.js.map +1 -1
  107. package/dist/cjs/router/getRouteArtifactPath.test.native.js.map +1 -1
  108. package/dist/cjs/router/router.cjs +2 -2
  109. package/dist/cjs/router/router.native.js +2 -2
  110. package/dist/cjs/router/router.native.js.map +1 -1
  111. package/dist/cjs/router/useScreens.cjs +31 -72
  112. package/dist/cjs/router/useScreens.native.js +15 -71
  113. package/dist/cjs/router/useScreens.native.js.map +1 -1
  114. package/dist/cjs/router/web/WebStackNavigator.cjs +8 -7
  115. package/dist/cjs/router/web/WebStackNavigator.native.js +8 -7
  116. package/dist/cjs/router/web/WebStackNavigator.native.js.map +1 -1
  117. package/dist/cjs/router/web/WebStackView.cjs +108 -131
  118. package/dist/cjs/router/web/WebStackView.native.js +117 -176
  119. package/dist/cjs/router/web/WebStackView.native.js.map +1 -1
  120. package/dist/cjs/router/web/stackStateUtils.native.js.map +1 -1
  121. package/dist/cjs/screensFeatureFlags.cjs +1 -16
  122. package/dist/cjs/screensFeatureFlags.native.js +3 -3
  123. package/dist/cjs/screensFeatureFlags.native.js.map +1 -1
  124. package/dist/cjs/typed-routes/generateRouteTypes.cjs +3 -10
  125. package/dist/cjs/typed-routes/generateRouteTypes.native.js +3 -10
  126. package/dist/cjs/typed-routes/generateRouteTypes.native.js.map +1 -1
  127. package/dist/cjs/ui/Slot.cjs +4 -25
  128. package/dist/cjs/ui/Slot.native.js.map +1 -1
  129. package/dist/cjs/ui/TabList.cjs +7 -19
  130. package/dist/cjs/ui/TabList.native.js.map +1 -1
  131. package/dist/cjs/ui/TabSlot.cjs +15 -47
  132. package/dist/cjs/ui/TabSlot.native.js.map +1 -1
  133. package/dist/cjs/ui/TabTrigger.cjs +30 -134
  134. package/dist/cjs/ui/TabTrigger.native.js +14 -115
  135. package/dist/cjs/ui/TabTrigger.native.js.map +1 -1
  136. package/dist/cjs/ui/Tabs.cjs +15 -155
  137. package/dist/cjs/ui/Tabs.native.js +4 -144
  138. package/dist/cjs/ui/Tabs.native.js.map +1 -1
  139. package/dist/cjs/ui/Tabs.shared.cjs +160 -0
  140. package/dist/cjs/ui/Tabs.shared.native.js +174 -0
  141. package/dist/cjs/ui/Tabs.shared.native.js.map +1 -0
  142. package/dist/cjs/ui/useTabTrigger.cjs +122 -0
  143. package/dist/cjs/ui/useTabTrigger.native.js +125 -0
  144. package/dist/cjs/ui/useTabTrigger.native.js.map +1 -0
  145. package/dist/cjs/useBlocker.cjs +55 -93
  146. package/dist/cjs/useLoader.native.js +0 -18
  147. package/dist/cjs/useLoader.native.js.map +1 -1
  148. package/dist/cjs/utils/platform.cjs +28 -0
  149. package/dist/cjs/utils/platform.native.js +32 -0
  150. package/dist/cjs/utils/platform.native.js.map +1 -0
  151. package/dist/cjs/utils/routeIndex.cjs +80 -0
  152. package/dist/cjs/utils/routeIndex.native.js +86 -0
  153. package/dist/cjs/utils/routeIndex.native.js.map +1 -0
  154. package/dist/cjs/utils/routeIndex.test.cjs +51 -0
  155. package/dist/cjs/utils/routeIndex.test.native.js +54 -0
  156. package/dist/cjs/utils/routeIndex.test.native.js.map +1 -0
  157. package/dist/cjs/utils/style.cjs +21 -1
  158. package/dist/cjs/utils/style.native.js +40 -1
  159. package/dist/cjs/utils/style.native.js.map +1 -1
  160. package/dist/cjs/views/LoadProgressBar.cjs +59 -23
  161. package/dist/cjs/views/LoadProgressBar.native.js.map +1 -1
  162. package/dist/cjs/views/Protected.cjs +4 -0
  163. package/dist/cjs/views/Protected.native.js +4 -0
  164. package/dist/cjs/views/Protected.native.js.map +1 -1
  165. package/dist/cjs/views/RootErrorBoundary.cjs +107 -148
  166. package/dist/cjs/views/RootErrorBoundary.native.js +30 -140
  167. package/dist/cjs/views/RootErrorBoundary.native.js.map +1 -1
  168. package/dist/cjs/views/RouteErrorView.cjs +108 -0
  169. package/dist/cjs/views/RouteErrorView.native.js +110 -0
  170. package/dist/cjs/views/RouteErrorView.native.js.map +1 -0
  171. package/dist/cjs/views/Screen.cjs +5 -1
  172. package/dist/cjs/views/Screen.native.js +4 -0
  173. package/dist/cjs/views/Screen.native.js.map +1 -1
  174. package/dist/cjs/vite/getManifest.cjs +4 -20
  175. package/dist/cjs/vite/getManifest.native.js +4 -20
  176. package/dist/cjs/vite/getManifest.native.js.map +1 -1
  177. package/dist/cjs/vite/one.cjs +12 -46
  178. package/dist/cjs/vite/one.native.js +23 -59
  179. package/dist/cjs/vite/one.native.js.map +1 -1
  180. package/dist/cjs/vite/plugins/bundledDevPlugin.cjs +130 -0
  181. package/dist/cjs/vite/plugins/bundledDevPlugin.native.js +154 -0
  182. package/dist/cjs/vite/plugins/bundledDevPlugin.native.js.map +1 -0
  183. package/dist/cjs/vite/plugins/devtoolsPlugin.cjs +4 -0
  184. package/dist/cjs/vite/plugins/devtoolsPlugin.native.js +5 -0
  185. package/dist/cjs/vite/plugins/devtoolsPlugin.native.js.map +1 -1
  186. package/dist/cjs/vite/plugins/fileSystemRouterPlugin.cjs +15 -6
  187. package/dist/cjs/vite/plugins/fileSystemRouterPlugin.native.js +15 -5
  188. package/dist/cjs/vite/plugins/fileSystemRouterPlugin.native.js.map +1 -1
  189. package/dist/cjs/vite/plugins/fileSystemRouterPlugin.test.cjs +12 -2
  190. package/dist/cjs/vite/plugins/fileSystemRouterPlugin.test.native.js +12 -2
  191. package/dist/cjs/vite/plugins/fileSystemRouterPlugin.test.native.js.map +1 -1
  192. package/dist/cjs/vite/plugins/generateFileSystemRouteTypesPlugin.cjs +10 -6
  193. package/dist/cjs/vite/plugins/generateFileSystemRouteTypesPlugin.native.js +11 -7
  194. package/dist/cjs/vite/plugins/generateFileSystemRouteTypesPlugin.native.js.map +1 -1
  195. package/dist/cjs/vite/plugins/routeModuleHmrPlugin.cjs +79 -0
  196. package/dist/cjs/vite/plugins/routeModuleHmrPlugin.native.js +84 -0
  197. package/dist/cjs/vite/plugins/routeModuleHmrPlugin.native.js.map +1 -0
  198. package/dist/cjs/vite/plugins/routeModuleHmrPlugin.test.cjs +74 -0
  199. package/dist/cjs/vite/plugins/routeModuleHmrPlugin.test.native.js +83 -0
  200. package/dist/cjs/vite/plugins/routeModuleHmrPlugin.test.native.js.map +1 -0
  201. package/dist/cjs/vite/plugins/virtualEntryPlugin.cjs +11 -5
  202. package/dist/cjs/vite/plugins/virtualEntryPlugin.native.js +20 -10
  203. package/dist/cjs/vite/plugins/virtualEntryPlugin.native.js.map +1 -1
  204. package/dist/cjs/vite/plugins/virtualEntryPlugin.test.cjs +10 -2
  205. package/dist/cjs/vite/plugins/virtualEntryPlugin.test.native.js +14 -2
  206. package/dist/cjs/vite/plugins/virtualEntryPlugin.test.native.js.map +1 -1
  207. package/dist/esm/Root.mjs +1 -1
  208. package/dist/esm/Root.mjs.map +1 -1
  209. package/dist/esm/Root.native.js +1 -1
  210. package/dist/esm/Root.native.js.map +1 -1
  211. package/dist/esm/cli/build.mjs +9 -17
  212. package/dist/esm/cli/build.mjs.map +1 -1
  213. package/dist/esm/cli/build.native.js +8 -16
  214. package/dist/esm/cli/build.native.js.map +1 -1
  215. package/dist/esm/createApp.mjs +12 -35
  216. package/dist/esm/createApp.mjs.map +1 -1
  217. package/dist/esm/createHandleRequest.mjs +4 -2
  218. package/dist/esm/createHandleRequest.mjs.map +1 -1
  219. package/dist/esm/createHandleRequest.native.js +4 -2
  220. package/dist/esm/createHandleRequest.native.js.map +1 -1
  221. package/dist/esm/fallbackViews/Sitemap.mjs +110 -53
  222. package/dist/esm/fallbackViews/Sitemap.mjs.map +1 -1
  223. package/dist/esm/fallbackViews/Sitemap.native.js.map +1 -1
  224. package/dist/esm/fallbackViews/Unmatched.mjs +89 -34
  225. package/dist/esm/fallbackViews/Unmatched.mjs.map +1 -1
  226. package/dist/esm/fallbackViews/Unmatched.native.js.map +1 -1
  227. package/dist/esm/fork/NavigationContainer.mjs +6 -28
  228. package/dist/esm/fork/NavigationContainer.mjs.map +1 -1
  229. package/dist/esm/fork/NavigationContainer.native.js +5 -27
  230. package/dist/esm/fork/NavigationContainer.native.js.map +1 -1
  231. package/dist/esm/fork/localeDirection.mjs +5 -0
  232. package/dist/esm/fork/localeDirection.mjs.map +1 -0
  233. package/dist/esm/fork/localeDirection.native.js +6 -0
  234. package/dist/esm/fork/localeDirection.native.js.map +1 -0
  235. package/dist/esm/fork/theme.mjs +45 -0
  236. package/dist/esm/fork/theme.mjs.map +1 -0
  237. package/dist/esm/fork/theme.native.js +3 -0
  238. package/dist/esm/fork/theme.native.js.map +1 -0
  239. package/dist/esm/headless/Presentations.mjs +25 -0
  240. package/dist/esm/headless/Presentations.mjs.map +1 -0
  241. package/dist/esm/headless/Presentations.native.js +28 -0
  242. package/dist/esm/headless/Presentations.native.js.map +1 -0
  243. package/dist/esm/headless/children.mjs +16 -0
  244. package/dist/esm/headless/children.mjs.map +1 -0
  245. package/dist/esm/headless/children.native.js +16 -0
  246. package/dist/esm/headless/children.native.js.map +1 -0
  247. package/dist/esm/headless/devHeadlessNote.mjs +9 -0
  248. package/dist/esm/headless/devHeadlessNote.mjs.map +1 -0
  249. package/dist/esm/headless/devHeadlessNote.native.js +9 -0
  250. package/dist/esm/headless/devHeadlessNote.native.js.map +1 -0
  251. package/dist/esm/headless/keepMounted.mjs +32 -0
  252. package/dist/esm/headless/keepMounted.mjs.map +1 -0
  253. package/dist/esm/headless/keepMounted.native.js +36 -0
  254. package/dist/esm/headless/keepMounted.native.js.map +1 -0
  255. package/dist/esm/headless/types.mjs +2 -0
  256. package/dist/esm/headless/types.mjs.map +1 -0
  257. package/dist/esm/headless/types.native.js +2 -0
  258. package/dist/esm/headless/types.native.js.map +1 -0
  259. package/dist/esm/headless/useDrawer.mjs +57 -0
  260. package/dist/esm/headless/useDrawer.mjs.map +1 -0
  261. package/dist/esm/headless/useDrawer.native.js +67 -0
  262. package/dist/esm/headless/useDrawer.native.js.map +1 -0
  263. package/dist/esm/headless/useStack.mjs +49 -0
  264. package/dist/esm/headless/useStack.mjs.map +1 -0
  265. package/dist/esm/headless/useStack.native.js +51 -0
  266. package/dist/esm/headless/useStack.native.js.map +1 -0
  267. package/dist/esm/headless/useTabs.mjs +37 -0
  268. package/dist/esm/headless/useTabs.mjs.map +1 -0
  269. package/dist/esm/headless/useTabs.native.js +38 -0
  270. package/dist/esm/headless/useTabs.native.js.map +1 -0
  271. package/dist/esm/index.js +5 -2
  272. package/dist/esm/index.js.map +1 -1
  273. package/dist/esm/index.mjs +5 -2
  274. package/dist/esm/index.mjs.map +1 -1
  275. package/dist/esm/index.native.js +5 -2
  276. package/dist/esm/index.native.js.map +1 -1
  277. package/dist/esm/layouts/Drawer.mjs +69 -29
  278. package/dist/esm/layouts/Drawer.mjs.map +1 -1
  279. package/dist/esm/layouts/Drawer.native.js +2 -26
  280. package/dist/esm/layouts/Drawer.native.js.map +1 -1
  281. package/dist/esm/layouts/Stack.mjs +10 -14
  282. package/dist/esm/layouts/Stack.mjs.map +1 -1
  283. package/dist/esm/layouts/Stack.native.js +12 -14
  284. package/dist/esm/layouts/Stack.native.js.map +1 -1
  285. package/dist/esm/layouts/Tabs.mjs +101 -74
  286. package/dist/esm/layouts/Tabs.mjs.map +1 -1
  287. package/dist/esm/layouts/Tabs.native.js +2 -14
  288. package/dist/esm/layouts/Tabs.native.js.map +1 -1
  289. package/dist/esm/layouts/stack-navigator.mjs +8 -1
  290. package/dist/esm/layouts/stack-navigator.mjs.map +1 -1
  291. package/dist/esm/layouts/stack-navigator.native.js +4 -1
  292. package/dist/esm/layouts/stack-navigator.native.js.map +1 -1
  293. package/dist/esm/layouts/stack-utils/StackHeaderBackButton.mjs +4 -0
  294. package/dist/esm/layouts/stack-utils/StackHeaderBackButton.mjs.map +1 -1
  295. package/dist/esm/layouts/stack-utils/StackHeaderBackButton.native.js +4 -0
  296. package/dist/esm/layouts/stack-utils/StackHeaderBackButton.native.js.map +1 -1
  297. package/dist/esm/layouts/stack-utils/StackHeaderComponent.mjs +7 -3
  298. package/dist/esm/layouts/stack-utils/StackHeaderComponent.mjs.map +1 -1
  299. package/dist/esm/layouts/stack-utils/StackHeaderComponent.native.js +7 -3
  300. package/dist/esm/layouts/stack-utils/StackHeaderComponent.native.js.map +1 -1
  301. package/dist/esm/layouts/stack-utils/StackHeaderLeft.mjs +4 -0
  302. package/dist/esm/layouts/stack-utils/StackHeaderLeft.mjs.map +1 -1
  303. package/dist/esm/layouts/stack-utils/StackHeaderLeft.native.js +4 -0
  304. package/dist/esm/layouts/stack-utils/StackHeaderLeft.native.js.map +1 -1
  305. package/dist/esm/layouts/stack-utils/StackHeaderRight.mjs +4 -0
  306. package/dist/esm/layouts/stack-utils/StackHeaderRight.mjs.map +1 -1
  307. package/dist/esm/layouts/stack-utils/StackHeaderRight.native.js +4 -0
  308. package/dist/esm/layouts/stack-utils/StackHeaderRight.native.js.map +1 -1
  309. package/dist/esm/layouts/stack-utils/StackHeaderSearchBar.mjs +4 -0
  310. package/dist/esm/layouts/stack-utils/StackHeaderSearchBar.mjs.map +1 -1
  311. package/dist/esm/layouts/stack-utils/StackHeaderSearchBar.native.js +4 -0
  312. package/dist/esm/layouts/stack-utils/StackHeaderSearchBar.native.js.map +1 -1
  313. package/dist/esm/layouts/stack-utils/StackHeaderTitle.mjs +9 -5
  314. package/dist/esm/layouts/stack-utils/StackHeaderTitle.mjs.map +1 -1
  315. package/dist/esm/layouts/stack-utils/StackHeaderTitle.native.js +9 -5
  316. package/dist/esm/layouts/stack-utils/StackHeaderTitle.native.js.map +1 -1
  317. package/dist/esm/layouts/stack-utils/StackScreen.mjs +10 -23
  318. package/dist/esm/layouts/stack-utils/StackScreen.mjs.map +1 -1
  319. package/dist/esm/layouts/stack-utils/StackScreen.native.js +23 -29
  320. package/dist/esm/layouts/stack-utils/StackScreen.native.js.map +1 -1
  321. package/dist/esm/layouts/stack-utils/__tests__/composition.test.mjs +12 -7
  322. package/dist/esm/layouts/stack-utils/__tests__/composition.test.mjs.map +1 -1
  323. package/dist/esm/layouts/stack-utils/__tests__/composition.test.native.js +16 -7
  324. package/dist/esm/layouts/stack-utils/__tests__/composition.test.native.js.map +1 -1
  325. package/dist/esm/layouts/stack-utils/index.mjs +2 -0
  326. package/dist/esm/layouts/stack-utils/index.mjs.map +1 -1
  327. package/dist/esm/layouts/stack-utils/index.native.js +2 -0
  328. package/dist/esm/layouts/stack-utils/index.native.js.map +1 -1
  329. package/dist/esm/layouts/withLayoutContext.mjs +2 -2
  330. package/dist/esm/layouts/withLayoutContext.mjs.map +1 -1
  331. package/dist/esm/layouts/withLayoutContext.native.js +2 -2
  332. package/dist/esm/layouts/withLayoutContext.native.js.map +1 -1
  333. package/dist/esm/link/Link.mjs +57 -68
  334. package/dist/esm/link/Link.mjs.map +1 -1
  335. package/dist/esm/link/useLinkTo.mjs +4 -19
  336. package/dist/esm/link/useLinkTo.mjs.map +1 -1
  337. package/dist/esm/link/useLinkTo.native.js +2 -25
  338. package/dist/esm/link/useLinkTo.native.js.map +1 -1
  339. package/dist/esm/metro-config/withOne.test.mjs +2 -2
  340. package/dist/esm/metro-config/withOne.test.mjs.map +1 -1
  341. package/dist/esm/metro-config/withOne.test.native.js +2 -2
  342. package/dist/esm/metro-config/withOne.test.native.js.map +1 -1
  343. package/dist/esm/router/getRouteArtifactPath.test.mjs.map +1 -1
  344. package/dist/esm/router/getRouteArtifactPath.test.native.js.map +1 -1
  345. package/dist/esm/router/router.mjs +2 -2
  346. package/dist/esm/router/router.mjs.map +1 -1
  347. package/dist/esm/router/router.native.js +2 -2
  348. package/dist/esm/router/router.native.js.map +1 -1
  349. package/dist/esm/router/useScreens.mjs +30 -71
  350. package/dist/esm/router/useScreens.mjs.map +1 -1
  351. package/dist/esm/router/useScreens.native.js +13 -69
  352. package/dist/esm/router/useScreens.native.js.map +1 -1
  353. package/dist/esm/router/useScreens.test.mjs +1 -1
  354. package/dist/esm/router/useScreens.test.mjs.map +1 -1
  355. package/dist/esm/router/web/WebStackNavigator.mjs +5 -4
  356. package/dist/esm/router/web/WebStackNavigator.mjs.map +1 -1
  357. package/dist/esm/router/web/WebStackNavigator.native.js +5 -4
  358. package/dist/esm/router/web/WebStackNavigator.native.js.map +1 -1
  359. package/dist/esm/router/web/WebStackView.mjs +99 -131
  360. package/dist/esm/router/web/WebStackView.mjs.map +1 -1
  361. package/dist/esm/router/web/WebStackView.native.js +107 -175
  362. package/dist/esm/router/web/WebStackView.native.js.map +1 -1
  363. package/dist/esm/router/web/stackStateUtils.mjs.map +1 -1
  364. package/dist/esm/router/web/stackStateUtils.native.js.map +1 -1
  365. package/dist/esm/screensFeatureFlags.mjs +1 -16
  366. package/dist/esm/screensFeatureFlags.mjs.map +1 -1
  367. package/dist/esm/screensFeatureFlags.native.js.map +1 -1
  368. package/dist/esm/typed-routes/generateRouteTypes.mjs +3 -10
  369. package/dist/esm/typed-routes/generateRouteTypes.mjs.map +1 -1
  370. package/dist/esm/typed-routes/generateRouteTypes.native.js +3 -10
  371. package/dist/esm/typed-routes/generateRouteTypes.native.js.map +1 -1
  372. package/dist/esm/ui/Slot.mjs +1 -22
  373. package/dist/esm/ui/Slot.mjs.map +1 -1
  374. package/dist/esm/ui/Slot.native.js.map +1 -1
  375. package/dist/esm/ui/TabList.mjs +3 -15
  376. package/dist/esm/ui/TabList.mjs.map +1 -1
  377. package/dist/esm/ui/TabList.native.js.map +1 -1
  378. package/dist/esm/ui/TabSlot.mjs +12 -44
  379. package/dist/esm/ui/TabSlot.mjs.map +1 -1
  380. package/dist/esm/ui/TabSlot.native.js.map +1 -1
  381. package/dist/esm/ui/TabTrigger.mjs +25 -129
  382. package/dist/esm/ui/TabTrigger.mjs.map +1 -1
  383. package/dist/esm/ui/TabTrigger.native.js +13 -114
  384. package/dist/esm/ui/TabTrigger.native.js.map +1 -1
  385. package/dist/esm/ui/Tabs.mjs +7 -145
  386. package/dist/esm/ui/Tabs.mjs.map +1 -1
  387. package/dist/esm/ui/Tabs.native.js +5 -143
  388. package/dist/esm/ui/Tabs.native.js.map +1 -1
  389. package/dist/esm/ui/Tabs.shared.mjs +134 -0
  390. package/dist/esm/ui/Tabs.shared.mjs.map +1 -0
  391. package/dist/esm/ui/Tabs.shared.native.js +145 -0
  392. package/dist/esm/ui/Tabs.shared.native.js.map +1 -0
  393. package/dist/esm/ui/useTabTrigger.mjs +96 -0
  394. package/dist/esm/ui/useTabTrigger.mjs.map +1 -0
  395. package/dist/esm/ui/useTabTrigger.native.js +96 -0
  396. package/dist/esm/ui/useTabTrigger.native.js.map +1 -0
  397. package/dist/esm/useBlocker.mjs +55 -93
  398. package/dist/esm/useBlocker.mjs.map +1 -1
  399. package/dist/esm/useLoader.native.js +0 -18
  400. package/dist/esm/useLoader.native.js.map +1 -1
  401. package/dist/esm/utils/platform.mjs +3 -0
  402. package/dist/esm/utils/platform.mjs.map +1 -0
  403. package/dist/esm/utils/platform.native.js +4 -0
  404. package/dist/esm/utils/platform.native.js.map +1 -0
  405. package/dist/esm/utils/routeIndex.mjs +43 -0
  406. package/dist/esm/utils/routeIndex.mjs.map +1 -0
  407. package/dist/esm/utils/routeIndex.native.js +46 -0
  408. package/dist/esm/utils/routeIndex.native.js.map +1 -0
  409. package/dist/esm/utils/routeIndex.test.mjs +52 -0
  410. package/dist/esm/utils/routeIndex.test.mjs.map +1 -0
  411. package/dist/esm/utils/routeIndex.test.native.js +52 -0
  412. package/dist/esm/utils/routeIndex.test.native.js.map +1 -0
  413. package/dist/esm/utils/style.mjs +20 -1
  414. package/dist/esm/utils/style.mjs.map +1 -1
  415. package/dist/esm/utils/style.native.js +39 -1
  416. package/dist/esm/utils/style.native.js.map +1 -1
  417. package/dist/esm/views/LoadProgressBar.mjs +45 -20
  418. package/dist/esm/views/LoadProgressBar.mjs.map +1 -1
  419. package/dist/esm/views/LoadProgressBar.native.js.map +1 -1
  420. package/dist/esm/views/Protected.mjs +4 -0
  421. package/dist/esm/views/Protected.mjs.map +1 -1
  422. package/dist/esm/views/Protected.native.js +4 -0
  423. package/dist/esm/views/Protected.native.js.map +1 -1
  424. package/dist/esm/views/RootErrorBoundary.mjs +106 -147
  425. package/dist/esm/views/RootErrorBoundary.mjs.map +1 -1
  426. package/dist/esm/views/RootErrorBoundary.native.js +37 -145
  427. package/dist/esm/views/RootErrorBoundary.native.js.map +1 -1
  428. package/dist/esm/views/RouteErrorView.mjs +83 -0
  429. package/dist/esm/views/RouteErrorView.mjs.map +1 -0
  430. package/dist/esm/views/RouteErrorView.native.js +82 -0
  431. package/dist/esm/views/RouteErrorView.native.js.map +1 -0
  432. package/dist/esm/views/Screen.mjs +4 -0
  433. package/dist/esm/views/Screen.mjs.map +1 -1
  434. package/dist/esm/views/Screen.native.js +4 -0
  435. package/dist/esm/views/Screen.native.js.map +1 -1
  436. package/dist/esm/vite/getManifest.mjs +4 -9
  437. package/dist/esm/vite/getManifest.mjs.map +1 -1
  438. package/dist/esm/vite/getManifest.native.js +4 -9
  439. package/dist/esm/vite/getManifest.native.js.map +1 -1
  440. package/dist/esm/vite/one.mjs +12 -46
  441. package/dist/esm/vite/one.mjs.map +1 -1
  442. package/dist/esm/vite/one.native.js +23 -59
  443. package/dist/esm/vite/one.native.js.map +1 -1
  444. package/dist/esm/vite/plugins/bundledDevPlugin.mjs +94 -0
  445. package/dist/esm/vite/plugins/bundledDevPlugin.mjs.map +1 -0
  446. package/dist/esm/vite/plugins/bundledDevPlugin.native.js +115 -0
  447. package/dist/esm/vite/plugins/bundledDevPlugin.native.js.map +1 -0
  448. package/dist/esm/vite/plugins/devtoolsPlugin.mjs +4 -0
  449. package/dist/esm/vite/plugins/devtoolsPlugin.mjs.map +1 -1
  450. package/dist/esm/vite/plugins/devtoolsPlugin.native.js +5 -0
  451. package/dist/esm/vite/plugins/devtoolsPlugin.native.js.map +1 -1
  452. package/dist/esm/vite/plugins/fileSystemRouterPlugin.mjs +15 -6
  453. package/dist/esm/vite/plugins/fileSystemRouterPlugin.mjs.map +1 -1
  454. package/dist/esm/vite/plugins/fileSystemRouterPlugin.native.js +15 -5
  455. package/dist/esm/vite/plugins/fileSystemRouterPlugin.native.js.map +1 -1
  456. package/dist/esm/vite/plugins/fileSystemRouterPlugin.test.mjs +12 -2
  457. package/dist/esm/vite/plugins/fileSystemRouterPlugin.test.mjs.map +1 -1
  458. package/dist/esm/vite/plugins/fileSystemRouterPlugin.test.native.js +12 -2
  459. package/dist/esm/vite/plugins/fileSystemRouterPlugin.test.native.js.map +1 -1
  460. package/dist/esm/vite/plugins/generateFileSystemRouteTypesPlugin.mjs +10 -6
  461. package/dist/esm/vite/plugins/generateFileSystemRouteTypesPlugin.mjs.map +1 -1
  462. package/dist/esm/vite/plugins/generateFileSystemRouteTypesPlugin.native.js +11 -7
  463. package/dist/esm/vite/plugins/generateFileSystemRouteTypesPlugin.native.js.map +1 -1
  464. package/dist/esm/vite/plugins/routeModuleHmrPlugin.mjs +43 -0
  465. package/dist/esm/vite/plugins/routeModuleHmrPlugin.mjs.map +1 -0
  466. package/dist/esm/vite/plugins/routeModuleHmrPlugin.native.js +45 -0
  467. package/dist/esm/vite/plugins/routeModuleHmrPlugin.native.js.map +1 -0
  468. package/dist/esm/vite/plugins/routeModuleHmrPlugin.test.mjs +75 -0
  469. package/dist/esm/vite/plugins/routeModuleHmrPlugin.test.mjs.map +1 -0
  470. package/dist/esm/vite/plugins/routeModuleHmrPlugin.test.native.js +81 -0
  471. package/dist/esm/vite/plugins/routeModuleHmrPlugin.test.native.js.map +1 -0
  472. package/dist/esm/vite/plugins/virtualEntryPlugin.mjs +11 -5
  473. package/dist/esm/vite/plugins/virtualEntryPlugin.mjs.map +1 -1
  474. package/dist/esm/vite/plugins/virtualEntryPlugin.native.js +20 -10
  475. package/dist/esm/vite/plugins/virtualEntryPlugin.native.js.map +1 -1
  476. package/dist/esm/vite/plugins/virtualEntryPlugin.test.mjs +10 -2
  477. package/dist/esm/vite/plugins/virtualEntryPlugin.test.mjs.map +1 -1
  478. package/dist/esm/vite/plugins/virtualEntryPlugin.test.native.js +14 -2
  479. package/dist/esm/vite/plugins/virtualEntryPlugin.test.native.js.map +1 -1
  480. package/package.json +27 -28
  481. package/src/Root.tsx +2 -6
  482. package/src/cli/build.ts +25 -37
  483. package/src/createApp.tsx +15 -42
  484. package/src/createHandleRequest.ts +6 -2
  485. package/src/fallbackViews/Sitemap.web.tsx +149 -0
  486. package/src/fallbackViews/Unmatched.web.tsx +91 -0
  487. package/src/fork/NavigationContainer.tsx +12 -39
  488. package/src/fork/localeDirection.native.ts +6 -0
  489. package/src/fork/localeDirection.ts +11 -0
  490. package/src/fork/theme.native.ts +1 -0
  491. package/src/fork/theme.ts +41 -0
  492. package/src/headless/Presentations.tsx +37 -0
  493. package/src/headless/children.ts +25 -0
  494. package/src/headless/devHeadlessNote.ts +13 -0
  495. package/src/headless/keepMounted.tsx +46 -0
  496. package/src/headless/types.ts +72 -0
  497. package/src/headless/useDrawer.tsx +88 -0
  498. package/src/headless/useStack.ts +74 -0
  499. package/src/headless/useTabs.ts +40 -0
  500. package/src/index.ts +14 -18
  501. package/src/layouts/Drawer.tsx +4 -35
  502. package/src/layouts/Drawer.web.tsx +117 -0
  503. package/src/layouts/Stack.tsx +54 -62
  504. package/src/layouts/Tabs.tsx +6 -32
  505. package/src/layouts/Tabs.web.tsx +151 -0
  506. package/src/layouts/stack-navigator.ts +6 -2
  507. package/src/layouts/stack-navigator.web.ts +8 -0
  508. package/src/layouts/stack-utils/StackHeaderBackButton.tsx +4 -0
  509. package/src/layouts/stack-utils/StackHeaderComponent.tsx +7 -3
  510. package/src/layouts/stack-utils/StackHeaderLeft.tsx +4 -0
  511. package/src/layouts/stack-utils/StackHeaderRight.tsx +4 -0
  512. package/src/layouts/stack-utils/StackHeaderSearchBar.tsx +4 -0
  513. package/src/layouts/stack-utils/StackHeaderTitle.tsx +9 -5
  514. package/src/layouts/stack-utils/StackScreen.tsx +31 -36
  515. package/src/layouts/stack-utils/__tests__/composition.test.tsx +12 -11
  516. package/src/layouts/stack-utils/index.tsx +2 -0
  517. package/src/layouts/withLayoutContext.tsx +5 -2
  518. package/src/link/Link.web.tsx +84 -0
  519. package/src/link/useLinkTo.tsx +2 -2
  520. package/src/metro-config/withOne.test.ts +5 -4
  521. package/src/router/getRouteArtifactPath.test.ts +1 -6
  522. package/src/router/router.ts +2 -2
  523. package/src/router/useScreens.tsx +31 -71
  524. package/src/router/web/WebStackNavigator.tsx +22 -20
  525. package/src/router/web/WebStackView.tsx +148 -188
  526. package/src/router/web/stackStateUtils.ts +2 -1
  527. package/src/screensFeatureFlags.native.ts +23 -0
  528. package/src/screensFeatureFlags.ts +3 -23
  529. package/src/typed-routes/generateRouteTypes.ts +4 -10
  530. package/src/ui/Slot.web.tsx +9 -0
  531. package/src/ui/TabList.web.tsx +27 -0
  532. package/src/ui/TabSlot.web.tsx +90 -0
  533. package/src/ui/TabTrigger.tsx +33 -249
  534. package/src/ui/TabTrigger.web.tsx +71 -0
  535. package/src/ui/Tabs.shared.tsx +230 -0
  536. package/src/ui/Tabs.tsx +5 -295
  537. package/src/ui/Tabs.web.tsx +40 -0
  538. package/src/ui/useTabTrigger.ts +182 -0
  539. package/src/useBlocker.ts +2 -3
  540. package/src/useLoader.ts +6 -2
  541. package/src/utils/platform.ts +7 -0
  542. package/src/utils/platform.web.ts +1 -0
  543. package/src/utils/routeIndex.test.ts +55 -0
  544. package/src/utils/routeIndex.ts +59 -0
  545. package/src/utils/style.ts +22 -1
  546. package/src/views/LoadProgressBar.web.tsx +135 -0
  547. package/src/views/Protected.tsx +4 -1
  548. package/src/views/RootErrorBoundary.tsx +2 -158
  549. package/src/views/RootErrorBoundary.web.tsx +163 -0
  550. package/src/views/RouteErrorView.tsx +66 -0
  551. package/src/views/RouteErrorView.web.tsx +62 -0
  552. package/src/views/Screen.tsx +3 -0
  553. package/src/vite/getManifest.ts +4 -6
  554. package/src/vite/one.ts +13 -59
  555. package/src/vite/plugins/bundledDevPlugin.ts +119 -0
  556. package/src/vite/plugins/devtoolsPlugin.ts +19 -0
  557. package/src/vite/plugins/fileSystemRouterPlugin.test.ts +19 -11
  558. package/src/vite/plugins/fileSystemRouterPlugin.tsx +31 -6
  559. package/src/vite/plugins/generateFileSystemRouteTypesPlugin.tsx +22 -11
  560. package/src/vite/plugins/routeModuleHmrPlugin.test.ts +73 -0
  561. package/src/vite/plugins/routeModuleHmrPlugin.ts +54 -0
  562. package/src/vite/plugins/virtualEntryPlugin.test.ts +10 -1
  563. package/src/vite/plugins/virtualEntryPlugin.ts +37 -9
  564. package/src/vite/types.ts +11 -0
  565. package/types/Root.d.ts +1 -1
  566. package/types/Root.d.ts.map +1 -1
  567. package/types/cli/build.d.ts.map +1 -1
  568. package/types/createApp.d.ts.map +1 -1
  569. package/types/createHandleRequest.d.ts +2 -1
  570. package/types/createHandleRequest.d.ts.map +1 -1
  571. package/types/fallbackViews/Sitemap.web.d.ts +4 -0
  572. package/types/fallbackViews/Sitemap.web.d.ts.map +1 -0
  573. package/types/fallbackViews/Unmatched.web.d.ts +2 -0
  574. package/types/fallbackViews/Unmatched.web.d.ts.map +1 -0
  575. package/types/fork/NavigationContainer.d.ts.map +1 -1
  576. package/types/fork/localeDirection.d.ts +9 -0
  577. package/types/fork/localeDirection.d.ts.map +1 -0
  578. package/types/fork/localeDirection.native.d.ts +3 -0
  579. package/types/fork/localeDirection.native.d.ts.map +1 -0
  580. package/types/fork/theme.d.ts +4 -0
  581. package/types/fork/theme.d.ts.map +1 -0
  582. package/types/fork/theme.native.d.ts +2 -0
  583. package/types/fork/theme.native.d.ts.map +1 -0
  584. package/types/fork/useLinking.native.d.ts +4 -4
  585. package/types/headless/Presentations.d.ts +13 -0
  586. package/types/headless/Presentations.d.ts.map +1 -0
  587. package/types/headless/children.d.ts +5 -0
  588. package/types/headless/children.d.ts.map +1 -0
  589. package/types/headless/devHeadlessNote.d.ts +2 -0
  590. package/types/headless/devHeadlessNote.d.ts.map +1 -0
  591. package/types/headless/keepMounted.d.ts +9 -0
  592. package/types/headless/keepMounted.d.ts.map +1 -0
  593. package/types/headless/types.d.ts +59 -0
  594. package/types/headless/types.d.ts.map +1 -0
  595. package/types/headless/useDrawer.d.ts +19 -0
  596. package/types/headless/useDrawer.d.ts.map +1 -0
  597. package/types/headless/useStack.d.ts +16 -0
  598. package/types/headless/useStack.d.ts.map +1 -0
  599. package/types/headless/useTabs.d.ts +3 -0
  600. package/types/headless/useTabs.d.ts.map +1 -0
  601. package/types/index.d.ts +6 -2
  602. package/types/index.d.ts.map +1 -1
  603. package/types/layouts/Drawer.d.ts +5 -15
  604. package/types/layouts/Drawer.d.ts.map +1 -1
  605. package/types/layouts/Drawer.web.d.ts +5 -0
  606. package/types/layouts/Drawer.web.d.ts.map +1 -0
  607. package/types/layouts/Stack.d.ts +8 -17
  608. package/types/layouts/Stack.d.ts.map +1 -1
  609. package/types/layouts/Tabs.d.ts +5 -15
  610. package/types/layouts/Tabs.d.ts.map +1 -1
  611. package/types/layouts/Tabs.web.d.ts +20 -0
  612. package/types/layouts/Tabs.web.d.ts.map +1 -0
  613. package/types/layouts/stack-navigator.d.ts +3 -2
  614. package/types/layouts/stack-navigator.d.ts.map +1 -1
  615. package/types/layouts/stack-navigator.web.d.ts +6 -0
  616. package/types/layouts/stack-navigator.web.d.ts.map +1 -1
  617. package/types/layouts/stack-utils/StackHeaderBackButton.d.ts.map +1 -1
  618. package/types/layouts/stack-utils/StackHeaderComponent.d.ts +1 -1
  619. package/types/layouts/stack-utils/StackHeaderComponent.d.ts.map +1 -1
  620. package/types/layouts/stack-utils/StackHeaderLeft.d.ts.map +1 -1
  621. package/types/layouts/stack-utils/StackHeaderRight.d.ts.map +1 -1
  622. package/types/layouts/stack-utils/StackHeaderSearchBar.d.ts.map +1 -1
  623. package/types/layouts/stack-utils/StackHeaderTitle.d.ts +1 -1
  624. package/types/layouts/stack-utils/StackHeaderTitle.d.ts.map +1 -1
  625. package/types/layouts/stack-utils/StackScreen.d.ts +5 -12
  626. package/types/layouts/stack-utils/StackScreen.d.ts.map +1 -1
  627. package/types/layouts/stack-utils/index.d.ts +1 -0
  628. package/types/layouts/stack-utils/index.d.ts.map +1 -1
  629. package/types/layouts/withLayoutContext.d.ts.map +1 -1
  630. package/types/link/Link.web.d.ts +3 -0
  631. package/types/link/Link.web.d.ts.map +1 -0
  632. package/types/link/useLinkTo.d.ts +1 -1
  633. package/types/link/useLinkTo.d.ts.map +1 -1
  634. package/types/router/router.d.ts.map +1 -1
  635. package/types/router/useScreens.d.ts.map +1 -1
  636. package/types/router/web/WebStackNavigator.d.ts.map +1 -1
  637. package/types/router/web/WebStackView.d.ts +9 -25
  638. package/types/router/web/WebStackView.d.ts.map +1 -1
  639. package/types/router/web/stackStateUtils.d.ts +1 -1
  640. package/types/router/web/stackStateUtils.d.ts.map +1 -1
  641. package/types/screensFeatureFlags.d.ts.map +1 -1
  642. package/types/screensFeatureFlags.native.d.ts +2 -0
  643. package/types/screensFeatureFlags.native.d.ts.map +1 -0
  644. package/types/typed-routes/generateRouteTypes.d.ts +1 -1
  645. package/types/typed-routes/generateRouteTypes.d.ts.map +1 -1
  646. package/types/ui/Slot.web.d.ts +5 -0
  647. package/types/ui/Slot.web.d.ts.map +1 -0
  648. package/types/ui/TabContext.d.ts +7 -7
  649. package/types/ui/TabList.web.d.ts +11 -0
  650. package/types/ui/TabList.web.d.ts.map +1 -0
  651. package/types/ui/TabRouter.d.ts +5 -5
  652. package/types/ui/TabRouter.d.ts.map +1 -1
  653. package/types/ui/TabSlot.web.d.ts +24 -0
  654. package/types/ui/TabSlot.web.d.ts.map +1 -0
  655. package/types/ui/TabTrigger.d.ts +4 -75
  656. package/types/ui/TabTrigger.d.ts.map +1 -1
  657. package/types/ui/TabTrigger.web.d.ts +11 -0
  658. package/types/ui/TabTrigger.web.d.ts.map +1 -0
  659. package/types/ui/Tabs.d.ts +2 -249
  660. package/types/ui/Tabs.d.ts.map +1 -1
  661. package/types/ui/Tabs.shared.d.ts +201 -0
  662. package/types/ui/Tabs.shared.d.ts.map +1 -0
  663. package/types/ui/Tabs.web.d.ts +10 -0
  664. package/types/ui/Tabs.web.d.ts.map +1 -0
  665. package/types/ui/useTabTrigger.d.ts +49 -0
  666. package/types/ui/useTabTrigger.d.ts.map +1 -0
  667. package/types/useBlocker.d.ts.map +1 -1
  668. package/types/useLoader.d.ts.map +1 -1
  669. package/types/utils/platform.d.ts +6 -0
  670. package/types/utils/platform.d.ts.map +1 -0
  671. package/types/utils/platform.web.d.ts +2 -0
  672. package/types/utils/platform.web.d.ts.map +1 -0
  673. package/types/utils/routeIndex.d.ts +10 -0
  674. package/types/utils/routeIndex.d.ts.map +1 -0
  675. package/types/utils/routeIndex.test.d.ts +2 -0
  676. package/types/utils/routeIndex.test.d.ts.map +1 -0
  677. package/types/utils/style.d.ts +6 -1
  678. package/types/utils/style.d.ts.map +1 -1
  679. package/types/views/LoadProgressBar.web.d.ts +21 -0
  680. package/types/views/LoadProgressBar.web.d.ts.map +1 -0
  681. package/types/views/Protected.d.ts.map +1 -1
  682. package/types/views/RootErrorBoundary.d.ts.map +1 -1
  683. package/types/views/RootErrorBoundary.web.d.ts +20 -0
  684. package/types/views/RootErrorBoundary.web.d.ts.map +1 -0
  685. package/types/views/RouteErrorView.d.ts +9 -0
  686. package/types/views/RouteErrorView.d.ts.map +1 -0
  687. package/types/views/RouteErrorView.web.d.ts +3 -0
  688. package/types/views/RouteErrorView.web.d.ts.map +1 -0
  689. package/types/views/Screen.d.ts.map +1 -1
  690. package/types/vite/getManifest.d.ts +2 -1
  691. package/types/vite/getManifest.d.ts.map +1 -1
  692. package/types/vite/one.d.ts.map +1 -1
  693. package/types/vite/plugins/bundledDevPlugin.d.ts +3 -0
  694. package/types/vite/plugins/bundledDevPlugin.d.ts.map +1 -0
  695. package/types/vite/plugins/devtoolsPlugin.d.ts.map +1 -1
  696. package/types/vite/plugins/fileSystemRouterPlugin.d.ts +2 -1
  697. package/types/vite/plugins/fileSystemRouterPlugin.d.ts.map +1 -1
  698. package/types/vite/plugins/generateFileSystemRouteTypesPlugin.d.ts +2 -1
  699. package/types/vite/plugins/generateFileSystemRouteTypesPlugin.d.ts.map +1 -1
  700. package/types/vite/plugins/routeModuleHmrPlugin.d.ts +3 -0
  701. package/types/vite/plugins/routeModuleHmrPlugin.d.ts.map +1 -0
  702. package/types/vite/plugins/routeModuleHmrPlugin.test.d.ts +2 -0
  703. package/types/vite/plugins/routeModuleHmrPlugin.test.d.ts.map +1 -0
  704. package/types/vite/plugins/virtualEntryPlugin.d.ts +2 -0
  705. package/types/vite/plugins/virtualEntryPlugin.d.ts.map +1 -1
  706. package/types/vite/types.d.ts +10 -0
  707. package/types/vite/types.d.ts.map +1 -1
  708. package/vendor/react-dom/package.json +1 -1
  709. package/dist/cjs/fork/SSRNavigationContainer.cjs +0 -149
  710. package/dist/cjs/fork/SSRNavigationContainer.native.js +0 -199
  711. package/dist/cjs/fork/SSRNavigationContainer.native.js.map +0 -1
  712. package/dist/cjs/router/renderingRegistry.native.js.map +0 -1
  713. package/dist/cjs/router/web/ScreenRenderContext.native.js.map +0 -1
  714. package/dist/cjs/router/web/__tests__/WebStackView.runtime.test.cjs +0 -295
  715. package/dist/cjs/router/web/__tests__/WebStackView.runtime.test.native.js +0 -335
  716. package/dist/cjs/router/web/__tests__/WebStackView.runtime.test.native.js.map +0 -1
  717. package/dist/cjs/router/web/__tests__/WebStackView.test.cjs +0 -464
  718. package/dist/cjs/router/web/__tests__/WebStackView.test.native.js +0 -515
  719. package/dist/cjs/router/web/__tests__/WebStackView.test.native.js.map +0 -1
  720. package/dist/esm/fork/SSRNavigationContainer.mjs +0 -124
  721. package/dist/esm/fork/SSRNavigationContainer.mjs.map +0 -1
  722. package/dist/esm/fork/SSRNavigationContainer.native.js +0 -160
  723. package/dist/esm/fork/SSRNavigationContainer.native.js.map +0 -1
  724. package/dist/esm/router/renderingRegistry.mjs +0 -26
  725. package/dist/esm/router/renderingRegistry.mjs.map +0 -1
  726. package/dist/esm/router/renderingRegistry.native.js +0 -26
  727. package/dist/esm/router/renderingRegistry.native.js.map +0 -1
  728. package/dist/esm/router/web/ScreenRenderContext.mjs +0 -10
  729. package/dist/esm/router/web/ScreenRenderContext.mjs.map +0 -1
  730. package/dist/esm/router/web/ScreenRenderContext.native.js +0 -10
  731. package/dist/esm/router/web/ScreenRenderContext.native.js.map +0 -1
  732. package/dist/esm/router/web/__tests__/WebStackView.runtime.test.mjs +0 -272
  733. package/dist/esm/router/web/__tests__/WebStackView.runtime.test.mjs.map +0 -1
  734. package/dist/esm/router/web/__tests__/WebStackView.runtime.test.native.js +0 -309
  735. package/dist/esm/router/web/__tests__/WebStackView.runtime.test.native.js.map +0 -1
  736. package/dist/esm/router/web/__tests__/WebStackView.test.mjs +0 -465
  737. package/dist/esm/router/web/__tests__/WebStackView.test.mjs.map +0 -1
  738. package/dist/esm/router/web/__tests__/WebStackView.test.native.js +0 -513
  739. package/dist/esm/router/web/__tests__/WebStackView.test.native.js.map +0 -1
  740. package/src/fork/SSRNavigationContainer.tsx +0 -148
  741. package/src/router/renderingRegistry.ts +0 -109
  742. package/src/router/web/ScreenRenderContext.tsx +0 -61
  743. package/src/router/web/__tests__/WebStackView.runtime.test.tsx +0 -309
  744. package/src/router/web/__tests__/WebStackView.test.tsx +0 -444
  745. package/types/fork/SSRNavigationContainer.d.ts +0 -16
  746. package/types/fork/SSRNavigationContainer.d.ts.map +0 -1
  747. package/types/router/renderingRegistry.d.ts +0 -90
  748. package/types/router/renderingRegistry.d.ts.map +0 -1
  749. package/types/router/web/ScreenRenderContext.d.ts +0 -46
  750. package/types/router/web/ScreenRenderContext.d.ts.map +0 -1
@@ -0,0 +1,119 @@
1
+ import fs from 'node:fs'
2
+ import path from 'node:path'
3
+ import type { Plugin } from 'vite'
4
+ import { virtualEntryId } from './virtualEntryConstants'
5
+
6
+ // Vite 8.1 experimental bundled dev (FullBundleDevEnvironment): a rolldown-powered
7
+ // single-bundle web client. This plugin wires up the pieces One needs to run under
8
+ // it. Enable with `one({ web: { experimentalBundledDev: true } })`. Only active in
9
+ // dev (serve); a no-op for builds and for non-web environments.
10
+ //
11
+ // Companion changes live where they're structurally required:
12
+ // - virtualEntryPlugin: installs the react-refresh preamble into the bundled
13
+ // client entry (the separate /@one/dev.js path can't, since /@vite/client isn't
14
+ // a standalone module in bundled mode).
15
+ // - fileSystemRouterPlugin: serves the bundled entry url and drops /@vite/client
16
+ // from preloads.
17
+ // - devtoolsPlugin: stubs /@vite/client + /@react-refresh imports in /@one/dev.js.
18
+
19
+ const MIME: Record<string, string> = {
20
+ png: 'image/png',
21
+ jpg: 'image/jpeg',
22
+ jpeg: 'image/jpeg',
23
+ gif: 'image/gif',
24
+ webp: 'image/webp',
25
+ avif: 'image/avif',
26
+ bmp: 'image/bmp',
27
+ ico: 'image/x-icon',
28
+ }
29
+
30
+ // rolldown's native asset handling drops default-import asset specifiers
31
+ // (`import logo from './logo.png'`) coming from raw-bundled node_modules deps under
32
+ // One's client env — the binding is elided while its usage is kept, crashing with
33
+ // "X is not defined" (e.g. @react-navigation/elements' icon Assets). transform() DOES
34
+ // run in the FullBundleDev pipeline, so rewrite those imports to inline data-uris.
35
+ //
36
+ // The same data-uri must be produced on the SERVER too: SSR otherwise emits the
37
+ // original asset URL (e.g. `<img src="/features/.../mj.jpg">`), which both 404s under
38
+ // FullBundleDev and diverges from the client's inlined data-uri → React hydration
39
+ // mismatch. So the inliner runs on client (rolldown plugin) and ssr (top-level
40
+ // transform) alike — see bundledDevPlugin().
41
+ function inlineAssetImports(
42
+ code: string,
43
+ id: string
44
+ ): { code: string; map: null } | null {
45
+ if (!/\.(png|jpe?g|gif|webp|avif|bmp|ico)/.test(code)) return null
46
+ const importRe =
47
+ /import\s+(\w+)\s+from\s*['"]([^'"?]+\.(?:png|jpe?g|gif|webp|avif|bmp|ico))['"]\s*;?/g
48
+ const base = id.split('?')[0]
49
+ let result = code
50
+ let changed = false
51
+ let m: RegExpExecArray | null
52
+ const edits: { full: string; name: string; uri: string }[] = []
53
+ while ((m = importRe.exec(code))) {
54
+ const [full, name, spec] = m
55
+ const abs = spec.startsWith('.') ? path.resolve(path.dirname(base), spec) : null
56
+ if (!abs || !fs.existsSync(abs)) continue
57
+ const ext = path.extname(abs).slice(1).toLowerCase()
58
+ const uri = `data:${MIME[ext] || 'application/octet-stream'};base64,${fs.readFileSync(abs).toString('base64')}`
59
+ edits.push({ full, name, uri })
60
+ }
61
+ for (const e of edits) {
62
+ result = result.replace(e.full, `const ${e.name} = ${JSON.stringify(e.uri)};`)
63
+ changed = true
64
+ }
65
+ return changed ? { code: result, map: null } : null
66
+ }
67
+
68
+ function webBundledAssetPlugin() {
69
+ return {
70
+ name: 'one:web-bundled-asset',
71
+ transform: (code: string, id: string) => inlineAssetImports(code, id),
72
+ }
73
+ }
74
+
75
+ export function bundledDevPlugin(enabled: boolean): Plugin {
76
+ return {
77
+ name: 'one:bundled-dev',
78
+
79
+ // mirror the client's asset inlining on the server env so SSR emits the same
80
+ // data-uris (the rolldown client plugin above can't reach the ssr pipeline).
81
+ transform(code, id) {
82
+ if (!enabled) return
83
+ const env = (this as any).environment
84
+ if (!env || env.name !== 'ssr' || env.mode !== 'dev') return
85
+ return inlineAssetImports(code, id)
86
+ },
87
+
88
+ config(_userConfig, env) {
89
+ if (!enabled || env.command !== 'serve') return
90
+
91
+ return {
92
+ experimental: { bundledDev: true },
93
+ environments: {
94
+ client: {
95
+ build: {
96
+ rolldownOptions: {
97
+ // bundle the virtual entry so FullBundleDev serves it at
98
+ // /assets/_virtual_one-entry.js
99
+ input: [virtualEntryId],
100
+ plugins: [webBundledAssetPlugin()],
101
+ experimental: {
102
+ // rolldown 1.1.0 defaulted lazyBarrel ON, which breaks One's
103
+ // index.mjs barrel re-exports under FullBundleDev (e.g. `Slot`
104
+ // resolves to undefined). pin it off.
105
+ lazyBarrel: false,
106
+ },
107
+ // react-native packages import native-only exports
108
+ // (codegenNativeComponent, TurboModuleRegistry, …) from react-native
109
+ // → aliased to react-native-web, which doesn't export them. shim as
110
+ // undefined instead of failing the build (matches the dep optimizer).
111
+ shimMissingExports: true,
112
+ },
113
+ },
114
+ },
115
+ },
116
+ }
117
+ },
118
+ }
119
+ }
@@ -18,6 +18,13 @@ export function createDevtoolsPlugin(options: DevtoolsPluginOptions = {}): Plugi
18
18
  apply: 'serve', // only in dev
19
19
 
20
20
  configureServer(server) {
21
+ // vite 8.1 bundledDev: /@vite/client and /@react-refresh aren't standalone
22
+ // modules (the HMR client + refresh runtime are bundled into the entry), so
23
+ // dev.mjs's top-level imports of them 404 / fail MIME checks and take the whole
24
+ // devtools script down. stub them: HMR (route/loader/css/cursor) becomes a
25
+ // no-op here and the refresh preamble is installed by the bundled entry instead.
26
+ const isBundledDev = !!(server.config as any).experimental?.bundledDev
27
+
21
28
  // serve the devtools script by reading and combining the source files
22
29
  server.middlewares.use(async (req, res, next) => {
23
30
  if (req.url === DEVTOOLS_VIRTUAL_ID) {
@@ -31,6 +38,18 @@ export function createDevtoolsPlugin(options: DevtoolsPluginOptions = {}): Plugi
31
38
  .replace("import './devtools.mjs'", '')
32
39
  .replace("import './source-inspector.mjs'", '')
33
40
 
41
+ if (isBundledDev) {
42
+ code = code
43
+ .replace(
44
+ "import { createHotContext } from '/@vite/client'",
45
+ 'const createHotContext = () => ({ on() {}, off() {}, accept() {}, dispose() {}, prune() {}, send() {}, invalidate() {} })'
46
+ )
47
+ .replace(
48
+ "import { injectIntoGlobalHook } from '/@react-refresh'",
49
+ 'const injectIntoGlobalHook = () => {}'
50
+ )
51
+ }
52
+
34
53
  // only include devtools UI if enabled
35
54
  if (includeUI) {
36
55
  const devtoolsPath = resolvePath('one/devtools/devtools.mjs')
@@ -76,12 +76,16 @@ describe('createFileSystemRouterPlugin', () => {
76
76
  },
77
77
  }
78
78
 
79
+ const { createRouteIndex } = await import('../../utils/routeIndex')
79
80
  const { createFileSystemRouterPlugin } = await import('./fileSystemRouterPlugin')
80
- const plugin = createFileSystemRouterPlugin({
81
- router: {
82
- root: appDir,
81
+ const plugin = createFileSystemRouterPlugin(
82
+ {
83
+ router: {
84
+ root: appDir,
85
+ },
83
86
  },
84
- })
87
+ createRouteIndex({ routerRoot: appDir })
88
+ )
85
89
 
86
90
  let watcherListener:
87
91
  | ((event: string, changedPath: string) => void | Promise<void>)
@@ -130,6 +134,7 @@ describe('createFileSystemRouterPlugin', () => {
130
134
  writeFileSync(routeFile, 'export default function Index() { return null }\n')
131
135
 
132
136
  const { createServerModuleRunner } = await import('vite')
137
+ const { createRouteIndex } = await import('../../utils/routeIndex')
133
138
  const { createFileSystemRouterPlugin } = await import('./fileSystemRouterPlugin')
134
139
  const { virtualEntryId } = await import('./virtualEntryConstants')
135
140
 
@@ -173,14 +178,17 @@ describe('createFileSystemRouterPlugin', () => {
173
178
  },
174
179
  }
175
180
 
176
- const plugin = createFileSystemRouterPlugin({
177
- router: {
178
- root: appDir,
179
- },
180
- server: {
181
- loggingEnabled: false,
181
+ const plugin = createFileSystemRouterPlugin(
182
+ {
183
+ router: {
184
+ root: appDir,
185
+ },
186
+ server: {
187
+ loggingEnabled: false,
188
+ },
182
189
  },
183
- })
190
+ createRouteIndex({ routerRoot: appDir })
191
+ )
184
192
 
185
193
  const installMiddlewares = (plugin as any).configureServer(server)
186
194
  installMiddlewares()
@@ -15,6 +15,7 @@ import { getRouterRootFromOneOptions } from '../../utils/getRouterRootFromOneOpt
15
15
  import { isResponse } from '../../utils/isResponse'
16
16
  import { isStatusRedirect } from '../../utils/isStatus'
17
17
  import { promiseWithResolvers } from '../../utils/promiseWithResolvers'
18
+ import type { RouteIndex } from '../../utils/routeIndex'
18
19
  import { isRouteFileWatchEvent } from '../../utils/routeFileWatch'
19
20
  import { trackLoaderDependencies } from '../../utils/trackLoaderDependencies'
20
21
  import { replaceLoader } from '../../vite/replaceLoader'
@@ -44,8 +45,14 @@ const routeTypeColors: Record<string, (s: string) => string> = {
44
45
  // server needs better dep optimization
45
46
  const USE_SERVER_ENV = false //!!process.env.USE_SERVER_ENV
46
47
 
47
- export function createFileSystemRouterPlugin(options: One.PluginOptions): Plugin {
48
- const preloads = ['/@vite/client', virtalEntryIdClient]
48
+ export function createFileSystemRouterPlugin(
49
+ options: One.PluginOptions,
50
+ routeIndex: RouteIndex
51
+ ): Plugin {
52
+ // under vite 8.1 bundledDev the client entry is bundled and served at a fixed
53
+ // /assets url instead of the unbundled /@id/__x00__virtual url. swapped in
54
+ // configureServer once we can see whether the client env is bundled.
55
+ let preloads = ['/@vite/client', virtalEntryIdClient]
49
56
 
50
57
  let runner: ModuleRunner
51
58
  let server: ViteDevServer
@@ -585,7 +592,11 @@ export function createFileSystemRouterPlugin(options: One.PluginOptions): Plugin
585
592
  return await runner.import(path.join(routerRoot, route.contextKey))
586
593
  },
587
594
  },
588
- { routerRoot, ignoredRouteFiles: options.router?.ignoredRouteFiles }
595
+ {
596
+ routerRoot,
597
+ ignoredRouteFiles: options.router?.ignoredRouteFiles,
598
+ routePaths: routeIndex.getPaths(),
599
+ }
589
600
  )
590
601
  }
591
602
 
@@ -673,6 +684,16 @@ export function createFileSystemRouterPlugin(options: One.PluginOptions): Plugin
673
684
  configureServer(serverIn) {
674
685
  server = serverIn
675
686
 
687
+ // vite 8.1 bundledDev: the client env bundles the virtual entry and serves
688
+ // it at /assets/_virtual_one-entry.js. the unbundled /@id/__x00__virtual url
689
+ // 404s in this mode, so point preloads (and bootstrap) at the bundled url.
690
+ const clientEnv = server.environments?.client as any
691
+ if (clientEnv?.config?.isBundled || clientEnv?.bundledDev) {
692
+ // bundled mode: the HMR client + refresh runtime are bundled into the
693
+ // entry; /@vite/client doesn't exist as a standalone module (404s).
694
+ preloads = ['/assets/_virtual_one-entry.js']
695
+ }
696
+
676
697
  // change this to .server to test using the indepedently scoped env
677
698
  runner = createServerModuleRunner(
678
699
  USE_SERVER_ENV ? server.environments.server : server.environments.ssr
@@ -681,7 +702,10 @@ export function createFileSystemRouterPlugin(options: One.PluginOptions): Plugin
681
702
  const appDir = path.resolve(process.cwd(), getRouterRootFromOneOptions(options))
682
703
 
683
704
  // on change ./app stuff lets reload this to pick up any route changes
684
- const fileWatcherChangeListener = debounce((type: string, changedPath: string) => {
705
+ const recreateRequestHandlerDebounced = debounce((changedPath: string) => {
706
+ recreateRequestHandler(changedPath)
707
+ }, 100)
708
+ const fileWatcherChangeListener = (type: string, changedPath: string) => {
685
709
  if (
686
710
  isRouteFileWatchEvent({
687
711
  event: type,
@@ -689,9 +713,10 @@ export function createFileSystemRouterPlugin(options: One.PluginOptions): Plugin
689
713
  routerRoot: appDir,
690
714
  })
691
715
  ) {
692
- recreateRequestHandler(changedPath)
716
+ routeIndex.update(type, changedPath)
717
+ return recreateRequestHandlerDebounced(changedPath)
693
718
  }
694
- }, 100)
719
+ }
695
720
 
696
721
  server.watcher.addListener('all', fileWatcherChangeListener)
697
722
 
@@ -3,10 +3,16 @@ import { debounce } from 'perfect-debounce'
3
3
  import type { Plugin } from 'vite'
4
4
  import { generateRouteTypes } from '../../typed-routes/generateRouteTypes'
5
5
  import { getRouterRootFromOneOptions } from '../../utils/getRouterRootFromOneOptions'
6
+ import type { RouteIndex } from '../../utils/routeIndex'
6
7
  import { isRouteFileWatchEvent } from '../../utils/routeFileWatch'
7
8
  import type { One } from '../types'
8
9
 
9
- export function generateFileSystemRouteTypesPlugin(options: One.PluginOptions): Plugin {
10
+ export function generateFileSystemRouteTypesPlugin(
11
+ options: One.PluginOptions,
12
+ routeIndex: RouteIndex
13
+ ): Plugin {
14
+ const routerRoot = getRouterRootFromOneOptions(options)
15
+
10
16
  return {
11
17
  name: `one-generate-fs-route-types`,
12
18
  enforce: 'post',
@@ -17,12 +23,20 @@ export function generateFileSystemRouteTypesPlugin(options: One.PluginOptions):
17
23
  // Generate routes.d.ts inside the app directory to keep it organized
18
24
  const outFile = join(appDir, 'routes.d.ts')
19
25
 
20
- const routerRoot = getRouterRootFromOneOptions(options)
21
26
  const typedRoutesGeneration =
22
27
  options.router?.experimental?.typedRoutesGeneration || undefined
23
28
 
24
29
  // on change ./app stuff lets reload this to pick up any route changes
25
- const fileWatcherChangeListener = debounce(async (type: string, path: string) => {
30
+ const generateRouteTypesDebounced = debounce(async () => {
31
+ await generateRouteTypes(
32
+ outFile,
33
+ routerRoot,
34
+ options.router?.ignoredRouteFiles,
35
+ typedRoutesGeneration,
36
+ routeIndex.getPaths()
37
+ )
38
+ }, 100)
39
+ const fileWatcherChangeListener = (type: string, path: string) => {
26
40
  if (
27
41
  isRouteFileWatchEvent({
28
42
  event: type,
@@ -31,14 +45,10 @@ export function generateFileSystemRouteTypesPlugin(options: One.PluginOptions):
31
45
  includeChangeEvents: true,
32
46
  })
33
47
  ) {
34
- generateRouteTypes(
35
- outFile,
36
- routerRoot,
37
- options.router?.ignoredRouteFiles,
38
- typedRoutesGeneration
39
- )
48
+ routeIndex.update(type, path)
49
+ return generateRouteTypesDebounced()
40
50
  }
41
- }, 100)
51
+ }
42
52
 
43
53
  server.watcher.addListener('all', fileWatcherChangeListener)
44
54
 
@@ -49,7 +59,8 @@ export function generateFileSystemRouteTypesPlugin(options: One.PluginOptions):
49
59
  outFile,
50
60
  routerRoot,
51
61
  options.router?.ignoredRouteFiles,
52
- typedRoutesGeneration
62
+ typedRoutesGeneration,
63
+ routeIndex.getPaths()
53
64
  )
54
65
  }
55
66
  },
@@ -0,0 +1,73 @@
1
+ import { describe, expect, it, vi } from 'vitest'
2
+ import { createRouteModuleHmrPlugin } from './routeModuleHmrPlugin'
3
+
4
+ function runHotUpdate({
5
+ environment,
6
+ file,
7
+ modules,
8
+ }: {
9
+ environment: 'client' | 'ssr'
10
+ file: string
11
+ modules: Array<{ id?: string; acceptedHmrExports?: Set<string> }>
12
+ }) {
13
+ const plugin = createRouteModuleHmrPlugin('app-sootsim')
14
+ const send = vi.fn()
15
+ const hotUpdate =
16
+ typeof plugin.hotUpdate === 'object' ? plugin.hotUpdate.handler : plugin.hotUpdate
17
+ const result = hotUpdate!.call(
18
+ { environment: { name: environment } } as never,
19
+ {
20
+ file,
21
+ modules,
22
+ server: {
23
+ config: { root: '/project' },
24
+ hot: { send },
25
+ },
26
+ } as never
27
+ )
28
+ return { result, send }
29
+ }
30
+
31
+ describe(createRouteModuleHmrPlugin, () => {
32
+ it('applies client hmr to the configured router root', () => {
33
+ const routeModule: { id: string; acceptedHmrExports?: Set<string> } = {
34
+ id: '/project/app-sootsim/_layout.tsx?one',
35
+ }
36
+ const otherModule: { id: string; acceptedHmrExports?: Set<string> } = {
37
+ id: '/project/app/index.tsx',
38
+ }
39
+ const { result, send } = runHotUpdate({
40
+ environment: 'client',
41
+ file: '/project/app-sootsim/_layout.tsx',
42
+ modules: [routeModule, otherModule],
43
+ })
44
+
45
+ expect(result).toEqual([routeModule, otherModule])
46
+ expect(routeModule.acceptedHmrExports).toEqual(new Set())
47
+ expect(otherModule.acceptedHmrExports).toBeUndefined()
48
+ expect(send).toHaveBeenCalledWith({
49
+ type: 'custom',
50
+ event: 'one:route-update',
51
+ data: { file: 'app-sootsim/_layout.tsx' },
52
+ })
53
+ })
54
+
55
+ it('suppresses ssr reloads only inside the configured router root', () => {
56
+ const modules = [{ id: '/project/app-sootsim/index.tsx' }]
57
+
58
+ expect(
59
+ runHotUpdate({
60
+ environment: 'ssr',
61
+ file: '/project/app-sootsim/index.tsx',
62
+ modules,
63
+ }).result
64
+ ).toEqual([])
65
+ expect(
66
+ runHotUpdate({
67
+ environment: 'ssr',
68
+ file: '/project/app/index.tsx',
69
+ modules,
70
+ }).result
71
+ ).toEqual(modules)
72
+ })
73
+ })
@@ -0,0 +1,54 @@
1
+ import path from 'node:path'
2
+ import type { Plugin } from 'vite'
3
+ import { isPathInsideDirectory } from '../../utils/routeFileWatch'
4
+
5
+ export function createRouteModuleHmrPlugin(routerRoot: string): Plugin {
6
+ return {
7
+ name: 'route-module-hmr-fix',
8
+ hotUpdate({ server, modules, file }) {
9
+ const absoluteRouterRoot = path.resolve(server.config.root, routerRoot)
10
+ const fileRelativePath = path.relative(server.config.root, file)
11
+
12
+ // for ssr, prevent a full page reload for route files. the module runner
13
+ // picks up the invalidated module on the next request.
14
+ if (
15
+ this.environment?.name === 'ssr' &&
16
+ isPathInsideDirectory(file, absoluteRouterRoot)
17
+ ) {
18
+ return []
19
+ }
20
+
21
+ let hasRouteUpdate = false
22
+ const result = modules.map((module) => {
23
+ if (!module.id) return module
24
+
25
+ const moduleFile = module.id.split('?')[0]
26
+ if (isPathInsideDirectory(moduleFile, absoluteRouterRoot)) {
27
+ const relativeRoutePath = path.relative(absoluteRouterRoot, moduleFile)
28
+
29
+ // vite forces a full reload when a route is not imported by another
30
+ // module. an empty accepted export set keeps that route in hmr.
31
+ module.acceptedHmrExports = new Set()
32
+
33
+ // root layouts are called as functions to support html elements, so
34
+ // react refresh cannot update them without the route event.
35
+ if (/^(?:\([^)]+\)[\\/])?_layout\.[jt]sx?$/.test(relativeRoutePath)) {
36
+ hasRouteUpdate = true
37
+ }
38
+ }
39
+
40
+ return module
41
+ })
42
+
43
+ if (hasRouteUpdate) {
44
+ server.hot.send({
45
+ type: 'custom',
46
+ event: 'one:route-update',
47
+ data: { file: fileRelativePath },
48
+ })
49
+ }
50
+
51
+ return result
52
+ },
53
+ }
54
+ }
@@ -4,6 +4,7 @@ import { tmpdir } from 'node:os'
4
4
  import { join, resolve } from 'node:path'
5
5
  import { describe, expect, it, vi } from 'vitest'
6
6
  import { build } from 'vite'
7
+ import { createRouteIndex } from '../../utils/routeIndex'
7
8
  import { createVirtualEntry } from './virtualEntryPlugin'
8
9
 
9
10
  // mock isNativeEnvironment
@@ -58,7 +59,11 @@ export const registerPreloadedRoute = () => {}`
58
59
  }
59
60
  },
60
61
  },
61
- createVirtualEntry({ root: 'app', flags: {} }),
62
+ createVirtualEntry({
63
+ root: 'app',
64
+ flags: {},
65
+ routeIndex: createRouteIndex({ routerRoot: appDir }),
66
+ }),
62
67
  ],
63
68
  build: {
64
69
  ssr: true,
@@ -101,6 +106,10 @@ export const registerPreloadedRoute = () => {}`
101
106
  const base = {
102
107
  root: 'app',
103
108
  flags: {},
109
+ routeIndex: {
110
+ getPaths: () => [],
111
+ update: () => false,
112
+ },
104
113
  }
105
114
 
106
115
  it('server (ssr) uses lazy dynamic import, not static import', () => {
@@ -1,7 +1,7 @@
1
1
  import { resolve } from 'node:path'
2
2
  import { pathToFileURL } from 'node:url'
3
3
  import { configuration } from '@vxrn/compiler'
4
- import Glob from 'fast-glob'
4
+ import micromatch from 'micromatch'
5
5
  import type { Plugin } from 'vite'
6
6
  import { isNativeEnvironment } from 'vxrn'
7
7
  import {
@@ -11,6 +11,7 @@ import {
11
11
  ROUTE_WEB_EXCLUSION_GLOB_PATTERNS,
12
12
  } from '../../router/glob-patterns'
13
13
  import { matchDirectoryRenderMode, matchFileRenderMode } from '../../router/matchers'
14
+ import type { RouteIndex } from '../../utils/routeIndex'
14
15
  import type { One } from '../types'
15
16
  import {
16
17
  resolvedVirtualEntryId,
@@ -118,6 +119,7 @@ export function createVirtualEntry(options: {
118
119
  router?: One.PluginOptions['router']
119
120
  flags: One.Flags
120
121
  setupFile?: One.PluginOptions['setupFile']
122
+ routeIndex: RouteIndex
121
123
  }): Plugin {
122
124
  const routeGlobs = [
123
125
  `/${options.root}/${ROUTE_GLOB_PATTERN}`,
@@ -154,14 +156,13 @@ export function createVirtualEntry(options: {
154
156
  const isNative = isNativeEnvironment(this.environment)
155
157
  const isSSR = this.environment.name === 'ssr'
156
158
  const serverSpaRouteFiles = isSSR
157
- ? Glob.sync('**/*.{ts,tsx}', {
158
- cwd: resolve(viteRoot, options.root),
159
- ignore: [
160
- ...ROUTE_WEB_EXCLUSION_GLOB_PATTERNS,
161
- ...(options.router?.ignoredRouteFiles || []),
162
- ],
163
- })
164
- .map((file) => file.replaceAll('\\', '/'))
159
+ ? options.routeIndex
160
+ .getPaths()
161
+ .map((file) => file.replace(/^\.\//, ''))
162
+ .filter((file) => /\.tsx?$/.test(file))
163
+ .filter(
164
+ (file) => !micromatch.isMatch(file, ROUTE_WEB_EXCLUSION_GLOB_PATTERNS)
165
+ )
165
166
  .filter((file) => {
166
167
  const parts = file.split('/')
167
168
  const filename = parts.at(-1) || ''
@@ -226,12 +227,39 @@ export function createVirtualEntry(options: {
226
227
  const linkingArg = options.router?.linking
227
228
  ? `linking: ${JSON.stringify(options.router.linking)},`
228
229
  : ''
230
+
231
+ // vite 8.1 bundledDev: the client is a single bundle, so the react-refresh
232
+ // preamble normally provided by /@one/dev.js (which imports /@vite/client —
233
+ // a module that doesn't exist in bundled mode) never installs $RefreshReg$,
234
+ // and every compiler-wrapped route module then throws "preamble was not
235
+ // loaded". install it here instead — this runs at entry-body time, before
236
+ // the lazily-globbed route modules evaluate. ('one' and /@react-refresh are
237
+ // node_modules / the runtime, so neither is refresh-wrapped.)
238
+ // `isBundled` is true for EVERY environment during build, so it alone can't
239
+ // gate this — a prod build would emit an import of /@react-refresh, which
240
+ // only exists while serving. dev mode is what makes the preamble necessary.
241
+ const isBundledClient =
242
+ this.environment.mode === 'dev' &&
243
+ this.environment.name === 'client' &&
244
+ !!(this.environment.config as any)?.isBundled
245
+ const refreshPreambleImport = isBundledClient
246
+ ? `import { injectIntoGlobalHook as __oneInjectRefresh } from '/@react-refresh'`
247
+ : ''
248
+ const refreshPreambleSetup = isBundledClient
249
+ ? `if (typeof window !== 'undefined' && !window.$RefreshReg$) {
250
+ __oneInjectRefresh(window)
251
+ window.$RefreshReg$ = () => {}
252
+ window.$RefreshSig$ = () => (type) => type
253
+ }`
254
+ : ''
229
255
  return `
230
256
  ${setupResult.promiseDeclaration}
231
257
  ${nativewindImport}
258
+ ${refreshPreambleImport}
232
259
 
233
260
  import { createApp, registerPreloadedRoute as _registerPreloadedRoute } from 'one'
234
261
  ${setupResult.importStatement}
262
+ ${refreshPreambleSetup}
235
263
 
236
264
  // Export registerPreloadedRoute so preload files can import it from this bundle
237
265
  // Named export that wraps the original function
package/src/vite/types.ts CHANGED
@@ -544,6 +544,17 @@ export namespace One {
544
544
  * @default false
545
545
  */
546
546
  suspendRoutes?: boolean
547
+
548
+ /**
549
+ * Experimental: serve the web client through Vite 8.1's bundled dev mode
550
+ * (rolldown-powered FullBundleDevEnvironment) instead of unbundled ESM dev.
551
+ * Fewer requests / faster parse, especially for apps with large icon/util
552
+ * imports. Dev-only; ignored for builds.
553
+ *
554
+ * @experimental
555
+ * @default false
556
+ */
557
+ experimentalBundledDev?: boolean
547
558
  }
548
559
 
549
560
  /**
package/types/Root.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { type NavigationContainerProps } from '@react-navigation/native';
1
+ import type { NavigationContainerProps } from '@react-navigation/native';
2
2
  import { type FunctionComponent, type ReactNode } from 'react';
3
3
  import type { OneLinkingConfig } from './link/getLinking';
4
4
  import type { GlobbedRouteImports } from './types';
@@ -1 +1 @@
1
- {"version":3,"file":"Root.d.ts","sourceRoot":"","sources":["../src/Root.tsx"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,wBAAwB,EAC9B,MAAM,0BAA0B,CAAA;AAEjC,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,SAAS,EAMf,MAAM,OAAO,CAAA;AAMd,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAOzD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAA;AAMlD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,cAAc,CAAA;AAcvC,KAAK,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,GAAG;IAC7C,UAAU,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;IACjC,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,mBAAmB,CAAA;IAC3B,UAAU,EAAE,MAAM,CAAA;IAClB,YAAY,CAAC,EAAE,GAAG,CAAC,YAAY,CAAA;IAC/B,KAAK,CAAC,EAAE,GAAG,CAAC,KAAK,CAAA;IACjB,OAAO,CAAC,EAAE,gBAAgB,CAAA;CAC3B,CAAA;AAED,KAAK,UAAU,GAAG;IAChB,OAAO,EAAE,GAAG,CAAC,YAAY,CAAA;IACzB,QAAQ,CAAC,EAAE,GAAG,CAAA;IACd,OAAO,CAAC,EAAE,iBAAiB,CAAC;QAAE,QAAQ,EAAE,SAAS,CAAA;KAAE,CAAC,CAAA;IACpD,wBAAwB,CAAC,EAAE,wBAAwB,GAAG;QACpD,KAAK,CAAC,EAAE;YACN,IAAI,EAAE,OAAO,CAAA;YACb,MAAM,EAAE;gBACN,OAAO,EAAE,MAAM,CAAA;gBACf,UAAU,EAAE,MAAM,CAAA;gBAClB,IAAI,EAAE,MAAM,CAAA;gBACZ,IAAI,EAAE,MAAM,CAAA;gBACZ,MAAM,EAAE,MAAM,CAAA;gBACd,YAAY,EAAE,MAAM,CAAA;aACrB,CAAA;SACF,CAAA;KACF,CAAA;CACF,CAAA;AAQD,wBAAgB,IAAI,CAAC,KAAK,EAAE,SAAS,kDAgKpC"}
1
+ {"version":3,"file":"Root.d.ts","sourceRoot":"","sources":["../src/Root.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAoB,wBAAwB,EAAE,MAAM,0BAA0B,CAAA;AAG1F,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,SAAS,EAMf,MAAM,OAAO,CAAA;AAMd,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAOzD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAA;AAMlD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,cAAc,CAAA;AAcvC,KAAK,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,GAAG;IAC7C,UAAU,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;IACjC,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,mBAAmB,CAAA;IAC3B,UAAU,EAAE,MAAM,CAAA;IAClB,YAAY,CAAC,EAAE,GAAG,CAAC,YAAY,CAAA;IAC/B,KAAK,CAAC,EAAE,GAAG,CAAC,KAAK,CAAA;IACjB,OAAO,CAAC,EAAE,gBAAgB,CAAA;CAC3B,CAAA;AAED,KAAK,UAAU,GAAG;IAChB,OAAO,EAAE,GAAG,CAAC,YAAY,CAAA;IACzB,QAAQ,CAAC,EAAE,GAAG,CAAA;IACd,OAAO,CAAC,EAAE,iBAAiB,CAAC;QAAE,QAAQ,EAAE,SAAS,CAAA;KAAE,CAAC,CAAA;IACpD,wBAAwB,CAAC,EAAE,wBAAwB,GAAG;QACpD,KAAK,CAAC,EAAE;YACN,IAAI,EAAE,OAAO,CAAA;YACb,MAAM,EAAE;gBACN,OAAO,EAAE,MAAM,CAAA;gBACf,UAAU,EAAE,MAAM,CAAA;gBAClB,IAAI,EAAE,MAAM,CAAA;gBACZ,IAAI,EAAE,MAAM,CAAA;gBACZ,MAAM,EAAE,MAAM,CAAA;gBACd,YAAY,EAAE,MAAM,CAAA;aACrB,CAAA;SACF,CAAA;KACF,CAAA;CACF,CAAA;AAQD,wBAAgB,IAAI,CAAC,KAAK,EAAE,SAAS,kDAgKpC"}
@@ -1 +1 @@
1
- {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/cli/build.ts"],"names":[],"mappings":"AAmXA,wBAAsB,KAAK,CAAC,IAAI,EAAE;IAChC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,KAAK,GAAG,KAAK,GAAG,SAAS,CAAA;IACpC,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB,iBAmyCA"}
1
+ {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/cli/build.ts"],"names":[],"mappings":"AAmXA,wBAAsB,KAAK,CAAC,IAAI,EAAE;IAChC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,KAAK,GAAG,KAAK,GAAG,SAAS,CAAA;IACpC,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB,iBAuxCA"}
@@ -1 +1 @@
1
- {"version":3,"file":"createApp.d.ts","sourceRoot":"","sources":["../src/createApp.tsx"],"names":[],"mappings":"AAAA,OAAO,SAAS,CAAA;AAYhB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAC7C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAMzD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,cAAc,CAAA;AAEvC,MAAM,MAAM,cAAc,GAAG;IAC3B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC,CAAA;IAC9C,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,GAAG,CAAC,KAAK,CAAA;IACjB,OAAO,CAAC,EAAE,gBAAgB,CAAA;IAC1B;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;CACzC,CAAA;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,cAAc;;oBAUrB,cAAc;0BAkIR,cAAc,KAAG,OAAO,CAAC,cAAc,CAAC;EAsJzE"}
1
+ {"version":3,"file":"createApp.d.ts","sourceRoot":"","sources":["../src/createApp.tsx"],"names":[],"mappings":"AAAA,OAAO,SAAS,CAAA;AAWhB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAC7C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAMzD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,cAAc,CAAA;AAEvC,MAAM,MAAM,cAAc,GAAG;IAC3B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC,CAAA;IAC9C,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,GAAG,CAAC,KAAK,CAAA;IACjB,OAAO,CAAC,EAAE,gBAAgB,CAAA;IAC1B;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;CACzC,CAAA;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,cAAc;;oBAUrB,cAAc;0BAwGR,cAAc,KAAG,OAAO,CAAC,cAAc,CAAC;EAsJzE"}
@@ -29,9 +29,10 @@ export declare function compileManifest(manifest: {
29
29
  pageRoutes: RouteInfoCompiled[];
30
30
  apiRoutes: RouteInfoCompiled[];
31
31
  };
32
- export declare function createHandleRequest(handlers: RequestHandlers, { routerRoot, ignoredRouteFiles }: {
32
+ export declare function createHandleRequest(handlers: RequestHandlers, { routerRoot, ignoredRouteFiles, routePaths, }: {
33
33
  routerRoot: string;
34
34
  ignoredRouteFiles?: string[];
35
+ routePaths?: string[];
35
36
  }): {
36
37
  manifest: import("./server/createRoutesManifest").RoutesManifest<string>;
37
38
  handler: (request: Request) => Promise<RequestHandlerResponse>;