vibedoc 1.10.0 → 1.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (725) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +9 -1
  3. package/.next/build-manifest.json +3 -3
  4. package/.next/prerender-manifest.json +41 -13
  5. package/.next/routes-manifest.json +54 -6
  6. package/.next/server/app/(app)/activity/page.js.nft.json +1 -1
  7. package/.next/server/app/(app)/activity/page_client-reference-manifest.js +1 -1
  8. package/.next/server/app/(app)/board/page.js.nft.json +1 -1
  9. package/.next/server/app/(app)/board/page_client-reference-manifest.js +1 -1
  10. package/.next/server/app/(app)/chat/page.js.nft.json +1 -1
  11. package/.next/server/app/(app)/chat/page_client-reference-manifest.js +1 -1
  12. package/.next/server/app/(app)/docs/page.js.nft.json +1 -1
  13. package/.next/server/app/(app)/docs/page_client-reference-manifest.js +1 -1
  14. package/.next/server/app/(app)/explorer/page.js.nft.json +1 -1
  15. package/.next/server/app/(app)/explorer/page_client-reference-manifest.js +1 -1
  16. package/.next/server/app/(app)/graph/page/app-paths-manifest.json +3 -0
  17. package/.next/server/app/(app)/graph/page/build-manifest.json +20 -0
  18. package/.next/server/app/(app)/graph/page/next-font-manifest.json +11 -0
  19. package/.next/server/app/(app)/graph/page/react-loadable-manifest.json +1 -0
  20. package/.next/server/app/(app)/graph/page.js +15 -0
  21. package/.next/server/app/(app)/graph/page.js.nft.json +1 -0
  22. package/.next/server/app/(app)/graph/page_client-reference-manifest.js +3 -0
  23. package/.next/server/app/(app)/manual-tests/page.js.nft.json +1 -1
  24. package/.next/server/app/(app)/manual-tests/page_client-reference-manifest.js +1 -1
  25. package/.next/server/app/(app)/memory/page.js.nft.json +1 -1
  26. package/.next/server/app/(app)/memory/page_client-reference-manifest.js +1 -1
  27. package/.next/server/app/(app)/roadmap/page.js.nft.json +1 -1
  28. package/.next/server/app/(app)/roadmap/page_client-reference-manifest.js +1 -1
  29. package/.next/server/app/(app)/settings/page.js.nft.json +1 -1
  30. package/.next/server/app/(app)/settings/page_client-reference-manifest.js +1 -1
  31. package/.next/server/app/(app)/setup/page.js.nft.json +1 -1
  32. package/.next/server/app/(app)/setup/page_client-reference-manifest.js +1 -1
  33. package/.next/server/app/_global-error.html +1 -1
  34. package/.next/server/app/_global-error.rsc +1 -1
  35. package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  36. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  37. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  38. package/.next/server/app/_not-found/page.js.nft.json +1 -1
  39. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  40. package/.next/server/app/_not-found.html +1 -1
  41. package/.next/server/app/_not-found.rsc +2 -2
  42. package/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  43. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
  44. package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  45. package/.next/server/app/activity.html +1 -1
  46. package/.next/server/app/activity.rsc +8 -8
  47. package/.next/server/app/activity.segments/!KGFwcCk/activity/__PAGE__.segment.rsc +6 -6
  48. package/.next/server/app/activity.segments/_full.segment.rsc +8 -8
  49. package/.next/server/app/activity.segments/_tree.segment.rsc +2 -2
  50. package/.next/server/app/api/activity/route.js +2 -2
  51. package/.next/server/app/api/activity/route.js.nft.json +1 -1
  52. package/.next/server/app/api/chat/route.js +2 -2
  53. package/.next/server/app/api/chat/route.js.nft.json +1 -1
  54. package/.next/server/app/api/context/route.js +2 -2
  55. package/.next/server/app/api/context/route.js.nft.json +1 -1
  56. package/.next/server/app/api/conversations/route.js +2 -2
  57. package/.next/server/app/api/conversations/route.js.nft.json +1 -1
  58. package/.next/server/app/api/decisions/route.js +2 -2
  59. package/.next/server/app/api/decisions/route.js.nft.json +1 -1
  60. package/.next/server/app/api/docs/graph/route/app-paths-manifest.json +3 -0
  61. package/.next/server/app/api/docs/graph/route/server-reference-manifest.json +4 -0
  62. package/.next/server/app/api/docs/graph/route.js +9 -0
  63. package/.next/server/app/api/docs/graph/route.js.map +5 -0
  64. package/.next/server/app/api/docs/graph/route.js.nft.json +1 -0
  65. package/.next/server/app/api/docs/graph/route_client-reference-manifest.js +3 -0
  66. package/.next/server/app/api/docs/links/route/app-paths-manifest.json +3 -0
  67. package/.next/server/app/api/docs/links/route/build-manifest.json +12 -0
  68. package/.next/server/app/api/docs/links/route/server-reference-manifest.json +4 -0
  69. package/.next/server/app/api/docs/links/route.js +9 -0
  70. package/.next/server/app/api/docs/links/route.js.map +5 -0
  71. package/.next/server/app/api/docs/links/route.js.nft.json +1 -0
  72. package/.next/server/app/api/docs/links/route_client-reference-manifest.js +3 -0
  73. package/.next/server/app/api/docs/route.js +2 -2
  74. package/.next/server/app/api/docs/route.js.nft.json +1 -1
  75. package/.next/server/app/api/explorer/route.js +2 -2
  76. package/.next/server/app/api/explorer/route.js.nft.json +1 -1
  77. package/.next/server/app/api/mcp/route.js +2 -2
  78. package/.next/server/app/api/mcp/route.js.nft.json +1 -1
  79. package/.next/server/app/api/memory/entries/delete/route.js +2 -2
  80. package/.next/server/app/api/memory/entries/delete/route.js.nft.json +1 -1
  81. package/.next/server/app/api/memory/entries/merge/route/app-paths-manifest.json +3 -0
  82. package/.next/server/app/api/memory/entries/merge/route/build-manifest.json +12 -0
  83. package/.next/server/app/api/memory/entries/merge/route/server-reference-manifest.json +4 -0
  84. package/.next/server/app/api/memory/entries/merge/route.js +9 -0
  85. package/.next/server/app/api/memory/entries/merge/route.js.map +5 -0
  86. package/.next/server/app/api/memory/entries/merge/route.js.nft.json +1 -0
  87. package/.next/server/app/api/memory/entries/merge/route_client-reference-manifest.js +3 -0
  88. package/.next/server/app/api/memory/entries/merge/undo/route/app-paths-manifest.json +3 -0
  89. package/.next/server/app/api/memory/entries/merge/undo/route/build-manifest.json +12 -0
  90. package/.next/server/app/api/memory/entries/merge/undo/route/server-reference-manifest.json +4 -0
  91. package/.next/server/app/api/memory/entries/merge/undo/route.js +9 -0
  92. package/.next/server/app/api/memory/entries/merge/undo/route.js.map +5 -0
  93. package/.next/server/app/api/memory/entries/merge/undo/route.js.nft.json +1 -0
  94. package/.next/server/app/api/memory/entries/merge/undo/route_client-reference-manifest.js +3 -0
  95. package/.next/server/app/api/memory/entries/restore/route.js +2 -2
  96. package/.next/server/app/api/memory/entries/restore/route.js.nft.json +1 -1
  97. package/.next/server/app/api/memory/entries/route.js +2 -2
  98. package/.next/server/app/api/memory/entries/route.js.nft.json +1 -1
  99. package/.next/server/app/api/memory/entries/save/route.js +2 -2
  100. package/.next/server/app/api/memory/entries/save/route.js.nft.json +1 -1
  101. package/.next/server/app/api/memory/graph/route.js +2 -2
  102. package/.next/server/app/api/memory/graph/route.js.nft.json +1 -1
  103. package/.next/server/app/api/memory/health/dismiss/route/app-paths-manifest.json +3 -0
  104. package/.next/server/app/api/memory/health/dismiss/route/build-manifest.json +12 -0
  105. package/.next/server/app/api/memory/health/dismiss/route/server-reference-manifest.json +4 -0
  106. package/.next/server/app/api/memory/health/dismiss/route.js +9 -0
  107. package/.next/server/app/api/memory/health/dismiss/route.js.map +5 -0
  108. package/.next/server/app/api/memory/health/dismiss/route.js.nft.json +1 -0
  109. package/.next/server/app/api/memory/health/dismiss/route_client-reference-manifest.js +3 -0
  110. package/.next/server/app/api/memory/health/route/app-paths-manifest.json +3 -0
  111. package/.next/server/app/api/memory/health/route/build-manifest.json +12 -0
  112. package/.next/server/app/api/memory/health/route/server-reference-manifest.json +4 -0
  113. package/.next/server/app/api/memory/health/route.js +8 -0
  114. package/.next/server/app/api/memory/health/route.js.map +5 -0
  115. package/.next/server/app/api/memory/health/route.js.nft.json +1 -0
  116. package/.next/server/app/api/memory/health/route_client-reference-manifest.js +3 -0
  117. package/.next/server/app/api/memory/history/route.js +2 -2
  118. package/.next/server/app/api/memory/history/route.js.nft.json +1 -1
  119. package/.next/server/app/api/memory/restore/route/app-paths-manifest.json +3 -0
  120. package/.next/server/app/api/memory/restore/route/build-manifest.json +12 -0
  121. package/.next/server/app/api/memory/restore/route/server-reference-manifest.json +4 -0
  122. package/.next/server/app/api/memory/restore/route.js +9 -0
  123. package/.next/server/app/api/memory/restore/route.js.map +5 -0
  124. package/.next/server/app/api/memory/restore/route.js.nft.json +1 -0
  125. package/.next/server/app/api/memory/restore/route_client-reference-manifest.js +3 -0
  126. package/.next/server/app/api/memory/route.js +2 -2
  127. package/.next/server/app/api/memory/route.js.nft.json +1 -1
  128. package/.next/server/app/api/memory/versions/route/app-paths-manifest.json +3 -0
  129. package/.next/server/app/api/memory/versions/route/build-manifest.json +12 -0
  130. package/.next/server/app/api/memory/versions/route/server-reference-manifest.json +4 -0
  131. package/.next/server/app/api/memory/versions/route.js +8 -0
  132. package/.next/server/app/api/memory/versions/route.js.map +5 -0
  133. package/.next/server/app/api/memory/versions/route.js.nft.json +1 -0
  134. package/.next/server/app/api/memory/versions/route_client-reference-manifest.js +3 -0
  135. package/.next/server/app/api/plan/apply/route.js +2 -2
  136. package/.next/server/app/api/plan/apply/route.js.nft.json +1 -1
  137. package/.next/server/app/api/projects/route.js +2 -2
  138. package/.next/server/app/api/projects/route.js.nft.json +1 -1
  139. package/.next/server/app/api/registry/route.js +2 -2
  140. package/.next/server/app/api/registry/route.js.nft.json +1 -1
  141. package/.next/server/app/api/roadmap/create/route.js +2 -2
  142. package/.next/server/app/api/roadmap/create/route.js.nft.json +1 -1
  143. package/.next/server/app/api/roadmap/delete/route.js +2 -2
  144. package/.next/server/app/api/roadmap/delete/route.js.nft.json +1 -1
  145. package/.next/server/app/api/roadmap/generate/route.js +2 -2
  146. package/.next/server/app/api/roadmap/generate/route.js.nft.json +1 -1
  147. package/.next/server/app/api/roadmap/layout/route.js +2 -2
  148. package/.next/server/app/api/roadmap/layout/route.js.nft.json +1 -1
  149. package/.next/server/app/api/roadmap/restore/route.js +2 -2
  150. package/.next/server/app/api/roadmap/restore/route.js.nft.json +1 -1
  151. package/.next/server/app/api/roadmap/route.js +2 -2
  152. package/.next/server/app/api/roadmap/route.js.nft.json +1 -1
  153. package/.next/server/app/api/roadmap/update/route.js +2 -2
  154. package/.next/server/app/api/roadmap/update/route.js.nft.json +1 -1
  155. package/.next/server/app/api/sessions/route.js +2 -2
  156. package/.next/server/app/api/sessions/route.js.nft.json +1 -1
  157. package/.next/server/app/api/settings/route.js +2 -2
  158. package/.next/server/app/api/settings/route.js.nft.json +1 -1
  159. package/.next/server/app/api/setup/generate/route.js +2 -2
  160. package/.next/server/app/api/setup/generate/route.js.nft.json +1 -1
  161. package/.next/server/app/api/setup/write/route.js +2 -2
  162. package/.next/server/app/api/setup/write/route.js.nft.json +1 -1
  163. package/.next/server/app/api/summary/route.js +2 -2
  164. package/.next/server/app/api/summary/route.js.nft.json +1 -1
  165. package/.next/server/app/api/tasks/bulk/route.js +2 -2
  166. package/.next/server/app/api/tasks/bulk/route.js.nft.json +1 -1
  167. package/.next/server/app/api/tasks/create/route.js +2 -2
  168. package/.next/server/app/api/tasks/create/route.js.nft.json +1 -1
  169. package/.next/server/app/api/tasks/delete/route.js +2 -2
  170. package/.next/server/app/api/tasks/delete/route.js.nft.json +1 -1
  171. package/.next/server/app/api/tasks/manual-tests/route.js +2 -2
  172. package/.next/server/app/api/tasks/manual-tests/route.js.nft.json +1 -1
  173. package/.next/server/app/api/tasks/restore/route.js +2 -2
  174. package/.next/server/app/api/tasks/restore/route.js.nft.json +1 -1
  175. package/.next/server/app/api/tasks/review/route.js +2 -2
  176. package/.next/server/app/api/tasks/review/route.js.nft.json +1 -1
  177. package/.next/server/app/api/tasks/route.js +2 -2
  178. package/.next/server/app/api/tasks/route.js.nft.json +1 -1
  179. package/.next/server/app/api/tasks/update/route.js +2 -2
  180. package/.next/server/app/api/tasks/update/route.js.nft.json +1 -1
  181. package/.next/server/app/api/views/route.js +2 -2
  182. package/.next/server/app/api/views/route.js.nft.json +1 -1
  183. package/.next/server/app/board.html +1 -1
  184. package/.next/server/app/board.rsc +8 -8
  185. package/.next/server/app/board.segments/!KGFwcCk/board/__PAGE__.segment.rsc +5 -5
  186. package/.next/server/app/board.segments/_full.segment.rsc +8 -8
  187. package/.next/server/app/board.segments/_tree.segment.rsc +2 -2
  188. package/.next/server/app/chat.html +1 -1
  189. package/.next/server/app/chat.rsc +8 -8
  190. package/.next/server/app/chat.segments/!KGFwcCk/chat/__PAGE__.segment.rsc +9 -11
  191. package/.next/server/app/chat.segments/_full.segment.rsc +8 -8
  192. package/.next/server/app/chat.segments/_tree.segment.rsc +2 -2
  193. package/.next/server/app/docs.html +1 -1
  194. package/.next/server/app/docs.rsc +8 -8
  195. package/.next/server/app/docs.segments/!KGFwcCk/docs/__PAGE__.segment.rsc +5 -5
  196. package/.next/server/app/docs.segments/_full.segment.rsc +8 -8
  197. package/.next/server/app/docs.segments/_tree.segment.rsc +2 -2
  198. package/.next/server/app/explorer.html +1 -1
  199. package/.next/server/app/explorer.rsc +7 -7
  200. package/.next/server/app/explorer.segments/!KGFwcCk/explorer/__PAGE__.segment.rsc +9 -10
  201. package/.next/server/app/explorer.segments/_full.segment.rsc +7 -7
  202. package/.next/server/app/explorer.segments/_tree.segment.rsc +2 -2
  203. package/.next/server/app/graph.html +1 -0
  204. package/.next/server/app/graph.meta +31 -0
  205. package/.next/server/app/graph.rsc +32 -0
  206. package/.next/server/app/graph.segments/!KGFwcCk/graph/__PAGE__.segment.rsc +33 -0
  207. package/.next/server/app/graph.segments/_full.segment.rsc +32 -0
  208. package/.next/server/app/graph.segments/_tree.segment.rsc +6 -0
  209. package/.next/server/app/index.html +1 -1
  210. package/.next/server/app/index.rsc +2 -2
  211. package/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  212. package/.next/server/app/index.segments/_full.segment.rsc +2 -2
  213. package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  214. package/.next/server/app/manual-tests.html +1 -1
  215. package/.next/server/app/manual-tests.rsc +7 -7
  216. package/.next/server/app/manual-tests.segments/!KGFwcCk/manual-tests/__PAGE__.segment.rsc +9 -10
  217. package/.next/server/app/manual-tests.segments/_full.segment.rsc +7 -7
  218. package/.next/server/app/manual-tests.segments/_tree.segment.rsc +2 -2
  219. package/.next/server/app/memory.html +1 -1
  220. package/.next/server/app/memory.rsc +8 -8
  221. package/.next/server/app/memory.segments/!KGFwcCk/memory/__PAGE__.segment.rsc +6 -6
  222. package/.next/server/app/memory.segments/_full.segment.rsc +8 -8
  223. package/.next/server/app/memory.segments/_tree.segment.rsc +2 -2
  224. package/.next/server/app/page.js.nft.json +1 -1
  225. package/.next/server/app/page_client-reference-manifest.js +1 -1
  226. package/.next/server/app/roadmap.html +1 -1
  227. package/.next/server/app/roadmap.rsc +8 -8
  228. package/.next/server/app/roadmap.segments/!KGFwcCk/roadmap/__PAGE__.segment.rsc +5 -5
  229. package/.next/server/app/roadmap.segments/_full.segment.rsc +8 -8
  230. package/.next/server/app/roadmap.segments/_tree.segment.rsc +2 -2
  231. package/.next/server/app/settings.html +1 -1
  232. package/.next/server/app/settings.rsc +7 -7
  233. package/.next/server/app/settings.segments/!KGFwcCk/settings/__PAGE__.segment.rsc +11 -9
  234. package/.next/server/app/settings.segments/_full.segment.rsc +7 -7
  235. package/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
  236. package/.next/server/app/setup.html +1 -1
  237. package/.next/server/app/setup.rsc +7 -7
  238. package/.next/server/app/setup.segments/!KGFwcCk/setup/__PAGE__.segment.rsc +9 -10
  239. package/.next/server/app/setup.segments/_full.segment.rsc +7 -7
  240. package/.next/server/app/setup.segments/_tree.segment.rsc +2 -2
  241. package/.next/server/app-paths-manifest.json +9 -1
  242. package/.next/server/chunks/{11mp_@anthropic-ai_sdk_053zt3c._.js → 11mp_@anthropic-ai_sdk_013qeb4._.js} +1 -1
  243. package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0_zx69c._.js → 11mp_@anthropic-ai_sdk_05ck8py._.js} +1 -1
  244. package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0gvxfg3._.js → 11mp_@anthropic-ai_sdk_05w8m72._.js} +1 -1
  245. package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0gx5t2l._.js → 11mp_@anthropic-ai_sdk_086oevc._.js} +1 -1
  246. package/.next/server/chunks/11mp_@anthropic-ai_sdk_08rl0hf._.js +3 -0
  247. package/.next/server/chunks/11mp_@anthropic-ai_sdk_09ujrsu._.js +3 -0
  248. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0c3_7p7._.js +3 -0
  249. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0cto43x._.js +3 -0
  250. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0fgisb_._.js +3 -0
  251. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0fy8wd3._.js +3 -0
  252. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0fyvizf._.js +3 -0
  253. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0hg0i2g._.js +3 -0
  254. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0i0sz05._.js +3 -0
  255. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0l0j9c6._.js +3 -0
  256. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0lcm61d._.js +3 -0
  257. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0qtva5j._.js +3 -0
  258. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0r4fkdu._.js +3 -0
  259. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0wbae0t._.js +3 -0
  260. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0wxyz1t._.js +3 -0
  261. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0y2cods._.js +3 -0
  262. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0zu0fj1._.js +3 -0
  263. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0zxpgt0._.js +3 -0
  264. package/.next/server/chunks/11mp_@anthropic-ai_sdk_10_cxcd._.js +3 -0
  265. package/.next/server/chunks/11mp_@anthropic-ai_sdk_10gb7d1._.js +3 -0
  266. package/.next/server/chunks/11mp_@anthropic-ai_sdk_12q70bs._.js +3 -0
  267. package/.next/server/chunks/11mp_@anthropic-ai_sdk_149ltk3._.js +3 -0
  268. package/.next/server/chunks/11mp_@anthropic-ai_sdk_165_uiw._.js +3 -0
  269. package/.next/server/chunks/11mp_@anthropic-ai_sdk_19w4zh6._.js +3 -0
  270. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1adck-s._.js +3 -0
  271. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1c2dwoi._.js +3 -0
  272. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1d9lw_2._.js +3 -0
  273. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1db6a7p._.js +3 -0
  274. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1h2f90s._.js +3 -0
  275. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1k5_i1z._.js +3 -0
  276. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1p3mv6i._.js +3 -0
  277. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1qoom5s._.js +3 -0
  278. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1qsbcbe._.js +3 -0
  279. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1rk0x59._.js +3 -0
  280. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1sd98mi._.js +3 -0
  281. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1sumqg8._.js +3 -0
  282. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1t-rt4q._.js +3 -0
  283. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1t-rt4q._.js.map +1 -0
  284. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1tr-k4y._.js +3 -0
  285. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1tr-k4y._.js.map +1 -0
  286. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1xk3c39._.js +3 -0
  287. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1xk3c39._.js.map +1 -0
  288. package/.next/server/chunks/11mp_@anthropic-ai_sdk_206l10_._.js +3 -0
  289. package/.next/server/chunks/11mp_@anthropic-ai_sdk_206l10_._.js.map +1 -0
  290. package/.next/server/chunks/11mp_@anthropic-ai_sdk_20giys9._.js +3 -0
  291. package/.next/server/chunks/11mp_@anthropic-ai_sdk_20giys9._.js.map +1 -0
  292. package/.next/server/chunks/11mp_@anthropic-ai_sdk_20xrvvy._.js +3 -0
  293. package/.next/server/chunks/11mp_@anthropic-ai_sdk_20xrvvy._.js.map +1 -0
  294. package/.next/server/chunks/11mp_@anthropic-ai_sdk_215tg00._.js +3 -0
  295. package/.next/server/chunks/11mp_@anthropic-ai_sdk_215tg00._.js.map +1 -0
  296. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_018s_10._.js +3 -0
  297. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_08d6i7w._.js +3 -0
  298. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_09_fd9g._.js +3 -0
  299. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0eopml6._.js +3 -0
  300. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0f5epel._.js +3 -0
  301. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0okfnhu._.js +3 -0
  302. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0s8-ha8._.js +3 -0
  303. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0ujs27r._.js +3 -0
  304. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0uo7rs8._.js +3 -0
  305. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0vyq_2d._.js +3 -0
  306. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0w3js74._.js +3 -0
  307. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0xa4-uq._.js +3 -0
  308. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_113y3so._.js +3 -0
  309. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_12qcr96._.js +3 -0
  310. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_13ixdy8._.js +3 -0
  311. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1708vst._.js +3 -0
  312. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1_rdguq._.js +3 -0
  313. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1bgpe23._.js +3 -0
  314. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1f-tphn._.js +3 -0
  315. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1h1pqdh._.js +3 -0
  316. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1hfj_1d._.js +3 -0
  317. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1ih2qzz._.js +3 -0
  318. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1jatyl1._.js +3 -0
  319. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1v1zbha._.js +3 -0
  320. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1vyqs5z._.js +3 -0
  321. package/.next/server/chunks/{[root-of-the-server]__0kuhhna._.js → [root-of-the-server]__00usbi3._.js} +2 -2
  322. package/.next/server/chunks/{[root-of-the-server]__1gr4e22._.js → [root-of-the-server]__04cwur0._.js} +2 -2
  323. package/.next/server/chunks/{[root-of-the-server]__06dfvb0._.js → [root-of-the-server]__04ri_ci._.js} +2 -2
  324. package/.next/server/chunks/{[root-of-the-server]__00o3mbd._.js → [root-of-the-server]__05-be3n._.js} +2 -2
  325. package/.next/server/chunks/{[root-of-the-server]__0uu9pgg._.js → [root-of-the-server]__0756_60._.js} +2 -2
  326. package/.next/server/chunks/{[root-of-the-server]__1h5hb6u._.js → [root-of-the-server]__089ay-q._.js} +2 -2
  327. package/.next/server/chunks/{[root-of-the-server]__15jhpgl._.js → [root-of-the-server]__0d4t4q6._.js} +2 -2
  328. package/.next/server/chunks/{[root-of-the-server]__01n_hoh._.js → [root-of-the-server]__0dgwykw._.js} +2 -2
  329. package/.next/server/chunks/[root-of-the-server]__0fn-a8c._.js +105 -0
  330. package/.next/server/chunks/[root-of-the-server]__0fn-a8c._.js.map +1 -0
  331. package/.next/server/chunks/[root-of-the-server]__0lix3ru._.js +3 -0
  332. package/.next/server/chunks/[root-of-the-server]__0lix3ru._.js.map +1 -0
  333. package/.next/server/chunks/{[root-of-the-server]__1kw2vct._.js → [root-of-the-server]__0n0myt9._.js} +2 -2
  334. package/.next/server/chunks/[root-of-the-server]__0pe1qih._.js +3 -0
  335. package/.next/server/chunks/[root-of-the-server]__0pe1qih._.js.map +1 -0
  336. package/.next/server/chunks/[root-of-the-server]__0pvi3ku._.js +105 -0
  337. package/.next/server/chunks/[root-of-the-server]__0pvi3ku._.js.map +1 -0
  338. package/.next/server/chunks/[root-of-the-server]__0rggulw._.js +3 -0
  339. package/.next/server/chunks/[root-of-the-server]__0rggulw._.js.map +1 -0
  340. package/.next/server/chunks/{[root-of-the-server]__076d4xm._.js → [root-of-the-server]__0s-j6z-._.js} +2 -2
  341. package/.next/server/chunks/[root-of-the-server]__0s8v5i-._.js +3 -0
  342. package/.next/server/chunks/[root-of-the-server]__0s8v5i-._.js.map +1 -0
  343. package/.next/server/chunks/{[root-of-the-server]__1e_o8h4._.js → [root-of-the-server]__0yaxn8g._.js} +2 -2
  344. package/.next/server/chunks/[root-of-the-server]__162_l0k._.js +3 -0
  345. package/.next/server/chunks/[root-of-the-server]__162_l0k._.js.map +1 -0
  346. package/.next/server/chunks/{[root-of-the-server]__1-1hfrj._.js → [root-of-the-server]__16smlkg._.js} +2 -2
  347. package/.next/server/chunks/{[root-of-the-server]__19w-7h9._.js → [root-of-the-server]__19yo85m._.js} +2 -2
  348. package/.next/server/chunks/[root-of-the-server]__1_qenei._.js +1 -1
  349. package/.next/server/chunks/[root-of-the-server]__1_qenei._.js.map +1 -1
  350. package/.next/server/chunks/[root-of-the-server]__1lxrobr._.js +3 -0
  351. package/.next/server/chunks/[root-of-the-server]__1lxrobr._.js.map +1 -0
  352. package/.next/server/chunks/{[root-of-the-server]__1rjgpbm._.js → [root-of-the-server]__1mnzsbh._.js} +2 -2
  353. package/.next/server/chunks/{[root-of-the-server]__06z8i6e._.js → [root-of-the-server]__1ntu_6r._.js} +2 -2
  354. package/.next/server/chunks/[root-of-the-server]__1ntu_6r._.js.map +1 -0
  355. package/.next/server/chunks/[root-of-the-server]__1p4ws5z._.js +3 -0
  356. package/.next/server/chunks/[root-of-the-server]__1p4ws5z._.js.map +1 -0
  357. package/.next/server/chunks/[root-of-the-server]__1pjwaan._.js +3 -0
  358. package/.next/server/chunks/{[root-of-the-server]__1af-wfk._.js.map → [root-of-the-server]__1pjwaan._.js.map} +1 -1
  359. package/.next/server/chunks/{[root-of-the-server]__1spley9._.js → [root-of-the-server]__1s0t8r3._.js} +2 -2
  360. package/.next/server/chunks/{[root-of-the-server]__1lt5cds._.js → [root-of-the-server]__1sd3l-d._.js} +2 -2
  361. package/.next/server/chunks/[root-of-the-server]__1skrybv._.js +3 -0
  362. package/.next/server/chunks/[root-of-the-server]__1skrybv._.js.map +1 -0
  363. package/.next/server/chunks/[root-of-the-server]__1vnine1._.js +105 -0
  364. package/.next/server/chunks/[root-of-the-server]__1vnine1._.js.map +1 -0
  365. package/.next/server/chunks/{[root-of-the-server]__05tx02j._.js → [root-of-the-server]__1vzxnjb._.js} +2 -2
  366. package/.next/server/chunks/{[root-of-the-server]__09j_-hj._.js → [root-of-the-server]__1zeys20._.js} +2 -2
  367. package/.next/server/chunks/_04byth9._.js +31 -26
  368. package/.next/server/chunks/_04byth9._.js.map +1 -1
  369. package/.next/server/chunks/_0safx0g._.js +3 -3
  370. package/.next/server/chunks/_0safx0g._.js.map +1 -1
  371. package/.next/server/chunks/_next-internal_server_app_api_docs_graph_route_actions_1nzoqf-.js +3 -0
  372. package/.next/server/chunks/_next-internal_server_app_api_docs_links_route_actions_1q-6jeg.js +3 -0
  373. package/.next/server/chunks/_next-internal_server_app_api_memory_entries_merge_route_actions_1rr-wwt.js +3 -0
  374. package/.next/server/chunks/_next-internal_server_app_api_memory_entries_merge_route_actions_1rr-wwt.js.map +1 -0
  375. package/.next/server/chunks/_next-internal_server_app_api_memory_entries_merge_undo_route_actions_0l6cy9q.js +3 -0
  376. package/.next/server/chunks/_next-internal_server_app_api_memory_entries_merge_undo_route_actions_0l6cy9q.js.map +1 -0
  377. package/.next/server/chunks/_next-internal_server_app_api_memory_health_dismiss_route_actions_0i7_n68.js +3 -0
  378. package/.next/server/chunks/_next-internal_server_app_api_memory_health_dismiss_route_actions_0i7_n68.js.map +1 -0
  379. package/.next/server/chunks/_next-internal_server_app_api_memory_health_route_actions_1lk-_5d.js +3 -0
  380. package/.next/server/chunks/_next-internal_server_app_api_memory_health_route_actions_1lk-_5d.js.map +1 -0
  381. package/.next/server/chunks/_next-internal_server_app_api_memory_restore_route_actions_0679kmo.js +3 -0
  382. package/.next/server/chunks/_next-internal_server_app_api_memory_restore_route_actions_0679kmo.js.map +1 -0
  383. package/.next/server/chunks/_next-internal_server_app_api_memory_versions_route_actions_13mix75.js +3 -0
  384. package/.next/server/chunks/_next-internal_server_app_api_memory_versions_route_actions_13mix75.js.map +1 -0
  385. package/.next/server/chunks/ssr/{0_nd_mermaid_dist_mermaid_core_mjs_0itmgkm._.js → 0_nd_mermaid_dist_mermaid_core_mjs_0y_edkq._.js} +2 -2
  386. package/.next/server/chunks/ssr/0_nd_mermaid_dist_mermaid_core_mjs_0y_edkq._.js.map +1 -0
  387. package/.next/server/chunks/ssr/{1u84_katex_dist_katex_mjs_08jn-sj._.js → 1u84_katex_dist_katex_mjs_0yg8zto._.js} +1 -1
  388. package/.next/server/chunks/ssr/1u84_katex_dist_katex_mjs_0yg8zto._.js.map +1 -0
  389. package/.next/server/chunks/ssr/[root-of-the-server]__1drc5py._.js +3 -0
  390. package/.next/server/chunks/ssr/[root-of-the-server]__1drc5py._.js.map +1 -0
  391. package/.next/server/chunks/ssr/_0-_04ia._.js +3 -0
  392. package/.next/server/chunks/ssr/_0-_04ia._.js.map +1 -0
  393. package/.next/server/chunks/ssr/_02ks8_a._.js +3 -0
  394. package/.next/server/chunks/ssr/_02ks8_a._.js.map +1 -0
  395. package/.next/server/chunks/ssr/_04xff_2._.js +1 -1
  396. package/.next/server/chunks/ssr/_04xff_2._.js.map +1 -1
  397. package/.next/server/chunks/ssr/_0696iog._.js +3 -0
  398. package/.next/server/chunks/ssr/_0696iog._.js.map +1 -0
  399. package/.next/server/chunks/ssr/_0cv0ugs._.js +3 -0
  400. package/.next/server/chunks/ssr/_0cv0ugs._.js.map +1 -0
  401. package/.next/server/chunks/ssr/_0ghj-vx._.js +3 -0
  402. package/.next/server/chunks/ssr/_0ghj-vx._.js.map +1 -0
  403. package/.next/server/chunks/ssr/{_0idb-vo._.js → _0kob2si._.js} +2 -2
  404. package/.next/server/chunks/ssr/_0kob2si._.js.map +1 -0
  405. package/.next/server/chunks/ssr/_0o8t6j-._.js +3 -0
  406. package/.next/server/chunks/ssr/_0o8t6j-._.js.map +1 -0
  407. package/.next/server/chunks/ssr/_128p7pz._.js +3 -0
  408. package/.next/server/chunks/ssr/_128p7pz._.js.map +1 -0
  409. package/.next/server/chunks/ssr/_19k2iz0._.js +2 -2
  410. package/.next/server/chunks/ssr/_19k2iz0._.js.map +1 -1
  411. package/.next/server/chunks/ssr/_1b82nz3._.js +3 -0
  412. package/.next/server/chunks/ssr/_1b82nz3._.js.map +1 -0
  413. package/.next/server/chunks/ssr/_1hm7p_8._.js +3 -0
  414. package/.next/server/chunks/ssr/_1hm7p_8._.js.map +1 -0
  415. package/.next/server/chunks/ssr/{_1s2ya35._.js → _1r_t_wi._.js} +1 -1
  416. package/.next/server/chunks/ssr/_1r_t_wi._.js.map +1 -0
  417. package/.next/server/chunks/ssr/_1s-2jub._.js +3 -0
  418. package/.next/server/chunks/ssr/_1s-2jub._.js.map +1 -0
  419. package/.next/server/chunks/ssr/_next-internal_server_app_(app)_graph_page_actions_041e9i7.js +3 -0
  420. package/.next/server/chunks/ssr/_next-internal_server_app_(app)_graph_page_actions_041e9i7.js.map +1 -0
  421. package/.next/server/chunks/ssr/{node_modules__pnpm_0s7j-tv._.js → node_modules__pnpm_00f4yhs._.js} +1 -1
  422. package/.next/server/chunks/ssr/node_modules__pnpm_00f4yhs._.js.map +1 -0
  423. package/.next/server/chunks/ssr/{node_modules__pnpm_1fry8_2._.js → node_modules__pnpm_035haet._.js} +1 -1
  424. package/.next/server/chunks/ssr/{node_modules__pnpm_0j7asqf._.js → node_modules__pnpm_03an60e._.js} +1 -1
  425. package/.next/server/chunks/ssr/{node_modules__pnpm_0eub17j._.js → node_modules__pnpm_03mp7qw._.js} +2 -2
  426. package/.next/server/chunks/ssr/{node_modules__pnpm_0_83tv8._.js → node_modules__pnpm_03mpmzx._.js} +1 -1
  427. package/.next/server/chunks/ssr/{node_modules__pnpm_0e55e7-._.js → node_modules__pnpm_06_8fr8._.js} +1 -1
  428. package/.next/server/chunks/ssr/{node_modules__pnpm_16bj927._.js → node_modules__pnpm_09nd7ia._.js} +1 -1
  429. package/.next/server/chunks/ssr/{node_modules__pnpm_1ch46nl._.js → node_modules__pnpm_0_e05ka._.js} +1 -1
  430. package/.next/server/chunks/ssr/node_modules__pnpm_0aoa6rg._.js +1 -1
  431. package/.next/server/chunks/ssr/node_modules__pnpm_0aoa6rg._.js.map +1 -1
  432. package/.next/server/chunks/ssr/{node_modules__pnpm_02p2rqs._.js → node_modules__pnpm_0iu4132._.js} +1 -1
  433. package/.next/server/chunks/ssr/{node_modules__pnpm_0iqb0_x._.js → node_modules__pnpm_0j_-le7._.js} +2 -2
  434. package/.next/server/chunks/ssr/node_modules__pnpm_0j_-le7._.js.map +1 -0
  435. package/.next/server/chunks/ssr/{node_modules__pnpm_0abf_e9._.js → node_modules__pnpm_0jampur._.js} +1 -1
  436. package/.next/server/chunks/ssr/{node_modules__pnpm_1hqh95z._.js → node_modules__pnpm_0lkvbt-._.js} +1 -1
  437. package/.next/server/chunks/ssr/{node_modules__pnpm_14j18h7._.js → node_modules__pnpm_0mqeoh-._.js} +2 -2
  438. package/.next/server/chunks/ssr/{node_modules__pnpm_0v_mhl7._.js → node_modules__pnpm_0oyo3yo._.js} +2 -2
  439. package/.next/server/chunks/ssr/{node_modules__pnpm_00lsytc._.js → node_modules__pnpm_0rq9x9q._.js} +2 -2
  440. package/.next/server/chunks/ssr/{node_modules__pnpm_0s63lee._.js → node_modules__pnpm_0tn5pg3._.js} +1 -1
  441. package/.next/server/chunks/ssr/{node_modules__pnpm_0_ajzll._.js → node_modules__pnpm_0x5wj-4._.js} +2 -2
  442. package/.next/server/chunks/ssr/{node_modules__pnpm_0rsfj9v._.js → node_modules__pnpm_0zz55xq._.js} +1 -1
  443. package/.next/server/chunks/ssr/node_modules__pnpm_0zz55xq._.js.map +1 -0
  444. package/.next/server/chunks/ssr/{node_modules__pnpm_1gpkxns._.js → node_modules__pnpm_139-v1i._.js} +1 -1
  445. package/.next/server/chunks/ssr/{node_modules__pnpm_1dc-yxd._.js → node_modules__pnpm_1i_chik._.js} +1 -1
  446. package/.next/server/chunks/ssr/{node_modules__pnpm_060kz-j._.js → node_modules__pnpm_1jgju12._.js} +1 -1
  447. package/.next/server/chunks/ssr/{node_modules__pnpm_0up4z7m._.js → node_modules__pnpm_1n9oeu0._.js} +1 -1
  448. package/.next/server/chunks/ssr/node_modules__pnpm_1oygi6o._.js +3 -0
  449. package/.next/server/chunks/ssr/node_modules__pnpm_1oygi6o._.js.map +1 -0
  450. package/.next/server/chunks/ssr/node_modules__pnpm_1ukodtk._.js +3 -0
  451. package/.next/server/chunks/ssr/node_modules__pnpm_1ukodtk._.js.map +1 -0
  452. package/.next/server/chunks/ssr/{node_modules__pnpm_05-p8zy._.js → node_modules__pnpm_1ws3ez9._.js} +1 -1
  453. package/.next/server/chunks/ssr/{node_modules__pnpm_0gp90ei._.js → node_modules__pnpm_1ydeqw6._.js} +1 -1
  454. package/.next/server/chunks/ssr/{node_modules__pnpm_0jlzk5z._.js → node_modules__pnpm_1zme4rg._.js} +1 -1
  455. package/.next/server/chunks/ssr/{node_modules__pnpm_1oaf50x._.js → node_modules__pnpm_1zum4yd._.js} +1 -1
  456. package/.next/server/chunks/ssr/{node_modules__pnpm_0vuao3_._.js → node_modules__pnpm_2045l51._.js} +1 -1
  457. package/.next/server/chunks/ssr/src_1e9kctc._.js +3 -0
  458. package/.next/server/chunks/ssr/src_1e9kctc._.js.map +1 -0
  459. package/.next/server/chunks/ssr/src_app_(app)_chat_page_tsx_0c3e4l4._.js +1 -1
  460. package/.next/server/chunks/ssr/src_app_(app)_chat_page_tsx_0c3e4l4._.js.map +1 -1
  461. package/.next/server/chunks/ssr/src_app_(app)_graph_page_tsx_1yudb7h._.js +3 -0
  462. package/.next/server/chunks/ssr/src_app_(app)_graph_page_tsx_1yudb7h._.js.map +1 -0
  463. package/.next/server/chunks/ssr/src_app_(app)_layout_tsx_1yu5hom._.js +1 -1
  464. package/.next/server/chunks/ssr/src_app_(app)_layout_tsx_1yu5hom._.js.map +1 -1
  465. package/.next/server/chunks/ssr/src_app_(app)_memory_page_tsx_19jhb1c._.js +3 -2
  466. package/.next/server/chunks/ssr/src_app_(app)_memory_page_tsx_19jhb1c._.js.map +1 -1
  467. package/.next/server/chunks/ssr/src_components_chat_ChatView_tsx_0h5j-e2._.js +1 -1
  468. package/.next/server/chunks/ssr/src_components_chat_ChatView_tsx_0h5j-e2._.js.map +1 -1
  469. package/.next/server/chunks/ssr/src_components_roadmap_RoadmapNodes_tsx_0up_ygp._.js +3 -0
  470. package/.next/server/chunks/ssr/src_components_roadmap_RoadmapNodes_tsx_0up_ygp._.js.map +1 -0
  471. package/.next/server/chunks/ssr/src_context_ChatContext_tsx_0lowp8p._.js +2 -2
  472. package/.next/server/chunks/ssr/src_context_ChatContext_tsx_0lowp8p._.js.map +1 -1
  473. package/.next/server/middleware-build-manifest.js +3 -3
  474. package/.next/server/next-font-manifest.js +1 -1
  475. package/.next/server/next-font-manifest.json +4 -0
  476. package/.next/server/pages/404.html +1 -1
  477. package/.next/server/pages/500.html +1 -1
  478. package/.next/server/prefetch-hints.json +19 -0
  479. package/.next/server/server-reference-manifest.js +1 -1
  480. package/.next/server/server-reference-manifest.json +1 -1
  481. package/.next/static/chunks/03tzhv775qv5m.js +1 -0
  482. package/.next/static/chunks/05rjl54wa6y43.js +1 -0
  483. package/.next/static/chunks/0_8ovyz2sbr3p.js +1 -0
  484. package/.next/static/chunks/0do6j4i1v_c6s.js +1 -0
  485. package/.next/static/chunks/0eax07u1ta6tp.css +1 -0
  486. package/.next/static/chunks/{3xqcluqa32mjv.js → 0h52yb69w77nq.js} +2 -2
  487. package/.next/static/chunks/0kb25y5g772mn.js +1 -0
  488. package/.next/static/chunks/0lfd3aomz4wv4.js +1 -0
  489. package/.next/static/chunks/0pmpdvev8bf-o.js +1 -0
  490. package/.next/static/chunks/0po8atank1p02.js +12 -0
  491. package/.next/static/chunks/{1hh2cxd9ndxf-.js → 10itjt9fhlzr1.js} +13 -13
  492. package/.next/static/chunks/11ou9nrpdg4qo.js +3 -0
  493. package/.next/static/chunks/1b9r_vdcewfu7.js +1 -0
  494. package/.next/static/chunks/1g7st54huk4if.js +1 -0
  495. package/.next/static/chunks/1l8fp2uesk29q.js +1 -0
  496. package/.next/static/chunks/1v63qs4kxxcfh.js +1 -0
  497. package/.next/static/chunks/36s2k2k_w-or8.js +1 -0
  498. package/.next/static/chunks/3ctec-7mnm19m.js +1 -0
  499. package/.next/static/chunks/3x43gd45wlhbl.js +1 -0
  500. package/.next/static/chunks/40diykjra8f9n.js +2107 -0
  501. package/README.md +16 -8
  502. package/package.json +1 -1
  503. package/.next/server/app/api/backlinks/route/app-paths-manifest.json +0 -3
  504. package/.next/server/app/api/backlinks/route.js +0 -8
  505. package/.next/server/app/api/backlinks/route.js.nft.json +0 -1
  506. package/.next/server/app/api/backlinks/route_client-reference-manifest.js +0 -3
  507. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0krkw4y._.js +0 -3
  508. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0l0xzie._.js +0 -3
  509. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0pgjvhr._.js +0 -3
  510. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0r-keh6._.js +0 -3
  511. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0tvfbjt._.js +0 -3
  512. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0u4b8_f._.js +0 -3
  513. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0ud37xh._.js +0 -3
  514. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0v3ar-t._.js +0 -3
  515. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0wk0b65._.js +0 -3
  516. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0wqkd2r._.js +0 -3
  517. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0wypotx._.js +0 -3
  518. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0yuq-9s._.js +0 -3
  519. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0z-e57x._.js +0 -3
  520. package/.next/server/chunks/11mp_@anthropic-ai_sdk_108ltz4._.js +0 -3
  521. package/.next/server/chunks/11mp_@anthropic-ai_sdk_10c_i6_._.js +0 -3
  522. package/.next/server/chunks/11mp_@anthropic-ai_sdk_14jogs8._.js +0 -3
  523. package/.next/server/chunks/11mp_@anthropic-ai_sdk_15u-n39._.js +0 -3
  524. package/.next/server/chunks/11mp_@anthropic-ai_sdk_194ahxu._.js +0 -3
  525. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1ahph2t._.js +0 -3
  526. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1ajy77y._.js +0 -3
  527. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1b57s9p._.js +0 -3
  528. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1brf2xn._.js +0 -3
  529. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1btfw2x._.js +0 -3
  530. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1cyy_q6._.js +0 -3
  531. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1fz9fev._.js +0 -3
  532. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1i_rz7h._.js +0 -3
  533. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1it8zsv._.js +0 -3
  534. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1jzusvd._.js +0 -3
  535. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1lfknr2._.js +0 -3
  536. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1mewd-3._.js +0 -3
  537. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1mkm4u_._.js +0 -3
  538. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1rggqq3._.js +0 -3
  539. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1rhjf1m._.js +0 -3
  540. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1s6ks8c._.js +0 -3
  541. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1u8z4hp._.js +0 -3
  542. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1vyy3_4._.js +0 -3
  543. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_036bvwf._.js +0 -3
  544. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_046taqd._.js +0 -3
  545. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0bxad5f._.js +0 -3
  546. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0g65abt._.js +0 -3
  547. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0pb9bu1._.js +0 -3
  548. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_120-cio._.js +0 -3
  549. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_13uyu_v._.js +0 -3
  550. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_13x2ww0._.js +0 -3
  551. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_17og64d._.js +0 -3
  552. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1e_sh4o._.js +0 -3
  553. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1ecuo9i._.js +0 -3
  554. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1go8d0m._.js +0 -3
  555. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1i13ryx._.js +0 -3
  556. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1jv_hid._.js +0 -3
  557. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1mh5mqk._.js +0 -3
  558. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1oq7e8u._.js +0 -3
  559. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1p-cq-p._.js +0 -3
  560. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1the3g0._.js +0 -3
  561. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1xubh-w._.js +0 -3
  562. package/.next/server/chunks/[root-of-the-server]__0jr_5eq._.js +0 -110
  563. package/.next/server/chunks/[root-of-the-server]__0jr_5eq._.js.map +0 -1
  564. package/.next/server/chunks/[root-of-the-server]__0p4w_o-._.js +0 -3
  565. package/.next/server/chunks/[root-of-the-server]__0p4w_o-._.js.map +0 -1
  566. package/.next/server/chunks/[root-of-the-server]__19rxcu4._.js +0 -110
  567. package/.next/server/chunks/[root-of-the-server]__19rxcu4._.js.map +0 -1
  568. package/.next/server/chunks/[root-of-the-server]__1af-wfk._.js +0 -3
  569. package/.next/server/chunks/[root-of-the-server]__1qd-ecl._.js +0 -110
  570. package/.next/server/chunks/[root-of-the-server]__1qd-ecl._.js.map +0 -1
  571. package/.next/server/chunks/_next-internal_server_app_api_backlinks_route_actions_1_58m09.js +0 -3
  572. package/.next/server/chunks/ssr/1x05_lucide-react_dist_esm_icons_triangle-alert_mjs_0ei-mpz._.js +0 -3
  573. package/.next/server/chunks/ssr/1x05_lucide-react_dist_esm_icons_triangle-alert_mjs_0ei-mpz._.js.map +0 -1
  574. package/.next/server/chunks/ssr/_0h91h9n._.js +0 -3
  575. package/.next/server/chunks/ssr/_0h91h9n._.js.map +0 -1
  576. package/.next/server/chunks/ssr/_0idb-vo._.js.map +0 -1
  577. package/.next/server/chunks/ssr/_0ip7sg0._.js +0 -3
  578. package/.next/server/chunks/ssr/_0ip7sg0._.js.map +0 -1
  579. package/.next/server/chunks/ssr/_0ks_bep._.js +0 -3
  580. package/.next/server/chunks/ssr/_0ks_bep._.js.map +0 -1
  581. package/.next/server/chunks/ssr/_0lqrpim._.js +0 -3
  582. package/.next/server/chunks/ssr/_0lqrpim._.js.map +0 -1
  583. package/.next/server/chunks/ssr/_0qp3gu7._.js +0 -3
  584. package/.next/server/chunks/ssr/_0qp3gu7._.js.map +0 -1
  585. package/.next/server/chunks/ssr/_197jl3g._.js +0 -3
  586. package/.next/server/chunks/ssr/_197jl3g._.js.map +0 -1
  587. package/.next/server/chunks/ssr/_1el478k._.js +0 -3
  588. package/.next/server/chunks/ssr/_1el478k._.js.map +0 -1
  589. package/.next/server/chunks/ssr/_1t76zdx._.js +0 -3
  590. package/.next/server/chunks/ssr/_1t76zdx._.js.map +0 -1
  591. package/.next/server/chunks/ssr/node_modules__pnpm_0al3nfy._.js +0 -3
  592. package/.next/server/chunks/ssr/node_modules__pnpm_0al3nfy._.js.map +0 -1
  593. package/.next/server/chunks/ssr/src_components_0eyr_zi._.js +0 -3
  594. package/.next/server/chunks/ssr/src_components_0eyr_zi._.js.map +0 -1
  595. package/.next/server/chunks/ssr/src_components_1s861m8._.js +0 -3
  596. package/.next/server/chunks/ssr/src_components_1s861m8._.js.map +0 -1
  597. package/.next/static/chunks/08sqjdq-43nbt.js +0 -1
  598. package/.next/static/chunks/09r4_4wr0aga3.js +0 -1
  599. package/.next/static/chunks/0mgifb98wbesa.js +0 -1
  600. package/.next/static/chunks/0xw_sa58zqv5s.js +0 -1
  601. package/.next/static/chunks/1-a3-6c_nce84.js +0 -1
  602. package/.next/static/chunks/149fj-mseo8q3.css +0 -1
  603. package/.next/static/chunks/1c11k-snzp541.js +0 -1
  604. package/.next/static/chunks/1n4_u3om7ye4z.js +0 -2107
  605. package/.next/static/chunks/1qhndyi2gdbkf.js +0 -1
  606. package/.next/static/chunks/1x40-5s54wd5m.js +0 -11
  607. package/.next/static/chunks/24u_rc2tbkhai.js +0 -3
  608. package/.next/static/chunks/30s090l71e1gs.js +0 -1
  609. package/.next/static/chunks/3t8px4aygy1s9.js +0 -1
  610. package/.next/static/chunks/44gr_v5092gwh.js +0 -1
  611. /package/.next/server/app/{api/backlinks/route → (app)/graph/page}/server-reference-manifest.json +0 -0
  612. /package/.next/server/app/{api/backlinks/route.js.map → (app)/graph/page.js.map} +0 -0
  613. /package/.next/server/app/api/{backlinks → docs/graph}/route/build-manifest.json +0 -0
  614. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_053zt3c._.js.map → 11mp_@anthropic-ai_sdk_013qeb4._.js.map} +0 -0
  615. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0_zx69c._.js.map → 11mp_@anthropic-ai_sdk_05ck8py._.js.map} +0 -0
  616. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0gvxfg3._.js.map → 11mp_@anthropic-ai_sdk_05w8m72._.js.map} +0 -0
  617. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0gx5t2l._.js.map → 11mp_@anthropic-ai_sdk_086oevc._.js.map} +0 -0
  618. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0krkw4y._.js.map → 11mp_@anthropic-ai_sdk_08rl0hf._.js.map} +0 -0
  619. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0l0xzie._.js.map → 11mp_@anthropic-ai_sdk_09ujrsu._.js.map} +0 -0
  620. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0pgjvhr._.js.map → 11mp_@anthropic-ai_sdk_0c3_7p7._.js.map} +0 -0
  621. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0r-keh6._.js.map → 11mp_@anthropic-ai_sdk_0cto43x._.js.map} +0 -0
  622. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0tvfbjt._.js.map → 11mp_@anthropic-ai_sdk_0fgisb_._.js.map} +0 -0
  623. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0u4b8_f._.js.map → 11mp_@anthropic-ai_sdk_0fy8wd3._.js.map} +0 -0
  624. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0ud37xh._.js.map → 11mp_@anthropic-ai_sdk_0fyvizf._.js.map} +0 -0
  625. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0v3ar-t._.js.map → 11mp_@anthropic-ai_sdk_0hg0i2g._.js.map} +0 -0
  626. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0wk0b65._.js.map → 11mp_@anthropic-ai_sdk_0i0sz05._.js.map} +0 -0
  627. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0wqkd2r._.js.map → 11mp_@anthropic-ai_sdk_0l0j9c6._.js.map} +0 -0
  628. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0wypotx._.js.map → 11mp_@anthropic-ai_sdk_0lcm61d._.js.map} +0 -0
  629. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0yuq-9s._.js.map → 11mp_@anthropic-ai_sdk_0qtva5j._.js.map} +0 -0
  630. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0z-e57x._.js.map → 11mp_@anthropic-ai_sdk_0r4fkdu._.js.map} +0 -0
  631. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_108ltz4._.js.map → 11mp_@anthropic-ai_sdk_0wbae0t._.js.map} +0 -0
  632. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_10c_i6_._.js.map → 11mp_@anthropic-ai_sdk_0wxyz1t._.js.map} +0 -0
  633. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_14jogs8._.js.map → 11mp_@anthropic-ai_sdk_0y2cods._.js.map} +0 -0
  634. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_15u-n39._.js.map → 11mp_@anthropic-ai_sdk_0zu0fj1._.js.map} +0 -0
  635. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_194ahxu._.js.map → 11mp_@anthropic-ai_sdk_0zxpgt0._.js.map} +0 -0
  636. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1ahph2t._.js.map → 11mp_@anthropic-ai_sdk_10_cxcd._.js.map} +0 -0
  637. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1ajy77y._.js.map → 11mp_@anthropic-ai_sdk_10gb7d1._.js.map} +0 -0
  638. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1b57s9p._.js.map → 11mp_@anthropic-ai_sdk_12q70bs._.js.map} +0 -0
  639. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1brf2xn._.js.map → 11mp_@anthropic-ai_sdk_149ltk3._.js.map} +0 -0
  640. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1btfw2x._.js.map → 11mp_@anthropic-ai_sdk_165_uiw._.js.map} +0 -0
  641. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1cyy_q6._.js.map → 11mp_@anthropic-ai_sdk_19w4zh6._.js.map} +0 -0
  642. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1fz9fev._.js.map → 11mp_@anthropic-ai_sdk_1adck-s._.js.map} +0 -0
  643. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1i_rz7h._.js.map → 11mp_@anthropic-ai_sdk_1c2dwoi._.js.map} +0 -0
  644. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1it8zsv._.js.map → 11mp_@anthropic-ai_sdk_1d9lw_2._.js.map} +0 -0
  645. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1jzusvd._.js.map → 11mp_@anthropic-ai_sdk_1db6a7p._.js.map} +0 -0
  646. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1lfknr2._.js.map → 11mp_@anthropic-ai_sdk_1h2f90s._.js.map} +0 -0
  647. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1mewd-3._.js.map → 11mp_@anthropic-ai_sdk_1k5_i1z._.js.map} +0 -0
  648. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1mkm4u_._.js.map → 11mp_@anthropic-ai_sdk_1p3mv6i._.js.map} +0 -0
  649. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1rggqq3._.js.map → 11mp_@anthropic-ai_sdk_1qoom5s._.js.map} +0 -0
  650. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1rhjf1m._.js.map → 11mp_@anthropic-ai_sdk_1qsbcbe._.js.map} +0 -0
  651. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1s6ks8c._.js.map → 11mp_@anthropic-ai_sdk_1rk0x59._.js.map} +0 -0
  652. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1u8z4hp._.js.map → 11mp_@anthropic-ai_sdk_1sd98mi._.js.map} +0 -0
  653. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1vyy3_4._.js.map → 11mp_@anthropic-ai_sdk_1sumqg8._.js.map} +0 -0
  654. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_036bvwf._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_018s_10._.js.map} +0 -0
  655. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_046taqd._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_08d6i7w._.js.map} +0 -0
  656. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_0bxad5f._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_09_fd9g._.js.map} +0 -0
  657. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_0g65abt._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_0eopml6._.js.map} +0 -0
  658. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_0pb9bu1._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_0f5epel._.js.map} +0 -0
  659. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_120-cio._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_0okfnhu._.js.map} +0 -0
  660. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_13uyu_v._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_0s8-ha8._.js.map} +0 -0
  661. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_13x2ww0._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_0ujs27r._.js.map} +0 -0
  662. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_17og64d._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_0uo7rs8._.js.map} +0 -0
  663. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_1e_sh4o._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_0vyq_2d._.js.map} +0 -0
  664. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_1ecuo9i._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_0w3js74._.js.map} +0 -0
  665. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_1go8d0m._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_0xa4-uq._.js.map} +0 -0
  666. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_1i13ryx._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_113y3so._.js.map} +0 -0
  667. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_1jv_hid._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_12qcr96._.js.map} +0 -0
  668. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_1mh5mqk._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_13ixdy8._.js.map} +0 -0
  669. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_1oq7e8u._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_1708vst._.js.map} +0 -0
  670. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_1p-cq-p._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_1_rdguq._.js.map} +0 -0
  671. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_1the3g0._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_1bgpe23._.js.map} +0 -0
  672. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_1xubh-w._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_1f-tphn._.js.map} +0 -0
  673. /package/.next/server/chunks/{[root-of-the-server]__00o3mbd._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_1h1pqdh._.js.map} +0 -0
  674. /package/.next/server/chunks/{[root-of-the-server]__06z8i6e._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_1hfj_1d._.js.map} +0 -0
  675. /package/.next/server/chunks/{[root-of-the-server]__1kw2vct._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_1ih2qzz._.js.map} +0 -0
  676. /package/.next/server/chunks/{_next-internal_server_app_api_backlinks_route_actions_1_58m09.js.map → 11mp_@anthropic-ai_sdk_index_mjs_1jatyl1._.js.map} +0 -0
  677. /package/.next/server/chunks/{ssr/0_nd_mermaid_dist_mermaid_core_mjs_0itmgkm._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_1v1zbha._.js.map} +0 -0
  678. /package/.next/server/chunks/{ssr/1u84_katex_dist_katex_mjs_08jn-sj._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_1vyqs5z._.js.map} +0 -0
  679. /package/.next/server/chunks/{[root-of-the-server]__0kuhhna._.js.map → [root-of-the-server]__00usbi3._.js.map} +0 -0
  680. /package/.next/server/chunks/{[root-of-the-server]__1gr4e22._.js.map → [root-of-the-server]__04cwur0._.js.map} +0 -0
  681. /package/.next/server/chunks/{[root-of-the-server]__06dfvb0._.js.map → [root-of-the-server]__04ri_ci._.js.map} +0 -0
  682. /package/.next/server/chunks/{ssr/_1s2ya35._.js.map → [root-of-the-server]__05-be3n._.js.map} +0 -0
  683. /package/.next/server/chunks/{[root-of-the-server]__09j_-hj._.js.map → [root-of-the-server]__0756_60._.js.map} +0 -0
  684. /package/.next/server/chunks/{[root-of-the-server]__1h5hb6u._.js.map → [root-of-the-server]__089ay-q._.js.map} +0 -0
  685. /package/.next/server/chunks/{[root-of-the-server]__15jhpgl._.js.map → [root-of-the-server]__0d4t4q6._.js.map} +0 -0
  686. /package/.next/server/chunks/{[root-of-the-server]__01n_hoh._.js.map → [root-of-the-server]__0dgwykw._.js.map} +0 -0
  687. /package/.next/server/chunks/{ssr/node_modules__pnpm_0iqb0_x._.js.map → [root-of-the-server]__0n0myt9._.js.map} +0 -0
  688. /package/.next/server/chunks/{[root-of-the-server]__076d4xm._.js.map → [root-of-the-server]__0s-j6z-._.js.map} +0 -0
  689. /package/.next/server/chunks/{[root-of-the-server]__1e_o8h4._.js.map → [root-of-the-server]__0yaxn8g._.js.map} +0 -0
  690. /package/.next/server/chunks/{[root-of-the-server]__1-1hfrj._.js.map → [root-of-the-server]__16smlkg._.js.map} +0 -0
  691. /package/.next/server/chunks/{[root-of-the-server]__19w-7h9._.js.map → [root-of-the-server]__19yo85m._.js.map} +0 -0
  692. /package/.next/server/chunks/{[root-of-the-server]__1rjgpbm._.js.map → [root-of-the-server]__1mnzsbh._.js.map} +0 -0
  693. /package/.next/server/chunks/{[root-of-the-server]__1spley9._.js.map → [root-of-the-server]__1s0t8r3._.js.map} +0 -0
  694. /package/.next/server/chunks/{[root-of-the-server]__1lt5cds._.js.map → [root-of-the-server]__1sd3l-d._.js.map} +0 -0
  695. /package/.next/server/chunks/{[root-of-the-server]__05tx02j._.js.map → [root-of-the-server]__1vzxnjb._.js.map} +0 -0
  696. /package/.next/server/chunks/{[root-of-the-server]__0uu9pgg._.js.map → [root-of-the-server]__1zeys20._.js.map} +0 -0
  697. /package/.next/server/chunks/{ssr/node_modules__pnpm_0rsfj9v._.js.map → _next-internal_server_app_api_docs_graph_route_actions_1nzoqf-.js.map} +0 -0
  698. /package/.next/server/chunks/{ssr/node_modules__pnpm_0s7j-tv._.js.map → _next-internal_server_app_api_docs_links_route_actions_1q-6jeg.js.map} +0 -0
  699. /package/.next/server/chunks/ssr/{node_modules__pnpm_1fry8_2._.js.map → node_modules__pnpm_035haet._.js.map} +0 -0
  700. /package/.next/server/chunks/ssr/{node_modules__pnpm_0j7asqf._.js.map → node_modules__pnpm_03an60e._.js.map} +0 -0
  701. /package/.next/server/chunks/ssr/{node_modules__pnpm_0eub17j._.js.map → node_modules__pnpm_03mp7qw._.js.map} +0 -0
  702. /package/.next/server/chunks/ssr/{node_modules__pnpm_0_83tv8._.js.map → node_modules__pnpm_03mpmzx._.js.map} +0 -0
  703. /package/.next/server/chunks/ssr/{node_modules__pnpm_0e55e7-._.js.map → node_modules__pnpm_06_8fr8._.js.map} +0 -0
  704. /package/.next/server/chunks/ssr/{node_modules__pnpm_16bj927._.js.map → node_modules__pnpm_09nd7ia._.js.map} +0 -0
  705. /package/.next/server/chunks/ssr/{node_modules__pnpm_1ch46nl._.js.map → node_modules__pnpm_0_e05ka._.js.map} +0 -0
  706. /package/.next/server/chunks/ssr/{node_modules__pnpm_02p2rqs._.js.map → node_modules__pnpm_0iu4132._.js.map} +0 -0
  707. /package/.next/server/chunks/ssr/{node_modules__pnpm_0abf_e9._.js.map → node_modules__pnpm_0jampur._.js.map} +0 -0
  708. /package/.next/server/chunks/ssr/{node_modules__pnpm_1hqh95z._.js.map → node_modules__pnpm_0lkvbt-._.js.map} +0 -0
  709. /package/.next/server/chunks/ssr/{node_modules__pnpm_14j18h7._.js.map → node_modules__pnpm_0mqeoh-._.js.map} +0 -0
  710. /package/.next/server/chunks/ssr/{node_modules__pnpm_0v_mhl7._.js.map → node_modules__pnpm_0oyo3yo._.js.map} +0 -0
  711. /package/.next/server/chunks/ssr/{node_modules__pnpm_00lsytc._.js.map → node_modules__pnpm_0rq9x9q._.js.map} +0 -0
  712. /package/.next/server/chunks/ssr/{node_modules__pnpm_0s63lee._.js.map → node_modules__pnpm_0tn5pg3._.js.map} +0 -0
  713. /package/.next/server/chunks/ssr/{node_modules__pnpm_0_ajzll._.js.map → node_modules__pnpm_0x5wj-4._.js.map} +0 -0
  714. /package/.next/server/chunks/ssr/{node_modules__pnpm_1gpkxns._.js.map → node_modules__pnpm_139-v1i._.js.map} +0 -0
  715. /package/.next/server/chunks/ssr/{node_modules__pnpm_1dc-yxd._.js.map → node_modules__pnpm_1i_chik._.js.map} +0 -0
  716. /package/.next/server/chunks/ssr/{node_modules__pnpm_060kz-j._.js.map → node_modules__pnpm_1jgju12._.js.map} +0 -0
  717. /package/.next/server/chunks/ssr/{node_modules__pnpm_0up4z7m._.js.map → node_modules__pnpm_1n9oeu0._.js.map} +0 -0
  718. /package/.next/server/chunks/ssr/{node_modules__pnpm_05-p8zy._.js.map → node_modules__pnpm_1ws3ez9._.js.map} +0 -0
  719. /package/.next/server/chunks/ssr/{node_modules__pnpm_0gp90ei._.js.map → node_modules__pnpm_1ydeqw6._.js.map} +0 -0
  720. /package/.next/server/chunks/ssr/{node_modules__pnpm_0jlzk5z._.js.map → node_modules__pnpm_1zme4rg._.js.map} +0 -0
  721. /package/.next/server/chunks/ssr/{node_modules__pnpm_1oaf50x._.js.map → node_modules__pnpm_1zum4yd._.js.map} +0 -0
  722. /package/.next/server/chunks/ssr/{node_modules__pnpm_0vuao3_._.js.map → node_modules__pnpm_2045l51._.js.map} +0 -0
  723. /package/.next/static/{qCiKQ9_g49vaoQ-Fewybk → P1gxTEpKVh-OOtIXC432U}/_buildManifest.js +0 -0
  724. /package/.next/static/{qCiKQ9_g49vaoQ-Fewybk → P1gxTEpKVh-OOtIXC432U}/_clientMiddlewareManifest.js +0 -0
  725. /package/.next/static/{qCiKQ9_g49vaoQ-Fewybk → P1gxTEpKVh-OOtIXC432U}/_ssgManifest.js +0 -0
