dev3000 0.0.59 → 0.0.62

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 (292) hide show
  1. package/README.md +4 -0
  2. package/dist/cdp-monitor.d.ts +2 -1
  3. package/dist/cdp-monitor.d.ts.map +1 -1
  4. package/dist/cdp-monitor.js +34 -17
  5. package/dist/cdp-monitor.js.map +1 -1
  6. package/dist/cli.js +105 -13
  7. package/dist/cli.js.map +1 -1
  8. package/dist/dev-environment.d.ts +8 -0
  9. package/dist/dev-environment.d.ts.map +1 -1
  10. package/dist/dev-environment.js +183 -42
  11. package/dist/dev-environment.js.map +1 -1
  12. package/dist/services/parsers/error-detectors/base.d.ts +24 -0
  13. package/dist/services/parsers/error-detectors/base.d.ts.map +1 -0
  14. package/dist/services/parsers/error-detectors/base.js +44 -0
  15. package/dist/services/parsers/error-detectors/base.js.map +1 -0
  16. package/dist/services/parsers/error-detectors/index.d.ts +6 -0
  17. package/dist/services/parsers/error-detectors/index.d.ts.map +1 -0
  18. package/dist/services/parsers/error-detectors/index.js +6 -0
  19. package/dist/services/parsers/error-detectors/index.js.map +1 -0
  20. package/dist/services/parsers/error-detectors/nextjs.d.ts +9 -0
  21. package/dist/services/parsers/error-detectors/nextjs.d.ts.map +1 -0
  22. package/dist/services/parsers/error-detectors/nextjs.js +52 -0
  23. package/dist/services/parsers/error-detectors/nextjs.js.map +1 -0
  24. package/dist/services/parsers/index.d.ts +8 -0
  25. package/dist/services/parsers/index.d.ts.map +1 -0
  26. package/dist/services/parsers/index.js +10 -0
  27. package/dist/services/parsers/index.js.map +1 -0
  28. package/dist/services/parsers/log-parsers/base.d.ts +26 -0
  29. package/dist/services/parsers/log-parsers/base.d.ts.map +1 -0
  30. package/dist/services/parsers/log-parsers/base.js +6 -0
  31. package/dist/services/parsers/log-parsers/base.js.map +1 -0
  32. package/dist/services/parsers/log-parsers/index.d.ts +6 -0
  33. package/dist/services/parsers/log-parsers/index.d.ts.map +1 -0
  34. package/dist/services/parsers/log-parsers/index.js +5 -0
  35. package/dist/services/parsers/log-parsers/index.js.map +1 -0
  36. package/dist/services/parsers/log-parsers/standard.d.ts +9 -0
  37. package/dist/services/parsers/log-parsers/standard.d.ts.map +1 -0
  38. package/dist/services/parsers/log-parsers/standard.js +17 -0
  39. package/dist/services/parsers/log-parsers/standard.js.map +1 -0
  40. package/dist/services/parsers/output-processor.d.ts +39 -0
  41. package/dist/services/parsers/output-processor.d.ts.map +1 -0
  42. package/dist/services/parsers/output-processor.js +54 -0
  43. package/dist/services/parsers/output-processor.js.map +1 -0
  44. package/mcp-server/.next/BUILD_ID +1 -1
  45. package/mcp-server/.next/app-build-manifest.json +27 -22
  46. package/mcp-server/.next/app-path-routes-manifest.json +1 -0
  47. package/mcp-server/.next/build-manifest.json +6 -5
  48. package/mcp-server/.next/cache/.previewinfo +1 -1
  49. package/mcp-server/.next/cache/.rscinfo +1 -1
  50. package/mcp-server/.next/cache/.tsbuildinfo +1 -1
  51. package/mcp-server/.next/fallback-build-manifest.json +2 -2
  52. package/mcp-server/.next/prerender-manifest.json +10 -10
  53. package/mcp-server/.next/server/app/_global-error/page/app-build-manifest.json +4 -3
  54. package/mcp-server/.next/server/app/_global-error/page/build-manifest.json +4 -3
  55. package/mcp-server/.next/server/app/_global-error/page.js.nft.json +1 -1
  56. package/mcp-server/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  57. package/mcp-server/.next/server/app/_global-error.html +2 -2
  58. package/mcp-server/.next/server/app/_global-error.rsc +1 -1
  59. package/mcp-server/.next/server/app/_not-found/page/app-build-manifest.json +5 -4
  60. package/mcp-server/.next/server/app/_not-found/page/build-manifest.json +4 -3
  61. package/mcp-server/.next/server/app/_not-found/page.js.nft.json +1 -1
  62. package/mcp-server/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  63. package/mcp-server/.next/server/app/_not-found.html +1 -1
  64. package/mcp-server/.next/server/app/_not-found.rsc +2 -2
  65. package/mcp-server/.next/server/app/api/config/route/app-build-manifest.json +4 -3
  66. package/mcp-server/.next/server/app/api/config/route/build-manifest.json +4 -3
  67. package/mcp-server/.next/server/app/api/health/route/app-build-manifest.json +4 -3
  68. package/mcp-server/.next/server/app/api/health/route/build-manifest.json +4 -3
  69. package/mcp-server/.next/server/app/api/logs/append/route/app-build-manifest.json +4 -3
  70. package/mcp-server/.next/server/app/api/logs/append/route/build-manifest.json +4 -3
  71. package/mcp-server/.next/server/app/api/logs/append/route.js +1 -1
  72. package/mcp-server/.next/server/app/api/logs/append/route.js.nft.json +1 -1
  73. package/mcp-server/.next/server/app/api/logs/head/route/app-build-manifest.json +4 -3
  74. package/mcp-server/.next/server/app/api/logs/head/route/build-manifest.json +4 -3
  75. package/mcp-server/.next/server/app/api/logs/list/route/app-build-manifest.json +4 -3
  76. package/mcp-server/.next/server/app/api/logs/list/route/build-manifest.json +4 -3
  77. package/mcp-server/.next/server/app/api/logs/list/route.js +1 -1
  78. package/mcp-server/.next/server/app/api/logs/list/route.js.nft.json +1 -1
  79. package/mcp-server/.next/server/app/api/logs/rotate/route/app-build-manifest.json +4 -3
  80. package/mcp-server/.next/server/app/api/logs/rotate/route/build-manifest.json +4 -3
  81. package/mcp-server/.next/server/app/api/logs/stream/route/app-build-manifest.json +4 -3
  82. package/mcp-server/.next/server/app/api/logs/stream/route/build-manifest.json +4 -3
  83. package/mcp-server/.next/server/app/api/logs/tail/route/app-build-manifest.json +4 -3
  84. package/mcp-server/.next/server/app/api/logs/tail/route/build-manifest.json +4 -3
  85. package/mcp-server/.next/server/app/api/mcp/[transport]/route/app-build-manifest.json +4 -3
  86. package/mcp-server/.next/server/app/api/mcp/[transport]/route/build-manifest.json +4 -3
  87. package/mcp-server/.next/server/app/api/mcp/[transport]/route.js +1 -1
  88. package/mcp-server/.next/server/app/api/mcp/[transport]/route.js.nft.json +1 -1
  89. package/mcp-server/.next/server/app/api/replay/route/app-build-manifest.json +4 -3
  90. package/mcp-server/.next/server/app/api/replay/route/build-manifest.json +4 -3
  91. package/mcp-server/.next/server/app/api/tools/route/app-build-manifest.json +12 -0
  92. package/mcp-server/.next/server/app/api/tools/route/app-paths-manifest.json +3 -0
  93. package/mcp-server/.next/server/app/api/tools/route/build-manifest.json +18 -0
  94. package/mcp-server/.next/server/app/api/tools/route/server-reference-manifest.json +4 -0
  95. package/mcp-server/.next/server/app/api/tools/route.js +7 -0
  96. package/mcp-server/.next/server/app/api/tools/route.js.map +5 -0
  97. package/mcp-server/.next/server/app/api/tools/route.js.nft.json +1 -0
  98. package/mcp-server/.next/server/app/api/tools/route_client-reference-manifest.js +2 -0
  99. package/mcp-server/.next/server/app/index.html +1 -1
  100. package/mcp-server/.next/server/app/index.rsc +3 -3
  101. package/mcp-server/.next/server/app/logs/page/app-build-manifest.json +6 -5
  102. package/mcp-server/.next/server/app/logs/page/build-manifest.json +4 -3
  103. package/mcp-server/.next/server/app/logs/page.js.nft.json +1 -1
  104. package/mcp-server/.next/server/app/logs/page_client-reference-manifest.js +1 -1
  105. package/mcp-server/.next/server/app/page/app-build-manifest.json +6 -5
  106. package/mcp-server/.next/server/app/page/build-manifest.json +4 -3
  107. package/mcp-server/.next/server/app/page.js.nft.json +1 -1
  108. package/mcp-server/.next/server/app/page_client-reference-manifest.js +1 -1
  109. package/mcp-server/.next/server/app/replay/page/app-build-manifest.json +6 -5
  110. package/mcp-server/.next/server/app/replay/page/build-manifest.json +4 -3
  111. package/mcp-server/.next/server/app/replay/page.js.nft.json +1 -1
  112. package/mcp-server/.next/server/app/replay/page_client-reference-manifest.js +1 -1
  113. package/mcp-server/.next/server/app/replay.html +1 -1
  114. package/mcp-server/.next/server/app/replay.rsc +3 -3
  115. package/mcp-server/.next/server/app-paths-manifest.json +1 -0
  116. package/mcp-server/.next/server/chunks/{[root-of-the-server]__1d2effbb._.js → [root-of-the-server]__25014d3e._.js} +2 -2
  117. package/mcp-server/.next/server/chunks/[root-of-the-server]__3dc88807._.js +3 -0
  118. package/mcp-server/.next/server/chunks/[root-of-the-server]__7f1ecf7b._.js +3 -0
  119. package/mcp-server/.next/server/chunks/[root-of-the-server]__7f1ecf7b._.js.map +1 -0
  120. package/mcp-server/.next/server/chunks/[root-of-the-server]__82298dd3._.js +7 -7
  121. package/mcp-server/.next/server/chunks/[root-of-the-server]__82298dd3._.js.map +1 -1
  122. package/mcp-server/.next/{standalone/.next/server/chunks/[root-of-the-server]__a9062def._.js → server/chunks/[root-of-the-server]__901c3acf._.js} +2 -2
  123. package/mcp-server/.next/server/chunks/_next-internal_server_app_api_tools_route_actions_4a0d5a18.js +3 -0
  124. package/mcp-server/.next/server/chunks/_next-internal_server_app_api_tools_route_actions_4a0d5a18.js.map +1 -0
  125. package/mcp-server/.next/server/chunks/ssr/0916f_next_d5a56baf._.js +3 -0
  126. package/mcp-server/.next/server/chunks/ssr/0916f_next_d5a56baf._.js.map +1 -0
  127. package/mcp-server/.next/server/chunks/ssr/0916f_next_dist_102cca64._.js +6 -0
  128. package/mcp-server/.next/server/chunks/ssr/0916f_next_dist_102cca64._.js.map +1 -0
  129. package/mcp-server/.next/server/chunks/ssr/0916f_next_dist_58af49d5._.js +6 -0
  130. package/mcp-server/.next/server/chunks/ssr/0916f_next_dist_58af49d5._.js.map +1 -0
  131. package/mcp-server/.next/server/chunks/ssr/{0916f_next_dist_b838d7f3._.js → 0916f_next_dist_esm_87a80014._.js} +2 -2
  132. package/mcp-server/.next/server/chunks/ssr/0916f_next_dist_esm_87a80014._.js.map +1 -0
  133. package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__2cdf0446._.js +3 -0
  134. package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__2cdf0446._.js.map +1 -0
  135. package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__44804f8a._.js +3 -0
  136. package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__44804f8a._.js.map +1 -0
  137. package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__67415ea0._.js +3 -0
  138. package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__67415ea0._.js.map +1 -0
  139. package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__da15f006._.js +3 -0
  140. package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__da15f006._.js.map +1 -0
  141. package/mcp-server/.next/server/chunks/ssr/_69f197ad._.js +5 -0
  142. package/mcp-server/.next/server/chunks/ssr/_69f197ad._.js.map +1 -0
  143. package/mcp-server/.next/server/chunks/ssr/_dc26a647._.js +3 -0
  144. package/mcp-server/.next/server/chunks/ssr/_dc26a647._.js.map +1 -0
  145. package/mcp-server/.next/server/middleware-build-manifest.js +4 -3
  146. package/mcp-server/.next/server/pages/404.html +1 -1
  147. package/mcp-server/.next/server/pages/500.html +2 -2
  148. package/mcp-server/.next/server/server-reference-manifest.js +1 -1
  149. package/mcp-server/.next/server/server-reference-manifest.json +1 -1
  150. package/mcp-server/.next/standalone/.next/BUILD_ID +1 -1
  151. package/mcp-server/.next/standalone/.next/app-build-manifest.json +27 -22
  152. package/mcp-server/.next/standalone/.next/app-path-routes-manifest.json +1 -0
  153. package/mcp-server/.next/standalone/.next/build-manifest.json +6 -5
  154. package/mcp-server/.next/standalone/.next/prerender-manifest.json +10 -10
  155. package/mcp-server/.next/standalone/.next/server/app/_global-error/page/app-build-manifest.json +4 -3
  156. package/mcp-server/.next/standalone/.next/server/app/_global-error/page/build-manifest.json +4 -3
  157. package/mcp-server/.next/standalone/.next/server/app/_global-error/page.js.nft.json +1 -1
  158. package/mcp-server/.next/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  159. package/mcp-server/.next/standalone/.next/server/app/_global-error.html +2 -2
  160. package/mcp-server/.next/standalone/.next/server/app/_global-error.rsc +1 -1
  161. package/mcp-server/.next/standalone/.next/server/app/_not-found/page/app-build-manifest.json +5 -4
  162. package/mcp-server/.next/standalone/.next/server/app/_not-found/page/build-manifest.json +4 -3
  163. package/mcp-server/.next/standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
  164. package/mcp-server/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  165. package/mcp-server/.next/standalone/.next/server/app/_not-found.html +1 -1
  166. package/mcp-server/.next/standalone/.next/server/app/_not-found.rsc +2 -2
  167. package/mcp-server/.next/standalone/.next/server/app/api/config/route/app-build-manifest.json +4 -3
  168. package/mcp-server/.next/standalone/.next/server/app/api/config/route/build-manifest.json +4 -3
  169. package/mcp-server/.next/standalone/.next/server/app/api/health/route/app-build-manifest.json +4 -3
  170. package/mcp-server/.next/standalone/.next/server/app/api/health/route/build-manifest.json +4 -3
  171. package/mcp-server/.next/standalone/.next/server/app/api/logs/append/route/app-build-manifest.json +4 -3
  172. package/mcp-server/.next/standalone/.next/server/app/api/logs/append/route/build-manifest.json +4 -3
  173. package/mcp-server/.next/standalone/.next/server/app/api/logs/append/route.js +1 -1
  174. package/mcp-server/.next/standalone/.next/server/app/api/logs/append/route.js.nft.json +1 -1
  175. package/mcp-server/.next/standalone/.next/server/app/api/logs/head/route/app-build-manifest.json +4 -3
  176. package/mcp-server/.next/standalone/.next/server/app/api/logs/head/route/build-manifest.json +4 -3
  177. package/mcp-server/.next/standalone/.next/server/app/api/logs/list/route/app-build-manifest.json +4 -3
  178. package/mcp-server/.next/standalone/.next/server/app/api/logs/list/route/build-manifest.json +4 -3
  179. package/mcp-server/.next/standalone/.next/server/app/api/logs/list/route.js +1 -1
  180. package/mcp-server/.next/standalone/.next/server/app/api/logs/list/route.js.nft.json +1 -1
  181. package/mcp-server/.next/standalone/.next/server/app/api/logs/rotate/route/app-build-manifest.json +4 -3
  182. package/mcp-server/.next/standalone/.next/server/app/api/logs/rotate/route/build-manifest.json +4 -3
  183. package/mcp-server/.next/standalone/.next/server/app/api/logs/stream/route/app-build-manifest.json +4 -3
  184. package/mcp-server/.next/standalone/.next/server/app/api/logs/stream/route/build-manifest.json +4 -3
  185. package/mcp-server/.next/standalone/.next/server/app/api/logs/tail/route/app-build-manifest.json +4 -3
  186. package/mcp-server/.next/standalone/.next/server/app/api/logs/tail/route/build-manifest.json +4 -3
  187. package/mcp-server/.next/standalone/.next/server/app/api/mcp/[transport]/route/app-build-manifest.json +4 -3
  188. package/mcp-server/.next/standalone/.next/server/app/api/mcp/[transport]/route/build-manifest.json +4 -3
  189. package/mcp-server/.next/standalone/.next/server/app/api/mcp/[transport]/route.js +1 -1
  190. package/mcp-server/.next/standalone/.next/server/app/api/mcp/[transport]/route.js.nft.json +1 -1
  191. package/mcp-server/.next/standalone/.next/server/app/api/replay/route/app-build-manifest.json +4 -3
  192. package/mcp-server/.next/standalone/.next/server/app/api/replay/route/build-manifest.json +4 -3
  193. package/mcp-server/.next/standalone/.next/server/app/api/tools/route/app-build-manifest.json +12 -0
  194. package/mcp-server/.next/standalone/.next/server/app/api/tools/route/app-paths-manifest.json +3 -0
  195. package/mcp-server/.next/standalone/.next/server/app/api/tools/route/build-manifest.json +18 -0
  196. package/mcp-server/.next/standalone/.next/server/app/api/tools/route/server-reference-manifest.json +4 -0
  197. package/mcp-server/.next/standalone/.next/server/app/api/tools/route.js +7 -0
  198. package/mcp-server/.next/standalone/.next/server/app/api/tools/route.js.map +5 -0
  199. package/mcp-server/.next/standalone/.next/server/app/api/tools/route.js.nft.json +1 -0
  200. package/mcp-server/.next/standalone/.next/server/app/api/tools/route_client-reference-manifest.js +2 -0
  201. package/mcp-server/.next/standalone/.next/server/app/index.html +1 -1
  202. package/mcp-server/.next/standalone/.next/server/app/index.rsc +3 -3
  203. package/mcp-server/.next/standalone/.next/server/app/logs/page/app-build-manifest.json +6 -5
  204. package/mcp-server/.next/standalone/.next/server/app/logs/page/build-manifest.json +4 -3
  205. package/mcp-server/.next/standalone/.next/server/app/logs/page.js.nft.json +1 -1
  206. package/mcp-server/.next/standalone/.next/server/app/logs/page_client-reference-manifest.js +1 -1
  207. package/mcp-server/.next/standalone/.next/server/app/page/app-build-manifest.json +6 -5
  208. package/mcp-server/.next/standalone/.next/server/app/page/build-manifest.json +4 -3
  209. package/mcp-server/.next/standalone/.next/server/app/page.js.nft.json +1 -1
  210. package/mcp-server/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  211. package/mcp-server/.next/standalone/.next/server/app/replay/page/app-build-manifest.json +6 -5
  212. package/mcp-server/.next/standalone/.next/server/app/replay/page/build-manifest.json +4 -3
  213. package/mcp-server/.next/standalone/.next/server/app/replay/page.js.nft.json +1 -1
  214. package/mcp-server/.next/standalone/.next/server/app/replay/page_client-reference-manifest.js +1 -1
  215. package/mcp-server/.next/standalone/.next/server/app/replay.html +1 -1
  216. package/mcp-server/.next/standalone/.next/server/app/replay.rsc +3 -3
  217. package/mcp-server/.next/standalone/.next/server/app-paths-manifest.json +1 -0
  218. package/mcp-server/.next/standalone/.next/server/chunks/{[root-of-the-server]__1d2effbb._.js → [root-of-the-server]__25014d3e._.js} +2 -2
  219. package/mcp-server/.next/standalone/.next/server/chunks/[root-of-the-server]__3dc88807._.js +3 -0
  220. package/mcp-server/.next/standalone/.next/server/chunks/[root-of-the-server]__7f1ecf7b._.js +3 -0
  221. package/mcp-server/.next/standalone/.next/server/chunks/[root-of-the-server]__82298dd3._.js +7 -7
  222. package/mcp-server/.next/{server/chunks/[root-of-the-server]__a9062def._.js → standalone/.next/server/chunks/[root-of-the-server]__901c3acf._.js} +2 -2
  223. package/mcp-server/.next/standalone/.next/server/chunks/_next-internal_server_app_api_tools_route_actions_4a0d5a18.js +3 -0
  224. package/mcp-server/.next/standalone/.next/server/chunks/ssr/0916f_next_d5a56baf._.js +3 -0
  225. package/mcp-server/.next/standalone/.next/server/chunks/ssr/0916f_next_dist_102cca64._.js +6 -0
  226. package/mcp-server/.next/standalone/.next/server/chunks/ssr/0916f_next_dist_58af49d5._.js +6 -0
  227. package/mcp-server/.next/standalone/.next/server/chunks/ssr/{0916f_next_dist_b838d7f3._.js → 0916f_next_dist_esm_87a80014._.js} +2 -2
  228. package/mcp-server/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__2cdf0446._.js +3 -0
  229. package/mcp-server/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__44804f8a._.js +3 -0
  230. package/mcp-server/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__67415ea0._.js +3 -0
  231. package/mcp-server/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__da15f006._.js +3 -0
  232. package/mcp-server/.next/standalone/.next/server/chunks/ssr/_69f197ad._.js +5 -0
  233. package/mcp-server/.next/standalone/.next/server/chunks/ssr/_dc26a647._.js +3 -0
  234. package/mcp-server/.next/standalone/.next/server/middleware-build-manifest.js +4 -3
  235. package/mcp-server/.next/standalone/.next/server/pages/404.html +1 -1
  236. package/mcp-server/.next/standalone/.next/server/pages/500.html +2 -2
  237. package/mcp-server/.next/standalone/.next/server/server-reference-manifest.js +1 -1
  238. package/mcp-server/.next/standalone/.next/server/server-reference-manifest.json +1 -1
  239. package/mcp-server/.next/standalone/app/api/mcp/[transport]/route.ts +508 -20
  240. package/mcp-server/.next/static/chunks/5dd333b6181425ad.js +1 -0
  241. package/mcp-server/.next/static/chunks/{dbf09e13116b591b.css → 6634762c4edabf25.css} +1 -1
  242. package/mcp-server/.next/static/chunks/8960f12966b75725.js +5 -0
  243. package/mcp-server/.next/static/chunks/8a5ef92054eb3f68.js +1 -0
  244. package/mcp-server/.next/static/chunks/a04299218648d5c9.js +5 -0
  245. package/mcp-server/.next/static/chunks/aac71a4d8cd0d1d1.js +1 -0
  246. package/mcp-server/.next/static/chunks/{5c0c8ae693afcfee.js → ab8ede9578945642.js} +1 -1
  247. package/mcp-server/.next/static/chunks/{416a6ad96e2949dc.js → c964cee505b7b510.js} +1 -1
  248. package/mcp-server/.next/static/chunks/{941b6c341513efe6.js → f7331e11d1cb0264.js} +1 -1
  249. package/mcp-server/.next/static/chunks/f83a9d423c663174.js +1 -0
  250. package/mcp-server/.next/static/chunks/turbopack-0005c9ba09919d66.js +3 -0
  251. package/mcp-server/.next/static/chunks/{turbopack-4c431b48e3258ab3.js → turbopack-1bf2fb01bf8c3dc0.js} +1 -1
  252. package/mcp-server/.next/static/chunks/{turbopack-28043e8ec5b32cbc.js → turbopack-a9958f358b128d0b.js} +1 -1
  253. package/mcp-server/.next/trace +1 -1
  254. package/mcp-server/.next/types/routes.d.ts +2 -1
  255. package/mcp-server/.next/types/validator.ts +9 -0
  256. package/mcp-server/app/api/mcp/[transport]/route.ts +508 -20
  257. package/mcp-server/app/api/tools/route.ts +194 -0
  258. package/mcp-server/app/page.tsx +245 -92
  259. package/package.json +1 -1
  260. package/mcp-server/.next/server/chunks/[root-of-the-server]__c51abf31._.js +0 -3
  261. package/mcp-server/.next/server/chunks/ssr/0916f_next_dist_b838d7f3._.js.map +0 -1
  262. package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__524f1e5c._.js +0 -3
  263. package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__524f1e5c._.js.map +0 -1
  264. package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__5c573556._.js +0 -3
  265. package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__5c573556._.js.map +0 -1
  266. package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__9197e6d6._.js +0 -3
  267. package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__9197e6d6._.js.map +0 -1
  268. package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__b732be1d._.js +0 -3
  269. package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__b732be1d._.js.map +0 -1
  270. package/mcp-server/.next/server/chunks/ssr/_7c04f51e._.js +0 -8
  271. package/mcp-server/.next/server/chunks/ssr/_7c04f51e._.js.map +0 -1
  272. package/mcp-server/.next/server/chunks/ssr/node_modules__pnpm_8bde5c6b._.js +0 -3
  273. package/mcp-server/.next/server/chunks/ssr/node_modules__pnpm_8bde5c6b._.js.map +0 -1
  274. package/mcp-server/.next/standalone/.next/server/chunks/[root-of-the-server]__c51abf31._.js +0 -3
  275. package/mcp-server/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__524f1e5c._.js +0 -3
  276. package/mcp-server/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__5c573556._.js +0 -3
  277. package/mcp-server/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__9197e6d6._.js +0 -3
  278. package/mcp-server/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__b732be1d._.js +0 -3
  279. package/mcp-server/.next/standalone/.next/server/chunks/ssr/_7c04f51e._.js +0 -8
  280. package/mcp-server/.next/standalone/.next/server/chunks/ssr/node_modules__pnpm_8bde5c6b._.js +0 -3
  281. package/mcp-server/.next/static/chunks/0840a1d3b8d17eda.js +0 -5
  282. package/mcp-server/.next/static/chunks/3df53cad6e742c25.js +0 -1
  283. package/mcp-server/.next/static/chunks/830751c84b44689a.js +0 -1
  284. package/mcp-server/.next/static/chunks/accd4b2d97799296.js +0 -5
  285. package/mcp-server/.next/static/chunks/b2fe525ea0f48ed5.js +0 -1
  286. package/mcp-server/.next/static/chunks/turbopack-66b02875bc8e5dbd.js +0 -3
  287. /package/mcp-server/.next/server/chunks/{[root-of-the-server]__1d2effbb._.js.map → [root-of-the-server]__25014d3e._.js.map} +0 -0
  288. /package/mcp-server/.next/server/chunks/{[root-of-the-server]__c51abf31._.js.map → [root-of-the-server]__3dc88807._.js.map} +0 -0
  289. /package/mcp-server/.next/server/chunks/{[root-of-the-server]__a9062def._.js.map → [root-of-the-server]__901c3acf._.js.map} +0 -0
  290. /package/mcp-server/.next/static/{HNx7zx4NtWY3EQ9D5yHAA → fgx2Ltd5vbloYUQlVKX60}/_buildManifest.js +0 -0
  291. /package/mcp-server/.next/static/{HNx7zx4NtWY3EQ9D5yHAA → fgx2Ltd5vbloYUQlVKX60}/_clientMiddlewareManifest.json +0 -0
  292. /package/mcp-server/.next/static/{HNx7zx4NtWY3EQ9D5yHAA → fgx2Ltd5vbloYUQlVKX60}/_ssgManifest.js +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["turbopack:///[project]/node_modules/.pnpm/next@15.5.1-canary.30_babel-plugin-react-compiler@19.1.0-rc.3_react-dom@19.2.0-canary-d_5eea965284f26eb4e30482e6426df099/node_modules/next/navigation.js","turbopack:///[project]/app/logs/LogsClient.tsx","turbopack:///[project]/app/logs/utils.ts"],"sourcesContent":["module.exports = require('./dist/client/components/navigation')\n","\"use client\"\n\nimport Image from \"next/image\"\nimport { useRouter, useSearchParams } from \"next/navigation\"\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\"\nimport type { LogEntry, LogFile, LogListResponse, LogsApiResponse } from \"@/types\"\n\n// Define interfaces for object property rendering\ninterface PropertyData {\n name: string\n value: string | number | boolean | null\n type: string\n subtype?: string\n}\n\ninterface ReplayEvent {\n timestamp: string\n event: string\n details: string\n type?: string\n x?: number\n y?: number\n target?: string\n direction?: string\n distance?: number\n key?: string\n}\n\nimport { parseLogEntries } from \"./utils\"\n\n// Hook for dark mode with system preference detection\nfunction useDarkMode() {\n const [darkMode, setDarkMode] = useState<boolean>(() => {\n if (typeof window !== \"undefined\") {\n // Check localStorage first\n const saved = localStorage.getItem(\"dev3000-dark-mode\")\n if (saved !== null) {\n return JSON.parse(saved)\n }\n // Default to system preference\n return window.matchMedia(\"(prefers-color-scheme: dark)\").matches\n }\n return false\n })\n\n useEffect(() => {\n // Save to localStorage\n localStorage.setItem(\"dev3000-dark-mode\", JSON.stringify(darkMode))\n\n // Apply dark class to document\n if (darkMode) {\n document.documentElement.classList.add(\"dark\")\n } else {\n document.documentElement.classList.remove(\"dark\")\n }\n }, [darkMode])\n\n // Listen for system theme changes\n useEffect(() => {\n const mediaQuery = window.matchMedia(\"(prefers-color-scheme: dark)\")\n const handler = (e: MediaQueryListEvent) => {\n // Only update if no explicit choice has been made\n const saved = localStorage.getItem(\"dev3000-dark-mode\")\n if (saved === null) {\n setDarkMode(e.matches)\n }\n }\n\n mediaQuery.addEventListener(\"change\", handler)\n return () => mediaQuery.removeEventListener(\"change\", handler)\n }, [])\n\n return [darkMode, setDarkMode] as const\n}\n\n// Keep this for backwards compatibility, but it's not used anymore\nfunction _parseLogLine(line: string): LogEntry | null {\n const match = line.match(/^\\[([^\\]]+)\\] \\[([^\\]]+)\\] (.*)$/s)\n if (!match) return null\n\n const [, timestamp, source, message] = match\n const screenshot = message.match(/\\[SCREENSHOT\\] (.+)/)?.[1]\n\n return {\n timestamp,\n source,\n message,\n screenshot,\n original: line\n }\n}\n\n// Component to render truncated URLs with click-to-expand\nfunction URLRenderer({ url, maxLength = 60 }: { url: string; maxLength?: number }) {\n const [isExpanded, setIsExpanded] = useState(false)\n\n if (url.length <= maxLength) {\n return (\n <a\n href={url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"text-blue-600 dark:text-blue-400 hover:text-blue-800 dark:hover:text-blue-300 underline\"\n >\n {url}\n </a>\n )\n }\n\n const truncated = `${url.substring(0, maxLength)}...`\n\n return (\n <span className=\"inline-block\">\n {isExpanded ? (\n <span>\n <a\n href={url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"text-blue-600 dark:text-blue-400 hover:text-blue-800 dark:hover:text-blue-300 underline\"\n >\n {url}\n </a>\n <button\n type=\"button\"\n onClick={() => setIsExpanded(false)}\n className=\"ml-2 text-xs text-gray-500 dark:text-gray-400 hover:text-gray-700 dark:hover:text-gray-300 px-1 py-0.5 rounded hover:bg-gray-100 dark:hover:bg-gray-700\"\n >\n [collapse]\n </button>\n </span>\n ) : (\n <span>\n <a\n href={url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"text-blue-600 dark:text-blue-400 hover:text-blue-800 dark:hover:text-blue-300 underline\"\n >\n {truncated}\n </a>\n <button\n type=\"button\"\n onClick={() => setIsExpanded(true)}\n className=\"ml-1 text-xs text-gray-500 dark:text-gray-400 hover:text-gray-700 dark:hover:text-gray-300 px-1 py-0.5 rounded hover:bg-gray-100 dark:hover:bg-gray-700\"\n >\n [expand]\n </button>\n </span>\n )}\n </span>\n )\n}\n\n// Component to render Chrome DevTools-style collapsible objects\nfunction ObjectRenderer({ content }: { content: string }) {\n const [isExpanded, setIsExpanded] = useState(false)\n\n try {\n const obj = JSON.parse(content)\n\n // Check if it's a Chrome DevTools object representation\n if (obj && typeof obj === \"object\" && obj.type === \"object\" && obj.properties) {\n const properties = obj.properties\n const description = obj.description || \"Object\"\n const overflow = obj.overflow\n\n return (\n <div className=\"inline-block\">\n <button\n type=\"button\"\n onClick={() => setIsExpanded(!isExpanded)}\n className=\"inline-flex items-center gap-1 text-blue-600 hover:text-blue-800 font-mono text-sm\"\n >\n <svg\n className={`w-3 h-3 transition-transform ${isExpanded ? \"rotate-90\" : \"\"}`}\n fill=\"currentColor\"\n viewBox=\"0 0 20 20\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 111.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z\"\n clipRule=\"evenodd\"\n />\n </svg>\n <span className=\"text-purple-600\">{description}</span>\n {!isExpanded && (\n <span className=\"text-gray-500\">\n {overflow ? \"...\" : \"\"} {\"{\"}\n {properties.slice(0, 3).map((prop: PropertyData, idx: number) => (\n <span key={`${prop.name}-${idx}`}>\n {idx > 0 && \", \"}\n <span className=\"text-red-600\">{prop.name}</span>:\n <span className=\"text-blue-600\">\n {prop.type === \"string\"\n ? `\"${prop.value}\"`\n : prop.type === \"number\"\n ? prop.value\n : prop.type === \"object\"\n ? prop.subtype === \"array\"\n ? prop.value\n : \"{...}\"\n : prop.value}\n </span>\n </span>\n ))}\n {properties.length > 3 && \", ...\"}\n {\"}\"}\n </span>\n )}\n </button>\n\n {isExpanded && (\n <div className=\"mt-1 ml-4 border-l-2 border-gray-200 pl-3\">\n <div className=\"font-mono text-sm\">\n <div className=\"text-gray-600\">\n {description} {\"{\"}\n <div className=\"ml-4\">\n {properties.map((prop: PropertyData, idx: number) => (\n <div key={`${prop.name}-${idx}`} className=\"py-0.5\">\n <span className=\"text-red-600\">{prop.name}</span>\n <span className=\"text-gray-500\">: </span>\n <span\n className={\n prop.type === \"string\"\n ? \"text-green-600\"\n : prop.type === \"number\"\n ? \"text-blue-600\"\n : prop.type === \"object\"\n ? \"text-purple-600\"\n : \"text-orange-600\"\n }\n >\n {prop.type === \"string\"\n ? `\"${String(prop.value)}\"`\n : prop.type === \"number\"\n ? String(prop.value)\n : prop.type === \"object\"\n ? prop.subtype === \"array\"\n ? String(prop.value)\n : \"{...}\"\n : String(prop.value)}\n </span>\n {idx < properties.length - 1 && <span className=\"text-gray-500\">,</span>}\n </div>\n ))}\n {overflow && <div className=\"text-gray-500 italic\">... and more properties</div>}\n </div>\n <div className=\"text-gray-600\">{\"}\"}</div>\n </div>\n </div>\n </div>\n )}\n </div>\n )\n }\n\n // For regular JSON objects, render them nicely too\n return (\n <div className=\"inline-block\">\n <button\n type=\"button\"\n onClick={() => setIsExpanded(!isExpanded)}\n className=\"inline-flex items-center gap-1 text-blue-600 hover:text-blue-800 font-mono text-sm\"\n >\n <svg\n className={`w-3 h-3 transition-transform ${isExpanded ? \"rotate-90\" : \"\"}`}\n fill=\"currentColor\"\n viewBox=\"0 0 20 20\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 111.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z\"\n clipRule=\"evenodd\"\n />\n </svg>\n <span className=\"text-purple-600\">Object</span>\n {!isExpanded && (\n <span className=\"text-gray-500\">\n {\"{\"}...{\"}\"}\n </span>\n )}\n </button>\n\n {isExpanded && (\n <div className=\"mt-1 ml-4 border-l-2 border-gray-200 pl-3\">\n <pre className=\"font-mono text-sm text-gray-700 whitespace-pre-wrap\">{JSON.stringify(obj, null, 2)}</pre>\n </div>\n )}\n </div>\n )\n } catch (_e) {\n // If it's not valid JSON, just return the original content\n return <span>{content}</span>\n }\n}\n\nfunction LogEntryComponent({ entry }: { entry: LogEntry }) {\n // Parse log type from message patterns with dark mode support\n const parseLogType = (message: string) => {\n if (message.includes(\"[INTERACTION]\"))\n return {\n type: \"INTERACTION\",\n color: \"bg-purple-50 dark:bg-purple-900/20 border-purple-200 dark:border-purple-800\",\n tag: \"bg-purple-100 dark:bg-purple-800 text-purple-800 dark:text-purple-200\"\n }\n if (message.includes(\"[CONSOLE ERROR]\"))\n return {\n type: \"ERROR\",\n color: \"bg-red-50 dark:bg-red-900/20 border-red-200 dark:border-red-800\",\n tag: \"bg-red-100 dark:bg-red-800 text-red-800 dark:text-red-200\"\n }\n if (message.includes(\"[CONSOLE WARN]\"))\n return {\n type: \"WARNING\",\n color: \"bg-yellow-50 dark:bg-yellow-900/20 border-yellow-200 dark:border-yellow-800\",\n tag: \"bg-yellow-100 dark:bg-yellow-800 text-yellow-800 dark:text-yellow-200\"\n }\n if (message.includes(\"[SCREENSHOT]\"))\n return {\n type: \"SCREENSHOT\",\n color: \"bg-blue-50 dark:bg-blue-900/20 border-blue-200 dark:border-blue-800\",\n tag: \"bg-blue-100 dark:bg-blue-800 text-blue-800 dark:text-blue-200\"\n }\n if (message.includes(\"[NAVIGATION]\"))\n return {\n type: \"NAVIGATION\",\n color: \"bg-indigo-50 dark:bg-indigo-900/20 border-indigo-200 dark:border-indigo-800\",\n tag: \"bg-indigo-100 dark:bg-indigo-800 text-indigo-800 dark:text-indigo-200\"\n }\n if (message.includes(\"[NETWORK ERROR]\"))\n return {\n type: \"NETWORK\",\n color: \"bg-red-50 dark:bg-red-900/20 border-red-200 dark:border-red-800\",\n tag: \"bg-red-100 dark:bg-red-800 text-red-800 dark:text-red-200\"\n }\n if (message.includes(\"[NETWORK REQUEST]\"))\n return {\n type: \"NETWORK\",\n color: \"bg-gray-50 dark:bg-gray-800/50 border-gray-200 dark:border-gray-700\",\n tag: \"bg-gray-100 dark:bg-gray-700 text-gray-700 dark:text-gray-300\"\n }\n if (message.includes(\"[PAGE ERROR]\"))\n return {\n type: \"ERROR\",\n color: \"bg-red-50 dark:bg-red-900/20 border-red-200 dark:border-red-800\",\n tag: \"bg-red-100 dark:bg-red-800 text-red-800 dark:text-red-200\"\n }\n return {\n type: \"DEFAULT\",\n color: \"border-gray-200 dark:border-gray-700\",\n tag: \"bg-gray-100 dark:bg-gray-700 text-gray-700 dark:text-gray-300\"\n }\n }\n\n const logTypeInfo = parseLogType(entry.message)\n\n // Extract and highlight type tags, detect JSON objects and URLs\n const renderMessage = (message: string) => {\n const typeTagRegex = /\\[([A-Z\\s]+)\\]/g\n const jsonRegex = /\\{[^{}]*(?:\\{[^{}]*\\}[^{}]*)*\\}/g\n const urlRegex = /(https?:\\/\\/[^\\s]+)/g\n\n const parts = []\n let lastIndex = 0\n let match: RegExpExecArray | null\n\n // First, handle type tags\n match = typeTagRegex.exec(message)\n while (match !== null) {\n // Add text before the tag\n if (match.index > lastIndex) {\n parts.push(message.slice(lastIndex, match.index))\n }\n\n // Add the tag with styling\n parts.push(\n <span\n key={match.index}\n className={`inline-block px-1.5 py-0.5 rounded text-xs font-medium ${logTypeInfo.tag} mr-1`}\n >\n {match[1]}\n </span>\n )\n\n lastIndex = match.index + match[0].length\n match = typeTagRegex.exec(message)\n }\n\n // Add remaining text\n const remainingText = message.slice(lastIndex)\n\n // Process remaining text for JSON objects and URLs\n const processTextForObjects = (text: string, keyPrefix: string) => {\n const jsonMatches = [...text.matchAll(jsonRegex)]\n const urlMatches = [...text.matchAll(urlRegex)]\n const allMatches = [\n ...jsonMatches.map((m) => ({ ...m, type: \"json\" })),\n ...urlMatches.map((m) => ({ ...m, type: \"url\" }))\n ]\n\n // Sort matches by index\n allMatches.sort((a, b) => (a.index ?? 0) - (b.index ?? 0))\n\n if (allMatches.length === 0) {\n return [text]\n }\n\n const finalParts = []\n let textLastIndex = 0\n\n allMatches.forEach((objMatch, _idx) => {\n // Add text before match\n if ((objMatch.index ?? 0) > textLastIndex) {\n finalParts.push(text.slice(textLastIndex, objMatch.index ?? 0))\n }\n\n // Add appropriate renderer\n if (objMatch.type === \"json\") {\n finalParts.push(\n <ObjectRenderer\n key={`${keyPrefix}-json-${objMatch.index}-${objMatch[0].slice(0, 20)}`}\n content={objMatch[0]}\n />\n )\n } else if (objMatch.type === \"url\") {\n finalParts.push(<URLRenderer key={`${keyPrefix}-url-${objMatch.index}-${objMatch[0]}`} url={objMatch[0]} />)\n }\n\n textLastIndex = (objMatch.index ?? 0) + objMatch[0].length\n })\n\n // Add any text after the last match\n if (textLastIndex < text.length) {\n finalParts.push(text.slice(textLastIndex))\n }\n\n return finalParts\n }\n\n const processedRemaining = processTextForObjects(remainingText, \"main\")\n parts.push(...processedRemaining)\n\n return parts.length > 0 ? parts : message\n }\n\n return (\n <div className={`border-l-4 ${logTypeInfo.color} pl-4 py-2`}>\n {/* Table-like layout using CSS Grid */}\n <div className=\"grid grid-cols-[auto_auto_1fr] gap-3 items-start\">\n {/* Column 1: Timestamp */}\n <div className=\"text-xs text-gray-500 dark:text-gray-400 font-mono whitespace-nowrap pt-1\">\n {new Date(entry.timestamp).toLocaleTimeString()}\n </div>\n\n {/* Column 2: Source */}\n <div\n className={`px-2 py-1 rounded text-xs font-medium whitespace-nowrap ${\n entry.source === \"SERVER\"\n ? \"bg-blue-100 dark:bg-blue-800 text-blue-800 dark:text-blue-200\"\n : \"bg-green-100 dark:bg-green-800 text-green-800 dark:text-green-200\"\n }`}\n >\n {entry.source}\n </div>\n\n {/* Column 3: Message content with user agent info */}\n <div className=\"font-mono text-sm min-w-0 text-gray-900 dark:text-gray-100\">\n <div className=\"flex flex-wrap items-start gap-2\">\n <div className=\"flex-1 min-w-0\">{renderMessage(entry.message)}</div>\n {/* User Agent and Tab Identifier Pills */}\n <div className=\"flex items-center gap-1 flex-shrink-0\">\n {entry.tabIdentifier && (\n <span className=\"inline-flex items-center px-1.5 py-0.5 rounded text-xs font-medium bg-gray-100 dark:bg-gray-700 text-gray-700 dark:text-gray-300\">\n {entry.tabIdentifier}\n </span>\n )}\n {entry.userAgent && (\n <span className=\"inline-flex items-center px-1.5 py-0.5 rounded text-xs font-medium bg-green-100 dark:bg-green-800 text-green-700 dark:text-green-200\">\n {entry.userAgent.includes(\"Chrome\")\n ? \"Chrome\"\n : entry.userAgent.includes(\"Firefox\")\n ? \"Firefox\"\n : entry.userAgent.includes(\"Safari\")\n ? \"Safari\"\n : entry.userAgent.includes(\"Edge\")\n ? \"Edge\"\n : \"Browser\"}\n </span>\n )}\n {/* Browser Type Pill (Chrome Extension vs Playwright) - only show if browser source */}\n {entry.source === \"BROWSER\" &&\n (() => {\n const isPlaywright = entry.message.includes(\"[PLAYWRIGHT]\")\n const isChromeExtension = entry.message.includes(\"[CHROME_EXTENSION]\") || entry.tabIdentifier // Tab identifier indicates Chrome Extension\n\n if (isPlaywright) {\n return (\n <span className=\"inline-flex items-center px-1.5 py-0.5 rounded text-xs font-medium bg-purple-100 dark:bg-purple-800 text-purple-700 dark:text-purple-200\">\n 🎭 Playwright\n </span>\n )\n } else if (isChromeExtension) {\n return (\n <span className=\"inline-flex items-center px-1.5 py-0.5 rounded text-xs font-medium bg-blue-100 dark:bg-blue-800 text-blue-700 dark:text-blue-200\">\n 🧩 Extension\n </span>\n )\n }\n return null\n })()}\n {/* Server Framework Pill - only show if server source */}\n {entry.source === \"SERVER\" &&\n (() => {\n const message = entry.message.toLowerCase()\n\n // Next.js - look for Next.js specific patterns\n if (\n message.includes(\"ready on http://localhost\") ||\n message.includes(\"ready in \") ||\n message.includes(\"next.js\") ||\n message.includes(\"compiled client and server\")\n ) {\n return (\n <span className=\"inline-flex items-center px-1.5 py-0.5 rounded text-xs font-medium bg-black text-white\">\n ▲ Next.js\n </span>\n )\n }\n\n // Nuxt.js - look for Nuxt specific patterns\n else if (\n message.includes(\"nuxt\") ||\n (message.includes(\"nitro\") && message.includes(\"http://localhost\")) ||\n message.includes(\"universal mode\") ||\n message.includes(\"spa mode\")\n ) {\n return (\n <span className=\"inline-flex items-center px-1.5 py-0.5 rounded text-xs font-medium bg-green-500 text-white\">\n 💚 Nuxt\n </span>\n )\n }\n\n // Vue CLI/Vite + Vue - look for Vue specific patterns\n else if (\n message.includes(\"vue-cli-service\") ||\n (message.includes(\"vue\") && (message.includes(\"dev server\") || message.includes(\"local:\"))) ||\n message.includes(\"@vue/cli-service\")\n ) {\n return (\n <span className=\"inline-flex items-center px-1.5 py-0.5 rounded text-xs font-medium bg-green-600 text-white\">\n 🟢 Vue\n </span>\n )\n }\n\n // Vite (generic) - look for Vite patterns\n else if (\n (message.includes(\"local:\") && message.includes(\"vite\")) ||\n message.includes(\"dev server running\") ||\n message.includes(\"vite v\")\n ) {\n return (\n <span className=\"inline-flex items-center px-1.5 py-0.5 rounded text-xs font-medium bg-blue-500 text-white\">\n ⚡ Vite\n </span>\n )\n }\n\n // Ruby on Rails - look for Rails patterns\n else if (\n message.includes(\"rails server\") ||\n message.includes(\"puma starting\") ||\n message.includes(\"use ctrl-c to stop\") ||\n (message.includes(\"listening on tcp://\") && message.includes(\"3000\"))\n ) {\n return (\n <span className=\"inline-flex items-center px-1.5 py-0.5 rounded text-xs font-medium bg-red-600 text-white\">\n 💎 Rails\n </span>\n )\n }\n\n // Laravel - look for Laravel/Artisan patterns\n else if (\n message.includes(\"laravel development server\") ||\n message.includes(\"artisan serve\") ||\n (message.includes(\"laravel\") && message.includes(\"127.0.0.1:8000\"))\n ) {\n return (\n <span className=\"inline-flex items-center px-1.5 py-0.5 rounded text-xs font-medium bg-red-500 text-white\">\n 🅻 Laravel\n </span>\n )\n }\n\n // Express.js/Node.js - look for Express patterns\n else if (\n message.includes(\"express server\") ||\n message.includes(\"server listening on\") ||\n message.includes(\"app listening on port\") ||\n message.includes(\"node server\")\n ) {\n return (\n <span className=\"inline-flex items-center px-1.5 py-0.5 rounded text-xs font-medium bg-green-700 text-white\">\n 🟩 Express\n </span>\n )\n }\n\n // Django - look for Django patterns\n else if (\n message.includes(\"django\") ||\n (message.includes(\"development server\") && message.includes(\"127.0.0.1:8000\")) ||\n message.includes(\"runserver\")\n ) {\n return (\n <span className=\"inline-flex items-center px-1.5 py-0.5 rounded text-xs font-medium bg-green-800 text-white\">\n 🐍 Django\n </span>\n )\n }\n\n // Flask - look for Flask patterns\n else if (\n message.includes(\"flask\") ||\n message.includes(\"running on http://127.0.0.1:5000\") ||\n message.includes(\"debug mode: on\")\n ) {\n return (\n <span className=\"inline-flex items-center px-1.5 py-0.5 rounded text-xs font-medium bg-blue-800 text-white\">\n 🌶️ Flask\n </span>\n )\n }\n\n // Svelte/SvelteKit - look for Svelte patterns\n else if (\n message.includes(\"sveltekit\") ||\n (message.includes(\"svelte\") && message.includes(\"dev\")) ||\n message.includes(\"@sveltejs\")\n ) {\n return (\n <span className=\"inline-flex items-center px-1.5 py-0.5 rounded text-xs font-medium bg-orange-500 text-white\">\n 🔥 Svelte\n </span>\n )\n }\n\n // Remix - look for Remix patterns\n else if (message.includes(\"remix\") || message.includes(\"@remix-run\")) {\n return (\n <span className=\"inline-flex items-center px-1.5 py-0.5 rounded text-xs font-medium bg-blue-400 text-white\">\n 💿 Remix\n </span>\n )\n }\n\n // Astro - look for Astro patterns\n else if (message.includes(\"astro\") || message.includes(\"@astrojs\")) {\n return (\n <span className=\"inline-flex items-center px-1.5 py-0.5 rounded text-xs font-medium bg-purple-600 text-white\">\n 🚀 Astro\n </span>\n )\n }\n\n // Spring Boot - look for Spring patterns\n else if (\n message.includes(\"spring boot\") ||\n message.includes(\"tomcat started on port\") ||\n (message.includes(\"started application\") && message.includes(\"seconds\"))\n ) {\n return (\n <span className=\"inline-flex items-center px-1.5 py-0.5 rounded text-xs font-medium bg-green-500 text-white\">\n 🍃 Spring\n </span>\n )\n }\n\n // Generic React (CRA, webpack-dev-server) - fallback for React patterns\n else if (\n message.includes(\"webpack compiled\") ||\n message.includes(\"compiled successfully\") ||\n message.includes(\"webpack-dev-server\")\n ) {\n return (\n <span className=\"inline-flex items-center px-1.5 py-0.5 rounded text-xs font-medium bg-blue-600 text-white\">\n ⚛️ React\n </span>\n )\n }\n\n return null\n })()}\n </div>\n </div>\n </div>\n </div>\n\n {entry.screenshot && (\n <div className=\"mt-2\">\n <Image\n src={`/screenshots/${entry.screenshot}`}\n alt=\"Screenshot\"\n width={0}\n height={0}\n sizes=\"100vw\"\n className=\"w-full h-auto max-w-2xl border rounded shadow-sm\"\n style={{ maxHeight: \"600px\", objectFit: \"contain\" }}\n unoptimized\n />\n </div>\n )}\n </div>\n )\n}\n\ninterface LogsClientProps {\n version: string\n initialData?: {\n logs: LogEntry[]\n logFiles: LogFile[]\n currentLogFile: string\n mode: \"head\" | \"tail\"\n }\n}\n\nexport default function LogsClient({ version, initialData }: LogsClientProps) {\n const router = useRouter()\n const searchParams = useSearchParams()\n const [darkMode, setDarkMode] = useDarkMode()\n const [logs, setLogs] = useState<LogEntry[]>(initialData?.logs || [])\n const [mode, setMode] = useState<\"head\" | \"tail\">(initialData?.mode || \"tail\")\n\n // Update mode when URL parameters change\n useEffect(() => {\n const urlMode = searchParams.get(\"mode\") as \"head\" | \"tail\" | null\n if (urlMode && urlMode !== mode) {\n setMode(urlMode)\n }\n }, [searchParams, mode])\n const [isAtBottom, setIsAtBottom] = useState(true)\n const [isInitialLoading, setIsInitialLoading] = useState(!initialData)\n const [lastLogCount, setLastLogCount] = useState(initialData?.logs.length || 0)\n const [lastFetched, setLastFetched] = useState<Date | null>(null)\n const [availableLogs, setAvailableLogs] = useState<LogFile[]>(initialData?.logFiles || [])\n const [currentLogFile, setCurrentLogFile] = useState<string>(initialData?.currentLogFile || \"\")\n const [projectName, setProjectName] = useState<string>(\"\")\n const [showLogSelector, setShowLogSelector] = useState(false)\n const [isReplaying, setIsReplaying] = useState(false)\n const [showFilters, setShowFilters] = useState(false)\n const [showReplayPreview, setShowReplayPreview] = useState(false)\n const [replayEvents, setReplayEvents] = useState<ReplayEvent[]>([])\n const [isRotatingLog, setIsRotatingLog] = useState(false)\n const [filters, setFilters] = useState({\n browser: true,\n server: true,\n interaction: true,\n screenshot: true\n })\n const [userAgentFilters, setUserAgentFilters] = useState<Record<string, boolean>>({})\n const [logBuffer, setLogBuffer] = useState<LogEntry[]>([]) // Buffer logs when not in live mode\n const bottomRef = useRef<HTMLDivElement>(null)\n const containerRef = useRef<HTMLDivElement>(null)\n const pollIntervalRef = useRef<NodeJS.Timeout | null>(null)\n const dropdownRef = useRef<HTMLDivElement>(null)\n const filterDropdownRef = useRef<HTMLDivElement>(null)\n const userScrolledManually = useRef<boolean>(false) // Track if user manually scrolled away from live mode\n\n const loadAvailableLogs = useCallback(async () => {\n try {\n const response = await fetch(\"/api/logs/list\")\n if (response.ok) {\n const data: LogListResponse = await response.json()\n setAvailableLogs(data.files)\n setCurrentLogFile(data.currentFile)\n setProjectName(data.projectName)\n }\n } catch (error) {\n console.error(\"Error loading available logs:\", error)\n }\n }, [])\n\n const pollForNewLogs = useCallback(async () => {\n if (mode !== \"tail\") return\n\n try {\n // Determine which log file to poll\n const requestedFile = searchParams.get(\"file\")\n let logPath = \"\"\n let isCurrentFile = true\n\n if (requestedFile && availableLogs.length > 0) {\n // Find the specific log file requested\n const foundFile = availableLogs.find((f) => f.name === requestedFile)\n logPath = foundFile?.path || currentLogFile\n isCurrentFile = foundFile?.isCurrent !== false\n } else {\n // Use current log file\n logPath = currentLogFile\n isCurrentFile = true\n }\n\n // Only poll for new logs if viewing the current (active) log file\n if (!isCurrentFile) return\n\n // Build API URL with logPath parameter if needed\n // For polling, only fetch a small number of new lines to reduce server load\n const apiUrl = logPath\n ? `/api/logs/tail?lines=50&logPath=${encodeURIComponent(logPath)}`\n : `/api/logs/tail?lines=50`\n\n const response = await fetch(apiUrl)\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}: ${response.statusText}`)\n }\n\n const data: LogsApiResponse = await response.json()\n\n if (!data.logs) {\n console.warn(\"No logs data in response\")\n return\n }\n\n const entries = parseLogEntries(data.logs)\n\n if (entries.length > lastLogCount) {\n if (isAtBottom) {\n // In live mode - apply logs immediately and flush buffer\n setLastFetched(new Date()) // Only update \"Last updated\" when actually showing new logs\n\n if (logBuffer.length > 0) {\n // Merge buffer with latest entries\n setLogs([...logs, ...logBuffer, ...entries.slice(lastLogCount)])\n setLogBuffer([]) // Clear buffer\n } else {\n setLogs(entries)\n }\n setLastLogCount(entries.length)\n\n // Auto-scroll to bottom - but only if user hasn't manually scrolled away\n if (!userScrolledManually.current) {\n setTimeout(() => {\n bottomRef.current?.scrollIntoView({ behavior: \"smooth\" })\n }, 50)\n }\n } else {\n // Not in live mode - buffer the new entries (don't update \"Last updated\")\n const newEntries = entries.slice(lastLogCount)\n if (newEntries.length > 0) {\n setLogBuffer((prev) => [...prev, ...newEntries])\n setLastLogCount(entries.length)\n }\n }\n }\n } catch (error) {\n console.error(\"Error polling logs:\", error)\n // Don't spam console on network errors during polling\n }\n }, [mode, isAtBottom, searchParams, availableLogs, currentLogFile, lastLogCount, logBuffer, logs])\n\n // Start/stop polling based on mode (always poll in tail mode, but buffer when not at bottom)\n useEffect(() => {\n if (mode === \"tail\") {\n pollIntervalRef.current = setInterval(pollForNewLogs, 3000) // Poll every 3 seconds\n return () => {\n if (pollIntervalRef.current) {\n clearInterval(pollIntervalRef.current)\n }\n }\n } else {\n if (pollIntervalRef.current) {\n clearInterval(pollIntervalRef.current)\n }\n }\n }, [mode, pollForNewLogs]) // Removed isAtBottom - now always poll in tail mode\n\n // Handle returning to live mode - ONLY flush buffer when user explicitly clicks \"Live\" button\n // This effect is removed to prevent race conditions - buffer flushing now happens only on explicit user action\n\n const loadInitialLogs = useCallback(async () => {\n setIsInitialLoading(true)\n\n // Load available logs list first\n await loadAvailableLogs()\n\n try {\n // Determine which log file to load\n const requestedFile = searchParams.get(\"file\")\n let logPath = \"\"\n\n if (requestedFile && availableLogs.length > 0) {\n // Find the specific log file requested\n const foundFile = availableLogs.find((f) => f.name === requestedFile)\n logPath = foundFile?.path || currentLogFile\n } else {\n // Use current log file\n logPath = currentLogFile\n }\n\n // Build API URL with logPath parameter if needed\n const apiUrl = logPath\n ? `/api/logs/${mode}?lines=1000&logPath=${encodeURIComponent(logPath)}`\n : `/api/logs/${mode}?lines=1000`\n\n const response = await fetch(apiUrl)\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}: ${response.statusText}`)\n }\n\n const data: LogsApiResponse = await response.json()\n\n if (!data.logs) {\n console.warn(\"No logs data in response\")\n setLogs([])\n setIsInitialLoading(false)\n return\n }\n\n const entries = parseLogEntries(data.logs)\n\n setLogs(entries)\n setLastLogCount(entries.length)\n setLastFetched(new Date())\n setIsInitialLoading(false)\n\n // Auto-scroll to bottom for tail mode - only if user hasn't manually scrolled away\n if (mode === \"tail\" && !userScrolledManually.current) {\n setIsAtBottom(true)\n const scrollToBottom = () => {\n if (bottomRef.current) {\n bottomRef.current.scrollIntoView({ behavior: \"auto\" })\n } else if (containerRef.current) {\n containerRef.current.scrollTop = containerRef.current.scrollHeight\n }\n }\n // Try multiple times to ensure it works\n setTimeout(scrollToBottom, 0)\n setTimeout(scrollToBottom, 100)\n }\n } catch (error) {\n console.error(\"Error loading logs:\", error)\n setLogs([])\n }\n }, [loadAvailableLogs, searchParams, availableLogs, currentLogFile, mode])\n\n useEffect(() => {\n // Only load logs if we don't have initial data or mode actually changed\n const _currentMode = searchParams.get(\"mode\") || \"tail\"\n const hasInitialData = initialData?.logs && initialData?.logs.length > 0\n\n if (!hasInitialData && !logs.length) {\n // No server-side data and no client data - load fresh\n loadInitialLogs()\n } else if (hasInitialData && logs.length === 0) {\n // We have server-side data but client state is empty - use server data\n setLogs(initialData.logs)\n setIsInitialLoading(false)\n if (mode === \"tail\" && !userScrolledManually.current) {\n // Scroll to bottom for tail mode with server data - only if user hasn't manually scrolled away\n setIsAtBottom(true)\n const scrollToBottom = () => {\n if (bottomRef.current) {\n bottomRef.current.scrollIntoView({ behavior: \"auto\" })\n } else if (containerRef.current) {\n containerRef.current.scrollTop = containerRef.current.scrollHeight\n }\n }\n // Try multiple times to ensure it works\n setTimeout(scrollToBottom, 0)\n setTimeout(scrollToBottom, 100)\n setTimeout(scrollToBottom, 300)\n }\n } else if (mode === \"tail\" && isAtBottom) {\n // Set up polling timer for new logs if we're in tail mode\n setIsInitialLoading(false)\n pollIntervalRef.current = setInterval(() => {\n pollForNewLogs()\n }, 3000)\n }\n }, [\n mode,\n initialData?.logs,\n isAtBottom, // No server-side data and no client data - load fresh\n loadInitialLogs,\n logs.length,\n pollForNewLogs,\n searchParams.get\n ]) // Only depend on mode to avoid infinite loops\n\n // Separate effect to handle scrolling after logs are rendered\n useEffect(() => {\n if (logs.length > 0 && mode === \"tail\" && isAtBottom && !userScrolledManually.current) {\n const scrollToBottom = () => {\n if (bottomRef.current) {\n bottomRef.current.scrollIntoView({ behavior: \"auto\" })\n } else if (containerRef.current) {\n containerRef.current.scrollTop = containerRef.current.scrollHeight\n }\n }\n // Scroll after DOM updates\n setTimeout(scrollToBottom, 0)\n }\n }, [logs.length, mode, isAtBottom]) // Trigger when logs are actually rendered\n\n useEffect(() => {\n return () => {\n if (pollIntervalRef.current) {\n clearInterval(pollIntervalRef.current)\n }\n }\n }, [])\n\n // Close dropdowns when clicking outside\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) {\n setShowLogSelector(false)\n }\n if (filterDropdownRef.current && !filterDropdownRef.current.contains(event.target as Node)) {\n setShowFilters(false)\n }\n }\n\n if (showLogSelector || showFilters) {\n document.addEventListener(\"mousedown\", handleClickOutside)\n return () => document.removeEventListener(\"mousedown\", handleClickOutside)\n }\n }, [showLogSelector, showFilters])\n\n const handleScroll = () => {\n if (containerRef.current) {\n const { scrollTop, scrollHeight, clientHeight } = containerRef.current\n const atBottom = scrollTop + clientHeight >= scrollHeight - 10\n\n // If user scrolled up from the bottom, mark as manual scroll\n if (isAtBottom && !atBottom) {\n userScrolledManually.current = true\n }\n\n // If user scrolled back to bottom, clear manual scroll flag only via explicit action\n // (not automatically - they need to click the \"Live\" button)\n\n setIsAtBottom(atBottom)\n }\n }\n\n const handleReplay = async () => {\n if (isReplaying) return\n\n setIsReplaying(true)\n\n try {\n // Get replay data from logs\n const response = await fetch(\"/api/replay?action=parse\")\n if (!response.ok) {\n throw new Error(\"Failed to parse replay data\")\n }\n\n const replayData = await response.json()\n\n if (replayData.interactions.length === 0) {\n alert(\"No user interactions found in logs to replay\")\n return\n }\n\n // Generate CDP commands for replay\n const response2 = await fetch(\"/api/replay\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n action: \"execute\",\n replayData: replayData,\n speed: 2\n })\n })\n\n const result = await response2.json()\n\n if (result.success) {\n console.log(\"Replay executed successfully:\", result)\n alert(`Replay completed! Executed ${result.totalCommands} commands.`)\n } else {\n console.log(\"CDP execution failed, showing commands:\", result)\n alert(\n `CDP execution not available. Generated ${result.commands?.length || 0} commands. Check console for details.`\n )\n }\n } catch (error) {\n console.error(\"Replay error:\", error)\n alert(`Failed to start replay: ${error instanceof Error ? error.message : \"Unknown error\"}`)\n } finally {\n setIsReplaying(false)\n }\n }\n\n const loadReplayPreview = () => {\n // Extract interactions from current logs instead of making API call\n const interactions = logs\n .filter((log) => log.message.includes(\"[INTERACTION]\"))\n .map((log) => {\n const match = log.message.match(/\\[INTERACTION\\] (.+)/)\n if (match) {\n try {\n // Try parsing as JSON (new format)\n const data = JSON.parse(match[1])\n return {\n timestamp: log.timestamp,\n event: data.type || \"unknown\",\n details: JSON.stringify(data),\n type: data.type,\n x: data.x,\n y: data.y,\n target: data.target,\n direction: data.direction,\n distance: data.distance,\n key: data.key\n } as ReplayEvent\n } catch {\n // Fallback to old format parsing\n const oldMatch = match[1].match(/(CLICK|TAP|SCROLL|KEY) (.+)/)\n if (oldMatch) {\n return {\n timestamp: log.timestamp,\n event: oldMatch[1],\n details: oldMatch[2],\n type: oldMatch[1]\n } as ReplayEvent\n }\n }\n }\n return null\n })\n .filter((item): item is ReplayEvent => item !== null)\n\n setReplayEvents(interactions)\n }\n\n const handleRotateLog = async () => {\n if (!currentLogFile || isRotatingLog) return\n\n const confirmed = window.confirm(\n \"Clear logs and start fresh?\\n\\n\" +\n \"This will:\\n\" +\n \"• Archive the current log file\\n\" +\n \"• Start a new empty log file\\n\" +\n \"• Clear the current view\\n\\n\" +\n \"The archived logs will still be available in the dropdown.\"\n )\n\n if (!confirmed) return\n\n setIsRotatingLog(true)\n try {\n const response = await fetch(\"/api/logs/rotate\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({ currentLogPath: currentLogFile })\n })\n\n if (response.ok) {\n // Clear current logs from UI\n setLogs([])\n setLastLogCount(0)\n setLastFetched(null)\n\n // Reload available logs to show the new archived file\n await loadAvailableLogs()\n\n // Start fresh polling\n await loadInitialLogs()\n } else {\n const error = await response.json()\n console.error(\"Failed to rotate log:\", error)\n alert(`Failed to rotate log: ${error.error}`)\n }\n } catch (error) {\n console.error(\"Error rotating log:\", error)\n alert(\"Error rotating log\")\n } finally {\n setIsRotatingLog(false)\n }\n }\n\n // Compute available user agents from browser logs\n const availableUserAgents = useMemo(() => {\n const userAgents = new Set<string>()\n logs.forEach((entry) => {\n if (entry.source === \"BROWSER\" && entry.userAgent) {\n userAgents.add(entry.userAgent)\n }\n })\n return Array.from(userAgents).sort()\n }, [logs])\n\n // Update user agent filters when available user agents change\n useEffect(() => {\n if (availableUserAgents.length > 0) {\n setUserAgentFilters((prev) => {\n const newFilters = { ...prev }\n // Enable all user agents by default if not already set\n availableUserAgents.forEach((ua) => {\n if (!(ua in newFilters)) {\n newFilters[ua] = true\n }\n })\n return newFilters\n })\n }\n }, [availableUserAgents])\n\n const filteredLogs = useMemo(() => {\n return logs.filter((entry) => {\n // Check specific message types first (these override source filtering)\n const isInteraction = entry.message.includes(\"[INTERACTION]\")\n const isScreenshot = entry.message.includes(\"[SCREENSHOT]\")\n\n if (isInteraction) return filters.interaction\n if (isScreenshot) return filters.screenshot\n\n // For other logs, filter by source\n if (entry.source === \"SERVER\") return filters.server\n if (entry.source === \"BROWSER\") {\n // First check if browser logs are enabled at all\n if (!filters.browser) return false\n\n // If there are user agent filters and this entry has a user agent, apply UA filtering\n if (availableUserAgents.length > 0 && entry.userAgent) {\n return userAgentFilters[entry.userAgent] !== false\n }\n\n // Otherwise, just show if browser is enabled\n return true\n }\n\n return true\n })\n }, [logs, filters, userAgentFilters, availableUserAgents])\n\n return (\n <div className=\"h-screen bg-gray-50 dark:bg-gray-900 flex flex-col transition-colors\">\n {/* Header - Fixed */}\n <div className=\"bg-white dark:bg-gray-800 shadow-sm border-b border-gray-200 dark:border-gray-700 flex-none z-10\">\n <div className=\"max-w-7xl mx-auto px-4 py-3\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-2 sm:gap-4\">\n <div className=\"flex items-center gap-1\">\n <h1 className=\"text-xl sm:text-2xl font-bold text-gray-900 dark:text-white whitespace-nowrap\">\n dev3000\n </h1>\n <span className=\"text-xs text-gray-400 dark:text-gray-500 whitespace-nowrap\">(v{version})</span>\n </div>\n {/* Log File Selector */}\n {availableLogs.length > 1 ? (\n <div className=\"relative\" ref={dropdownRef}>\n <button\n type=\"button\"\n onClick={() => setShowLogSelector(!showLogSelector)}\n className=\"flex items-center gap-2 px-3 py-1 text-sm text-gray-600 dark:text-gray-300 hover:text-gray-900 dark:hover:text-white hover:bg-gray-50 dark:hover:bg-gray-700 rounded-md transition-colors\"\n >\n <span className=\"font-mono text-xs whitespace-nowrap\">\n {isInitialLoading && !currentLogFile ? (\n <div\n className=\"h-4 bg-gray-200 dark:bg-gray-700 rounded animate-pulse\"\n style={{ width: \"220px\" }}\n />\n ) : currentLogFile ? (\n // Show symlink name for current file, basename for others\n availableLogs.find((log) => log.path === currentLogFile)?.isCurrent ? (\n \"d3k.log\"\n ) : (\n currentLogFile.split(\"/\").pop()\n )\n ) : (\n \"d3k.log\"\n )}\n </span>\n <svg\n className={`w-4 h-4 transition-transform ${showLogSelector ? \"rotate-180\" : \"\"}`}\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 9l-7 7-7-7\" />\n </svg>\n </button>\n {/* Dropdown */}\n {showLogSelector && availableLogs.length > 1 && (\n <div className=\"absolute top-full left-0 mt-1 bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-600 rounded-md shadow-lg z-20 min-w-80\">\n <div className=\"py-1 max-h-60 overflow-y-auto\">\n <div className=\"px-3 py-2 text-xs font-medium text-gray-500 dark:text-gray-400 border-b border-gray-200 dark:border-gray-600\">\n {projectName} logs ({availableLogs.length})\n </div>\n {availableLogs.map((logFile) => (\n <button\n type=\"button\"\n key={logFile.path}\n onClick={() => {\n setShowLogSelector(false)\n router.push(`/logs?file=${encodeURIComponent(logFile.name)}&mode=${mode}`)\n }}\n className={`w-full text-left px-3 py-2 text-sm hover:bg-gray-50 flex items-center justify-between ${\n logFile.isCurrent ? \"bg-blue-50 text-blue-900\" : \"text-gray-700\"\n }`}\n >\n <div className=\"flex flex-col\">\n <span className=\"font-mono text-xs\">{logFile.name}</span>\n <span className=\"text-xs text-gray-500\">\n {new Date(logFile.mtime).toLocaleString()} • {Math.round(logFile.size / 1024)}KB\n </span>\n </div>\n {logFile.isCurrent && <span className=\"text-xs text-blue-600 font-medium\">current</span>}\n </button>\n ))}\n </div>\n </div>\n )}\n </div>\n ) : (\n <div className=\"flex items-center gap-2\">\n <span className=\"font-mono text-xs text-gray-600 px-3 py-1 whitespace-nowrap\">\n {isInitialLoading && !currentLogFile ? (\n <div className=\"h-4 bg-gray-200 rounded animate-pulse\" style={{ width: \"220px\" }} />\n ) : currentLogFile ? (\n // Show symlink name for current file, basename for others\n availableLogs.find((log) => log.path === currentLogFile)?.isCurrent ? (\n \"d3k.log\"\n ) : (\n currentLogFile.split(\"/\").pop()\n )\n ) : (\n \"d3k.log\"\n )}\n </span>\n </div>\n )}\n\n {/* Entries count */}\n {logs.length > 0 && <span className=\"text-sm text-gray-500 hidden sm:inline\">{logs.length} entries</span>}\n\n {/* Buffered logs indicator */}\n {logBuffer.length > 0 && !isAtBottom && (\n <span className=\"text-xs bg-blue-100 dark:bg-blue-900 text-blue-800 dark:text-blue-200 px-2 py-1 rounded-full\">\n +{logBuffer.length} buffered\n </span>\n )}\n\n {/* Clear button - always visible when we have a current log file */}\n {currentLogFile && !isInitialLoading && (\n <button\n type=\"button\"\n onClick={handleRotateLog}\n disabled={isRotatingLog}\n className=\"px-2 py-1 text-xs bg-orange-100 text-orange-700 hover:bg-orange-200 rounded transition-colors disabled:opacity-50 disabled:cursor-not-allowed\"\n title=\"Clear logs (rotate current log to archive and start fresh)\"\n >\n {isRotatingLog ? \"...\" : \"Clear\"}\n </button>\n )}\n </div>\n\n {/* Mode Toggle */}\n <div className=\"flex items-center gap-2\">\n {/* Replay Button - Hidden until functionality is complete */}\n {false && (\n <div className=\"relative\">\n <button\n type=\"button\"\n onClick={handleReplay}\n disabled={isReplaying}\n onMouseEnter={() => {\n if (!isReplaying) {\n loadReplayPreview()\n setShowReplayPreview(true)\n }\n }}\n onMouseLeave={() => setShowReplayPreview(false)}\n className={`flex items-center gap-1 px-3 py-1 rounded text-sm font-medium transition-colors whitespace-nowrap ${\n isReplaying\n ? \"bg-gray-100 text-gray-400 cursor-not-allowed\"\n : \"bg-purple-100 text-purple-800 hover:bg-purple-200\"\n }`}\n >\n {isReplaying ? (\n <>\n <div className=\"w-3 h-3 border border-purple-300 border-t-purple-600 rounded-full animate-spin\"></div>\n Replaying...\n </>\n ) : (\n <>\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M14.828 14.828a4 4 0 01-5.656 0M9 10h1m4 0h1m-6 4h1m4 0h1m6-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M7 7V4a1 1 0 011-1h4a1 1 0 011 1v3m-9 4h16m-5 4v1a1 1 0 01-1 1H8a1 1 0 01-1-1v-1m8 0V9a1 1 0 00-1-1H8a1 1 0 00-1 1v8.001\"\n />\n </svg>\n Replay\n </>\n )}\n </button>\n {/* Replay Preview Dropdown */}\n {showReplayPreview && !isReplaying && (\n <div className=\"absolute top-full left-0 mt-1 bg-white border border-gray-200 rounded-md shadow-lg z-30 w-80\">\n <div className=\"py-2\">\n <div className=\"px-3 py-2 text-xs font-medium text-gray-500 border-b\">\n Replay Events ({replayEvents.length})\n </div>\n <div className=\"max-h-60 overflow-y-auto\">\n {replayEvents.length === 0 ? (\n <div className=\"px-3 py-4 text-sm text-gray-500 text-center\">No interactions to replay</div>\n ) : (\n replayEvents.map((event, index) => (\n <div\n key={`${event.timestamp}-${index}`}\n className=\"px-3 py-2 text-sm hover:bg-gray-50 border-b border-gray-100 last:border-b-0\"\n >\n <div className=\"flex items-center gap-2\">\n <span\n className={`px-1.5 py-0.5 rounded text-xs font-medium ${\n event.type === \"CLICK\"\n ? \"bg-blue-100 text-blue-800\"\n : event.type === \"SCROLL\"\n ? \"bg-green-100 text-green-800\"\n : \"bg-gray-100 text-gray-700\"\n }`}\n >\n {event.type}\n </span>\n <span className=\"text-xs text-gray-500 font-mono\">\n {new Date(event.timestamp).toLocaleTimeString()}\n </span>\n </div>\n <div className=\"mt-1 text-xs text-gray-600 font-mono truncate\">\n {event.type === \"CLICK\" && `(${event.x}, ${event.y}) on ${event.target}`}\n {event.type === \"SCROLL\" &&\n `${event.direction} ${event.distance}px to (${event.x}, ${event.y})`}\n {event.type === \"KEY\" && `${event.key} in ${event.target}`}\n </div>\n </div>\n ))\n )}\n </div>\n </div>\n </div>\n )}\n </div>\n )}\n {/* Filter Button */}\n <div className=\"relative\" ref={filterDropdownRef}>\n <button\n type=\"button\"\n onClick={() => setShowFilters(!showFilters)}\n className=\"flex items-center gap-1 px-3 py-1 rounded text-sm font-medium transition-colors whitespace-nowrap bg-gray-100 text-gray-700 hover:bg-gray-200\"\n >\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M3 4a1 1 0 011-1h16a1 1 0 011 1v2.586a1 1 0 01-.293.707l-6.414 6.414a1 1 0 00-.293.707V17l-4 4v-6.586a1 1 0 00-.293-.707L3.293 7.293A1 1 0 013 6.586V4z\"\n />\n </svg>\n Filter\n </button>\n {/* Filter Dropdown */}\n {showFilters && (\n <div className=\"absolute top-full right-0 mt-1 bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700 rounded-md shadow-lg z-20 min-w-48\">\n <div className=\"py-2\">\n <div className=\"px-3 py-2 text-xs font-medium text-gray-500 dark:text-gray-400 border-b border-gray-200 dark:border-gray-700\">\n Log Types\n </div>\n\n {/* Server Logs */}\n <label className=\"flex items-center justify-between px-3 py-2 text-sm hover:bg-gray-50 dark:hover:bg-gray-700 cursor-pointer\">\n <div className=\"flex items-center gap-2\">\n <input\n type=\"checkbox\"\n checked={filters.server}\n onChange={(e) =>\n setFilters((prev) => ({\n ...prev,\n server: e.target.checked\n }))\n }\n className=\"rounded border-gray-300 text-blue-600 focus:ring-blue-500\"\n />\n <span className=\"text-gray-900 dark:text-gray-100\">Server</span>\n </div>\n <span className=\"text-xs text-gray-400\">\n {logs.filter((l) => l.source === \"SERVER\").length}\n </span>\n </label>\n\n {/* Browser Logs */}\n <label className=\"flex items-center justify-between px-3 py-2 text-sm hover:bg-gray-50 dark:hover:bg-gray-700 cursor-pointer\">\n <div className=\"flex items-center gap-2\">\n <input\n type=\"checkbox\"\n checked={filters.browser}\n onChange={(e) =>\n setFilters((prev) => ({\n ...prev,\n browser: e.target.checked\n }))\n }\n className=\"rounded border-gray-300 text-blue-600 focus:ring-blue-500\"\n />\n <span className=\"text-gray-900 dark:text-gray-100\">Browser</span>\n </div>\n <span className=\"text-xs text-gray-400\">\n {logs.filter((l) => l.source === \"BROWSER\").length}\n </span>\n </label>\n\n {/* User Agent Sub-filters */}\n {availableUserAgents.length > 1 && filters.browser && (\n <div className=\"ml-6 border-l border-gray-200 dark:border-gray-600 pl-2\">\n {availableUserAgents.map((ua) => {\n const shortUA = ua.includes(\"Chrome\")\n ? \"Chrome\"\n : ua.includes(\"Firefox\")\n ? \"Firefox\"\n : ua.includes(\"Safari\")\n ? \"Safari\"\n : ua.includes(\"Edge\")\n ? \"Edge\"\n : \"Browser\"\n return (\n <label\n key={ua}\n className=\"flex items-center justify-between px-2 py-1 text-xs hover:bg-gray-50 dark:hover:bg-gray-700 cursor-pointer\"\n >\n <div className=\"flex items-center gap-2\">\n <input\n type=\"checkbox\"\n checked={userAgentFilters[ua] !== false}\n onChange={(e) =>\n setUserAgentFilters((prev) => ({\n ...prev,\n [ua]: e.target.checked\n }))\n }\n className=\"rounded border-gray-300 text-blue-600 focus:ring-blue-500 w-3 h-3\"\n />\n <span className=\"text-gray-700 dark:text-gray-300\">{shortUA}</span>\n </div>\n <span className=\"text-xs text-gray-400\">\n {logs.filter((l) => l.source === \"BROWSER\" && l.userAgent === ua).length}\n </span>\n </label>\n )\n })}\n </div>\n )}\n\n {/* Interaction Logs */}\n <label className=\"flex items-center justify-between px-3 py-2 text-sm hover:bg-gray-50 dark:hover:bg-gray-700 cursor-pointer\">\n <div className=\"flex items-center gap-2\">\n <input\n type=\"checkbox\"\n checked={filters.interaction}\n onChange={(e) =>\n setFilters((prev) => ({\n ...prev,\n interaction: e.target.checked\n }))\n }\n className=\"rounded border-gray-300 text-blue-600 focus:ring-blue-500\"\n />\n <span className=\"text-gray-900 dark:text-gray-100\">Interaction</span>\n </div>\n <span className=\"text-xs text-gray-400\">\n {logs.filter((l) => l.message.includes(\"[INTERACTION]\")).length}\n </span>\n </label>\n\n {/* Screenshot Logs */}\n <label className=\"flex items-center justify-between px-3 py-2 text-sm hover:bg-gray-50 dark:hover:bg-gray-700 cursor-pointer\">\n <div className=\"flex items-center gap-2\">\n <input\n type=\"checkbox\"\n checked={filters.screenshot}\n onChange={(e) =>\n setFilters((prev) => ({\n ...prev,\n screenshot: e.target.checked\n }))\n }\n className=\"rounded border-gray-300 text-blue-600 focus:ring-blue-500\"\n />\n <span className=\"text-gray-900 dark:text-gray-100\">Screenshot</span>\n </div>\n <span className=\"text-xs text-gray-400\">\n {logs.filter((l) => l.message.includes(\"[SCREENSHOT]\")).length}\n </span>\n </label>\n </div>\n </div>\n )}\n </div>\n <div className=\"flex items-center bg-gray-100 rounded-md p-1\">\n <button\n type=\"button\"\n onClick={() => {\n const currentFile = searchParams.get(\"file\")\n if (currentFile) {\n router.push(`/logs?file=${encodeURIComponent(currentFile)}&mode=head`)\n } else {\n router.push(\"/logs?mode=head\")\n }\n }}\n className={`px-2 sm:px-3 py-1 rounded text-xs sm:text-sm font-medium transition-colors whitespace-nowrap ${\n mode === \"head\" ? \"bg-white text-gray-900 shadow-sm\" : \"text-gray-600 hover:text-gray-900\"\n }`}\n >\n Head\n </button>\n <button\n type=\"button\"\n onClick={() => {\n const currentFile = searchParams.get(\"file\")\n if (currentFile) {\n router.push(`/logs?file=${encodeURIComponent(currentFile)}&mode=tail`)\n } else {\n router.push(\"/logs?mode=tail\")\n }\n }}\n className={`px-2 sm:px-3 py-1 rounded text-xs sm:text-sm font-medium transition-colors whitespace-nowrap ${\n mode === \"tail\" ? \"bg-white text-gray-900 shadow-sm\" : \"text-gray-600 hover:text-gray-900\"\n }`}\n >\n Tail\n </button>\n </div>\n {/* Dark Mode Toggle - moved to last item */}\n <button\n type=\"button\"\n onClick={() => setDarkMode(!darkMode)}\n className=\"p-2 rounded-md text-gray-600 dark:text-gray-300 hover:text-gray-900 dark:hover:text-white hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors ml-2\"\n title={darkMode ? \"Switch to light mode\" : \"Switch to dark mode\"}\n >\n {darkMode ? (\n // Sun icon for light mode\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M12 3v1m0 16v1m9-9h-1M4 12H3m15.364 6.364l-.707-.707M6.343 6.343l-.707-.707m12.728 0l-.707.707M6.343 17.657l-.707.707M16 12a4 4 0 11-8 0 4 4 0 018 0z\"\n />\n </svg>\n ) : (\n // Moon icon for dark mode\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M20.354 15.354A9 9 0 018.646 3.646 9.003 9.003 0 0012 21a9.003 9.003 0 008.354-5.646z\"\n />\n </svg>\n )}\n </button>\n </div>\n </div>\n </div>\n </div>\n\n {/* Content Area - Fills remaining space */}\n <div className=\"flex-1 overflow-hidden\">\n <div ref={containerRef} className=\"max-w-7xl mx-auto px-4 py-6 h-full overflow-y-auto\" onScroll={handleScroll}>\n {isInitialLoading ? (\n <div className=\"text-center py-12\">\n <div className=\"inline-block animate-spin rounded-full h-8 w-8 border-b-2 border-blue-600\"></div>\n <div className=\"text-gray-500 text-sm mt-4\">Loading logs...</div>\n </div>\n ) : logs.length === 0 ? (\n <div className=\"text-center py-12\">\n <div className=\"text-gray-400 dark:text-gray-500 text-lg\">📝 No logs yet</div>\n <div className=\"text-gray-500 dark:text-gray-400 text-sm mt-2\">\n Logs will appear here as your development server runs\n </div>\n </div>\n ) : filteredLogs.length === 0 ? (\n <div className=\"text-center py-12\">\n <div className=\"text-gray-400 dark:text-gray-500 text-lg\">🔍 No logs match current filters</div>\n <div className=\"text-gray-500 dark:text-gray-400 text-sm mt-2\">\n Try adjusting your filter settings to see more logs\n </div>\n </div>\n ) : (\n <div className=\"space-y-1 pb-4\">\n {filteredLogs.map((entry, index) => (\n <LogEntryComponent key={`${entry.timestamp}-${index}`} entry={entry} />\n ))}\n <div ref={bottomRef} />\n </div>\n )}\n </div>\n </div>\n\n {/* Footer - Fixed */}\n <div className=\"border-t border-gray-200 dark:border-gray-700 bg-gray-50 dark:bg-gray-800 flex-none\">\n <div className=\"max-w-7xl mx-auto px-4 py-3 flex items-center justify-between\">\n <div className=\"flex items-center gap-3\">\n {lastFetched && (\n <span className=\"text-xs text-gray-400 dark:text-gray-500 font-mono\">\n Last updated {lastFetched.toLocaleTimeString()}\n </span>\n )}\n {currentLogFile && (\n <a\n href={`file://${currentLogFile}`}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"text-xs text-blue-600 hover:text-blue-800 flex items-center gap-1\"\n >\n Raw Log ↗\n </a>\n )}\n </div>\n\n {/* Live indicator or scroll to bottom button - positioned on the right */}\n <div className=\"relative\">\n {/* Live indicator when at bottom */}\n <div\n className={`flex items-center gap-1 text-green-600 ${\n mode === \"tail\" && isAtBottom ? \"visible\" : \"invisible\"\n }`}\n >\n <div className=\"w-2 h-2 bg-green-500 rounded-full animate-pulse\"></div>\n <span className=\"text-xs\">Live</span>\n </div>\n\n {/* Scroll to bottom button when not at bottom */}\n <button\n type=\"button\"\n onClick={() => {\n userScrolledManually.current = false // Clear manual scroll flag\n\n // Flush any buffered logs when explicitly returning to live mode\n if (logBuffer.length > 0) {\n setLogs((prevLogs) => [...prevLogs, ...logBuffer])\n setLogBuffer([])\n setLastFetched(new Date()) // Update \"Last updated\" when showing buffered logs\n }\n\n bottomRef.current?.scrollIntoView({ behavior: \"smooth\" })\n }}\n className={`absolute top-0 right-0 flex items-center gap-1 px-2 py-0.5 bg-blue-600 text-white rounded text-xs hover:bg-blue-700 whitespace-nowrap ${\n mode === \"tail\" && !isAtBottom ? \"visible\" : \"invisible\"\n }`}\n >\n ↓ Live\n </button>\n </div>\n </div>\n </div>\n </div>\n )\n}\n","import type { LogEntry } from \"@/types\"\n\n/**\n * Cleans up console log messages that contain CSS formatting directives\n * Example: \"%c[Vercel Web Analytics]%c Debug mode... color: rgb(120, 120, 120) color: inherit\"\n * Becomes: \"[Vercel Web Analytics] Debug mode...\"\n */\nfunction cleanConsoleFormatting(message: string): string {\n // Pattern to match console log entries with CSS formatting\n const consoleLogPattern = /^\\[CONSOLE LOG\\] (.+)$/\n const match = message.match(consoleLogPattern)\n\n if (!match) {\n return message\n }\n\n const consoleMessage = match[1]\n\n // Check if this message has %c CSS formatting directives\n if (!consoleMessage.includes(\"%c\")) {\n return message // No formatting to clean\n }\n\n // Remove CSS formatting directives step by step\n let cleaned = consoleMessage\n\n // Remove %c markers\n cleaned = cleaned.replace(/%c/g, \"\")\n\n // Remove trailing CSS color declarations - look for CSS patterns before JSON or at end of string\n // Match CSS color declarations that appear after %c removal\n cleaned = cleaned.replace(/\\s+color:\\s*[^{}\\n]*?(?=\\s*[{[]|$)/g, \"\")\n\n // Clean up any extra whitespace\n cleaned = cleaned.replace(/\\s+/g, \" \").trim()\n\n return `[CONSOLE LOG] ${cleaned}`\n}\n\nexport function parseLogEntries(logContent: string): LogEntry[] {\n // Enhanced pattern to handle both formats:\n // Format 1 (CDP): [timestamp] [SOURCE] message\n // Format 2 (Extension): [timestamp] [TAB-id] [SOURCE] [event] message\n const timestampPattern = /\\[(\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z)\\] \\[([^\\]]+)\\] /\n\n const entries: LogEntry[] = []\n const lines = logContent.split(\"\\n\")\n let currentEntry: LogEntry | null = null\n\n for (const line of lines) {\n if (!line.trim()) continue\n\n const match = line.match(timestampPattern)\n if (match) {\n // Save previous entry if exists\n if (currentEntry) {\n entries.push(currentEntry)\n }\n\n const [fullMatch, timestamp, firstBracket] = match\n const remainingLine = line.substring(fullMatch.length)\n\n // Check if this is a Chrome extension format with tab identifier\n const isTabIdentifier = /^TAB-\\d+\\.\\d+$/.test(firstBracket)\n let source = firstBracket\n let message = remainingLine\n let tabIdentifier: string | undefined\n let userAgent: string | undefined\n\n if (isTabIdentifier) {\n // Chrome extension format: [TAB-id] [SOURCE] [event] message\n tabIdentifier = firstBracket\n\n // Look for the next bracketed section which should be the actual source\n const sourceMatch = remainingLine.match(/^\\[([^\\]]+)\\] /)\n if (sourceMatch) {\n source = sourceMatch[1] // This should be \"BROWSER\"\n message = remainingLine.substring(sourceMatch[0].length)\n\n // Extract user agent from INFO entries if present\n if (message.includes(\"User-Agent:\")) {\n const uaMatch = message.match(/User-Agent: ([^,\\n]+)/)\n if (uaMatch) {\n userAgent = uaMatch[1]\n }\n }\n }\n }\n\n const screenshot = message.match(/\\[SCREENSHOT\\] ([^\\s[]+)/)?.[1]\n\n // Clean up CSS formatting directives in console log messages\n let cleanedMessage = cleanConsoleFormatting(message)\n\n // Remove browser type markers from displayed message (they'll show as pills instead)\n cleanedMessage = cleanedMessage.replace(/ \\[PLAYWRIGHT\\]$/, \"\").replace(/ \\[CHROME_EXTENSION\\]$/, \"\")\n\n // Filter out noisy WebSocket logs from Next.js dev server\n const isNoisyWebSocketLog =\n cleanedMessage.includes(\"[Network.webSocketFrameSent]\") ||\n cleanedMessage.includes(\"[Network.webSocketFrameReceived]\") ||\n cleanedMessage.includes(\"[Network.webSocketFrame\") ||\n (cleanedMessage.includes(\"webSocketDebuggerUrl\") && cleanedMessage.includes(\"localhost\")) ||\n (cleanedMessage.includes(\"[NETWORK\") &&\n cleanedMessage.includes(\"__PAGE__\") &&\n cleanedMessage.includes(\"refresh\"))\n\n // Skip noisy WebSocket logs unless user specifically wants to see them\n if (isNoisyWebSocketLog) {\n currentEntry = null // Skip this entry\n continue\n }\n\n currentEntry = {\n timestamp,\n source,\n message: cleanedMessage,\n screenshot,\n original: line,\n tabIdentifier,\n userAgent\n }\n } else if (currentEntry) {\n // Append to current entry's message\n currentEntry.message += `\\n${line}`\n currentEntry.original += `\\n${line}`\n }\n }\n\n // Don't forget the last entry\n if (currentEntry) {\n entries.push(currentEntry)\n }\n\n return entries\n}\n"],"names":[],"mappings":"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","ignoreList":[0]}
