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,6 +1,803 @@
1
+ // @ts-nocheck - This file contains inline JavaScript strings for client-side devtools
1
2
  import { VIRTUAL_SSR_CSS_HREF } from '../constants'
2
3
 
3
- // replacing Vites since we control the root
4
+ // HMR script for route updates
5
+ const ROUTE_HMR_SCRIPT =
6
+ 'import { createHotContext } from "/@vite/client"; const hot = createHotContext("/__one_route_hmr"); hot.on("one:route-update", (data) => { if (window.__oneRouteCache) { if (data?.file) { window.__oneRouteCache.clearFile(data.file); } else { window.__oneRouteCache.clear(); } } window.dispatchEvent(new CustomEvent("one-hmr-update")); });'
7
+
8
+ // HMR script for loader data updates
9
+ const LOADER_HMR_SCRIPT =
10
+ 'import { createHotContext } from "/@vite/client"; const hot = createHotContext("/__one_loader_hmr"); hot.on("one:loader-data-update", async (data) => { if (data?.routePaths && window.__oneRefetchLoader) { const currentPath = window.location.pathname.replace(/\\/$/, "") || "/"; for (const routePath of data.routePaths) { if (routePath === currentPath) { try { await window.__oneRefetchLoader(routePath); } catch (err) { console.error("[one] Error refetching loader:", err); } } } } });'
11
+
12
+ // React refresh script
13
+ const REACT_REFRESH_SCRIPT =
14
+ 'import { injectIntoGlobalHook } from "/@react-refresh"; injectIntoGlobalHook(window); window.$RefreshReg$ = () => {}; window.$RefreshSig$ = () => (type) => type;'
15
+
16
+ // Unified One DevTools - All panels in one draggable window
17
+ // Alt+Space opens Spotlight-style quick picker
18
+ const ONE_DEVTOOLS_SCRIPT = `
19
+ (function() {
20
+ try {
21
+ var host = null;
22
+ var shadow = null;
23
+ var spotlight = null;
24
+ var panel = null;
25
+ var activeTab = 'seo';
26
+ var isDragging = false;
27
+ var dragOffset = { x: 0, y: 0 };
28
+ var panelPos = { x: 20, y: 20 };
29
+ var snappedEdge = { h: null, v: null };
30
+
31
+ var LOGO_SVG = '<svg width="24" height="24" viewBox="0 0 100 100"><circle cx="50" cy="50" r="48" fill="#FCD34D" stroke="#222" stroke-width="2"/><circle cx="50" cy="35" r="16" fill="white"/><text x="50" y="41" text-anchor="middle" font-family="system-ui" font-size="16" font-weight="bold" fill="#222">1</text></svg>';
32
+
33
+ function escapeHtml(str) {
34
+ if (!str) return '';
35
+ return String(str).replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;');
36
+ }
37
+
38
+ function createHost() {
39
+ if (host) return;
40
+ host = document.createElement('div');
41
+ host.id = 'one-devtools';
42
+ shadow = host.attachShadow({ mode: 'open' });
43
+
44
+ var css = \`
45
+ * { box-sizing: border-box; margin: 0; padding: 0; }
46
+
47
+ .spotlight {
48
+ position: fixed;
49
+ inset: 0;
50
+ z-index: 100000;
51
+ display: none;
52
+ align-items: center;
53
+ justify-content: center;
54
+ backdrop-filter: blur(8px);
55
+ background: rgba(0,0,0,0.4);
56
+ opacity: 0;
57
+ transition: opacity 0.12s ease-out;
58
+ }
59
+ .spotlight.visible { display: flex; opacity: 1; }
60
+
61
+ .spotlight-box {
62
+ background: #1a1a1a;
63
+ border-radius: 12px;
64
+ width: 320px;
65
+ max-width: 90vw;
66
+ overflow: hidden;
67
+ box-shadow: 0 16px 48px rgba(0,0,0,0.5);
68
+ transform: scale(0.96);
69
+ opacity: 0;
70
+ transition: transform 0.12s ease-out, opacity 0.12s ease-out;
71
+ }
72
+ .spotlight.visible .spotlight-box { transform: scale(1); opacity: 1; }
73
+
74
+ .spotlight-header {
75
+ display: flex;
76
+ align-items: center;
77
+ padding: 12px 16px;
78
+ border-bottom: 1px solid #252525;
79
+ gap: 10px;
80
+ }
81
+ .spotlight-header svg { width: 20px; height: 20px; flex-shrink: 0; }
82
+ .spotlight-header-title { font: 13px system-ui, sans-serif; color: #ccc; flex: 1; }
83
+ .spotlight-header-version { font: 11px system-ui, sans-serif; color: #666; }
84
+
85
+ .spotlight-item {
86
+ display: flex;
87
+ align-items: center;
88
+ gap: 12px;
89
+ padding: 12px 16px;
90
+ color: #ccc;
91
+ font: 13px system-ui, sans-serif;
92
+ cursor: pointer;
93
+ transition: background 0.1s;
94
+ border-bottom: 1px solid #252525;
95
+ }
96
+ .spotlight-item:last-child { border-bottom: none; }
97
+ .spotlight-item:hover { background: #252525; color: #fff; }
98
+ .spotlight-item .key {
99
+ background: #333;
100
+ color: #888;
101
+ padding: 2px 6px;
102
+ border-radius: 4px;
103
+ font-size: 11px;
104
+ margin-left: auto;
105
+ }
106
+
107
+ .panel {
108
+ position: fixed;
109
+ width: 420px;
110
+ max-width: calc(100vw - 40px);
111
+ max-height: calc(100vh - 40px);
112
+ background: #161616;
113
+ border-radius: 10px;
114
+ box-shadow: 0 8px 32px rgba(0,0,0,0.4);
115
+ z-index: 99998;
116
+ display: none;
117
+ flex-direction: column;
118
+ overflow: hidden;
119
+ font: 13px system-ui, sans-serif;
120
+ color: #ccc;
121
+ }
122
+ .panel.visible { display: flex; }
123
+
124
+ .panel-header {
125
+ display: flex;
126
+ align-items: center;
127
+ padding: 8px 12px;
128
+ background: #1a1a1a;
129
+ cursor: grab;
130
+ user-select: none;
131
+ gap: 8px;
132
+ }
133
+ .panel-header:active { cursor: grabbing; }
134
+ .panel-header svg { width: 18px; height: 18px; }
135
+ .panel-title { font-weight: 500; color: #999; font-size: 12px; flex: 1; }
136
+ .panel-close {
137
+ background: none;
138
+ border: none;
139
+ color: #666;
140
+ cursor: pointer;
141
+ padding: 4px;
142
+ font-size: 16px;
143
+ line-height: 1;
144
+ }
145
+ .panel-close:hover { color: #fff; }
146
+
147
+ .tabs {
148
+ display: flex;
149
+ background: #1a1a1a;
150
+ padding: 0 8px;
151
+ gap: 2px;
152
+ overflow-x: auto;
153
+ }
154
+ .tab {
155
+ padding: 8px 12px;
156
+ background: none;
157
+ border: none;
158
+ color: #666;
159
+ font: 12px system-ui, sans-serif;
160
+ cursor: pointer;
161
+ border-bottom: 2px solid transparent;
162
+ transition: all 0.1s;
163
+ }
164
+ .tab:hover { color: #999; }
165
+ .tab.active { color: #fff; border-bottom-color: #666; }
166
+
167
+ .content {
168
+ flex: 1;
169
+ overflow-y: auto;
170
+ padding: 12px;
171
+ min-height: 200px;
172
+ max-height: calc(100vh - 140px);
173
+ }
174
+
175
+ .section { margin-bottom: 12px; }
176
+ .section-title { font-size: 11px; color: #666; margin-bottom: 6px; text-transform: uppercase; letter-spacing: 0.5px; }
177
+
178
+ .info-row {
179
+ display: flex;
180
+ gap: 12px;
181
+ padding: 8px 0;
182
+ border-bottom: 1px solid #222;
183
+ }
184
+ .info-row:last-child { border-bottom: none; }
185
+ .info-label { color: #666; font-size: 11px; width: 90px; flex-shrink: 0; padding-top: 1px; }
186
+ .info-value { color: #ccc; font-family: monospace; font-size: 12px; word-break: break-word; line-height: 1.4; flex: 1; }
187
+
188
+ .badge {
189
+ display: inline-block;
190
+ padding: 2px 6px;
191
+ border-radius: 4px;
192
+ font-size: 10px;
193
+ text-transform: uppercase;
194
+ }
195
+ .badge-error { background: #3a2020; color: #f87171; }
196
+ .badge-warn { background: #3a3520; color: #fbbf24; }
197
+ .badge-info { background: #202a3a; color: #60a5fa; }
198
+ .badge-success { background: #1a3a20; color: #4ade80; }
199
+
200
+ .empty { text-align: center; color: #555; padding: 24px; }
201
+
202
+ .error-item {
203
+ background: #1e1e1e;
204
+ border-radius: 6px;
205
+ padding: 10px;
206
+ margin-bottom: 8px;
207
+ border-left: 3px solid #666;
208
+ }
209
+ .error-item.error { border-left-color: #f87171; }
210
+ .error-msg { color: #f87171; font-family: monospace; font-size: 12px; margin-top: 6px; }
211
+
212
+ .timing-bar {
213
+ height: 16px;
214
+ background: #252525;
215
+ border-radius: 4px;
216
+ overflow: hidden;
217
+ display: flex;
218
+ margin: 4px 0;
219
+ }
220
+ .timing-segment { height: 100%; display: flex; align-items: center; justify-content: center; font-size: 9px; color: #fff; }
221
+ .timing-module { background: #555; }
222
+ .timing-exec { background: #888; }
223
+
224
+ .preview-card {
225
+ background: #1e1e1e;
226
+ border-radius: 6px;
227
+ padding: 10px;
228
+ margin-bottom: 10px;
229
+ }
230
+ .preview-title { font-size: 11px; color: #666; margin-bottom: 6px; }
231
+
232
+ .issue-item {
233
+ display: flex;
234
+ align-items: center;
235
+ gap: 8px;
236
+ padding: 6px 0;
237
+ font-size: 12px;
238
+ }
239
+ .issue-icon { font-size: 10px; }
240
+ \`;
241
+
242
+ shadow.innerHTML = '<style>' + css + '</style><div class="spotlight" id="spotlight"><div class="spotlight-box" id="spotlight-box"></div></div><div class="panel" id="panel"></div>';
243
+ document.body.appendChild(host);
244
+
245
+ setupSpotlight();
246
+ setupPanel();
247
+ setupKeyboard();
248
+ }
249
+
250
+ function setupSpotlight() {
251
+ spotlight = shadow.getElementById('spotlight');
252
+ var box = shadow.getElementById('spotlight-box');
253
+
254
+ var items = [
255
+ { id: 'seo', name: 'SEO Preview', key: '⌥S' },
256
+ { id: 'route', name: 'Route Info', key: '⌥R' },
257
+ { id: 'loader', name: 'Loader Timing', key: '⌥L' },
258
+ { id: 'errors', name: 'Errors', key: '⌥E' },
259
+ ];
260
+
261
+ var header = '<div class="spotlight-header">' + LOGO_SVG + '<span class="spotlight-header-title">Dev Tools</span><span class="spotlight-header-version">v1.2.57</span></div>';
262
+ box.innerHTML = header + items.map(function(item) {
263
+ return '<div class="spotlight-item" data-tab="' + item.id + '"><span>' + item.name + '</span><span class="key">' + item.key + '</span></div>';
264
+ }).join('');
265
+
266
+ box.addEventListener('click', function(e) {
267
+ var item = e.target.closest('.spotlight-item');
268
+ if (item) {
269
+ activeTab = item.dataset.tab;
270
+ hideSpotlight();
271
+ showPanel();
272
+ }
273
+ });
274
+
275
+ spotlight.addEventListener('click', function(e) {
276
+ if (e.target === spotlight) hideSpotlight();
277
+ });
278
+ }
279
+
280
+ function setupPanel() {
281
+ panel = shadow.getElementById('panel');
282
+ panel.innerHTML = '<div class="panel-header" id="panel-header">' + LOGO_SVG + '<span class="panel-title">DevTools</span><button class="panel-close" id="panel-close">×</button></div><div class="tabs" id="tabs"><button class="tab active" data-tab="seo">SEO</button><button class="tab" data-tab="route">Route</button><button class="tab" data-tab="loader">Loader</button><button class="tab" data-tab="errors">Errors</button></div><div class="content" id="content"></div>';
283
+
284
+ shadow.getElementById('panel-close').addEventListener('click', hidePanel);
285
+
286
+ var tabs = shadow.getElementById('tabs');
287
+ tabs.addEventListener('click', function(e) {
288
+ var tab = e.target.closest('.tab');
289
+ if (tab) {
290
+ activeTab = tab.dataset.tab;
291
+ updateTabs();
292
+ updateContent();
293
+ }
294
+ });
295
+
296
+ setupDrag();
297
+ }
298
+
299
+ function setupDrag() {
300
+ var header = shadow.getElementById('panel-header');
301
+
302
+ header.addEventListener('mousedown', function(e) {
303
+ if (e.target.closest('.panel-close')) return;
304
+ isDragging = true;
305
+ var rect = panel.getBoundingClientRect();
306
+ dragOffset.x = e.clientX - rect.left;
307
+ dragOffset.y = e.clientY - rect.top;
308
+ // Store current position before resetting snap state
309
+ panelPos.x = rect.left;
310
+ panelPos.y = rect.top;
311
+ snappedEdge = { h: null, v: null };
312
+ });
313
+
314
+ document.addEventListener('mousemove', function(e) {
315
+ if (!isDragging) return;
316
+ var x = e.clientX - dragOffset.x;
317
+ var y = e.clientY - dragOffset.y;
318
+ var snapDist = 20;
319
+ var w = window.innerWidth;
320
+ var h = window.innerHeight;
321
+ var pw = panel.offsetWidth;
322
+ var ph = panel.offsetHeight;
323
+ var pad = 10;
324
+
325
+ var snapH = null;
326
+ var snapV = null;
327
+
328
+ if (x < snapDist) { snapH = 'left'; }
329
+ else if (x + pw > w - snapDist) { snapH = 'right'; }
330
+ if (y < snapDist) { snapV = 'top'; }
331
+ else if (y + ph > h - snapDist) { snapV = 'bottom'; }
332
+
333
+ snappedEdge = { h: snapH, v: snapV };
334
+
335
+ // Apply horizontal positioning
336
+ if (snapH === 'left') {
337
+ panel.style.left = pad + 'px';
338
+ panel.style.right = 'auto';
339
+ } else if (snapH === 'right') {
340
+ panel.style.left = 'auto';
341
+ panel.style.right = pad + 'px';
342
+ } else {
343
+ panel.style.left = x + 'px';
344
+ panel.style.right = 'auto';
345
+ panelPos.x = x;
346
+ }
347
+
348
+ // Apply vertical positioning
349
+ if (snapV === 'top') {
350
+ panel.style.top = pad + 'px';
351
+ panel.style.bottom = 'auto';
352
+ } else if (snapV === 'bottom') {
353
+ panel.style.top = 'auto';
354
+ panel.style.bottom = pad + 'px';
355
+ } else {
356
+ panel.style.top = y + 'px';
357
+ panel.style.bottom = 'auto';
358
+ panelPos.y = y;
359
+ }
360
+ });
361
+
362
+ document.addEventListener('mouseup', function() {
363
+ isDragging = false;
364
+ });
365
+ }
366
+
367
+ function setupKeyboard() {
368
+ document.addEventListener('keydown', function(e) {
369
+ if (e.altKey && e.code === 'Space') {
370
+ e.preventDefault();
371
+ toggleSpotlight();
372
+ } else if (e.altKey) {
373
+ var tabMap = { KeyS: 'seo', KeyR: 'route', KeyL: 'loader', KeyE: 'errors' };
374
+ var tab = tabMap[e.code];
375
+ if (tab) {
376
+ e.preventDefault();
377
+ activeTab = tab;
378
+ hideSpotlight();
379
+ showPanel();
380
+ }
381
+ } else if (e.code === 'Escape') {
382
+ if (spotlight.classList.contains('visible')) hideSpotlight();
383
+ else if (panel.classList.contains('visible')) hidePanel();
384
+ }
385
+ });
386
+ }
387
+
388
+ function toggleSpotlight() {
389
+ if (spotlight.classList.contains('visible')) hideSpotlight();
390
+ else showSpotlight();
391
+ }
392
+
393
+ function showSpotlight() {
394
+ if (!host) createHost();
395
+ spotlight.classList.add('visible');
396
+ }
397
+
398
+ function hideSpotlight() {
399
+ spotlight.classList.remove('visible');
400
+ }
401
+
402
+ function showPanel() {
403
+ if (!host) createHost();
404
+ var pad = 10;
405
+ // Apply horizontal positioning based on snap state
406
+ if (snappedEdge.h === 'left') {
407
+ panel.style.left = pad + 'px';
408
+ panel.style.right = 'auto';
409
+ } else if (snappedEdge.h === 'right') {
410
+ panel.style.left = 'auto';
411
+ panel.style.right = pad + 'px';
412
+ } else {
413
+ panel.style.left = panelPos.x + 'px';
414
+ panel.style.right = 'auto';
415
+ }
416
+ // Apply vertical positioning based on snap state
417
+ if (snappedEdge.v === 'top') {
418
+ panel.style.top = pad + 'px';
419
+ panel.style.bottom = 'auto';
420
+ } else if (snappedEdge.v === 'bottom') {
421
+ panel.style.top = 'auto';
422
+ panel.style.bottom = pad + 'px';
423
+ } else {
424
+ panel.style.top = panelPos.y + 'px';
425
+ panel.style.bottom = 'auto';
426
+ }
427
+ panel.classList.add('visible');
428
+ updateTabs();
429
+ updateContent();
430
+ }
431
+
432
+ function hidePanel() {
433
+ panel.classList.remove('visible');
434
+ }
435
+
436
+ function updateTabs() {
437
+ shadow.querySelectorAll('.tab').forEach(function(t) {
438
+ t.classList.toggle('active', t.dataset.tab === activeTab);
439
+ });
440
+ }
441
+
442
+ function updateContent() {
443
+ var content = shadow.getElementById('content');
444
+ if (activeTab === 'seo') content.innerHTML = getSeoContent();
445
+ else if (activeTab === 'route') content.innerHTML = getRouteContent();
446
+ else if (activeTab === 'loader') content.innerHTML = getLoaderContent();
447
+ else if (activeTab === 'errors') content.innerHTML = getErrorsContent();
448
+ }
449
+
450
+ function getSeoContent() {
451
+ var title = document.title || '';
452
+ var desc = document.querySelector('meta[name="description"]')?.content || '';
453
+ var ogTitle = document.querySelector('meta[property="og:title"]')?.content || '';
454
+ var ogDesc = document.querySelector('meta[property="og:description"]')?.content || '';
455
+ var ogImage = document.querySelector('meta[property="og:image"]')?.content || '';
456
+
457
+ var issues = [];
458
+ if (!title) issues.push({ type: 'error', msg: 'Missing title' });
459
+ else if (title.length > 60) issues.push({ type: 'warn', msg: 'Title too long (>60)' });
460
+ if (!desc) issues.push({ type: 'error', msg: 'Missing description' });
461
+ else if (desc.length > 160) issues.push({ type: 'warn', msg: 'Description too long (>160)' });
462
+ if (!ogTitle) issues.push({ type: 'warn', msg: 'Missing og:title' });
463
+ if (!ogImage) issues.push({ type: 'warn', msg: 'Missing og:image' });
464
+
465
+ var html = '';
466
+ if (issues.length) {
467
+ html += '<div class="section"><div class="section-title">Issues</div>';
468
+ issues.forEach(function(i) {
469
+ html += '<div class="issue-item"><span class="issue-icon">' + (i.type === 'error' ? '✖' : '⚠') + '</span><span>' + escapeHtml(i.msg) + '</span></div>';
470
+ });
471
+ html += '</div>';
472
+ }
473
+
474
+ html += '<div class="section"><div class="section-title">Google Preview</div><div class="preview-card" style="background:#fff;color:#202124;padding:12px;border-radius:8px;">';
475
+ html += '<div style="font-size:12px;color:#202124;margin-bottom:2px;">' + escapeHtml(location.hostname) + '</div>';
476
+ html += '<div style="font-size:16px;color:#1a0dab;margin-bottom:4px;">' + escapeHtml(title || 'No title') + '</div>';
477
+ html += '<div style="font-size:13px;color:#4d5156;">' + escapeHtml(desc ? desc.slice(0,160) : 'No description') + '</div>';
478
+ html += '</div></div>';
479
+
480
+ html += '<div class="section"><div class="section-title">Meta Tags</div>';
481
+ html += '<div class="info-row"><div class="info-label">title</div><div class="info-value">' + escapeHtml(title || '-') + '</div></div>';
482
+ html += '<div class="info-row"><div class="info-label">description</div><div class="info-value">' + escapeHtml(desc || '-') + '</div></div>';
483
+ html += '<div class="info-row"><div class="info-label">og:title</div><div class="info-value">' + escapeHtml(ogTitle || '-') + '</div></div>';
484
+ html += '<div class="info-row"><div class="info-label">og:description</div><div class="info-value">' + escapeHtml(ogDesc || '-') + '</div></div>';
485
+ html += '<div class="info-row"><div class="info-label">og:image</div><div class="info-value">' + escapeHtml(ogImage || '-') + '</div></div>';
486
+ html += '</div>';
487
+
488
+ return html;
489
+ }
490
+
491
+ function getRouteContent() {
492
+ var pathname = location.pathname;
493
+ var segments = pathname.split('/').filter(Boolean);
494
+ var search = location.search;
495
+ var hash = location.hash;
496
+ var devtools = window.__oneDevtools || {};
497
+ var routeInfo = devtools.routeInfo || {};
498
+ var params = routeInfo.params || {};
499
+
500
+ var html = '<div class="section"><div class="section-title">Current Route</div>';
501
+ html += '<div class="info-row"><span class="info-label">pathname</span><span class="info-value">' + escapeHtml(pathname) + '</span></div>';
502
+ html += '<div class="info-row"><span class="info-label">segments</span><span class="info-value">' + (segments.length ? segments.map(function(s) { return '<span style="background:#252525;padding:2px 6px;border-radius:4px;margin-right:4px;">' + escapeHtml(s) + '</span>'; }).join('') : '/') + '</span></div>';
503
+ if (search) html += '<div class="info-row"><span class="info-label">search</span><span class="info-value">' + escapeHtml(search) + '</span></div>';
504
+ if (hash) html += '<div class="info-row"><span class="info-label">hash</span><span class="info-value">' + escapeHtml(hash) + '</span></div>';
505
+ html += '</div>';
506
+
507
+ if (Object.keys(params).length) {
508
+ html += '<div class="section"><div class="section-title">Route Params</div>';
509
+ Object.entries(params).forEach(function(kv) {
510
+ html += '<div class="info-row"><span class="info-label">' + escapeHtml(kv[0]) + '</span><span class="info-value">' + escapeHtml(String(kv[1])) + '</span></div>';
511
+ });
512
+ html += '</div>';
513
+ }
514
+
515
+ html += '<div class="section"><div class="section-title">Full URL</div>';
516
+ html += '<div style="font-family:monospace;font-size:11px;color:#666;word-break:break-all;">' + escapeHtml(location.href) + '</div>';
517
+ html += '</div>';
518
+
519
+ return html;
520
+ }
521
+
522
+ function getLoaderContent() {
523
+ var devtools = window.__oneDevtools || {};
524
+ var history = typeof devtools.getLoaderTimingHistory === 'function' ? devtools.getLoaderTimingHistory() || [] : [];
525
+
526
+ if (!history.length) {
527
+ return '<div class="empty">No loader timings recorded yet</div>';
528
+ }
529
+
530
+ var maxTime = Math.max.apply(null, history.map(function(t) { return t.totalTime || 0; }));
531
+ var html = '';
532
+
533
+ history.forEach(function(t) {
534
+ var modPct = t.moduleLoadTime && t.totalTime ? (t.moduleLoadTime / t.totalTime) * 100 : 0;
535
+ var execPct = t.executionTime && t.totalTime ? (t.executionTime / t.totalTime) * 100 : 0;
536
+ var widthPct = t.totalTime && maxTime ? (t.totalTime / maxTime) * 100 : 0;
537
+
538
+ html += '<div class="error-item' + (t.error ? ' error' : '') + '">';
539
+ html += '<div style="display:flex;justify-content:space-between;align-items:center;">';
540
+ html += '<span style="font-family:monospace;font-size:11px;">' + escapeHtml(t.path) + '</span>';
541
+ html += '<span class="badge badge-' + (t.error ? 'error' : 'success') + '">' + (t.totalTime ? Math.round(t.totalTime) + 'ms' : '-') + '</span>';
542
+ html += '</div>';
543
+ if (!t.error) {
544
+ html += '<div class="timing-bar" style="width:' + Math.max(20, widthPct) + '%;">';
545
+ html += '<div class="timing-segment timing-module" style="width:' + modPct + '%;" title="Module: ' + Math.round(t.moduleLoadTime || 0) + 'ms"></div>';
546
+ html += '<div class="timing-segment timing-exec" style="width:' + execPct + '%;" title="Exec: ' + Math.round(t.executionTime || 0) + 'ms"></div>';
547
+ html += '</div>';
548
+ }
549
+ if (t.error) html += '<div class="error-msg">' + escapeHtml(t.error) + '</div>';
550
+ html += '</div>';
551
+ });
552
+
553
+ return html;
554
+ }
555
+
556
+ function getErrorsContent() {
557
+ var devtools = window.__oneDevtools || {};
558
+ var errors = devtools.errorHistory || [];
559
+
560
+ if (!errors.length) {
561
+ return '<div class="empty">✓ No errors recorded</div>';
562
+ }
563
+
564
+ var html = '';
565
+ errors.forEach(function(err) {
566
+ html += '<div class="error-item error">';
567
+ html += '<div style="display:flex;justify-content:space-between;align-items:center;margin-bottom:6px;">';
568
+ html += '<span class="badge badge-error">' + escapeHtml(err.type || 'error') + '</span>';
569
+ html += '<span style="font-size:11px;color:#666;">' + new Date(err.timestamp).toLocaleTimeString() + '</span>';
570
+ html += '</div>';
571
+ html += '<div class="error-msg">' + escapeHtml(err.error?.message || 'Unknown error') + '</div>';
572
+ html += '</div>';
573
+ });
574
+
575
+ return html;
576
+ }
577
+
578
+ // Initialize
579
+ createHost();
580
+
581
+ // Listen for events
582
+ window.addEventListener('one-loader-timing', function() {
583
+ if (panel && panel.classList.contains('visible') && activeTab === 'loader') updateContent();
584
+ });
585
+ window.addEventListener('one-error', function(e) {
586
+ var devtools = window.__oneDevtools = window.__oneDevtools || {};
587
+ devtools.errorHistory = devtools.errorHistory || [];
588
+ devtools.errorHistory.unshift(e.detail);
589
+ if (devtools.errorHistory.length > 20) devtools.errorHistory = devtools.errorHistory.slice(0, 20);
590
+ if (panel && panel.classList.contains('visible') && activeTab === 'errors') updateContent();
591
+ });
592
+
593
+ // Update on navigation
594
+ function onNavigate() {
595
+ if (panel && panel.classList.contains('visible')) updateContent();
596
+ }
597
+ window.addEventListener('popstate', onNavigate);
598
+ window.addEventListener('one-hmr-update', onNavigate);
599
+ // Also catch pushState/replaceState
600
+ var origPushState = history.pushState;
601
+ var origReplaceState = history.replaceState;
602
+ history.pushState = function() {
603
+ origPushState.apply(this, arguments);
604
+ setTimeout(onNavigate, 0);
605
+ };
606
+ history.replaceState = function() {
607
+ origReplaceState.apply(this, arguments);
608
+ setTimeout(onNavigate, 0);
609
+ };
610
+
611
+ } catch (e) {
612
+ console.error('[One DevTools] Failed to initialize:', e);
613
+ }
614
+ })();
615
+ `
616
+
617
+ // Source Inspector script - shows source location on hover when holding Option for 0.5s
618
+ // Uses shadow DOM for style isolation to avoid conflicts with page styles (e.g., Tamagui)
619
+ const SOURCE_INSPECTOR_SCRIPT = `
620
+ (function() {
621
+ try {
622
+ var active = false;
623
+ var host = null;
624
+ var shadow = null;
625
+ var overlay = null;
626
+ var tag = null;
627
+ var holdTimer = null;
628
+ var holdDelay = 500;
629
+ var mousePos = { x: 0, y: 0 };
630
+
631
+ function createHost() {
632
+ if (host) return;
633
+ host = document.createElement('div');
634
+ host.id = 'one-source-inspector';
635
+ shadow = host.attachShadow({ mode: 'open' });
636
+ shadow.innerHTML = \`
637
+ <style>
638
+ * { box-sizing: border-box; margin: 0; padding: 0; }
639
+ .overlay {
640
+ position: fixed;
641
+ pointer-events: none;
642
+ z-index: 100000;
643
+ background: rgba(100,100,100,0.2);
644
+ border: 2px solid rgba(100,100,100,0.6);
645
+ border-radius: 2px;
646
+ transition: all 0.05s;
647
+ display: none;
648
+ }
649
+ .tag {
650
+ position: fixed;
651
+ pointer-events: none;
652
+ z-index: 100001;
653
+ background: rgba(60,60,60,0.95);
654
+ color: white;
655
+ padding: 4px 8px;
656
+ font-size: 12px;
657
+ font-family: system-ui, -apple-system, sans-serif;
658
+ border-radius: 4px;
659
+ white-space: nowrap;
660
+ box-shadow: 0 2px 8px rgba(0,0,0,0.3);
661
+ display: none;
662
+ }
663
+ </style>
664
+ <div class="overlay"></div>
665
+ <div class="tag"></div>
666
+ \`;
667
+ document.body.appendChild(host);
668
+ overlay = shadow.querySelector('.overlay');
669
+ tag = shadow.querySelector('.tag');
670
+ }
671
+
672
+ function hideOverlay() {
673
+ if (overlay) overlay.style.display = 'none';
674
+ if (tag) tag.style.display = 'none';
675
+ }
676
+
677
+ function showOverlay(el, source) {
678
+ if (!host) createHost();
679
+ var rect = el.getBoundingClientRect();
680
+ overlay.style.display = 'block';
681
+ overlay.style.top = rect.top + 'px';
682
+ overlay.style.left = rect.left + 'px';
683
+ overlay.style.width = rect.width + 'px';
684
+ overlay.style.height = rect.height + 'px';
685
+ tag.style.display = 'block';
686
+ tag.textContent = source;
687
+ var top = rect.top - 28;
688
+ if (top < 0) top = rect.bottom + 4;
689
+ tag.style.top = top + 'px';
690
+ tag.style.left = Math.max(4, Math.min(rect.left, window.innerWidth - 200)) + 'px';
691
+ }
692
+
693
+ function cancelHold() {
694
+ clearTimeout(holdTimer);
695
+ holdTimer = null;
696
+ }
697
+
698
+ function updateOverlayAtPosition(x, y) {
699
+ // Use elementsFromPoint to get all elements at position, ordered from topmost/innermost to bottom
700
+ var allElements = document.elementsFromPoint(x, y);
701
+ // Find the first (innermost) element with data-one-source
702
+ var el = null;
703
+ for (var i = 0; i < allElements.length; i++) {
704
+ if (allElements[i].hasAttribute('data-one-source')) {
705
+ el = allElements[i];
706
+ break;
707
+ }
708
+ }
709
+ if (el) {
710
+ var source = el.getAttribute('data-one-source');
711
+ var lastColon = source.lastIndexOf(':');
712
+ var filePath = source.slice(0, lastColon);
713
+ var idx = source.slice(lastColon + 1);
714
+ var info = window.__oneSourceInfo && window.__oneSourceInfo[filePath];
715
+ var lineCol = info && info[idx];
716
+ var displaySource = lineCol ? filePath + ':' + lineCol[0] + ':' + lineCol[1] : source;
717
+ showOverlay(el, displaySource);
718
+ } else {
719
+ hideOverlay();
720
+ }
721
+ }
722
+
723
+ function activate() {
724
+ active = true;
725
+ // Immediately show overlay at current mouse position
726
+ updateOverlayAtPosition(mousePos.x, mousePos.y);
727
+ }
728
+
729
+ function deactivate() {
730
+ cancelHold();
731
+ active = false;
732
+ hideOverlay();
733
+ }
734
+
735
+ window.addEventListener('keydown', function(e) {
736
+ // Only trigger on Alt/Option key held alone
737
+ if (e.key !== 'Alt') {
738
+ cancelHold();
739
+ return;
740
+ }
741
+ // Ignore if other modifier keys are pressed
742
+ if (e.metaKey || e.ctrlKey || e.shiftKey) {
743
+ cancelHold();
744
+ return;
745
+ }
746
+ if (e.defaultPrevented) return;
747
+ if (holdTimer) return; // already waiting
748
+ holdTimer = setTimeout(activate, holdDelay);
749
+ });
750
+
751
+ window.addEventListener('keyup', function(e) {
752
+ if (e.defaultPrevented) return;
753
+ deactivate();
754
+ });
755
+
756
+ window.addEventListener('blur', deactivate);
757
+
758
+ document.addEventListener('mousemove', function(e) {
759
+ // Always track mouse position
760
+ mousePos.x = e.clientX;
761
+ mousePos.y = e.clientY;
762
+ if (!active) return;
763
+ updateOverlayAtPosition(e.clientX, e.clientY);
764
+ });
765
+
766
+ document.addEventListener('click', function(e) {
767
+ if (!active) return;
768
+ // Use elementsFromPoint to find innermost sourced element
769
+ var allElements = document.elementsFromPoint(e.clientX, e.clientY);
770
+ var el = null;
771
+ for (var i = 0; i < allElements.length; i++) {
772
+ if (allElements[i].hasAttribute('data-one-source')) {
773
+ el = allElements[i];
774
+ break;
775
+ }
776
+ }
777
+ if (el) {
778
+ e.preventDefault();
779
+ e.stopPropagation();
780
+ var source = el.getAttribute('data-one-source');
781
+ // Parse source: "/path/to/file.tsx:index"
782
+ var lastColon = source.lastIndexOf(':');
783
+ var filePath = source.slice(0, lastColon);
784
+ var idx = source.slice(lastColon + 1);
785
+ // Look up actual line/column from source info
786
+ var info = window.__oneSourceInfo && window.__oneSourceInfo[filePath];
787
+ var lineCol = info && info[idx];
788
+ var url = '/__one/open-source?source=' + encodeURIComponent(source);
789
+ if (lineCol) {
790
+ url += '&line=' + lineCol[0] + '&column=' + lineCol[1];
791
+ }
792
+ fetch(url);
793
+ }
794
+ }, true);
795
+ } catch (e) {
796
+ console.error('[Source Inspector] Failed to initialize:', e);
797
+ }
798
+ })();
799
+ `
800
+
4
801
  export function DevHead() {
5
802
  if (process.env.TAMAGUI_TARGET === 'native') {
6
803
  return null
@@ -9,73 +806,41 @@ export function DevHead() {
9
806
  return (
10
807
  <>
11
808
  <link rel="preload" href={VIRTUAL_SSR_CSS_HREF} as="style" />
12
- <link rel="stylesheet" href={VIRTUAL_SSR_CSS_HREF} data-ssr-css />
809
+ <link
810
+ rel="stylesheet"
811
+ href={VIRTUAL_SSR_CSS_HREF}
812
+ data-ssr-css
813
+ suppressHydrationWarning
814
+ />
13
815
  <script
14
816
  type="module"
15
- dangerouslySetInnerHTML={{
16
- __html: `import { createHotContext } from "/@vite/client";
17
- const hot = createHotContext("/__clear_ssr_css");
18
- hot.on("vite:afterUpdate", () => {
19
- document
20
- .querySelectorAll("[data-ssr-css]")
21
- .forEach(node => node.remove());
22
- });`,
23
- }}
817
+ suppressHydrationWarning
818
+ dangerouslySetInnerHTML={{ __html: ROUTE_HMR_SCRIPT }}
24
819
  />
25
820
  <script
26
821
  type="module"
27
- dangerouslySetInnerHTML={{
28
- __html: `import { createHotContext } from "/@vite/client";
29
- const hot = createHotContext("/__one_route_hmr");
30
- hot.on("one:route-update", (data) => {
31
- // Clear only the specific file's cache if provided, otherwise clear all
32
- if (window.__oneRouteCache) {
33
- if (data?.file) {
34
- window.__oneRouteCache.clearFile(data.file);
35
- } else {
36
- window.__oneRouteCache.clear();
37
- }
38
- }
39
- // Dispatch a window event that triggers re-render in route components
40
- window.dispatchEvent(new CustomEvent('one-hmr-update'));
41
- });`,
42
- }}
822
+ suppressHydrationWarning
823
+ dangerouslySetInnerHTML={{ __html: LOADER_HMR_SCRIPT }}
43
824
  />
44
825
  <script
45
826
  type="module"
46
- dangerouslySetInnerHTML={{
47
- __html: `import { createHotContext } from "/@vite/client";
48
- const hot = createHotContext("/__one_loader_hmr");
49
- hot.on("one:loader-data-update", async (data) => {
50
- // Refetch loader data for all affected routes (no full page reload)
51
- if (data?.routePaths && window.__oneRefetchLoader) {
52
- const currentPath = window.location.pathname.replace(/\\/$/, '') || '/';
53
- for (const routePath of data.routePaths) {
54
- // Only refetch if we're on an affected route
55
- if (routePath === currentPath) {
56
- try {
57
- await window.__oneRefetchLoader(routePath);
58
- } catch (err) {
59
- console.error('[one] Error refetching loader:', err);
60
- }
61
- }
62
- }
63
- }
64
- });`,
65
- }}
827
+ suppressHydrationWarning
828
+ dangerouslySetInnerHTML={{ __html: REACT_REFRESH_SCRIPT }}
66
829
  />
830
+ {/* Unified One DevTools */}
67
831
  <script
68
832
  type="module"
69
- dangerouslySetInnerHTML={{
70
- __html: `import { injectIntoGlobalHook } from "/@react-refresh";
71
- injectIntoGlobalHook(window);
72
- window.$RefreshReg$ = () => {};
73
- window.$RefreshSig$ = () => (type) => type;`,
74
- }}
833
+ suppressHydrationWarning
834
+ dangerouslySetInnerHTML={{ __html: ONE_DEVTOOLS_SCRIPT }}
835
+ />
836
+ {/* Source Inspector - hold Option for 1s then hover */}
837
+ <script
838
+ type="module"
839
+ suppressHydrationWarning
840
+ dangerouslySetInnerHTML={{ __html: SOURCE_INSPECTOR_SCRIPT }}
75
841
  />
76
842
  </>
77
843
  )
78
844
  }
79
-
80
845
  return null
81
846
  }