@@ -1,3 +0,0 @@
1
- module.exports=[196265,a=>{"use strict";var b=Object.defineProperty,c=(a,c)=>b(a,"name",{value:c,configurable:!0});function d(a,b,{checkForDefaultPrevented:e=!0}={}){return c(function(c){if(a?.(c),!1===e||!c||!c.defaultPrevented)return b?.(c)},"handleEvent")}function e(a){throw Error("Cannot access document outside of the DOM")}function f(a){return"IFRAME"===a.tagName}c(d,"composeEventHandlers"),c(function(a){throw Error("Cannot access window outside of the DOM")},"getOwnerWindow"),c(e,"getOwnerDocument"),c(function a(b,c=!1){let{activeElement:d}=e(b);if(!d?.nodeName)return null;if(f(d)&&d.contentDocument)return a(d.contentDocument.body,c);if(c){let a=d.getAttribute("aria-activedescendant");if(a){let b=e(d).getElementById(a);if(b)return b}}return d},"getActiveElement"),c(f,"isFrame"),a.s(["composeEventHandlers",0,d])},777516,a=>{"use strict";a.s(["IS_DEVELOPMENT",0,!1])},691321,a=>{"use strict";var b=a.i(174897),c=a.i(662145),d=Object.defineProperty,e=(a,b)=>d(a,"name",{value:b,configurable:!0});function f(a,d=[]){let h=[];function i(d,f){let g=b.createContext(f);g.displayName=d+"Context";let i=h.length;h=[...h,f];let j=e(d=>{let{scope:e,children:f,...h}=d,j=e?.[a]?.[i]||g,k=b.useMemo(()=>h,Object.values(h));return(0,c.jsx)(j.Provider,{value:k,children:f})},"Provider");function k(c,e,h={}){let{optional:j=!1}=h,l=e?.[a]?.[i]||g,m=b.useContext(l);if(m)return m;if(void 0!==f)return f;if(!j)throw Error(`\`${c}\` must be used within \`${d}\``)}return j.displayName=d+"Provider",e(k,"useContext"),[j,k]}e(i,"createContext");let j=e(()=>{let c=h.map(a=>b.createContext(a));return e(function(d){let e=d?.[a]||c;return b.useMemo(()=>({[`__scope${a}`]:{...d,[a]:e}}),[d,e])},"useScope")},"createScope");return j.scopeName=a,[i,g(j,...d)]}function g(...a){let c=a[0];if(1===a.length)return c;let d=e(()=>{let d=a.map(a=>({useScope:a(),scopeName:a.scopeName}));return e(function(a){let e=d.reduce((b,{useScope:c,scopeName:d})=>{let e=c(a)[`__scope${d}`];return{...b,...e}},{});return b.useMemo(()=>({[`__scope${c.scopeName}`]:e}),[e])},"useComposedScopes")},"createScope");return d.scopeName=c.scopeName,d}e(function(a,d){let f=b.createContext(d);f.displayName=a+"Context";let g=e(a=>{let{children:d,...e}=a,g=b.useMemo(()=>e,Object.values(e));return(0,c.jsx)(f.Provider,{value:g,children:d})},"Provider");function h(c,e={}){let{optional:g=!1}=e,i=b.useContext(f);if(i)return i;if(void 0!==d)return d;if(!g)throw Error(`\`${c}\` must be used within \`${a}\``)}return g.displayName=a+"Provider",e(h,"useContext"),[g,h]},"createContext"),e(f,"createContextScope"),e(g,"composeContextScopes"),a.s(["createContextScope",0,f])},933877,a=>{"use strict";var b=a.i(174897),c=(a.i(662145),Object.defineProperty),d=b.createContext(void 0);function e(a){let c=b.useContext(d);return a||c||"ltr"}c(e,"name",{value:"useDirection",configurable:!0}),a.s(["useDirection",0,e])},635163,a=>{"use strict";var b=a.i(174897),c=a.i(967683),d=Object.defineProperty,e=b[" useId ".trim().toString()]||(()=>void 0),f=0;function g(a){let[d,g]=b.useState(e());return(0,c.useLayoutEffect)(()=>{a||g(a=>a??String(f++))},[a]),a||(d?`radix-${d}`:"")}d(g,"name",{value:"useId",configurable:!0}),a.s(["useId",0,g])},818920,a=>{"use strict";var b=a.i(174897),c=a.i(967683),d=Object.defineProperty,e=(a,b)=>d(a,"name",{value:b,configurable:!0});function f(a,c){return b.useReducer((a,b)=>c[a][b]??a,a)}e(f,"useStateMachine");var g=e(a=>{let{present:c,children:d}=a,e=h(c),f="function"==typeof d?d({present:e.isPresent}):b.Children.only(d),g=j(e.ref,l(f));return"function"==typeof d||e.isPresent?b.cloneElement(f,{ref:g}):null},"Presence");function h(a){let[d,g]=b.useState(),h=b.useRef(null),i=b.useRef(a),j=b.useRef("none"),l=b.useRef(void 0),[m,n]=f(a?"mounted":"unmounted",{mounted:{UNMOUNT:"unmounted",ANIMATION_OUT:"unmountSuspended"},unmountSuspended:{MOUNT:"mounted",ANIMATION_END:"unmounted"},unmounted:{MOUNT:"mounted"}});return b.useEffect(()=>{"mounted"===m?(j.current=l.current??k(h.current),l.current=void 0):j.current="none"},[m]),(0,c.useLayoutEffect)(()=>{let b=h.current,c=i.current;if(c!==a){let d=j.current,e=k(b);a?(l.current=e,n("MOUNT")):"none"===e||b?.display==="none"?n("UNMOUNT"):c&&d!==e?n("ANIMATION_OUT"):n("UNMOUNT"),i.current=a}},[a,n]),(0,c.useLayoutEffect)(()=>{if(d){let a,b=d.ownerDocument.defaultView??window,c=e(c=>{let e=k(h.current).includes(CSS.escape(c.animationName));if(c.target===d&&e&&(n("ANIMATION_END"),!i.current)){let c=d.style.animationFillMode;d.style.animationFillMode="forwards",a=b.setTimeout(()=>{"forwards"===d.style.animationFillMode&&(d.style.animationFillMode=c)})}},"handleAnimationEnd"),f=e(a=>{a.target===d&&(j.current=k(h.current))},"handleAnimationStart");return d.addEventListener("animationstart",f),d.addEventListener("animationcancel",c),d.addEventListener("animationend",c),()=>{b.clearTimeout(a),d.removeEventListener("animationstart",f),d.removeEventListener("animationcancel",c),d.removeEventListener("animationend",c)}}n("ANIMATION_END")},[d,n]),{isPresent:["mounted","unmountSuspended"].includes(m),ref:b.useCallback(a=>{if(a){let b=getComputedStyle(a);h.current=b,l.current=k(b)}else h.current=null;g(a)},[])}}function i(a,b){if("function"==typeof a)return a(b);null!=a&&(a.current=b)}function j(...a){let c=b.useRef(a);return c.current=a,b.useCallback(a=>{let b=c.current,d=!1,e=b.map(b=>{let c=i(b,a);return d||"function"!=typeof c||(d=!0),c});if(d)return()=>{for(let a=0;a<e.length;a++){let c=e[a];"function"==typeof c?c():i(b[a],null)}}},[])}function k(a){return a?.animationName||"none"}function l(a){let b=Object.getOwnPropertyDescriptor(a.props,"ref")?.get,c=b&&"isReactWarning"in b&&b.isReactWarning;return c?a.ref:(c=(b=Object.getOwnPropertyDescriptor(a,"ref")?.get)&&"isReactWarning"in b&&b.isReactWarning)?a.props.ref:a.props.ref||a.ref}e(h,"usePresence"),e(i,"setRef"),e(j,"useStableComposedRefs"),e(k,"getAnimationName"),e(l,"getElementRef"),a.s(["Presence",0,g])},436102,a=>{"use strict";var b=a.i(174897),c=a.i(41721),d=a.i(776692),e=a.i(662145),f=Object.defineProperty,g=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","select","span","svg","ul"].reduce((a,c)=>{let f=(0,d.createSlot)(`Primitive.${c}`),g=b.forwardRef((a,b)=>{let{asChild:d,...g}=a;return(0,e.jsx)(d?f:c,{...g,ref:b})});return g.displayName=`Primitive.${c}`,{...a,[c]:g}},{});function h(a,b){a&&c.flushSync(()=>a.dispatchEvent(b))}f(h,"name",{value:"dispatchDiscreteCustomEvent",configurable:!0}),a.s(["Primitive",0,g,"dispatchDiscreteCustomEvent",0,h])},133387,a=>{"use strict";var b=a.i(174897);function c(a){let c=b.useRef(a);return b.useEffect(()=>{c.current=a}),b.useMemo(()=>(...a)=>c.current?.(...a),[])}(0,Object.defineProperty)(c,"name",{value:"useCallbackRef",configurable:!0}),a.s(["useCallbackRef",0,c])},541151,a=>{"use strict";var b=a.i(174897),c=a.i(777516),d=a.i(967683),e=Object.defineProperty,f=b[" useEffectEvent ".trim().toString()],g=b[" useInsertionEffect ".trim().toString()];function h(a){if("function"==typeof f)return f(a);let c=b.useRef(()=>{throw Error("Cannot call an event handler while rendering.")});return"function"==typeof g?g(()=>{c.current=a}):(0,d.useLayoutEffect)(()=>{c.current=a}),b.useMemo(()=>(...a)=>c.current?.(...a),[])}e(h,"name",{value:"useEffectEvent",configurable:!0});var i=Object.defineProperty,j=(a,b)=>i(a,"name",{value:b,configurable:!0}),k=b[" useInsertionEffect ".trim().toString()]||d.useLayoutEffect;function l({prop:a,defaultProp:d,onChange:e=j(()=>{},"onChange"),caller:f}){let[g,h,i]=m({defaultProp:d,onChange:e}),k=void 0!==a,o=k?a:g;if(c.IS_DEVELOPMENT){let c=b.useRef(void 0!==a);b.useEffect(()=>{let a=c.current;if(a!==k){let b=k?"controlled":"uncontrolled";console.warn(`${f} is changing from ${a?"controlled":"uncontrolled"} to ${b}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`)}c.current=k},[k,f])}return[o,b.useCallback(b=>{if(k){let c=n(b)?b(a):b;c!==a&&i.current?.(c)}else h(b)},[k,a,h,i])]}function m({defaultProp:a,onChange:c}){let[d,e]=b.useState(a),f=b.useRef(d),g=b.useRef(c);return k(()=>{g.current=c},[c]),b.useEffect(()=>{f.current!==d&&(g.current?.(d),f.current=d)},[d,f]),[d,e,g]}function n(a){return"function"==typeof a}j(l,"useControllableState"),j(m,"useUncontrolledState"),j(n,"isFunction");var o=Symbol("RADIX:SYNC_STATE");j(function(a,d,e,f){let{prop:g,defaultProp:i,onChange:j,caller:k}=d,l=void 0!==g,m=h(j);if(c.IS_DEVELOPMENT){let a=b.useRef(void 0!==g);b.useEffect(()=>{let b=a.current;if(b!==l){let a=l?"controlled":"uncontrolled";console.warn(`${k} is changing from ${b?"controlled":"uncontrolled"} to ${a}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`)}a.current=l},[l,k])}let n=[{...e,state:i}];f&&n.push(f);let[p,q]=b.useReducer((b,c)=>{if(c.type===o)return{...b,state:c.state};let d=a(b,c);return l&&!Object.is(d.state,b.state)&&m(d.state),d},...n),r=p.state,s=b.useRef(r);b.useEffect(()=>{s.current!==r&&(s.current=r,l||m(r))},[r,s,l]);let t=b.useMemo(()=>void 0!==g?{...p,state:g}:p,[p,g]);return b.useEffect(()=>{l&&!Object.is(g,p.state)&&q({type:o,state:g})},[g,p.state,l]),[t,q]},"useControllableStateReducer"),a.s(["useControllableState",0,l],541151)},967683,a=>{"use strict";var b=a.i(174897),c=globalThis?.document?b.useLayoutEffect:()=>{};a.s(["useLayoutEffect",0,c])}];
2
-
3
- //# sourceMappingURL=node_modules__pnpm_0al3nfy._.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../node_modules/.pnpm/%40radix-ui%2Bprimitive%401.1.7/node_modules/%40radix-ui/primitive/src/primitive.tsx","../../../../node_modules/.pnpm/%40radix-ui%2Bprimitive%401.1.7/node_modules/%40radix-ui/primitive/src/internal/is-development.false.ts","../../../../node_modules/.pnpm/%40radix-ui%2Breact-context%401.2.2_%40types%2Breact%4019.3.0_react%4019.3.0/node_modules/%40radix-ui/react-context/src/create-context.tsx","../../../../node_modules/.pnpm/%40radix-ui%2Breact-direction%401.1.4_%40types%2Breact%4019.3.0_react%4019.3.0/node_modules/%40radix-ui/react-direction/src/direction.tsx","../../../../node_modules/.pnpm/%40radix-ui%2Breact-id%401.1.4_%40types%2Breact%4019.3.0_react%4019.3.0/node_modules/%40radix-ui/react-id/src/id.tsx","../../../../node_modules/.pnpm/%40radix-ui%2Breact-presence%401.1.10_%40types%2Breact-dom%4019.3.0_%40types%2Breact%4019.3.0__%40types%2Brea_2fe228634386b203c3622b9fd60e1034/node_modules/%40radix-ui/react-presence/src/presence.tsx","../../../../node_modules/.pnpm/%40radix-ui%2Breact-presence%401.1.10_%40types%2Breact-dom%4019.3.0_%40types%2Breact%4019.3.0__%40types%2Brea_2fe228634386b203c3622b9fd60e1034/node_modules/%40radix-ui/react-presence/src/use-state-machine.tsx","../../../../node_modules/.pnpm/%40radix-ui%2Breact-primitive%402.1.10_%40types%2Breact-dom%4019.3.0_%40types%2Breact%4019.3.0__%40types%2Bre_f83f88542c24ef44463bf36336741c4c/node_modules/%40radix-ui/react-primitive/src/primitive.tsx","../../../../node_modules/.pnpm/%40radix-ui%2Breact-use-callback-ref%401.1.4_%40types%2Breact%4019.3.0_react%4019.3.0/node_modules/%40radix-ui/react-use-callback-ref/src/use-callback-ref.tsx","../../../../node_modules/.pnpm/%40radix-ui%2Breact-use-effect-event%400.0.5_%40types%2Breact%4019.3.0_react%4019.3.0/node_modules/%40radix-ui/react-use-effect-event/dist/index.mjs","../../../../node_modules/.pnpm/%40radix-ui%2Breact-use-controllable-state%401.2.6_%40types%2Breact%4019.3.0_react%4019.3.0/node_modules/%40radix-ui/react-use-controllable-state/dist/index.mjs","../../../../node_modules/.pnpm/%40radix-ui%2Breact-use-layout-effect%401.1.4_%40types%2Breact%4019.3.0_react%4019.3.0/node_modules/%40radix-ui/react-use-layout-effect/src/use-layout-effect.tsx"],"sourcesContent":["/* eslint-disable no-restricted-properties */\n\n/* eslint-disable no-restricted-globals */\nexport const canUseDOM = !!(\n typeof window !== 'undefined' &&\n window.document &&\n window.document.createElement\n);\n/* eslint-enable no-restricted-globals */\n\nexport function composeEventHandlers<E extends { defaultPrevented: boolean }>(\n originalEventHandler?: (event: E) => void,\n ourEventHandler?: (event: E) => void,\n { checkForDefaultPrevented = true } = {},\n) {\n return function handleEvent(event: E) {\n originalEventHandler?.(event);\n\n if (checkForDefaultPrevented === false || !event || !event.defaultPrevented) {\n return ourEventHandler?.(event);\n }\n };\n}\n\nexport function getOwnerWindow(element: Node | null | undefined) {\n if (!canUseDOM) {\n throw new Error('Cannot access window outside of the DOM');\n }\n // eslint-disable-next-line no-restricted-globals\n return element?.ownerDocument?.defaultView ?? window;\n}\n\nexport function getOwnerDocument(element: Node | null | undefined) {\n if (!canUseDOM) {\n throw new Error('Cannot access document outside of the DOM');\n }\n // eslint-disable-next-line no-restricted-globals\n return element?.ownerDocument ?? document;\n}\n\n/**\n * Lifted from https://github.com/ariakit/ariakit/blob/main/packages/ariakit-core/src/utils/dom.ts#L37\n * MIT License, Copyright (c) AriaKit.\n */\nexport function getActiveElement(\n node: Node | null | undefined,\n activeDescendant = false,\n): HTMLElement | null {\n const { activeElement } = getOwnerDocument(node);\n if (!activeElement?.nodeName) {\n // `activeElement` might be an empty object if we're interacting with elements\n // inside of an iframe.\n return null;\n }\n\n if (isFrame(activeElement) && activeElement.contentDocument) {\n return getActiveElement(activeElement.contentDocument.body, activeDescendant);\n }\n\n if (activeDescendant) {\n const id = activeElement.getAttribute('aria-activedescendant');\n if (id) {\n const element = getOwnerDocument(activeElement).getElementById(id);\n if (element) {\n return element;\n }\n }\n }\n\n return activeElement as HTMLElement | null;\n}\n\nexport function isFrame(element: Element): element is HTMLIFrameElement {\n return element.tagName === 'IFRAME';\n}\n","export const IS_DEVELOPMENT = false;\n","import * as React from 'react';\n\ntype ContextProvider<ContextValueType extends object | null> = React.FC<\n ContextValueType & {\n children: React.ReactNode;\n }\n>;\n\ninterface UseAssertedContext<ContextValueType extends object | null> {\n (consumerName: string): ContextValueType;\n}\n\ninterface UseContext<ContextValueType extends object | null> {\n (consumerName: string): ContextValueType;\n (consumerName: string, options: { optional: true }): ContextValueType | undefined;\n}\n\nfunction createContext<ContextValueType extends object | null>(\n rootComponentName: string,\n): readonly [ContextProvider<ContextValueType>, UseContext<ContextValueType>];\nfunction createContext<ContextValueType extends object | null>(\n rootComponentName: string,\n defaultContext: ContextValueType,\n): readonly [ContextProvider<ContextValueType>, UseAssertedContext<ContextValueType>];\n\n/* @__NO_SIDE_EFFECTS__ */ function createContext<ContextValueType extends object | null>(\n rootComponentName: string,\n defaultContext?: ContextValueType,\n): readonly [ContextProvider<ContextValueType>, UseContext<ContextValueType>] {\n const Context = React.createContext<ContextValueType | undefined>(defaultContext);\n Context.displayName = rootComponentName + 'Context';\n\n const Provider: ContextProvider<ContextValueType> = (props) => {\n const { children, ...context } = props;\n // Only re-memoize when prop values change\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const value = React.useMemo(() => context, Object.values(context)) as ContextValueType;\n return <Context.Provider value={value}>{children}</Context.Provider>;\n };\n\n Provider.displayName = rootComponentName + 'Provider';\n\n function useContext(consumerName: string): ContextValueType;\n function useContext(\n consumerName: string,\n options: { optional: true },\n ): ContextValueType | undefined;\n\n function useContext(\n consumerName: string,\n options: { optional?: boolean } = {},\n ): ContextValueType | undefined {\n const { optional = false } = options;\n const context = React.useContext(Context);\n if (context) return context;\n if (defaultContext !== undefined) return defaultContext;\n if (optional) return undefined;\n // if a defaultContext wasn't specified, it's a required context.\n throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n }\n\n return [Provider, useContext];\n}\n\n/* -------------------------------------------------------------------------------------------------\n * createContextScope\n * -----------------------------------------------------------------------------------------------*/\n\ntype Scope<C = any> = { [scopeName: string]: React.Context<C>[] } | undefined;\ntype ScopeHook = (scope: Scope) => { [__scopeProp: string]: Scope };\ninterface CreateScope {\n scopeName: string;\n (): ScopeHook;\n}\n\ntype ScopedContextProvider<ContextValueType extends object | null> = React.FC<\n ContextValueType & {\n scope: Scope<ContextValueType>;\n children: React.ReactNode;\n }\n>;\n\ninterface UseScopedContext<ContextValueType extends object | null> {\n (consumerName: string, scope: Scope<ContextValueType | undefined>): ContextValueType;\n (\n consumerName: string,\n scope: Scope<ContextValueType | undefined>,\n options: { optional?: true },\n ): ContextValueType | undefined;\n}\n\ninterface UseAssertedScopedContext<ContextValueType extends object | null> {\n (consumerName: string, scope: Scope<ContextValueType | undefined>): ContextValueType;\n}\n\ninterface CreateScopedContext {\n <ContextValueType extends object | null>(\n rootComponentName: string,\n ): readonly [ScopedContextProvider<ContextValueType>, UseScopedContext<ContextValueType>];\n <ContextValueType extends object | null>(\n rootComponentName: string,\n defaultContext: ContextValueType,\n ): readonly [ScopedContextProvider<ContextValueType>, UseAssertedScopedContext<ContextValueType>];\n}\n\n/* @__NO_SIDE_EFFECTS__ */ function createContextScope(\n scopeName: string,\n createContextScopeDeps: CreateScope[] = [],\n): readonly [CreateScopedContext, CreateScope] {\n let defaultContexts: any[] = [];\n\n /* -----------------------------------------------------------------------------------------------\n * createContext\n * ---------------------------------------------------------------------------------------------*/\n\n function createContext<ContextValueType extends object | null>(\n rootComponentName: string,\n defaultContext?: ContextValueType,\n ) {\n const BaseContext = React.createContext<ContextValueType | undefined>(defaultContext);\n BaseContext.displayName = rootComponentName + 'Context';\n const index = defaultContexts.length;\n defaultContexts = [...defaultContexts, defaultContext];\n\n const Provider: ScopedContextProvider<ContextValueType> = (props) => {\n const { scope, children, ...context } = props;\n const Context = scope?.[scopeName]?.[index] || BaseContext;\n // Only re-memoize when prop values change\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const value = React.useMemo(() => context, Object.values(context)) as ContextValueType;\n return <Context.Provider value={value}>{children}</Context.Provider>;\n };\n\n Provider.displayName = rootComponentName + 'Provider';\n\n function useContext(\n consumerName: string,\n scope: Scope<ContextValueType | undefined>,\n ): ContextValueType;\n function useContext(\n consumerName: string,\n scope: Scope<ContextValueType | undefined>,\n options: { optional: true },\n ): ContextValueType | undefined;\n\n function useContext(\n consumerName: string,\n scope: Scope<ContextValueType | undefined>,\n options: { optional?: boolean } = {},\n ): ContextValueType | undefined {\n const { optional = false } = options;\n const Context = scope?.[scopeName]?.[index] || BaseContext;\n const context = React.useContext(Context);\n if (context) return context;\n if (defaultContext !== undefined) return defaultContext;\n if (optional) return undefined;\n // if a defaultContext wasn't specified, it's a required context.\n throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n }\n\n return [Provider, useContext] as const;\n }\n\n /* -----------------------------------------------------------------------------------------------\n * createScope\n * ---------------------------------------------------------------------------------------------*/\n\n const createScope: CreateScope = () => {\n const scopeContexts = defaultContexts.map((defaultContext) => {\n return React.createContext(defaultContext);\n });\n return function useScope(scope: Scope) {\n const contexts = scope?.[scopeName] || scopeContexts;\n return React.useMemo(\n () => ({ [`__scope${scopeName}`]: { ...scope, [scopeName]: contexts } }),\n [scope, contexts],\n );\n };\n };\n\n createScope.scopeName = scopeName;\n return [createContext, composeContextScopes(createScope, ...createContextScopeDeps)] as const;\n}\n\n/* -------------------------------------------------------------------------------------------------\n * composeContextScopes\n * -----------------------------------------------------------------------------------------------*/\n\nfunction composeContextScopes(...scopes: [CreateScope, ...CreateScope[]]): CreateScope {\n const baseScope = scopes[0];\n if (scopes.length === 1) return baseScope;\n\n const createScope: CreateScope = () => {\n const scopeHooks = scopes.map((createScope) => ({\n useScope: createScope(),\n scopeName: createScope.scopeName,\n }));\n\n return function useComposedScopes(overrideScopes) {\n const nextScopes = scopeHooks.reduce((nextScopes, { useScope, scopeName }) => {\n // We are calling a hook inside a callback which React warns against to avoid inconsistent\n // renders, however, scoping doesn't have render side effects so we ignore the rule.\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const scopeProps = useScope(overrideScopes);\n const currentScope = scopeProps[`__scope${scopeName}`];\n return { ...nextScopes, ...currentScope };\n }, {});\n\n return React.useMemo(() => ({ [`__scope${baseScope.scopeName}`]: nextScopes }), [nextScopes]);\n };\n };\n\n createScope.scopeName = baseScope.scopeName;\n return createScope;\n}\n\n/* -----------------------------------------------------------------------------------------------*/\n\nexport { createContext, createContextScope };\nexport type {\n CreateScope,\n CreateScopedContext,\n Scope,\n UseAssertedContext,\n UseAssertedScopedContext,\n UseContext,\n UseScopedContext,\n};\n","import * as React from 'react';\n\ntype Direction = 'ltr' | 'rtl';\nconst DirectionContext = React.createContext<Direction | undefined>(undefined);\n\n/* -------------------------------------------------------------------------------------------------\n * Direction\n * -----------------------------------------------------------------------------------------------*/\n\ninterface DirectionProviderProps {\n children?: React.ReactNode;\n dir: Direction;\n}\nconst DirectionProvider: React.FC<DirectionProviderProps> = (props) => {\n const { dir, children } = props;\n return <DirectionContext.Provider value={dir}>{children}</DirectionContext.Provider>;\n};\n\n/* -----------------------------------------------------------------------------------------------*/\n\nfunction useDirection(localDir?: Direction) {\n const globalDir = React.useContext(DirectionContext);\n return localDir || globalDir || 'ltr';\n}\n\nconst Provider = DirectionProvider;\n\nexport {\n useDirection,\n //\n Provider,\n //\n DirectionProvider,\n};\n","import * as React from 'react';\nimport { useLayoutEffect } from '@radix-ui/react-use-layout-effect';\n\n// We spaces with `.trim().toString()` to prevent bundlers from trying to `import { useId } from 'react';`\nconst useReactId = (React as any)[' useId '.trim().toString()] || (() => undefined);\nlet count = 0;\n\nfunction useId(deterministicId?: string): string {\n const [id, setId] = React.useState<string | undefined>(useReactId());\n // React versions older than 18 will have client-side ids only.\n useLayoutEffect(() => {\n if (!deterministicId) setId((reactId) => reactId ?? String(count++));\n }, [deterministicId]);\n return deterministicId || (id ? `radix-${id}` : '');\n}\n\nexport { useId };\n","import * as React from 'react';\nimport { useLayoutEffect } from '@radix-ui/react-use-layout-effect';\nimport { useStateMachine } from './use-state-machine';\n\ninterface PresenceProps {\n children: React.ReactElement | ((props: { present: boolean }) => React.ReactElement);\n present: boolean;\n}\n\nconst Presence: React.FC<PresenceProps> = (props) => {\n const { present, children } = props;\n const presence = usePresence(present);\n\n const child = (\n typeof children === 'function'\n ? children({ present: presence.isPresent })\n : React.Children.only(children)\n ) as React.ReactElement<{ ref?: React.Ref<HTMLElement> }>;\n\n const ref = useStableComposedRefs(presence.ref, getElementRef(child));\n const forceMount = typeof children === 'function';\n return forceMount || presence.isPresent ? React.cloneElement(child, { ref }) : null;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * usePresence\n * -----------------------------------------------------------------------------------------------*/\n\nfunction usePresence(present: boolean) {\n const [node, setNode] = React.useState<HTMLElement>();\n const stylesRef = React.useRef<CSSStyleDeclaration | null>(null);\n const prevPresentRef = React.useRef(present);\n const prevAnimationNameRef = React.useRef<string>('none');\n const mountAnimationNameRef = React.useRef<string | undefined>(undefined);\n const initialState = present ? 'mounted' : 'unmounted';\n const [state, send] = useStateMachine(initialState, {\n mounted: {\n UNMOUNT: 'unmounted',\n ANIMATION_OUT: 'unmountSuspended',\n },\n unmountSuspended: {\n MOUNT: 'mounted',\n ANIMATION_END: 'unmounted',\n },\n unmounted: {\n MOUNT: 'mounted',\n },\n });\n\n React.useEffect(() => {\n if (state === 'mounted') {\n // Use the animation name captured during the layout phase (or the ref\n // callback on first mount). By the time this passive effect runs,\n // sibling effects like react-remove-scroll and DismissableLayer may have\n // dirtied body styles, so re-reading from the live CSSStyleDeclaration\n // here would force an expensive synchronous style recalculation.\n // See: https://github.com/radix-ui/primitives/issues/1634\n prevAnimationNameRef.current =\n mountAnimationNameRef.current ?? getAnimationName(stylesRef.current);\n mountAnimationNameRef.current = undefined;\n } else {\n prevAnimationNameRef.current = 'none';\n }\n }, [state]);\n\n useLayoutEffect(() => {\n const styles = stylesRef.current;\n const wasPresent = prevPresentRef.current;\n const hasPresentChanged = wasPresent !== present;\n\n if (hasPresentChanged) {\n const prevAnimationName = prevAnimationNameRef.current;\n const currentAnimationName = getAnimationName(styles);\n\n if (present) {\n // Capture the animation name now, while styles are still \"clean\"\n // (before sibling passive effects dirty the body). The later passive\n // effect will read from this ref instead of the live\n // CSSStyleDeclaration, avoiding a forced style recalculation.\n mountAnimationNameRef.current = currentAnimationName;\n send('MOUNT');\n } else if (currentAnimationName === 'none' || styles?.display === 'none') {\n // If there is no exit animation or the element is hidden, animations won't run\n // so we unmount instantly\n send('UNMOUNT');\n } else {\n /**\n * When `present` changes to `false`, we check changes to animation-name to\n * determine whether an animation has started. We chose this approach (reading\n * computed styles) because there is no `animationrun` event and `animationstart`\n * fires after `animation-delay` has expired which would be too late.\n */\n const isAnimating = prevAnimationName !== currentAnimationName;\n\n if (wasPresent && isAnimating) {\n send('ANIMATION_OUT');\n } else {\n send('UNMOUNT');\n }\n }\n\n prevPresentRef.current = present;\n }\n }, [present, send]);\n\n useLayoutEffect(() => {\n if (node) {\n let timeoutId: number;\n const ownerWindow = node.ownerDocument.defaultView ?? window;\n /**\n * Triggering an ANIMATION_OUT during an ANIMATION_IN will fire an `animationcancel`\n * event for ANIMATION_IN after we have entered `unmountSuspended` state. So, we\n * make sure we only trigger ANIMATION_END for the currently active animation.\n */\n const handleAnimationEnd = (event: AnimationEvent) => {\n const currentAnimationName = getAnimationName(stylesRef.current);\n // The event.animationName is unescaped for CSS syntax,\n // so we need to escape it to compare with the animationName computed from the style.\n const isCurrentAnimation = currentAnimationName.includes(CSS.escape(event.animationName));\n if (event.target === node && isCurrentAnimation) {\n // With React 18 concurrency this update is applied a frame after the\n // animation ends, creating a flash of visible content. By setting the\n // animation fill mode to \"forwards\", we force the node to keep the\n // styles of the last keyframe, removing the flash.\n //\n // Previously we flushed the update via ReactDom.flushSync, but with\n // exit animations this resulted in the node being removed from the\n // DOM before the synthetic animationEnd event was dispatched, meaning\n // user-provided event handlers would not be called.\n // https://github.com/radix-ui/primitives/pull/1849\n send('ANIMATION_END');\n if (!prevPresentRef.current) {\n const currentFillMode = node.style.animationFillMode;\n node.style.animationFillMode = 'forwards';\n // Reset the style after the node had time to unmount (for cases\n // where the component chooses not to unmount). Doing this any\n // sooner than `setTimeout` (e.g. with `requestAnimationFrame`)\n // still causes a flash.\n timeoutId = ownerWindow.setTimeout(() => {\n if (node.style.animationFillMode === 'forwards') {\n node.style.animationFillMode = currentFillMode;\n }\n });\n }\n }\n };\n const handleAnimationStart = (event: AnimationEvent) => {\n if (event.target === node) {\n // if animation occurred, store its name as the previous animation.\n prevAnimationNameRef.current = getAnimationName(stylesRef.current);\n }\n };\n node.addEventListener('animationstart', handleAnimationStart);\n node.addEventListener('animationcancel', handleAnimationEnd);\n node.addEventListener('animationend', handleAnimationEnd);\n return () => {\n ownerWindow.clearTimeout(timeoutId);\n node.removeEventListener('animationstart', handleAnimationStart);\n node.removeEventListener('animationcancel', handleAnimationEnd);\n node.removeEventListener('animationend', handleAnimationEnd);\n };\n } else {\n // Transition to the unmounted state if the node is removed prematurely.\n // We avoid doing so during cleanup as the node may change but still exist.\n send('ANIMATION_END');\n }\n }, [node, send]);\n\n return {\n isPresent: ['mounted', 'unmountSuspended'].includes(state),\n ref: React.useCallback((node: HTMLElement) => {\n if (node) {\n const styles = getComputedStyle(node);\n stylesRef.current = styles;\n // Eagerly read the animation name while styles are clean. Ref\n // callbacks fire during the commit phase, before any passive effects\n // can dirty body styles. This cached value is consumed by the passive\n // effect that records prevAnimationNameRef, letting it skip a\n // redundant (and expensive) live-style read.\n mountAnimationNameRef.current = getAnimationName(styles);\n } else {\n stylesRef.current = null;\n }\n setNode(node);\n }, []),\n };\n}\n\n/* -----------------------------------------------------------------------------------------------*/\n\ntype PossibleRef<T> = React.Ref<T> | undefined;\n\nfunction setRef<T>(ref: PossibleRef<T>, value: T | null) {\n if (typeof ref === 'function') {\n return ref(value);\n } else if (ref !== null && ref !== undefined) {\n ref.current = value;\n }\n}\n\n/**\n * Unlike `useComposedRefs`, the returned callback never changes identity, even\n * when the composed refs do. This matters in React 19: when a callback ref's\n * identity changes between renders, React detaches the previous ref (calls it\n * with `null`) and attaches the new one on every commit. Because `Presence`\n * calls `setNode` from its own ref, an unstable consumer ref would otherwise\n * cause React to re-run that update on every commit, resulting in a \"Maximum\n * update depth exceeded\" loop.\n *\n * The latest refs are always read at attach/detach time, so the most recent\n * consumer ref still receives the node when it mounts or unmounts.\n *\n * @see https://github.com/radix-ui/primitives/issues/3664\n */\nfunction useStableComposedRefs<T>(...refs: PossibleRef<T>[]): React.RefCallback<T> {\n // Keep the latest refs without changing the callback identity. Assigning during render is\n // safe here because we only ever read `.current` later (at commit time, in the ref callback).\n const refsRef = React.useRef(refs);\n refsRef.current = refs;\n\n return React.useCallback((node: T | null) => {\n const currentRefs = refsRef.current;\n let hasCleanup = false;\n const cleanups = currentRefs.map((ref) => {\n const cleanup = setRef(ref, node);\n if (!hasCleanup && typeof cleanup === 'function') {\n hasCleanup = true;\n }\n return cleanup;\n });\n\n if (hasCleanup) {\n return () => {\n for (let i = 0; i < cleanups.length; i++) {\n const cleanup = cleanups[i];\n if (typeof cleanup === 'function') {\n cleanup();\n } else {\n setRef(currentRefs[i], null);\n }\n }\n };\n }\n }, []);\n}\n\nfunction getAnimationName(styles: CSSStyleDeclaration | null) {\n return styles?.animationName || 'none';\n}\n\n// Before React 19 accessing `element.props.ref` will throw a warning and suggest using `element.ref`\n// After React 19 accessing `element.ref` does the opposite.\n// https://github.com/facebook/react/pull/28348\n//\n// Access the ref using the method that doesn't yield a warning.\nfunction getElementRef(element: React.ReactElement<{ ref?: React.Ref<unknown> }>) {\n // React <=18 in DEV\n let getter = Object.getOwnPropertyDescriptor(element.props, 'ref')?.get;\n let mayWarn = getter && 'isReactWarning' in getter && getter.isReactWarning;\n if (mayWarn) {\n return (element as any).ref;\n }\n\n // React 19 in DEV\n getter = Object.getOwnPropertyDescriptor(element, 'ref')?.get;\n mayWarn = getter && 'isReactWarning' in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.props.ref;\n }\n\n // Not DEV\n return element.props.ref || (element as any).ref;\n}\n\nconst Root = Presence;\n\nexport {\n Presence,\n //\n Root,\n};\nexport type { PresenceProps };\n","import * as React from 'react';\n\ntype Machine<S> = { [k: string]: { [k: string]: S } };\ntype MachineState<T> = keyof T;\ntype MachineEvent<T> = keyof UnionToIntersection<T[keyof T]>;\n\n// \uD83E\uDD2F https://fettblog.eu/typescript-union-to-intersection/\ntype UnionToIntersection<T> = (T extends any ? (x: T) => any : never) extends (x: infer R) => any\n ? R\n : never;\n\nexport function useStateMachine<M>(\n initialState: MachineState<M>,\n machine: M & Machine<MachineState<M>>,\n) {\n return React.useReducer((state: MachineState<M>, event: MachineEvent<M>): MachineState<M> => {\n const nextState = (machine[state] as any)[event];\n return nextState ?? state;\n }, initialState);\n}\n","import * as React from 'react';\nimport * as ReactDOM from 'react-dom';\nimport { createSlot } from '@radix-ui/react-slot';\n\ndeclare module 'react' {\n interface CSSProperties {\n [varName: `--radix-${string}`]: string | number | undefined | null;\n }\n}\n\nconst NODES = [\n 'a',\n 'button',\n 'div',\n 'form',\n 'h2',\n 'h3',\n 'img',\n 'input',\n 'label',\n 'li',\n 'nav',\n 'ol',\n 'p',\n 'select',\n 'span',\n 'svg',\n 'ul',\n] as const;\n\ntype Primitives = { [E in (typeof NODES)[number]]: PrimitiveForwardRefComponent<E> };\ntype PrimitivePropsWithRef<E extends React.ElementType> = React.ComponentPropsWithRef<E> & {\n asChild?: boolean;\n};\n\ninterface PrimitiveForwardRefComponent<\n E extends React.ElementType,\n> extends React.ForwardRefExoticComponent<PrimitivePropsWithRef<E>> {}\n\n/* -------------------------------------------------------------------------------------------------\n * Primitive\n * -----------------------------------------------------------------------------------------------*/\n\n/* @__NO_SIDE_EFFECTS__ */ const Primitive = NODES.reduce((primitive, node) => {\n const Slot = createSlot(`Primitive.${node}`);\n const Node = React.forwardRef((props: PrimitivePropsWithRef<typeof node>, forwardedRef: any) => {\n const { asChild, ...primitiveProps } = props;\n const Comp: any = asChild ? Slot : node;\n\n if (typeof window !== 'undefined') {\n (window as any)[Symbol.for('radix-ui')] = true;\n }\n\n return <Comp {...primitiveProps} ref={forwardedRef} />;\n });\n\n Node.displayName = `Primitive.${node}`;\n\n return { ...primitive, [node]: Node };\n}, {} as Primitives);\n\n/* -------------------------------------------------------------------------------------------------\n * Utils\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * Flush custom event dispatch\n * https://github.com/radix-ui/primitives/pull/1378\n *\n * React batches *all* event handlers since version 18, this introduces certain considerations when using custom event types.\n *\n * Internally, React prioritises events in the following order:\n * - discrete\n * - continuous\n * - default\n *\n * https://github.com/facebook/react/blob/a8a4742f1c54493df00da648a3f9d26e3db9c8b5/packages/react-dom/src/events/ReactDOMEventListener.js#L294-L350\n *\n * `discrete` is an important distinction as updates within these events are applied immediately.\n * React however, is not able to infer the priority of custom event types due to how they are detected internally.\n * Because of this, it's possible for updates from custom events to be unexpectedly batched when\n * dispatched by another `discrete` event.\n *\n * In order to ensure that updates from custom events are applied predictably, we need to manually flush the batch.\n * This utility should be used when dispatching a custom event from within another `discrete` event, this utility\n * is not necessary when dispatching known event types, or if dispatching a custom type inside a non-discrete event.\n * For example:\n *\n * dispatching a known click \uD83D\uDC4E\n * target.dispatchEvent(new Event(\u2018click\u2019))\n *\n * dispatching a custom type within a non-discrete event \uD83D\uDC4E\n * onScroll={(event) => event.target.dispatchEvent(new CustomEvent(\u2018customType\u2019))}\n *\n * dispatching a custom type within a `discrete` event \uD83D\uDC4D\n * onPointerDown={(event) => dispatchDiscreteCustomEvent(event.target, new CustomEvent(\u2018customType\u2019))}\n *\n * Note: though React classifies `focus`, `focusin` and `focusout` events as `discrete`, it's not recommended to use\n * this utility with them. This is because it's possible for those handlers to be called implicitly during render\n * e.g. when focus is within a component as it is unmounted, or when managing focus on mount.\n */\n\nfunction dispatchDiscreteCustomEvent<E extends CustomEvent>(target: E['target'], event: E) {\n if (target) ReactDOM.flushSync(() => target.dispatchEvent(event));\n}\n\n/* -----------------------------------------------------------------------------------------------*/\n\nconst Root = Primitive;\n\nexport {\n Primitive,\n //\n Root,\n //\n dispatchDiscreteCustomEvent,\n};\nexport type { PrimitivePropsWithRef };\n","import * as React from 'react';\n\n/**\n * A custom hook that converts a callback to a ref to avoid triggering re-renders when passed as a\n * prop or avoid re-executing effects when passed as a dependency\n */\nfunction useCallbackRef<T extends (...args: any[]) => any>(callback: T | undefined): T {\n const callbackRef = React.useRef(callback);\n\n React.useEffect(() => {\n callbackRef.current = callback;\n });\n\n // https://github.com/facebook/react/issues/19240\n return React.useMemo(() => ((...args) => callbackRef.current?.(...args)) as T, []);\n}\n\nexport { useCallbackRef };\n","var __defProp = Object.defineProperty;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\n\n// src/use-effect-event.tsx\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nimport * as React from \"react\";\nvar useReactEffectEvent = React[\" useEffectEvent \".trim().toString()];\nvar useReactInsertionEffect = React[\" useInsertionEffect \".trim().toString()];\nfunction useEffectEvent(callback) {\n if (typeof useReactEffectEvent === \"function\") {\n return useReactEffectEvent(callback);\n }\n const ref = React.useRef(() => {\n throw new Error(\"Cannot call an event handler while rendering.\");\n });\n if (typeof useReactInsertionEffect === \"function\") {\n useReactInsertionEffect(() => {\n ref.current = callback;\n });\n } else {\n useLayoutEffect(() => {\n ref.current = callback;\n });\n }\n return React.useMemo(() => ((...args) => ref.current?.(...args)), []);\n}\n__name(useEffectEvent, \"useEffectEvent\");\nexport {\n useEffectEvent\n};\n//# sourceMappingURL=index.mjs.map\n","var __defProp = Object.defineProperty;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\n\n// src/use-controllable-state.tsx\nimport * as React from \"react\";\nimport { IS_DEVELOPMENT } from \"@radix-ui/primitive/is-development\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nvar useInsertionEffect = React[\" useInsertionEffect \".trim().toString()] || useLayoutEffect;\nfunction useControllableState({\n prop,\n defaultProp,\n onChange = /* @__PURE__ */ __name(() => {\n }, \"onChange\"),\n caller\n}) {\n const [uncontrolledProp, setUncontrolledProp, onChangeRef] = useUncontrolledState({\n defaultProp,\n onChange\n });\n const isControlled = prop !== void 0;\n const value = isControlled ? prop : uncontrolledProp;\n if (IS_DEVELOPMENT) {\n const isControlledRef = React.useRef(prop !== void 0);\n React.useEffect(() => {\n const wasControlled = isControlledRef.current;\n if (wasControlled !== isControlled) {\n const from = wasControlled ? \"controlled\" : \"uncontrolled\";\n const to = isControlled ? \"controlled\" : \"uncontrolled\";\n console.warn(\n `${caller} is changing from ${from} to ${to}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`\n );\n }\n isControlledRef.current = isControlled;\n }, [isControlled, caller]);\n }\n const setValue = React.useCallback(\n (nextValue) => {\n if (isControlled) {\n const value2 = isFunction(nextValue) ? nextValue(prop) : nextValue;\n if (value2 !== prop) {\n onChangeRef.current?.(value2);\n }\n } else {\n setUncontrolledProp(nextValue);\n }\n },\n [isControlled, prop, setUncontrolledProp, onChangeRef]\n );\n return [value, setValue];\n}\n__name(useControllableState, \"useControllableState\");\nfunction useUncontrolledState({\n defaultProp,\n onChange\n}) {\n const [value, setValue] = React.useState(defaultProp);\n const prevValueRef = React.useRef(value);\n const onChangeRef = React.useRef(onChange);\n useInsertionEffect(() => {\n onChangeRef.current = onChange;\n }, [onChange]);\n React.useEffect(() => {\n if (prevValueRef.current !== value) {\n onChangeRef.current?.(value);\n prevValueRef.current = value;\n }\n }, [value, prevValueRef]);\n return [value, setValue, onChangeRef];\n}\n__name(useUncontrolledState, \"useUncontrolledState\");\nfunction isFunction(value) {\n return typeof value === \"function\";\n}\n__name(isFunction, \"isFunction\");\n\n// src/use-controllable-state-reducer.tsx\nimport * as React2 from \"react\";\nimport { IS_DEVELOPMENT as IS_DEVELOPMENT2 } from \"@radix-ui/primitive/is-development\";\nimport { useEffectEvent } from \"@radix-ui/react-use-effect-event\";\nvar SYNC_STATE = Symbol(\"RADIX:SYNC_STATE\");\nfunction useControllableStateReducer(reducer, userArgs, initialArg, init) {\n const { prop: controlledState, defaultProp, onChange: onChangeProp, caller } = userArgs;\n const isControlled = controlledState !== void 0;\n const onChange = useEffectEvent(onChangeProp);\n if (IS_DEVELOPMENT2) {\n const isControlledRef = React2.useRef(controlledState !== void 0);\n React2.useEffect(() => {\n const wasControlled = isControlledRef.current;\n if (wasControlled !== isControlled) {\n const from = wasControlled ? \"controlled\" : \"uncontrolled\";\n const to = isControlled ? \"controlled\" : \"uncontrolled\";\n console.warn(\n `${caller} is changing from ${from} to ${to}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`\n );\n }\n isControlledRef.current = isControlled;\n }, [isControlled, caller]);\n }\n const args = [{ ...initialArg, state: defaultProp }];\n if (init) {\n args.push(init);\n }\n const [internalState, dispatch] = React2.useReducer(\n (state2, action) => {\n if (action.type === SYNC_STATE) {\n return { ...state2, state: action.state };\n }\n const next = reducer(state2, action);\n if (isControlled && !Object.is(next.state, state2.state)) {\n onChange(next.state);\n }\n return next;\n },\n ...args\n );\n const uncontrolledState = internalState.state;\n const prevValueRef = React2.useRef(uncontrolledState);\n React2.useEffect(() => {\n if (prevValueRef.current !== uncontrolledState) {\n prevValueRef.current = uncontrolledState;\n if (!isControlled) {\n onChange(uncontrolledState);\n }\n }\n }, [uncontrolledState, prevValueRef, isControlled]);\n const state = React2.useMemo(() => {\n const isControlled2 = controlledState !== void 0;\n if (isControlled2) {\n return { ...internalState, state: controlledState };\n }\n return internalState;\n }, [internalState, controlledState]);\n React2.useEffect(() => {\n if (isControlled && !Object.is(controlledState, internalState.state)) {\n dispatch({ type: SYNC_STATE, state: controlledState });\n }\n }, [controlledState, internalState.state, isControlled]);\n return [state, dispatch];\n}\n__name(useControllableStateReducer, \"useControllableStateReducer\");\nexport {\n useControllableState,\n useControllableStateReducer\n};\n//# sourceMappingURL=index.mjs.map\n","import * as React from 'react';\n\n/**\n * On the server, React emits a warning when calling `useLayoutEffect`.\n * This is because neither `useLayoutEffect` nor `useEffect` run on the server.\n * We use this safe version which suppresses the warning by replacing it with a noop on the server.\n *\n * See: https://reactjs.org/docs/hooks-reference.html#uselayouteffect\n */\nconst useLayoutEffect = globalThis?.document ? React.useLayoutEffect : () => {};\n\nexport { useLayoutEffect };\n"],"names":["createContext","useContext","createScope","nextScopes","React","node","__defProp","Object","defineProperty","__name","target","value","configurable","useReactEffectEvent","__TURBOPACK__imported__module__174897__1","trim","toString","useReactInsertionEffect","useEffectEvent","callback","ref","useRef","Error","current","useMemo","args","useLayoutEffect"],"mappings":"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","ignoreList":[9,10]}
@@ -1,3 +0,0 @@
1
- module.exports=[815122,a=>{"use strict";var b=a.i(662145),c=a.i(795667),d=a.i(108280),e=a.i(368114),f=a.i(685698),g=a.i(598984);let h={running:"Agent working","needs-answer":"Agent needs you",review:"Plan to review"};a.s(["AgentDot",0,function({attach:a}){let c=(0,f.useItemAgent)(a);return c?(0,b.jsx)(g.StatusMarker,{status:c.status,label:h[c.status]}):null},"AgentMark",0,function({attach:a,className:g}){let i=(0,f.useItemAgent)(a),{show:j}=(0,f.useChats)();if(!i)return null;let k=h[i.status];return(0,b.jsxs)("button",{type:"button",onClick:a=>{a.stopPropagation(),j(i.chatId)},title:`${k} \xb7 open chat`,"aria-label":`${k}, open chat`,className:(0,e.cn)("nodrag inline-flex shrink-0 items-center gap-1 rounded-full border px-1.5 py-px font-mono text-[10px] leading-4 animate-fade-in transition-colors duration-(--duration-fast)","running"===i.status&&"border-accent/50 text-accent hover:bg-accent/10","needs-answer"===i.status&&"border-amber/50 text-amber hover:bg-amber/10","review"===i.status&&"border-accent/50 bg-accent/10 text-accent hover:bg-accent/20",g),children:["running"===i.status?(0,b.jsx)(d.Loader2,{className:"size-3 animate-spin","aria-hidden":!0}):(0,b.jsx)(c.Bot,{className:"size-3","aria-hidden":!0}),k]})}])},618940,a=>{"use strict";var b=a.i(662145),c=a.i(365465),d=a.i(152716),e=a.i(340933),f=a.i(425404),g=a.i(368114),h=a.i(581040),i=a.i(453161),j=a.i(815122),k=a.i(685698);let l=[d.Position.Top,d.Position.Right,d.Position.Bottom,d.Position.Left];function m(){return(0,b.jsxs)(b.Fragment,{children:[l.map(a=>(0,b.jsx)(c.Handle,{id:a,type:"source",position:a,isConnectable:!1,className:"opacity-0"},a)),l.map(a=>(0,b.jsx)(c.Handle,{id:`${a}-t`,type:"target",position:a,isConnectable:!1,className:"opacity-0"},`${a}-t`))]})}let n={"in-progress":"Active",paused:"Paused",done:"Done",planned:"Planned"};function o({status:a,className:c}){return(0,b.jsxs)("span",{title:n[a],"aria-label":n[a],className:(0,g.cn)("relative inline-flex h-2 w-2 shrink-0",c),children:["in-progress"===a&&(0,b.jsx)("span",{className:"absolute inset-0 animate-ping rounded-full bg-accent/60"}),(0,b.jsx)("span",{className:(0,g.cn)("relative h-full w-full rounded-full","done"===a&&"bg-teal","in-progress"===a&&"bg-accent","planned"===a&&"border border-muted","paused"===a&&"bg-muted")})]})}let p={done:"bg-teal","in-progress":"bg-amber",review:"bg-accent",blocked:"bg-danger",paused:"bg-muted/60",todo:"bg-border2",cancelled:"bg-border"};function q({statuses:a,className:c}){if(!a?.length)return null;let d=a.filter(a=>"done"===a).length;return(0,b.jsx)("div",{className:(0,g.cn)("flex h-1.5 min-w-0 flex-1 gap-0.5",c),title:`${d}/${a.length} tasks done`,children:a.map((a,c)=>(0,b.jsx)("span",{className:(0,g.cn)("h-full flex-1 rounded-[1px]",p[a])},c))})}function r({value:a,total:c,className:d}){let e=2*Math.PI*14,f=c>0?a/c:0;return(0,b.jsxs)("span",{className:(0,g.cn)("relative inline-flex h-9 w-9 shrink-0 items-center justify-center",d),title:`${a}/${c} tasks done`,children:[(0,b.jsxs)("svg",{viewBox:"0 0 36 36",className:"absolute inset-0 -rotate-90",children:[(0,b.jsx)("circle",{cx:"18",cy:"18",r:14,fill:"none",strokeWidth:"3",className:"stroke-border"}),(0,b.jsx)("circle",{cx:"18",cy:"18",r:14,fill:"none",strokeWidth:"3",stroke:"currentColor",strokeLinecap:"round",strokeDasharray:e,strokeDashoffset:e*(1-f)})]}),(0,b.jsx)("span",{className:"font-mono text-[9px] text-txt",children:Math.round(100*f)})]})}function s({due:a,state:c}){return a?(0,b.jsxs)("span",{className:(0,g.cn)("font-mono text-[10px]","overdue"===c?"text-danger":"soon"===c?"text-amber":"text-muted"),children:["Due ",(0,h.formatDay)(a)]}):null}function t({data:a}){let c=a.taskDue;return c&&c.overdue>0?(0,b.jsxs)("span",{className:"font-mono text-[10px] text-danger",children:[c.overdue," ",1===c.overdue?"task":"tasks"," overdue"]}):a.item.due?(0,b.jsx)(s,{due:a.item.due,state:a.dueState}):c?.next?(0,b.jsxs)("span",{className:(0,g.cn)("font-mono text-[10px]",a.taskDueSoon?"text-amber":"text-muted"),children:["Next due ",(0,h.formatDay)(c.next)]}):null}function u({drift:a}){return a?.length?(0,b.jsx)("span",{title:a.join("\n"),className:"absolute -left-2 -top-2 rounded-full bg-bg p-0.5 text-amber",children:(0,b.jsx)(e.AlertTriangle,{className:"h-3.5 w-3.5"})}):null}a.s(["DueChip",0,s,"STATUS_LABEL",0,n,"SegmentedProgress",0,q,"StatusDot",0,o,"StatusPill",0,function({status:a}){return(0,b.jsxs)("span",{className:(0,g.cn)("inline-flex items-center gap-1.5 rounded-full border px-2 py-0.5 font-mono text-[10px] uppercase tracking-wider","done"===a&&"border-teal/40 text-teal","in-progress"===a&&"border-accent/50 text-accent","planned"===a&&"border-dashed border-border2 text-muted","paused"===a&&"border-border2 text-muted"),children:[(0,b.jsx)(o,{status:a,className:"h-1.5 w-1.5"}),n[a]]})},"TASK_STATUS_BG",0,p,"nodeTypes",0,{horizon:function({data:a,selected:c}){let{item:d,progress:e,epics:f,chapter:h}=a,j=d.status;return(0,b.jsxs)("div",{style:{width:i.HORIZON_W},className:(0,g.cn)("relative flex items-center gap-3 rounded-xl border bg-surface px-3.5 py-3 transition-shadow duration-(--duration-base)","in-progress"===j&&"border-accent/60 shadow-[0_0_0_1px_rgb(var(--rgb-accent)/0.25),0_10px_30px_-12px_rgb(var(--rgb-accent)/0.6)]","done"===j&&"border-teal/40","planned"===j&&"border-dashed border-border2","paused"===j&&"border-border2 opacity-75",c&&"ring-2 ring-accent/60 ring-offset-2 ring-offset-bg"),children:[(0,b.jsx)(m,{}),(0,b.jsx)("span",{className:(0,g.cn)("font-mono text-2xl font-semibold leading-none tabular-nums","in-progress"===j?"text-accent":"done"===j?"text-teal":"text-muted"),children:h?String(h).padStart(2,"0"):"··"}),(0,b.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,b.jsx)("p",{className:"text-xs font-semibold uppercase leading-snug tracking-wider text-txt",children:d.title}),(0,b.jsxs)("p",{className:"mt-1 flex flex-wrap items-center gap-x-2 font-mono text-[10px] text-muted",children:[f&&f.total>0&&(0,b.jsxs)("span",{children:[f.done,"/",f.total," epics"]}),(0,b.jsx)(s,{due:d.due,state:a.dueState})]})]}),e&&(0,b.jsx)(r,{value:e.done,total:e.total,className:"done"===j?"text-teal":"text-accent"}),(0,b.jsx)(u,{drift:a.drift})]})},feature:function({data:a,selected:c}){let{item:d,taskStatuses:e,nextTaskId:h}=a,l=(0,k.useItemAgent)({kind:"epic",id:d.id}),n=!!a.drift?.length,p=c&&"ring-2 ring-accent/60 ring-offset-2 ring-offset-bg";if("done"===d.status)return(0,b.jsxs)("div",{style:{width:i.FEATURE_W},className:(0,g.cn)("group relative flex items-center gap-2 rounded-lg border border-border bg-surface/60 px-3 py-2 hover:border-teal/40",p),children:[(0,b.jsx)(m,{}),(0,b.jsx)(f.Check,{className:"h-3.5 w-3.5 shrink-0 text-teal",strokeWidth:3}),(0,b.jsx)("p",{className:"min-w-0 flex-1 truncate text-[13px] text-muted group-hover:text-txt",title:d.title,children:d.title}),l?(0,b.jsx)(j.AgentMark,{attach:{kind:"epic",id:d.id}}):a.progress&&(0,b.jsxs)("span",{className:"font-mono text-[10px] text-muted",children:[a.progress.done,"/",a.progress.total]}),(0,b.jsx)(u,{drift:a.drift})]});let r="in-progress"===d.status;return(0,b.jsxs)("div",{style:{width:i.FEATURE_W},className:(0,g.cn)("relative flex flex-col gap-1.5 rounded-lg border px-3 py-2.5 transition-shadow duration-(--duration-base)",r?"border-accent/50 bg-surface shadow-[0_8px_24px_-10px_rgb(var(--rgb-accent)/0.55)]":"border-dashed border-border2 bg-bg hover:border-muted","paused"===d.status&&"opacity-70",p),children:[(0,b.jsx)(m,{}),r&&(0,b.jsx)("span",{className:(0,g.cn)("absolute -inset-y-px -left-px w-[3px] rounded-l-lg",n?"bg-amber":"bg-accent")}),(0,b.jsxs)("div",{className:"flex items-center justify-between font-mono text-[10px]",children:[(0,b.jsx)("span",{className:"text-muted",children:d.id}),l?(0,b.jsx)(j.AgentMark,{attach:{kind:"epic",id:d.id}}):r?(0,b.jsxs)("span",{className:"flex items-center gap-1.5 uppercase tracking-wider text-accent",children:[(0,b.jsx)(o,{status:"in-progress",className:"h-1.5 w-1.5"}),"Live"]}):(0,b.jsx)("span",{className:"uppercase tracking-wider text-muted",children:d.tasks.length?`${d.tasks.length} tasks`:"No tasks yet"})]}),(0,b.jsx)("p",{className:(0,g.cn)("line-clamp-2 text-[13px] leading-snug",r?"font-medium text-txt":"text-txt/80"),title:d.title,children:d.title}),e&&e.length>0&&(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)(q,{statuses:e}),(0,b.jsx)("span",{className:"shrink-0 font-mono text-[10px] text-muted",children:r&&h?(0,b.jsxs)(b.Fragment,{children:["next ",(0,b.jsx)("span",{className:"text-txt",children:h})]}):`${e.filter(a=>"done"===a).length}/${e.length}`})]}),(0,b.jsx)(t,{data:a}),(0,b.jsx)(u,{drift:a.drift})]})}}])},581040,452696,453161,a=>{"use strict";function b(a,b,c){let d;return a?"done"===b?"done":a<c?"overdue":7>=Math.round(((d=a=>Date.UTC(+a.slice(0,4),a.slice(5,7)-1,+a.slice(8,10)))(a)-d(c))/864e5)?"soon":"ok":null}function c(a){return a.every(a=>"done"===a)?"done":a.some(a=>"other"!==a)?"in-progress":"planned"}a.s(["dueState",0,b,"localToday",0,function(a=new Date){let b=a=>String(a).padStart(2,"0");return`${a.getFullYear()}-${b(a.getMonth()+1)}-${b(a.getDate())}`},"roadmapHealth",0,function(a,d,e){let f={},g=[];for(let c of a)c.due&&"overdue"===b(c.due,c.status,e)&&g.push({id:c.id,kind:"overdue",message:`${c.id} "${c.title}" is overdue since ${c.due}`});let h=new Set(a.filter(a=>null===a.parent).map(a=>a.id));for(let h of a){if(null===h.parent)continue;let a=h.tasks.filter(a=>!(a in d));a.length&&g.push({id:h.id,kind:"missing-task",message:`${h.id} links unknown task ${a.join(", ")}`});let i=h.tasks.filter(a=>a in d&&"cancelled"!==d[a].status),j="done"===h.status||"paused"===h.status?[]:function(a,c,d,e){let f=[];for(let a of c){let b=d[a];"done"!==b.status&&b.due&&b.due<e&&f.push(`${a} overdue since ${b.due}`),"blocked"===b.status&&f.push(`${a} blocked`)}let g=c.some(a=>["done","in-progress","review"].includes(d[a].status));return a.due&&"soon"===b(a.due,a.status,e)&&!g&&f.push(`due ${a.due}, nothing started`),f}(h,i,d,e);if(j.length&&g.push({id:h.id,kind:"at-risk",message:`${h.id} "${h.title}" at risk: ${j.join("; ")}`}),!i.length)continue;let k=i.map(a=>"done"===d[a].status?"done":"in-progress"===d[a].status||"review"===d[a].status?"in-progress":"other");f[h.id]={done:k.filter(a=>"done"===a).length,total:i.length};let l=c(k);if(l!==h.status&&("paused"!==h.status||"done"===l)){let a=i.filter(a=>"done"!==d[a].status);g.push({id:h.id,kind:"status-mismatch",message:"done"===l?`${h.id} "${h.title}": all tasks done but status is ${h.status}`:`${h.id} "${h.title}" is ${h.status} but tasks ${a.join(", ")} are not done`,suggestedStatus:l})}}for(let b of a){if(!h.has(b.id))continue;let d=a.filter(a=>a.parent===b.id);if(!d.length)continue;let e=d.map(a=>"done"===a.status?"done":"in-progress"===a.status?"in-progress":"other");f[b.id]=d.reduce((a,b)=>{let c=f[b.id]??{done:+("done"===b.status),total:1};return{done:a.done+c.done,total:a.total+c.total}},{done:0,total:0});let i=c(e);i!==b.status&&("paused"!==b.status||"done"===i)&&g.push({id:b.id,kind:"status-mismatch",message:`${b.id} "${b.title}" is ${b.status} but its features say ${i}`,suggestedStatus:i})}return{progress:f,drift:g}},"taskDueSummary",0,function(a,b,c){let d=a.map(a=>b[a]).filter(a=>a&&a.due&&"done"!==a.status&&"cancelled"!==a.status).map(a=>a.due);if(!d.length)return null;let e=d.filter(a=>a>=c).sort();return{overdue:d.length-e.length,next:e[0]??null}}],452696);function d(a){let b=new Set(a.filter(a=>null===a.parent).map(a=>a.id));return a.filter(a=>null===a.parent||!b.has(a.parent)).sort((a,b)=>a.order-b.order)}function e(a,b){return a.filter(a=>a.parent===b).sort((a,b)=>a.order-b.order)}a.s(["FEATURE_W",0,220,"HORIZON_W",0,260,"arrangePositions",0,function(a,b){let c={},f=0;for(let g of d(a)){let d=b(g.id),h=null===g.parent?e(a,g.id):[],i=[[],[]],j=[0,0];for(let a of h){let c=j[0]<=j[1]?0:1;i[c].push({id:a.id,y:j[c]}),j[c]+=b(a.id)+14}let k=j.map(a=>Math.max(0,a-14)),l=d/2,m=k.map(a=>l-a/2),n=f-Math.min(0,...m);c[g.id]={x:0,y:n},i.forEach((a,b)=>{let d=20+(0===b?1:-1)*340;for(let{id:e,y:f}of a)c[e]={x:d,y:n+m[b]+f}}),f=n+Math.max(d,...m.map((a,b)=>a+k[b]))+120}return c},"childrenOf",0,e,"resolvePositions",0,function(a,b){let c={},f=0;for(let g of d(a)){let d=b[g.id]??{x:0,y:f};c[g.id]=d;let h=null===g.parent?e(a,g.id):[],i=Math.ceil(h.length/2)>6?2:1;h.forEach((a,e)=>{let f=e%2==0?1:-1,g=Math.floor(e/2),h=g%i,j=Math.floor(g/i);c[a.id]=b[a.id]??{x:d.x+20+f*(340+260*h),y:d.y+110*j+55*h}}),f+=110*Math.max(1,Math.ceil(Math.ceil(h.length/2)/i))+90}return c},"spineItems",0,d],453161);let f=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],g=a=>({y:+a.slice(0,4),m:+a.slice(5,7),day:+a.slice(8,10)});a.s(["LANE_ROW_H",0,44,"buildTimeline",0,function(a,c){let h=a.map(a=>a.due).filter(a=>!!a),i=g([c,...h].sort()[0]),j=g([c,...h].sort().at(-1)??c),k={y:i.y,m:i.m-1},l=Math.max(6,(j.y-i.y)*12+(j.m-i.m)+3),m=Array.from({length:l},(a,b)=>{let c=12*k.y+(k.m-1)+b,d=Math.floor(c/12),e=c%12+1;return{y:d,m:e,label:1===e||0===b?`${f[e-1]} ${d}`:f[e-1],x:160*b}}),n=a=>{let{y:b,m:c,day:d}=g(a);return((b-m[0].y)*12+(c-m[0].m))*160+(d-.5)/new Date(b,c,0).getDate()*160},o=d(a).map(d=>{let f=[d,...null===d.parent?e(a,d.id):[]].filter(a=>a.due),g=[],h=f.map(a=>({item:a,x:n(a.due),horizon:a.id===d.id})).sort((a,b)=>a.x-b.x).map(a=>{let d=g.findIndex(b=>a.x>=b);return -1===d&&(d=g.push(0)-1),g[d]=a.x+180,{...a,row:d,state:b(a.item.due,a.item.status,c)}});return{item:d,rows:Math.max(1,g.length),markers:h}});return{months:m.map(({label:a,x:b})=>({label:a,x:b})),width:160*l,todayX:n(c),lanes:o,undated:a.filter(a=>!a.due&&"done"!==a.status)}},"formatDay",0,function(a){let{m:b,day:c}=g(a);return`${c} ${f[b-1]}`}],581040)}];
2
-
3
- //# sourceMappingURL=src_components_0eyr_zi._.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/components/chat/AgentMark.tsx","../../../../src/components/roadmap/RoadmapNodes.tsx","../../../../src/lib/roadmap-health.ts","../../../../src/components/roadmap/layout.ts","../../../../src/components/roadmap/timeline.ts"],"sourcesContent":["\"use client\"\n\nimport { Bot, Loader2 } from \"lucide-react\"\nimport { cn } from \"@/lib/utils\"\nimport { useChats, useItemAgent } from \"@/context/ChatContext\"\nimport type { Attach, ItemAgent } from \"@/lib/chats\"\nimport { StatusMarker } from \"./StatusMarker\"\n\nexport const AGENT_LABEL: Record<ItemAgent[\"status\"], string> = {\n running: \"Agent working\",\n \"needs-answer\": \"Agent needs you\",\n review: \"Plan to review\",\n}\n\n/**\n * Pill on an epic/task while a chat works on it; click opens that chat.\n * `nodrag` + stopPropagation keep a React Flow node from dragging/selecting on click.\n */\nexport function AgentMark({ attach, className }: { attach: Attach; className?: string }) {\n const agent = useItemAgent(attach)\n const { show } = useChats()\n if (!agent) return null\n const label = AGENT_LABEL[agent.status]\n return (\n <button\n type=\"button\"\n onClick={(e) => { e.stopPropagation(); show(agent.chatId) }}\n title={`${label} · open chat`}\n aria-label={`${label}, open chat`}\n className={cn(\n \"nodrag inline-flex shrink-0 items-center gap-1 rounded-full border px-1.5 py-px font-mono text-[10px] leading-4 animate-fade-in transition-colors duration-(--duration-fast)\",\n agent.status === \"running\" && \"border-accent/50 text-accent hover:bg-accent/10\",\n agent.status === \"needs-answer\" && \"border-amber/50 text-amber hover:bg-amber/10\",\n agent.status === \"review\" && \"border-accent/50 bg-accent/10 text-accent hover:bg-accent/20\",\n className,\n )}\n >\n {agent.status === \"running\" ? <Loader2 className=\"size-3 animate-spin\" aria-hidden /> : <Bot className=\"size-3\" aria-hidden />}\n {label}\n </button>\n )\n}\n\n/** Non-interactive variant for places that are already a button (timeline markers, board cards, task rows). */\nexport function AgentDot({ attach }: { attach: Attach }) {\n const agent = useItemAgent(attach)\n if (!agent) return null\n return <StatusMarker status={agent.status} label={AGENT_LABEL[agent.status]} />\n}\n","\"use client\"\n\nimport { Handle, Position, type Node, type NodeProps } from \"@xyflow/react\"\nimport { AlertTriangle, Check } from \"lucide-react\"\nimport { cn } from \"@/lib/utils\"\nimport type { RoadmapItem, RoadmapStatus, TaskStatus } from \"@/types\"\nimport type { DueState, TaskDueSummary } from \"@/lib/roadmap-health\"\nimport { formatDay } from \"./timeline\"\nimport { FEATURE_W, HORIZON_W } from \"./layout\"\nimport { AgentMark } from \"@/components/chat/AgentMark\"\nimport { useItemAgent } from \"@/context/ChatContext\"\n\nexport type RoadmapNodeData = {\n item: RoadmapItem\n progress?: { done: number; total: number } // derived, never persisted\n drift?: string[]\n dueState?: DueState | null\n taskDue?: TaskDueSummary | null\n taskDueSoon?: boolean\n taskStatuses?: TaskStatus[] // feature: linked tasks in order, cancelled/missing left out\n nextTaskId?: string | null // feature: what vibedoc_next_task would hand out\n chapter?: number // horizon: 1-based position on the spine\n epics?: { done: number; total: number } // horizon: child epics\n}\nexport type RoadmapNode = Node<RoadmapNodeData, \"horizon\" | \"feature\">\n\nconst SIDES = [Position.Top, Position.Right, Position.Bottom, Position.Left]\n\n/** One invisible source + target handle per side; edges pick `side` / `side-t`. */\nfunction Handles() {\n return (\n <>\n {SIDES.map((p) => (\n <Handle key={p} id={p} type=\"source\" position={p} isConnectable={false} className=\"opacity-0\" />\n ))}\n {SIDES.map((p) => (\n <Handle key={`${p}-t`} id={`${p}-t`} type=\"target\" position={p} isConnectable={false} className=\"opacity-0\" />\n ))}\n </>\n )\n}\n\nexport const STATUS_LABEL: Record<RoadmapStatus, string> = { \"in-progress\": \"Active\", paused: \"Paused\", done: \"Done\", planned: \"Planned\" }\n\n/** Roadmap status as a dot: live = accent with a pulse, done = teal, planned = hollow. */\nexport function StatusDot({ status, className }: { status: RoadmapStatus; className?: string }) {\n return (\n <span title={STATUS_LABEL[status]} aria-label={STATUS_LABEL[status]} className={cn(\"relative inline-flex h-2 w-2 shrink-0\", className)}>\n {status === \"in-progress\" && <span className=\"absolute inset-0 animate-ping rounded-full bg-accent/60\" />}\n <span\n className={cn(\n \"relative h-full w-full rounded-full\",\n status === \"done\" && \"bg-teal\",\n status === \"in-progress\" && \"bg-accent\",\n status === \"planned\" && \"border border-muted\",\n status === \"paused\" && \"bg-muted\",\n )}\n />\n </span>\n )\n}\n\nexport function StatusPill({ status }: { status: RoadmapStatus }) {\n return (\n <span\n className={cn(\n \"inline-flex items-center gap-1.5 rounded-full border px-2 py-0.5 font-mono text-[10px] uppercase tracking-wider\",\n status === \"done\" && \"border-teal/40 text-teal\",\n status === \"in-progress\" && \"border-accent/50 text-accent\",\n status === \"planned\" && \"border-dashed border-border2 text-muted\",\n status === \"paused\" && \"border-border2 text-muted\",\n )}\n >\n <StatusDot status={status} className=\"h-1.5 w-1.5\" />\n {STATUS_LABEL[status]}\n </span>\n )\n}\n\nexport const TASK_STATUS_BG: Record<TaskStatus, string> = {\n done: \"bg-teal\",\n \"in-progress\": \"bg-amber\",\n review: \"bg-accent\",\n blocked: \"bg-danger\",\n paused: \"bg-muted/60\",\n todo: \"bg-border2\",\n cancelled: \"bg-border\",\n}\n\n/** One segment per task, colored by its board status (same colors as the board). */\nexport function SegmentedProgress({ statuses, className }: { statuses?: TaskStatus[]; className?: string }) {\n if (!statuses?.length) return null\n const done = statuses.filter((s) => s === \"done\").length\n return (\n <div className={cn(\"flex h-1.5 min-w-0 flex-1 gap-0.5\", className)} title={`${done}/${statuses.length} tasks done`}>\n {statuses.map((s, i) => (\n <span key={i} className={cn(\"h-full flex-1 rounded-[1px]\", TASK_STATUS_BG[s])} />\n ))}\n </div>\n )\n}\n\n/** Small progress ring; color follows `className` (currentColor). */\nexport function ProgressRing({ value, total, className }: { value: number; total: number; className?: string }) {\n const r = 14\n const c = 2 * Math.PI * r\n const pct = total > 0 ? value / total : 0\n return (\n <span className={cn(\"relative inline-flex h-9 w-9 shrink-0 items-center justify-center\", className)} title={`${value}/${total} tasks done`}>\n <svg viewBox=\"0 0 36 36\" className=\"absolute inset-0 -rotate-90\">\n <circle cx=\"18\" cy=\"18\" r={r} fill=\"none\" strokeWidth=\"3\" className=\"stroke-border\" />\n <circle cx=\"18\" cy=\"18\" r={r} fill=\"none\" strokeWidth=\"3\" stroke=\"currentColor\" strokeLinecap=\"round\"\n strokeDasharray={c} strokeDashoffset={c * (1 - pct)} />\n </svg>\n <span className=\"font-mono text-[9px] text-txt\">{Math.round(pct * 100)}</span>\n </span>\n )\n}\n\nexport function Progress({ progress }: { progress?: RoadmapNodeData[\"progress\"] }) {\n if (!progress) return null\n const pct = Math.round((progress.done / progress.total) * 100)\n return (\n <div className=\"flex items-center gap-1.5\" title={`${progress.done}/${progress.total} done`}>\n <div className=\"h-1 flex-1 overflow-hidden rounded-full bg-border\">\n <div className=\"h-full rounded-full bg-teal\" style={{ width: `${pct}%` }} />\n </div>\n <span className=\"font-mono text-[10px] text-muted\">{progress.done}/{progress.total}</span>\n </div>\n )\n}\n\nexport function DueChip({ due, state }: { due: string | null; state?: DueState | null }) {\n if (!due) return null\n return (\n <span\n className={cn(\n \"font-mono text-[10px]\",\n state === \"overdue\" ? \"text-danger\" : state === \"soon\" ? \"text-amber\" : \"text-muted\",\n )}\n >\n Due {formatDay(due)}\n </span>\n )\n}\n\n/** The single most urgent date line for a card: overdue tasks, then the epic's own due, then the next task due. */\nfunction DueNote({ data }: { data: RoadmapNodeData }) {\n const s = data.taskDue\n if (s && s.overdue > 0) {\n return <span className=\"font-mono text-[10px] text-danger\">{s.overdue} {s.overdue === 1 ? \"task\" : \"tasks\"} overdue</span>\n }\n if (data.item.due) return <DueChip due={data.item.due} state={data.dueState} />\n if (s?.next) return <span className={cn(\"font-mono text-[10px]\", data.taskDueSoon ? \"text-amber\" : \"text-muted\")}>Next due {formatDay(s.next)}</span>\n return null\n}\n\nfunction DriftMark({ drift }: { drift?: string[] }) {\n if (!drift?.length) return null\n return (\n <span title={drift.join(\"\\n\")} className=\"absolute -left-2 -top-2 rounded-full bg-bg p-0.5 text-amber\">\n <AlertTriangle className=\"h-3.5 w-3.5\" />\n </span>\n )\n}\n\n/** A horizon is a chapter: big number, title, epic count, and a ring for task progress. */\nexport function HorizonNode({ data, selected }: NodeProps<RoadmapNode>) {\n const { item, progress, epics, chapter } = data\n const status = item.status\n return (\n <div\n style={{ width: HORIZON_W }}\n className={cn(\n \"relative flex items-center gap-3 rounded-xl border bg-surface px-3.5 py-3 transition-shadow duration-(--duration-base)\",\n status === \"in-progress\" && \"border-accent/60 shadow-[0_0_0_1px_rgb(var(--rgb-accent)/0.25),0_10px_30px_-12px_rgb(var(--rgb-accent)/0.6)]\",\n status === \"done\" && \"border-teal/40\",\n status === \"planned\" && \"border-dashed border-border2\",\n status === \"paused\" && \"border-border2 opacity-75\",\n selected && \"ring-2 ring-accent/60 ring-offset-2 ring-offset-bg\",\n )}\n >\n <Handles />\n <span\n className={cn(\n \"font-mono text-2xl font-semibold leading-none tabular-nums\",\n status === \"in-progress\" ? \"text-accent\" : status === \"done\" ? \"text-teal\" : \"text-muted\",\n )}\n >\n {chapter ? String(chapter).padStart(2, \"0\") : \"··\"}\n </span>\n <div className=\"min-w-0 flex-1\">\n <p className=\"text-xs font-semibold uppercase leading-snug tracking-wider text-txt\">{item.title}</p>\n <p className=\"mt-1 flex flex-wrap items-center gap-x-2 font-mono text-[10px] text-muted\">\n {epics && epics.total > 0 && <span>{epics.done}/{epics.total} epics</span>}\n <DueChip due={item.due} state={data.dueState} />\n </p>\n </div>\n {progress && (\n <ProgressRing value={progress.done} total={progress.total} className={status === \"done\" ? \"text-teal\" : \"text-accent\"} />\n )}\n <DriftMark drift={data.drift} />\n </div>\n )\n}\n\n/**\n * Three looks so the eye lands on live work: live = lit card with task segments and the next task,\n * done = one quiet line, planned = dashed outline. Height stays under ROW_H (layout.ts) so saved positions never overlap.\n */\nexport function FeatureNode({ data, selected }: NodeProps<RoadmapNode>) {\n const { item, taskStatuses, nextTaskId } = data\n const agent = useItemAgent({ kind: \"epic\", id: item.id })\n const drifting = !!data.drift?.length\n const ring = selected && \"ring-2 ring-accent/60 ring-offset-2 ring-offset-bg\"\n\n if (item.status === \"done\") {\n return (\n <div\n style={{ width: FEATURE_W }}\n className={cn(\"group relative flex items-center gap-2 rounded-lg border border-border bg-surface/60 px-3 py-2 hover:border-teal/40\", ring)}\n >\n <Handles />\n <Check className=\"h-3.5 w-3.5 shrink-0 text-teal\" strokeWidth={3} />\n <p className=\"min-w-0 flex-1 truncate text-[13px] text-muted group-hover:text-txt\" title={item.title}>{item.title}</p>\n {agent ? <AgentMark attach={{ kind: \"epic\", id: item.id }} />\n : data.progress && <span className=\"font-mono text-[10px] text-muted\">{data.progress.done}/{data.progress.total}</span>}\n <DriftMark drift={data.drift} />\n </div>\n )\n }\n\n const live = item.status === \"in-progress\"\n return (\n <div\n style={{ width: FEATURE_W }}\n className={cn(\n \"relative flex flex-col gap-1.5 rounded-lg border px-3 py-2.5 transition-shadow duration-(--duration-base)\",\n live\n ? \"border-accent/50 bg-surface shadow-[0_8px_24px_-10px_rgb(var(--rgb-accent)/0.55)]\"\n : \"border-dashed border-border2 bg-bg hover:border-muted\",\n item.status === \"paused\" && \"opacity-70\",\n ring,\n )}\n >\n <Handles />\n {live && <span className={cn(\"absolute -inset-y-px -left-px w-[3px] rounded-l-lg\", drifting ? \"bg-amber\" : \"bg-accent\")} />}\n <div className=\"flex items-center justify-between font-mono text-[10px]\">\n <span className=\"text-muted\">{item.id}</span>\n {agent ? (\n <AgentMark attach={{ kind: \"epic\", id: item.id }} />\n ) : live ? (\n <span className=\"flex items-center gap-1.5 uppercase tracking-wider text-accent\"><StatusDot status=\"in-progress\" className=\"h-1.5 w-1.5\" />Live</span>\n ) : (\n <span className=\"uppercase tracking-wider text-muted\">{item.tasks.length ? `${item.tasks.length} tasks` : \"No tasks yet\"}</span>\n )}\n </div>\n <p className={cn(\"line-clamp-2 text-[13px] leading-snug\", live ? \"font-medium text-txt\" : \"text-txt/80\")} title={item.title}>\n {item.title}\n </p>\n {taskStatuses && taskStatuses.length > 0 && (\n <div className=\"flex items-center gap-2\">\n <SegmentedProgress statuses={taskStatuses} />\n <span className=\"shrink-0 font-mono text-[10px] text-muted\">\n {live && nextTaskId ? <>next <span className=\"text-txt\">{nextTaskId}</span></> : `${taskStatuses.filter((s) => s === \"done\").length}/${taskStatuses.length}`}\n </span>\n </div>\n )}\n <DueNote data={data} />\n <DriftMark drift={data.drift} />\n </div>\n )\n}\n\nexport const nodeTypes = { horizon: HorizonNode, feature: FeatureNode }\n","/**\n * src/lib/roadmap-health.ts\n * Pure (no fs): roadmap progress + drift, shared by the Roadmap page and the MCP handler.\n * A feature's expected status comes from its linked tasks; a horizon's from its features.\n */\n\nimport type { RoadmapItem, RoadmapStatus, Task } from './core'\n\n/** What health needs from a task: status for progress, due for at-risk. */\nexport type TaskInfo = Pick<Task, 'status' | 'due'>\n\nexport interface RoadmapProgress { done: number; total: number }\n\nexport interface RoadmapDrift {\n id: string\n kind: 'status-mismatch' | 'missing-task' | 'overdue' | 'at-risk'\n message: string\n suggestedStatus?: RoadmapStatus\n}\n\nexport interface RoadmapHealth {\n progress: Record<string, RoadmapProgress>\n drift: RoadmapDrift[]\n}\n\nexport type DueState = 'overdue' | 'soon' | 'ok' | 'done'\n\nconst SOON_DAYS = 7\n\n/** Local calendar date \"YYYY-MM-DD\" (due dates are calendar dates, not instants). */\nexport function localToday(now = new Date()): string {\n const p = (n: number) => String(n).padStart(2, '0')\n return `${now.getFullYear()}-${p(now.getMonth() + 1)}-${p(now.getDate())}`\n}\n\nfunction daysBetween(from: string, to: string): number {\n const utc = (d: string) => Date.UTC(+d.slice(0, 4), +d.slice(5, 7) - 1, +d.slice(8, 10))\n return Math.round((utc(to) - utc(from)) / 86_400_000)\n}\n\nexport function dueState(due: string | null, status: RoadmapStatus, today: string): DueState | null {\n if (!due) return null\n if (status === 'done') return 'done'\n if (due < today) return 'overdue'\n return daysBetween(today, due) <= SOON_DAYS ? 'soon' : 'ok'\n}\n\ntype Started = 'done' | 'in-progress' | 'other'\n\nfunction expectedStatus(states: Started[]): RoadmapStatus {\n if (states.every(s => s === 'done')) return 'done'\n if (states.some(s => s !== 'other')) return 'in-progress'\n return 'planned'\n}\n\nexport interface TaskDueSummary { overdue: number; next: string | null }\n\n/** Open tasks' deadlines for a map node: how many are overdue, and the nearest upcoming due. */\nexport function taskDueSummary(taskIds: string[], tasks: Record<string, TaskInfo>, today: string): TaskDueSummary | null {\n const dues = taskIds\n .map(id => tasks[id])\n .filter(t => t && t.due && t.status !== 'done' && t.status !== 'cancelled')\n .map(t => t.due as string)\n if (!dues.length) return null\n const upcoming = dues.filter(d => d >= today).sort()\n return { overdue: dues.length - upcoming.length, next: upcoming[0] ?? null }\n}\n\n/** Why an unfinished epic may miss its date: overdue or blocked tasks, or due soon with nothing started. */\nfunction atRiskReasons(item: RoadmapItem, linked: string[], tasks: Record<string, TaskInfo>, today: string): string[] {\n const reasons: string[] = []\n for (const id of linked) {\n const t = tasks[id]\n if (t.status !== 'done' && t.due && t.due < today) reasons.push(`${id} overdue since ${t.due}`)\n if (t.status === 'blocked') reasons.push(`${id} blocked`)\n }\n const started = linked.some(id => ['done', 'in-progress', 'review'].includes(tasks[id].status))\n if (item.due && dueState(item.due, item.status, today) === 'soon' && !started) {\n reasons.push(`due ${item.due}, nothing started`)\n }\n return reasons\n}\n\nexport function roadmapHealth(\n items: RoadmapItem[], tasks: Record<string, TaskInfo>, today: string,\n): RoadmapHealth {\n const progress: Record<string, RoadmapProgress> = {}\n const drift: RoadmapDrift[] = []\n\n for (const item of items) {\n if (item.due && dueState(item.due, item.status, today) === 'overdue') {\n drift.push({ id: item.id, kind: 'overdue', message: `${item.id} \"${item.title}\" is overdue since ${item.due}` })\n }\n }\n const horizonIds = new Set(items.filter(i => i.parent === null).map(i => i.id))\n\n for (const item of items) {\n if (item.parent === null) continue\n const missing = item.tasks.filter(t => !(t in tasks))\n if (missing.length) {\n drift.push({ id: item.id, kind: 'missing-task', message: `${item.id} links unknown task ${missing.join(', ')}` })\n }\n // cancelled tasks don't count toward progress or expected status\n const linked = item.tasks.filter(t => t in tasks && tasks[t].status !== 'cancelled')\n // a paused epic is stopped on purpose: not at risk\n const risks = item.status === 'done' || item.status === 'paused' ? [] : atRiskReasons(item, linked, tasks, today)\n if (risks.length) {\n drift.push({ id: item.id, kind: 'at-risk', message: `${item.id} \"${item.title}\" at risk: ${risks.join('; ')}` })\n }\n if (!linked.length) continue\n const states: Started[] = linked.map(t =>\n tasks[t].status === 'done' ? 'done' : tasks[t].status === 'in-progress' || tasks[t].status === 'review' ? 'in-progress' : 'other')\n progress[item.id] = { done: states.filter(s => s === 'done').length, total: linked.length }\n const expected = expectedStatus(states)\n // paused stays paused until everything is done\n if (expected !== item.status && !(item.status === 'paused' && expected !== 'done')) {\n const open = linked.filter(t => tasks[t].status !== 'done')\n drift.push({\n id: item.id,\n kind: 'status-mismatch',\n message: expected === 'done'\n ? `${item.id} \"${item.title}\": all tasks done but status is ${item.status}`\n : `${item.id} \"${item.title}\" is ${item.status} but tasks ${open.join(', ')} are not done`,\n suggestedStatus: expected,\n })\n }\n }\n\n for (const h of items) {\n if (!horizonIds.has(h.id)) continue\n const kids = items.filter(i => i.parent === h.id)\n if (!kids.length) continue\n const states: Started[] = kids.map(k => k.status === 'done' ? 'done' : k.status === 'in-progress' ? 'in-progress' : 'other')\n // weight by tasks; an epic not broken down yet counts as one unit\n progress[h.id] = kids.reduce((sum, k) => {\n const p = progress[k.id] ?? { done: k.status === 'done' ? 1 : 0, total: 1 }\n return { done: sum.done + p.done, total: sum.total + p.total }\n }, { done: 0, total: 0 })\n const expected = expectedStatus(states)\n if (expected !== h.status && !(h.status === 'paused' && expected !== 'done')) {\n drift.push({\n id: h.id,\n kind: 'status-mismatch',\n message: `${h.id} \"${h.title}\" is ${h.status} but its features say ${expected}`,\n suggestedStatus: expected,\n })\n }\n }\n\n return { progress, drift }\n}\n","import type { RoadmapItem, RoadmapLayout } from \"@/types\"\n\nexport const HORIZON_W = 260\nexport const FEATURE_W = 220\nconst BRANCH_DX = 340\nconst ROW_H = 110\nconst HORIZON_GAP = 90\nconst COL_DX = FEATURE_W + 40\nconst MAX_ROWS_PER_SIDE = 6 // beyond this, a side gets a second (outer, half-row staggered) column\n\n/** Items that sit on the spine: real horizons plus orphans whose parent is not a horizon. */\nexport function spineItems(items: RoadmapItem[]): RoadmapItem[] {\n const horizonIds = new Set(items.filter((i) => i.parent === null).map((i) => i.id))\n return items\n .filter((i) => i.parent === null || !horizonIds.has(i.parent))\n .sort((a, b) => a.order - b.order)\n}\n\nexport function childrenOf(items: RoadmapItem[], parentId: string): RoadmapItem[] {\n return items.filter((i) => i.parent === parentId).sort((a, b) => a.order - b.order)\n}\n\n/**\n * Resolve a position for every item: saved (layout.json) wins, otherwise auto-place.\n * Horizons stack on x=0 by order; children alternate right/left of their parent's RESOLVED position.\n */\nexport function resolvePositions(items: RoadmapItem[], layout: RoadmapLayout): RoadmapLayout {\n const out: RoadmapLayout = {}\n let cursor = 0\n for (const h of spineItems(items)) {\n const hp = layout[h.id] ?? { x: 0, y: cursor }\n out[h.id] = hp\n const kids = h.parent === null ? childrenOf(items, h.id) : []\n const cols = Math.ceil(kids.length / 2) > MAX_ROWS_PER_SIDE ? 2 : 1\n kids.forEach((c, i) => {\n const side = i % 2 === 0 ? 1 : -1\n const k = Math.floor(i / 2) // index within its side\n const col = k % cols\n const row = Math.floor(k / cols)\n out[c.id] = layout[c.id] ?? {\n x: hp.x + (HORIZON_W - FEATURE_W) / 2 + side * (BRANCH_DX + col * COL_DX),\n // outer column sits half a row lower so its edges pass between inner nodes\n y: hp.y + row * ROW_H + col * (ROW_H / 2),\n }\n })\n const rows = Math.ceil(Math.ceil(kids.length / 2) / cols)\n cursor += Math.max(1, rows) * ROW_H + HORIZON_GAP\n }\n return out\n}\n\nconst ARRANGE_ROW_GAP = 14 // between stacked epics in a column\nconst ARRANGE_BLOCK_GAP = 120 // between one horizon's block and the next\n\n/**\n * \"Arrange\" (tidy the whole map): ignores saved positions. Each horizon sits on the spine with its epics\n * in one column per side, stacked by their real heights, in order, each epic going to the shorter side.\n * The column is centred on its horizon so branches fan out evenly and never cross a node; each horizon's\n * block starts below the previous block's lowest node.\n */\nexport function arrangePositions(items: RoadmapItem[], heightOf: (id: string) => number): RoadmapLayout {\n const out: RoadmapLayout = {}\n let top = 0\n for (const h of spineItems(items)) {\n const hh = heightOf(h.id)\n const kids = h.parent === null ? childrenOf(items, h.id) : []\n const sides: { id: string; y: number }[][] = [[], []] // right, left\n const used = [0, 0]\n for (const c of kids) {\n const s = used[0] <= used[1] ? 0 : 1\n sides[s].push({ id: c.id, y: used[s] })\n used[s] += heightOf(c.id) + ARRANGE_ROW_GAP\n }\n const colH = used.map((u) => Math.max(0, u - ARRANGE_ROW_GAP))\n // centre each column on the horizon, then shift the whole block down so its top is at `top`\n const centre = hh / 2\n const colTop = colH.map((c) => centre - c / 2)\n const shift = top - Math.min(0, ...colTop)\n out[h.id] = { x: 0, y: shift }\n sides.forEach((col, s) => {\n const x = (HORIZON_W - FEATURE_W) / 2 + (s === 0 ? 1 : -1) * BRANCH_DX\n for (const { id, y } of col) out[id] = { x, y: shift + colTop[s] + y }\n })\n top = shift + Math.max(hh, ...colTop.map((t, s) => t + colH[s])) + ARRANGE_BLOCK_GAP\n }\n return out\n}\n","import type { RoadmapItem } from \"@/types\"\nimport { dueState, type DueState } from \"@/lib/roadmap-health\"\nimport { childrenOf, spineItems } from \"./layout\"\n\nexport const MONTH_W = 160\nexport const LANE_ROW_H = 44\nconst LABEL_W = 180 // horizontal room a marker's label needs before the next one fits on the same row\nconst MIN_MONTHS = 6\n\nconst MONTHS = [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n\n// Dates are \"YYYY-MM-DD\" calendar dates — parsed by hand, never via new Date(string) (UTC shift).\nconst ymd = (d: string) => ({ y: +d.slice(0, 4), m: +d.slice(5, 7), day: +d.slice(8, 10) })\nconst daysIn = (y: number, m: number) => new Date(y, m, 0).getDate()\n\nexport function formatDay(d: string): string {\n const { m, day } = ymd(d)\n return `${day} ${MONTHS[m - 1]}`\n}\n\nexport interface TimelineMarker { item: RoadmapItem; x: number; row: number; state: DueState | null; horizon: boolean }\nexport interface TimelineLane { item: RoadmapItem; rows: number; markers: TimelineMarker[] }\nexport interface Timeline {\n months: { label: string; x: number }[]\n width: number\n todayX: number\n lanes: TimelineLane[]\n undated: RoadmapItem[]\n}\n\nexport function buildTimeline(items: RoadmapItem[], today: string): Timeline {\n const dues = items.map((i) => i.due).filter((d): d is string => !!d)\n const first = ymd([today, ...dues].sort()[0])\n const last = ymd([today, ...dues].sort().at(-1) ?? today)\n\n // pad one month each side, then stretch to a readable minimum\n const start = { y: first.y, m: first.m - 1 }\n const span = Math.max(MIN_MONTHS, (last.y - first.y) * 12 + (last.m - first.m) + 3)\n const months = Array.from({ length: span }, (_, i) => {\n const t = start.y * 12 + (start.m - 1) + i\n const y = Math.floor(t / 12)\n const m = (t % 12) + 1\n return { y, m, label: m === 1 || i === 0 ? `${MONTHS[m - 1]} ${y}` : MONTHS[m - 1], x: i * MONTH_W }\n })\n\n const xOf = (d: string) => {\n const { y, m, day } = ymd(d)\n const idx = (y - months[0].y) * 12 + (m - months[0].m)\n return idx * MONTH_W + ((day - 0.5) / daysIn(y, m)) * MONTH_W\n }\n\n const lanes = spineItems(items).map((h) => {\n const dated = [h, ...(h.parent === null ? childrenOf(items, h.id) : [])].filter((i) => i.due)\n const rowEnds: number[] = []\n const markers = dated\n .map((item) => ({ item, x: xOf(item.due as string), horizon: item.id === h.id }))\n .sort((a, b) => a.x - b.x)\n .map((mk) => {\n // greedy: first row whose last label ends before this marker\n let row = rowEnds.findIndex((end) => mk.x >= end)\n if (row === -1) row = rowEnds.push(0) - 1\n rowEnds[row] = mk.x + LABEL_W\n return { ...mk, row, state: dueState(mk.item.due, mk.item.status, today) }\n })\n return { item: h, rows: Math.max(1, rowEnds.length), markers }\n })\n\n return {\n months: months.map(({ label, x }) => ({ label, x })),\n width: span * MONTH_W,\n todayX: xOf(today),\n lanes,\n undated: items.filter((i) => !i.due && i.status !== \"done\"), // shipped work needs no date\n }\n}\n"],"names":["AGENT_LABEL","running","review","AgentMark","attach","className","agent","show","label","status","type","onClick","e","stopPropagation","chatId","title","AgentDot","SIDES","Top","Right","Bottom","Left","Handles","map","p","id","position","isConnectable","STATUS_LABEL","paused","done","planned","StatusDot","StatusPill","TASK_STATUS_BG","blocked","todo","cancelled","SegmentedProgress","statuses","length","filter","s","i","ProgressRing","value","total","r","c","Math","PI","pct","viewBox","cx","cy","fill","strokeWidth","stroke","strokeLinecap","strokeDasharray","strokeDashoffset","round","Progress","progress","style","width","DueChip","due","state","DueNote","data","taskDue","overdue","item","dueState","next","taskDueSoon","DriftMark","drift","join","HorizonNode","selected","epics","chapter","String","padStart","FeatureNode","taskStatuses","nextTaskId","kind","drifting","ring","live","tasks","nodeTypes","horizon","feature","SOON_DAYS","localToday","now","Date","n","getFullYear","getMonth","getDate","daysBetween","from","to","utc","d","UTC","slice","today","expectedStatus","states","every","some","taskDueSummary","taskIds","dues","t","upcoming","sort","atRiskReasons","linked","reasons","push","started","includes","roadmapHealth","items","message","horizonIds","Set","parent","missing","risks","expected","open","suggestedStatus","h","has","kids","k","reduce","sum"],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- module.exports=[815122,a=>{"use strict";var b=a.i(662145),c=a.i(795667),d=a.i(108280),e=a.i(368114),f=a.i(685698),g=a.i(598984);let h={running:"Agent working","needs-answer":"Agent needs you",review:"Plan to review"};a.s(["AgentDot",0,function({attach:a}){let c=(0,f.useItemAgent)(a);return c?(0,b.jsx)(g.StatusMarker,{status:c.status,label:h[c.status]}):null},"AgentMark",0,function({attach:a,className:g}){let i=(0,f.useItemAgent)(a),{show:j}=(0,f.useChats)();if(!i)return null;let k=h[i.status];return(0,b.jsxs)("button",{type:"button",onClick:a=>{a.stopPropagation(),j(i.chatId)},title:`${k} \xb7 open chat`,"aria-label":`${k}, open chat`,className:(0,e.cn)("nodrag inline-flex shrink-0 items-center gap-1 rounded-full border px-1.5 py-px font-mono text-[10px] leading-4 animate-fade-in transition-colors duration-(--duration-fast)","running"===i.status&&"border-accent/50 text-accent hover:bg-accent/10","needs-answer"===i.status&&"border-amber/50 text-amber hover:bg-amber/10","review"===i.status&&"border-accent/50 bg-accent/10 text-accent hover:bg-accent/20",g),children:["running"===i.status?(0,b.jsx)(d.Loader2,{className:"size-3 animate-spin","aria-hidden":!0}):(0,b.jsx)(c.Bot,{className:"size-3","aria-hidden":!0}),k]})}])},618940,a=>{"use strict";var b=a.i(662145),c=a.i(365465),d=a.i(152716),e=a.i(340933),f=a.i(425404),g=a.i(368114),h=a.i(581040),i=a.i(453161),j=a.i(815122),k=a.i(685698);let l=[d.Position.Top,d.Position.Right,d.Position.Bottom,d.Position.Left];function m(){return(0,b.jsxs)(b.Fragment,{children:[l.map(a=>(0,b.jsx)(c.Handle,{id:a,type:"source",position:a,isConnectable:!1,className:"opacity-0"},a)),l.map(a=>(0,b.jsx)(c.Handle,{id:`${a}-t`,type:"target",position:a,isConnectable:!1,className:"opacity-0"},`${a}-t`))]})}let n={"in-progress":"Active",paused:"Paused",done:"Done",planned:"Planned"};function o({status:a,className:c}){return(0,b.jsxs)("span",{title:n[a],"aria-label":n[a],className:(0,g.cn)("relative inline-flex h-2 w-2 shrink-0",c),children:["in-progress"===a&&(0,b.jsx)("span",{className:"absolute inset-0 animate-ping rounded-full bg-accent/60"}),(0,b.jsx)("span",{className:(0,g.cn)("relative h-full w-full rounded-full","done"===a&&"bg-teal","in-progress"===a&&"bg-accent","planned"===a&&"border border-muted","paused"===a&&"bg-muted")})]})}let p={done:"bg-teal","in-progress":"bg-amber",review:"bg-accent",blocked:"bg-danger",paused:"bg-muted/60",todo:"bg-border2",cancelled:"bg-border"};function q({statuses:a,className:c}){if(!a?.length)return null;let d=a.filter(a=>"done"===a).length;return(0,b.jsx)("div",{className:(0,g.cn)("flex h-1.5 min-w-0 flex-1 gap-0.5",c),title:`${d}/${a.length} tasks done`,children:a.map((a,c)=>(0,b.jsx)("span",{className:(0,g.cn)("h-full flex-1 rounded-[1px]",p[a])},c))})}function r({value:a,total:c,className:d}){let e=2*Math.PI*14,f=c>0?a/c:0;return(0,b.jsxs)("span",{className:(0,g.cn)("relative inline-flex h-9 w-9 shrink-0 items-center justify-center",d),title:`${a}/${c} tasks done`,children:[(0,b.jsxs)("svg",{viewBox:"0 0 36 36",className:"absolute inset-0 -rotate-90",children:[(0,b.jsx)("circle",{cx:"18",cy:"18",r:14,fill:"none",strokeWidth:"3",className:"stroke-border"}),(0,b.jsx)("circle",{cx:"18",cy:"18",r:14,fill:"none",strokeWidth:"3",stroke:"currentColor",strokeLinecap:"round",strokeDasharray:e,strokeDashoffset:e*(1-f)})]}),(0,b.jsx)("span",{className:"font-mono text-[9px] text-txt",children:Math.round(100*f)})]})}function s({due:a,state:c}){return a?(0,b.jsxs)("span",{className:(0,g.cn)("font-mono text-[10px]","overdue"===c?"text-danger":"soon"===c?"text-amber":"text-muted"),children:["Due ",(0,h.formatDay)(a)]}):null}function t({data:a}){let c=a.taskDue;return c&&c.overdue>0?(0,b.jsxs)("span",{className:"font-mono text-[10px] text-danger",children:[c.overdue," ",1===c.overdue?"task":"tasks"," overdue"]}):a.item.due?(0,b.jsx)(s,{due:a.item.due,state:a.dueState}):c?.next?(0,b.jsxs)("span",{className:(0,g.cn)("font-mono text-[10px]",a.taskDueSoon?"text-amber":"text-muted"),children:["Next due ",(0,h.formatDay)(c.next)]}):null}function u({drift:a}){return a?.length?(0,b.jsx)("span",{title:a.join("\n"),className:"absolute -left-2 -top-2 rounded-full bg-bg p-0.5 text-amber",children:(0,b.jsx)(e.AlertTriangle,{className:"h-3.5 w-3.5"})}):null}a.s(["DueChip",0,s,"STATUS_LABEL",0,n,"SegmentedProgress",0,q,"StatusDot",0,o,"StatusPill",0,function({status:a}){return(0,b.jsxs)("span",{className:(0,g.cn)("inline-flex items-center gap-1.5 rounded-full border px-2 py-0.5 font-mono text-[10px] uppercase tracking-wider","done"===a&&"border-teal/40 text-teal","in-progress"===a&&"border-accent/50 text-accent","planned"===a&&"border-dashed border-border2 text-muted","paused"===a&&"border-border2 text-muted"),children:[(0,b.jsx)(o,{status:a,className:"h-1.5 w-1.5"}),n[a]]})},"TASK_STATUS_BG",0,p,"nodeTypes",0,{horizon:function({data:a,selected:c}){let{item:d,progress:e,epics:f,chapter:h}=a,j=d.status;return(0,b.jsxs)("div",{style:{width:i.HORIZON_W},className:(0,g.cn)("relative flex items-center gap-3 rounded-xl border bg-surface px-3.5 py-3 transition-shadow duration-(--duration-base)","in-progress"===j&&"border-accent/60 shadow-[0_0_0_1px_rgb(var(--rgb-accent)/0.25),0_10px_30px_-12px_rgb(var(--rgb-accent)/0.6)]","done"===j&&"border-teal/40","planned"===j&&"border-dashed border-border2","paused"===j&&"border-border2 opacity-75",c&&"ring-2 ring-accent/60 ring-offset-2 ring-offset-bg"),children:[(0,b.jsx)(m,{}),(0,b.jsx)("span",{className:(0,g.cn)("font-mono text-2xl font-semibold leading-none tabular-nums","in-progress"===j?"text-accent":"done"===j?"text-teal":"text-muted"),children:h?String(h).padStart(2,"0"):"··"}),(0,b.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,b.jsx)("p",{className:"text-xs font-semibold uppercase leading-snug tracking-wider text-txt",children:d.title}),(0,b.jsxs)("p",{className:"mt-1 flex flex-wrap items-center gap-x-2 font-mono text-[10px] text-muted",children:[f&&f.total>0&&(0,b.jsxs)("span",{children:[f.done,"/",f.total," epics"]}),(0,b.jsx)(s,{due:d.due,state:a.dueState})]})]}),e&&(0,b.jsx)(r,{value:e.done,total:e.total,className:"done"===j?"text-teal":"text-accent"}),(0,b.jsx)(u,{drift:a.drift})]})},feature:function({data:a,selected:c}){let{item:d,taskStatuses:e,nextTaskId:h}=a,l=(0,k.useItemAgent)({kind:"epic",id:d.id}),n=!!a.drift?.length,p=c&&"ring-2 ring-accent/60 ring-offset-2 ring-offset-bg";if("done"===d.status)return(0,b.jsxs)("div",{style:{width:i.FEATURE_W},className:(0,g.cn)("group relative flex items-center gap-2 rounded-lg border border-border bg-surface/60 px-3 py-2 hover:border-teal/40",p),children:[(0,b.jsx)(m,{}),(0,b.jsx)(f.Check,{className:"h-3.5 w-3.5 shrink-0 text-teal",strokeWidth:3}),(0,b.jsx)("p",{className:"min-w-0 flex-1 truncate text-[13px] text-muted group-hover:text-txt",title:d.title,children:d.title}),l?(0,b.jsx)(j.AgentMark,{attach:{kind:"epic",id:d.id}}):a.progress&&(0,b.jsxs)("span",{className:"font-mono text-[10px] text-muted",children:[a.progress.done,"/",a.progress.total]}),(0,b.jsx)(u,{drift:a.drift})]});let r="in-progress"===d.status;return(0,b.jsxs)("div",{style:{width:i.FEATURE_W},className:(0,g.cn)("relative flex flex-col gap-1.5 rounded-lg border px-3 py-2.5 transition-shadow duration-(--duration-base)",r?"border-accent/50 bg-surface shadow-[0_8px_24px_-10px_rgb(var(--rgb-accent)/0.55)]":"border-dashed border-border2 bg-bg hover:border-muted","paused"===d.status&&"opacity-70",p),children:[(0,b.jsx)(m,{}),r&&(0,b.jsx)("span",{className:(0,g.cn)("absolute -inset-y-px -left-px w-[3px] rounded-l-lg",n?"bg-amber":"bg-accent")}),(0,b.jsxs)("div",{className:"flex items-center justify-between font-mono text-[10px]",children:[(0,b.jsx)("span",{className:"text-muted",children:d.id}),l?(0,b.jsx)(j.AgentMark,{attach:{kind:"epic",id:d.id}}):r?(0,b.jsxs)("span",{className:"flex items-center gap-1.5 uppercase tracking-wider text-accent",children:[(0,b.jsx)(o,{status:"in-progress",className:"h-1.5 w-1.5"}),"Live"]}):(0,b.jsx)("span",{className:"uppercase tracking-wider text-muted",children:d.tasks.length?`${d.tasks.length} tasks`:"No tasks yet"})]}),(0,b.jsx)("p",{className:(0,g.cn)("line-clamp-2 text-[13px] leading-snug",r?"font-medium text-txt":"text-txt/80"),title:d.title,children:d.title}),e&&e.length>0&&(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)(q,{statuses:e}),(0,b.jsx)("span",{className:"shrink-0 font-mono text-[10px] text-muted",children:r&&h?(0,b.jsxs)(b.Fragment,{children:["next ",(0,b.jsx)("span",{className:"text-txt",children:h})]}):`${e.filter(a=>"done"===a).length}/${e.length}`})]}),(0,b.jsx)(t,{data:a}),(0,b.jsx)(u,{drift:a.drift})]})}}])},581040,452696,453161,a=>{"use strict";function b(a,b,c){let d;return a?"done"===b?"done":a<c?"overdue":7>=Math.round(((d=a=>Date.UTC(+a.slice(0,4),a.slice(5,7)-1,+a.slice(8,10)))(a)-d(c))/864e5)?"soon":"ok":null}function c(a){return a.every(a=>"done"===a)?"done":a.some(a=>"other"!==a)?"in-progress":"planned"}a.s(["dueState",0,b,"localToday",0,function(a=new Date){let b=a=>String(a).padStart(2,"0");return`${a.getFullYear()}-${b(a.getMonth()+1)}-${b(a.getDate())}`},"roadmapHealth",0,function(a,d,e){let f={},g=[];for(let c of a)c.due&&"overdue"===b(c.due,c.status,e)&&g.push({id:c.id,kind:"overdue",message:`${c.id} "${c.title}" is overdue since ${c.due}`});let h=new Set(a.filter(a=>null===a.parent).map(a=>a.id));for(let h of a){if(null===h.parent)continue;let a=h.tasks.filter(a=>!(a in d));a.length&&g.push({id:h.id,kind:"missing-task",message:`${h.id} links unknown task ${a.join(", ")}`});let i=h.tasks.filter(a=>a in d&&"cancelled"!==d[a].status),j="done"===h.status||"paused"===h.status?[]:function(a,c,d,e){let f=[];for(let a of c){let b=d[a];"done"!==b.status&&b.due&&b.due<e&&f.push(`${a} overdue since ${b.due}`),"blocked"===b.status&&f.push(`${a} blocked`)}let g=c.some(a=>["done","in-progress","review"].includes(d[a].status));return a.due&&"soon"===b(a.due,a.status,e)&&!g&&f.push(`due ${a.due}, nothing started`),f}(h,i,d,e);if(j.length&&g.push({id:h.id,kind:"at-risk",message:`${h.id} "${h.title}" at risk: ${j.join("; ")}`}),!i.length)continue;let k=i.map(a=>"done"===d[a].status?"done":"in-progress"===d[a].status||"review"===d[a].status?"in-progress":"other");f[h.id]={done:k.filter(a=>"done"===a).length,total:i.length};let l=c(k);if(l!==h.status&&("paused"!==h.status||"done"===l)){let a=i.filter(a=>"done"!==d[a].status);g.push({id:h.id,kind:"status-mismatch",message:"done"===l?`${h.id} "${h.title}": all tasks done but status is ${h.status}`:`${h.id} "${h.title}" is ${h.status} but tasks ${a.join(", ")} are not done`,suggestedStatus:l})}}for(let b of a){if(!h.has(b.id))continue;let d=a.filter(a=>a.parent===b.id);if(!d.length)continue;let e=d.map(a=>"done"===a.status?"done":"in-progress"===a.status?"in-progress":"other");f[b.id]=d.reduce((a,b)=>{let c=f[b.id]??{done:+("done"===b.status),total:1};return{done:a.done+c.done,total:a.total+c.total}},{done:0,total:0});let i=c(e);i!==b.status&&("paused"!==b.status||"done"===i)&&g.push({id:b.id,kind:"status-mismatch",message:`${b.id} "${b.title}" is ${b.status} but its features say ${i}`,suggestedStatus:i})}return{progress:f,drift:g}},"taskDueSummary",0,function(a,b,c){let d=a.map(a=>b[a]).filter(a=>a&&a.due&&"done"!==a.status&&"cancelled"!==a.status).map(a=>a.due);if(!d.length)return null;let e=d.filter(a=>a>=c).sort();return{overdue:d.length-e.length,next:e[0]??null}}],452696);function d(a){let b=new Set(a.filter(a=>null===a.parent).map(a=>a.id));return a.filter(a=>null===a.parent||!b.has(a.parent)).sort((a,b)=>a.order-b.order)}function e(a,b){return a.filter(a=>a.parent===b).sort((a,b)=>a.order-b.order)}a.s(["FEATURE_W",0,220,"HORIZON_W",0,260,"arrangePositions",0,function(a,b){let c={},f=0;for(let g of d(a)){let d=b(g.id),h=null===g.parent?e(a,g.id):[],i=[[],[]],j=[0,0];for(let a of h){let c=j[0]<=j[1]?0:1;i[c].push({id:a.id,y:j[c]}),j[c]+=b(a.id)+14}let k=j.map(a=>Math.max(0,a-14)),l=d/2,m=k.map(a=>l-a/2),n=f-Math.min(0,...m);c[g.id]={x:0,y:n},i.forEach((a,b)=>{let d=20+(0===b?1:-1)*340;for(let{id:e,y:f}of a)c[e]={x:d,y:n+m[b]+f}}),f=n+Math.max(d,...m.map((a,b)=>a+k[b]))+120}return c},"childrenOf",0,e,"resolvePositions",0,function(a,b){let c={},f=0;for(let g of d(a)){let d=b[g.id]??{x:0,y:f};c[g.id]=d;let h=null===g.parent?e(a,g.id):[],i=Math.ceil(h.length/2)>6?2:1;h.forEach((a,e)=>{let f=e%2==0?1:-1,g=Math.floor(e/2),h=g%i,j=Math.floor(g/i);c[a.id]=b[a.id]??{x:d.x+20+f*(340+260*h),y:d.y+110*j+55*h}}),f+=110*Math.max(1,Math.ceil(Math.ceil(h.length/2)/i))+90}return c},"spineItems",0,d],453161);let f=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],g=a=>({y:+a.slice(0,4),m:+a.slice(5,7),day:+a.slice(8,10)});a.s(["LANE_ROW_H",0,44,"buildTimeline",0,function(a,c){let h=a.map(a=>a.due).filter(a=>!!a),i=g([c,...h].sort()[0]),j=g([c,...h].sort().at(-1)??c),k={y:i.y,m:i.m-1},l=Math.max(6,(j.y-i.y)*12+(j.m-i.m)+3),m=Array.from({length:l},(a,b)=>{let c=12*k.y+(k.m-1)+b,d=Math.floor(c/12),e=c%12+1;return{y:d,m:e,label:1===e||0===b?`${f[e-1]} ${d}`:f[e-1],x:160*b}}),n=a=>{let{y:b,m:c,day:d}=g(a);return((b-m[0].y)*12+(c-m[0].m))*160+(d-.5)/new Date(b,c,0).getDate()*160},o=d(a).map(d=>{let f=[d,...null===d.parent?e(a,d.id):[]].filter(a=>a.due),g=[],h=f.map(a=>({item:a,x:n(a.due),horizon:a.id===d.id})).sort((a,b)=>a.x-b.x).map(a=>{let d=g.findIndex(b=>a.x>=b);return -1===d&&(d=g.push(0)-1),g[d]=a.x+180,{...a,row:d,state:b(a.item.due,a.item.status,c)}});return{item:d,rows:Math.max(1,g.length),markers:h}});return{months:m.map(({label:a,x:b})=>({label:a,x:b})),width:160*l,todayX:n(c),lanes:o,undated:a.filter(a=>!a.due&&"done"!==a.status)}},"formatDay",0,function(a){let{m:b,day:c}=g(a);return`${c} ${f[b-1]}`}],581040)}];
2
-
3
- //# sourceMappingURL=src_components_1s861m8._.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/components/chat/AgentMark.tsx","../../../../src/components/roadmap/RoadmapNodes.tsx","../../../../src/lib/roadmap-health.ts","../../../../src/components/roadmap/layout.ts","../../../../src/components/roadmap/timeline.ts"],"sourcesContent":["\"use client\"\n\nimport { Bot, Loader2 } from \"lucide-react\"\nimport { cn } from \"@/lib/utils\"\nimport { useChats, useItemAgent } from \"@/context/ChatContext\"\nimport type { Attach, ItemAgent } from \"@/lib/chats\"\nimport { StatusMarker } from \"./StatusMarker\"\n\nexport const AGENT_LABEL: Record<ItemAgent[\"status\"], string> = {\n running: \"Agent working\",\n \"needs-answer\": \"Agent needs you\",\n review: \"Plan to review\",\n}\n\n/**\n * Pill on an epic/task while a chat works on it; click opens that chat.\n * `nodrag` + stopPropagation keep a React Flow node from dragging/selecting on click.\n */\nexport function AgentMark({ attach, className }: { attach: Attach; className?: string }) {\n const agent = useItemAgent(attach)\n const { show } = useChats()\n if (!agent) return null\n const label = AGENT_LABEL[agent.status]\n return (\n <button\n type=\"button\"\n onClick={(e) => { e.stopPropagation(); show(agent.chatId) }}\n title={`${label} · open chat`}\n aria-label={`${label}, open chat`}\n className={cn(\n \"nodrag inline-flex shrink-0 items-center gap-1 rounded-full border px-1.5 py-px font-mono text-[10px] leading-4 animate-fade-in transition-colors duration-(--duration-fast)\",\n agent.status === \"running\" && \"border-accent/50 text-accent hover:bg-accent/10\",\n agent.status === \"needs-answer\" && \"border-amber/50 text-amber hover:bg-amber/10\",\n agent.status === \"review\" && \"border-accent/50 bg-accent/10 text-accent hover:bg-accent/20\",\n className,\n )}\n >\n {agent.status === \"running\" ? <Loader2 className=\"size-3 animate-spin\" aria-hidden /> : <Bot className=\"size-3\" aria-hidden />}\n {label}\n </button>\n )\n}\n\n/** Non-interactive variant for places that are already a button (timeline markers, board cards, task rows). */\nexport function AgentDot({ attach }: { attach: Attach }) {\n const agent = useItemAgent(attach)\n if (!agent) return null\n return <StatusMarker status={agent.status} label={AGENT_LABEL[agent.status]} />\n}\n","\"use client\"\n\nimport { Handle, Position, type Node, type NodeProps } from \"@xyflow/react\"\nimport { AlertTriangle, Check } from \"lucide-react\"\nimport { cn } from \"@/lib/utils\"\nimport type { RoadmapItem, RoadmapStatus, TaskStatus } from \"@/types\"\nimport type { DueState, TaskDueSummary } from \"@/lib/roadmap-health\"\nimport { formatDay } from \"./timeline\"\nimport { FEATURE_W, HORIZON_W } from \"./layout\"\nimport { AgentMark } from \"@/components/chat/AgentMark\"\nimport { useItemAgent } from \"@/context/ChatContext\"\n\nexport type RoadmapNodeData = {\n item: RoadmapItem\n progress?: { done: number; total: number } // derived, never persisted\n drift?: string[]\n dueState?: DueState | null\n taskDue?: TaskDueSummary | null\n taskDueSoon?: boolean\n taskStatuses?: TaskStatus[] // feature: linked tasks in order, cancelled/missing left out\n nextTaskId?: string | null // feature: what vibedoc_next_task would hand out\n chapter?: number // horizon: 1-based position on the spine\n epics?: { done: number; total: number } // horizon: child epics\n}\nexport type RoadmapNode = Node<RoadmapNodeData, \"horizon\" | \"feature\">\n\nconst SIDES = [Position.Top, Position.Right, Position.Bottom, Position.Left]\n\n/** One invisible source + target handle per side; edges pick `side` / `side-t`. */\nfunction Handles() {\n return (\n <>\n {SIDES.map((p) => (\n <Handle key={p} id={p} type=\"source\" position={p} isConnectable={false} className=\"opacity-0\" />\n ))}\n {SIDES.map((p) => (\n <Handle key={`${p}-t`} id={`${p}-t`} type=\"target\" position={p} isConnectable={false} className=\"opacity-0\" />\n ))}\n </>\n )\n}\n\nexport const STATUS_LABEL: Record<RoadmapStatus, string> = { \"in-progress\": \"Active\", paused: \"Paused\", done: \"Done\", planned: \"Planned\" }\n\n/** Roadmap status as a dot: live = accent with a pulse, done = teal, planned = hollow. */\nexport function StatusDot({ status, className }: { status: RoadmapStatus; className?: string }) {\n return (\n <span title={STATUS_LABEL[status]} aria-label={STATUS_LABEL[status]} className={cn(\"relative inline-flex h-2 w-2 shrink-0\", className)}>\n {status === \"in-progress\" && <span className=\"absolute inset-0 animate-ping rounded-full bg-accent/60\" />}\n <span\n className={cn(\n \"relative h-full w-full rounded-full\",\n status === \"done\" && \"bg-teal\",\n status === \"in-progress\" && \"bg-accent\",\n status === \"planned\" && \"border border-muted\",\n status === \"paused\" && \"bg-muted\",\n )}\n />\n </span>\n )\n}\n\nexport function StatusPill({ status }: { status: RoadmapStatus }) {\n return (\n <span\n className={cn(\n \"inline-flex items-center gap-1.5 rounded-full border px-2 py-0.5 font-mono text-[10px] uppercase tracking-wider\",\n status === \"done\" && \"border-teal/40 text-teal\",\n status === \"in-progress\" && \"border-accent/50 text-accent\",\n status === \"planned\" && \"border-dashed border-border2 text-muted\",\n status === \"paused\" && \"border-border2 text-muted\",\n )}\n >\n <StatusDot status={status} className=\"h-1.5 w-1.5\" />\n {STATUS_LABEL[status]}\n </span>\n )\n}\n\nexport const TASK_STATUS_BG: Record<TaskStatus, string> = {\n done: \"bg-teal\",\n \"in-progress\": \"bg-amber\",\n review: \"bg-accent\",\n blocked: \"bg-danger\",\n paused: \"bg-muted/60\",\n todo: \"bg-border2\",\n cancelled: \"bg-border\",\n}\n\n/** One segment per task, colored by its board status (same colors as the board). */\nexport function SegmentedProgress({ statuses, className }: { statuses?: TaskStatus[]; className?: string }) {\n if (!statuses?.length) return null\n const done = statuses.filter((s) => s === \"done\").length\n return (\n <div className={cn(\"flex h-1.5 min-w-0 flex-1 gap-0.5\", className)} title={`${done}/${statuses.length} tasks done`}>\n {statuses.map((s, i) => (\n <span key={i} className={cn(\"h-full flex-1 rounded-[1px]\", TASK_STATUS_BG[s])} />\n ))}\n </div>\n )\n}\n\n/** Small progress ring; color follows `className` (currentColor). */\nexport function ProgressRing({ value, total, className }: { value: number; total: number; className?: string }) {\n const r = 14\n const c = 2 * Math.PI * r\n const pct = total > 0 ? value / total : 0\n return (\n <span className={cn(\"relative inline-flex h-9 w-9 shrink-0 items-center justify-center\", className)} title={`${value}/${total} tasks done`}>\n <svg viewBox=\"0 0 36 36\" className=\"absolute inset-0 -rotate-90\">\n <circle cx=\"18\" cy=\"18\" r={r} fill=\"none\" strokeWidth=\"3\" className=\"stroke-border\" />\n <circle cx=\"18\" cy=\"18\" r={r} fill=\"none\" strokeWidth=\"3\" stroke=\"currentColor\" strokeLinecap=\"round\"\n strokeDasharray={c} strokeDashoffset={c * (1 - pct)} />\n </svg>\n <span className=\"font-mono text-[9px] text-txt\">{Math.round(pct * 100)}</span>\n </span>\n )\n}\n\nexport function Progress({ progress }: { progress?: RoadmapNodeData[\"progress\"] }) {\n if (!progress) return null\n const pct = Math.round((progress.done / progress.total) * 100)\n return (\n <div className=\"flex items-center gap-1.5\" title={`${progress.done}/${progress.total} done`}>\n <div className=\"h-1 flex-1 overflow-hidden rounded-full bg-border\">\n <div className=\"h-full rounded-full bg-teal\" style={{ width: `${pct}%` }} />\n </div>\n <span className=\"font-mono text-[10px] text-muted\">{progress.done}/{progress.total}</span>\n </div>\n )\n}\n\nexport function DueChip({ due, state }: { due: string | null; state?: DueState | null }) {\n if (!due) return null\n return (\n <span\n className={cn(\n \"font-mono text-[10px]\",\n state === \"overdue\" ? \"text-danger\" : state === \"soon\" ? \"text-amber\" : \"text-muted\",\n )}\n >\n Due {formatDay(due)}\n </span>\n )\n}\n\n/** The single most urgent date line for a card: overdue tasks, then the epic's own due, then the next task due. */\nfunction DueNote({ data }: { data: RoadmapNodeData }) {\n const s = data.taskDue\n if (s && s.overdue > 0) {\n return <span className=\"font-mono text-[10px] text-danger\">{s.overdue} {s.overdue === 1 ? \"task\" : \"tasks\"} overdue</span>\n }\n if (data.item.due) return <DueChip due={data.item.due} state={data.dueState} />\n if (s?.next) return <span className={cn(\"font-mono text-[10px]\", data.taskDueSoon ? \"text-amber\" : \"text-muted\")}>Next due {formatDay(s.next)}</span>\n return null\n}\n\nfunction DriftMark({ drift }: { drift?: string[] }) {\n if (!drift?.length) return null\n return (\n <span title={drift.join(\"\\n\")} className=\"absolute -left-2 -top-2 rounded-full bg-bg p-0.5 text-amber\">\n <AlertTriangle className=\"h-3.5 w-3.5\" />\n </span>\n )\n}\n\n/** A horizon is a chapter: big number, title, epic count, and a ring for task progress. */\nexport function HorizonNode({ data, selected }: NodeProps<RoadmapNode>) {\n const { item, progress, epics, chapter } = data\n const status = item.status\n return (\n <div\n style={{ width: HORIZON_W }}\n className={cn(\n \"relative flex items-center gap-3 rounded-xl border bg-surface px-3.5 py-3 transition-shadow duration-(--duration-base)\",\n status === \"in-progress\" && \"border-accent/60 shadow-[0_0_0_1px_rgb(var(--rgb-accent)/0.25),0_10px_30px_-12px_rgb(var(--rgb-accent)/0.6)]\",\n status === \"done\" && \"border-teal/40\",\n status === \"planned\" && \"border-dashed border-border2\",\n status === \"paused\" && \"border-border2 opacity-75\",\n selected && \"ring-2 ring-accent/60 ring-offset-2 ring-offset-bg\",\n )}\n >\n <Handles />\n <span\n className={cn(\n \"font-mono text-2xl font-semibold leading-none tabular-nums\",\n status === \"in-progress\" ? \"text-accent\" : status === \"done\" ? \"text-teal\" : \"text-muted\",\n )}\n >\n {chapter ? String(chapter).padStart(2, \"0\") : \"··\"}\n </span>\n <div className=\"min-w-0 flex-1\">\n <p className=\"text-xs font-semibold uppercase leading-snug tracking-wider text-txt\">{item.title}</p>\n <p className=\"mt-1 flex flex-wrap items-center gap-x-2 font-mono text-[10px] text-muted\">\n {epics && epics.total > 0 && <span>{epics.done}/{epics.total} epics</span>}\n <DueChip due={item.due} state={data.dueState} />\n </p>\n </div>\n {progress && (\n <ProgressRing value={progress.done} total={progress.total} className={status === \"done\" ? \"text-teal\" : \"text-accent\"} />\n )}\n <DriftMark drift={data.drift} />\n </div>\n )\n}\n\n/**\n * Three looks so the eye lands on live work: live = lit card with task segments and the next task,\n * done = one quiet line, planned = dashed outline. Height stays under ROW_H (layout.ts) so saved positions never overlap.\n */\nexport function FeatureNode({ data, selected }: NodeProps<RoadmapNode>) {\n const { item, taskStatuses, nextTaskId } = data\n const agent = useItemAgent({ kind: \"epic\", id: item.id })\n const drifting = !!data.drift?.length\n const ring = selected && \"ring-2 ring-accent/60 ring-offset-2 ring-offset-bg\"\n\n if (item.status === \"done\") {\n return (\n <div\n style={{ width: FEATURE_W }}\n className={cn(\"group relative flex items-center gap-2 rounded-lg border border-border bg-surface/60 px-3 py-2 hover:border-teal/40\", ring)}\n >\n <Handles />\n <Check className=\"h-3.5 w-3.5 shrink-0 text-teal\" strokeWidth={3} />\n <p className=\"min-w-0 flex-1 truncate text-[13px] text-muted group-hover:text-txt\" title={item.title}>{item.title}</p>\n {agent ? <AgentMark attach={{ kind: \"epic\", id: item.id }} />\n : data.progress && <span className=\"font-mono text-[10px] text-muted\">{data.progress.done}/{data.progress.total}</span>}\n <DriftMark drift={data.drift} />\n </div>\n )\n }\n\n const live = item.status === \"in-progress\"\n return (\n <div\n style={{ width: FEATURE_W }}\n className={cn(\n \"relative flex flex-col gap-1.5 rounded-lg border px-3 py-2.5 transition-shadow duration-(--duration-base)\",\n live\n ? \"border-accent/50 bg-surface shadow-[0_8px_24px_-10px_rgb(var(--rgb-accent)/0.55)]\"\n : \"border-dashed border-border2 bg-bg hover:border-muted\",\n item.status === \"paused\" && \"opacity-70\",\n ring,\n )}\n >\n <Handles />\n {live && <span className={cn(\"absolute -inset-y-px -left-px w-[3px] rounded-l-lg\", drifting ? \"bg-amber\" : \"bg-accent\")} />}\n <div className=\"flex items-center justify-between font-mono text-[10px]\">\n <span className=\"text-muted\">{item.id}</span>\n {agent ? (\n <AgentMark attach={{ kind: \"epic\", id: item.id }} />\n ) : live ? (\n <span className=\"flex items-center gap-1.5 uppercase tracking-wider text-accent\"><StatusDot status=\"in-progress\" className=\"h-1.5 w-1.5\" />Live</span>\n ) : (\n <span className=\"uppercase tracking-wider text-muted\">{item.tasks.length ? `${item.tasks.length} tasks` : \"No tasks yet\"}</span>\n )}\n </div>\n <p className={cn(\"line-clamp-2 text-[13px] leading-snug\", live ? \"font-medium text-txt\" : \"text-txt/80\")} title={item.title}>\n {item.title}\n </p>\n {taskStatuses && taskStatuses.length > 0 && (\n <div className=\"flex items-center gap-2\">\n <SegmentedProgress statuses={taskStatuses} />\n <span className=\"shrink-0 font-mono text-[10px] text-muted\">\n {live && nextTaskId ? <>next <span className=\"text-txt\">{nextTaskId}</span></> : `${taskStatuses.filter((s) => s === \"done\").length}/${taskStatuses.length}`}\n </span>\n </div>\n )}\n <DueNote data={data} />\n <DriftMark drift={data.drift} />\n </div>\n )\n}\n\nexport const nodeTypes = { horizon: HorizonNode, feature: FeatureNode }\n","/**\n * src/lib/roadmap-health.ts\n * Pure (no fs): roadmap progress + drift, shared by the Roadmap page and the MCP handler.\n * A feature's expected status comes from its linked tasks; a horizon's from its features.\n */\n\nimport type { RoadmapItem, RoadmapStatus, Task } from './core'\n\n/** What health needs from a task: status for progress, due for at-risk. */\nexport type TaskInfo = Pick<Task, 'status' | 'due'>\n\nexport interface RoadmapProgress { done: number; total: number }\n\nexport interface RoadmapDrift {\n id: string\n kind: 'status-mismatch' | 'missing-task' | 'overdue' | 'at-risk'\n message: string\n suggestedStatus?: RoadmapStatus\n}\n\nexport interface RoadmapHealth {\n progress: Record<string, RoadmapProgress>\n drift: RoadmapDrift[]\n}\n\nexport type DueState = 'overdue' | 'soon' | 'ok' | 'done'\n\nconst SOON_DAYS = 7\n\n/** Local calendar date \"YYYY-MM-DD\" (due dates are calendar dates, not instants). */\nexport function localToday(now = new Date()): string {\n const p = (n: number) => String(n).padStart(2, '0')\n return `${now.getFullYear()}-${p(now.getMonth() + 1)}-${p(now.getDate())}`\n}\n\nfunction daysBetween(from: string, to: string): number {\n const utc = (d: string) => Date.UTC(+d.slice(0, 4), +d.slice(5, 7) - 1, +d.slice(8, 10))\n return Math.round((utc(to) - utc(from)) / 86_400_000)\n}\n\nexport function dueState(due: string | null, status: RoadmapStatus, today: string): DueState | null {\n if (!due) return null\n if (status === 'done') return 'done'\n if (due < today) return 'overdue'\n return daysBetween(today, due) <= SOON_DAYS ? 'soon' : 'ok'\n}\n\ntype Started = 'done' | 'in-progress' | 'other'\n\nfunction expectedStatus(states: Started[]): RoadmapStatus {\n if (states.every(s => s === 'done')) return 'done'\n if (states.some(s => s !== 'other')) return 'in-progress'\n return 'planned'\n}\n\nexport interface TaskDueSummary { overdue: number; next: string | null }\n\n/** Open tasks' deadlines for a map node: how many are overdue, and the nearest upcoming due. */\nexport function taskDueSummary(taskIds: string[], tasks: Record<string, TaskInfo>, today: string): TaskDueSummary | null {\n const dues = taskIds\n .map(id => tasks[id])\n .filter(t => t && t.due && t.status !== 'done' && t.status !== 'cancelled')\n .map(t => t.due as string)\n if (!dues.length) return null\n const upcoming = dues.filter(d => d >= today).sort()\n return { overdue: dues.length - upcoming.length, next: upcoming[0] ?? null }\n}\n\n/** Why an unfinished epic may miss its date: overdue or blocked tasks, or due soon with nothing started. */\nfunction atRiskReasons(item: RoadmapItem, linked: string[], tasks: Record<string, TaskInfo>, today: string): string[] {\n const reasons: string[] = []\n for (const id of linked) {\n const t = tasks[id]\n if (t.status !== 'done' && t.due && t.due < today) reasons.push(`${id} overdue since ${t.due}`)\n if (t.status === 'blocked') reasons.push(`${id} blocked`)\n }\n const started = linked.some(id => ['done', 'in-progress', 'review'].includes(tasks[id].status))\n if (item.due && dueState(item.due, item.status, today) === 'soon' && !started) {\n reasons.push(`due ${item.due}, nothing started`)\n }\n return reasons\n}\n\nexport function roadmapHealth(\n items: RoadmapItem[], tasks: Record<string, TaskInfo>, today: string,\n): RoadmapHealth {\n const progress: Record<string, RoadmapProgress> = {}\n const drift: RoadmapDrift[] = []\n\n for (const item of items) {\n if (item.due && dueState(item.due, item.status, today) === 'overdue') {\n drift.push({ id: item.id, kind: 'overdue', message: `${item.id} \"${item.title}\" is overdue since ${item.due}` })\n }\n }\n const horizonIds = new Set(items.filter(i => i.parent === null).map(i => i.id))\n\n for (const item of items) {\n if (item.parent === null) continue\n const missing = item.tasks.filter(t => !(t in tasks))\n if (missing.length) {\n drift.push({ id: item.id, kind: 'missing-task', message: `${item.id} links unknown task ${missing.join(', ')}` })\n }\n // cancelled tasks don't count toward progress or expected status\n const linked = item.tasks.filter(t => t in tasks && tasks[t].status !== 'cancelled')\n // a paused epic is stopped on purpose: not at risk\n const risks = item.status === 'done' || item.status === 'paused' ? [] : atRiskReasons(item, linked, tasks, today)\n if (risks.length) {\n drift.push({ id: item.id, kind: 'at-risk', message: `${item.id} \"${item.title}\" at risk: ${risks.join('; ')}` })\n }\n if (!linked.length) continue\n const states: Started[] = linked.map(t =>\n tasks[t].status === 'done' ? 'done' : tasks[t].status === 'in-progress' || tasks[t].status === 'review' ? 'in-progress' : 'other')\n progress[item.id] = { done: states.filter(s => s === 'done').length, total: linked.length }\n const expected = expectedStatus(states)\n // paused stays paused until everything is done\n if (expected !== item.status && !(item.status === 'paused' && expected !== 'done')) {\n const open = linked.filter(t => tasks[t].status !== 'done')\n drift.push({\n id: item.id,\n kind: 'status-mismatch',\n message: expected === 'done'\n ? `${item.id} \"${item.title}\": all tasks done but status is ${item.status}`\n : `${item.id} \"${item.title}\" is ${item.status} but tasks ${open.join(', ')} are not done`,\n suggestedStatus: expected,\n })\n }\n }\n\n for (const h of items) {\n if (!horizonIds.has(h.id)) continue\n const kids = items.filter(i => i.parent === h.id)\n if (!kids.length) continue\n const states: Started[] = kids.map(k => k.status === 'done' ? 'done' : k.status === 'in-progress' ? 'in-progress' : 'other')\n // weight by tasks; an epic not broken down yet counts as one unit\n progress[h.id] = kids.reduce((sum, k) => {\n const p = progress[k.id] ?? { done: k.status === 'done' ? 1 : 0, total: 1 }\n return { done: sum.done + p.done, total: sum.total + p.total }\n }, { done: 0, total: 0 })\n const expected = expectedStatus(states)\n if (expected !== h.status && !(h.status === 'paused' && expected !== 'done')) {\n drift.push({\n id: h.id,\n kind: 'status-mismatch',\n message: `${h.id} \"${h.title}\" is ${h.status} but its features say ${expected}`,\n suggestedStatus: expected,\n })\n }\n }\n\n return { progress, drift }\n}\n","import type { RoadmapItem, RoadmapLayout } from \"@/types\"\n\nexport const HORIZON_W = 260\nexport const FEATURE_W = 220\nconst BRANCH_DX = 340\nconst ROW_H = 110\nconst HORIZON_GAP = 90\nconst COL_DX = FEATURE_W + 40\nconst MAX_ROWS_PER_SIDE = 6 // beyond this, a side gets a second (outer, half-row staggered) column\n\n/** Items that sit on the spine: real horizons plus orphans whose parent is not a horizon. */\nexport function spineItems(items: RoadmapItem[]): RoadmapItem[] {\n const horizonIds = new Set(items.filter((i) => i.parent === null).map((i) => i.id))\n return items\n .filter((i) => i.parent === null || !horizonIds.has(i.parent))\n .sort((a, b) => a.order - b.order)\n}\n\nexport function childrenOf(items: RoadmapItem[], parentId: string): RoadmapItem[] {\n return items.filter((i) => i.parent === parentId).sort((a, b) => a.order - b.order)\n}\n\n/**\n * Resolve a position for every item: saved (layout.json) wins, otherwise auto-place.\n * Horizons stack on x=0 by order; children alternate right/left of their parent's RESOLVED position.\n */\nexport function resolvePositions(items: RoadmapItem[], layout: RoadmapLayout): RoadmapLayout {\n const out: RoadmapLayout = {}\n let cursor = 0\n for (const h of spineItems(items)) {\n const hp = layout[h.id] ?? { x: 0, y: cursor }\n out[h.id] = hp\n const kids = h.parent === null ? childrenOf(items, h.id) : []\n const cols = Math.ceil(kids.length / 2) > MAX_ROWS_PER_SIDE ? 2 : 1\n kids.forEach((c, i) => {\n const side = i % 2 === 0 ? 1 : -1\n const k = Math.floor(i / 2) // index within its side\n const col = k % cols\n const row = Math.floor(k / cols)\n out[c.id] = layout[c.id] ?? {\n x: hp.x + (HORIZON_W - FEATURE_W) / 2 + side * (BRANCH_DX + col * COL_DX),\n // outer column sits half a row lower so its edges pass between inner nodes\n y: hp.y + row * ROW_H + col * (ROW_H / 2),\n }\n })\n const rows = Math.ceil(Math.ceil(kids.length / 2) / cols)\n cursor += Math.max(1, rows) * ROW_H + HORIZON_GAP\n }\n return out\n}\n\nconst ARRANGE_ROW_GAP = 14 // between stacked epics in a column\nconst ARRANGE_BLOCK_GAP = 120 // between one horizon's block and the next\n\n/**\n * \"Arrange\" (tidy the whole map): ignores saved positions. Each horizon sits on the spine with its epics\n * in one column per side, stacked by their real heights, in order, each epic going to the shorter side.\n * The column is centred on its horizon so branches fan out evenly and never cross a node; each horizon's\n * block starts below the previous block's lowest node.\n */\nexport function arrangePositions(items: RoadmapItem[], heightOf: (id: string) => number): RoadmapLayout {\n const out: RoadmapLayout = {}\n let top = 0\n for (const h of spineItems(items)) {\n const hh = heightOf(h.id)\n const kids = h.parent === null ? childrenOf(items, h.id) : []\n const sides: { id: string; y: number }[][] = [[], []] // right, left\n const used = [0, 0]\n for (const c of kids) {\n const s = used[0] <= used[1] ? 0 : 1\n sides[s].push({ id: c.id, y: used[s] })\n used[s] += heightOf(c.id) + ARRANGE_ROW_GAP\n }\n const colH = used.map((u) => Math.max(0, u - ARRANGE_ROW_GAP))\n // centre each column on the horizon, then shift the whole block down so its top is at `top`\n const centre = hh / 2\n const colTop = colH.map((c) => centre - c / 2)\n const shift = top - Math.min(0, ...colTop)\n out[h.id] = { x: 0, y: shift }\n sides.forEach((col, s) => {\n const x = (HORIZON_W - FEATURE_W) / 2 + (s === 0 ? 1 : -1) * BRANCH_DX\n for (const { id, y } of col) out[id] = { x, y: shift + colTop[s] + y }\n })\n top = shift + Math.max(hh, ...colTop.map((t, s) => t + colH[s])) + ARRANGE_BLOCK_GAP\n }\n return out\n}\n","import type { RoadmapItem } from \"@/types\"\nimport { dueState, type DueState } from \"@/lib/roadmap-health\"\nimport { childrenOf, spineItems } from \"./layout\"\n\nexport const MONTH_W = 160\nexport const LANE_ROW_H = 44\nconst LABEL_W = 180 // horizontal room a marker's label needs before the next one fits on the same row\nconst MIN_MONTHS = 6\n\nconst MONTHS = [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n\n// Dates are \"YYYY-MM-DD\" calendar dates — parsed by hand, never via new Date(string) (UTC shift).\nconst ymd = (d: string) => ({ y: +d.slice(0, 4), m: +d.slice(5, 7), day: +d.slice(8, 10) })\nconst daysIn = (y: number, m: number) => new Date(y, m, 0).getDate()\n\nexport function formatDay(d: string): string {\n const { m, day } = ymd(d)\n return `${day} ${MONTHS[m - 1]}`\n}\n\nexport interface TimelineMarker { item: RoadmapItem; x: number; row: number; state: DueState | null; horizon: boolean }\nexport interface TimelineLane { item: RoadmapItem; rows: number; markers: TimelineMarker[] }\nexport interface Timeline {\n months: { label: string; x: number }[]\n width: number\n todayX: number\n lanes: TimelineLane[]\n undated: RoadmapItem[]\n}\n\nexport function buildTimeline(items: RoadmapItem[], today: string): Timeline {\n const dues = items.map((i) => i.due).filter((d): d is string => !!d)\n const first = ymd([today, ...dues].sort()[0])\n const last = ymd([today, ...dues].sort().at(-1) ?? today)\n\n // pad one month each side, then stretch to a readable minimum\n const start = { y: first.y, m: first.m - 1 }\n const span = Math.max(MIN_MONTHS, (last.y - first.y) * 12 + (last.m - first.m) + 3)\n const months = Array.from({ length: span }, (_, i) => {\n const t = start.y * 12 + (start.m - 1) + i\n const y = Math.floor(t / 12)\n const m = (t % 12) + 1\n return { y, m, label: m === 1 || i === 0 ? `${MONTHS[m - 1]} ${y}` : MONTHS[m - 1], x: i * MONTH_W }\n })\n\n const xOf = (d: string) => {\n const { y, m, day } = ymd(d)\n const idx = (y - months[0].y) * 12 + (m - months[0].m)\n return idx * MONTH_W + ((day - 0.5) / daysIn(y, m)) * MONTH_W\n }\n\n const lanes = spineItems(items).map((h) => {\n const dated = [h, ...(h.parent === null ? childrenOf(items, h.id) : [])].filter((i) => i.due)\n const rowEnds: number[] = []\n const markers = dated\n .map((item) => ({ item, x: xOf(item.due as string), horizon: item.id === h.id }))\n .sort((a, b) => a.x - b.x)\n .map((mk) => {\n // greedy: first row whose last label ends before this marker\n let row = rowEnds.findIndex((end) => mk.x >= end)\n if (row === -1) row = rowEnds.push(0) - 1\n rowEnds[row] = mk.x + LABEL_W\n return { ...mk, row, state: dueState(mk.item.due, mk.item.status, today) }\n })\n return { item: h, rows: Math.max(1, rowEnds.length), markers }\n })\n\n return {\n months: months.map(({ label, x }) => ({ label, x })),\n width: span * MONTH_W,\n todayX: xOf(today),\n lanes,\n undated: items.filter((i) => !i.due && i.status !== \"done\"), // shipped work needs no date\n }\n}\n"],"names":["AGENT_LABEL","running","review","AgentMark","attach","className","agent","show","label","status","type","onClick","e","stopPropagation","chatId","title","AgentDot","SIDES","Top","Right","Bottom","Left","Handles","map","p","id","position","isConnectable","STATUS_LABEL","paused","done","planned","StatusDot","StatusPill","TASK_STATUS_BG","blocked","todo","cancelled","SegmentedProgress","statuses","length","filter","s","i","ProgressRing","value","total","r","c","Math","PI","pct","viewBox","cx","cy","fill","strokeWidth","stroke","strokeLinecap","strokeDasharray","strokeDashoffset","round","Progress","progress","style","width","DueChip","due","state","DueNote","data","taskDue","overdue","item","dueState","next","taskDueSoon","DriftMark","drift","join","HorizonNode","selected","epics","chapter","String","padStart","FeatureNode","taskStatuses","nextTaskId","kind","drifting","ring","live","tasks","nodeTypes","horizon","feature","SOON_DAYS","localToday","now","Date","n","getFullYear","getMonth","getDate","daysBetween","from","to","utc","d","UTC","slice","today","expectedStatus","states","every","some","taskDueSummary","taskIds","dues","t","upcoming","sort","atRiskReasons","linked","reasons","push","started","includes","roadmapHealth","items","message","horizonIds","Set","parent","missing","risks","expected","open","suggestedStatus","h","has","kids","k","reduce","sum"],"mappings":"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"}