@@ -0,0 +1,3 @@
1
+ module.exports=[66777,(a,b,c)=>{"use strict";function d(a){let b={};for(let[c,d]of a.entries()){let a=b[c];void 0===a?b[c]=d:Array.isArray(a)?a.push(d):b[c]=[a,d]}return b}function e(a){return"string"==typeof a?a:("number"!=typeof a||isNaN(a))&&"boolean"!=typeof a?"":String(a)}function f(a){let b=new URLSearchParams;for(let[c,d]of Object.entries(a))if(Array.isArray(d))for(let a of d)b.append(c,e(a));else b.set(c,e(d));return b}function g(a){for(var b=arguments.length,c=Array(b>1?b-1:0),d=1;d<b;d++)c[d-1]=arguments[d];for(let b of c){for(let c of b.keys())a.delete(c);for(let[c,d]of b.entries())a.append(c,d)}return a}Object.defineProperty(c,"__esModule",{value:!0}),!function(a,b){for(var c in b)Object.defineProperty(a,c,{enumerable:!0,get:b[c]})}(c,{assign:function(){return g},searchParamsToUrlQuery:function(){return d},urlQueryToSearchParams:function(){return f}})},59735,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),!function(a,b){for(var c in b)Object.defineProperty(a,c,{enumerable:!0,get:b[c]})}(c,{formatUrl:function(){return f},formatWithValidation:function(){return h},urlObjectKeys:function(){return g}});let d=a.r(3988)._(a.r(66777)),e=/https?|ftp|gopher|file/;function f(a){let{auth:b,hostname:c}=a,f=a.protocol||"",g=a.pathname||"",h=a.hash||"",i=a.query||"",j=!1;b=b?encodeURIComponent(b).replace(/%3A/i,":")+"@":"",a.host?j=b+a.host:c&&(j=b+(~c.indexOf(":")?"["+c+"]":c),a.port&&(j+=":"+a.port)),i&&"object"==typeof i&&(i=String(d.urlQueryToSearchParams(i)));let k=a.search||i&&"?"+i||"";return f&&!f.endsWith(":")&&(f+=":"),a.slashes||(!f||e.test(f))&&!1!==j?(j="//"+(j||""),g&&"/"!==g[0]&&(g="/"+g)):j||(j=""),h&&"#"!==h[0]&&(h="#"+h),k&&"?"!==k[0]&&(k="?"+k),""+f+j+(g=g.replace(/[?#]/g,encodeURIComponent))+(k=k.replace("#","%23"))+h}let g=["auth","hash","host","hostname","href","path","pathname","port","protocol","query","search","slashes"];function h(a){return f(a)}},76645,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),!function(a,b){for(var c in b)Object.defineProperty(a,c,{enumerable:!0,get:b[c]})}(c,{DecodeError:function(){return p},MiddlewareNotFoundError:function(){return t},MissingStaticPage:function(){return s},NormalizeError:function(){return q},PageNotFoundError:function(){return r},SP:function(){return n},ST:function(){return o},WEB_VITALS:function(){return d},execOnce:function(){return e},getDisplayName:function(){return j},getLocationOrigin:function(){return h},getURL:function(){return i},isAbsoluteUrl:function(){return g},isResSent:function(){return k},loadGetInitialProps:function(){return m},normalizeRepeatedSlashes:function(){return l},stringifyError:function(){return u}});let d=["CLS","FCP","FID","INP","LCP","TTFB"];function e(a){let b,c=!1;return function(){for(var d=arguments.length,e=Array(d),f=0;f<d;f++)e[f]=arguments[f];return c||(c=!0,b=a(...e)),b}}let f=/^[a-zA-Z][a-zA-Z\d+\-.]*?:/,g=a=>f.test(a);function h(){let{protocol:a,hostname:b,port:c}=window.location;return a+"//"+b+(c?":"+c:"")}function i(){let{href:a}=window.location,b=h();return a.substring(b.length)}function j(a){return"string"==typeof a?a:a.displayName||a.name||"Unknown"}function k(a){return a.finished||a.headersSent}function l(a){let b=a.split("?");return b[0].replace(/\\/g,"/").replace(/\/\/+/g,"/")+(b[1]?"?"+b.slice(1).join("?"):"")}async function m(a,b){let c=b.res||b.ctx&&b.ctx.res;if(!a.getInitialProps)return b.ctx&&b.Component?{pageProps:await m(b.Component,b.ctx)}:{};let d=await a.getInitialProps(b);if(c&&k(c))return d;if(!d)throw Object.defineProperty(Error('"'+j(a)+'.getInitialProps()" should resolve to an object. But found "'+d+'" instead.'),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0});return d}let n="undefined"!=typeof performance,o=n&&["mark","measure","getEntriesByName"].every(a=>"function"==typeof performance[a]);class p extends Error{}class q extends Error{}class r extends Error{constructor(a){super(),this.code="ENOENT",this.name="PageNotFoundError",this.message="Cannot find module for page: "+a}}class s extends Error{constructor(a,b){super(),this.message="Failed to load static file for page: "+a+" "+b}}class t extends Error{constructor(){super(),this.code="ENOENT",this.message="Cannot find the middleware module"}}function u(a){return JSON.stringify({message:a.message,stack:a.stack})}},74702,(a,b,c)=>{"use strict";function d(a){let b=a.indexOf("#"),c=a.indexOf("?"),d=c>-1&&(b<0||c<b);return d||b>-1?{pathname:a.substring(0,d?c:b),query:d?a.substring(c,b>-1?b:void 0):"",hash:b>-1?a.slice(b):""}:{pathname:a,query:"",hash:""}}Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"parsePath",{enumerable:!0,get:function(){return d}})},56546,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"addPathPrefix",{enumerable:!0,get:function(){return e}});let d=a.r(74702);function e(a,b){if(!a.startsWith("/")||!b)return a;let{pathname:c,query:e,hash:f}=(0,d.parsePath)(a);return""+b+c+e+f}},35051,(a,b,c)=>{"use strict";function d(a){return a.replace(/\/$/,"")||"/"}Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"removeTrailingSlash",{enumerable:!0,get:function(){return d}})},80624,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"normalizePathTrailingSlash",{enumerable:!0,get:function(){return f}});let d=a.r(35051),e=a.r(74702),f=a=>{if(!a.startsWith("/"))return a;let{pathname:b,query:c,hash:f}=(0,e.parsePath)(a);return""+(0,d.removeTrailingSlash)(b)+c+f};("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},29041,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"addBasePath",{enumerable:!0,get:function(){return f}});let d=a.r(56546),e=a.r(80624);function f(a,b){return(0,e.normalizePathTrailingSlash)((0,d.addPathPrefix)(a,""))}("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},5895,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),!function(a,b){for(var c in b)Object.defineProperty(a,c,{enumerable:!0,get:b[c]})}(c,{ACTION_HMR_REFRESH:function(){return i},ACTION_NAVIGATE:function(){return e},ACTION_PREFETCH:function(){return h},ACTION_REFRESH:function(){return d},ACTION_RESTORE:function(){return f},ACTION_SERVER_ACTION:function(){return j},ACTION_SERVER_PATCH:function(){return g},PrefetchCacheEntryStatus:function(){return l},PrefetchKind:function(){return k}});let d="refresh",e="navigate",f="restore",g="server-patch",h="prefetch",i="hmr-refresh",j="server-action";var k=function(a){return a.AUTO="auto",a.FULL="full",a.TEMPORARY="temporary",a}({}),l=function(a){return a.fresh="fresh",a.reusable="reusable",a.expired="expired",a.stale="stale",a}({});("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},93947,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),!function(a,b){for(var c in b)Object.defineProperty(a,c,{enumerable:!0,get:b[c]})}(c,{ACTION_HEADER:function(){return e},FLIGHT_HEADERS:function(){return m},NEXT_ACTION_NOT_FOUND_HEADER:function(){return t},NEXT_DID_POSTPONE_HEADER:function(){return p},NEXT_HMR_REFRESH_HASH_COOKIE:function(){return j},NEXT_HMR_REFRESH_HEADER:function(){return i},NEXT_HTML_REQUEST_ID_HEADER:function(){return v},NEXT_IS_PRERENDER_HEADER:function(){return s},NEXT_REQUEST_ID_HEADER:function(){return u},NEXT_REWRITTEN_PATH_HEADER:function(){return q},NEXT_REWRITTEN_QUERY_HEADER:function(){return r},NEXT_ROUTER_PREFETCH_HEADER:function(){return g},NEXT_ROUTER_SEGMENT_PREFETCH_HEADER:function(){return h},NEXT_ROUTER_STALE_TIME_HEADER:function(){return o},NEXT_ROUTER_STATE_TREE_HEADER:function(){return f},NEXT_RSC_UNION_QUERY:function(){return n},NEXT_URL:function(){return k},RSC_CONTENT_TYPE_HEADER:function(){return l},RSC_HEADER:function(){return d}});let d="rsc",e="next-action",f="next-router-state-tree",g="next-router-prefetch",h="next-router-segment-prefetch",i="next-hmr-refresh",j="__next_hmr_refresh_hash__",k="next-url",l="text/x-component",m=[d,f,g,i,h],n="_rsc",o="x-nextjs-stale-time",p="x-nextjs-postponed",q="x-nextjs-rewritten-path",r="x-nextjs-rewritten-query",s="x-nextjs-prerender",t="x-nextjs-action-not-found",u="x-nextjs-request-id",v="x-nextjs-html-request-id";("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},98931,(a,b,c)=>{"use strict";function d(a){return null!==a&&"object"==typeof a&&"then"in a&&"function"==typeof a.then}Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"isThenable",{enumerable:!0,get:function(){return d}})},63365,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),!function(a,b){for(var c in b)Object.defineProperty(a,c,{enumerable:!0,get:b[c]})}(c,{dispatchAppRouterAction:function(){return g},useActionQueue:function(){return h}});let d=a.r(3988)._(a.r(56541)),e=a.r(98931),f=null;function g(a){if(null===f)throw Object.defineProperty(Error("Internal Next.js error: Router action dispatched before initialization."),"__NEXT_ERROR_CODE",{value:"E668",enumerable:!1,configurable:!0});f(a)}function h(a){let[b,c]=d.default.useState(a.state);return f=b=>a.dispatch(b,c),(0,e.isThenable)(b)?(0,d.use)(b):b}("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},1308,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"callServer",{enumerable:!0,get:function(){return g}});let d=a.r(56541),e=a.r(5895),f=a.r(63365);async function g(a,b){return new Promise((c,g)=>{(0,d.startTransition)(()=>{(0,f.dispatchAppRouterAction)({type:e.ACTION_SERVER_ACTION,actionId:a,actionArgs:b,resolve:c,reject:g})})})}("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},2663,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"findSourceMapURL",{enumerable:!0,get:function(){return d}});let d=void 0;("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},98709,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),!function(a,b){for(var c in b)Object.defineProperty(a,c,{enumerable:!0,get:b[c]})}(c,{getFlightDataPartsFromPath:function(){return e},getNextFlightSegmentPath:function(){return f},normalizeFlightData:function(){return g},prepareFlightRouterStateForRequest:function(){return h}});let d=a.r(13195);function e(a){var b;let[c,d,e,f]=a.slice(-4),g=a.slice(0,-4);return{pathToSegment:g.slice(0,-1),segmentPath:g,segment:null!=(b=g[g.length-1])?b:"",tree:c,seedData:d,head:e,isHeadPartial:f,isRootRender:4===a.length}}function f(a){return a.slice(2)}function g(a){return"string"==typeof a?a:a.map(a=>e(a))}function h(a,b){return b?encodeURIComponent(JSON.stringify(a)):encodeURIComponent(JSON.stringify(function a(b){var c,e;let[f,g,h,i,j,k]=b,l="string"==typeof(c=f)&&c.startsWith(d.PAGE_SEGMENT_KEY+"?")?d.PAGE_SEGMENT_KEY:c,m={};for(let[b,c]of Object.entries(g))m[b]=a(c);let n=[l,m,null,(e=i)&&"refresh"!==e?i:null];return void 0!==j&&(n[4]=j),void 0!==k&&(n[5]=k),n}(a)))}("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},17882,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),!function(a,b){for(var c in b)Object.defineProperty(a,c,{enumerable:!0,get:b[c]})}(c,{getAppBuildId:function(){return f},setAppBuildId:function(){return e}});let d="";function e(a){d=a}function f(){return d}("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},64045,(a,b,c)=>{"use strict";function d(a){let b=5381;for(let c=0;c<a.length;c++)b=(b<<5)+b+a.charCodeAt(c)|0;return b>>>0}function e(a){return d(a).toString(36).slice(0,5)}Object.defineProperty(c,"__esModule",{value:!0}),!function(a,b){for(var c in b)Object.defineProperty(a,c,{enumerable:!0,get:b[c]})}(c,{djb2Hash:function(){return d},hexHash:function(){return e}})},28079,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"computeCacheBustingSearchParam",{enumerable:!0,get:function(){return e}});let d=a.r(64045);function e(a,b,c,e){return(void 0===a||"0"===a)&&void 0===b&&void 0===c&&void 0===e?"":(0,d.hexHash)([a||"0",b||"0",c||"0",e||"0"].join(","))}},35674,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),!function(a,b){for(var c in b)Object.defineProperty(a,c,{enumerable:!0,get:b[c]})}(c,{setCacheBustingSearchParam:function(){return f},setCacheBustingSearchParamWithHash:function(){return g}});let d=a.r(28079),e=a.r(93947),f=(a,b)=>{g(a,(0,d.computeCacheBustingSearchParam)(b[e.NEXT_ROUTER_PREFETCH_HEADER],b[e.NEXT_ROUTER_SEGMENT_PREFETCH_HEADER],b[e.NEXT_ROUTER_STATE_TREE_HEADER],b[e.NEXT_URL]))},g=(a,b)=>{let c=a.search,d=(c.startsWith("?")?c.slice(1):c).split("&").filter(a=>a&&!a.startsWith(""+e.NEXT_RSC_UNION_QUERY+"="));b.length>0?d.push(e.NEXT_RSC_UNION_QUERY+"="+b):d.push(""+e.NEXT_RSC_UNION_QUERY),a.search=d.length?"?"+d.join("&"):""};("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},97278,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),!function(a,b){for(var c in b)Object.defineProperty(a,c,{enumerable:!0,get:b[c]})}(c,{ROOT_SEGMENT_CACHE_KEY:function(){return f},ROOT_SEGMENT_REQUEST_KEY:function(){return e},appendSegmentCacheKeyPart:function(){return j},appendSegmentRequestKeyPart:function(){return h},convertSegmentPathToStaticExportFilename:function(){return m},createSegmentCacheKeyPart:function(){return i},createSegmentRequestKeyPart:function(){return g}});let d=a.r(13195),e="",f="";function g(a){if("string"==typeof a)return a.startsWith(d.PAGE_SEGMENT_KEY)?d.PAGE_SEGMENT_KEY:"/_not-found"===a?"_not-found":l(a);let b=a[0],c=a[2];return"$"+c+"$"+l(b)}function h(a,b,c){return a+"/"+("children"===b?c:"@"+l(b)+"/"+c)}function i(a,b){return"string"==typeof b?a:a+"$"+l(b[1])}function j(a,b,c){return a+"/"+("children"===b?c:"@"+l(b)+"/"+c)}let k=/^[a-zA-Z0-9\-_@]+$/;function l(a){return k.test(a)?a:"!"+btoa(a).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}function m(a){return"__next"+a.replace(/\//g,".")+".txt"}},31711,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),!function(a,b){for(var c in b)Object.defineProperty(a,c,{enumerable:!0,get:b[c]})}(c,{doesStaticSegmentAppearInURL:function(){return j},getCacheKeyForDynamicParam:function(){return k},getParamValueFromCacheKey:function(){return m},getRenderedPathname:function(){return h},getRenderedSearch:function(){return g},parseDynamicParamFromURLPart:function(){return i},urlToUrlWithoutFlightMarker:function(){return l}});let d=a.r(13195),e=a.r(97278),f=a.r(93947);function g(a){let b=a.headers.get(f.NEXT_REWRITTEN_QUERY_HEADER);return null!==b?""===b?"":"?"+b:l(new URL(a.url)).search}function h(a){let b=a.headers.get(f.NEXT_REWRITTEN_PATH_HEADER);return null!=b?b:l(new URL(a.url)).pathname}function i(a,b,c){switch(a){case"c":case"ci":return c<b.length?b.slice(c).map(a=>encodeURIComponent(a)):[];case"oc":return c<b.length?b.slice(c).map(a=>encodeURIComponent(a)):null;case"d":case"di":if(c>=b.length)return"";return encodeURIComponent(b[c]);default:return""}}function j(a){return!(a===e.ROOT_SEGMENT_REQUEST_KEY||a.startsWith(d.PAGE_SEGMENT_KEY)||"("===a[0]&&a.endsWith(")"))&&a!==d.DEFAULT_SEGMENT_KEY&&"/_not-found"!==a}function k(a,b){return"string"==typeof a?(0,d.addSearchParamsIfPageSegment)(a,Object.fromEntries(new URLSearchParams(b))):null===a?"":a.join("/")}function l(a){let b=new URL(a);return b.searchParams.delete(f.NEXT_RSC_UNION_QUERY),b}function m(a,b){return"c"===b||"oc"===b?a.split("/"):a}("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},43465,(a,b,c)=>{"use strict";let d;Object.defineProperty(c,"__esModule",{value:!0}),!function(a,b){for(var c in b)Object.defineProperty(a,c,{enumerable:!0,get:b[c]})}(c,{createFetch:function(){return r},createFromNextReadableStream:function(){return s},fetchServerResponse:function(){return q}});let e=a.r(76730),f=a.r(93947),g=a.r(1308),h=a.r(2663),i=a.r(5895),j=a.r(98709),k=a.r(17882),l=a.r(35674),m=a.r(31711),n=e.createFromReadableStream;function o(a){return{flightData:(0,m.urlToUrlWithoutFlightMarker)(new URL(a,location.origin)).toString(),canonicalUrl:void 0,couldBeIntercepted:!1,prerendered:!1,postponed:!1,staleTime:-1}}let p=new AbortController;async function q(a,b){let{flightRouterState:c,nextUrl:d,prefetchKind:e}=b,g={[f.RSC_HEADER]:"1",[f.NEXT_ROUTER_STATE_TREE_HEADER]:(0,j.prepareFlightRouterStateForRequest)(c,b.isHmrRefresh)};e===i.PrefetchKind.AUTO&&(g[f.NEXT_ROUTER_PREFETCH_HEADER]="1"),d&&(g[f.NEXT_URL]=d);try{var h;let b=e?e===i.PrefetchKind.TEMPORARY?"high":"low":"auto",c=await r(a,g,b,p.signal),d=(0,m.urlToUrlWithoutFlightMarker)(new URL(c.url)),l=c.redirected?d:void 0,n=c.headers.get("content-type")||"",q=!!(null==(h=c.headers.get("vary"))?void 0:h.includes(f.NEXT_URL)),t=!!c.headers.get(f.NEXT_DID_POSTPONE_HEADER),u=c.headers.get(f.NEXT_ROUTER_STALE_TIME_HEADER),v=null!==u?1e3*parseInt(u,10):-1;if(!n.startsWith(f.RSC_CONTENT_TYPE_HEADER)||!c.ok||!c.body)return a.hash&&(d.hash=a.hash),o(d.toString());let w=t?function(a){let b=a.getReader();return new ReadableStream({async pull(a){for(;;){let{done:c,value:d}=await b.read();if(!c){a.enqueue(d);continue}return}}})}(c.body):c.body,x=await s(w,c.headers);if((0,k.getAppBuildId)()!==x.b)return o(c.url);return{flightData:(0,j.normalizeFlightData)(x.f),canonicalUrl:l,couldBeIntercepted:q,prerendered:x.S,postponed:t,staleTime:v}}catch(b){return p.signal.aborted||console.error("Failed to fetch RSC payload for "+a+". Falling back to browser navigation.",b),{flightData:a.toString(),canonicalUrl:void 0,couldBeIntercepted:!1,prerendered:!1,postponed:!1,staleTime:-1}}}async function r(a,b,c,d){let e={credentials:"same-origin",headers:b,priority:c||void 0,signal:d},g=new URL(a);(0,l.setCacheBustingSearchParam)(g,b);let h=await fetch(g,e),i=h.redirected;for(let a=0;a<20&&h.redirected;a++){let a=new URL(h.url,g);if(a.origin!==g.origin||a.searchParams.get(f.NEXT_RSC_UNION_QUERY)===g.searchParams.get(f.NEXT_RSC_UNION_QUERY))break;g=new URL(a),(0,l.setCacheBustingSearchParam)(g,b),h=await fetch(g,e),i=!0}let j=new URL(h.url,g);return j.searchParams.delete(f.NEXT_RSC_UNION_QUERY),{url:j.href,redirected:i,ok:h.ok,headers:h.headers,body:h.body,status:h.status}}function s(a,b){return n(a,{callServer:g.callServer,findSourceMapURL:h.findSourceMapURL,debugChannel:d&&d(b)})}("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},97597,(a,b,c)=>{"use strict";function d(a,b){return void 0===b&&(b=!0),a.pathname+a.search+(b?a.hash:"")}Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"createHrefFromUrl",{enumerable:!0,get:function(){return d}}),("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},47841,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"createRouterCacheKey",{enumerable:!0,get:function(){return e}});let d=a.r(13195);function e(a,b){return(void 0===b&&(b=!1),Array.isArray(a))?a[0]+"|"+a[1]+"|"+a[2]:b&&a.startsWith(d.PAGE_SEGMENT_KEY)?d.PAGE_SEGMENT_KEY:a}("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},1892,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"invalidateCacheBelowFlightSegmentPath",{enumerable:!0,get:function(){return function a(b,c,f){let g=f.length<=2,[h,i]=f,j=(0,d.createRouterCacheKey)(i),k=c.parallelRoutes.get(h);if(!k)return;let l=b.parallelRoutes.get(h);if(l&&l!==k||(l=new Map(k),b.parallelRoutes.set(h,l)),g)return void l.delete(j);let m=k.get(j),n=l.get(j);n&&m&&(n===m&&(n={lazyData:n.lazyData,rsc:n.rsc,prefetchRsc:n.prefetchRsc,head:n.head,prefetchHead:n.prefetchHead,parallelRoutes:new Map(n.parallelRoutes)},l.set(j,n)),a(n,m,(0,e.getNextFlightSegmentPath)(f)))}}});let d=a.r(47841),e=a.r(98709);("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},89975,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"matchSegment",{enumerable:!0,get:function(){return d}});let d=(a,b)=>"string"==typeof a?"string"==typeof b&&a===b:"string"!=typeof b&&a[0]===b[0]&&a[1]===b[1];("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},20221,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"fillLazyItemsTillLeafWithHead",{enumerable:!0,get:function(){return function a(b,c,f,g,h,i,j){if(0===Object.keys(g[1]).length){c.head=i;return}for(let k in g[1]){let l,m=g[1][k],n=m[0],o=(0,d.createRouterCacheKey)(n),p=null!==h&&void 0!==h[2][k]?h[2][k]:null;if(f){let d=f.parallelRoutes.get(k);if(d){let f,g=(null==j?void 0:j.kind)==="auto"&&j.status===e.PrefetchCacheEntryStatus.reusable,h=new Map(d),l=h.get(o);f=null!==p?{lazyData:null,rsc:p[1],prefetchRsc:null,head:null,prefetchHead:null,loading:p[3],parallelRoutes:new Map(null==l?void 0:l.parallelRoutes),navigatedAt:b}:g&&l?{lazyData:l.lazyData,rsc:l.rsc,prefetchRsc:l.prefetchRsc,head:l.head,prefetchHead:l.prefetchHead,parallelRoutes:new Map(l.parallelRoutes),loading:l.loading}:{lazyData:null,rsc:null,prefetchRsc:null,head:null,prefetchHead:null,parallelRoutes:new Map(null==l?void 0:l.parallelRoutes),loading:null,navigatedAt:b},h.set(o,f),a(b,f,l,m,p||null,i,j),c.parallelRoutes.set(k,h);continue}}if(null!==p){let a=p[1],c=p[3];l={lazyData:null,rsc:a,prefetchRsc:null,head:null,prefetchHead:null,parallelRoutes:new Map,loading:c,navigatedAt:b}}else l={lazyData:null,rsc:null,prefetchRsc:null,head:null,prefetchHead:null,parallelRoutes:new Map,loading:null,navigatedAt:b};let q=c.parallelRoutes.get(k);q?q.set(o,l):c.parallelRoutes.set(k,new Map([[o,l]])),a(b,l,void 0,m,p,i,j)}}}});let d=a.r(47841),e=a.r(5895);("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},68157,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"invalidateCacheByRouterState",{enumerable:!0,get:function(){return e}});let d=a.r(47841);function e(a,b,c){for(let e in c[1]){let f=c[1][e][0],g=(0,d.createRouterCacheKey)(f),h=b.parallelRoutes.get(e);if(h){let b=new Map(h);b.delete(g),a.parallelRoutes.set(e,b)}}}("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},61656,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),!function(a,b){for(var c in b)Object.defineProperty(a,c,{enumerable:!0,get:b[c]})}(c,{fillCacheWithNewSubTreeData:function(){return i},fillCacheWithNewSubTreeDataButOnlyLoading:function(){return j}});let d=a.r(68157),e=a.r(20221),f=a.r(47841),g=a.r(13195);function h(a,b,c,h,i,j){let{segmentPath:k,seedData:l,tree:m,head:n}=h,o=b,p=c;for(let b=0;b<k.length;b+=2){let c=k[b],h=k[b+1],q=b===k.length-2,r=(0,f.createRouterCacheKey)(h),s=p.parallelRoutes.get(c);if(!s)continue;let t=o.parallelRoutes.get(c);t&&t!==s||(t=new Map(s),o.parallelRoutes.set(c,t));let u=s.get(r),v=t.get(r);if(q){if(l&&(!v||!v.lazyData||v===u)){let b=l[0],c=l[1],f=l[3];v={lazyData:null,rsc:j||b!==g.PAGE_SEGMENT_KEY?c:null,prefetchRsc:null,head:null,prefetchHead:null,loading:f,parallelRoutes:j&&u?new Map(u.parallelRoutes):new Map,navigatedAt:a},u&&j&&(0,d.invalidateCacheByRouterState)(v,u,m),j&&(0,e.fillLazyItemsTillLeafWithHead)(a,v,u,m,l,n,i),t.set(r,v)}continue}v&&u&&(v===u&&(v={lazyData:v.lazyData,rsc:v.rsc,prefetchRsc:v.prefetchRsc,head:v.head,prefetchHead:v.prefetchHead,parallelRoutes:new Map(v.parallelRoutes),loading:v.loading},t.set(r,v)),o=v,p=u)}}function i(a,b,c,d,e){h(a,b,c,d,e,!0)}function j(a,b,c,d,e){h(a,b,c,d,e,!1)}("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},49619,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"applyFlightData",{enumerable:!0,get:function(){return f}});let d=a.r(20221),e=a.r(61656);function f(a,b,c,f,g){let{tree:h,seedData:i,head:j,isRootRender:k}=f;if(null===i)return!1;if(k){let e=i[1];c.loading=i[3],c.rsc=e,c.prefetchRsc=null,(0,d.fillLazyItemsTillLeafWithHead)(a,c,b,h,i,j,g)}else c.rsc=b.rsc,c.prefetchRsc=b.prefetchRsc,c.parallelRoutes=new Map(b.parallelRoutes),c.loading=b.loading,(0,e.fillCacheWithNewSubTreeData)(a,c,b,f,g);return!0}("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},14941,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),!function(a,b){for(var c in b)Object.defineProperty(a,c,{enumerable:!0,get:b[c]})}(c,{addRefreshMarkerToActiveParallelSegments:function(){return function a(b,c){let[d,e,,g]=b;for(let h in d.includes(f.PAGE_SEGMENT_KEY)&&"refresh"!==g&&(b[2]=c,b[3]="refresh"),e)a(e[h],c)}},refreshInactiveParallelSegments:function(){return g}});let d=a.r(49619),e=a.r(43465),f=a.r(13195);async function g(a){let b=new Set;await h({...a,rootTree:a.updatedTree,fetchedSegments:b})}async function h(a){let{navigatedAt:b,state:c,updatedTree:f,updatedCache:g,includeNextUrl:i,fetchedSegments:j,rootTree:k=f,canonicalUrl:l}=a,[,m,n,o]=f,p=[];if(n&&n!==l&&"refresh"===o&&!j.has(n)){j.add(n);let a=(0,e.fetchServerResponse)(new URL(n,location.origin),{flightRouterState:[k[0],k[1],k[2],"refetch"],nextUrl:i?c.nextUrl:null}).then(a=>{let{flightData:c}=a;if("string"!=typeof c)for(let a of c)(0,d.applyFlightData)(b,g,g,a)});p.push(a)}for(let a in m){let d=h({navigatedAt:b,state:c,updatedTree:m[a],updatedCache:g,includeNextUrl:i,fetchedSegments:j,rootTree:k,canonicalUrl:l});p.push(d)}await Promise.all(p)}("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},22575,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"applyRouterStatePatchToTree",{enumerable:!0,get:function(){return function a(b,c,d,i){let j,[k,l,m,n,o]=c;if(1===b.length){let a=h(c,d);return(0,g.addRefreshMarkerToActiveParallelSegments)(a,i),a}let[p,q]=b;if(!(0,f.matchSegment)(p,k))return null;if(2===b.length)j=h(l[q],d);else if(null===(j=a((0,e.getNextFlightSegmentPath)(b),l[q],d,i)))return null;let r=[b[0],{...l,[q]:j},m,n];return o&&(r[4]=!0),(0,g.addRefreshMarkerToActiveParallelSegments)(r,i),r}}});let d=a.r(13195),e=a.r(98709),f=a.r(89975),g=a.r(14941);function h(a,b){let[c,e]=a,[g,i]=b;if(g===d.DEFAULT_SEGMENT_KEY&&c!==d.DEFAULT_SEGMENT_KEY)return a;if((0,f.matchSegment)(c,g)){let b={};for(let a in e)void 0!==i[a]?b[a]=h(e[a],i[a]):b[a]=e[a];for(let a in i)b[a]||(b[a]=i[a]);let d=[c,b];return a[2]&&(d[2]=a[2]),a[3]&&(d[3]=a[3]),a[4]&&(d[4]=a[4]),d}return b}("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},80591,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"shouldHardNavigate",{enumerable:!0,get:function(){return function a(b,c){let[f,g]=c,[h,i]=b;return(0,e.matchSegment)(h,f)?!(b.length<=2)&&a((0,d.getNextFlightSegmentPath)(b),g[i]):!!Array.isArray(h)}}});let d=a.r(98709),e=a.r(89975);("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},98637,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"isNavigatingToNewRootLayout",{enumerable:!0,get:function(){return function a(b,c){let d=b[0],e=c[0];if(Array.isArray(d)&&Array.isArray(e)){if(d[0]!==e[0]||d[2]!==e[2])return!0}else if(d!==e)return!0;if(b[4])return!c[4];if(c[4])return!0;let f=Object.values(b[1])[0],g=Object.values(c[1])[0];return!f||!g||a(f,g)}}}),("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},24619,(a,b,c)=>{"use strict";function d(a){return a.startsWith("/")?a:"/"+a}Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"ensureLeadingSlash",{enumerable:!0,get:function(){return d}})},6377,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),!function(a,b){for(var c in b)Object.defineProperty(a,c,{enumerable:!0,get:b[c]})}(c,{normalizeAppPath:function(){return f},normalizeRscURL:function(){return g}});let d=a.r(24619),e=a.r(13195);function f(a){return(0,d.ensureLeadingSlash)(a.split("/").reduce((a,b,c,d)=>!b||(0,e.isGroupSegment)(b)||"@"===b[0]||("page"===b||"route"===b)&&c===d.length-1?a:a+"/"+b,""))}function g(a){return a.replace(/\.rsc($|\?)/,"$1")}},77762,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),!function(a,b){for(var c in b)Object.defineProperty(a,c,{enumerable:!0,get:b[c]})}(c,{INTERCEPTION_ROUTE_MARKERS:function(){return e},extractInterceptionRouteInformation:function(){return g},isInterceptionRouteAppPath:function(){return f}});let d=a.r(6377),e=["(..)(..)","(.)","(..)","(...)"];function f(a){return void 0!==a.split("/").find(a=>e.find(b=>a.startsWith(b)))}function g(a){let b,c,f;for(let d of a.split("/"))if(c=e.find(a=>d.startsWith(a))){[b,f]=a.split(c,2);break}if(!b||!c||!f)throw Object.defineProperty(Error("Invalid interception route: "+a+". Must be in the format /<intercepting route>/(..|...|..)(..)/<intercepted route>"),"__NEXT_ERROR_CODE",{value:"E269",enumerable:!1,configurable:!0});switch(b=(0,d.normalizeAppPath)(b),c){case"(.)":f="/"===b?"/"+f:b+"/"+f;break;case"(..)":if("/"===b)throw Object.defineProperty(Error("Invalid interception route: "+a+". Cannot use (..) marker at the root level, use (.) instead."),"__NEXT_ERROR_CODE",{value:"E207",enumerable:!1,configurable:!0});f=b.split("/").slice(0,-1).concat(f).join("/");break;case"(...)":f="/"+f;break;case"(..)(..)":let g=b.split("/");if(g.length<=2)throw Object.defineProperty(Error("Invalid interception route: "+a+". Cannot use (..)(..) marker at the root level or one level up."),"__NEXT_ERROR_CODE",{value:"E486",enumerable:!1,configurable:!0});f=g.slice(0,-2).concat(f).join("/");break;default:throw Object.defineProperty(Error("Invariant: unexpected marker"),"__NEXT_ERROR_CODE",{value:"E112",enumerable:!1,configurable:!0})}return{interceptingRoute:b,interceptedRoute:f}}},87110,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),!function(a,b){for(var c in b)Object.defineProperty(a,c,{enumerable:!0,get:b[c]})}(c,{computeChangedPath:function(){return j},extractPathFromFlightRouterState:function(){return i},getSelectedParams:function(){return function a(b,c){for(let d of(void 0===c&&(c={}),Object.values(b[1]))){let b=d[0],f=Array.isArray(b),g=f?b[1]:b;!g||g.startsWith(e.PAGE_SEGMENT_KEY)||(f&&("c"===b[2]||"oc"===b[2])?c[b[0]]=b[1].split("/"):f&&(c[b[0]]=b[1]),c=a(d,c))}return c}}});let d=a.r(77762),e=a.r(13195),f=a.r(89975),g=a=>"string"==typeof a?"children"===a?"":a:a[1];function h(a){return a.reduce((a,b)=>{let c;return""===(b="/"===(c=b)[0]?c.slice(1):c)||(0,e.isGroupSegment)(b)?a:a+"/"+b},"")||"/"}function i(a){var b;let c=Array.isArray(a[0])?a[0][1]:a[0];if(c===e.DEFAULT_SEGMENT_KEY||d.INTERCEPTION_ROUTE_MARKERS.some(a=>c.startsWith(a)))return;if(c.startsWith(e.PAGE_SEGMENT_KEY))return"";let f=[g(c)],j=null!=(b=a[1])?b:{},k=j.children?i(j.children):void 0;if(void 0!==k)f.push(k);else for(let[a,b]of Object.entries(j)){if("children"===a)continue;let c=i(b);void 0!==c&&f.push(c)}return h(f)}function j(a,b){let c=function a(b,c){let[e,h]=b,[j,k]=c,l=g(e),m=g(j);if(d.INTERCEPTION_ROUTE_MARKERS.some(a=>l.startsWith(a)||m.startsWith(a)))return"";if(!(0,f.matchSegment)(e,j)){var n;return null!=(n=i(c))?n:""}for(let b in h)if(k[b]){let c=a(h[b],k[b]);if(null!==c)return g(j)+"/"+c}return null}(a,b);return null==c||"/"===c?c:h(c.split("/"))}("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},47090,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"handleMutable",{enumerable:!0,get:function(){return f}});let d=a.r(87110);function e(a){return void 0!==a}function f(a,b){var c,f;let g=null==(c=b.shouldScroll)||c,h=a.nextUrl;if(e(b.patchedTree)){let c=(0,d.computeChangedPath)(a.tree,b.patchedTree);c?h=c:h||(h=a.canonicalUrl)}return{canonicalUrl:e(b.canonicalUrl)?b.canonicalUrl===a.canonicalUrl?a.canonicalUrl:b.canonicalUrl:a.canonicalUrl,pushRef:{pendingPush:e(b.pendingPush)?b.pendingPush:a.pushRef.pendingPush,mpaNavigation:e(b.mpaNavigation)?b.mpaNavigation:a.pushRef.mpaNavigation,preserveCustomHistoryState:e(b.preserveCustomHistoryState)?b.preserveCustomHistoryState:a.pushRef.preserveCustomHistoryState},focusAndScrollRef:{apply:!!g&&(!!e(null==b?void 0:b.scrollableSegments)||a.focusAndScrollRef.apply),onlyHashChange:b.onlyHashChange||!1,hashFragment:g?b.hashFragment&&""!==b.hashFragment?decodeURIComponent(b.hashFragment.slice(1)):a.focusAndScrollRef.hashFragment:null,segmentPaths:g?null!=(f=null==b?void 0:b.scrollableSegments)?f:a.focusAndScrollRef.segmentPaths:[]},cache:b.cache?b.cache:a.cache,prefetchCache:b.prefetchCache?b.prefetchCache:a.prefetchCache,tree:e(b.patchedTree)?b.patchedTree:a.tree,nextUrl:h}}("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},39542,(a,b,c)=>{"use strict";c._=function(a,b){if(!Object.prototype.hasOwnProperty.call(a,b))throw TypeError("attempted to use private field on non-instance");return a}},9454,(a,b,c)=>{"use strict";var d=0;c._=function(a){return"__private_"+d+++"_"+a}},58047,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"PromiseQueue",{enumerable:!0,get:function(){return j}});let d=a.r(39542),e=a.r(9454);var f=e._("_maxConcurrency"),g=e._("_runningCount"),h=e._("_queue"),i=e._("_processNext");class j{enqueue(a){let b,c,e=new Promise((a,d)=>{b=a,c=d}),f=async()=>{try{d._(this,g)[g]++;let c=await a();b(c)}catch(a){c(a)}finally{d._(this,g)[g]--,d._(this,i)[i]()}};return d._(this,h)[h].push({promiseFn:e,task:f}),d._(this,i)[i](),e}bump(a){let b=d._(this,h)[h].findIndex(b=>b.promiseFn===a);if(b>-1){let a=d._(this,h)[h].splice(b,1)[0];d._(this,h)[h].unshift(a),d._(this,i)[i](!0)}}constructor(a=5){Object.defineProperty(this,i,{value:k}),Object.defineProperty(this,f,{writable:!0,value:void 0}),Object.defineProperty(this,g,{writable:!0,value:void 0}),Object.defineProperty(this,h,{writable:!0,value:void 0}),d._(this,f)[f]=a,d._(this,g)[g]=0,d._(this,h)[h]=[]}}function k(a){if(void 0===a&&(a=!1),(d._(this,g)[g]<d._(this,f)[f]||a)&&d._(this,h)[h].length>0){var b;null==(b=d._(this,h)[h].shift())||b.task()}}("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},93295,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),!function(a,b){for(var c in b)Object.defineProperty(a,c,{enumerable:!0,get:b[c]})}(c,{DYNAMIC_STALETIME_MS:function(){return m},STATIC_STALETIME_MS:function(){return n},createSeededPrefetchCacheEntry:function(){return j},getOrCreatePrefetchCacheEntry:function(){return i},prunePrefetchCache:function(){return l}});let d=a.r(43465),e=a.r(5895),f=a.r(94304);function g(a,b,c){let d=a.pathname;return(b&&(d+=a.search),c)?""+c+"%"+d:d}function h(a,b,c){return g(a,b===e.PrefetchKind.FULL,c)}function i(a){let{url:b,nextUrl:c,tree:d,prefetchCache:f,kind:h,allowAliasing:i=!0}=a,j=function(a,b,c,d,f){for(let h of(void 0===b&&(b=e.PrefetchKind.TEMPORARY),[c,null])){let c=g(a,!0,h),i=g(a,!1,h),j=a.search?c:i,k=d.get(j);if(k&&f){if(k.url.pathname===a.pathname&&k.url.search!==a.search)return{...k,aliased:!0};return k}let l=d.get(i);if(f&&a.search&&b!==e.PrefetchKind.FULL&&l&&!l.key.includes("%"))return{...l,aliased:!0}}if(b!==e.PrefetchKind.FULL&&f){for(let b of d.values())if(b.url.pathname===a.pathname&&!b.key.includes("%"))return{...b,aliased:!0}}}(b,h,c,f,i);return j?(j.status=o(j),j.kind!==e.PrefetchKind.FULL&&h===e.PrefetchKind.FULL&&j.data.then(a=>{if(!(Array.isArray(a.flightData)&&a.flightData.some(a=>a.isRootRender&&null!==a.seedData)))return k({tree:d,url:b,nextUrl:c,prefetchCache:f,kind:null!=h?h:e.PrefetchKind.TEMPORARY})}),h&&j.kind===e.PrefetchKind.TEMPORARY&&(j.kind=h),j):k({tree:d,url:b,nextUrl:c,prefetchCache:f,kind:h||e.PrefetchKind.TEMPORARY})}function j(a){let{nextUrl:b,tree:c,prefetchCache:d,url:f,data:g,kind:i}=a,j=g.couldBeIntercepted?h(f,i,b):h(f,i),k={treeAtTimeOfPrefetch:c,data:Promise.resolve(g),kind:i,prefetchTime:Date.now(),lastUsedTime:Date.now(),staleTime:g.staleTime,key:j,status:e.PrefetchCacheEntryStatus.fresh,url:f};return d.set(j,k),k}function k(a){let{url:b,kind:c,tree:g,nextUrl:i,prefetchCache:j}=a,k=h(b,c),l=f.prefetchQueue.enqueue(()=>(0,d.fetchServerResponse)(b,{flightRouterState:g,nextUrl:i,prefetchKind:c}).then(a=>{let c;if(a.couldBeIntercepted&&(c=function(a){let{url:b,nextUrl:c,prefetchCache:d,existingCacheKey:e}=a,f=d.get(e);if(!f)return;let g=h(b,f.kind,c);return d.set(g,{...f,key:g}),d.delete(e),g}({url:b,existingCacheKey:k,nextUrl:i,prefetchCache:j})),a.prerendered){let b=j.get(null!=c?c:k);b&&(b.kind=e.PrefetchKind.FULL,-1!==a.staleTime&&(b.staleTime=a.staleTime))}return a})),m={treeAtTimeOfPrefetch:g,data:l,kind:c,prefetchTime:Date.now(),lastUsedTime:null,staleTime:-1,key:k,status:e.PrefetchCacheEntryStatus.fresh,url:b};return j.set(k,m),m}function l(a){for(let[b,c]of a)o(c)===e.PrefetchCacheEntryStatus.expired&&a.delete(b)}let m=1e3*Number("0"),n=1e3*Number("300");function o(a){let{kind:b,prefetchTime:c,lastUsedTime:d}=a;return Date.now()<(null!=d?d:c)+m?d?e.PrefetchCacheEntryStatus.reusable:e.PrefetchCacheEntryStatus.fresh:b===e.PrefetchKind.AUTO&&Date.now()<c+n?e.PrefetchCacheEntryStatus.stale:b===e.PrefetchKind.FULL&&Date.now()<c+n?e.PrefetchCacheEntryStatus.reusable:e.PrefetchCacheEntryStatus.expired}("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},94304,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),!function(a,b){for(var c in b)Object.defineProperty(a,c,{enumerable:!0,get:b[c]})}(c,{prefetchQueue:function(){return f},prefetchReducer:function(){return g}});let d=a.r(58047),e=a.r(93295),f=new d.PromiseQueue(5),g=function(a,b){(0,e.prunePrefetchCache)(a.prefetchCache);let{url:c}=b;return(0,e.getOrCreatePrefetchCacheEntry)({url:c,nextUrl:a.nextUrl,prefetchCache:a.prefetchCache,kind:b.kind,tree:a.tree,allowAliasing:!0}),a};("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},34858,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"HTML_LIMITED_BOT_UA_RE",{enumerable:!0,get:function(){return d}});let d=/[\w-]+-Google|Google-[\w-]+|Chrome-Lighthouse|Slurp|DuckDuckBot|baiduspider|yandex|sogou|bitlybot|tumblr|vkShare|quora link preview|redditbot|ia_archiver|Bingbot|BingPreview|applebot|facebookexternalhit|facebookcatalog|Twitterbot|LinkedInBot|Slackbot|Discordbot|WhatsApp|SkypeUriPreview|Yeti|googleweblight/i},22196,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),!function(a,b){for(var c in b)Object.defineProperty(a,c,{enumerable:!0,get:b[c]})}(c,{HTML_LIMITED_BOT_UA_RE:function(){return d.HTML_LIMITED_BOT_UA_RE},HTML_LIMITED_BOT_UA_RE_STRING:function(){return f},getBotType:function(){return i},isBot:function(){return h}});let d=a.r(34858),e=/Googlebot(?!-)|Googlebot$/i,f=d.HTML_LIMITED_BOT_UA_RE.source;function g(a){return d.HTML_LIMITED_BOT_UA_RE.test(a)}function h(a){return e.test(a)||g(a)}function i(a){return e.test(a)?"dom":g(a)?"html":void 0}},88213,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"AppRouterAnnouncer",{enumerable:!0,get:function(){return g}});let d=a.r(56541),e=a.r(54770),f="next-route-announcer";function g(a){let{tree:b}=a,[c,g]=(0,d.useState)(null);(0,d.useEffect)(()=>(g(function(){var a;let b=document.getElementsByName(f)[0];if(null==b||null==(a=b.shadowRoot)?void 0:a.childNodes[0])return b.shadowRoot.childNodes[0];{let a=document.createElement(f);a.style.cssText="position:absolute";let b=document.createElement("div");return b.ariaLive="assertive",b.id="__next-route-announcer__",b.role="alert",b.style.cssText="position:absolute;border:0;height:1px;margin:-1px;padding:0;width:1px;clip:rect(0 0 0 0);overflow:hidden;white-space:nowrap;word-wrap:normal",a.attachShadow({mode:"open"}).appendChild(b),document.body.appendChild(a),b}}()),()=>{let a=document.getElementsByTagName(f)[0];(null==a?void 0:a.isConnected)&&document.body.removeChild(a)}),[]);let[h,i]=(0,d.useState)(""),j=(0,d.useRef)(void 0);return(0,d.useEffect)(()=>{let a="";if(document.title)a=document.title;else{let b=document.querySelector("h1");b&&(a=b.innerText||b.textContent||"")}void 0!==j.current&&j.current!==a&&i(a),j.current=a},[b]),c?(0,e.createPortal)(h,c):null}("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},52338,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),!function(a,b){for(var c in b)Object.defineProperty(a,c,{enumerable:!0,get:b[c]})}(c,{RedirectBoundary:function(){return l},RedirectErrorBoundary:function(){return k}});let d=a.r(3988),e=a.r(66755),f=d._(a.r(56541)),g=a.r(56532),h=a.r(44262),i=a.r(47611);function j(a){let{redirect:b,reset:c,redirectType:d}=a,e=(0,g.useRouter)();return(0,f.useEffect)(()=>{f.default.startTransition(()=>{d===i.RedirectType.push?e.push(b,{}):e.replace(b,{}),c()})},[b,d,c,e]),null}class k extends f.default.Component{static getDerivedStateFromError(a){if((0,i.isRedirectError)(a))return{redirect:(0,h.getURLFromRedirectError)(a),redirectType:(0,h.getRedirectTypeFromError)(a)};throw a}render(){let{redirect:a,redirectType:b}=this.state;return null!==a&&null!==b?(0,e.jsx)(j,{redirect:a,redirectType:b,reset:()=>this.setState({redirect:null})}):this.props.children}constructor(a){super(a),this.state={redirect:null,redirectType:null}}}function l(a){let{children:b}=a,c=(0,g.useRouter)();return(0,e.jsx)(k,{router:c,children:b})}("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},81409,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"findHeadInCache",{enumerable:!0,get:function(){return f}});let d=a.r(13195),e=a.r(47841);function f(a,b){return function a(b,c,f,g){if(0===Object.keys(c).length)return[b,f,g];let h=Object.keys(c).filter(a=>"children"!==a);for(let g of("children"in c&&h.unshift("children"),h)){let[h,i]=c[g];if(h===d.DEFAULT_SEGMENT_KEY)continue;let j=b.parallelRoutes.get(g);if(!j)continue;let k=(0,e.createRouterCacheKey)(h),l=(0,e.createRouterCacheKey)(h,!0),m=j.get(k);if(!m)continue;let n=a(m,i,f+"/"+k,f+"/"+l);if(n)return n}return null}(a,b,"","")}("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},43950,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"unresolvedThenable",{enumerable:!0,get:function(){return d}});let d={then:()=>{}};("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},75739,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"pathHasPrefix",{enumerable:!0,get:function(){return e}});let d=a.r(74702);function e(a,b){if("string"!=typeof a)return!1;let{pathname:c}=(0,d.parsePath)(a);return c===b||c.startsWith(b+"/")}},97275,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"hasBasePath",{enumerable:!0,get:function(){return e}});let d=a.r(75739);function e(a){return(0,d.pathHasPrefix)(a,"")}("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},45676,(a,b,c)=>{"use strict";function d(a){return a}Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"removeBasePath",{enumerable:!0,get:function(){return d}}),a.r(97275),("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},33999,(a,b,c)=>{"use strict";function d(a){return!1}function e(){}Object.defineProperty(c,"__esModule",{value:!0}),!function(a,b){for(var c in b)Object.defineProperty(a,c,{enumerable:!0,get:b[c]})}(c,{handleHardNavError:function(){return d},useNavFailureHandler:function(){return e}}),a.r(56541),a.r(97597),("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},32941,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),!function(a,b){for(var c in b)Object.defineProperty(a,c,{enumerable:!0,get:b[c]})}(c,{GracefulDegradeBoundary:function(){return f},default:function(){return g}});let d=a.r(66755),e=a.r(56541);class f extends e.Component{static getDerivedStateFromError(a){return{hasError:!0}}componentDidMount(){let a=this.htmlRef.current;this.state.hasError&&a&&Object.entries(this.htmlAttributes).forEach(b=>{let[c,d]=b;a.setAttribute(c,d)})}render(){let{hasError:a}=this.state;return a?(0,d.jsx)("html",{ref:this.htmlRef,suppressHydrationWarning:!0,dangerouslySetInnerHTML:{__html:this.rootHtml}}):this.props.children}constructor(a){super(a),this.state={hasError:!1},this.rootHtml="",this.htmlAttributes={},this.htmlRef=(0,e.createRef)()}}let g=f;("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},53686,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"useUntrackedPathname",{enumerable:!0,get:function(){return f}});let d=a.r(56541),e=a.r(8054);function f(){return!function(){{let{workUnitAsyncStorage:b}=a.r(32319),c=b.getStore();if(!c)return!1;switch(c.type){case"prerender":case"prerender-client":case"prerender-ppr":let d=c.fallbackRouteParams;return!!d&&d.size>0}return!1}}()?(0,d.useContext)(e.PathnameContext):null}("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},53015,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),!function(a,b){for(var c in b)Object.defineProperty(a,c,{enumerable:!0,get:b[c]})}(c,{ErrorBoundary:function(){return k},ErrorBoundaryHandler:function(){return j}});let d=a.r(63652),e=a.r(66755),f=d._(a.r(56541)),g=a.r(53686),h=a.r(59173);a.r(33999);let i=a.r(62889);a.r(22196);class j extends f.default.Component{static getDerivedStateFromError(a){if((0,h.isNextRouterError)(a))throw a;return{error:a}}static getDerivedStateFromProps(a,b){let{error:c}=b;return a.pathname!==b.previousPathname&&b.error?{error:null,previousPathname:a.pathname}:{error:b.error,previousPathname:a.pathname}}render(){return this.state.error&&1?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)(i.HandleISRError,{error:this.state.error}),this.props.errorStyles,this.props.errorScripts,(0,e.jsx)(this.props.errorComponent,{error:this.state.error,reset:this.reset})]}):this.props.children}constructor(a){super(a),this.reset=()=>{this.setState({error:null})},this.state={error:null,previousPathname:this.props.pathname}}}function k(a){let{errorComponent:b,errorStyles:c,errorScripts:d,children:f}=a,h=(0,g.useUntrackedPathname)();return b?(0,e.jsx)(j,{pathname:h,errorComponent:b,errorStyles:c,errorScripts:d,children:f}):(0,e.jsx)(e.Fragment,{children:f})}("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},8150,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"default",{enumerable:!0,get:function(){return f}}),a.r(63652);let d=a.r(66755);a.r(56541),a.r(32941);let e=a.r(53015);function f(a){let{children:b,errorComponent:c,errorStyles:f,errorScripts:g}=a;return(0,d.jsx)(e.ErrorBoundary,{errorComponent:c,errorStyles:f,errorScripts:g,children:b})}a.r(22196),("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},65146,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),!function(a,b){for(var c in b)Object.defineProperty(a,c,{enumerable:!0,get:b[c]})}(c,{MetadataBoundary:function(){return f},OutletBoundary:function(){return h},RootLayoutBoundary:function(){return i},ViewportBoundary:function(){return g}});let d=a.r(15875),e={[d.METADATA_BOUNDARY_NAME]:function({children:a}){return a},[d.VIEWPORT_BOUNDARY_NAME]:function({children:a}){return a},[d.OUTLET_BOUNDARY_NAME]:function({children:a}){return a},[d.ROOT_LAYOUT_BOUNDARY_NAME]:function({children:a}){return a}},f=e[d.METADATA_BOUNDARY_NAME.slice(0)],g=e[d.VIEWPORT_BOUNDARY_NAME.slice(0)],h=e[d.OUTLET_BOUNDARY_NAME.slice(0)],i=e[d.ROOT_LAYOUT_BOUNDARY_NAME.slice(0)]},18370,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),!function(a,b){for(var c in b)Object.defineProperty(a,c,{enumerable:!0,get:b[c]})}(c,{createEmptyCacheNode:function(){return G},createPrefetchURL:function(){return E},default:function(){return K},isExternalURL:function(){return D}});let d=a.r(63652),e=a.r(3988),f=a.r(66755),g=e._(a.r(56541)),h=a.r(38344),i=a.r(5895),j=a.r(97597),k=a.r(8054),l=a.r(63365),m=a.r(22196),n=a.r(29041),o=a.r(88213),p=a.r(52338),q=a.r(81409),r=a.r(43950),s=a.r(45676),t=a.r(97275),u=a.r(87110),v=a.r(33999),w=a.r(27497),x=a.r(44262),y=a.r(47611);a.r(9329);let z=d._(a.r(8150)),A=d._(a.r(1516)),B=a.r(65146),C={};function D(a){return a.origin!==window.location.origin}function E(a){let b;if((0,m.isBot)(window.navigator.userAgent))return null;try{b=new URL((0,n.addBasePath)(a),window.location.href)}catch(b){throw Object.defineProperty(Error("Cannot prefetch '"+a+"' because it cannot be converted to a URL."),"__NEXT_ERROR_CODE",{value:"E234",enumerable:!1,configurable:!0})}return D(b)?null:b}function F(a){let{appRouterState:b}=a;return(0,g.useInsertionEffect)(()=>{let{tree:a,pushRef:c,canonicalUrl:d}=b,e={...c.preserveCustomHistoryState?window.history.state:{},__NA:!0,__PRIVATE_NEXTJS_INTERNALS_TREE:a};c.pendingPush&&(0,j.createHrefFromUrl)(new URL(window.location.href))!==d?(c.pendingPush=!1,window.history.pushState(e,"",d)):window.history.replaceState(e,"",d)},[b]),(0,g.useEffect)(()=>{},[b.nextUrl,b.tree]),null}function G(){return{lazyData:null,rsc:null,prefetchRsc:null,head:null,prefetchHead:null,parallelRoutes:new Map,loading:null,navigatedAt:-1}}function H(a){null==a&&(a={});let b=window.history.state,c=null==b?void 0:b.__NA;c&&(a.__NA=c);let d=null==b?void 0:b.__PRIVATE_NEXTJS_INTERNALS_TREE;return d&&(a.__PRIVATE_NEXTJS_INTERNALS_TREE=d),a}function I(a){let{headCacheNode:b}=a,c=null!==b?b.head:null,d=null!==b?b.prefetchHead:null,e=null!==d?d:c;return(0,g.useDeferredValue)(c,e)}function J(a){let b,{actionQueue:c,globalError:d,webSocket:e,staticIndicatorState:j}=a,m=(0,l.useActionQueue)(c),{canonicalUrl:n}=m,{searchParams:v,pathname:A}=(0,g.useMemo)(()=>{let a=new URL(n,"http://n");return{searchParams:a.searchParams,pathname:(0,t.hasBasePath)(a.pathname)?(0,s.removeBasePath)(a.pathname):a.pathname}},[n]);(0,g.useEffect)(()=>{function a(a){var b;a.persisted&&(null==(b=window.history.state)?void 0:b.__PRIVATE_NEXTJS_INTERNALS_TREE)&&(C.pendingMpaPath=void 0,(0,l.dispatchAppRouterAction)({type:i.ACTION_RESTORE,url:new URL(window.location.href),tree:window.history.state.__PRIVATE_NEXTJS_INTERNALS_TREE}))}return window.addEventListener("pageshow",a),()=>{window.removeEventListener("pageshow",a)}},[]),(0,g.useEffect)(()=>{function a(a){let b="reason"in a?a.reason:a.error;if((0,y.isRedirectError)(b)){a.preventDefault();let c=(0,x.getURLFromRedirectError)(b);(0,x.getRedirectTypeFromError)(b)===y.RedirectType.push?w.publicAppRouterInstance.push(c,{}):w.publicAppRouterInstance.replace(c,{})}}return window.addEventListener("error",a),window.addEventListener("unhandledrejection",a),()=>{window.removeEventListener("error",a),window.removeEventListener("unhandledrejection",a)}},[]);let{pushRef:D}=m;if(D.mpaNavigation){if(C.pendingMpaPath!==n){let a=window.location;D.pendingPush?a.assign(n):a.replace(n),C.pendingMpaPath=n}throw r.unresolvedThenable}(0,g.useEffect)(()=>{let a=window.history.pushState.bind(window.history),b=window.history.replaceState.bind(window.history),c=a=>{var b;let c=window.location.href,d=null==(b=window.history.state)?void 0:b.__PRIVATE_NEXTJS_INTERNALS_TREE;(0,g.startTransition)(()=>{(0,l.dispatchAppRouterAction)({type:i.ACTION_RESTORE,url:new URL(null!=a?a:c,c),tree:d})})};window.history.pushState=function(b,d,e){return(null==b?void 0:b.__NA)||(null==b?void 0:b._N)||(b=H(b),e&&c(e)),a(b,d,e)},window.history.replaceState=function(a,d,e){return(null==a?void 0:a.__NA)||(null==a?void 0:a._N)||(a=H(a),e&&c(e)),b(a,d,e)};let d=a=>{if(a.state){if(!a.state.__NA)return void window.location.reload();(0,g.startTransition)(()=>{(0,w.dispatchTraverseAction)(window.location.href,a.state.__PRIVATE_NEXTJS_INTERNALS_TREE)})}};return window.addEventListener("popstate",d),()=>{window.history.pushState=a,window.history.replaceState=b,window.removeEventListener("popstate",d)}},[]);let{cache:E,tree:G,nextUrl:J,focusAndScrollRef:K}=m,L=(0,g.useMemo)(()=>(0,q.findHeadInCache)(E,G[1]),[E,G]),M=(0,g.useMemo)(()=>(0,u.getSelectedParams)(G),[G]),O=(0,g.useMemo)(()=>({parentTree:G,parentCacheNode:E,parentSegmentPath:null,url:n}),[G,E,n]),P=(0,g.useMemo)(()=>({tree:G,focusAndScrollRef:K,nextUrl:J}),[G,K,J]);if(null!==L){let[a,c,d]=L;b=(0,f.jsx)(I,{headCacheNode:a},d)}else b=null;let Q=(0,f.jsxs)(p.RedirectBoundary,{children:[b,(0,f.jsx)(B.RootLayoutBoundary,{children:E.rsc}),(0,f.jsx)(o.AppRouterAnnouncer,{tree:G})]});return Q=(0,f.jsx)(z.default,{errorComponent:d[0],errorStyles:d[1],children:Q}),(0,f.jsxs)(f.Fragment,{children:[(0,f.jsx)(F,{appRouterState:m}),(0,f.jsx)(N,{}),(0,f.jsx)(k.PathParamsContext.Provider,{value:M,children:(0,f.jsx)(k.PathnameContext.Provider,{value:A,children:(0,f.jsx)(k.SearchParamsContext.Provider,{value:v,children:(0,f.jsx)(h.GlobalLayoutRouterContext.Provider,{value:P,children:(0,f.jsx)(h.AppRouterContext.Provider,{value:w.publicAppRouterInstance,children:(0,f.jsx)(h.LayoutRouterContext.Provider,{value:O,children:Q})})})})})})]})}function K(a){let{actionQueue:b,globalErrorState:c,webSocket:d,staticIndicatorState:e}=a;(0,v.useNavFailureHandler)();let g=(0,f.jsx)(J,{actionQueue:b,globalError:c,webSocket:d,staticIndicatorState:e});return(0,f.jsx)(z.default,{errorComponent:A.default,children:g})}let L=new Set,M=new Set;function N(){let[,a]=g.default.useState(0),b=L.size;return(0,g.useEffect)(()=>{let c=()=>a(a=>a+1);return M.add(c),b!==L.size&&c(),()=>{M.delete(c)}},[b,a]),[...L].map((a,b)=>(0,f.jsx)("link",{rel:"stylesheet",href:""+a,precedence:"next"},b))}globalThis._N_E_STYLE_LOAD=function(a){let b=L.size;return L.add(a),L.size!==b&&M.forEach(a=>a()),Promise.resolve()},("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},98298,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),!function(a,b){for(var c in b)Object.defineProperty(a,c,{enumerable:!0,get:b[c]})}(c,{abortTask:function(){return o},listenForDynamicRequest:function(){return n},startPPRNavigation:function(){return j},updateCacheNodeOnPopstateRestoration:function(){return function a(b,c){let d=c[1],e=b.parallelRoutes,g=new Map(e);for(let b in d){let c=d[b],h=c[0],i=(0,f.createRouterCacheKey)(h),j=e.get(b);if(void 0!==j){let d=j.get(i);if(void 0!==d){let e=a(d,c),f=new Map(j);f.set(i,e),g.set(b,f)}}}let h=b.rsc,i=r(h)&&"pending"===h.status;return{lazyData:null,rsc:h,head:b.head,prefetchHead:i?b.prefetchHead:[null,null],prefetchRsc:i?b.prefetchRsc:null,loading:b.loading,parallelRoutes:g,navigatedAt:b.navigatedAt}}}});let d=a.r(13195),e=a.r(89975),f=a.r(47841),g=a.r(98637),h=a.r(93295),i={route:null,node:null,dynamicRequestTree:null,children:null};function j(a,b,c,g,h,j,m,n,o){return function a(b,c,g,h,j,m,n,o,p,q,r){let s=g[1],t=h[1],u=null!==m?m[2]:null;j||!0===h[4]&&(j=!0);let v=c.parallelRoutes,w=new Map(v),x={},y=null,z=!1,A={};for(let c in t){let g,h=t[c],l=s[c],m=v.get(c),B=null!==u?u[c]:null,C=h[0],D=q.concat([c,C]),E=(0,f.createRouterCacheKey)(C),F=void 0!==l?l[0]:void 0,G=void 0!==m?m.get(E):void 0;if(null!==(g=C===d.DEFAULT_SEGMENT_KEY?void 0!==l?{route:l,node:null,dynamicRequestTree:null,children:null}:k(b,l,h,G,j,void 0!==B?B:null,n,o,D,r):p&&0===Object.keys(h[1]).length?k(b,l,h,G,j,void 0!==B?B:null,n,o,D,r):void 0!==l&&void 0!==F&&(0,e.matchSegment)(C,F)&&void 0!==G&&void 0!==l?a(b,G,l,h,j,B,n,o,p,D,r):k(b,l,h,G,j,void 0!==B?B:null,n,o,D,r))){if(null===g.route)return i;null===y&&(y=new Map),y.set(c,g);let a=g.node;if(null!==a){let b=new Map(m);b.set(E,a),w.set(c,b)}let b=g.route;x[c]=b;let d=g.dynamicRequestTree;null!==d?(z=!0,A[c]=d):A[c]=b}else x[c]=h,A[c]=h}if(null===y)return null;let B={lazyData:null,rsc:c.rsc,prefetchRsc:c.prefetchRsc,head:c.head,prefetchHead:c.prefetchHead,loading:c.loading,parallelRoutes:w,navigatedAt:b};return{route:l(h,x),node:B,dynamicRequestTree:z?l(h,A):null,children:y}}(a,b,c,g,!1,h,j,m,n,[],o)}function k(a,b,c,d,e,j,k,n,o,p){return!e&&(void 0===b||(0,g.isNavigatingToNewRootLayout)(b,c))?i:function a(b,c,d,e,g,i,j,k){let n,o,p,q,r=c[1],s=0===Object.keys(r).length;if(void 0!==d&&d.navigatedAt+h.DYNAMIC_STALETIME_MS>b)n=d.rsc,o=d.loading,p=d.head,q=d.navigatedAt;else if(null===e)return m(b,c,null,g,i,j,k);else if(n=e[1],o=e[3],p=s?g:null,q=b,e[4]||i&&s)return m(b,c,e,g,i,j,k);let t=null!==e?e[2]:null,u=new Map,v=void 0!==d?d.parallelRoutes:null,w=new Map(v),x={},y=!1;if(s)k.push(j);else for(let c in r){let d=r[c],e=null!==t?t[c]:null,h=null!==v?v.get(c):void 0,l=d[0],m=j.concat([c,l]),n=(0,f.createRouterCacheKey)(l),o=a(b,d,void 0!==h?h.get(n):void 0,e,g,i,m,k);u.set(c,o);let p=o.dynamicRequestTree;null!==p?(y=!0,x[c]=p):x[c]=d;let q=o.node;if(null!==q){let a=new Map;a.set(n,q),w.set(c,a)}}return{route:c,node:{lazyData:null,rsc:n,prefetchRsc:null,head:p,prefetchHead:null,loading:o,parallelRoutes:w,navigatedAt:q},dynamicRequestTree:y?l(c,x):null,children:u}}(a,c,d,j,k,n,o,p)}function l(a,b){let c=[a[0],b];return 2 in a&&(c[2]=a[2]),3 in a&&(c[3]=a[3]),4 in a&&(c[4]=a[4]),c}function m(a,b,c,d,e,g,h){let i=l(b,b[1]);return i[3]="refetch",{route:b,node:function a(b,c,d,e,g,h,i){var j;let k=c[1],l=null!==d?d[2]:null,m=new Map;for(let c in k){let d=k[c],j=null!==l?l[c]:null,n=d[0],o=h.concat([c,n]),p=(0,f.createRouterCacheKey)(n),q=a(b,d,void 0===j?null:j,e,g,o,i),r=new Map;r.set(p,q),m.set(c,r)}let n=0===m.size;n&&i.push(h);let o=null!==d?d[1]:null;return{lazyData:null,parallelRoutes:m,prefetchRsc:void 0!==o?o:null,prefetchHead:n?e:[null,null],rsc:s(),head:n?s():null,loading:null!==d?null!=(j=d[3])?j:null:s(),navigatedAt:b}}(a,b,c,d,e,g,h),dynamicRequestTree:i,children:null}}function n(a,b){b.then(b=>{let{flightData:c}=b;if("string"!=typeof c){for(let b of c){let{segmentPath:c,tree:d,seedData:g,head:h}=b;g&&function(a,b,c,d,g){let h=a;for(let a=0;a<b.length;a+=2){let c=b[a],d=b[a+1],f=h.children;if(null!==f){let a=f.get(c);if(void 0!==a){let b=a.route[0];if((0,e.matchSegment)(d,b)){h=a;continue}}}return}!function a(b,c,d,g){if(null===b.dynamicRequestTree)return;let h=b.children,i=b.node;if(null===h){null!==i&&(function a(b,c,d,g,h){let i=c[1],j=d[1],k=g[2],l=b.parallelRoutes;for(let b in i){let c=i[b],d=j[b],g=k[b],m=l.get(b),n=c[0],o=(0,f.createRouterCacheKey)(n),q=void 0!==m?m.get(o):void 0;void 0!==q&&(void 0!==d&&(0,e.matchSegment)(n,d[0])&&null!=g?a(q,c,d,g,h):p(c,q,null))}let m=b.rsc,n=g[1];null===m?b.rsc=n:r(m)&&m.resolve(n);let o=b.loading;if(r(o)){let a=g[3];o.resolve(a)}let q=b.head;r(q)&&q.resolve(h)}(i,b.route,c,d,g),b.dynamicRequestTree=null);return}let j=c[1],k=d[2];for(let b in c){let c=j[b],d=k[b],f=h.get(b);if(void 0!==f){let b=f.route[0];if((0,e.matchSegment)(c[0],b)&&null!=d)return a(f,c,d,g)}}}(h,c,d,g)}(a,c,d,g,h)}o(a,null)}},b=>{o(a,b)})}function o(a,b){let c=a.node;if(null===c)return;let d=a.children;if(null===d)p(a.route,c,b);else for(let a of d.values())o(a,b);a.dynamicRequestTree=null}function p(a,b,c){let d=a[1],e=b.parallelRoutes;for(let a in d){let b=d[a],g=e.get(a);if(void 0===g)continue;let h=b[0],i=(0,f.createRouterCacheKey)(h),j=g.get(i);void 0!==j&&p(b,j,c)}let g=b.rsc;r(g)&&(null===c?g.resolve(null):g.reject(c));let h=b.loading;r(h)&&h.resolve(null);let i=b.head;r(i)&&i.resolve(null)}let q=Symbol();function r(a){return a&&"object"==typeof a&&a.tag===q}function s(){let a,b,c=new Promise((c,d)=>{a=c,b=d});return c.status="pending",c.resolve=b=>{"pending"===c.status&&(c.status="fulfilled",c.value=b,a(b))},c.reject=a=>{"pending"===c.status&&(c.status="rejected",c.reason=a,b(a))},c.tag=q,c}("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},28027,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"clearCacheNodeDataForSegmentPath",{enumerable:!0,get:function(){return function a(b,c,f){let g=f.length<=2,[h,i]=f,j=(0,e.createRouterCacheKey)(i),k=c.parallelRoutes.get(h),l=b.parallelRoutes.get(h);l&&l!==k||(l=new Map(k),b.parallelRoutes.set(h,l));let m=null==k?void 0:k.get(j),n=l.get(j);if(g){n&&n.lazyData&&n!==m||l.set(j,{lazyData:null,rsc:null,prefetchRsc:null,head:null,prefetchHead:null,parallelRoutes:new Map,loading:null,navigatedAt:-1});return}if(!n||!m){n||l.set(j,{lazyData:null,rsc:null,prefetchRsc:null,head:null,prefetchHead:null,parallelRoutes:new Map,loading:null,navigatedAt:-1});return}return n===m&&(n={lazyData:n.lazyData,rsc:n.rsc,prefetchRsc:n.prefetchRsc,head:n.head,prefetchHead:n.prefetchHead,parallelRoutes:new Map(n.parallelRoutes),loading:n.loading},l.set(j,n)),a(n,m,(0,d.getNextFlightSegmentPath)(f))}}});let d=a.r(98709),e=a.r(47841);("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},15281,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),!function(a,b){for(var c in b)Object.defineProperty(a,c,{enumerable:!0,get:b[c]})}(c,{addSearchParamsToPageSegments:function(){return m},handleAliasedPrefetchEntry:function(){return l}});let d=a.r(13195),e=a.r(18370),f=a.r(22575),g=a.r(97597),h=a.r(47841),i=a.r(61656),j=a.r(47090),k=a.r(21122);function l(a,b,c,l,n){let o,p=b.tree,q=b.cache,r=(0,g.createHrefFromUrl)(l),s=[];if("string"==typeof c)return!1;for(let b of c){if(!function a(b){if(!b)return!1;let c=b[2];if(b[3])return!0;for(let b in c)if(a(c[b]))return!0;return!1}(b.seedData))continue;let c=b.tree;c=m(c,Object.fromEntries(l.searchParams));let{seedData:g,isRootRender:j,pathToSegment:n}=b,t=["",...n];c=m(c,Object.fromEntries(l.searchParams));let u=(0,f.applyRouterStatePatchToTree)(t,p,c,r),v=(0,e.createEmptyCacheNode)();if(j&&g){let b=g[1];v.loading=g[3],v.rsc=b,function a(b,c,e,f,g){if(0!==Object.keys(f[1]).length)for(let i in f[1]){let j,k=f[1][i],l=k[0],m=(0,h.createRouterCacheKey)(l),n=null!==g&&void 0!==g[2][i]?g[2][i]:null;if(null!==n){let a=n[1],c=n[3];j={lazyData:null,rsc:l.includes(d.PAGE_SEGMENT_KEY)?null:a,prefetchRsc:null,head:null,prefetchHead:null,parallelRoutes:new Map,loading:c,navigatedAt:b}}else j={lazyData:null,rsc:null,prefetchRsc:null,head:null,prefetchHead:null,parallelRoutes:new Map,loading:null,navigatedAt:-1};let o=c.parallelRoutes.get(i);o?o.set(m,j):c.parallelRoutes.set(i,new Map([[m,j]])),a(b,j,e,k,n)}}(a,v,q,c,g)}else v.rsc=q.rsc,v.prefetchRsc=q.prefetchRsc,v.loading=q.loading,v.parallelRoutes=new Map(q.parallelRoutes),(0,i.fillCacheWithNewSubTreeDataButOnlyLoading)(a,v,q,b);for(let a of(u&&(p=u,q=v,o=!0),(0,k.generateSegmentsFromPatch)(c))){let c=[...b.pathToSegment,...a];c[c.length-1]!==d.DEFAULT_SEGMENT_KEY&&s.push(c)}}return!!o&&(n.patchedTree=p,n.cache=q,n.canonicalUrl=r,n.hashFragment=l.hash,n.scrollableSegments=s,(0,j.handleMutable)(b,n))}function m(a,b){let[c,e,...f]=a;if(c.includes(d.PAGE_SEGMENT_KEY))return[(0,d.addSearchParamsIfPageSegment)(c,b),e,...f];let g={};for(let[a,c]of Object.entries(e))g[a]=m(c,b);return[c,g,...f]}("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},68220,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),!function(a,b){for(var c in b)Object.defineProperty(a,c,{enumerable:!0,get:b[c]})}(c,{FetchStrategy:function(){return p},NavigationResultTag:function(){return n},PrefetchPriority:function(){return o},cancelPrefetchTask:function(){return j},createCacheKey:function(){return m},getCurrentCacheVersion:function(){return h},isPrefetchTaskDirty:function(){return l},navigate:function(){return f},prefetch:function(){return e},reschedulePrefetchTask:function(){return k},revalidateEntireCache:function(){return g},schedulePrefetchTask:function(){return i}});let d=()=>{throw Object.defineProperty(Error("Segment Cache experiment is not enabled. This is a bug in Next.js."),"__NEXT_ERROR_CODE",{value:"E654",enumerable:!1,configurable:!0})},e=d,f=d,g=d,h=d,i=d,j=d,k=d,l=d,m=d;var n=function(a){return a[a.MPA=0]="MPA",a[a.Success=1]="Success",a[a.NoOp=2]="NoOp",a[a.Async=3]="Async",a}({}),o=function(a){return a[a.Intent=2]="Intent",a[a.Default=1]="Default",a[a.Background=0]="Background",a}({}),p=function(a){return a[a.LoadingBoundary=0]="LoadingBoundary",a[a.PPR=1]="PPR",a[a.PPRRuntime=2]="PPRRuntime",a[a.Full=3]="Full",a}({});("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},21122,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),!function(a,b){for(var c in b)Object.defineProperty(a,c,{enumerable:!0,get:b[c]})}(c,{generateSegmentsFromPatch:function(){return u},handleExternalUrl:function(){return t},navigateReducer:function(){return function a(b,c){let{url:v,isExternalUrl:w,navigateType:x,shouldScroll:y,allowAliasing:z}=c,A={},{hash:B}=v,C=(0,e.createHrefFromUrl)(v),D="push"===x;if((0,q.prunePrefetchCache)(b.prefetchCache),A.preserveCustomHistoryState=!1,A.pendingPush=D,w)return t(b,A,v.toString(),D);if(document.getElementById("__next-page-redirect"))return t(b,A,C,D);let E=(0,q.getOrCreatePrefetchCacheEntry)({url:v,nextUrl:b.nextUrl,tree:b.tree,prefetchCache:b.prefetchCache,allowAliasing:z}),{treeAtTimeOfPrefetch:F,data:G}=E;return m.prefetchQueue.bump(G),G.then(m=>{let{flightData:q,canonicalUrl:w,postponed:x}=m,z=Date.now(),G=!1;if(E.lastUsedTime||(E.lastUsedTime=z,G=!0),E.aliased){let d=new URL(v.href);w&&(d.pathname=w.pathname);let e=(0,s.handleAliasedPrefetchEntry)(z,b,q,d,A);return!1===e?a(b,{...c,allowAliasing:!1}):e}if("string"==typeof q)return t(b,A,q,D);let H=w?(0,e.createHrefFromUrl)(w):C;if(B&&b.canonicalUrl.split("#",1)[0]===H.split("#",1)[0])return A.onlyHashChange=!0,A.canonicalUrl=H,A.shouldScroll=y,A.hashFragment=B,A.scrollableSegments=[],(0,k.handleMutable)(b,A);let I=b.tree,J=b.cache,K=[];for(let a of q){let{pathToSegment:c,seedData:e,head:k,isHeadPartial:m,isRootRender:q}=a,s=a.tree,w=["",...c],y=(0,g.applyRouterStatePatchToTree)(w,I,s,C);if(null===y&&(y=(0,g.applyRouterStatePatchToTree)(w,F,s,C)),null!==y){if(e&&q&&x){let a=(0,p.startPPRNavigation)(z,J,I,s,e,k,m,!1,K);if(null!==a){if(null===a.route)return t(b,A,C,D);y=a.route;let c=a.node;null!==c&&(A.cache=c);let e=a.dynamicRequestTree;if(null!==e){let c=(0,d.fetchServerResponse)(new URL(H,v.origin),{flightRouterState:e,nextUrl:b.nextUrl});(0,p.listenForDynamicRequest)(a,c)}}else y=s}else{if((0,i.isNavigatingToNewRootLayout)(I,y))return t(b,A,C,D);let d=(0,n.createEmptyCacheNode)(),e=!1;for(let b of(E.status!==j.PrefetchCacheEntryStatus.stale||G?e=(0,l.applyFlightData)(z,J,d,a,E):(e=function(a,b,c,d){let e=!1;for(let f of(a.rsc=b.rsc,a.prefetchRsc=b.prefetchRsc,a.loading=b.loading,a.parallelRoutes=new Map(b.parallelRoutes),u(d).map(a=>[...c,...a])))(0,r.clearCacheNodeDataForSegmentPath)(a,b,f),e=!0;return e}(d,J,c,s),E.lastUsedTime=z),(0,h.shouldHardNavigate)(w,I)?(d.rsc=J.rsc,d.prefetchRsc=J.prefetchRsc,(0,f.invalidateCacheBelowFlightSegmentPath)(d,J,c),A.cache=d):e&&(A.cache=d,J=d),u(s))){let a=[...c,...b];a[a.length-1]!==o.DEFAULT_SEGMENT_KEY&&K.push(a)}}I=y}}return A.patchedTree=I,A.canonicalUrl=H,A.scrollableSegments=K,A.hashFragment=B,A.shouldScroll=y,(0,k.handleMutable)(b,A)},()=>b)}}});let d=a.r(43465),e=a.r(97597),f=a.r(1892),g=a.r(22575),h=a.r(80591),i=a.r(98637),j=a.r(5895),k=a.r(47090),l=a.r(49619),m=a.r(94304),n=a.r(18370),o=a.r(13195),p=a.r(98298),q=a.r(93295),r=a.r(28027),s=a.r(15281);function t(a,b,c,d){return b.mpaNavigation=!0,b.canonicalUrl=c,b.pendingPush=d,b.scrollableSegments=void 0,(0,k.handleMutable)(a,b)}function u(a){let b=[],[c,d]=a;if(0===Object.keys(d).length)return[[c]];for(let[a,e]of Object.entries(d))for(let d of u(e))""===c?b.push([a,...d]):b.push([c,a,...d]);return b}a.r(68220),("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},4442,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"serverPatchReducer",{enumerable:!0,get:function(){return k}});let d=a.r(97597),e=a.r(22575),f=a.r(98637),g=a.r(21122),h=a.r(49619),i=a.r(47090),j=a.r(18370);function k(a,b){let{serverResponse:{flightData:c,canonicalUrl:k},navigatedAt:l}=b,m={};if(m.preserveCustomHistoryState=!1,"string"==typeof c)return(0,g.handleExternalUrl)(a,m,c,a.pushRef.pendingPush);let n=a.tree,o=a.cache;for(let b of c){let{segmentPath:c,tree:i}=b,p=(0,e.applyRouterStatePatchToTree)(["",...c],n,i,a.canonicalUrl);if(null===p)return a;if((0,f.isNavigatingToNewRootLayout)(n,p))return(0,g.handleExternalUrl)(a,m,a.canonicalUrl,a.pushRef.pendingPush);let q=k?(0,d.createHrefFromUrl)(k):void 0;q&&(m.canonicalUrl=q);let r=(0,j.createEmptyCacheNode)();(0,h.applyFlightData)(l,o,r,b),m.patchedTree=p,m.cache=r,o=r,n=p}return(0,i.handleMutable)(a,m)}("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},57672,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"restoreReducer",{enumerable:!0,get:function(){return f}});let d=a.r(97597),e=a.r(87110);function f(a,b){var c;let{url:f,tree:g}=b,h=(0,d.createHrefFromUrl)(f),i=g||a.tree,j=a.cache;return{canonicalUrl:h,pushRef:{pendingPush:!1,mpaNavigation:!1,preserveCustomHistoryState:!0},focusAndScrollRef:a.focusAndScrollRef,cache:j,prefetchCache:a.prefetchCache,tree:i,nextUrl:null!=(c=(0,e.extractPathFromFlightRouterState)(i))?c:f.pathname}}a.r(98298),("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},79437,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"handleSegmentMismatch",{enumerable:!0,get:function(){return e}});let d=a.r(21122);function e(a,b,c){return(0,d.handleExternalUrl)(a,{},a.canonicalUrl,!0)}("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},23266,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"hasInterceptionRouteInCurrentTree",{enumerable:!0,get:function(){return function a(b){let[c,e]=b;if(Array.isArray(c)&&("di"===c[2]||"ci"===c[2])||"string"==typeof c&&(0,d.isInterceptionRouteAppPath)(c))return!0;if(e){for(let b in e)if(a(e[b]))return!0}return!1}}});let d=a.r(77762);("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},11134,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"refreshReducer",{enumerable:!0,get:function(){return o}});let d=a.r(43465),e=a.r(97597),f=a.r(22575),g=a.r(98637),h=a.r(21122),i=a.r(47090),j=a.r(20221),k=a.r(18370),l=a.r(79437),m=a.r(23266),n=a.r(14941);function o(a,b){let{origin:c}=b,o={},p=a.canonicalUrl,q=a.tree;o.preserveCustomHistoryState=!1;let r=(0,k.createEmptyCacheNode)(),s=(0,m.hasInterceptionRouteInCurrentTree)(a.tree);r.lazyData=(0,d.fetchServerResponse)(new URL(p,c),{flightRouterState:[q[0],q[1],q[2],"refetch"],nextUrl:s?a.nextUrl:null});let t=Date.now();return r.lazyData.then(async c=>{let{flightData:d,canonicalUrl:k}=c;if("string"==typeof d)return(0,h.handleExternalUrl)(a,o,d,a.pushRef.pendingPush);for(let c of(r.lazyData=null,d)){let{tree:d,seedData:i,head:m,isRootRender:u}=c;if(!u)return console.log("REFRESH FAILED"),a;let v=(0,f.applyRouterStatePatchToTree)([""],q,d,a.canonicalUrl);if(null===v)return(0,l.handleSegmentMismatch)(a,b,d);if((0,g.isNavigatingToNewRootLayout)(q,v))return(0,h.handleExternalUrl)(a,o,p,a.pushRef.pendingPush);let w=k?(0,e.createHrefFromUrl)(k):void 0;if(k&&(o.canonicalUrl=w),null!==i){let a=i[1],b=i[3];r.rsc=a,r.prefetchRsc=null,r.loading=b,(0,j.fillLazyItemsTillLeafWithHead)(t,r,void 0,d,i,m,void 0),o.prefetchCache=new Map}await (0,n.refreshInactiveParallelSegments)({navigatedAt:t,state:a,updatedTree:v,updatedCache:r,includeNextUrl:s,canonicalUrl:o.canonicalUrl||a.canonicalUrl}),o.cache=r,o.patchedTree=v,q=v}return(0,i.handleMutable)(a,o)},()=>a)}a.r(68220),("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},63301,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"hmrRefreshReducer",{enumerable:!0,get:function(){return d}}),a.r(43465),a.r(97597),a.r(22575),a.r(98637),a.r(21122),a.r(47090),a.r(49619),a.r(18370),a.r(79437),a.r(23266);let d=function(a,b){return a};("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},45732,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"assignLocation",{enumerable:!0,get:function(){return e}});let d=a.r(29041);function e(a,b){if(a.startsWith(".")){let c=b.origin+b.pathname;return new URL((c.endsWith("/")?c:c+"/")+a)}return new URL((0,d.addBasePath)(a),b.href)}("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},55923,(a,b,c)=>{"use strict";function d(a){let b=parseInt(a.slice(0,2),16),c=b>>1&63,d=Array(6);for(let a=0;a<6;a++){let b=c>>5-a&1;d[a]=1===b}return{type:1==(b>>7&1)?"use-cache":"server-action",usedArgs:d,hasRestArgs:1==(1&b)}}function e(a,b){let c=Array(a.length);for(let d=0;d<a.length;d++)(d<6&&b.usedArgs[d]||d>=6&&b.hasRestArgs)&&(c[d]=a[d]);return c}Object.defineProperty(c,"__esModule",{value:!0}),!function(a,b){for(var c in b)Object.defineProperty(a,c,{enumerable:!0,get:b[c]})}(c,{extractInfoFromServerReferenceId:function(){return d},omitUnusedArgs:function(){return e}})},65819,(a,b,c)=>{"use strict";let d;Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"serverActionReducer",{enumerable:!0,get:function(){return F}});let e=a.r(1308),f=a.r(2663),g=a.r(93947),h=a.r(65390),i=a.r(76730),j=a.r(5895),k=a.r(45732),l=a.r(97597),m=a.r(21122),n=a.r(22575),o=a.r(98637),p=a.r(47090),q=a.r(20221),r=a.r(18370),s=a.r(23266),t=a.r(79437),u=a.r(14941),v=a.r(98709),w=a.r(44262),x=a.r(47611),y=a.r(93295),z=a.r(45676),A=a.r(97275),B=a.r(55923);a.r(68220);let C=i.createFromFetch;async function D(a,b,c){let j,l,m,n,{actionId:o,actionArgs:p}=c,q=(0,i.createTemporaryReferenceSet)(),r=(0,B.extractInfoFromServerReferenceId)(o),s="use-cache"===r.type?(0,B.omitUnusedArgs)(p,r):p,t=await (0,i.encodeReply)(s,{temporaryReferences:q}),u={Accept:g.RSC_CONTENT_TYPE_HEADER,[g.ACTION_HEADER]:o,[g.NEXT_ROUTER_STATE_TREE_HEADER]:(0,v.prepareFlightRouterStateForRequest)(a.tree)};b&&(u[g.NEXT_URL]=b);let w=await fetch(a.canonicalUrl,{method:"POST",headers:u,body:t});if("1"===w.headers.get(g.NEXT_ACTION_NOT_FOUND_HEADER))throw Object.defineProperty(new h.UnrecognizedActionError('Server Action "'+o+'" was not found on the server. \nRead more: https://nextjs.org/docs/messages/failed-to-find-server-action'),"__NEXT_ERROR_CODE",{value:"E715",enumerable:!1,configurable:!0});let y=w.headers.get("x-action-redirect"),[z,A]=(null==y?void 0:y.split(";"))||[];switch(A){case"push":j=x.RedirectType.push;break;case"replace":j=x.RedirectType.replace;break;default:j=void 0}let D=!!w.headers.get(g.NEXT_IS_PRERENDER_HEADER);try{let a=JSON.parse(w.headers.get("x-action-revalidated")||"[[],0,0]");l={paths:a[0]||[],tag:!!a[1],cookie:a[2]}}catch(a){l=E}let F=z?(0,k.assignLocation)(z,new URL(a.canonicalUrl,window.location.href)):void 0,G=w.headers.get("content-type"),H=!!(G&&G.startsWith(g.RSC_CONTENT_TYPE_HEADER));if(!H&&!F)throw Object.defineProperty(Error(w.status>=400&&"text/plain"===G?await w.text():"An unexpected response was received from the server."),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0});if(H){let a=await C(Promise.resolve(w),{callServer:e.callServer,findSourceMapURL:f.findSourceMapURL,temporaryReferences:q,debugChannel:d&&d(w.headers)});m=F?void 0:a.a,n=(0,v.normalizeFlightData)(a.f)}else m=void 0,n=void 0;return{actionResult:m,actionFlightData:n,redirectLocation:F,redirectType:j,revalidatedParts:l,isPrerender:D}}let E={paths:[],tag:!1,cookie:!1};function F(a,b){let{resolve:c,reject:d}=b,e={},f=a.tree;e.preserveCustomHistoryState=!1;let g=a.nextUrl&&(0,s.hasInterceptionRouteInCurrentTree)(a.tree)?a.nextUrl:null,h=Date.now();return D(a,g,b).then(async i=>{let k,{actionResult:s,actionFlightData:v,redirectLocation:B,redirectType:C,isPrerender:D,revalidatedParts:E}=i;if(B&&(C===x.RedirectType.replace?(a.pushRef.pendingPush=!1,e.pendingPush=!1):(a.pushRef.pendingPush=!0,e.pendingPush=!0),e.canonicalUrl=k=(0,l.createHrefFromUrl)(B,!1)),!v)return(c(s),B)?(0,m.handleExternalUrl)(a,e,B.href,a.pushRef.pendingPush):a;if("string"==typeof v)return c(s),(0,m.handleExternalUrl)(a,e,v,a.pushRef.pendingPush);let F=E.paths.length>0||E.tag||E.cookie;for(let d of(F&&(b.didRevalidate=!0),v)){let{tree:i,seedData:j,head:l,isRootRender:p}=d;if(!p)return console.log("SERVER ACTION APPLY FAILED"),c(s),a;let v=(0,n.applyRouterStatePatchToTree)([""],f,i,k||a.canonicalUrl);if(null===v)return c(s),(0,t.handleSegmentMismatch)(a,b,i);if((0,o.isNavigatingToNewRootLayout)(f,v))return c(s),(0,m.handleExternalUrl)(a,e,k||a.canonicalUrl,a.pushRef.pendingPush);if(null!==j){let b=j[1],c=(0,r.createEmptyCacheNode)();c.rsc=b,c.prefetchRsc=null,c.loading=j[3],(0,q.fillLazyItemsTillLeafWithHead)(h,c,void 0,i,j,l,void 0),e.cache=c,e.prefetchCache=new Map,F&&await (0,u.refreshInactiveParallelSegments)({navigatedAt:h,state:a,updatedTree:v,updatedCache:c,includeNextUrl:!!g,canonicalUrl:e.canonicalUrl||a.canonicalUrl})}e.patchedTree=v,f=v}return B&&k?(F||((0,y.createSeededPrefetchCacheEntry)({url:B,data:{flightData:v,canonicalUrl:void 0,couldBeIntercepted:!1,prerendered:!1,postponed:!1,staleTime:-1},tree:a.tree,prefetchCache:a.prefetchCache,nextUrl:a.nextUrl,kind:D?j.PrefetchKind.FULL:j.PrefetchKind.AUTO}),e.prefetchCache=a.prefetchCache),d((0,w.getRedirectError)((0,A.hasBasePath)(k)?(0,z.removeBasePath)(k):k,C||x.RedirectType.push))):c(s),(0,p.handleMutable)(a,e)},b=>(d(b),a))}("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},66470,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"reducer",{enumerable:!0,get:function(){return d}}),a.r(5895),a.r(21122),a.r(4442),a.r(57672),a.r(11134),a.r(94304),a.r(63301),a.r(65819);let d=function(a,b){return a};("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},27497,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),!function(a,b){for(var c in b)Object.defineProperty(a,c,{enumerable:!0,get:b[c]})}(c,{createMutableActionQueue:function(){return o},dispatchNavigateAction:function(){return q},dispatchTraverseAction:function(){return r},getCurrentAppRouterState:function(){return p},publicAppRouterInstance:function(){return s}});let d=a.r(5895),e=a.r(66470),f=a.r(56541),g=a.r(98931);a.r(68220);let h=a.r(63365),i=a.r(29041),j=a.r(18370),k=a.r(94304),l=a.r(9329);function m(a,b){null!==a.pending?(a.pending=a.pending.next,null!==a.pending&&n({actionQueue:a,action:a.pending,setState:b})):a.needsRefresh&&(a.needsRefresh=!1,a.dispatch({type:d.ACTION_REFRESH,origin:window.location.origin},b))}async function n(a){let{actionQueue:b,action:c,setState:e}=a,f=b.state;b.pending=c;let h=c.payload,i=b.action(f,h);function j(a){if(c.discarded){c.payload.type===d.ACTION_SERVER_ACTION&&c.payload.didRevalidate&&(b.needsRefresh=!0),m(b,e);return}b.state=a,m(b,e),c.resolve(a)}(0,g.isThenable)(i)?i.then(j,a=>{m(b,e),c.reject(a)}):j(i)}function o(a,b){let c={state:a,dispatch:(a,b)=>(function(a,b,c){let e={resolve:c,reject:()=>{}};if(b.type!==d.ACTION_RESTORE){let a=new Promise((a,b)=>{e={resolve:a,reject:b}});(0,f.startTransition)(()=>{c(a)})}let g={payload:b,next:null,resolve:e.resolve,reject:e.reject};null===a.pending?(a.last=g,n({actionQueue:a,action:g,setState:c})):b.type===d.ACTION_NAVIGATE||b.type===d.ACTION_RESTORE?(a.pending.discarded=!0,g.next=a.pending.next,n({actionQueue:a,action:g,setState:c})):(null!==a.last&&(a.last.next=g),a.last=g)})(c,a,b),action:async(a,b)=>(0,e.reducer)(a,b),pending:null,last:null,onRouterTransitionStart:null!==b&&"function"==typeof b.onRouterTransitionStart?b.onRouterTransitionStart:null};return c}function p(){return null}function q(a,b,c,e){let f=new URL((0,i.addBasePath)(a),location.href);(0,l.setLinkForCurrentNavigation)(e);(0,h.dispatchAppRouterAction)({type:d.ACTION_NAVIGATE,url:f,isExternalUrl:(0,j.isExternalURL)(f),locationSearch:location.search,shouldScroll:c,navigateType:b,allowAliasing:!0})}function r(a,b){(0,h.dispatchAppRouterAction)({type:d.ACTION_RESTORE,url:new URL(a),tree:b})}let s={back:()=>window.history.back(),forward:()=>window.history.forward(),prefetch:(a,b)=>{let c=function(){throw Object.defineProperty(Error("Internal Next.js error: Router action dispatched before initialization."),"__NEXT_ERROR_CODE",{value:"E668",enumerable:!1,configurable:!0})}(),e=(0,j.createPrefetchURL)(a);if(null!==e){var f;(0,k.prefetchReducer)(c.state,{type:d.ACTION_PREFETCH,url:e,kind:null!=(f=null==b?void 0:b.kind)?f:d.PrefetchKind.FULL})}},replace:(a,b)=>{(0,f.startTransition)(()=>{var c;q(a,"replace",null==(c=null==b?void 0:b.scroll)||c,null)})},push:(a,b)=>{(0,f.startTransition)(()=>{var c;q(a,"push",null==(c=null==b?void 0:b.scroll)||c,null)})},refresh:()=>{(0,f.startTransition)(()=>{(0,h.dispatchAppRouterAction)({type:d.ACTION_REFRESH,origin:window.location.origin})})},hmrRefresh:()=>{throw Object.defineProperty(Error("hmrRefresh can only be used in development mode. Please use refresh instead."),"__NEXT_ERROR_CODE",{value:"E485",enumerable:!1,configurable:!0})}};("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},9329,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),!function(a,b){for(var c in b)Object.defineProperty(a,c,{enumerable:!0,get:b[c]})}(c,{IDLE_LINK_STATUS:function(){return i},PENDING_LINK_STATUS:function(){return h},mountFormInstance:function(){return r},mountLinkInstance:function(){return q},onLinkVisibilityChanged:function(){return t},onNavigationIntent:function(){return u},pingVisibleLinks:function(){return w},setLinkForCurrentNavigation:function(){return j},unmountLinkForCurrentNavigation:function(){return k},unmountPrefetchableInstance:function(){return s}}),a.r(27497);let d=a.r(18370),e=a.r(68220),f=a.r(56541);a.r(5895),a.r(53636);let g=null,h={pending:!0},i={pending:!1};function j(a){(0,f.startTransition)(()=>{null==g||g.setOptimisticLinkStatus(i),null==a||a.setOptimisticLinkStatus(h),g=a})}function k(a){g===a&&(g=null)}let l="function"==typeof WeakMap?new WeakMap:new Map,m=new Set,n="function"==typeof IntersectionObserver?new IntersectionObserver(function(a){for(let b of a){let a=b.intersectionRatio>0;t(b.target,a)}},{rootMargin:"200px"}):null;function o(a,b){void 0!==l.get(a)&&s(a),l.set(a,b),null!==n&&n.observe(a)}function p(a){try{return(0,d.createPrefetchURL)(a)}catch(b){return("function"==typeof reportError?reportError:console.error)("Cannot prefetch '"+a+"' because it cannot be converted to a URL."),null}}function q(a,b,c,d,e,f){if(e){let e=p(b);if(null!==e){let b={router:c,fetchStrategy:d,isVisible:!1,prefetchTask:null,prefetchHref:e.href,setOptimisticLinkStatus:f};return o(a,b),b}}return{router:c,fetchStrategy:d,isVisible:!1,prefetchTask:null,prefetchHref:null,setOptimisticLinkStatus:f}}function r(a,b,c,d){let e=p(b);null!==e&&o(a,{router:c,fetchStrategy:d,isVisible:!1,prefetchTask:null,prefetchHref:e.href,setOptimisticLinkStatus:null})}function s(a){let b=l.get(a);if(void 0!==b){l.delete(a),m.delete(b);let c=b.prefetchTask;null!==c&&(0,e.cancelPrefetchTask)(c)}null!==n&&n.unobserve(a)}function t(a,b){let c=l.get(a);void 0!==c&&(c.isVisible=b,b?m.add(c):m.delete(c),v(c,e.PrefetchPriority.Default))}function u(a,b){let c=l.get(a);void 0!==c&&void 0!==c&&v(c,e.PrefetchPriority.Intent)}function v(a,b){let c=a.prefetchTask;if(!a.isVisible){null!==c&&(0,e.cancelPrefetchTask)(c);return}}function w(a,b){for(let c of m){let d=c.prefetchTask;if(null!==d&&!(0,e.isPrefetchTaskDirty)(d,a,b))continue;null!==d&&(0,e.cancelPrefetchTask)(d);let f=(0,e.createCacheKey)(c.prefetchHref,a);c.prefetchTask=(0,e.schedulePrefetchTask)(f,b,c.fetchStrategy,e.PrefetchPriority.Default,null)}}("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},17771,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"isLocalURL",{enumerable:!0,get:function(){return f}});let d=a.r(76645),e=a.r(97275);function f(a){if(!(0,d.isAbsoluteUrl)(a))return!0;try{let b=(0,d.getLocationOrigin)(),c=new URL(a,b);return c.origin===b&&(0,e.hasBasePath)(c.pathname)}catch(a){return!1}}},89600,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),!function(a,b){for(var c in b)Object.defineProperty(a,c,{enumerable:!0,get:b[c]})}(c,{default:function(){return q},useLinkStatus:function(){return s}});let d=a.r(3988),e=a.r(66755),f=d._(a.r(56541)),g=a.r(59735),h=a.r(38344),i=a.r(7547),j=a.r(76645),k=a.r(29041);a.r(40657);let l=a.r(9329),m=a.r(17771),n=a.r(27497),o=a.r(68220);function p(a){return"string"==typeof a?a:(0,g.formatUrl)(a)}function q(a){var b;let[c,d]=(0,f.useOptimistic)(l.IDLE_LINK_STATUS),g=(0,f.useRef)(null),{href:q,as:s,children:t,prefetch:u=null,replace:v,shallow:w,scroll:x,onClick:y,onMouseEnter:z,onTouchStart:A,onNavigate:B,ref:C,unstable_dynamicOnHover:D,...E}=a,F=f.default.useContext(h.AppRouterContext),G=!1!==u,H=!1!==u?null===(b=u)||"auto"===b?o.FetchStrategy.PPR:o.FetchStrategy.Full:o.FetchStrategy.PPR,{href:I,as:J}=f.default.useMemo(()=>{let a=p(q);return{href:a,as:s?p(s):a}},[q,s]),K=f.default.useCallback(a=>(null!==F&&(g.current=(0,l.mountLinkInstance)(a,I,F,H,G,d)),()=>{g.current&&((0,l.unmountLinkForCurrentNavigation)(g.current),g.current=null),(0,l.unmountPrefetchableInstance)(a)}),[G,I,F,H,d]),L={ref:(0,i.useMergedRef)(K,C),onClick(a){"function"==typeof y&&y(a),F&&(a.defaultPrevented||function(a,b,c,d,e,g,h){if(!(function(a){let b=a.currentTarget.getAttribute("target");return b&&"_self"!==b||a.metaKey||a.ctrlKey||a.shiftKey||a.altKey||a.nativeEvent&&2===a.nativeEvent.which}(a)||a.currentTarget.hasAttribute("download"))){if(!(0,m.isLocalURL)(b)){e&&(a.preventDefault(),location.replace(b));return}if(a.preventDefault(),h){let a=!1;if(h({preventDefault:()=>{a=!0}}),a)return}f.default.startTransition(()=>{(0,n.dispatchNavigateAction)(c||b,e?"replace":"push",null==g||g,d.current)})}}(a,I,J,g,v,x,B))},onMouseEnter(a){"function"==typeof z&&z(a),F&&G&&(0,l.onNavigationIntent)(a.currentTarget,!0===D)},onTouchStart:function(a){"function"==typeof A&&A(a),F&&G&&(0,l.onNavigationIntent)(a.currentTarget,!0===D)}};return(0,j.isAbsoluteUrl)(J)?L.href=J:L.href=(0,k.addBasePath)(J),(0,e.jsx)(r.Provider,{value:c,children:(0,e.jsx)("a",{...E,...L,children:t})})}let r=(0,f.createContext)(l.IDLE_LINK_STATUS),s=()=>(0,f.useContext)(r);("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},60350,a=>{"use strict";var b=a.i(66755),c=a.i(89600),d=a.i(56541);function e(){let[a,e]=(0,d.useState)(null),[f,g]=(0,d.useState)(!0);return(0,d.useEffect)(()=>{fetch("/api/tools").then(a=>a.json()).then(a=>{e(a),g(!1)}).catch(()=>{g(!1)})},[]),(0,b.jsxs)("div",{className:"min-h-screen bg-white",children:[(0,b.jsx)("header",{className:"bg-gray-50 border-b border-gray-200",children:(0,b.jsx)("div",{className:"max-w-7xl mx-auto px-6 py-8",children:(0,b.jsxs)("div",{className:"flex items-center justify-between",children:[(0,b.jsx)("div",{children:(0,b.jsxs)("div",{className:"flex items-center gap-4 mb-3",children:[(0,b.jsx)("div",{className:"w-12 h-12 bg-black rounded flex items-center justify-center",children:(0,b.jsx)("span",{className:"text-white font-mono font-bold",children:"d3k"})}),(0,b.jsxs)("div",{children:[(0,b.jsx)("h1",{className:"text-3xl font-bold text-gray-900",children:"dev3000 MCP Server"}),(0,b.jsxs)("div",{className:"flex items-center gap-3 mt-2",children:[(0,b.jsxs)("span",{className:"inline-flex items-center gap-2 text-sm text-green-600 font-medium",children:[(0,b.jsx)("span",{className:"w-2 h-2 bg-green-500 rounded-full"}),"Server Running"]}),(0,b.jsx)("span",{className:"text-gray-300",children:"•"}),(0,b.jsx)("span",{className:"text-sm text-gray-600",children:"Port 3684"})]})]})]})}),(0,b.jsxs)("div",{className:"flex items-center gap-4",children:[(0,b.jsx)(c.default,{href:"/logs",className:"inline-flex items-center gap-2 px-5 py-3 bg-blue-600 text-white text-sm font-medium rounded hover:bg-blue-700 transition-colors",children:"📊 View Logs"}),(0,b.jsx)("a",{href:"https://github.com/vercel-labs/dev3000#setup",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center gap-2 px-5 py-3 border border-gray-300 text-gray-700 text-sm font-medium rounded hover:bg-gray-50 transition-colors",children:"📖 Setup Guide"})]})]})})}),(0,b.jsxs)("div",{className:"flex max-w-7xl mx-auto",children:[(0,b.jsxs)("main",{className:"flex-1 px-6 py-8 min-w-0 lg:pr-80",children:[(0,b.jsx)("section",{className:"mb-16",children:(0,b.jsxs)("div",{className:"bg-blue-50 border border-blue-200 rounded p-8",children:[(0,b.jsx)("h2",{className:"text-xl font-semibold text-blue-900 mb-4",children:"🚀 Quick Start"}),(0,b.jsxs)("div",{className:"space-y-4",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("span",{className:"text-sm font-medium text-blue-800",children:"MCP Endpoint:"}),(0,b.jsx)("code",{className:"ml-3 px-4 py-2 bg-blue-100 text-blue-800 text-sm font-mono rounded",children:a?.endpoint||"http://localhost:3684/api/mcp/mcp"})]}),(0,b.jsxs)("div",{className:"text-sm text-blue-700",children:[(0,b.jsx)("p",{className:"mb-3",children:"Connect your AI tools to this MCP server for real-time development debugging:"}),(0,b.jsxs)("div",{className:"flex gap-6",children:[(0,b.jsx)("a",{href:"https://github.com/vercel-labs/dev3000#claude-desktop",target:"_blank",rel:"noopener noreferrer",className:"text-blue-600 hover:text-blue-800 font-medium",children:"Claude Desktop Setup →"}),(0,b.jsx)("a",{href:"https://github.com/vercel-labs/dev3000#cursor",target:"_blank",rel:"noopener noreferrer",className:"text-blue-600 hover:text-blue-800 font-medium",children:"Cursor Setup →"})]})]})]})]})}),(0,b.jsxs)("section",{children:[(0,b.jsx)("div",{className:"mb-12",children:(0,b.jsxs)("div",{children:[(0,b.jsx)("h2",{className:"text-3xl font-bold text-gray-900 mb-3",children:"Available Tools"}),(0,b.jsx)("p",{className:"text-gray-600 text-lg",children:f?"Loading MCP tools...":`${a?.totalTools||0} tools across ${a?.categories.length||0} categories for AI-powered development debugging`})]})}),f?(0,b.jsxs)("div",{className:"text-center py-16",children:[(0,b.jsx)("div",{className:"inline-block animate-spin rounded-full h-8 w-8 border-b-2 border-blue-600"}),(0,b.jsx)("p",{className:"mt-6 text-gray-600",children:"Loading tool documentation..."})]}):a?(0,b.jsx)("div",{className:"grid gap-6 lg:grid-cols-2",children:a.tools.map(a=>(0,b.jsxs)("div",{id:a.name,className:"border border-gray-200 rounded p-6 hover:border-gray-300 transition-colors",children:[(0,b.jsxs)("div",{className:"mb-4",children:[(0,b.jsx)("h4",{className:"text-xl font-semibold text-gray-900 font-mono mb-3",children:a.name}),(0,b.jsx)("p",{className:"text-gray-600 leading-relaxed",children:a.description.replace(/🚨|⏰|🔍|🪄|📊|🌐|⚙️/g,"").trim()})]}),a.parameters.length>0&&(0,b.jsxs)("div",{children:[(0,b.jsx)("h5",{className:"text-sm font-semibold text-gray-800 mb-3",children:"Parameters:"}),(0,b.jsx)("div",{className:"space-y-2",children:a.parameters.map(a=>(0,b.jsxs)("div",{className:"text-sm",children:[(0,b.jsxs)("div",{className:"flex items-start gap-2",children:[(0,b.jsx)("span",{className:"font-mono text-blue-600 font-medium",children:a.name}),(0,b.jsx)("span",{className:"text-gray-500 text-xs",children:a.optional?"(optional)":"(required)"}),(0,b.jsxs)("span",{className:"text-gray-400 text-xs",children:["- ",a.type]})]}),a.description&&(0,b.jsx)("div",{className:"text-gray-600 ml-1 mt-1 text-sm",children:a.description})]},a.name))})]})]},a.name))}):(0,b.jsxs)("div",{className:"text-center py-16",children:[(0,b.jsx)("p",{className:"text-red-600 mb-6",children:"Failed to load tool documentation"}),(0,b.jsx)("button",{onClick:()=>window.location.reload(),className:"px-6 py-3 bg-blue-600 text-white text-sm rounded hover:bg-blue-700 transition-colors",type:"button",children:"Retry"})]})]}),(0,b.jsxs)("section",{className:"mt-20 bg-gradient-to-r from-purple-50 to-blue-50 border border-purple-200 rounded p-10",children:[(0,b.jsx)("h2",{className:"text-2xl font-semibold text-gray-900 mb-6 flex items-center gap-3",children:"🪄 The Magic Workflow"}),(0,b.jsxs)("div",{className:"grid md:grid-cols-3 gap-8",children:[(0,b.jsxs)("div",{className:"text-center",children:[(0,b.jsx)("div",{className:"w-16 h-16 bg-blue-100 rounded-full flex items-center justify-center mx-auto mb-4",children:(0,b.jsx)("span",{className:"text-blue-600 font-bold text-lg",children:"1"})}),(0,b.jsx)("h3",{className:"font-semibold mb-3 text-lg",children:"AI Finds Issues"}),(0,b.jsx)("p",{className:"text-gray-600 leading-relaxed",children:"Tools like debug_my_app and monitor_for_new_errors automatically detect problems"})]}),(0,b.jsxs)("div",{className:"text-center",children:[(0,b.jsx)("div",{className:"w-16 h-16 bg-purple-100 rounded-full flex items-center justify-center mx-auto mb-4",children:(0,b.jsx)("span",{className:"text-purple-600 font-bold text-lg",children:"2"})}),(0,b.jsx)("h3",{className:"font-semibold mb-3 text-lg",children:"AI Fixes Code"}),(0,b.jsx)("p",{className:"text-gray-600 leading-relaxed",children:"AI analyzes errors and edits your code files to resolve issues"})]}),(0,b.jsxs)("div",{className:"text-center",children:[(0,b.jsx)("div",{className:"w-16 h-16 bg-green-100 rounded-full flex items-center justify-center mx-auto mb-4",children:(0,b.jsx)("span",{className:"text-green-600 font-bold text-lg",children:"3"})}),(0,b.jsx)("h3",{className:"font-semibold mb-3 text-lg",children:"AI Verifies Fixes"}),(0,b.jsx)("p",{className:"text-gray-600 leading-relaxed",children:"execute_browser_action tests the fixes in real-time with screenshots"})]})]})]})]}),(0,b.jsx)("aside",{className:"lg:block w-72 flex-shrink-0 fixed right-0 top-0 h-screen overflow-y-auto z-10",children:(0,b.jsxs)("div",{className:"p-6 bg-gray-50 border-l border-gray-200 h-full",children:[(0,b.jsx)("h3",{className:"text-sm font-semibold text-gray-900 mb-4",children:"Tools"}),f?(0,b.jsx)("div",{className:"text-sm text-gray-500",children:"Loading tools..."}):a?(0,b.jsx)("nav",{className:"space-y-1 text-sm",children:a.tools.map(a=>(0,b.jsx)("a",{href:`#${a.name}`,className:"text-gray-600 hover:text-blue-600 transition-colors block py-2 px-3 rounded hover:bg-white",children:a.name},a.name))}):(0,b.jsx)("div",{className:"text-sm text-gray-500",children:"Failed to load tools"})]})})]}),(0,b.jsx)("footer",{className:"border-t border-gray-200 mt-20",children:(0,b.jsx)("div",{className:"max-w-7xl mx-auto px-6 py-8",children:(0,b.jsxs)("div",{className:"flex items-center justify-between text-sm text-gray-600",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("span",{className:"font-semibold",children:"dev3000 MCP Server"})," - AI-powered development monitoring"]}),(0,b.jsxs)("div",{className:"flex items-center gap-8",children:[(0,b.jsx)("a",{href:"https://github.com/vercel-labs/dev3000",target:"_blank",rel:"noopener noreferrer",className:"hover:text-gray-900 transition-colors",children:"GitHub"}),(0,b.jsx)("a",{href:"https://dev3000.ai",target:"_blank",rel:"noopener noreferrer",className:"hover:text-gray-900 transition-colors",children:"Homepage"}),(0,b.jsx)(c.default,{href:"/logs",className:"hover:text-gray-900 transition-colors",children:"Logs"})]})]})})})]})}a.s(["default",()=>e])}];
2
+
3
+ //# sourceMappingURL=_dc26a647._.js.map