vibedoc 1.6.1 → 1.8.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 (651) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +11 -0
  3. package/.next/build-manifest.json +3 -3
  4. package/.next/prerender-manifest.json +69 -13
  5. package/.next/routes-manifest.json +66 -0
  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/app-paths-manifest.json +3 -0
  11. package/.next/server/app/(app)/chat/page/build-manifest.json +20 -0
  12. package/.next/server/app/(app)/chat/page/next-font-manifest.json +11 -0
  13. package/.next/server/app/(app)/chat/page/react-loadable-manifest.json +1 -0
  14. package/.next/server/app/(app)/chat/page/server-reference-manifest.json +4 -0
  15. package/.next/server/app/(app)/chat/page.js +15 -0
  16. package/.next/server/app/(app)/chat/page.js.map +5 -0
  17. package/.next/server/app/(app)/chat/page.js.nft.json +1 -0
  18. package/.next/server/app/(app)/chat/page_client-reference-manifest.js +3 -0
  19. package/.next/server/app/(app)/docs/page.js.nft.json +1 -1
  20. package/.next/server/app/(app)/docs/page_client-reference-manifest.js +1 -1
  21. package/.next/server/app/(app)/explorer/page.js.nft.json +1 -1
  22. package/.next/server/app/(app)/explorer/page_client-reference-manifest.js +1 -1
  23. package/.next/server/app/(app)/manual-tests/page/app-paths-manifest.json +3 -0
  24. package/.next/server/app/(app)/manual-tests/page/build-manifest.json +20 -0
  25. package/.next/server/app/(app)/manual-tests/page/next-font-manifest.json +11 -0
  26. package/.next/server/app/(app)/manual-tests/page/react-loadable-manifest.json +1 -0
  27. package/.next/server/app/(app)/manual-tests/page/server-reference-manifest.json +4 -0
  28. package/.next/server/app/(app)/manual-tests/page.js +15 -0
  29. package/.next/server/app/(app)/manual-tests/page.js.map +5 -0
  30. package/.next/server/app/(app)/manual-tests/page.js.nft.json +1 -0
  31. package/.next/server/app/(app)/manual-tests/page_client-reference-manifest.js +3 -0
  32. package/.next/server/app/(app)/memory/page.js.nft.json +1 -1
  33. package/.next/server/app/(app)/memory/page_client-reference-manifest.js +1 -1
  34. package/.next/server/app/(app)/roadmap/page.js.nft.json +1 -1
  35. package/.next/server/app/(app)/roadmap/page_client-reference-manifest.js +1 -1
  36. package/.next/server/app/(app)/settings/page.js.nft.json +1 -1
  37. package/.next/server/app/(app)/settings/page_client-reference-manifest.js +1 -1
  38. package/.next/server/app/(app)/setup/page.js.nft.json +1 -1
  39. package/.next/server/app/(app)/setup/page_client-reference-manifest.js +1 -1
  40. package/.next/server/app/_global-error.html +1 -1
  41. package/.next/server/app/_global-error.rsc +1 -1
  42. package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  43. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  44. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  45. package/.next/server/app/_not-found/page.js.nft.json +1 -1
  46. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  47. package/.next/server/app/_not-found.html +1 -1
  48. package/.next/server/app/_not-found.rsc +3 -2
  49. package/.next/server/app/_not-found.segments/_full.segment.rsc +3 -2
  50. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +3 -2
  51. package/.next/server/app/_not-found.segments/_tree.segment.rsc +3 -2
  52. package/.next/server/app/activity.html +1 -1
  53. package/.next/server/app/activity.rsc +14 -13
  54. package/.next/server/app/activity.segments/!KGFwcCk/activity/__PAGE__.segment.rsc +10 -10
  55. package/.next/server/app/activity.segments/_full.segment.rsc +14 -13
  56. package/.next/server/app/activity.segments/_tree.segment.rsc +3 -2
  57. package/.next/server/app/api/activity/route.js +2 -2
  58. package/.next/server/app/api/activity/route.js.nft.json +1 -1
  59. package/.next/server/app/api/backlinks/route.js +2 -2
  60. package/.next/server/app/api/backlinks/route.js.nft.json +1 -1
  61. package/.next/server/app/api/chat/route.js +1 -1
  62. package/.next/server/app/api/chat/route.js.nft.json +1 -1
  63. package/.next/server/app/api/context/route.js +2 -2
  64. package/.next/server/app/api/context/route.js.nft.json +1 -1
  65. package/.next/server/app/api/conversations/route/app-paths-manifest.json +3 -0
  66. package/.next/server/app/api/conversations/route/build-manifest.json +12 -0
  67. package/.next/server/app/api/conversations/route/server-reference-manifest.json +4 -0
  68. package/.next/server/app/api/conversations/route.js +9 -0
  69. package/.next/server/app/api/conversations/route.js.map +5 -0
  70. package/.next/server/app/api/conversations/route.js.nft.json +1 -0
  71. package/.next/server/app/api/conversations/route_client-reference-manifest.js +3 -0
  72. package/.next/server/app/api/decisions/route.js +2 -2
  73. package/.next/server/app/api/decisions/route.js.nft.json +1 -1
  74. package/.next/server/app/api/docs/route.js +1 -1
  75. package/.next/server/app/api/docs/route.js.nft.json +1 -1
  76. package/.next/server/app/api/explorer/route.js +2 -2
  77. package/.next/server/app/api/explorer/route.js.nft.json +1 -1
  78. package/.next/server/app/api/mcp/route.js +1 -1
  79. package/.next/server/app/api/mcp/route.js.nft.json +1 -1
  80. package/.next/server/app/api/memory/route.js +2 -2
  81. package/.next/server/app/api/memory/route.js.nft.json +1 -1
  82. package/.next/server/app/api/plan/apply/route.js +3 -3
  83. package/.next/server/app/api/plan/apply/route.js.nft.json +1 -1
  84. package/.next/server/app/api/projects/route.js +2 -2
  85. package/.next/server/app/api/projects/route.js.nft.json +1 -1
  86. package/.next/server/app/api/registry/route.js +2 -2
  87. package/.next/server/app/api/registry/route.js.nft.json +1 -1
  88. package/.next/server/app/api/roadmap/create/route.js +3 -3
  89. package/.next/server/app/api/roadmap/create/route.js.nft.json +1 -1
  90. package/.next/server/app/api/roadmap/delete/route.js +3 -3
  91. package/.next/server/app/api/roadmap/delete/route.js.nft.json +1 -1
  92. package/.next/server/app/api/roadmap/generate/route.js +3 -3
  93. package/.next/server/app/api/roadmap/generate/route.js.nft.json +1 -1
  94. package/.next/server/app/api/roadmap/layout/route.js +3 -3
  95. package/.next/server/app/api/roadmap/layout/route.js.nft.json +1 -1
  96. package/.next/server/app/api/roadmap/restore/route/app-paths-manifest.json +3 -0
  97. package/.next/server/app/api/roadmap/restore/route/build-manifest.json +12 -0
  98. package/.next/server/app/api/roadmap/restore/route/server-reference-manifest.json +4 -0
  99. package/.next/server/app/api/roadmap/restore/route.js +9 -0
  100. package/.next/server/app/api/roadmap/restore/route.js.map +5 -0
  101. package/.next/server/app/api/roadmap/restore/route.js.nft.json +1 -0
  102. package/.next/server/app/api/roadmap/restore/route_client-reference-manifest.js +3 -0
  103. package/.next/server/app/api/roadmap/route.js +3 -3
  104. package/.next/server/app/api/roadmap/route.js.nft.json +1 -1
  105. package/.next/server/app/api/roadmap/update/route.js +3 -3
  106. package/.next/server/app/api/roadmap/update/route.js.nft.json +1 -1
  107. package/.next/server/app/api/sessions/route.js +2 -2
  108. package/.next/server/app/api/sessions/route.js.nft.json +1 -1
  109. package/.next/server/app/api/settings/route.js +3 -3
  110. package/.next/server/app/api/settings/route.js.nft.json +1 -1
  111. package/.next/server/app/api/setup/generate/route.js +1 -1
  112. package/.next/server/app/api/setup/generate/route.js.nft.json +1 -1
  113. package/.next/server/app/api/setup/write/route.js +2 -2
  114. package/.next/server/app/api/setup/write/route.js.nft.json +1 -1
  115. package/.next/server/app/api/summary/route.js +2 -2
  116. package/.next/server/app/api/summary/route.js.nft.json +1 -1
  117. package/.next/server/app/api/tasks/bulk/route/app-paths-manifest.json +3 -0
  118. package/.next/server/app/api/tasks/bulk/route/build-manifest.json +12 -0
  119. package/.next/server/app/api/tasks/bulk/route/server-reference-manifest.json +4 -0
  120. package/.next/server/app/api/tasks/bulk/route.js +9 -0
  121. package/.next/server/app/api/tasks/bulk/route.js.map +5 -0
  122. package/.next/server/app/api/tasks/bulk/route.js.nft.json +1 -0
  123. package/.next/server/app/api/tasks/bulk/route_client-reference-manifest.js +3 -0
  124. package/.next/server/app/api/tasks/create/route.js +2 -2
  125. package/.next/server/app/api/tasks/create/route.js.nft.json +1 -1
  126. package/.next/server/app/api/tasks/delete/route/app-paths-manifest.json +3 -0
  127. package/.next/server/app/api/tasks/delete/route/build-manifest.json +12 -0
  128. package/.next/server/app/api/tasks/delete/route/server-reference-manifest.json +4 -0
  129. package/.next/server/app/api/tasks/delete/route.js +9 -0
  130. package/.next/server/app/api/tasks/delete/route.js.map +5 -0
  131. package/.next/server/app/api/tasks/delete/route.js.nft.json +1 -0
  132. package/.next/server/app/api/tasks/delete/route_client-reference-manifest.js +3 -0
  133. package/.next/server/app/api/tasks/manual-tests/route/app-paths-manifest.json +3 -0
  134. package/.next/server/app/api/tasks/manual-tests/route/build-manifest.json +12 -0
  135. package/.next/server/app/api/tasks/manual-tests/route/server-reference-manifest.json +4 -0
  136. package/.next/server/app/api/tasks/manual-tests/route.js +8 -0
  137. package/.next/server/app/api/tasks/manual-tests/route.js.map +5 -0
  138. package/.next/server/app/api/tasks/manual-tests/route.js.nft.json +1 -0
  139. package/.next/server/app/api/tasks/manual-tests/route_client-reference-manifest.js +3 -0
  140. package/.next/server/app/api/tasks/restore/route/app-paths-manifest.json +3 -0
  141. package/.next/server/app/api/tasks/restore/route/build-manifest.json +12 -0
  142. package/.next/server/app/api/tasks/restore/route/server-reference-manifest.json +4 -0
  143. package/.next/server/app/api/tasks/restore/route.js +9 -0
  144. package/.next/server/app/api/tasks/restore/route.js.map +5 -0
  145. package/.next/server/app/api/tasks/restore/route.js.nft.json +1 -0
  146. package/.next/server/app/api/tasks/restore/route_client-reference-manifest.js +3 -0
  147. package/.next/server/app/api/tasks/review/route/app-paths-manifest.json +3 -0
  148. package/.next/server/app/api/tasks/review/route/build-manifest.json +12 -0
  149. package/.next/server/app/api/tasks/review/route/server-reference-manifest.json +4 -0
  150. package/.next/server/app/api/tasks/review/route.js +9 -0
  151. package/.next/server/app/api/tasks/review/route.js.map +5 -0
  152. package/.next/server/app/api/tasks/review/route.js.nft.json +1 -0
  153. package/.next/server/app/api/tasks/review/route_client-reference-manifest.js +3 -0
  154. package/.next/server/app/api/tasks/route.js +2 -2
  155. package/.next/server/app/api/tasks/route.js.nft.json +1 -1
  156. package/.next/server/app/api/tasks/update/route/app-paths-manifest.json +3 -0
  157. package/.next/server/app/api/tasks/update/route/build-manifest.json +12 -0
  158. package/.next/server/app/api/tasks/update/route/server-reference-manifest.json +4 -0
  159. package/.next/server/app/api/tasks/update/route.js +9 -0
  160. package/.next/server/app/api/tasks/update/route.js.map +5 -0
  161. package/.next/server/app/api/tasks/update/route.js.nft.json +1 -0
  162. package/.next/server/app/api/tasks/update/route_client-reference-manifest.js +3 -0
  163. package/.next/server/app/api/views/route/app-paths-manifest.json +3 -0
  164. package/.next/server/app/api/views/route/build-manifest.json +12 -0
  165. package/.next/server/app/api/views/route/server-reference-manifest.json +4 -0
  166. package/.next/server/app/api/views/route.js +9 -0
  167. package/.next/server/app/api/views/route.js.map +5 -0
  168. package/.next/server/app/api/views/route.js.nft.json +1 -0
  169. package/.next/server/app/api/views/route_client-reference-manifest.js +3 -0
  170. package/.next/server/app/board.html +1 -1
  171. package/.next/server/app/board.rsc +14 -13
  172. package/.next/server/app/board.segments/!KGFwcCk/board/__PAGE__.segment.rsc +10 -10
  173. package/.next/server/app/board.segments/_full.segment.rsc +14 -13
  174. package/.next/server/app/board.segments/_tree.segment.rsc +3 -2
  175. package/.next/server/app/chat.html +1 -0
  176. package/.next/server/app/chat.meta +31 -0
  177. package/.next/server/app/chat.rsc +31 -0
  178. package/.next/server/app/chat.segments/!KGFwcCk/chat/__PAGE__.segment.rsc +34 -0
  179. package/.next/server/app/chat.segments/_full.segment.rsc +31 -0
  180. package/.next/server/app/chat.segments/_tree.segment.rsc +5 -0
  181. package/.next/server/app/docs.html +1 -1
  182. package/.next/server/app/docs.rsc +24 -27
  183. package/.next/server/app/docs.segments/!KGFwcCk/docs/__PAGE__.segment.rsc +7 -6
  184. package/.next/server/app/docs.segments/_full.segment.rsc +24 -27
  185. package/.next/server/app/docs.segments/_tree.segment.rsc +3 -2
  186. package/.next/server/app/explorer.html +1 -1
  187. package/.next/server/app/explorer.rsc +14 -13
  188. package/.next/server/app/explorer.segments/!KGFwcCk/explorer/__PAGE__.segment.rsc +6 -5
  189. package/.next/server/app/explorer.segments/_full.segment.rsc +14 -13
  190. package/.next/server/app/explorer.segments/_tree.segment.rsc +3 -2
  191. package/.next/server/app/index.html +1 -1
  192. package/.next/server/app/index.rsc +3 -2
  193. package/.next/server/app/index.segments/__PAGE__.segment.rsc +3 -2
  194. package/.next/server/app/index.segments/_full.segment.rsc +3 -2
  195. package/.next/server/app/index.segments/_tree.segment.rsc +3 -2
  196. package/.next/server/app/manual-tests.html +1 -0
  197. package/.next/server/app/manual-tests.meta +31 -0
  198. package/.next/server/app/manual-tests.rsc +31 -0
  199. package/.next/server/app/manual-tests.segments/!KGFwcCk/manual-tests/__PAGE__.segment.rsc +33 -0
  200. package/.next/server/app/manual-tests.segments/_full.segment.rsc +31 -0
  201. package/.next/server/app/manual-tests.segments/_tree.segment.rsc +5 -0
  202. package/.next/server/app/memory.html +1 -1
  203. package/.next/server/app/memory.rsc +14 -13
  204. package/.next/server/app/memory.segments/!KGFwcCk/memory/__PAGE__.segment.rsc +6 -5
  205. package/.next/server/app/memory.segments/_full.segment.rsc +14 -13
  206. package/.next/server/app/memory.segments/_tree.segment.rsc +3 -2
  207. package/.next/server/app/page.js.nft.json +1 -1
  208. package/.next/server/app/page_client-reference-manifest.js +1 -1
  209. package/.next/server/app/roadmap.html +1 -1
  210. package/.next/server/app/roadmap.rsc +24 -26
  211. package/.next/server/app/roadmap.segments/!KGFwcCk/roadmap/__PAGE__.segment.rsc +10 -11
  212. package/.next/server/app/roadmap.segments/_full.segment.rsc +24 -26
  213. package/.next/server/app/roadmap.segments/_tree.segment.rsc +3 -2
  214. package/.next/server/app/settings.html +1 -1
  215. package/.next/server/app/settings.rsc +14 -13
  216. package/.next/server/app/settings.segments/!KGFwcCk/settings/__PAGE__.segment.rsc +10 -10
  217. package/.next/server/app/settings.segments/_full.segment.rsc +14 -13
  218. package/.next/server/app/settings.segments/_tree.segment.rsc +3 -2
  219. package/.next/server/app/setup.html +1 -1
  220. package/.next/server/app/setup.rsc +14 -13
  221. package/.next/server/app/setup.segments/!KGFwcCk/setup/__PAGE__.segment.rsc +6 -5
  222. package/.next/server/app/setup.segments/_full.segment.rsc +14 -13
  223. package/.next/server/app/setup.segments/_tree.segment.rsc +3 -2
  224. package/.next/server/app-paths-manifest.json +11 -0
  225. package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0-5bkpj._.js → 11mp_@anthropic-ai_sdk_00p3fu1._.js} +1 -1
  226. package/.next/server/chunks/{11mp_@anthropic-ai_sdk_01l5h3i._.js → 11mp_@anthropic-ai_sdk_01amtux._.js} +1 -1
  227. package/.next/server/chunks/{11mp_@anthropic-ai_sdk_00psb_y._.js → 11mp_@anthropic-ai_sdk_01jjl08._.js} +1 -1
  228. package/.next/server/chunks/{11mp_@anthropic-ai_sdk_072r2bd._.js → 11mp_@anthropic-ai_sdk_071zfm8._.js} +1 -1
  229. package/.next/server/chunks/11mp_@anthropic-ai_sdk_07v3boe._.js +3 -0
  230. package/.next/server/chunks/11mp_@anthropic-ai_sdk_09iva72._.js +3 -0
  231. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0bom1b1._.js +3 -0
  232. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0dvji7p._.js +3 -0
  233. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0dzo8jn._.js +3 -0
  234. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0hvqsqq._.js +3 -0
  235. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0i7i-jw._.js +3 -0
  236. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0k0iop5._.js +3 -0
  237. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0l3-6aq._.js +3 -0
  238. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0oegm3y._.js +3 -0
  239. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0p5cyes._.js +3 -0
  240. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0qw8i6_._.js +3 -0
  241. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0yk-a7v._.js +3 -0
  242. package/.next/server/chunks/11mp_@anthropic-ai_sdk_11fsqvb._.js +3 -0
  243. package/.next/server/chunks/11mp_@anthropic-ai_sdk_143_7ez._.js +3 -0
  244. package/.next/server/chunks/11mp_@anthropic-ai_sdk_14a4-64._.js +3 -0
  245. package/.next/server/chunks/11mp_@anthropic-ai_sdk_17d_oma._.js +3 -0
  246. package/.next/server/chunks/11mp_@anthropic-ai_sdk_18qwuyb._.js +3 -0
  247. package/.next/server/chunks/11mp_@anthropic-ai_sdk_19au8y6._.js +3 -0
  248. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1ak_hy5._.js +3 -0
  249. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1cqa0nq._.js +3 -0
  250. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1i-x_q0._.js +3 -0
  251. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1i-x_q0._.js.map +1 -0
  252. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1jmtliz._.js +3 -0
  253. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1jmtliz._.js.map +1 -0
  254. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1jouwlj._.js +3 -0
  255. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1jouwlj._.js.map +1 -0
  256. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1r_q5um._.js +3 -0
  257. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1r_q5um._.js.map +1 -0
  258. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1t959xd._.js +3 -0
  259. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1t959xd._.js.map +1 -0
  260. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1vkprw9._.js +3 -0
  261. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1vkprw9._.js.map +1 -0
  262. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1y95ax9._.js +3 -0
  263. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1y95ax9._.js.map +1 -0
  264. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1y9misr._.js +3 -0
  265. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1y9misr._.js.map +1 -0
  266. package/.next/server/chunks/11mp_@anthropic-ai_sdk_21b8wwy._.js +3 -0
  267. package/.next/server/chunks/11mp_@anthropic-ai_sdk_21b8wwy._.js.map +1 -0
  268. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_08ecfgc._.js +3 -0
  269. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_09--sd6._.js +3 -0
  270. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0e3mwc6._.js +3 -0
  271. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0go4301._.js +3 -0
  272. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0iq9dmt._.js +3 -0
  273. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0n9ijke._.js +3 -0
  274. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0szcyrx._.js +3 -0
  275. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0xy2s3x._.js +3 -0
  276. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0yaujn7._.js +3 -0
  277. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0z9ly74._.js +3 -0
  278. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1hmq3al._.js +3 -0
  279. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1tqk4bp._.js +3 -0
  280. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1x-hr6f._.js +3 -0
  281. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1zsdhg0._.js +3 -0
  282. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_20t__fe._.js +3 -0
  283. package/.next/server/chunks/{[root-of-the-server]__1u_q61h._.js → [root-of-the-server]__0-pmfg2._.js} +2 -2
  284. package/.next/server/chunks/[root-of-the-server]__02co2yq._.js +3 -0
  285. package/.next/server/chunks/[root-of-the-server]__02co2yq._.js.map +1 -0
  286. package/.next/server/chunks/{[root-of-the-server]__1y3u5ud._.js → [root-of-the-server]__04tibmn._.js} +2 -2
  287. package/.next/server/chunks/{[root-of-the-server]__17xb02p._.js → [root-of-the-server]__05g5cgo._.js} +2 -2
  288. package/.next/server/chunks/{[root-of-the-server]__0aynzrb._.js → [root-of-the-server]__0b5pwze._.js} +2 -2
  289. package/.next/server/chunks/{[root-of-the-server]__142icjb._.js → [root-of-the-server]__0druay_._.js} +2 -2
  290. package/.next/server/chunks/{[root-of-the-server]__106gpvh._.js → [root-of-the-server]__0p6ja6l._.js} +2 -2
  291. package/.next/server/chunks/[root-of-the-server]__0q3-t8a._.js +3 -0
  292. package/.next/server/chunks/[root-of-the-server]__0q3-t8a._.js.map +1 -0
  293. package/.next/server/chunks/[root-of-the-server]__0vcsqzd._.js +3 -0
  294. package/.next/server/chunks/[root-of-the-server]__0vcsqzd._.js.map +1 -0
  295. package/.next/server/chunks/{[root-of-the-server]__0nfvvy9._.js → [root-of-the-server]__1-e3i_5._.js} +2 -2
  296. package/.next/server/chunks/[root-of-the-server]__1-ic3af._.js +3 -0
  297. package/.next/server/chunks/[root-of-the-server]__1-ic3af._.js.map +1 -0
  298. package/.next/server/chunks/[root-of-the-server]__11a4ptn._.js +3 -0
  299. package/.next/server/chunks/[root-of-the-server]__11a4ptn._.js.map +1 -0
  300. package/.next/server/chunks/{[root-of-the-server]__0e59y5j._.js → [root-of-the-server]__11c8641._.js} +2 -2
  301. package/.next/server/chunks/[root-of-the-server]__11c8641._.js.map +1 -0
  302. package/.next/server/chunks/[root-of-the-server]__12nzy_6._.js +3 -0
  303. package/.next/server/chunks/[root-of-the-server]__12nzy_6._.js.map +1 -0
  304. package/.next/server/chunks/[root-of-the-server]__15ck1wv._.js +3 -0
  305. package/.next/server/chunks/[root-of-the-server]__15ck1wv._.js.map +1 -0
  306. package/.next/server/chunks/[root-of-the-server]__1613hjb._.js +30 -19
  307. package/.next/server/chunks/[root-of-the-server]__1613hjb._.js.map +1 -1
  308. package/.next/server/chunks/{[root-of-the-server]__06zf_sh._.js → [root-of-the-server]__197vw9g._.js} +2 -2
  309. package/.next/server/chunks/{[root-of-the-server]__1j0rrps._.js → [root-of-the-server]__19k8t87._.js} +2 -2
  310. package/.next/server/chunks/{[root-of-the-server]__0eqd-tw._.js → [root-of-the-server]__1ezzeji._.js} +2 -2
  311. package/.next/server/chunks/[root-of-the-server]__1jxu2x9._.js +3 -0
  312. package/.next/server/chunks/[root-of-the-server]__1jxu2x9._.js.map +1 -0
  313. package/.next/server/chunks/[root-of-the-server]__1mrmaf9._.js +3 -0
  314. package/.next/server/chunks/{[root-of-the-server]__17p0rkn._.js → [root-of-the-server]__1n68akx._.js} +2 -2
  315. package/.next/server/chunks/[root-of-the-server]__1n68akx._.js.map +1 -0
  316. package/.next/server/chunks/{[root-of-the-server]__11s76m8._.js → [root-of-the-server]__1npya5q._.js} +2 -2
  317. package/.next/server/chunks/[root-of-the-server]__1npya5q._.js.map +1 -0
  318. package/.next/server/chunks/[root-of-the-server]__1qusy4g._.js +3 -0
  319. package/.next/server/chunks/[root-of-the-server]__1qusy4g._.js.map +1 -0
  320. package/.next/server/chunks/{[root-of-the-server]__1q4ahvz._.js → [root-of-the-server]__1umrorf._.js} +2 -2
  321. package/.next/server/chunks/{[root-of-the-server]__093hlkh._.js → [root-of-the-server]__1vh9g2o._.js} +2 -2
  322. package/.next/server/chunks/{[root-of-the-server]__1y-tt29._.js → [root-of-the-server]__1vq38ov._.js} +2 -2
  323. package/.next/server/chunks/[root-of-the-server]__1xb0fmp._.js +1 -1
  324. package/.next/server/chunks/[root-of-the-server]__1xb0fmp._.js.map +1 -1
  325. package/.next/server/chunks/_04byth9._.js +24 -19
  326. package/.next/server/chunks/_04byth9._.js.map +1 -1
  327. package/.next/server/chunks/_1au4syj._.js +1 -1
  328. package/.next/server/chunks/_1au4syj._.js.map +1 -1
  329. package/.next/server/chunks/_1b5fqxy._.js.map +1 -1
  330. package/.next/server/chunks/_1ivswa9._.js +3 -0
  331. package/.next/server/chunks/_1ivswa9._.js.map +1 -0
  332. package/.next/server/chunks/_next-internal_server_app_api_conversations_route_actions_1-pu7gs.js +3 -0
  333. package/.next/server/chunks/_next-internal_server_app_api_conversations_route_actions_1-pu7gs.js.map +1 -0
  334. package/.next/server/chunks/_next-internal_server_app_api_roadmap_restore_route_actions_0skshp1.js +3 -0
  335. package/.next/server/chunks/_next-internal_server_app_api_roadmap_restore_route_actions_0skshp1.js.map +1 -0
  336. package/.next/server/chunks/_next-internal_server_app_api_tasks_bulk_route_actions_1k75mlb.js +3 -0
  337. package/.next/server/chunks/_next-internal_server_app_api_tasks_bulk_route_actions_1k75mlb.js.map +1 -0
  338. package/.next/server/chunks/_next-internal_server_app_api_tasks_delete_route_actions_1k1g6mw.js +3 -0
  339. package/.next/server/chunks/_next-internal_server_app_api_tasks_delete_route_actions_1k1g6mw.js.map +1 -0
  340. package/.next/server/chunks/_next-internal_server_app_api_tasks_manual-tests_route_actions_1rpog0y.js +3 -0
  341. package/.next/server/chunks/_next-internal_server_app_api_tasks_manual-tests_route_actions_1rpog0y.js.map +1 -0
  342. package/.next/server/chunks/_next-internal_server_app_api_tasks_restore_route_actions_1ecsti8.js +3 -0
  343. package/.next/server/chunks/_next-internal_server_app_api_tasks_restore_route_actions_1ecsti8.js.map +1 -0
  344. package/.next/server/chunks/_next-internal_server_app_api_tasks_review_route_actions_1dly07f.js +3 -0
  345. package/.next/server/chunks/_next-internal_server_app_api_tasks_review_route_actions_1dly07f.js.map +1 -0
  346. package/.next/server/chunks/_next-internal_server_app_api_tasks_update_route_actions_0z-ho6g.js +3 -0
  347. package/.next/server/chunks/_next-internal_server_app_api_tasks_update_route_actions_0z-ho6g.js.map +1 -0
  348. package/.next/server/chunks/_next-internal_server_app_api_views_route_actions_10-2c0e.js +3 -0
  349. package/.next/server/chunks/_next-internal_server_app_api_views_route_actions_10-2c0e.js.map +1 -0
  350. package/.next/server/chunks/ssr/{_0qyglif._.js → 0_g__next_dist_000c5_m._.js} +2 -4
  351. package/.next/server/chunks/ssr/0_g__next_dist_000c5_m._.js.map +1 -0
  352. package/.next/server/chunks/ssr/{0_nd_mermaid_dist_mermaid_core_mjs_1vulg1x._.js → 0_nd_mermaid_dist_mermaid_core_mjs_027n2yl._.js} +2 -2
  353. package/.next/server/chunks/ssr/0_nd_mermaid_dist_mermaid_core_mjs_027n2yl._.js.map +1 -0
  354. package/.next/server/chunks/ssr/{1u84_katex_dist_katex_mjs_0mwkb-i._.js → 1u84_katex_dist_katex_mjs_1kb5xea._.js} +1 -1
  355. package/.next/server/chunks/ssr/1u84_katex_dist_katex_mjs_1kb5xea._.js.map +1 -0
  356. package/.next/server/chunks/ssr/1x05_lucide-react_dist_esm_icons_05ggp3i._.js +1 -1
  357. package/.next/server/chunks/ssr/1x05_lucide-react_dist_esm_icons_05ggp3i._.js.map +1 -1
  358. package/.next/server/chunks/ssr/1x05_lucide-react_dist_esm_icons_0wurouw._.js +3 -0
  359. package/.next/server/chunks/ssr/1x05_lucide-react_dist_esm_icons_0wurouw._.js.map +1 -0
  360. package/.next/server/chunks/ssr/1x05_lucide-react_dist_esm_icons_14hl50o._.js +3 -0
  361. package/.next/server/chunks/ssr/1x05_lucide-react_dist_esm_icons_14hl50o._.js.map +1 -0
  362. package/.next/server/chunks/ssr/1x05_lucide-react_dist_esm_icons_folder-open_mjs_117ipzw._.js +3 -0
  363. package/.next/server/chunks/ssr/1x05_lucide-react_dist_esm_icons_folder-open_mjs_117ipzw._.js.map +1 -0
  364. package/.next/server/chunks/ssr/1x05_lucide-react_dist_esm_icons_triangle-alert_mjs_0ei-mpz._.js +3 -0
  365. package/.next/server/chunks/ssr/1x05_lucide-react_dist_esm_icons_triangle-alert_mjs_0ei-mpz._.js.map +1 -0
  366. package/.next/server/chunks/ssr/[root-of-the-server]__0hcextx._.js +3 -0
  367. package/.next/server/chunks/ssr/[root-of-the-server]__0hcextx._.js.map +1 -0
  368. package/.next/server/chunks/ssr/[root-of-the-server]__0xt_0w2._.js.map +1 -1
  369. package/.next/server/chunks/ssr/[root-of-the-server]__11lfnu0._.js +3 -0
  370. package/.next/server/chunks/ssr/[root-of-the-server]__11lfnu0._.js.map +1 -0
  371. package/.next/server/chunks/ssr/_04xff_2._.js +1 -1
  372. package/.next/server/chunks/ssr/_04xff_2._.js.map +1 -1
  373. package/.next/server/chunks/ssr/_071j6mr._.js +4 -0
  374. package/.next/server/chunks/ssr/_071j6mr._.js.map +1 -0
  375. package/.next/server/chunks/ssr/_09b02z-._.js +3 -0
  376. package/.next/server/chunks/ssr/_09b02z-._.js.map +1 -0
  377. package/.next/server/chunks/ssr/_0d0f1s1._.js +3 -0
  378. package/.next/server/chunks/ssr/_0d0f1s1._.js.map +1 -0
  379. package/.next/server/chunks/ssr/_0idb-vo._.js +151 -0
  380. package/.next/server/chunks/ssr/_0idb-vo._.js.map +1 -0
  381. package/.next/server/chunks/ssr/_0lnt_va._.js +4 -0
  382. package/.next/server/chunks/ssr/_0lnt_va._.js.map +1 -0
  383. package/.next/server/chunks/ssr/_0qlymco._.js +3 -0
  384. package/.next/server/chunks/ssr/_0qlymco._.js.map +1 -0
  385. package/.next/server/chunks/ssr/_0qp3gu7._.js +3 -0
  386. package/.next/server/chunks/ssr/_0qp3gu7._.js.map +1 -0
  387. package/.next/server/chunks/ssr/_0sg1oeq._.js +3 -0
  388. package/.next/server/chunks/ssr/_0sg1oeq._.js.map +1 -0
  389. package/.next/server/chunks/ssr/_14emfpq._.js +3 -0
  390. package/.next/server/chunks/ssr/_14emfpq._.js.map +1 -0
  391. package/.next/server/chunks/ssr/_1ftruw6._.js +4 -0
  392. package/.next/server/chunks/ssr/_1ftruw6._.js.map +1 -0
  393. package/.next/server/chunks/ssr/_1gxjjvh._.js +1 -1
  394. package/.next/server/chunks/ssr/_1gxjjvh._.js.map +1 -1
  395. package/.next/server/chunks/ssr/_1ncdakv._.js +4 -0
  396. package/.next/server/chunks/ssr/_1ncdakv._.js.map +1 -0
  397. package/.next/server/chunks/ssr/_1t76zdx._.js +3 -0
  398. package/.next/server/chunks/ssr/_1t76zdx._.js.map +1 -0
  399. package/.next/server/chunks/ssr/_1x7ggg5._.js +4 -0
  400. package/.next/server/chunks/ssr/_1x7ggg5._.js.map +1 -0
  401. package/.next/server/chunks/ssr/_next-internal_server_app_(app)_chat_page_actions_0g4tbzt.js +3 -0
  402. package/.next/server/chunks/ssr/_next-internal_server_app_(app)_chat_page_actions_0g4tbzt.js.map +1 -0
  403. package/.next/server/chunks/ssr/_next-internal_server_app_(app)_manual-tests_page_actions_1g5zjb7.js +3 -0
  404. package/.next/server/chunks/ssr/_next-internal_server_app_(app)_manual-tests_page_actions_1g5zjb7.js.map +1 -0
  405. package/.next/server/chunks/ssr/{node_modules__pnpm_0w9uewb._.js → node_modules__pnpm_01bjcv9._.js} +1 -1
  406. package/.next/server/chunks/ssr/{node_modules__pnpm_0p10j87._.js → node_modules__pnpm_03qrzdb._.js} +1 -1
  407. package/.next/server/chunks/ssr/{node_modules__pnpm_1a3fo7j._.js → node_modules__pnpm_06d-fdo._.js} +2 -2
  408. package/.next/server/chunks/ssr/{node_modules__pnpm_1o30a9w._.js → node_modules__pnpm_0ctisl0._.js} +1 -1
  409. package/.next/server/chunks/ssr/{node_modules__pnpm_17o8zbz._.js → node_modules__pnpm_0fwp8jm._.js} +1 -1
  410. package/.next/server/chunks/ssr/{node_modules__pnpm_19ys1iv._.js → node_modules__pnpm_0kpu0-2._.js} +1 -1
  411. package/.next/server/chunks/ssr/{node_modules__pnpm_1r4w_7k._.js → node_modules__pnpm_0vry74x._.js} +2 -2
  412. package/.next/server/chunks/ssr/{node_modules__pnpm_11lluiq._.js → node_modules__pnpm_0ycbjbd._.js} +2 -2
  413. package/.next/server/chunks/ssr/{node_modules__pnpm_1_34wt2._.js → node_modules__pnpm_1-76qxg._.js} +1 -1
  414. package/.next/server/chunks/ssr/{node_modules__pnpm_0ma8hho._.js → node_modules__pnpm_1-r94f7._.js} +1 -1
  415. package/.next/server/chunks/ssr/{node_modules__pnpm_0--x5-5._.js → node_modules__pnpm_14piqi4._.js} +1 -1
  416. package/.next/server/chunks/ssr/node_modules__pnpm_14piqi4._.js.map +1 -0
  417. package/.next/server/chunks/ssr/{node_modules__pnpm_04xoqd9._.js → node_modules__pnpm_16u1vfb._.js} +2 -2
  418. package/.next/server/chunks/ssr/node_modules__pnpm_16u1vfb._.js.map +1 -0
  419. package/.next/server/chunks/ssr/{node_modules__pnpm_19ejwjv._.js → node_modules__pnpm_17i6z2d._.js} +1 -1
  420. package/.next/server/chunks/ssr/{node_modules__pnpm_0cj37c-._.js → node_modules__pnpm_189m48n._.js} +1 -1
  421. package/.next/server/chunks/ssr/node_modules__pnpm_189m48n._.js.map +1 -0
  422. package/.next/server/chunks/ssr/{node_modules__pnpm_18pu1wl._.js → node_modules__pnpm_192f222._.js} +1 -1
  423. package/.next/server/chunks/ssr/{node_modules__pnpm_1zsbfem._.js → node_modules__pnpm_1a48_nl._.js} +1 -1
  424. package/.next/server/chunks/ssr/{node_modules__pnpm_00i3mh2._.js → node_modules__pnpm_1aa37e1._.js} +1 -1
  425. package/.next/server/chunks/ssr/{node_modules__pnpm_0kna82c._.js → node_modules__pnpm_1f440kx._.js} +1 -1
  426. package/.next/server/chunks/ssr/{node_modules__pnpm_1-poetj._.js → node_modules__pnpm_1fn3ejy._.js} +1 -1
  427. package/.next/server/chunks/ssr/{node_modules__pnpm_0yixxj2._.js → node_modules__pnpm_1min2jl._.js} +1 -1
  428. package/.next/server/chunks/ssr/node_modules__pnpm_1q89l7p._.js +3 -0
  429. package/.next/server/chunks/ssr/node_modules__pnpm_1q89l7p._.js.map +1 -0
  430. package/.next/server/chunks/ssr/{node_modules__pnpm_1l-posw._.js → node_modules__pnpm_1q_hhr3._.js} +2 -2
  431. package/.next/server/chunks/ssr/{node_modules__pnpm_0fk-8nl._.js → node_modules__pnpm_1qmkxyo._.js} +1 -1
  432. package/.next/server/chunks/ssr/{node_modules__pnpm_1xolwvc._.js → node_modules__pnpm_1qp_jvj._.js} +2 -2
  433. package/.next/server/chunks/ssr/{node_modules__pnpm_07j8gcu._.js → node_modules__pnpm_1ssjj4u._.js} +1 -1
  434. package/.next/server/chunks/ssr/{node_modules__pnpm_042y3e-._.js → node_modules__pnpm_1txccoj._.js} +1 -1
  435. package/.next/server/chunks/ssr/{node_modules__pnpm_0nbxdp_._.js → node_modules__pnpm_1uwkcin._.js} +1 -1
  436. package/.next/server/chunks/ssr/node_modules__pnpm_1xeothw._.js +3 -0
  437. package/.next/server/chunks/ssr/node_modules__pnpm_1xeothw._.js.map +1 -0
  438. package/.next/server/chunks/ssr/{node_modules__pnpm_00wjhj4._.js → node_modules__pnpm_1ygal0c._.js} +1 -1
  439. package/.next/server/chunks/ssr/src_app_(app)_activity_page_tsx_13jd6bn._.js +1 -1
  440. package/.next/server/chunks/ssr/src_app_(app)_activity_page_tsx_13jd6bn._.js.map +1 -1
  441. package/.next/server/chunks/ssr/src_app_(app)_board_page_tsx_0gpfc77._.js +3 -0
  442. package/.next/server/chunks/ssr/src_app_(app)_board_page_tsx_0gpfc77._.js.map +1 -0
  443. package/.next/server/chunks/ssr/src_app_(app)_chat_page_tsx_0c3e4l4._.js +3 -0
  444. package/.next/server/chunks/ssr/src_app_(app)_chat_page_tsx_0c3e4l4._.js.map +1 -0
  445. package/.next/server/chunks/ssr/src_app_(app)_layout_tsx_1yu5hom._.js +3 -0
  446. package/.next/server/chunks/ssr/src_app_(app)_layout_tsx_1yu5hom._.js.map +1 -0
  447. package/.next/server/chunks/ssr/src_app_(app)_manual-tests_page_tsx_01tnunf._.js +3 -0
  448. package/.next/server/chunks/ssr/src_app_(app)_manual-tests_page_tsx_01tnunf._.js.map +1 -0
  449. package/.next/server/chunks/ssr/src_app_(app)_roadmap_page_tsx_0vcq3jr._.js +5 -0
  450. package/.next/server/chunks/ssr/src_app_(app)_roadmap_page_tsx_0vcq3jr._.js.map +1 -0
  451. package/.next/server/chunks/ssr/src_app_(app)_settings_page_tsx_0zevtee._.js +2 -2
  452. package/.next/server/chunks/ssr/src_app_(app)_settings_page_tsx_0zevtee._.js.map +1 -1
  453. package/.next/server/chunks/ssr/src_app_(app)_setup_page_tsx_1yids_n._.js +1 -1
  454. package/.next/server/chunks/ssr/src_app_(app)_setup_page_tsx_1yids_n._.js.map +1 -1
  455. package/.next/server/chunks/ssr/src_components_chat_ChatView_tsx_0h5j-e2._.js +3 -0
  456. package/.next/server/chunks/ssr/src_components_chat_ChatView_tsx_0h5j-e2._.js.map +1 -0
  457. package/.next/server/chunks/ssr/src_context_ChatContext_tsx_0lowp8p._.js +5 -0
  458. package/.next/server/chunks/ssr/src_context_ChatContext_tsx_0lowp8p._.js.map +1 -0
  459. package/.next/server/chunks/ssr/{_1wf14_u._.js → src_lib_templates_index_ts_1s61uk7._.js} +2 -2
  460. package/.next/server/chunks/ssr/{_1wf14_u._.js.map → src_lib_templates_index_ts_1s61uk7._.js.map} +1 -1
  461. package/.next/server/middleware-build-manifest.js +3 -3
  462. package/.next/server/next-font-manifest.js +1 -1
  463. package/.next/server/next-font-manifest.json +8 -0
  464. package/.next/server/pages/404.html +1 -1
  465. package/.next/server/pages/500.html +1 -1
  466. package/.next/server/prefetch-hints.json +38 -0
  467. package/.next/server/server-reference-manifest.js +1 -1
  468. package/.next/server/server-reference-manifest.json +1 -1
  469. package/.next/static/chunks/02cj5_i9np4sg.js +3 -0
  470. package/.next/static/chunks/02i5hsdat1nuq.css +9 -0
  471. package/.next/static/chunks/0mgifb98wbesa.js +1 -0
  472. package/.next/static/chunks/0p1-hkgnm2ll2.js +1 -0
  473. package/.next/static/chunks/0pgu5q5vodev6.js +1 -0
  474. package/.next/static/chunks/0rqzvayflendx.js +2 -0
  475. package/.next/static/chunks/0vcfs7dii85tw.js +21 -0
  476. package/.next/static/chunks/13l4l-boqg8fx.js +1 -0
  477. package/.next/static/chunks/14hxe1qiaram9.js +1 -0
  478. package/.next/static/chunks/150y5rwg6gwvx.css +1 -0
  479. package/.next/static/chunks/16k196zyl-n9q.js +1 -0
  480. package/.next/static/chunks/18b5l8p0vd9f8.js +1 -0
  481. package/.next/static/chunks/1c_8t2kecjnua.js +1 -0
  482. package/.next/static/chunks/1fd43t9y42wd3.js +1 -0
  483. package/.next/static/chunks/1q50zh5z-fq2k.js +2 -0
  484. package/.next/static/chunks/1tu8lforstp1o.js +1 -0
  485. package/.next/static/chunks/23-xknrz6o748.js +1 -0
  486. package/.next/static/chunks/2_xpm7qhr69n8.js +2 -0
  487. package/.next/static/chunks/2ls_yp4-qgb42.js +1 -0
  488. package/.next/static/chunks/2zz0ip2l_29c3.js +3 -0
  489. package/.next/static/chunks/3ly7b47esdb7j.js +1 -0
  490. package/.next/static/chunks/3ruw8lu2_re-h.js +1 -0
  491. package/.next/static/chunks/3vf5nnd4xjo5_.js +1 -0
  492. package/.next/static/chunks/{0eggcu0ovk8sd.js → 40jaenrnspnlh.js} +26 -26
  493. package/.next/static/chunks/41oxcdcw-pcwt.js +1 -0
  494. package/README.md +3 -2
  495. package/package.json +1 -1
  496. package/skills/work-epic/SKILL.md +22 -3
  497. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0am8bw2._.js +0 -3
  498. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0enefn6._.js +0 -3
  499. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0k3n_5f._.js +0 -3
  500. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0lcfjm4._.js +0 -3
  501. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0lfx9av._.js +0 -3
  502. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0qau3qw._.js +0 -3
  503. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0r1pmvm._.js +0 -3
  504. package/.next/server/chunks/11mp_@anthropic-ai_sdk_11t-z2t._.js +0 -3
  505. package/.next/server/chunks/11mp_@anthropic-ai_sdk_15hyn79._.js +0 -3
  506. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1_qk07x._.js +0 -3
  507. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1b2929e._.js +0 -3
  508. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1e72c89._.js +0 -3
  509. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1eq7asn._.js +0 -3
  510. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1fhdojs._.js +0 -3
  511. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1lh_vwq._.js +0 -3
  512. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1ludf-o._.js +0 -3
  513. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1m3luz3._.js +0 -3
  514. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1x1iz3d._.js +0 -3
  515. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1xsmwlh._.js +0 -3
  516. package/.next/server/chunks/11mp_@anthropic-ai_sdk_202spah._.js +0 -3
  517. package/.next/server/chunks/11mp_@anthropic-ai_sdk_215hw9u._.js +0 -3
  518. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0n-i0pd._.js +0 -3
  519. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_13pos4j._.js +0 -3
  520. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_17b4pqr._.js +0 -3
  521. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1bkcmom._.js +0 -3
  522. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1hlj_3l._.js +0 -3
  523. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1ip-sor._.js +0 -3
  524. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1pex5o1._.js +0 -3
  525. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1s8lc8_._.js +0 -3
  526. package/.next/server/chunks/[root-of-the-server]__1o4a-4j._.js +0 -3
  527. package/.next/server/chunks/[root-of-the-server]__1o4a-4j._.js.map +0 -1
  528. package/.next/server/chunks/ssr/1x05_lucide-react_dist_esm_icons_08ca0b4._.js +0 -3
  529. package/.next/server/chunks/ssr/1x05_lucide-react_dist_esm_icons_08ca0b4._.js.map +0 -1
  530. package/.next/server/chunks/ssr/1x05_lucide-react_dist_esm_icons_0c1k9is._.js +0 -3
  531. package/.next/server/chunks/ssr/1x05_lucide-react_dist_esm_icons_0c1k9is._.js.map +0 -1
  532. package/.next/server/chunks/ssr/_0qyglif._.js.map +0 -1
  533. package/.next/server/chunks/ssr/_0skuoxv._.js +0 -6
  534. package/.next/server/chunks/ssr/_0skuoxv._.js.map +0 -1
  535. package/.next/server/chunks/ssr/_14i_6yb._.js +0 -3
  536. package/.next/server/chunks/ssr/_14i_6yb._.js.map +0 -1
  537. package/.next/server/chunks/ssr/_1c95ems._.js +0 -151
  538. package/.next/server/chunks/ssr/_1c95ems._.js.map +0 -1
  539. package/.next/server/chunks/ssr/_1cbhuz4._.js +0 -3
  540. package/.next/server/chunks/ssr/_1cbhuz4._.js.map +0 -1
  541. package/.next/server/chunks/ssr/_1ewk_mn._.js +0 -3
  542. package/.next/server/chunks/ssr/_1ewk_mn._.js.map +0 -1
  543. package/.next/server/chunks/ssr/_1y-ofyw._.js +0 -3
  544. package/.next/server/chunks/ssr/_1y-ofyw._.js.map +0 -1
  545. package/.next/server/chunks/ssr/node_modules__pnpm_0bmkw6o._.js +0 -3
  546. package/.next/server/chunks/ssr/node_modules__pnpm_0bmkw6o._.js.map +0 -1
  547. package/.next/server/chunks/ssr/node_modules__pnpm_1imm4ut._.js +0 -3
  548. package/.next/server/chunks/ssr/node_modules__pnpm_1imm4ut._.js.map +0 -1
  549. package/.next/server/chunks/ssr/src_components_008q3v8._.js +0 -3
  550. package/.next/server/chunks/ssr/src_components_008q3v8._.js.map +0 -1
  551. package/.next/server/chunks/ssr/src_components_14pwej-._.js +0 -3
  552. package/.next/server/chunks/ssr/src_components_14pwej-._.js.map +0 -1
  553. package/.next/server/chunks/ssr/src_components_ui_scroll-area_tsx_0i-n_27._.js +0 -3
  554. package/.next/server/chunks/ssr/src_components_ui_scroll-area_tsx_0i-n_27._.js.map +0 -1
  555. package/.next/static/chunks/0-vk2d2nnzav2.js +0 -3
  556. package/.next/static/chunks/0-z7kyblalrea.js +0 -1
  557. package/.next/static/chunks/02sab26ica2x3.js +0 -1
  558. package/.next/static/chunks/0iva6rdtfqpbz.js +0 -1
  559. package/.next/static/chunks/0k2qhx29amdgs.js +0 -1
  560. package/.next/static/chunks/0qm101bdsxdyh.css +0 -10
  561. package/.next/static/chunks/0wg9n5zb8mo2p.js +0 -1
  562. package/.next/static/chunks/0z_y7el6m76yk.js +0 -1
  563. package/.next/static/chunks/1-ekntoveuxzd.js +0 -4
  564. package/.next/static/chunks/10neasnz6hhq1.js +0 -1
  565. package/.next/static/chunks/1r7z33e9jk3vp.js +0 -1
  566. package/.next/static/chunks/22dw7r8x0h2sx.js +0 -1
  567. package/.next/static/chunks/26ee8jsbellqk.js +0 -21
  568. package/.next/static/chunks/3kkg030rcpz7l.js +0 -1
  569. package/.next/static/chunks/3pf_4ye6ju8gt.js +0 -1
  570. package/.next/static/chunks/3smp1lj103j-l.js +0 -1
  571. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0-5bkpj._.js.map → 11mp_@anthropic-ai_sdk_00p3fu1._.js.map} +0 -0
  572. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_00psb_y._.js.map → 11mp_@anthropic-ai_sdk_01amtux._.js.map} +0 -0
  573. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_01l5h3i._.js.map → 11mp_@anthropic-ai_sdk_01jjl08._.js.map} +0 -0
  574. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_072r2bd._.js.map → 11mp_@anthropic-ai_sdk_071zfm8._.js.map} +0 -0
  575. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0am8bw2._.js.map → 11mp_@anthropic-ai_sdk_07v3boe._.js.map} +0 -0
  576. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0enefn6._.js.map → 11mp_@anthropic-ai_sdk_09iva72._.js.map} +0 -0
  577. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0k3n_5f._.js.map → 11mp_@anthropic-ai_sdk_0bom1b1._.js.map} +0 -0
  578. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0lcfjm4._.js.map → 11mp_@anthropic-ai_sdk_0dvji7p._.js.map} +0 -0
  579. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0lfx9av._.js.map → 11mp_@anthropic-ai_sdk_0dzo8jn._.js.map} +0 -0
  580. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0qau3qw._.js.map → 11mp_@anthropic-ai_sdk_0hvqsqq._.js.map} +0 -0
  581. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0r1pmvm._.js.map → 11mp_@anthropic-ai_sdk_0i7i-jw._.js.map} +0 -0
  582. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_11t-z2t._.js.map → 11mp_@anthropic-ai_sdk_0k0iop5._.js.map} +0 -0
  583. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_15hyn79._.js.map → 11mp_@anthropic-ai_sdk_0l3-6aq._.js.map} +0 -0
  584. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1_qk07x._.js.map → 11mp_@anthropic-ai_sdk_0oegm3y._.js.map} +0 -0
  585. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1b2929e._.js.map → 11mp_@anthropic-ai_sdk_0p5cyes._.js.map} +0 -0
  586. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1e72c89._.js.map → 11mp_@anthropic-ai_sdk_0qw8i6_._.js.map} +0 -0
  587. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1eq7asn._.js.map → 11mp_@anthropic-ai_sdk_0yk-a7v._.js.map} +0 -0
  588. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1fhdojs._.js.map → 11mp_@anthropic-ai_sdk_11fsqvb._.js.map} +0 -0
  589. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1lh_vwq._.js.map → 11mp_@anthropic-ai_sdk_143_7ez._.js.map} +0 -0
  590. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1ludf-o._.js.map → 11mp_@anthropic-ai_sdk_14a4-64._.js.map} +0 -0
  591. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1m3luz3._.js.map → 11mp_@anthropic-ai_sdk_17d_oma._.js.map} +0 -0
  592. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1x1iz3d._.js.map → 11mp_@anthropic-ai_sdk_18qwuyb._.js.map} +0 -0
  593. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1xsmwlh._.js.map → 11mp_@anthropic-ai_sdk_19au8y6._.js.map} +0 -0
  594. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_202spah._.js.map → 11mp_@anthropic-ai_sdk_1ak_hy5._.js.map} +0 -0
  595. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_215hw9u._.js.map → 11mp_@anthropic-ai_sdk_1cqa0nq._.js.map} +0 -0
  596. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_0n-i0pd._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_08ecfgc._.js.map} +0 -0
  597. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_13pos4j._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_09--sd6._.js.map} +0 -0
  598. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_17b4pqr._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_0e3mwc6._.js.map} +0 -0
  599. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_1bkcmom._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_0go4301._.js.map} +0 -0
  600. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_1hlj_3l._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_0iq9dmt._.js.map} +0 -0
  601. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_1ip-sor._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_0n9ijke._.js.map} +0 -0
  602. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_1pex5o1._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_0szcyrx._.js.map} +0 -0
  603. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_1s8lc8_._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_0xy2s3x._.js.map} +0 -0
  604. /package/.next/server/chunks/{[root-of-the-server]__0e59y5j._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_0yaujn7._.js.map} +0 -0
  605. /package/.next/server/chunks/{[root-of-the-server]__11s76m8._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_0z9ly74._.js.map} +0 -0
  606. /package/.next/server/chunks/{ssr/0_nd_mermaid_dist_mermaid_core_mjs_1vulg1x._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_1hmq3al._.js.map} +0 -0
  607. /package/.next/server/chunks/{ssr/1u84_katex_dist_katex_mjs_0mwkb-i._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_1tqk4bp._.js.map} +0 -0
  608. /package/.next/server/chunks/{ssr/node_modules__pnpm_0--x5-5._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_1x-hr6f._.js.map} +0 -0
  609. /package/.next/server/chunks/{ssr/node_modules__pnpm_04xoqd9._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_1zsdhg0._.js.map} +0 -0
  610. /package/.next/server/chunks/{ssr/node_modules__pnpm_0cj37c-._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_20t__fe._.js.map} +0 -0
  611. /package/.next/server/chunks/{[root-of-the-server]__1u_q61h._.js.map → [root-of-the-server]__0-pmfg2._.js.map} +0 -0
  612. /package/.next/server/chunks/{[root-of-the-server]__1y3u5ud._.js.map → [root-of-the-server]__04tibmn._.js.map} +0 -0
  613. /package/.next/server/chunks/{[root-of-the-server]__17xb02p._.js.map → [root-of-the-server]__05g5cgo._.js.map} +0 -0
  614. /package/.next/server/chunks/{[root-of-the-server]__0aynzrb._.js.map → [root-of-the-server]__0b5pwze._.js.map} +0 -0
  615. /package/.next/server/chunks/{[root-of-the-server]__142icjb._.js.map → [root-of-the-server]__0druay_._.js.map} +0 -0
  616. /package/.next/server/chunks/{[root-of-the-server]__106gpvh._.js.map → [root-of-the-server]__0p6ja6l._.js.map} +0 -0
  617. /package/.next/server/chunks/{[root-of-the-server]__0nfvvy9._.js.map → [root-of-the-server]__1-e3i_5._.js.map} +0 -0
  618. /package/.next/server/chunks/{[root-of-the-server]__06zf_sh._.js.map → [root-of-the-server]__197vw9g._.js.map} +0 -0
  619. /package/.next/server/chunks/{[root-of-the-server]__1j0rrps._.js.map → [root-of-the-server]__19k8t87._.js.map} +0 -0
  620. /package/.next/server/chunks/{[root-of-the-server]__0eqd-tw._.js.map → [root-of-the-server]__1ezzeji._.js.map} +0 -0
  621. /package/.next/server/chunks/{[root-of-the-server]__17p0rkn._.js.map → [root-of-the-server]__1mrmaf9._.js.map} +0 -0
  622. /package/.next/server/chunks/{[root-of-the-server]__1q4ahvz._.js.map → [root-of-the-server]__1umrorf._.js.map} +0 -0
  623. /package/.next/server/chunks/{[root-of-the-server]__093hlkh._.js.map → [root-of-the-server]__1vh9g2o._.js.map} +0 -0
  624. /package/.next/server/chunks/{[root-of-the-server]__1y-tt29._.js.map → [root-of-the-server]__1vq38ov._.js.map} +0 -0
  625. /package/.next/server/chunks/ssr/{node_modules__pnpm_0w9uewb._.js.map → node_modules__pnpm_01bjcv9._.js.map} +0 -0
  626. /package/.next/server/chunks/ssr/{node_modules__pnpm_0p10j87._.js.map → node_modules__pnpm_03qrzdb._.js.map} +0 -0
  627. /package/.next/server/chunks/ssr/{node_modules__pnpm_1a3fo7j._.js.map → node_modules__pnpm_06d-fdo._.js.map} +0 -0
  628. /package/.next/server/chunks/ssr/{node_modules__pnpm_1o30a9w._.js.map → node_modules__pnpm_0ctisl0._.js.map} +0 -0
  629. /package/.next/server/chunks/ssr/{node_modules__pnpm_17o8zbz._.js.map → node_modules__pnpm_0fwp8jm._.js.map} +0 -0
  630. /package/.next/server/chunks/ssr/{node_modules__pnpm_19ys1iv._.js.map → node_modules__pnpm_0kpu0-2._.js.map} +0 -0
  631. /package/.next/server/chunks/ssr/{node_modules__pnpm_1r4w_7k._.js.map → node_modules__pnpm_0vry74x._.js.map} +0 -0
  632. /package/.next/server/chunks/ssr/{node_modules__pnpm_11lluiq._.js.map → node_modules__pnpm_0ycbjbd._.js.map} +0 -0
  633. /package/.next/server/chunks/ssr/{node_modules__pnpm_1_34wt2._.js.map → node_modules__pnpm_1-76qxg._.js.map} +0 -0
  634. /package/.next/server/chunks/ssr/{node_modules__pnpm_0ma8hho._.js.map → node_modules__pnpm_1-r94f7._.js.map} +0 -0
  635. /package/.next/server/chunks/ssr/{node_modules__pnpm_19ejwjv._.js.map → node_modules__pnpm_17i6z2d._.js.map} +0 -0
  636. /package/.next/server/chunks/ssr/{node_modules__pnpm_18pu1wl._.js.map → node_modules__pnpm_192f222._.js.map} +0 -0
  637. /package/.next/server/chunks/ssr/{node_modules__pnpm_1zsbfem._.js.map → node_modules__pnpm_1a48_nl._.js.map} +0 -0
  638. /package/.next/server/chunks/ssr/{node_modules__pnpm_00i3mh2._.js.map → node_modules__pnpm_1aa37e1._.js.map} +0 -0
  639. /package/.next/server/chunks/ssr/{node_modules__pnpm_0kna82c._.js.map → node_modules__pnpm_1f440kx._.js.map} +0 -0
  640. /package/.next/server/chunks/ssr/{node_modules__pnpm_1-poetj._.js.map → node_modules__pnpm_1fn3ejy._.js.map} +0 -0
  641. /package/.next/server/chunks/ssr/{node_modules__pnpm_0yixxj2._.js.map → node_modules__pnpm_1min2jl._.js.map} +0 -0
  642. /package/.next/server/chunks/ssr/{node_modules__pnpm_1l-posw._.js.map → node_modules__pnpm_1q_hhr3._.js.map} +0 -0
  643. /package/.next/server/chunks/ssr/{node_modules__pnpm_0fk-8nl._.js.map → node_modules__pnpm_1qmkxyo._.js.map} +0 -0
  644. /package/.next/server/chunks/ssr/{node_modules__pnpm_1xolwvc._.js.map → node_modules__pnpm_1qp_jvj._.js.map} +0 -0
  645. /package/.next/server/chunks/ssr/{node_modules__pnpm_07j8gcu._.js.map → node_modules__pnpm_1ssjj4u._.js.map} +0 -0
  646. /package/.next/server/chunks/ssr/{node_modules__pnpm_042y3e-._.js.map → node_modules__pnpm_1txccoj._.js.map} +0 -0
  647. /package/.next/server/chunks/ssr/{node_modules__pnpm_0nbxdp_._.js.map → node_modules__pnpm_1uwkcin._.js.map} +0 -0
  648. /package/.next/server/chunks/ssr/{node_modules__pnpm_00wjhj4._.js.map → node_modules__pnpm_1ygal0c._.js.map} +0 -0
  649. /package/.next/static/{gJtrYenzL6_deB-6pdvIL → fGPda81_8-K4GmaNUE6KA}/_buildManifest.js +0 -0
  650. /package/.next/static/{gJtrYenzL6_deB-6pdvIL → fGPda81_8-K4GmaNUE6KA}/_clientMiddlewareManifest.js +0 -0
  651. /package/.next/static/{gJtrYenzL6_deB-6pdvIL → fGPda81_8-K4GmaNUE6KA}/_ssgManifest.js +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/components/chat/ChatModal.tsx","../../../../src/components/layout/ProjectSwitcher.tsx","../../../../src/components/shared/SettingsApplier.tsx","../../../../src/components/layout/AppHeader.tsx","../../../../src/components/layout/SidebarChats.tsx","../../../../src/components/layout/AppSidebar.tsx","../../../../src/lib/fuzzy.ts","../../../../src/app/%28app%29/layout.tsx","../../../../src/components/layout/CommandPalette.tsx","../../../../src/components/layout/QuickOpen.tsx","../../../../src/components/shared/LoadingScreen.tsx","../../../../src/components/ui/sidebar.tsx","../../../../src/components/ui/skeleton.tsx","../../../../src/hooks/use-mobile.tsx","../../../../node_modules/.pnpm/lucide-react%401.48.0_react%4019.3.0/node_modules/lucide-react/src/icons/sun-moon.ts","../../../../node_modules/.pnpm/lucide-react%401.48.0_react%4019.3.0/node_modules/lucide-react/src/icons/panel-left.ts","../../../../node_modules/.pnpm/lucide-react%401.48.0_react%4019.3.0/node_modules/lucide-react/src/icons/keyboard.ts","../../../../node_modules/.pnpm/lucide-react%401.48.0_react%4019.3.0/node_modules/lucide-react/src/icons/layout-dashboard.ts","../../../../node_modules/.pnpm/lucide-react%401.48.0_react%4019.3.0/node_modules/lucide-react/src/icons/message-square-plus.ts","../../../../node_modules/.pnpm/lucide-react%401.48.0_react%4019.3.0/node_modules/lucide-react/src/icons/hexagon.ts","../../../../node_modules/.pnpm/lucide-react%401.48.0_react%4019.3.0/node_modules/lucide-react/src/icons/folder-tree.ts","../../../../node_modules/.pnpm/lucide-react%401.48.0_react%4019.3.0/node_modules/lucide-react/src/icons/messages-square.ts"],"sourcesContent":["\"use client\"\n\nimport { useRouter } from \"next/navigation\"\nimport { useChats } from \"@/context/ChatContext\"\nimport { Dialog, DialogContent, DialogTitle } from \"@/components/ui/dialog\"\nimport { ChatView } from \"./ChatView\"\n\n/** The chat as a modal: same ChatView as /chat, with \"Open as page\". */\nexport function ChatModal() {\n const { chats, modalId, closeModal } = useChats()\n const router = useRouter()\n const title = chats.find((c) => c.id === modalId)?.title ?? \"Chat\"\n\n return (\n <Dialog open={!!modalId} onOpenChange={(open) => { if (!open) closeModal() }}>\n <DialogContent\n aria-describedby={undefined}\n className=\"flex h-[min(82vh,780px)] w-[calc(100vw-2rem)] flex-col gap-0 overflow-hidden rounded-xl p-0 shadow-2xl sm:max-w-3xl sm:rounded-xl\"\n >\n <DialogTitle className=\"sr-only\">{title}</DialogTitle>\n {modalId && (\n <ChatView\n chatId={modalId}\n variant=\"modal\"\n onNavigate={closeModal}\n onExpand={() => { closeModal({ keep: true }); router.push(`/chat?id=${encodeURIComponent(modalId)}`) }}\n />\n )}\n </DialogContent>\n </Dialog>\n )\n}\n","\"use client\"\n\nimport { useState } from \"react\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from \"@/components/ui/dropdown-menu\"\nimport type { Project } from \"@/types\"\nimport { Check, ChevronsUpDown } from \"lucide-react\"\nimport { cn } from \"@/lib/utils\"\n\n/** Keep the meaningful tail of a path: /Users/me/work/vibedoc → …/work/vibedoc */\nfunction shortPath(root: string): string {\n const parts = root.split(\"/\").filter(Boolean)\n return parts.length > 2 ? `…/${parts.slice(-2).join(\"/\")}` : root\n}\n\ninterface ProjectSwitcherProps {\n projects: Project[]\n activeProject: string\n currentName: string\n onSelect: (root: string) => void\n}\n\n/** Above this many projects the menu gets a filter field. */\nconst FILTER_FROM = 6\n\nexport function ProjectSwitcher({ projects, activeProject, currentName, onSelect }: ProjectSwitcherProps) {\n const [open, setOpen] = useState(false)\n const [filter, setFilter] = useState(\"\")\n const filterable = projects.length >= FILTER_FROM\n const f = filter.trim().toLowerCase()\n const shown = f ? projects.filter((p) => `${p.name} ${p.root}`.toLowerCase().includes(f)) : projects\n\n return (\n <DropdownMenu open={open} onOpenChange={(v) => { setOpen(v); if (!v) setFilter(\"\") }}>\n <DropdownMenuTrigger asChild>\n <button className=\"flex h-8 items-center gap-1.5 rounded-md px-2 text-sm text-muted transition-colors hover:bg-surface2 hover:text-txt focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent focus-visible:ring-offset-2 focus-visible:ring-offset-bg\">\n <span className=\"max-w-[160px] truncate\">{currentName || \"Select project\"}</span>\n <ChevronsUpDown className=\"size-3.5 shrink-0 opacity-60\" />\n </button>\n </DropdownMenuTrigger>\n <DropdownMenuContent\n className=\"w-64 bg-surface border-border2 text-txt\"\n align=\"start\"\n >\n {filterable && (\n <input\n // Focused before the menu's focus scope mounts, so the scope leaves it there\n autoFocus\n value={filter}\n onChange={(e) => setFilter(e.target.value)}\n onKeyDown={(e) => {\n // Letters type here, not into the menu's own type-ahead; ↓ moves into the list, Enter picks the first match\n if (e.key === \"ArrowDown\") {\n e.preventDefault()\n e.currentTarget.parentElement?.querySelector<HTMLElement>(\"[role=menuitem]\")?.focus()\n } else if (e.key === \"Enter\" && shown[0]) {\n onSelect(shown[0].root)\n setOpen(false)\n setFilter(\"\")\n } else if (e.key.length === 1) {\n e.stopPropagation()\n }\n }}\n placeholder=\"Filter projects…\"\n aria-label=\"Filter projects\"\n className=\"mb-1 h-8 w-full border-b border-border bg-transparent px-2 text-sm text-txt outline-none placeholder:text-muted\"\n />\n )}\n {shown.length === 0 ? (\n <div className=\"px-3 py-2 text-sm text-muted\">{projects.length ? `No project matches “${filter.trim()}”` : \"No projects found\"}</div>\n ) : (\n shown.map((p) => {\n const active = p.root === activeProject\n return (\n <DropdownMenuItem\n key={p.root}\n onClick={() => onSelect(p.root)}\n title={p.root}\n aria-current={active || undefined}\n className={cn(\"cursor-pointer hover:bg-surface2 focus:bg-surface2\", active && \"text-accent\")}\n >\n <div className=\"min-w-0 flex-1\">\n <div className=\"truncate font-medium\">{p.name}</div>\n <div className=\"truncate font-mono text-[11px] text-muted\">{shortPath(p.root)}</div>\n </div>\n <Check aria-hidden className={cn(\"size-3.5 shrink-0\", !active && \"invisible\")} />\n </DropdownMenuItem>\n )\n })\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n )\n}\n","\"use client\"\n\nimport { useEffect, useRef } from \"react\"\nimport { useApp } from \"@/context/AppContext\"\nimport { applyTheme, applyAccent, applyFontSize, applyFonts } from \"@/lib/applySettings\"\nimport { DEFAULT_SETTINGS, type AppSettings } from \"@/lib/settings\"\n\nexport function SettingsApplier() {\n const { rootParam, refresh, setEditorSettings, setAutoRefreshSeconds, autoRefreshSeconds } = useApp()\n const intervalRef = useRef<ReturnType<typeof setInterval> | null>(null)\n\n // Load + apply settings whenever the active project changes\n useEffect(() => {\n if (!rootParam) return\n let cancelled = false\n\n fetch(`/api/settings${rootParam}&type=settings`)\n .then(r => r.ok ? r.json() : DEFAULT_SETTINGS)\n .then((settings: AppSettings) => {\n if (cancelled) return\n applyTheme(settings.theme)\n applyAccent(settings.accentColor)\n applyFontSize(settings.fontSize)\n applyFonts(settings)\n setEditorSettings(settings.editor)\n setAutoRefreshSeconds(settings.project?.autoRefresh ?? 0)\n })\n .catch(() => {})\n\n return () => { cancelled = true }\n }, [rootParam]) // eslint-disable-line react-hooks/exhaustive-deps\n\n // Manage polling interval reactively based on autoRefreshSeconds\n useEffect(() => {\n if (intervalRef.current) clearInterval(intervalRef.current)\n if (autoRefreshSeconds > 0) {\n intervalRef.current = setInterval(refresh, autoRefreshSeconds * 1000)\n }\n return () => {\n if (intervalRef.current) {\n clearInterval(intervalRef.current)\n intervalRef.current = null\n }\n }\n }, [autoRefreshSeconds, refresh])\n\n return null\n}\n","\"use client\"\n\nimport { useState, type ReactNode } from \"react\"\nimport { usePathname, useRouter } from \"next/navigation\"\nimport Link from \"next/link\"\nimport { Bot, Check, Copy, Loader2, MessagesSquare, Plug, Search } from \"lucide-react\"\nimport type { ActivityEvent, Project, Summary } from \"@/types\"\nimport { useApp } from \"@/context/AppContext\"\nimport { useChats } from \"@/context/ChatContext\"\nimport { ProjectSwitcher } from \"./ProjectSwitcher\"\nimport { SidebarTrigger } from \"@/components/ui/sidebar\"\nimport { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from \"@/components/ui/dropdown-menu\"\nimport { useOrigin } from \"@/hooks/use-origin\"\nimport { cn } from \"@/lib/utils\"\nimport { ago } from \"@/lib/chats\"\nimport { groupSessions, isLive } from \"@/lib/sessions\"\n\nconst PAGE_TITLES: Record<string, string> = {\n \"/board\": \"Board\",\n \"/roadmap\": \"Roadmap\",\n \"/docs\": \"Docs\",\n \"/activity\": \"Activity\",\n \"/memory\": \"Memory\",\n \"/manual-tests\": \"Manual tests\",\n \"/explorer\": \"Explorer\",\n \"/settings\": \"Settings\",\n \"/chat\": \"Chats\",\n}\n\n/** The system focus ring (ui/button.tsx) for the hand-rolled header buttons. */\nconst focusRing = \"focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-accent focus-visible:ring-offset-2 focus-visible:ring-offset-bg\"\n\ninterface AppHeaderProps {\n summary: Summary | null\n projects: Project[]\n activeProject: string\n liveIndicator: boolean\n onProjectChange: (root: string) => void\n onToggleChat: () => void\n onOpenSearch: () => void\n}\n\n/** Where you are (project / page) on the left; agent status, search and Chats on the right. */\nexport function AppHeader({ summary, projects, activeProject, liveIndicator, onProjectChange, onToggleChat, onOpenSearch }: AppHeaderProps) {\n const pathname = usePathname()\n const title = Object.entries(PAGE_TITLES).find(([p]) => pathname.startsWith(p))?.[1]\n const { activity } = useApp()\n // ChatContext's minute clock, so \"N agents working\" and \"last agent call\" age without new events\n const { now } = useChats()\n\n return (\n <header className=\"sticky top-0 z-50 flex h-12 shrink-0 items-center gap-2 border-b border-border bg-surface/80 px-3 backdrop-blur-xs sm:px-4\">\n <SidebarTrigger className=\"-ml-1 text-muted hover:text-txt\" />\n <span className=\"mx-1 h-4 w-px bg-border\" aria-hidden />\n\n {/* Below sm the project name truncates so the page name stays */}\n <nav aria-label=\"Location\" className=\"flex min-w-0 items-center gap-1.5 text-sm [&_button]:min-w-0 max-sm:[&_button>span]:max-w-20\">\n <ProjectSwitcher projects={projects} activeProject={activeProject} currentName={summary?.name || \"\"} onSelect={onProjectChange} />\n {title && (\n <>\n <span className=\"text-muted\" aria-hidden>/</span>\n <span className=\"shrink-0 font-medium text-txt\">{title}</span>\n </>\n )}\n </nav>\n\n <div className=\"flex-1\" />\n\n <AgentStatus liveIndicator={liveIndicator} activity={activity} now={now} />\n\n <button\n type=\"button\"\n onClick={onOpenSearch}\n className={cn(\"flex h-8 items-center gap-2 rounded-md border border-border bg-bg/60 px-2 text-xs text-muted transition-colors hover:border-border2 hover:text-txt sm:w-48 sm:px-2.5\", focusRing)}\n >\n <Search className=\"size-3.5\" />\n <span className=\"hidden flex-1 text-left sm:inline\">Search…</span>\n <kbd className=\"hidden rounded-sm border border-border px-1 font-mono text-[10px] sm:inline\">⌘K</kbd>\n <span className=\"sr-only sm:hidden\">Search</span>\n </button>\n\n <ConnectMenu activity={activity} now={now} />\n\n <button\n type=\"button\"\n onClick={onToggleChat}\n title=\"Chats (c)\"\n aria-label=\"Chats (c)\"\n className={cn(\"flex h-8 items-center gap-1.5 rounded-md border border-border px-2.5 text-xs text-muted transition-colors hover:border-border2 hover:text-txt\", focusRing)}\n >\n <MessagesSquare className=\"size-3.5\" aria-hidden />\n <span className=\"hidden sm:inline\">Chats</span>\n </button>\n </header>\n )\n}\n\nconst plural = (n: number, word: string) => `${n} ${word}${n === 1 ? \"\" : \"s\"}`\n\n/**\n * \"● 2 agents working · 1 running · 1 need you · 1 error\": terminal agents (MCP sessions in the activity log) lead,\n * then in-app chats. Only recent, undismissed chat errors count. Zero counts are left out; the SSE link is a small\n * neutral dot while connected (amber, \"Reconnecting…\" when it drops). Click opens the attention queue's head, else /chat.\n * Below sm: dot · bot glyph + \"2\" · need-you and error counts; the strip clips before it covers the page title. Agents and actionable counts in text ink; running stays muted.\n */\nfunction AgentStatus({ liveIndicator, activity, now }: { liveIndicator: boolean; activity: ActivityEvent[]; now: number }) {\n const { connection } = useApp()\n const { runningCount: running, waitingCount: waiting, errorCount: errors, queue, show } = useChats()\n const router = useRouter()\n const agents = groupSessions(activity).filter((s) => s.actor === \"ai\" && isLive(s, now)).length\n const down = connection === \"disconnected\"\n const state = down ? \"Reconnecting…\" : connection === \"live\" ? \"Connected\" : \"Connecting\"\n const summary = [\n state,\n agents && `${plural(agents, \"agent\")} working`,\n running && `${running} ${running === 1 ? \"chat\" : \"chats\"} running`,\n waiting && `${waiting} need you`,\n errors && `${plural(errors, \"chat error\")}`,\n ].filter(Boolean).join(\" · \")\n const label = `${summary} — ${queue[0] ? \"open next in queue\" : \"open Chats\"}`\n const announce = [waiting && `${waiting} ${waiting === 1 ? \"chat needs\" : \"chats need\"} you`, errors && plural(errors, \"chat error\")]\n .filter(Boolean).join(\", \")\n // A separator goes inside each count after the first (or after \"Reconnecting…\"), so a count hidden below sm takes its separator with it\n const counts: [string, ReactNode][] = [\n [\"agents\", agents > 0 && (\n <>\n <Bot aria-hidden className=\"size-3 text-txt motion-safe:animate-pulse-dot\" />\n <span className=\"text-txt\">{agents}<span className=\"max-sm:sr-only\"> {agents === 1 ? \"agent\" : \"agents\"} working</span></span>\n </>\n )],\n [\"running\", running > 0 && (\n <>\n <Loader2 aria-hidden className=\"size-3 animate-spin text-accent\" />\n {running} running\n </>\n )],\n [\"waiting\", waiting > 0 && (\n <>\n <span aria-hidden className=\"size-1.5 rounded-full bg-amber animate-pulse-dot\" />\n <span className=\"text-txt\">{waiting}<span className=\"max-sm:sr-only\"> need you</span></span>\n </>\n )],\n [\"errors\", errors > 0 && (\n <>\n <span aria-hidden className=\"size-1.5 rounded-full bg-danger\" />\n <span className=\"text-txt\">{errors}<span className=\"max-sm:sr-only\"> {errors === 1 ? \"error\" : \"errors\"}</span></span>\n </>\n )],\n ].filter(([, node]) => node) as [string, ReactNode][]\n\n return (\n <>\n <button\n id=\"agent-status\"\n type=\"button\"\n onClick={() => (queue[0] ? show(queue[0].id) : router.push(\"/chat\"))}\n title={label}\n aria-label={label}\n className={cn(\"flex h-8 min-w-0 items-center gap-1.5 overflow-hidden whitespace-nowrap rounded-md px-1.5 font-mono text-[11px] text-muted transition-colors duration-(--duration-fast) hover:bg-surface2 hover:text-txt\", focusRing)}\n >\n <span\n aria-hidden\n className={cn(\n \"size-1.5 shrink-0 rounded-full transition-colors duration-(--duration-slow)\",\n down ? \"bg-amber\" : connection === \"live\" ? (liveIndicator ? \"bg-txt\" : \"bg-muted\") : \"border border-muted\",\n )}\n />\n {down && <span className=\"text-txt max-sm:sr-only\">{state}</span>}\n {counts.map(([key, node], i) => (\n <span key={key} className={cn(\"flex items-center gap-1\", key === \"running\" && \"max-sm:hidden\")}>\n {(i > 0 || down) && <span aria-hidden className={cn(\"text-muted\", counts.slice(0, i).every(([k]) => k === \"running\") && \"max-sm:hidden\")}>·</span>}\n {node}\n </span>\n ))}\n </button>\n {/* Outside the button: a live region inside a control is re-read as its name */}\n <span aria-live=\"polite\" className=\"sr-only\">{announce}</span>\n </>\n )\n}\n\n/** The MCP endpoint an agent connects to, the `claude mcp add` line, and when an agent last called in. */\nfunction ConnectMenu({ activity, now }: { activity: ActivityEvent[]; now: number }) {\n const endpoint = `${useOrigin()}/api/mcp`\n const command = `claude mcp add --transport http vibedoc ${endpoint}`\n const [copied, setCopied] = useState<string | null>(null)\n const lastCall = activity.filter((e) => e.actor === \"ai\").reduce<string | null>((t, e) => (!t || e.timestamp > t ? e.timestamp : t), null)\n const lastAgo = lastCall && ago(lastCall, now)\n\n async function copy(text: string) {\n try {\n await navigator.clipboard.writeText(text)\n setCopied(text)\n setTimeout(() => setCopied(null), 1500)\n } catch (e) {\n console.warn(\"[vibedoc] could not copy:\", e)\n }\n }\n\n // Menu items, not plain buttons, so arrows reach them; preventDefault keeps the menu open to show the tick\n const row = (text: string, label: string) => (\n <DropdownMenuItem\n onSelect={(e) => { e.preventDefault(); void copy(text) }}\n className=\"mt-2 items-start gap-1 rounded-md border border-border bg-bg px-2 py-1.5 focus:border-border2 [&_svg]:size-3.5\"\n >\n <span className=\"sr-only\">{label}: </span>\n <code className=\"min-w-0 flex-1 break-all font-mono text-xs text-accent\">{text}</code>\n <span aria-hidden className=\"grid size-5 place-items-center text-muted\">\n {copied === text ? <Check className=\"text-teal\" /> : <Copy />}\n </span>\n </DropdownMenuItem>\n )\n\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <button\n type=\"button\"\n title=\"Connect an AI agent (MCP)\"\n className={cn(\"flex h-8 items-center gap-1.5 rounded-md border border-border px-2 text-xs text-muted transition-colors hover:border-border2 hover:text-txt md:px-2.5\", focusRing)}\n >\n <Plug aria-hidden className=\"size-3.5\" /><span className=\"max-md:sr-only\">Connect</span>\n </button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-80 max-w-[calc(100vw-1.5rem)] border-border2 bg-surface p-3 text-txt\">\n <p className=\"text-sm font-medium\">Connect your AI agent</p>\n <p className=\"mt-1 text-xs text-muted\">Add this MCP endpoint to Claude Code, Cursor or Windsurf. The board updates live as the agent works.</p>\n {row(endpoint, \"Copy endpoint\")}\n {row(command, \"Copy claude mcp add command\")}\n <p className=\"mt-3 font-mono text-[11px] text-muted\">\n Last agent call: {lastAgo ? (lastAgo === \"now\" ? \"just now\" : `${lastAgo} ago`) : \"none yet\"}\n </p>\n <DropdownMenuItem asChild className=\"mt-1 -mx-2 text-xs text-muted focus:text-txt\">\n <Link href=\"/settings\">Agent configs and connection test in <span className=\"text-accent\">Settings → MCP</span></Link>\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n )\n}\n","\"use client\"\n\nimport Link from \"next/link\"\nimport { usePathname, useSearchParams } from \"next/navigation\"\nimport { Suspense } from \"react\"\nimport { Loader2, MessagesSquare, Plus, X } from \"lucide-react\"\nimport {\n SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel,\n SidebarMenu, SidebarMenuAction, SidebarMenuButton, SidebarMenuItem,\n} from \"@/components/ui/sidebar\"\nimport { useChats } from \"@/context/ChatContext\"\nimport { AttachLabel, StatusMarker } from \"@/components/chat/StatusMarker\"\nimport { groupChats, isActionableError, shellStatus } from \"@/lib/chats\"\nimport { cn } from \"@/lib/utils\"\nimport { shortcutFor } from \"@/lib/shortcuts\"\n\n/** Recent idle chats listed under the ones that need you, errored or running; the rest are on /chat. */\nconst RECENT_IN_SIDEBAR = 4\nconst PAGE_KEY = shortcutFor(\"/chat\")\nconst kbdClass = \"rounded-sm border border-border bg-surface2 px-1 font-mono text-[10px] leading-4 text-muted\"\n\n/** \"Chats\" section: chats waiting on you first, then actionable errors, running, then recent. Click opens the chat. */\nexport function SidebarChats() {\n return (\n <Suspense>\n <SidebarChatsInner />\n </Suspense>\n )\n}\n\nfunction SidebarChatsInner() {\n const { chats, loaded, modalId, show, create, dismiss, waitingCount, runningCount, errorCount, now } = useChats()\n const pathname = usePathname()\n const pageId = useSearchParams().get(\"id\")\n const g = groupChats(chats, now)\n const listed = [...g.needsYou, ...g.errors, ...g.running, ...g.recent.slice(0, RECENT_IN_SIDEBAR)]\n const hidden = chats.length - listed.length\n const railTip = [runningCount && `${runningCount} running`, waitingCount && `${waitingCount} waiting for you`, errorCount && `${errorCount} with an error`]\n .filter(Boolean).join(\" · \")\n const railLabel = railTip ? `Chats · ${railTip}` : \"Chats\"\n const isOpen = (id: string) => modalId === id || (pathname === \"/chat\" && pageId === id)\n\n return (\n <SidebarGroup role=\"group\" aria-label=\"Chats\">\n <SidebarGroupLabel>Chats</SidebarGroupLabel>\n <SidebarGroupAction title=\"New chat\" onClick={() => show(create())}>\n <Plus />\n <span className=\"sr-only\">New chat</span>\n </SidebarGroupAction>\n <SidebarGroupContent>\n <SidebarMenu>\n {/* Collapsed sidebar: one entry; spins while chats run, flags chats that wait on you (amber) or recently failed (red) */}\n <SidebarMenuItem className=\"hidden group-data-[collapsible=icon]:block\">\n <SidebarMenuButton asChild tooltip={{ children: <span className=\"flex items-center gap-2\">{railLabel}{PAGE_KEY && <kbd className={kbdClass}>{PAGE_KEY}</kbd>}</span> }} isActive={pathname === \"/chat\"}>\n <Link href=\"/chat\" aria-keyshortcuts={PAGE_KEY} className=\"relative\">\n {runningCount > 0 ? <Loader2 className=\"animate-spin text-accent\" /> : <MessagesSquare />}\n <span>{railLabel}</span>\n {waitingCount > 0 && <span aria-hidden className=\"absolute right-1 top-1 size-1.5 rounded-full bg-amber animate-pulse-dot\" />}\n {errorCount > 0 && <span aria-hidden className=\"absolute bottom-1 right-1 size-1.5 rounded-full bg-danger\" />}\n </Link>\n </SidebarMenuButton>\n </SidebarMenuItem>\n\n {loaded && chats.length === 0 && (\n <SidebarMenuItem className=\"group-data-[collapsible=icon]:hidden\">\n <SidebarMenuButton onClick={() => show(create())} className=\"text-muted\">\n <MessagesSquare />\n <span>Start a chat</span>\n </SidebarMenuButton>\n </SidebarMenuItem>\n )}\n\n {listed.map((c) => {\n const status = shellStatus(c, now)\n const alarm = isActionableError(c, now)\n return (\n <SidebarMenuItem key={c.id} className=\"group-data-[collapsible=icon]:hidden animate-slide-in\">\n <SidebarMenuButton\n onClick={() => show(c.id)}\n isActive={isOpen(c.id)}\n className={cn(\"h-8\", status === \"idle\" && \"text-muted\", alarm && \"pr-8\")}\n title={c.title}\n >\n <StatusMarker status={status} showIdle />\n <span className=\"min-w-0 flex-1 truncate\">{c.title}</span>\n {alarm && <span aria-hidden className=\"shrink-0 font-mono text-[10px] text-danger\">error</span>}\n {/* \"Break down R043\" already names its epic */}\n {c.attach && !c.title.includes(c.attach.id) && <AttachLabel attach={c.attach} className=\"shrink-0 text-muted\" />}\n </SidebarMenuButton>\n {alarm && (\n <SidebarMenuAction title=\"Dismiss error\" onClick={() => dismiss(c.id)} className=\"text-muted hover:text-txt\">\n <X />\n <span className=\"sr-only\">Dismiss error in {c.title}</span>\n </SidebarMenuAction>\n )}\n </SidebarMenuItem>\n )\n })}\n\n {chats.length > 0 && (\n <SidebarMenuItem className=\"group-data-[collapsible=icon]:hidden\">\n <SidebarMenuButton asChild isActive={pathname === \"/chat\" && !pageId} className=\"h-7 text-xs text-muted\">\n <Link href=\"/chat\" aria-keyshortcuts={PAGE_KEY}>\n <MessagesSquare />\n <span>{hidden > 0 ? `All chats · ${chats.length}` : \"All chats\"}</span>\n {PAGE_KEY && <kbd aria-hidden className={cn(kbdClass, \"ml-auto hidden group-hover/menu-item:inline group-focus-within/menu-item:inline\")}>{PAGE_KEY}</kbd>}\n </Link>\n </SidebarMenuButton>\n </SidebarMenuItem>\n )}\n </SidebarMenu>\n </SidebarGroupContent>\n </SidebarGroup>\n )\n}\n","\"use client\"\n\nimport { LayoutDashboard, BookOpen, Zap, Brain, Settings, FolderTree, Map, FlaskConical, Hexagon, Keyboard } from \"lucide-react\"\nimport Link from \"next/link\"\nimport { usePathname } from \"next/navigation\"\nimport {\n Sidebar,\n SidebarContent,\n SidebarFooter,\n SidebarGroup,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarHeader,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n} from \"@/components/ui/sidebar\"\nimport type { TaskBoard } from \"@/types\"\nimport { cn } from \"@/lib/utils\"\nimport { shortcutFor } from \"@/lib/shortcuts\"\nimport { SidebarChats } from \"./SidebarChats\"\n\n// Chats lead the shell (SidebarChats); pages follow, grouped by what you do there. Settings sits in the footer.\nconst NAV_GROUPS = [\n {\n label: \"Plan & supervise\",\n items: [\n { href: \"/board\", icon: LayoutDashboard, label: \"Board\" },\n { href: \"/roadmap\", icon: Map, label: \"Roadmap\" },\n { href: \"/manual-tests\", icon: FlaskConical, label: \"Manual tests\" },\n { href: \"/activity\", icon: Zap, label: \"Activity\" },\n ],\n },\n {\n label: \"Reference\",\n items: [\n { href: \"/docs\", icon: BookOpen, label: \"Docs\" },\n { href: \"/memory\", icon: Brain, label: \"Memory\" },\n { href: \"/explorer\", icon: FolderTree, label: \"Explorer\" },\n ],\n },\n]\n\nconst kbdClass = \"rounded-sm border border-border bg-surface2 px-1 font-mono text-[10px] leading-4 text-muted\"\n\n/** The help sheet lives in (app)/layout.tsx behind the \"?\" key; a synthetic keydown reaches it without new plumbing. */\nfunction openShortcutHelp() {\n window.dispatchEvent(new KeyboardEvent(\"keydown\", { key: \"?\" }))\n}\n\n\ninterface AppSidebarProps {\n board: TaskBoard | null\n}\n\nexport function AppSidebar({ board }: AppSidebarProps) {\n const pathname = usePathname()\n const settingsKey = shortcutFor(\"/settings\")\n // Unticked manual test items across all tasks (R043)\n const untested = board ? Object.values(board).flat().reduce((n, t) => n + (t.manualTests ? t.manualTests.total - t.manualTests.done : 0), 0) : 0\n // Work in flight on the board (the counts that used to sit in a separate \"Board\" section and the header)\n const active = board ? board[\"in-progress\"].length + board.review.length : 0\n // Advisory counts, so muted: nothing here needs you right now\n const badge: Record<string, { n: number; label: string }> = {\n \"/board\": { n: active, label: \"in progress or in review\" },\n \"/manual-tests\": { n: untested, label: \"unticked\" },\n }\n\n return (\n <Sidebar collapsible=\"icon\">\n <SidebarHeader>\n <div className=\"flex items-center gap-2 px-2 py-1\">\n <div aria-hidden className=\"grid size-6 shrink-0 place-items-center rounded-md bg-accent text-accent-fg\">\n <Hexagon className=\"size-3.5\" strokeWidth={2.5} />\n </div>\n <span className=\"text-sm font-semibold tracking-tight text-txt group-data-[collapsible=icon]:hidden\">VibeDoc</span>\n </div>\n </SidebarHeader>\n <SidebarContent>\n <SidebarChats />\n {NAV_GROUPS.map((group) => (\n <SidebarGroup key={group.label}>\n <SidebarGroupLabel>{group.label}</SidebarGroupLabel>\n <SidebarGroupContent>\n <SidebarMenu>\n {group.items.map(({ href, icon: Icon, label }) => {\n const key = shortcutFor(href)\n const b = badge[href]\n return (\n <SidebarMenuItem key={href}>\n <SidebarMenuButton\n asChild\n isActive={pathname.startsWith(href)}\n tooltip={{ children: <span className=\"flex items-center gap-2\">{label}{key && <kbd className={kbdClass}>{key}</kbd>}</span> }}\n >\n <Link href={href} aria-keyshortcuts={key}>\n <Icon />\n <span>{label}</span>\n {b?.n > 0 && (\n <span className=\"ml-auto font-mono text-[10px] tabular-nums text-muted\">{b.n}<span className=\"sr-only\"> {b.label}</span></span>\n )}\n {key && <kbd aria-hidden className={cn(kbdClass, !(b?.n > 0) && \"ml-auto\", \"hidden group-hover/menu-item:inline group-focus-within/menu-item:inline\")}>{key}</kbd>}\n </Link>\n </SidebarMenuButton>\n </SidebarMenuItem>\n )\n })}\n </SidebarMenu>\n </SidebarGroupContent>\n </SidebarGroup>\n ))}\n </SidebarContent>\n <SidebarFooter>\n <SidebarMenu>\n <SidebarMenuItem>\n <SidebarMenuButton onClick={openShortcutHelp} aria-keyshortcuts=\"?\" tooltip=\"Keyboard shortcuts (?)\" className=\"text-muted\">\n <Keyboard />\n <span>Shortcuts</span>\n <kbd aria-hidden className={cn(kbdClass, \"ml-auto\")}>?</kbd>\n </SidebarMenuButton>\n </SidebarMenuItem>\n <SidebarMenuItem>\n <SidebarMenuButton asChild isActive={pathname.startsWith(\"/settings\")} tooltip={{ children: <span className=\"flex items-center gap-2\">Settings<kbd className={kbdClass}>{settingsKey}</kbd></span> }}>\n <Link href=\"/settings\" aria-keyshortcuts={settingsKey}>\n <Settings />\n <span>Settings</span>\n <kbd aria-hidden className={cn(kbdClass, \"ml-auto hidden group-hover/menu-item:inline group-focus-within/menu-item:inline\")}>{settingsKey}</kbd>\n </Link>\n </SidebarMenuButton>\n </SidebarMenuItem>\n </SidebarMenu>\n </SidebarFooter>\n </Sidebar>\n )\n}\n","// Subsequence fuzzy match for the Cmd+P file finder (VS Code-style, much simpler).\n// Every query char must appear in order. Consecutive runs, word starts and hits\n// in the file name (not the folder) score higher.\n\nconst BOUNDARY = /[/\\-_. ]/\n\n/**\n * Score `query` against `path`; null when not every query char is found in order.\n * Greedy from the leftmost hit would let \"hld\" start in \"arcHitecture\" and miss \"HLD.md\",\n * so try every position of the first char and keep the best.\n */\nexport function fuzzyScore(query: string, path: string): number | null {\n const q = query.toLowerCase().replace(/\\s+/g, \"\")\n if (!q) return 0\n const p = path.toLowerCase()\n let best: number | null = null\n for (let start = p.indexOf(q[0]); start !== -1; start = p.indexOf(q[0], start + 1)) {\n const s = greedyScore(q, p, start)\n if (s !== null && (best === null || s > best)) best = s\n }\n return best\n}\n\n// ponytail: O(path × first-char hits); fine for a few thousand docs, swap for DP if it lags.\nfunction greedyScore(q: string, p: string, start: number): number | null {\n const nameStart = p.lastIndexOf(\"/\") + 1\n let score = 0\n let qi = 0\n let prev = -2\n for (let i = start; i < p.length && qi < q.length; i++) {\n if (p[i] !== q[qi]) continue\n score += 1\n if (i === prev + 1) score += 5\n if (i === 0 || BOUNDARY.test(p[i - 1])) score += 8\n if (i >= nameStart) score += 3\n prev = i\n qi++\n }\n return qi === q.length ? score : null\n}\n\n/** Paths matching `query`, best first; ties go to the shorter path. */\nexport function fuzzyFilter<T>(query: string, items: T[], getPath: (item: T) => string): T[] {\n return items\n .map((item) => ({ item, path: getPath(item), score: fuzzyScore(query, getPath(item)) }))\n .filter((r): r is { item: T; path: string; score: number } => r.score !== null)\n .sort((a, b) => b.score - a.score || a.path.length - b.path.length)\n .map((r) => r.item)\n}\n","\"use client\"\n\nimport { useState, useEffect, useRef } from \"react\"\nimport { useRouter, usePathname } from \"next/navigation\"\nimport { AppProvider, useApp } from \"@/context/AppContext\"\nimport { SettingsApplier } from \"@/components/shared/SettingsApplier\"\nimport { LoadingScreen } from \"@/components/shared/LoadingScreen\"\nimport { AppHeader } from \"@/components/layout/AppHeader\"\nimport { AppSidebar } from \"@/components/layout/AppSidebar\"\nimport { CommandPalette } from \"@/components/layout/CommandPalette\"\nimport { QuickOpen } from \"@/components/layout/QuickOpen\"\nimport { NewDocModal } from \"@/components/docs/NewDocModal\"\nimport { ChatModal } from \"@/components/chat/ChatModal\"\nimport { Toaster } from \"@/components/ui/toast\"\nimport { ItemCommandKeys } from \"@/components/shared/item-commands\"\nimport { ChatProvider, useChats } from \"@/context/ChatContext\"\nimport { SidebarProvider, SidebarInset } from \"@/components/ui/sidebar\"\nimport { Dialog, DialogContent, DialogTitle } from \"@/components/ui/dialog\"\nimport { CHAT_KEY, OTHER_SHORTCUTS, PAGE_SHORTCUTS, pageForKey, pageTitle, shouldHandleShortcut } from \"@/lib/shortcuts\"\n\nexport default function AppLayout({ children }: { children: React.ReactNode }) {\n return (\n <AppProvider>\n <SettingsApplier />\n <ChatProvider>\n <AppLayoutInner>{children}</AppLayoutInner>\n </ChatProvider>\n </AppProvider>\n )\n}\n\nconst SHORTCUT_SECTIONS = [\n { title: \"Go to\", rows: PAGE_SHORTCUTS.map(({ key, label, help }) => ({ key, description: help ?? label })) },\n ...([\"Open\", \"Board\", \"Open item\", \"Editing & other\"] as const).map((title) => ({\n title, rows: OTHER_SHORTCUTS.filter((s) => s.section === title).map(({ key, label }) => ({ key, description: label })),\n })),\n]\n\nconst skipLink = \"sr-only focus:not-sr-only focus:fixed focus:left-2 focus:top-2 focus:z-50 focus:rounded-md focus:bg-surface focus:px-3 focus:py-1.5 focus:text-xs focus:text-txt focus:ring-2 focus:ring-ring\"\n\nfunction AppLayoutInner({ children }: { children: React.ReactNode }) {\n const { loading, summary, projects, activeProject, liveIndicator, onProjectChange, board, openDoc, rootParam } = useApp()\n const router = useRouter()\n const pathname = usePathname()\n const [showHelp, setShowHelp] = useState(false)\n const [cmdOpen, setCmdOpen] = useState(false)\n const [quickOpen, setQuickOpen] = useState(false)\n const [newDocOpen, setNewDocOpen] = useState(false)\n const { showDefault } = useChats()\n const keyboardRef = useRef(false)\n const prevPathRef = useRef(pathname)\n\n // Route announcements: the tab title names the page, and after a keyboard navigation focus moves to\n // #main so screen readers land on the new page. Keeps ChatContext's \"(n) \" waiting prefix.\n const projectName = summary?.name\n useEffect(() => {\n const page = pageTitle(pathname)\n const base = [page, projectName].filter(Boolean).join(\" · \")\n const prefix = document.title.match(/^\\(\\d+\\) /)?.[0] ?? \"\"\n document.title = `${prefix}${base ? `${base} — ` : \"\"}VibeDoc`\n if (prevPathRef.current === pathname) return // initial load or project name change: don't steal focus\n prevPathRef.current = pathname\n if (keyboardRef.current) document.getElementById(\"main\")?.focus({ preventScroll: true })\n }, [pathname, projectName])\n\n // Last input was a key (not a pointer)? Decides whether a route change moves focus.\n useEffect(() => {\n const onKey = () => { keyboardRef.current = true }\n const onPointer = () => { keyboardRef.current = false }\n window.addEventListener(\"keydown\", onKey, true)\n window.addEventListener(\"pointerdown\", onPointer, true)\n return () => {\n window.removeEventListener(\"keydown\", onKey, true)\n window.removeEventListener(\"pointerdown\", onPointer, true)\n }\n }, [])\n\n useEffect(() => {\n function onKey(e: KeyboardEvent) {\n if ((e.metaKey || e.ctrlKey) && e.key === \"k\") {\n e.preventDefault()\n setCmdOpen(v => !v)\n return\n }\n // Overrides the browser's print shortcut\n if ((e.metaKey || e.ctrlKey) && e.key === \"p\") {\n e.preventDefault()\n setCmdOpen(false)\n setQuickOpen(v => !v)\n return\n }\n // ⌘B (sidebar, owned by shadcn), ⌘C etc. keep their normal meaning\n if (!shouldHandleShortcut(e)) return\n const href = pageForKey(e.key)\n if (href) { router.push(href); return }\n switch (e.key) {\n // preventDefault: the modal autofocuses its composer, which would otherwise receive this \"c\"\n case CHAT_KEY: e.preventDefault(); showDefault(); break\n case \"?\": setShowHelp((v) => !v); break\n case \"Escape\": setShowHelp(false); break\n case \"/\":\n e.preventDefault()\n if (pathname === \"/docs\") {\n document.getElementById(\"doc-search\")?.focus()\n } else if (pathname === \"/board\") {\n document.getElementById(\"board-search\")?.focus()\n } else {\n router.push(\"/docs\")\n }\n break\n }\n }\n window.addEventListener(\"keydown\", onKey)\n return () => window.removeEventListener(\"keydown\", onKey)\n }, [router, pathname, showDefault])\n\n if (loading) return <LoadingScreen />\n\n return (\n <SidebarProvider>\n {/* The sidebar precedes the header in the DOM (shadcn's peer selectors need it), so the agent strip gets its own skip link */}\n <a href=\"#agent-status\" className={skipLink}>Skip to agent status</a>\n <a href=\"#main\" className={skipLink}>Skip to content</a>\n <AppSidebar board={board} />\n <SidebarInset className=\"min-w-0\">\n <AppHeader\n summary={summary}\n projects={projects}\n activeProject={activeProject}\n liveIndicator={liveIndicator}\n onProjectChange={onProjectChange}\n onToggleChat={showDefault}\n onOpenSearch={() => setCmdOpen(true)}\n />\n <main id=\"main\" tabIndex={-1} className=\"flex-1 min-h-0 overflow-y-auto outline-none\">{children}</main>\n <ChatModal />\n <Toaster />\n <ItemCommandKeys />\n\n <QuickOpen\n open={quickOpen}\n onClose={() => setQuickOpen(false)}\n onOpenDoc={openDoc}\n rootParam={rootParam}\n />\n <CommandPalette\n open={cmdOpen}\n onClose={() => setCmdOpen(false)}\n onOpenDoc={openDoc}\n onNewDoc={() => { setCmdOpen(false); setNewDocOpen(true) }}\n onQuickOpen={() => { setCmdOpen(false); setQuickOpen(true) }}\n onShowHelp={() => { setCmdOpen(false); setShowHelp(true) }}\n rootParam={rootParam}\n />\n <NewDocModal\n open={newDocOpen}\n onOpenChange={setNewDocOpen}\n rootParam={rootParam}\n onDocCreated={async (path) => { await openDoc(path) }}\n />\n\n {/* Keyboard shortcuts help modal */}\n <Dialog open={showHelp} onOpenChange={setShowHelp}>\n <DialogContent aria-describedby={undefined} className=\"block w-80 p-5 rounded-xl sm:rounded-xl shadow-2xl\">\n <DialogTitle className=\"font-display text-sm font-semibold text-txt mb-4\">Keyboard shortcuts</DialogTitle>\n {SHORTCUT_SECTIONS.map(({ title, rows }) => (\n <table key={title} className=\"w-full text-xs mt-3 first-of-type:mt-0\">\n <caption className=\"pb-1 text-left font-mono text-[10px] uppercase tracking-[0.06em] text-muted\">{title}</caption>\n <tbody>\n {rows.map(({ key, description }) => (\n <tr key={key} className=\"border-t border-border first:border-0\">\n <td className=\"py-1.5 pr-4 w-16 whitespace-nowrap\">\n <kbd className=\"font-mono bg-surface2 border border-border rounded-sm px-1.5 py-0.5 text-txt\">\n {key}\n </kbd>\n </td>\n <td className=\"py-1.5 text-muted\">{description}</td>\n </tr>\n ))}\n </tbody>\n </table>\n ))}\n </DialogContent>\n </Dialog>\n </SidebarInset>\n </SidebarProvider>\n )\n}\n","\"use client\"\n\nimport { useState, useEffect, useMemo, useRef } from \"react\"\nimport { useRouter } from \"next/navigation\"\nimport {\n Search, FilePlus, LayoutDashboard, Activity, Brain, Map, BookOpen, Bot, FlaskConical, FolderTree, Settings,\n FileText, MessageSquarePlus, SunMoon, FolderOpen, Keyboard, Zap, type LucideIcon,\n} from \"lucide-react\"\nimport { cn } from \"@/lib/utils\"\nimport { fuzzyFilter } from \"@/lib/fuzzy\"\nimport { shortcutFor } from \"@/lib/shortcuts\"\nimport { applyTheme } from \"@/lib/applySettings\"\nimport { DEFAULT_SETTINGS, type AppSettings } from \"@/lib/settings\"\nimport { groupChats, shellStatus } from \"@/lib/chats\"\nimport { useApp } from \"@/context/AppContext\"\nimport { useChats } from \"@/context/ChatContext\"\nimport { StatusIcon } from \"@/components/shared/StatusIcon\"\nimport { StatusMarker, attachHref } from \"@/components/chat/StatusMarker\"\nimport { Dialog, DialogContent, DialogTitle } from \"@/components/ui/dialog\"\nimport type { RoadmapItem } from \"@/types\"\nimport { itemKeyLabel, useCurrentItemCommands } from \"@/components/shared/item-commands\"\nimport { displayStatus } from \"@/lib/statuses\"\n\nconst PAGES: { href: string; label: string; icon: LucideIcon }[] = [\n { href: \"/chat\", label: \"Chats\", icon: Bot },\n { href: \"/board\", label: \"Board\", icon: LayoutDashboard },\n { href: \"/roadmap\", label: \"Roadmap\", icon: Map },\n { href: \"/docs\", label: \"Docs\", icon: BookOpen },\n { href: \"/activity\", label: \"Activity\", icon: Activity },\n { href: \"/memory\", label: \"Memory\", icon: Brain },\n { href: \"/manual-tests\", label: \"Manual tests\", icon: FlaskConical },\n { href: \"/explorer\", label: \"Explorer\", icon: FolderTree },\n { href: \"/settings\", label: \"Settings\", icon: Settings },\n]\nconst PER_GROUP = 6\n\ninterface Row {\n id: string\n group: string\n label: string\n /** Mono prefix: task/epic id */\n code?: string\n detail?: string\n lead: React.ReactNode\n kbd?: string\n run: () => void\n}\n\ntype DocSearch = { query: string; status: \"done\" | \"error\"; files: string[] }\n\ninterface CommandPaletteProps {\n open: boolean\n onClose: () => void\n onOpenDoc: (path: string) => void\n onNewDoc?: () => void\n onQuickOpen: () => void\n onShowHelp: () => void\n rootParam: string\n}\n\nconst icon = (Icon: LucideIcon) => <Icon className=\"size-3.5 shrink-0 text-muted\" aria-hidden />\n\n/** ⌘K — chats first (task/epic ids first when the query is one), then pages, tasks & epics by id or title, docs by content, and actions. */\nexport function CommandPalette({ open, onClose, onOpenDoc, onNewDoc, onQuickOpen, onShowHelp, rootParam }: CommandPaletteProps) {\n const router = useRouter()\n const { board, projects, activeProject, onProjectChange } = useApp()\n const { chats, queue, now, show, create } = useChats()\n const [query, setQuery] = useState(\"\")\n const [activeIndex, setActiveIndex] = useState(0)\n const [docs, setDocs] = useState<DocSearch | null>(null)\n const [epics, setEpics] = useState<RoadmapItem[]>([])\n const listRef = useRef<HTMLDivElement>(null)\n const current = useCurrentItemCommands()\n\n const [wasOpen, setWasOpen] = useState(open)\n if (open !== wasOpen) {\n setWasOpen(open)\n if (open) { setQuery(\"\"); setActiveIndex(0); setDocs(null) }\n }\n\n // Epics: same endpoint the chat rail uses; refetched per open so it stays current\n useEffect(() => {\n if (!open) return\n let cancelled = false\n fetch(`/api/roadmap${rootParam}`)\n .then((r) => (r.ok ? r.json() : { items: [] }))\n .then((d: { items?: RoadmapItem[] }) => { if (!cancelled) setEpics((d.items ?? []).filter((i) => i.parent)) })\n .catch((e) => console.warn(\"[vibedoc] palette could not load the roadmap:\", e))\n return () => { cancelled = true }\n }, [open, rootParam])\n\n // Debounced doc content search\n const q = query.trim()\n useEffect(() => {\n if (q.length < 2) return\n const t = setTimeout(async () => {\n try {\n const res = await fetch(`/api/docs${rootParam}&q=${encodeURIComponent(q)}`)\n if (!res.ok) throw new Error(`HTTP ${res.status}`)\n const data = await res.json()\n setDocs({ query: q, status: \"done\", files: data.results?.map((r: { file: string }) => r.file) ?? [] })\n } catch (e) {\n console.warn(\"[vibedoc] doc search failed:\", e)\n setDocs({ query: q, status: \"error\", files: [] })\n }\n }, 300)\n return () => clearTimeout(t)\n }, [q, rootParam])\n\n const rows = useMemo(() => {\n const go = (href: string) => () => { router.push(href); onClose() }\n const top = <T,>(items: T[], key: (item: T) => string) => (q ? fuzzyFilter(q, items, key).slice(0, PER_GROUP) : items)\n const out: Row[] = []\n const itemRows: Row[] = []\n\n // Actions on the open / selected item come first, under its name\n if (current) {\n for (const c of top(current.commands, (c) => c.label)) {\n out.push({\n id: `item-cmd-${c.action}`, group: current.title, label: c.label, lead: icon(Zap), kbd: itemKeyLabel(c.action),\n run: () => { onClose(); c.run() },\n })\n }\n }\n\n if (q) {\n const tasks = board ? Object.values(board).flat() : []\n const items = [\n ...tasks.map((t) => ({ id: t.id, title: t.title, lead: <StatusIcon status={displayStatus(t)} />, href: attachHref({ kind: \"task\", id: t.id }) })),\n ...epics.map((e) => ({ id: e.id, title: e.title, lead: icon(Map), href: attachHref({ kind: \"epic\", id: e.id }) })),\n ]\n // An id prefix (\"T06\", \"r043\") beats a fuzzy title hit; shortest (exact) id first\n const lower = q.toLowerCase()\n const byId = items.filter((i) => i.id.toLowerCase().startsWith(lower)).sort((a, b) => a.id.length - b.id.length)\n const hits = byId.length ? byId : fuzzyFilter(q, items, (i) => i.title)\n for (const i of hits.slice(0, PER_GROUP)) {\n itemRows.push({ id: `item-${i.id}`, group: \"Tasks & epics\", label: i.title, code: i.id, lead: i.lead, run: go(i.href) })\n }\n }\n // An id query (\"T06\", \"r043\") puts its task/epic first, as the active row, so Enter opens it\n const idQuery = /^[TR]\\d/i.test(q)\n if (idQuery) out.push(...itemRows)\n\n // Chats: with no query, the attention queue then running (else the 3 newest)\n const g = groupChats(chats, now)\n const urgent = [...queue, ...g.running]\n const chatPool = q ? chats : urgent.length ? urgent : g.recent.slice(0, 3)\n for (const c of top(chatPool, (c) => `${c.attach?.id ?? \"\"} ${c.title}`)) {\n out.push({\n id: `chat-${c.id}`, group: \"Chats\", label: c.title, code: c.attach?.id,\n lead: <StatusMarker status={shellStatus(c, now)} showIdle />,\n run: () => { show(c.id); onClose() },\n })\n }\n if (!idQuery) out.push(...itemRows)\n\n for (const p of top(PAGES, (p) => p.label)) {\n out.push({ id: `page-${p.href}`, group: \"Navigate\", label: p.label, lead: icon(p.icon), kbd: shortcutFor(p.href), run: go(p.href) })\n }\n\n const actions: Row[] = [\n { id: \"new-chat\", group: \"Actions\", label: \"New chat\", lead: icon(MessageSquarePlus), run: () => { show(create()); onClose() } },\n { id: \"new-doc\", group: \"Actions\", label: \"New doc\", lead: icon(FilePlus), run: () => { onNewDoc?.(); onClose() } },\n { id: \"go-file\", group: \"Actions\", label: \"Go to file\", lead: icon(FileText), kbd: \"⌘P\", run: onQuickOpen },\n { id: \"theme\", group: \"Actions\", label: \"Toggle light / dark theme\", lead: icon(SunMoon), run: () => { toggleTheme(rootParam); onClose() } },\n { id: \"help\", group: \"Actions\", label: \"Keyboard shortcuts\", lead: icon(Keyboard), kbd: \"?\", run: onShowHelp },\n // Project switching only when searched for: there can be many sibling projects\n ...(q ? projects.filter((p) => p.root !== activeProject) : []).map((p) => ({\n id: `project-${p.root}`, group: \"Actions\", label: `Switch project: ${p.name}`, detail: p.root,\n lead: icon(FolderOpen), run: () => { onProjectChange(p.root); onClose() },\n })),\n ]\n out.push(...top(actions, (a) => a.label))\n\n if (q.length >= 2 && docs?.query === q) {\n // Task and roadmap files already show under Tasks & epics\n const files = docs.files.filter((f) => !/^plans\\/(tasks|roadmap)\\//.test(f))\n for (const path of files.slice(0, PER_GROUP)) {\n const slash = path.lastIndexOf(\"/\")\n out.push({\n id: `doc-${path}`, group: \"Docs\", label: path.slice(slash + 1).replace(/\\.md$/, \"\"),\n detail: slash > 0 ? path.slice(0, slash) : undefined, lead: icon(FileText),\n run: () => { onOpenDoc(path); onClose() },\n })\n }\n }\n return out\n }, [q, current, chats, queue, now, board, epics, projects, activeProject, docs, router, onClose, show, create, onNewDoc, onQuickOpen, onShowHelp, onOpenDoc, onProjectChange, rootParam])\n\n const active = Math.max(0, Math.min(activeIndex, rows.length - 1))\n // Runs of one group, each rendered as an ARIA group named by its heading\n const groups = rows.reduce<{ group: string; start: number; items: Row[] }[]>((acc, row, i) => {\n const last = acc[acc.length - 1]\n if (last?.group === row.group) last.items.push(row)\n else acc.push({ group: row.group, start: i, items: [row] })\n return acc\n }, [])\n const docsPending = q.length >= 2 && docs?.query !== q\n const docsFailed = q.length >= 2 && docs?.query === q && docs.status === \"error\"\n\n useEffect(() => {\n listRef.current?.querySelector(`[data-index=\"${active}\"]`)?.scrollIntoView({ block: \"nearest\" })\n }, [active])\n\n function handleKeyDown(e: React.KeyboardEvent<HTMLInputElement>) {\n if (e.key === \"ArrowDown\") {\n e.preventDefault()\n setActiveIndex(Math.min(active + 1, rows.length - 1))\n } else if (e.key === \"ArrowUp\") {\n e.preventDefault()\n setActiveIndex(Math.max(active - 1, 0))\n } else if (e.key === \"Enter\") {\n e.preventDefault()\n rows[active]?.run()\n }\n }\n\n return (\n <Dialog open={open} onOpenChange={(v) => { if (!v) onClose() }}>\n <DialogContent className=\"max-w-lg p-0 overflow-hidden bg-surface border-border gap-0 top-[20%] translate-y-0\">\n <DialogTitle className=\"sr-only\">Command palette</DialogTitle>\n <div className=\"flex items-center gap-3 px-4 h-11 border-b border-border\">\n <Search className=\"size-4 text-muted shrink-0\" aria-hidden />\n <input\n autoFocus\n role=\"combobox\"\n aria-expanded={rows.length > 0}\n aria-controls=\"cmd-list\"\n aria-autocomplete=\"list\"\n aria-activedescendant={rows[active] ? `cmd-${active}` : undefined}\n value={query}\n onChange={(e) => { setQuery(e.target.value); setActiveIndex(0) }}\n onKeyDown={handleKeyDown}\n placeholder=\"Search tasks, epics, chats, docs…\"\n className=\"h-full flex-1 bg-transparent text-sm text-txt outline-none placeholder:text-muted\"\n />\n </div>\n <div ref={listRef} id=\"cmd-list\" role=\"listbox\" aria-label=\"Results\" className=\"max-h-80 overflow-y-auto py-1\">\n {groups.map(({ group, start, items }) => (\n <div key={`${group}-${start}`} role=\"group\" aria-labelledby={`cmd-g-${start}`}>\n <div id={`cmd-g-${start}`} role=\"presentation\" className=\"px-4 pt-2 pb-1 font-mono text-[10px] uppercase tracking-[0.06em] text-muted\">\n {group}\n </div>\n {items.map((row, k) => { const i = start + k; return (\n <div\n key={row.id}\n id={`cmd-${i}`}\n data-index={i}\n role=\"option\"\n aria-selected={i === active}\n onClick={row.run}\n onMouseMove={() => setActiveIndex(i)}\n className={cn(\n \"flex items-center gap-2.5 w-full px-4 py-1.5 text-[13px] cursor-pointer transition-colors duration-[var(--duration-fast)]\",\n i === active ? \"bg-accent/10 text-txt\" : \"text-muted\",\n )}\n >\n {row.lead}\n {row.code && <span className=\"font-mono text-[11px] text-muted shrink-0\">{row.code}</span>}\n <span className=\"truncate text-txt\">{row.label}</span>\n {row.detail && <span className=\"truncate text-[11px] text-muted\">{row.detail}</span>}\n {row.kbd && (\n <kbd className=\"ml-auto shrink-0 rounded-sm border border-border px-1 font-mono text-[10px] text-muted\">{row.kbd}</kbd>\n )}\n </div>\n ) })}\n </div>\n ))}\n {docsPending && <div className=\"px-4 py-1.5 text-[11px] text-muted\">Searching docs…</div>}\n {docsFailed && <div role=\"alert\" className=\"px-4 py-1.5 text-[11px] text-danger\">Search failed. Check the server and try again.</div>}\n {rows.length === 0 && !docsPending && !docsFailed && (\n <div className=\"px-4 py-6 text-center text-[13px] text-muted\">Nothing matches “{q}”</div>\n )}\n </div>\n </DialogContent>\n </Dialog>\n )\n}\n\n/** Flip the saved theme between light and dark (from \"system\" too), same write as the Settings page. */\nasync function toggleTheme(rootParam: string) {\n try {\n const res = await fetch(`/api/settings${rootParam}&type=settings`)\n // Never PUT defaults over settings we couldn't read\n if (!res.ok) throw new Error(`HTTP ${res.status}`)\n const settings: AppSettings = { ...DEFAULT_SETTINGS, ...(await res.json()) }\n settings.theme = document.documentElement.classList.contains(\"dark\") ? \"light\" : \"dark\"\n applyTheme(settings.theme)\n await fetch(`/api/settings${rootParam}&type=settings`, {\n method: \"PUT\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(settings),\n })\n } catch (e) {\n console.warn(\"[vibedoc] could not save the theme:\", e)\n }\n}\n","\"use client\"\n\nimport { useState, useEffect, useMemo, useRef } from \"react\"\nimport { FileText } from \"lucide-react\"\nimport { cn } from \"@/lib/utils\"\nimport { fuzzyFilter } from \"@/lib/fuzzy\"\nimport { Dialog, DialogContent, DialogTitle } from \"@/components/ui/dialog\"\nimport { Input } from \"@/components/ui/input\"\nimport type { DocFile } from \"@/types\"\n\nconst MAX_RESULTS = 50\n\ninterface QuickOpenProps {\n open: boolean\n onClose: () => void\n onOpenDoc: (path: string) => void\n rootParam: string\n}\n\n/** Cmd+P — jump to a doc by fuzzy-matching its path (Cmd+K searches content). */\nexport function QuickOpen({ open, onClose, onOpenDoc, rootParam }: QuickOpenProps) {\n const [docs, setDocs] = useState<DocFile[]>([])\n const [query, setQuery] = useState(\"\")\n const [activeIndex, setActiveIndex] = useState(0)\n const listRef = useRef<HTMLDivElement>(null)\n\n const [wasOpen, setWasOpen] = useState(open)\n if (open !== wasOpen) {\n setWasOpen(open)\n if (open) { setQuery(\"\"); setActiveIndex(0) }\n }\n\n // Refetch on every open so new/renamed docs show up\n useEffect(() => {\n if (!open) return\n fetch(`/api/docs${rootParam}`)\n .then((r) => r.json())\n .then((d) => setDocs(Array.isArray(d) ? d : []))\n .catch(() => setDocs([]))\n }, [open, rootParam])\n\n const matches = useMemo(() => fuzzyFilter(query, docs, (d) => d.path), [query, docs])\n const shown = matches.slice(0, MAX_RESULTS)\n\n useEffect(() => {\n listRef.current?.querySelector(`[data-index=\"${activeIndex}\"]`)?.scrollIntoView({ block: \"nearest\" })\n }, [activeIndex])\n\n function select(doc: DocFile | undefined) {\n if (!doc) return\n onOpenDoc(doc.path)\n onClose()\n }\n\n function handleKeyDown(e: React.KeyboardEvent<HTMLInputElement>) {\n if (e.key === \"ArrowDown\" || (e.ctrlKey && e.key === \"n\")) {\n e.preventDefault()\n setActiveIndex((i) => Math.min(i + 1, shown.length - 1))\n } else if (e.key === \"ArrowUp\" || (e.ctrlKey && e.key === \"p\")) {\n e.preventDefault()\n setActiveIndex((i) => Math.max(i - 1, 0))\n } else if (e.key === \"Enter\") {\n e.preventDefault()\n select(shown[activeIndex])\n }\n }\n\n return (\n <Dialog open={open} onOpenChange={(v) => { if (!v) onClose() }}>\n <DialogContent className=\"max-w-xl p-0 overflow-hidden bg-surface border-border gap-0 top-[20%] translate-y-0\">\n <DialogTitle className=\"sr-only\">Go to file</DialogTitle>\n <Input\n autoFocus\n role=\"combobox\"\n aria-expanded={shown.length > 0}\n aria-controls=\"quick-open-list\"\n aria-autocomplete=\"list\"\n aria-activedescendant={shown[activeIndex] ? `quick-open-${activeIndex}` : undefined}\n value={query}\n onChange={(e) => { setQuery(e.target.value); setActiveIndex(0) }}\n onKeyDown={handleKeyDown}\n placeholder=\"Go to file…\"\n className=\"h-11 rounded-none border-0 border-b border-border bg-transparent px-4 text-sm shadow-none focus-visible:ring-0 placeholder:text-muted\"\n />\n <div ref={listRef} id=\"quick-open-list\" role=\"listbox\" aria-label=\"Files\" className=\"max-h-80 overflow-y-auto py-1\">\n {shown.map((doc, i) => {\n const slash = doc.path.lastIndexOf(\"/\")\n return (\n <div\n key={doc.path}\n id={`quick-open-${i}`}\n data-index={i}\n role=\"option\"\n aria-selected={activeIndex === i}\n onClick={() => select(doc)}\n onMouseMove={() => setActiveIndex(i)}\n className={cn(\n \"flex items-center gap-2.5 w-full px-4 py-1.5 text-left text-sm cursor-pointer transition-colors\",\n activeIndex === i ? \"bg-accent/10 text-txt\" : \"text-muted\",\n )}\n >\n <FileText aria-hidden className=\"h-3.5 w-3.5 shrink-0 opacity-60\" />\n <span className=\"truncate text-txt\">{doc.path.slice(slash + 1)}</span>\n {slash > 0 && <span className=\"truncate text-xs text-muted\">{doc.path.slice(0, slash)}</span>}\n </div>\n )\n })}\n {shown.length === 0 && <div role=\"presentation\" className=\"px-4 py-6 text-center text-sm text-muted\">No matching files</div>}\n {matches.length > MAX_RESULTS && (\n <div className=\"px-4 py-1.5 text-xs text-muted\">{matches.length - MAX_RESULTS} more — keep typing to narrow</div>\n )}\n </div>\n </DialogContent>\n </Dialog>\n )\n}\n","export function LoadingScreen() {\r\n return (\r\n <div className=\"min-h-screen flex items-center justify-center\">\r\n <div className=\"text-center\">\r\n <div className=\"flex gap-1.5 justify-center mb-4\">\r\n {[0, 1, 2].map((i) => (\r\n <div\r\n key={i}\r\n className=\"w-2 h-2 rounded-full bg-accent animate-pulse-dot\"\r\n style={{ animationDelay: `${i * 0.15}s` }}\r\n />\r\n ))}\r\n </div>\r\n <p className=\"text-muted text-sm font-mono\">Loading project...</p>\r\n </div>\r\n </div>\r\n )\r\n}\r\n","import * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { PanelLeft } from \"lucide-react\"\n\nimport { useIsMobile } from \"@/hooks/use-mobile\"\nimport { cn } from \"@/lib/utils\"\nimport { inTextField } from \"@/lib/shortcuts\"\nimport { Button } from \"@/components/ui/button\"\nimport { Input } from \"@/components/ui/input\"\nimport { Separator } from \"@/components/ui/separator\"\nimport {\n Sheet,\n SheetContent,\n SheetDescription,\n SheetHeader,\n SheetTitle,\n} from \"@/components/ui/sheet\"\nimport { Skeleton } from \"@/components/ui/skeleton\"\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"@/components/ui/tooltip\"\n\nconst SIDEBAR_COOKIE_NAME = \"sidebar_state\"\nconst SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7\nconst SIDEBAR_WIDTH = \"16rem\"\nconst SIDEBAR_WIDTH_MOBILE = \"18rem\"\nconst SIDEBAR_WIDTH_ICON = \"3rem\"\nconst SIDEBAR_KEYBOARD_SHORTCUT = \"b\"\n\ntype SidebarContextProps = {\n state: \"expanded\" | \"collapsed\"\n open: boolean\n setOpen: (open: boolean) => void\n openMobile: boolean\n setOpenMobile: (open: boolean) => void\n isMobile: boolean\n toggleSidebar: () => void\n}\n\nconst SidebarContext = React.createContext<SidebarContextProps | null>(null)\n\nfunction useSidebar() {\n const context = React.useContext(SidebarContext)\n if (!context) {\n throw new Error(\"useSidebar must be used within a SidebarProvider.\")\n }\n\n return context\n}\n\nconst SidebarProvider = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<\"div\"> & {\n defaultOpen?: boolean\n open?: boolean\n onOpenChange?: (open: boolean) => void\n }\n>(\n (\n {\n defaultOpen = true,\n open: openProp,\n onOpenChange: setOpenProp,\n className,\n style,\n children,\n ...props\n },\n ref\n ) => {\n const isMobile = useIsMobile()\n const [openMobile, setOpenMobile] = React.useState(false)\n\n // This is the internal state of the sidebar.\n // We use openProp and setOpenProp for control from outside the component.\n const [_open, _setOpen] = React.useState(defaultOpen)\n const open = openProp ?? _open\n const setOpen = React.useCallback(\n (value: boolean | ((value: boolean) => boolean)) => {\n const openState = typeof value === \"function\" ? value(open) : value\n if (setOpenProp) {\n setOpenProp(openState)\n } else {\n _setOpen(openState)\n }\n\n // This sets the cookie to keep the sidebar state.\n document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`\n },\n [setOpenProp, open]\n )\n\n // Helper to toggle the sidebar.\n const toggleSidebar = React.useCallback(() => {\n return isMobile\n ? setOpenMobile((open) => !open)\n : setOpen((open) => !open)\n }, [isMobile, setOpen, setOpenMobile])\n\n // Adds a keyboard shortcut to toggle the sidebar.\n React.useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n // ⌘B inside an editor or field means bold, not the sidebar\n if (\n event.key === SIDEBAR_KEYBOARD_SHORTCUT &&\n (event.metaKey || event.ctrlKey) &&\n !event.defaultPrevented &&\n !inTextField(event.target)\n ) {\n event.preventDefault()\n toggleSidebar()\n }\n }\n\n window.addEventListener(\"keydown\", handleKeyDown)\n return () => window.removeEventListener(\"keydown\", handleKeyDown)\n }, [toggleSidebar])\n\n // We add a state so that we can do data-state=\"expanded\" or \"collapsed\".\n // This makes it easier to style the sidebar with Tailwind classes.\n const state = open ? \"expanded\" : \"collapsed\"\n\n const contextValue = React.useMemo<SidebarContextProps>(\n () => ({\n state,\n open,\n setOpen,\n isMobile,\n openMobile,\n setOpenMobile,\n toggleSidebar,\n }),\n [state, open, setOpen, isMobile, openMobile, setOpenMobile, toggleSidebar]\n )\n\n return (\n <SidebarContext.Provider value={contextValue}>\n <TooltipProvider delayDuration={0}>\n <div\n style={\n {\n \"--sidebar-width\": SIDEBAR_WIDTH,\n \"--sidebar-width-icon\": SIDEBAR_WIDTH_ICON,\n ...style,\n } as React.CSSProperties\n }\n className={cn(\n \"group/sidebar-wrapper flex min-h-svh w-full has-data-[variant=inset]:bg-sidebar\",\n className\n )}\n ref={ref}\n {...props}\n >\n {children}\n </div>\n </TooltipProvider>\n </SidebarContext.Provider>\n )\n }\n)\nSidebarProvider.displayName = \"SidebarProvider\"\n\nconst Sidebar = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<\"div\"> & {\n side?: \"left\" | \"right\"\n variant?: \"sidebar\" | \"floating\" | \"inset\"\n collapsible?: \"offcanvas\" | \"icon\" | \"none\"\n }\n>(\n (\n {\n side = \"left\",\n variant = \"sidebar\",\n collapsible = \"offcanvas\",\n className,\n children,\n ...props\n },\n ref\n ) => {\n const { isMobile, state, openMobile, setOpenMobile } = useSidebar()\n\n if (collapsible === \"none\") {\n return (\n <div\n className={cn(\n \"flex h-full w-(--sidebar-width) flex-col bg-sidebar text-sidebar-foreground\",\n className\n )}\n ref={ref}\n {...props}\n >\n {children}\n </div>\n )\n }\n\n if (isMobile) {\n return (\n <Sheet open={openMobile} onOpenChange={setOpenMobile} {...props}>\n <SheetContent\n data-sidebar=\"sidebar\"\n data-mobile=\"true\"\n className=\"w-(--sidebar-width) bg-sidebar p-0 text-sidebar-foreground [&>button]:hidden\"\n style={\n {\n \"--sidebar-width\": SIDEBAR_WIDTH_MOBILE,\n } as React.CSSProperties\n }\n side={side}\n >\n <SheetHeader className=\"sr-only\">\n <SheetTitle>Sidebar</SheetTitle>\n <SheetDescription>Displays the mobile sidebar.</SheetDescription>\n </SheetHeader>\n <div className=\"flex h-full w-full flex-col\">{children}</div>\n </SheetContent>\n </Sheet>\n )\n }\n\n return (\n <div\n ref={ref}\n className=\"group peer hidden text-sidebar-foreground md:block\"\n data-state={state}\n data-collapsible={state === \"collapsed\" ? collapsible : \"\"}\n data-variant={variant}\n data-side={side}\n >\n {/* This is what handles the sidebar gap on desktop */}\n <div\n className={cn(\n \"relative w-(--sidebar-width) bg-transparent transition-[width] duration-200 ease-linear\",\n \"group-data-[collapsible=offcanvas]:w-0\",\n \"group-data-[side=right]:rotate-180\",\n variant === \"floating\" || variant === \"inset\"\n ? \"group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]\"\n : \"group-data-[collapsible=icon]:w-(--sidebar-width-icon)\"\n )}\n />\n <div\n className={cn(\n \"fixed inset-y-0 z-10 hidden h-svh w-(--sidebar-width) transition-[left,right,width] duration-200 ease-linear md:flex\",\n side === \"left\"\n ? \"left-0 group-data-[collapsible=offcanvas]:-left-(--sidebar-width)\"\n : \"right-0 group-data-[collapsible=offcanvas]:-right-(--sidebar-width)\",\n // Adjust the padding for floating and inset variants.\n variant === \"floating\" || variant === \"inset\"\n ? \"p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]\"\n : \"group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l\",\n className\n )}\n {...props}\n >\n <div\n data-sidebar=\"sidebar\"\n className=\"flex h-full w-full flex-col bg-sidebar group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:border group-data-[variant=floating]:border-sidebar-border group-data-[variant=floating]:shadow-sm\"\n >\n {children}\n </div>\n </div>\n </div>\n )\n }\n)\nSidebar.displayName = \"Sidebar\"\n\nconst SidebarTrigger = React.forwardRef<\n React.ElementRef<typeof Button>,\n React.ComponentProps<typeof Button>\n>(({ className, onClick, ...props }, ref) => {\n const { toggleSidebar } = useSidebar()\n\n return (\n <Button\n ref={ref}\n data-sidebar=\"trigger\"\n variant=\"ghost\"\n size=\"icon\"\n className={cn(\"h-7 w-7\", className)}\n onClick={(event) => {\n onClick?.(event)\n toggleSidebar()\n }}\n {...props}\n >\n <PanelLeft />\n <span className=\"sr-only\">Toggle Sidebar</span>\n </Button>\n )\n})\nSidebarTrigger.displayName = \"SidebarTrigger\"\n\nconst SidebarRail = React.forwardRef<\n HTMLButtonElement,\n React.ComponentProps<\"button\">\n>(({ className, ...props }, ref) => {\n const { toggleSidebar } = useSidebar()\n\n return (\n <button\n ref={ref}\n data-sidebar=\"rail\"\n aria-label=\"Toggle Sidebar\"\n tabIndex={-1}\n onClick={toggleSidebar}\n title=\"Toggle Sidebar\"\n className={cn(\n \"absolute inset-y-0 z-20 hidden w-4 -translate-x-1/2 transition-[translate,background-color] ease-linear after:absolute after:inset-y-0 after:left-1/2 after:w-[2px] hover:after:bg-sidebar-border group-data-[side=left]:-right-4 group-data-[side=right]:left-0 sm:flex\",\n \"in-data-[side=left]:cursor-w-resize in-data-[side=right]:cursor-e-resize\",\n \"[[data-side=left][data-state=collapsed]_&]:cursor-e-resize [[data-side=right][data-state=collapsed]_&]:cursor-w-resize\",\n \"group-data-[collapsible=offcanvas]:translate-x-0 group-data-[collapsible=offcanvas]:after:left-full hover:group-data-[collapsible=offcanvas]:bg-sidebar\",\n \"[[data-side=left][data-collapsible=offcanvas]_&]:-right-2\",\n \"[[data-side=right][data-collapsible=offcanvas]_&]:-left-2\",\n className\n )}\n {...props}\n />\n )\n})\nSidebarRail.displayName = \"SidebarRail\"\n\nconst SidebarInset = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<\"div\">\n>(({ className, ...props }, ref) => {\n // A div, not <main>: the app's own <main id=\"main\"> sits inside it\n return (\n <div\n ref={ref}\n className={cn(\n \"relative flex w-full flex-1 flex-col bg-bg\",\n \"md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow-sm\",\n className\n )}\n {...props}\n />\n )\n})\nSidebarInset.displayName = \"SidebarInset\"\n\nconst SidebarInput = React.forwardRef<\n React.ElementRef<typeof Input>,\n React.ComponentProps<typeof Input>\n>(({ className, ...props }, ref) => {\n return (\n <Input\n ref={ref}\n data-sidebar=\"input\"\n className={cn(\n \"h-8 w-full bg-bg shadow-none focus-visible:ring-2 focus-visible:ring-sidebar-ring\",\n className\n )}\n {...props}\n />\n )\n})\nSidebarInput.displayName = \"SidebarInput\"\n\nconst SidebarHeader = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<\"div\">\n>(({ className, ...props }, ref) => {\n return (\n <div\n ref={ref}\n data-sidebar=\"header\"\n className={cn(\"flex flex-col gap-2 p-2\", className)}\n {...props}\n />\n )\n})\nSidebarHeader.displayName = \"SidebarHeader\"\n\nconst SidebarFooter = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<\"div\">\n>(({ className, ...props }, ref) => {\n return (\n <div\n ref={ref}\n data-sidebar=\"footer\"\n className={cn(\"flex flex-col gap-2 p-2\", className)}\n {...props}\n />\n )\n})\nSidebarFooter.displayName = \"SidebarFooter\"\n\nconst SidebarSeparator = React.forwardRef<\n React.ElementRef<typeof Separator>,\n React.ComponentProps<typeof Separator>\n>(({ className, ...props }, ref) => {\n return (\n <Separator\n ref={ref}\n data-sidebar=\"separator\"\n className={cn(\"mx-2 w-auto bg-sidebar-border\", className)}\n {...props}\n />\n )\n})\nSidebarSeparator.displayName = \"SidebarSeparator\"\n\nconst SidebarContent = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<\"div\">\n>(({ className, ...props }, ref) => {\n return (\n <div\n ref={ref}\n data-sidebar=\"content\"\n className={cn(\n \"flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden\",\n className\n )}\n {...props}\n />\n )\n})\nSidebarContent.displayName = \"SidebarContent\"\n\nconst SidebarGroup = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<\"div\">\n>(({ className, ...props }, ref) => {\n return (\n <div\n ref={ref}\n data-sidebar=\"group\"\n className={cn(\"relative flex w-full min-w-0 flex-col p-2\", className)}\n {...props}\n />\n )\n})\nSidebarGroup.displayName = \"SidebarGroup\"\n\nconst SidebarGroupLabel = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<\"div\"> & { asChild?: boolean }\n>(({ className, asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : \"div\"\n\n return (\n <Comp\n ref={ref}\n data-sidebar=\"group-label\"\n className={cn(\n \"flex h-8 shrink-0 items-center rounded-md px-2 text-xs font-medium text-sidebar-foreground/70 outline-hidden ring-sidebar-ring transition-[margin,opacity] duration-200 ease-linear focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0\",\n \"group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0\",\n className\n )}\n {...props}\n />\n )\n})\nSidebarGroupLabel.displayName = \"SidebarGroupLabel\"\n\nconst SidebarGroupAction = React.forwardRef<\n HTMLButtonElement,\n React.ComponentProps<\"button\"> & { asChild?: boolean }\n>(({ className, asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : \"button\"\n\n return (\n <Comp\n ref={ref}\n data-sidebar=\"group-action\"\n className={cn(\n \"absolute right-3 top-3.5 flex aspect-square w-5 items-center justify-center rounded-md p-0 text-sidebar-foreground outline-hidden ring-sidebar-ring transition-transform hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0\",\n // Increases the hit area of the button on mobile.\n \"after:absolute after:-inset-2 md:after:hidden\",\n \"group-data-[collapsible=icon]:hidden\",\n className\n )}\n {...props}\n />\n )\n})\nSidebarGroupAction.displayName = \"SidebarGroupAction\"\n\nconst SidebarGroupContent = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<\"div\">\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-sidebar=\"group-content\"\n className={cn(\"w-full text-sm\", className)}\n {...props}\n />\n))\nSidebarGroupContent.displayName = \"SidebarGroupContent\"\n\nconst SidebarMenu = React.forwardRef<\n HTMLUListElement,\n React.ComponentProps<\"ul\">\n>(({ className, ...props }, ref) => (\n <ul\n ref={ref}\n data-sidebar=\"menu\"\n className={cn(\"flex w-full min-w-0 flex-col gap-1\", className)}\n {...props}\n />\n))\nSidebarMenu.displayName = \"SidebarMenu\"\n\nconst SidebarMenuItem = React.forwardRef<\n HTMLLIElement,\n React.ComponentProps<\"li\">\n>(({ className, ...props }, ref) => (\n <li\n ref={ref}\n data-sidebar=\"menu-item\"\n className={cn(\"group/menu-item relative\", className)}\n {...props}\n />\n))\nSidebarMenuItem.displayName = \"SidebarMenuItem\"\n\nconst sidebarMenuButtonVariants = cva(\n \"peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm outline-hidden ring-sidebar-ring transition-[width,height,padding] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 group-has-data-[sidebar=menu-action]/menu-item:pr-8 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0\",\n {\n variants: {\n variant: {\n default: \"hover:bg-sidebar-accent hover:text-sidebar-accent-foreground\",\n outline:\n \"bg-bg shadow-[0_0_0_1px_rgb(var(--rgb-border))] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_rgb(var(--rgb-surface2))]\",\n },\n size: {\n default: \"h-8 text-sm\",\n sm: \"h-7 text-xs\",\n lg: \"h-12 text-sm group-data-[collapsible=icon]:p-0!\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nconst SidebarMenuButton = React.forwardRef<\n HTMLButtonElement,\n React.ComponentProps<\"button\"> & {\n asChild?: boolean\n isActive?: boolean\n tooltip?: string | React.ComponentProps<typeof TooltipContent>\n } & VariantProps<typeof sidebarMenuButtonVariants>\n>(\n (\n {\n asChild = false,\n isActive = false,\n variant = \"default\",\n size = \"default\",\n tooltip,\n className,\n ...props\n },\n ref\n ) => {\n const Comp = asChild ? Slot : \"button\"\n const { isMobile, state } = useSidebar()\n\n const button = (\n <Comp\n ref={ref}\n data-sidebar=\"menu-button\"\n data-size={size}\n data-active={isActive}\n className={cn(sidebarMenuButtonVariants({ variant, size }), className)}\n {...props}\n />\n )\n\n if (!tooltip) {\n return button\n }\n\n if (typeof tooltip === \"string\") {\n tooltip = {\n children: tooltip,\n }\n }\n\n return (\n <Tooltip>\n <TooltipTrigger asChild>{button}</TooltipTrigger>\n <TooltipContent\n side=\"right\"\n align=\"center\"\n hidden={state !== \"collapsed\" || isMobile}\n {...tooltip}\n />\n </Tooltip>\n )\n }\n)\nSidebarMenuButton.displayName = \"SidebarMenuButton\"\n\nconst SidebarMenuAction = React.forwardRef<\n HTMLButtonElement,\n React.ComponentProps<\"button\"> & {\n asChild?: boolean\n showOnHover?: boolean\n }\n>(({ className, asChild = false, showOnHover = false, ...props }, ref) => {\n const Comp = asChild ? Slot : \"button\"\n\n return (\n <Comp\n ref={ref}\n data-sidebar=\"menu-action\"\n className={cn(\n \"absolute right-1 top-1.5 flex aspect-square w-5 items-center justify-center rounded-md p-0 text-sidebar-foreground outline-hidden ring-sidebar-ring transition-transform hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 peer-hover/menu-button:text-sidebar-accent-foreground [&>svg]:size-4 [&>svg]:shrink-0\",\n // Increases the hit area of the button on mobile.\n \"after:absolute after:-inset-2 md:after:hidden\",\n \"peer-data-[size=sm]/menu-button:top-1\",\n \"peer-data-[size=default]/menu-button:top-1.5\",\n \"peer-data-[size=lg]/menu-button:top-2.5\",\n \"group-data-[collapsible=icon]:hidden\",\n showOnHover &&\n \"group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100 data-[state=open]:opacity-100 peer-data-[active=true]/menu-button:text-sidebar-accent-foreground md:opacity-0\",\n className\n )}\n {...props}\n />\n )\n})\nSidebarMenuAction.displayName = \"SidebarMenuAction\"\n\nconst SidebarMenuBadge = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<\"div\">\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-sidebar=\"menu-badge\"\n className={cn(\n \"pointer-events-none absolute right-1 flex h-5 min-w-5 select-none items-center justify-center rounded-md px-1 text-xs font-medium tabular-nums text-sidebar-foreground\",\n \"peer-hover/menu-button:text-sidebar-accent-foreground peer-data-[active=true]/menu-button:text-sidebar-accent-foreground\",\n \"peer-data-[size=sm]/menu-button:top-1\",\n \"peer-data-[size=default]/menu-button:top-1.5\",\n \"peer-data-[size=lg]/menu-button:top-2.5\",\n \"group-data-[collapsible=icon]:hidden\",\n className\n )}\n {...props}\n />\n))\nSidebarMenuBadge.displayName = \"SidebarMenuBadge\"\n\nconst SidebarMenuSkeleton = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<\"div\"> & {\n showIcon?: boolean\n }\n>(({ className, showIcon = false, ...props }, ref) => {\n // Random width between 50 to 90%.\n const width = React.useMemo(() => {\n return `${Math.floor(Math.random() * 40) + 50}%`\n }, [])\n\n return (\n <div\n ref={ref}\n data-sidebar=\"menu-skeleton\"\n className={cn(\"flex h-8 items-center gap-2 rounded-md px-2\", className)}\n {...props}\n >\n {showIcon && (\n <Skeleton\n className=\"size-4 rounded-md\"\n data-sidebar=\"menu-skeleton-icon\"\n />\n )}\n <Skeleton\n className=\"h-4 max-w-(--skeleton-width) flex-1\"\n data-sidebar=\"menu-skeleton-text\"\n style={\n {\n \"--skeleton-width\": width,\n } as React.CSSProperties\n }\n />\n </div>\n )\n})\nSidebarMenuSkeleton.displayName = \"SidebarMenuSkeleton\"\n\nconst SidebarMenuSub = React.forwardRef<\n HTMLUListElement,\n React.ComponentProps<\"ul\">\n>(({ className, ...props }, ref) => (\n <ul\n ref={ref}\n data-sidebar=\"menu-sub\"\n className={cn(\n \"mx-3.5 flex min-w-0 translate-x-px flex-col gap-1 border-l border-sidebar-border px-2.5 py-0.5\",\n \"group-data-[collapsible=icon]:hidden\",\n className\n )}\n {...props}\n />\n))\nSidebarMenuSub.displayName = \"SidebarMenuSub\"\n\nconst SidebarMenuSubItem = React.forwardRef<\n HTMLLIElement,\n React.ComponentProps<\"li\">\n>(({ ...props }, ref) => <li ref={ref} {...props} />)\nSidebarMenuSubItem.displayName = \"SidebarMenuSubItem\"\n\nconst SidebarMenuSubButton = React.forwardRef<\n HTMLAnchorElement,\n React.ComponentProps<\"a\"> & {\n asChild?: boolean\n size?: \"sm\" | \"md\"\n isActive?: boolean\n }\n>(({ asChild = false, size = \"md\", isActive, className, ...props }, ref) => {\n const Comp = asChild ? Slot : \"a\"\n\n return (\n <Comp\n ref={ref}\n data-sidebar=\"menu-sub-button\"\n data-size={size}\n data-active={isActive}\n className={cn(\n \"flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-md px-2 text-sidebar-foreground outline-hidden ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0 [&>svg]:text-sidebar-accent-foreground\",\n \"data-[active=true]:bg-sidebar-accent data-[active=true]:text-sidebar-accent-foreground\",\n size === \"sm\" && \"text-xs\",\n size === \"md\" && \"text-sm\",\n \"group-data-[collapsible=icon]:hidden\",\n className\n )}\n {...props}\n />\n )\n})\nSidebarMenuSubButton.displayName = \"SidebarMenuSubButton\"\n\nexport {\n Sidebar,\n SidebarContent,\n SidebarFooter,\n SidebarGroup,\n SidebarGroupAction,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarHeader,\n SidebarInput,\n SidebarInset,\n SidebarMenu,\n SidebarMenuAction,\n SidebarMenuBadge,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSkeleton,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n SidebarProvider,\n SidebarRail,\n SidebarSeparator,\n SidebarTrigger,\n useSidebar,\n}\n","import { cn } from \"@/lib/utils\"\r\n\r\nfunction Skeleton({\r\n className,\r\n ...props\r\n}: React.HTMLAttributes<HTMLDivElement>) {\r\n return (\r\n <div\r\n className={cn(\"animate-pulse rounded-md bg-surface2\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nexport { Skeleton }\r\n","import * as React from \"react\"\r\n\r\nconst MOBILE_BREAKPOINT = 768\r\n\r\nexport function useIsMobile() {\r\n const [isMobile, setIsMobile] = React.useState<boolean | undefined>(undefined)\r\n\r\n React.useEffect(() => {\r\n const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`)\r\n const onChange = () => {\r\n setIsMobile(window.innerWidth < MOBILE_BREAKPOINT)\r\n }\r\n mql.addEventListener(\"change\", onChange)\r\n setIsMobile(window.innerWidth < MOBILE_BREAKPOINT)\r\n return () => mql.removeEventListener(\"change\", onChange)\r\n }, [])\r\n\r\n return !!isMobile\r\n}\r\n","import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'sun-moon',\n size: 24,\n node: [\n ['path', { d: 'M12 2v2', key: 'tus03m' }],\n [\n 'path',\n {\n d: 'M14.837 16.385a6 6 0 1 1-7.223-7.222c.624-.147.97.66.715 1.248a4 4 0 0 0 5.26 5.259c.589-.255 1.396.09 1.248.715',\n key: 'xlf6rm',\n },\n ],\n ['path', { d: 'M16 12a4 4 0 0 0-4-4', key: '6vsxu' }],\n ['path', { d: 'm19 5-1.256 1.256', key: '1yg6a6' }],\n ['path', { d: 'M20 12h2', key: '1q8mjw' }],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name SunMoon\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTIgMnYyIiAvPgogIDxwYXRoIGQ9Ik0xNC44MzcgMTYuMzg1YTYgNiAwIDEgMS03LjIyMy03LjIyMmMuNjI0LS4xNDcuOTcuNjYuNzE1IDEuMjQ4YTQgNCAwIDAgMCA1LjI2IDUuMjU5Yy41ODktLjI1NSAxLjM5Ni4wOSAxLjI0OC43MTUiIC8+CiAgPHBhdGggZD0iTTE2IDEyYTQgNCAwIDAgMC00LTQiIC8+CiAgPHBhdGggZD0ibTE5IDUtMS4yNTYgMS4yNTYiIC8+CiAgPHBhdGggZD0iTTIwIDEyaDIiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/sun-moon\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst SunMoon = createLucideIcon(__iconData);\n\nexport default SunMoon;\n","import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'panel-left',\n size: 24,\n node: [\n ['rect', { width: '18', height: '18', x: '3', y: '3', rx: '2', key: 'afitv7' }],\n ['path', { d: 'M9 3v18', key: 'fh3hqa' }],\n ],\n aliases: ['sidebar'],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name PanelLeft\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cmVjdCB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHg9IjMiIHk9IjMiIHJ4PSIyIiAvPgogIDxwYXRoIGQ9Ik05IDN2MTgiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/panel-left\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst PanelLeft = createLucideIcon(__iconData);\n\nexport default PanelLeft;\n","import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'keyboard',\n size: 24,\n node: [\n ['path', { d: 'M10 8h.01', key: '1r9ogq' }],\n ['path', { d: 'M12 12h.01', key: '1mp3jc' }],\n ['path', { d: 'M14 8h.01', key: '1primd' }],\n ['path', { d: 'M16 12h.01', key: '1l6xoz' }],\n ['path', { d: 'M18 8h.01', key: 'emo2bl' }],\n ['path', { d: 'M6 8h.01', key: 'x9i8wu' }],\n ['path', { d: 'M7 16h10', key: 'wp8him' }],\n ['path', { d: 'M8 12h.01', key: 'czm47f' }],\n ['rect', { width: '20', height: '16', x: '2', y: '4', rx: '2', key: '18n3k1' }],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name Keyboard\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTAgOGguMDEiIC8+CiAgPHBhdGggZD0iTTEyIDEyaC4wMSIgLz4KICA8cGF0aCBkPSJNMTQgOGguMDEiIC8+CiAgPHBhdGggZD0iTTE2IDEyaC4wMSIgLz4KICA8cGF0aCBkPSJNMTggOGguMDEiIC8+CiAgPHBhdGggZD0iTTYgOGguMDEiIC8+CiAgPHBhdGggZD0iTTcgMTZoMTAiIC8+CiAgPHBhdGggZD0iTTggMTJoLjAxIiAvPgogIDxyZWN0IHdpZHRoPSIyMCIgaGVpZ2h0PSIxNiIgeD0iMiIgeT0iNCIgcng9IjIiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/keyboard\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Keyboard = createLucideIcon(__iconData);\n\nexport default Keyboard;\n","import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'layout-dashboard',\n size: 24,\n node: [\n ['rect', { width: '7', height: '9', x: '3', y: '3', rx: '1', key: '10lvy0' }],\n ['rect', { width: '7', height: '5', x: '14', y: '3', rx: '1', key: '16une8' }],\n ['rect', { width: '7', height: '9', x: '14', y: '12', rx: '1', key: '1hutg5' }],\n ['rect', { width: '7', height: '5', x: '3', y: '16', rx: '1', key: 'ldoo1y' }],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name LayoutDashboard\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSI5IiB4PSIzIiB5PSIzIiByeD0iMSIgLz4KICA8cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSI1IiB4PSIxNCIgeT0iMyIgcng9IjEiIC8+CiAgPHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iOSIgeD0iMTQiIHk9IjEyIiByeD0iMSIgLz4KICA8cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSI1IiB4PSIzIiB5PSIxNiIgcng9IjEiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/layout-dashboard\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst LayoutDashboard = createLucideIcon(__iconData);\n\nexport default LayoutDashboard;\n","import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'message-square-plus',\n size: 24,\n node: [\n [\n 'path',\n {\n d: 'M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z',\n key: '18887p',\n },\n ],\n ['path', { d: 'M12 8v6', key: '1ib9pf' }],\n ['path', { d: 'M9 11h6', key: '1fldmi' }],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name MessageSquarePlus\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMjIgMTdhMiAyIDAgMCAxLTIgMkg2LjgyOGEyIDIgMCAwIDAtMS40MTQuNTg2bC0yLjIwMiAyLjIwMkEuNzEuNzEgMCAwIDEgMiAyMS4yODZWNWEyIDIgMCAwIDEgMi0yaDE2YTIgMiAwIDAgMSAyIDJ6IiAvPgogIDxwYXRoIGQ9Ik0xMiA4djYiIC8+CiAgPHBhdGggZD0iTTkgMTFoNiIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/message-square-plus\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst MessageSquarePlus = createLucideIcon(__iconData);\n\nexport default MessageSquarePlus;\n","import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'hexagon',\n size: 24,\n node: [\n [\n 'path',\n {\n d: 'M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z',\n key: 'yt0hxn',\n },\n ],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name Hexagon\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMjEgMTZWOGEyIDIgMCAwIDAtMS0xLjczbC03LTRhMiAyIDAgMCAwLTIgMGwtNyA0QTIgMiAwIDAgMCAzIDh2OGEyIDIgMCAwIDAgMSAxLjczbDcgNGEyIDIgMCAwIDAgMiAwbDctNEEyIDIgMCAwIDAgMjEgMTZ6IiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/hexagon\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Hexagon = createLucideIcon(__iconData);\n\nexport default Hexagon;\n","import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'folder-tree',\n size: 24,\n node: [\n [\n 'path',\n {\n d: 'M20 10a1 1 0 0 0 1-1V6a1 1 0 0 0-1-1h-2.5a1 1 0 0 1-.8-.4l-.9-1.2A1 1 0 0 0 15 3h-2a1 1 0 0 0-1 1v5a1 1 0 0 0 1 1Z',\n key: 'hod4my',\n },\n ],\n [\n 'path',\n {\n d: 'M20 21a1 1 0 0 0 1-1v-3a1 1 0 0 0-1-1h-2.9a1 1 0 0 1-.88-.55l-.42-.85a1 1 0 0 0-.92-.6H13a1 1 0 0 0-1 1v5a1 1 0 0 0 1 1Z',\n key: 'w4yl2u',\n },\n ],\n ['path', { d: 'M3 5a2 2 0 0 0 2 2h3', key: 'f2jnh7' }],\n ['path', { d: 'M3 3v13a2 2 0 0 0 2 2h3', key: 'k8epm1' }],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name FolderTree\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMjAgMTBhMSAxIDAgMCAwIDEtMVY2YTEgMSAwIDAgMC0xLTFoLTIuNWExIDEgMCAwIDEtLjgtLjRsLS45LTEuMkExIDEgMCAwIDAgMTUgM2gtMmExIDEgMCAwIDAtMSAxdjVhMSAxIDAgMCAwIDEgMVoiIC8+CiAgPHBhdGggZD0iTTIwIDIxYTEgMSAwIDAgMCAxLTF2LTNhMSAxIDAgMCAwLTEtMWgtMi45YTEgMSAwIDAgMS0uODgtLjU1bC0uNDItLjg1YTEgMSAwIDAgMC0uOTItLjZIMTNhMSAxIDAgMCAwLTEgMXY1YTEgMSAwIDAgMCAxIDFaIiAvPgogIDxwYXRoIGQ9Ik0zIDVhMiAyIDAgMCAwIDIgMmgzIiAvPgogIDxwYXRoIGQ9Ik0zIDN2MTNhMiAyIDAgMCAwIDIgMmgzIiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/folder-tree\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst FolderTree = createLucideIcon(__iconData);\n\nexport default FolderTree;\n","import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'messages-square',\n size: 24,\n node: [\n [\n 'path',\n {\n d: 'M16 10a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 14.286V4a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z',\n key: '1n2ejm',\n },\n ],\n [\n 'path',\n {\n d: 'M20 9a2 2 0 0 1 2 2v10.286a.71.71 0 0 1-1.212.502l-2.202-2.202A2 2 0 0 0 17.172 19H10a2 2 0 0 1-2-2v-1',\n key: '1qfcsi',\n },\n ],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name MessagesSquare\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTYgMTBhMiAyIDAgMCAxLTIgMkg2LjgyOGEyIDIgMCAwIDAtMS40MTQuNTg2bC0yLjIwMiAyLjIwMkEuNzEuNzEgMCAwIDEgMiAxNC4yODZWNGEyIDIgMCAwIDEgMi0yaDEwYTIgMiAwIDAgMSAyIDJ6IiAvPgogIDxwYXRoIGQ9Ik0yMCA5YTIgMiAwIDAgMSAyIDJ2MTAuMjg2YS43MS43MSAwIDAgMS0xLjIxMi41MDJsLTIuMjAyLTIuMjAyQTIgMiAwIDAgMCAxNy4xNzIgMTlIMTBhMiAyIDAgMCAxLTItMnYtMSIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/messages-square\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst MessagesSquare = createLucideIcon(__iconData);\n\nexport default MessagesSquare;\n"],"names":["SettingsApplier","setAutoRefreshSeconds","rootParam","refresh","setEditorSettings","autoRefreshSeconds","intervalRef","cancelled","settings","fetch","then","r","ok","json","theme","fontSize","accentColor","editor","project","autoRefresh","clearInterval","catch","setInterval","current"],"mappings":"0DOEA,EAAA,EAAA,CAAA,CAAA,QACA,EAAA,EAAA,CAAA,CAAA,QACA,EAAA,EAAA,CAAA,CAAA,QLAA,EAAA,EAAA,CAAA,CAAA,QACA,EAAA,EAAA,CAAA,CAAA,QAEO,SAASA,IACd,GAAM,WAAEE,CAAS,SAAEC,CAAO,mBAAEC,CAAiB,uBAAEH,CAAqB,oBAAEI,CAAkB,CAAE,CAAG,CAAA,EAAA,EAAA,MAAA,AAAM,IAC7FC,EAAc,CAAA,EAAA,EAAA,MAAA,AAAM,EAAwC,MAqClE,MAlCA,CAAA,EAAA,EAAA,SAAA,AAAS,EAAC,KACR,GAAI,CAACJ,EAAW,OAChB,IAAIK,GAAY,EAehB,OAbAE,MAAM,CAAC,aAAa,EAAEP,EAAU,cAAc,CAAC,EAC5CQ,IAAI,CAACC,GAAKA,EAAEC,EAAE,CAAGD,EAAEE,IAAI,GAAK,EAAA,gBAAgB,EAC5CH,IAAI,CAAC,AAACF,IACDD,IACJ,CAAA,EAAA,EAAA,EADe,QACf,AAAU,EAACC,EAASM,KAAK,EACzB,CAAA,EAAA,EAAA,WAAW,AAAX,EAAYN,EAASQ,WAAW,EAChC,CAAA,EAAA,EAAA,aAAA,AAAa,EAACR,EAASO,QAAQ,EAC/B,CAAA,EAAA,EAAA,UAAA,AAAU,EAACP,GACXJ,EAAkBI,EAASS,MAAM,EACjChB,EAAsBO,EAASU,OAAO,EAAEC,aAAe,GACzD,GACCE,KAAK,CAAC,KAAO,GAET,KAAQd,GAAY,CAAK,CAClC,EAAG,CAACL,EAAU,EAGd,CAAA,AAHgB,EAGhB,EAAA,SAAA,AAAS,EAAC,KACJI,EAAYiB,OAAO,EAAEH,cAAcd,EAAYiB,GAJa,IAIN,EACtDlB,EAAqB,GAAG,CAC1BC,EAAYiB,OAAO,CAAGD,YAAYnB,EAA8B,IAArBE,EAAqB,EAE3D,KACDC,EAAYiB,OAAO,EAAE,CACvBH,cAAcd,EAAYiB,OAAO,EACjCjB,EAAYiB,OAAO,CAAG,KAE1B,GACC,CAAClB,EAAoBF,EAAQ,EAEzB,IACT,CQ/CO,SAAS,IACd,MACE,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,UAAU,yDACb,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,wBACb,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,UAAU,4CACZ,CAAC,EAAG,EAAG,EAAE,CAAC,GAAG,CAAC,AAAC,GACd,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAEC,UAAU,mDACV,MAAO,CAAE,eAAgB,CAAA,EAAO,IAAJ,EAAS,CAAC,CAAC,AAAC,GAFnC,MAMX,CAAA,EAAA,EAAA,GAAA,EAAC,IAAA,CAAE,UAAU,wCAA+B,2BAIpD,CPbA,IAAA,EAAA,EAAA,CAAA,CAAA,QACA,EAAA,EAAA,CAAA,CAAA,QAAA,EAAA,EAAA,CAAA,CAAA,QAAA,EAAA,EAAA,CAAA,CAAA,OAAA,EAAA,EAAA,CAAA,CAAA,kWkBmCM,CAAA,CAAA,CAAA,EAAiB,EAAA,OAAA,EAAiB,CAAA,CAAA,CAAA,AlBnCxC,CkBmCwC,GlBnCxC,EAAA,EAAA,CAAA,CAAA,QAAA,EAAA,EAAA,CAAA,CAAA,OAGAF,EAAAA,EAAAA,CAAAA,CAAAA,QFLA,EAAA,EAAA,CAAA,CAAA,QAOA,EAAA,EAAA,CAAA,CAAA,QACA,EAAA,EAAA,CAAA,CAAA,QAkBO,SAAS,EAAgB,CAAE,UAAQ,eAAE,CAAa,aAAE,CAAW,CAAE,UAAQ,CAAwB,EACtGO,GAAM,CAAC,EAAM,EAAQ,CAAG,CAAA,EAAA,EAAA,QAAA,AAAQ,GAAC,GAC3B,CAAC,EAAQ,EAAU,CAAG,CAAA,EAAA,EAAA,QAAQ,AAAR,EAAS,IAC/B,EAAa,EAAS,MAAM,EALhB,EAKoB,AAChC,EAAI,EAAO,IAAI,GAAG,WAAW,GAC7B,EAAQ,EAAI,EAAS,MAAM,CAAC,AAAC,GAAM,CAAA,EAAG,EAAE,IAAI,CAAC,CAAC,EAAE,EAAE,IAAI,CAAA,CAAE,CAAC,WAAW,GAAG,QAAQ,CAAC,IAAM,EAE5F,MACE,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,YAAY,CAAA,CAAC,KAAM,EAAM,aAAe,AAAD,IAAS,EAAQ,GAAQ,AAAC,GAAG,EAAU,GAAI,YACjF,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,mBAAmB,CAAA,CAAC,OAAOY,CAAAA,CAAAA,WAC1B,CAAA,EAAA,EAAA,IAAA,EAAC,SAAA,CAAO,UAAU,mQAChB,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,UAAU,kCAA0B,GAAe,mBACzD,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,cAAc,CAAA,CAAC,UAAU,sCAG9B,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,mBAAmB,CAAA,CAClB,UAAU,0CACV,MAAM,kBAEL,GACC,CAAA,EAAA,EAAA,GAAA,EAAC,QAAA,CAEC,SAAS,CAAA,CAAA,EACT,MAAO,EACP,SAAU,AAAC,GAAM,EAAU,EAAE,MAAM,CAAC,KAAK,EACzC,UAAW,AAAC,IAEI,aAAa,CAAvB,EAAE,GAAG,EACP,EAAE,cAAc,GAChB,EAAE,aAAa,CAAC,aAAa,EAAE,cAA2B,oBAAoB,SAC3D,UAAV,EAAE,GAAG,EAAgB,CAAK,CAAC,EAAE,EAAE,AACxC,EAAS,CAAK,CAAC,EAAE,CAAC,IAAI,EACtB,GAAQ,GACR,EAAU,KACgB,GAAG,CAApB,EAAE,GAAG,CAAC,MAAM,EACrB,EAAE,eAAe,EAErB,EACA,YAAY,mBACZ,aAAW,kBACX,UAAU,oHAGb,AAAiB,MAAX,MAAM,CACX,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,UAAU,wCAAgC,EAAS,MAAM,CAAG,CAAC,oBAAoB,EAAE,EAAO,IAAI,GAAG,CAAC,CAAC,CAAG,sBAE3G,EAAM,GAAG,CAAC,AAAC,QA7DF,EA8DP,EA9DmB,IA8Db,EAAS,EAAE,IAAI,GAAK,EAC1B,MACE,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,gBAAgB,CAAA,CAEf,QAAS,IAAM,EAAS,EAAE,IAAI,EAC9B,MAAO,EAAE,IAAI,CACb,eAAc,QAAU,EACxB,UAAW,CAAA,EAAA,EAAA,EAAA,AAAE,EAAC,qDAAsD,GAAU,yBAE9E,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,2BACb,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,UAAU,gCAAwB,EAAE,IAAI,GAC7C,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,UAAU,qDAvExB,CADD,AAwEsE,EAxE9D,GAwEwE,EAAE,IAAI,EAxEzE,KAAK,CAAC,KAAK,MAAM,CAAC,UACxB,MAAM,CAAG,EAAI,CAAC,EAAE,EAAE,EAAM,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,KAAA,CAAM,CAAG,OAyE/C,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,KAAK,CAAA,CAAC,aAAW,CAAA,CAAA,EAAC,UAAW,CAAA,EAAA,EAAA,EAAA,AAAE,EAAC,oBAAqB,CAAC,GAAU,iBAV5D,EAAE,IAAI,CAajB,QAKV,CUhGA,IAAA,EAAA,EAAA,CAAA,CAAA,QACA,EAAA,EAAA,CAAA,CAAA,qFIKkD,EAAG,CEAF,AFAE,CEAF,AFAE,EAAK,CEAF,AFAE,EAAI,CEAF,AFAE,CEAF,AFAE,EAAK,CAAA,AEAF,CAAA,AFAE,EAAK,CAAA,AEAF,CAAA,AFAE,CEAF,AFAE,CEAF,AFAE,CEAF,AFAE,CAAA,IAAU,yFJAlF,IAAA,EAAA,EAAA,CAAA,CAAA,QACA,EAAA,EAAA,CAAA,CAAA,QACA,EAAA,EAAA,CAAA,CAAA,QACA,EAAA,EAAA,CAAA,CAAA,QACA,EAAA,EAAA,CAAA,CAAA,QCTA,SAAS,EAAS,WAChB,CAAS,CACT,GAAG,EACkC,EACrC,MACE,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CACC,UAAW,CAAA,EAAA,EAAA,EAAA,AAAE,EAAC,uCAAwC,GACrD,GAAG,CAAK,EAGf,CDOA,IAAA,EAAA,EAAA,CAAA,CAAA,QAwBA,IAAM,EAAiB,EAAA,aAAmB,CAA6B,MAEvE,SAAS,IACP,IAAM,EAAU,EAAA,UAAgB,CAAC,GACjC,GAAI,CAAC,EACH,MAAM,AAAI,CADE,KACI,qDAGlB,OAAO,CACT,CAEA,IAAM,EAAkB,EAAA,UAAgB,CAQtC,CACE,CACE,cAAc,EAAI,CAClB,KAAM,CAAQ,CACd,aAAc,CAAW,CACzB,WAAS,OACT,CAAK,UACL,CAAQ,CACR,GAAG,EACJ,CACD,KAEA,IAAM,EEtEH,AFsEc,SEtEL,EACd,GAAM,CAAC,EAAU,EAAY,CAAG,EAAA,QAAc,MAAsB,GAYpE,OAVA,EAAA,SAAe,CAAC,KACd,IAAM,EAAM,OAAO,UAAU,CAAC,CAAC,YAAY,EAAE,OACvC,EAAW,KACf,EAAY,IAFmD,EAAE,CAE9C,EAFiD,CAAC,OAExC,GAAG,EAClC,EAGA,OAFA,EAAI,gBAAgBd,CAAC,SAAU,GAC/B,EAAY,OAAO,UAAU,CAXP,EAWU,GACzB,IAAM,EAAI,mBAAmB,CAAC,SAAU,EACjD,EAAG,EAAE,EAEE,CAAC,CAAC,CACX,IFyDU,CAAC,EAAY,EAAc,CAAG,EAAA,QAAc,EAAC,GAI7C,CAAC,EAAO,EAAS,CAAG,EAAA,QAAc,CAAC,GACnC,EAAO,GAAY,EACnB,EAAU,EAAA,WAAiB,CAC/B,AAAC,IACC,IAAM,EAA6B,YAAjB,OAAO,EAAuB,EAAM,GAAQ,EAC1D,EACF,EAAY,GAEZ,EAAS,GAIX,CAPiB,QAOR,MAAM,CAAG,GAAG,cAAuB,MAAH,CAAC,GAAY,iBAA4C,AACpG,CAD0E,CAE1E,CAF4E,AAE3E,EAAa,EAAK,EAIf,EAAgB,EAAA,WAAiB,CAAC,IAC/B,EACH,EAAc,AAAC,GAAS,CAAC,GACzB,EAAQ,AAAC,GAAS,CAAC,GACtB,CAAC,EAAU,EAAS,EAAc,EAGrC,EAAA,SAAe,CAAC,KACd,IAAM,EAAgB,AAAC,IA1EK,MA6ExB,EAAM,GAAG,GACR,EAAM,AADO,OACA,EAAI,EAAM,OAAA,AAAO,GAC/B,CAAC,EAAM,KADP,WACuB,EACvB,CAAC,CAAA,EAAA,EAAA,WAAA,AAAW,EAAC,EAAM,MAAM,GACzB,CACA,EAAM,cAAc,GACpB,IAEJ,EAGA,OADA,OAAO,gBAAgB,CAAC,UAAW,GAC5B,IAAM,OAAO,mBAAmB,CAAC,UAAW,EACrD,EAAG,CAAC,EAAc,EAIlB,IAAM,EAAQ,EAAO,WAAa,YAE5B,EAAe,EAAA,OAAa,CAChC,IAAM,CAAC,OACL,EACA,eACA,WACA,aACA,gBACA,gBACA,EACF,CAAC,CACD,CAAC,EAAO,EAAM,EAAS,EAAU,EAAY,EAAe,EAAc,EAG5E,MACE,CAAA,EAAA,EAAA,GAAA,EAAC,EAAe,QAAQ,CAAA,CAAC,MAAO,WAC9B,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,eAAe,CAAA,CAAC,cAAe,WAC9B,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CACC,MACE,CACE,kBArHM,CAqHa,OACnB,uBApHW,CAoHa,MACxB,GAAG,CAAK,AACV,EAEF,UAAW,CAAA,EAAA,EAAA,EAAA,AAAE,EACX,kFACA,GAEF,IAAK,EACJ,GAAG,CAAK,UAER,OAKX,EAEF,GAAgB,WAAW,CAAG,kBAE9B,IAAM,EAAU,EAAA,UAAgB,CAQ9B,CACE,MACE,EAAO,MAAM,SACb,EAAU,SAAS,aACnB,EAAc,WAAW,CACzB,WAAS,UACT,CAAQ,CACR,GAAG,EACJ,CACD,KAEA,GAAM,UAAE,CAAQ,OAAE,CAAK,YAAE,CAAU,CAAE,eAAa,CAAE,CAAG,UAEnC,AAApB,QAA4B,CAAxB,EAEA,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CACC,UAAW,CAAA,EAAA,EAAA,EAAA,AAAE,EACX,8EACA,GAEF,IAAK,EACJ,GAAG,CAAK,UAER,IAKH,EAEA,CAAA,EAAA,EAAA,GAAA,AAFU,EAET,EAAA,KAAK,CAAA,CAAC,KAAM,EAAY,aAAc,EAAgB,GAAG,CAAK,UAC7D,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,YAAY,CAAA,CACX,eAAa,UACb,cAAY,OACZ,UAAU,+EACV,MACE,CACE,kBAtLa,CAsLM,MACrB,EAEF,KAAM,YAEN,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,WAAW,CAAA,CAAC,UAAU,oBACrB,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,UAAU,CAAA,UAAC,YACZ,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,gBAAgB,CAAA,UAAC,oCAEpB,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,UAAU,uCAA+B,SAOpD,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CACC,IAAK,EACL,UAAU,qDACV,aAAY,EACZ,mBAA4B,cAAV,EAAwB,EAAc,GACxD,eAAc,EACd,YAAW,YAGX,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CACC,UAAW,CAAA,EAAA,EAAA,EAAA,AAAE,EACX,0FACA,yCACA,qCACY,aAAZ,GAAsC,UAAZ,EACtB,mFACA,4DAGR,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CACC,UAAW,CAAA,EAAA,EAAA,EAAA,AAAE,EACX,uHACS,SAAT,EACI,oEACA,sEAEQ,CADZ,YACA,GAA0B,AAAY,YAClC,2BAFkD,gEAGlD,0HACJ,GAED,GAAG,CAAK,UAET,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CACC,eAAa,UACb,UAAU,4NAET,QAKX,GAEF,EAAQ,WAAW,CAAG,UAEtB,IAAM,EAAiB,EAAA,UAAgB,CAGrC,CAAC,WAAE,CAAS,SAAE,CAAO,CAAE,GAAG,EAAO,CAAE,KACnC,GAAM,eAAE,CAAa,CAAE,CAAG,IAE1B,MACE,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,MAAM,CAAA,CACL,IAAK,EACL,eAAa,UACb,QAAQ,QACR,KAAK,OACL,UAAW,CAAA,EAAA,EAAA,EAAA,AAAE,EAAC,UAAW,GACzB,QAAS,AAAC,IACR,IAAU,GACV,GACF,EACC,GAAG,CAAK,WAET,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CAAA,GACD,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,UAAU,mBAAU,qBAGhC,GACA,EAAe,WAAW,CAAG,iBAET,AA2BpB,EA3BoB,UAAgB,CAGlC,CAAC,CAAE,WAAS,CAAE,GAAG,EAAO,CAAE,KAC1B,GAAM,CAAE,eAAa,CAAE,CAAG,IAE1B,MACE,CAAA,EAAA,EAAA,GAAA,EAAC,SAAA,CACC,IAAK,EACL,eAAa,OACb,aAAW,iBACX,SAAU,CAAC,EACX,QAAS,EACT,MAAM,iBACN,UAAW,CAAA,EAAA,EAAA,EAAA,AAAE,EACX,2QACA,2EACA,yHACA,0JACA,4DACA,4DACA,GAED,GAAG,CAAK,EAGf,GACY,WAAW,CAAG,cAE1B,IAAM,EAAe,EAAA,UAAgB,CAGnC,CAAC,WAAE,CAAS,CAAE,GAAG,EAAO,CAAE,IAGxB,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CACC,IAAK,EACL,UAAW,CAAA,EAAA,EAAA,EAAA,AAAE,EACX,6CACA,kNACA,GAED,GAAG,CAAK,IAIf,EAAa,WAAW,CAAG,eAkB3B,AAhBqB,EAAA,UAAgB,CAGnC,CAAC,WAAE,CAAS,CAAE,GAAG,EAAO,CAAE,IAExB,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,KAAK,CAAA,CACJ,IAAK,EACL,eAAa,QACb,UAAW,CAAA,EAAA,EAAA,EAAA,AAAE,EACX,oFACA,GAED,GAAG,CAAK,IAIF,WAAW,CAAG,eAE3B,IAAM,EAAgB,EAAA,UAAgB,CAGpC,CAAC,WAAE,CAAS,CAAE,GAAG,EAAO,CAAE,IAExB,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CACC,IAAK,EACL,eAAa,SACb,UAAW,CAAA,EAAA,EAAA,EAAA,AAAE,EAAC,0BAA2B,GACxC,GAAG,CAAK,GAIf,GAAc,WAAW,CAAG,gBAE5B,IAAM,EAAgB,EAAA,UAAgB,CAGpC,CAAC,WAAE,CAAS,CAAE,GAAG,EAAO,CAAE,IAExB,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CACC,IAAK,EACL,eAAa,SACb,UAAW,CAAA,EAAA,EAAA,EAAA,AAAE,EAAC,0BAA2B,GACxC,GAAG,CAAK,GAIf,GAAc,WAAW,CAAG,gBAEH,AAazB,EAbyB,UAAgB,CAGvC,CAAC,WAAE,CAAS,CAAE,GAAG,EAAO,CAAE,IAExB,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,SAAS,CAAA,CACR,IAAK,EACL,eAAa,YACb,UAAW,CAAA,EAAA,EAAA,EAAA,AAAE,EAAC,gCAAiC,GAC9C,GAAG,CAAK,IAIE,WAAW,CAAG,mBAE/B,IAAM,EAAiB,EAAA,UAAgB,CAGrC,CAAC,WAAE,CAAS,CAAE,GAAG,EAAO,CAAE,IAExB,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CACC,IAAK,EACL,eAAa,UACb,UAAW,CAAA,EAAA,EAAA,EAAA,AAAE,EACX,iGACA,GAED,GAAG,CAAK,IAIf,EAAe,WAAW,CAAG,iBAE7B,IAAM,EAAe,EAAA,UAAgB,CAGnC,CAAC,WAAE,CAAS,CAAE,GAAG,EAAO,CAAE,IAExB,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CACC,IAAK,EACL,eAAa,QACb,UAAW,CAAA,EAAA,EAAA,EAAA,AAAE,EAAC,4CAA6C,GAC1D,GAAG,CAAK,IAIf,EAAa,WAAW,CAAG,eAE3B,IAAM,EAAoB,EAAA,UAAgB,CAGxC,CAAC,WAAE,CAAS,CAAE,WAAU,CAAK,CAAE,GAAG,EAAO,CAAE,KAC3C,IAAM,EAAO,EAAU,EAAA,IAAI,CAAG,MAE9B,MACE,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CACC,IAAK,EACL,eAAa,cACb,UAAW,CAAA,EAAA,EAAA,EAAA,AAAE,EACX,2OACA,8EACA,GAED,GAAG,CAAK,EAGf,GACA,EAAkB,WAAW,CAAG,oBAEhC,IAAM,EAAqB,EAAA,UAAgB,CAGzC,CAAC,WAAE,CAAS,SAAE,GAAU,CAAK,CAAE,GAAG,EAAO,CAAE,KAC3C,IAAM,EAAO,EAAU,EAAA,IAAI,CAAG,SAE9B,MACE,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CACC,IAAK,EACL,eAAa,eACb,UAAW,CAAA,EAAA,EAAA,EAAA,AAAE,EACX,6RAEA,CADA,+CAEA,GAFkD,oCAGlD,GAED,GAAG,CAAK,EAGf,GACA,EAAmB,WAAW,CAAG,qBAEjC,IAAM,EAAsB,EAAA,UAAgB,CAG1C,CAAC,WAAE,CAAS,CAAE,GAAG,EAAO,CAAE,IAC1B,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CACC,IAAK,EACL,eAAa,gBACb,UAAW,CAAA,EAAA,EAAA,EAAA,AAAE,EAAC,iBAAkB,GAC/B,GAAG,CAAK,IAGb,EAAoB,WAAW,CAAG,sBAElC,IAAM,EAAc,EAAA,UAAgB,CAGlC,CAAC,WAAE,CAAS,CAAE,GAAG,EAAO,CAAE,IAC1B,CAAA,EAAA,EAAA,GAAA,EAAC,KAAA,CACC,IAAK,EACL,eAAa,OACb,UAAW,CAAA,EAAA,EAAA,EAAA,AAAE,EAAC,qCAAsC,GACnD,GAAG,CAAK,GAGb,GAAY,WAAW,CAAG,cAE1B,IAAM,EAAkB,EAAA,UAAgB,CAGtC,CAAC,WAAE,CAAS,CAAE,GAAG,EAAO,CAAE,IAC1B,CAAA,EAAA,EAAA,GAAA,EAAC,KAAA,CACC,IAAK,EACL,eAAa,YACb,UAAW,CAAA,EAAA,EAAA,EAAA,AAAE,EAAC,2BAA4B,GACzC,GAAG,CAAK,IAGb,EAAgB,WAAW,CAAG,kBAE9B,IAAM,EAA4B,CAAA,EAAA,EAAA,GAAG,AAAH,EAChC,ozBACA,CACE,SAAU,CACR,QAAS,CACP,QAAS,+DACT,QACE,gKACJ,EACA,KAAM,CACJ,QAAS,cACT,GAAI,cACJ,GAAI,iDACN,CACF,EACA,gBAAiB,CACf,QAAS,UACT,KAAM,SACR,CACF,GAGI,EAAoB,EAAA,UAAgB,CAQxC,CACE,SACE,GAAU,CAAK,UACf,GAAW,CAAK,SAChB,EAAU,SAAS,CACnB,OAAO,SAAS,SAChB,CAAO,WACP,CAAS,CACT,GAAG,EACJ,CACD,KAEA,IAAM,EAAO,EAAU,EAAA,IAAI,CAAG,SACxB,UAAE,CAAQ,CAAE,OAAK,CAAE,CAAG,IAEtB,EACJ,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CACC,IAAK,EACL,eAAa,cACb,YAAW,EACX,cAAa,EACb,UAAW,CAAA,EAAA,EAAA,EAAA,AAAE,EAAC,EAA0B,CAAE,eAAS,CAAK,GAAI,GAC3D,GAAG,CAAK,UAIR,AAAL,GAIuB,CAJnB,KAAU,IAIV,AAA6B,OAAtB,IACT,EAAU,CACR,SAAU,EACZ,EAIA,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,OAAO,CAAA,WACN,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,cAAc,CAAA,CAAC,OAAO,CAAA,CAAA,WAAE,IACzB,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,cAAc,CAAA,CACb,KAAK,QACL,MAAM,SACN,OAAkB,cAAV,GAAyB,EAChC,GAAG,CAAO,OAhBR,CAoBX,EAEF,GAAkB,WAAW,CAAG,oBAEhC,IAAM,EAAoB,EAAA,UAAgB,CAMxC,CAAC,WAAE,CAAS,SAAE,GAAU,CAAK,CAAE,eAAc,CAAK,CAAE,GAAG,EAAO,CAAE,KAChE,IAAM,EAAO,EAAU,EAAA,IAAI,CAAG,SAE9B,MACE,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CACC,IAAK,EACL,eAAa,cACb,UAAW,CAAA,EAAA,EAAA,EAAA,AAAE,EACX,mVAEA,CADA,+CAEA,GAFkD,qCAGlD,+CACA,0CACA,uCACA,GACE,2LACF,GAED,GAAG,CAAK,EAGf,GACA,EAAkB,WAAW,CAAG,oBAEP,AAmBzB,EAnByB,UAAgB,CAGvC,CAAC,WAAE,CAAS,CAAE,GAAG,EAAO,CAAE,IAC1B,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CACC,IAAK,EACL,eAAa,aACb,UAAW,CAAA,EAAA,EAAA,EAAA,AAAE,EACX,yKACA,2HACA,wCACA,+CACA,0CACA,uCACA,GAED,GAAG,CAAK,IAGI,WAAW,CAAG,mBAEH,AAoC5B,EApC4B,UAAgB,CAK1C,CAAC,WAAE,CAAS,UAAE,GAAW,CAAK,CAAE,GAAG,EAAO,CAAE,KAE5C,IAAM,EAAQ,EAAA,OAAa,CAAC,IACnB,CAAA,EAAG,KAAK,KAAK,CAAC,AAAgB,QAAX,MAAM,IAAW,GAAG,CAAC,CAAC,CAC/C,EAAE,EAEL,MACE,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CACC,IAAK,EACL,eAAa,gBACb,UAAW,CAAA,EAAA,EAAA,EAAA,AAAE,EAAC,8CAA+C,GAC5D,GAAG,CAAK,WAER,GACC,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CACC,UAAU,oBACV,eAAa,uBAGjB,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CACC,UAAU,sCACV,eAAa,qBACb,MACE,CACE,mBAAoB,CACtB,MAKV,GACoB,WAAW,CAAG,sBAEX,AAevB,EAfuB,UAAgB,CAGrC,CAAC,WAAE,CAAS,CAAE,GAAG,EAAO,CAAE,IAC1B,CAAA,EAAA,EAAA,GAAA,EAAC,KAAA,CACC,IAAK,EACL,eAAa,WACb,UAAW,CAAA,EAAA,EAAA,EAAA,AAAE,EACX,iGACA,uCACA,GAED,GAAG,CAAK,IAGE,WAAW,CAAG,iBAEF,AAI3B,EAJ2B,UAAgB,CAGzC,CAAC,CAAE,GAAG,EAAO,CAAE,IAAQ,CAAA,EAAA,EAAA,GAAA,EAAC,KAAA,CAAG,IAAK,EAAM,GAAG,CAAK,IAC7B,WAAW,CAAG,qBAEJ,AA4B7B,EA5B6B,UAAgB,CAO3C,CAAC,SAAE,GAAU,CAAK,MAAE,EAAO,IAAI,UAAE,CAAQ,WAAE,CAAS,CAAE,GAAG,EAAO,CAAE,KAClE,IAAM,EAAO,EAAU,EAAA,IAAI,CAAG,IAE9B,MACE,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CACC,IAAK,EACL,eAAa,kBACb,YAAW,EACX,cAAa,EACb,UAAW,CAAA,EAAA,EAAA,EAAA,AAAE,EACX,gfACA,yFACS,OAAT,GAAiB,UACR,OAAT,GAAiB,UACjB,uCACA,GAED,GAAG,CAAK,EAGf,GACqB,WAAW,CAAG,uBRhuBnC,IAAA,EAAA,EAAA,CAAA,CAAA,QAEA,GAAA,EAAA,CAAA,CAAA,QACA,GAAA,EAAA,CAAA,CAAA,QAEA,IAAM,GAAsC,CAC1C,SAAU,QACV,WAAY,UACZE,QAASO,OACT,YAAa,WACb,UAAW,SACX,gBAAiB,eACjB,YAAa,WACb,YAAa,WACb,QAAS,OACX,EAGM,GAAY,uIAaX,SAAS,GAAU,SAAE,CAAO,UAAE,CAAQ,eAAE,CAAa,eAAE,CAAa,iBAAE,CAAe,cAAE,CAAY,cAAE,CAAY,CAAkB,EACxI,IAAM,EAAW,CAAA,EAAA,EAAA,WAAW,AAAX,IACX,EAAQ,OAAO,OAAO,CAAC,IAAa,IAAI,CAAC,CAAC,CAAC,EAAE,GAAK,EAAS,UAAU,CAAC,KAAK,CAAC,EAAE,CAC9E,UAAE,CAAQ,CAAE,CAAG,CAAA,EAAA,EAAA,MAAA,AAAM,IAErB,CAAE,KAAG,CAAE,CAAG,CAAA,EAAA,EAAA,QAAA,AAAQ,IAExB,MACE,CAAA,EAAA,EAAA,IAAA,EAAC,SAAA,CAAO,UAAU,uIAChB,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CAAe,UAAU,oCAC1B,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,UAAU,0BAA0B,aAAW,CAAA,CAAA,IAGrD,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,aAAW,WAAW,UAAU,yGACnC,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CAAgB,SAAU,EAAU,cAAe,EAAe,YAAa,GAAS,MAAQ,GAAI,SAAU,IAC9G,GACC,CAAA,EAAA,EAAA,IAAA,EAAA,EAAA,QAAA,CAAA,WACE,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,UAAU,aAAa,aAAW,CAAA,CAAA,WAAC,MACzC,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,UAAU,yCAAiC,UAKvD,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,UAAU,WAEf,CAAA,EAAA,EAAA,GAAA,EAAC,GAAA,CAAY,cAAe,EAAe,SAAU,EAAU,IAAK,IAEpE,CAAA,EAAA,EAAA,IAAA,EAAC,SAAA,CACC,KAAK,SACL,QAAS,EACT,UAAW,CAAA,EAAA,EAAA,EAAA,AAAE,EAAC,uKAAwK,cAEtL,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,MAAM,CAAA,CAAC,UAAU,aAClB,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,UAAU,6CAAoC,YACpD,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,UAAU,uFAA8E,OAC7F,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,UAAU,6BAAoB,cAGtC,CAAA,EAAA,EAAA,GAAA,EAAC,GAAA,CAAY,SAAU,EAAU,IAAK,IAEtC,CAAA,EAAA,EAAA,IAAA,EAAC,SAAA,CACC,KAAK,SACL,QAAS,EACT,MAAM,YACN,aAAW,YACX,UAAW,CAAA,EAAA,EAAA,EAAA,AAAE,EAAC,gJAAiJ,cAE/J,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CAAe,UAAU,WAAW,aAAW,CAAA,CAAA,IAChD,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,UAAU,4BAAmB,eAI3C,CAEA,IAAM,GAAS,CAAC,EAAW,IAAiB,CAAA,EAAG,EAAE,CAAC,EAAE,EAAA,EAAO,AAAM,MAAI,GAAK,IAAA,CAAK,CAQ/E,SAAS,GAAY,eAAE,CAAa,UAAE,CAAQ,KAAE,CAAG,CAAsE,EACvH,GAAM,YAAE,CAAU,CAAE,CAAG,CAAA,EAAA,EAAA,MAAA,AAAM,IACvB,CAAE,aAAc,CAAO,CAAE,aAAc,CAAO,CAAE,WAAY,CAAM,OAAE,CAAK,MAAE,CAAI,CAAE,CAAG,CAAA,EAAA,EAAA,QAAA,AAAQ,IAC5F,EAAS,CAAA,EAAA,EAAA,SAAA,AAAS,IAClB,EAAS,CAAA,EAAA,GAAA,aAAA,AAAa,EAAC,GAAU,MAAM,CAAC,AAAC,GAAkB,AAAZ,SAAE,KAAK,EAAa,CAAA,EAAA,GAAA,MAAA,AAAM,EAAC,EAAG,IAAM,MAAM,CACzF,EAAsB,iBAAf,EACP,EAAQ,EAAO,gBAAiC,SAAf,EAAwB,YAAc,aACvE,EAAU,CACd,EACA,GAAU,CAAA,EAAG,GAAO,EAAQ,SAAS,QAAQ,CAAC,CAC9C,GAAW,CAAA,EAAG,EAAQ,CAAC,EAAc,IAAZ,EAAgB,OAAS,QAAQ,QAAQ,CAAC,CACnE,GAAW,CAAA,EAAG,EAAQ,SAAS,CAAC,CAChC,GAAU,CAAA,EAAG,GAAO,EAAQ,cAAA,CAAe,CAC5C,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC,OACjB,EAAQ,CAAA,EAAG,EAAQ,GAAG,EAAE,CAAK,CAAC,EAAE,CAAG,qBAAuB,aAAA,CAAc,CACxE,EAAW,CAAC,GAAW,CAAA,EAAG,EAAQ,CAAC,EAAc,IAAZ,EAAgB,aAAe,aAAa,IAAI,CAAC,CAAE,GAAU,GAAO,EAAQ,cAAc,CAClI,MAAM,CAAC,SAAS,IAAI,CAAC,MAElB,EAAgC,CACpC,CAAC,SAAU,EAAS,GAClB,CAAA,EAAA,EAAA,IAAA,EAAA,EAAA,QAAA,CAAA,WACE,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,GAAG,CAAA,CAAC,aAAW,CAAA,CAAA,EAAC,UAAU,kDAC3B,CAAA,EAAA,EAAA,IAAA,EAAC,OAAA,CAAK,UAAU,qBAAY,EAAO,CAAA,EAAA,EAAA,IAAA,EAAC,OAAA,CAAK,UAAU,2BAAiB,IAAa,IAAX,EAAe,QAAU,SAAS,oBAE1G,CACF,CAAC,UAAW,EAAU,GACpB,CAAA,EAAA,EAAA,IAAA,EAAA,EAAA,QAAA,CAAA,WACE,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,OAAO,CAAA,CAAC,aAAW,CAAA,CAAA,EAAC,UAAU,oCAC9B,EAAQ,cAEX,CACF,CAAC,UAAW,EAAU,GACpB,CAAA,EAAA,EAAA,IAAA,EAAA,EAAA,QAAA,CAAA,WACE,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,aAAW,CAAA,CAAA,EAAC,UAAU,qDAC5B,CAAA,EAAA,EAAA,IAAA,EAAC,OAAA,CAAK,UAAU,qBAAY,EAAQ,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,UAAU,0BAAiB,oBAEvE,CACF,CAAC,SAAU,EAAS,GAClB,CAAA,EAAA,EAAA,IAAA,EAAA,EAAA,QAAA,CAAA,WACE,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,aAAW,CAAA,CAAA,EAAC,UAAU,oCAC5B,CAAA,EAAA,EAAA,IAAA,EAAC,OAAA,CAAK,UAAU,qBAAY,EAAO,CAAA,EAAA,EAAA,IAAA,EAAC,OAAA,CAAK,UAAU,2BAAiB,IAAa,IAAX,EAAe,QAAU,kBAEjG,CACH,CAAC,MAAM,CAAC,CAAC,EAAG,EAAK,GAAK,GAEvB,MACE,CAAA,EAAA,EAAA,IAAA,EAAA,EAAA,QAAA,CAAA,WACE,CAAA,EAAA,EAAA,IAAA,EAAC,SAAA,CACC,GAAG,eACH,KAAK,SACL,QAAS,IAAO,CAAK,CAAC,EAAE,CAAG,EAAK,CAAK,CAAC,EAAE,CAAC,EAAE,EAAI,EAAO,IAAI,CAAC,SAC3D,MAAO,EACP,aAAY,EACZ,UAAW,CAAA,EAAA,EAAA,EAAA,AAAE,EAAC,2MAA4M,cAE1N,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CACC,aAAW,CAAA,CAAA,EACX,UAAW,CAAA,EAAA,EAAA,EAAA,AAAE,EACX,8EACA,EAAO,WAA4B,SAAf,EAAyB,EAAgB,SAAW,WAAc,yBAGzF,GAAQ,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,UAAU,mCAA2B,IACnD,EAAO,GAAG,CAAC,CAAC,CAAC,EAAK,EAAK,CAAE,IACxB,CAAA,EAAA,EAAA,IAAA,EAAC,OAAA,CAAe,UAAW,CAAA,EAAA,EAAA,EAAA,AAAE,EAAC,0BAAmC,YAAR,GAAqB,2BAC3E,AAAC,GAAI,GAAK,CAAA,CAAI,EAAK,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,aAAW,CAAA,CAAA,EAAC,UAAW,CAAA,EAAA,EAAA,EAAE,AAAF,EAAG,aAAc,EAAO,KAAK,CAAC,EAAG,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,GAAW,YAAN,IAAoB,0BAAkB,MACzI,IAFQ,OAOf,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,YAAU,SAAS,UAAU,mBAAW,MAGpD,CAGA,SAAS,GAAY,UAAE,CAAQ,KAAE,CAAG,CAA8C,EAChF,IAAM,EAAW,CAAA,EAAG,CAAA,EAAA,EAAA,SAAA,AAAS,IAAG,QAAQ,CAAC,CACnC,EAAU,CAAC,wCAAwC,EAAE,EAAA,CAAU,CAC/D,CAAC,EAAQ,EAAU,CAAG,CAAA,EAAA,EAAA,QAAA,AAAQ,EAAgB,MAC9C,EAAW,EAAS,MAAM,CAAC,AAAC,GAAkB,OAAZ,EAAE,KAAK,EAAW,MAAM,CAAgB,CAAC,EAAG,IAAO,CAAC,GAAK,EAAE,SAAS,CAAG,EAAI,EAAE,SAAS,CAAG,EAAI,MAC/H,EAAU,GAAY,CAAA,EAAA,GAAA,GAAA,AAAG,EAAC,EAAU,GAE1C,eAAe,EAAK,CAAY,EAC9B,GAAI,CACF,MAAM,UAAU,SAAS,CAAC,SAAS,CAAC,GACpC,EAAU,GACV,WAAW,IAAM,EAAU,MAAO,KACpC,CAAE,MAAO,EAAG,CACV,QAAQ,IAAI,CAAC,4BAA6B,EAC5C,CACF,CAGA,IAAM,EAAM,CAAC,EAAc,IACzB,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,gBAAgB,CAAA,CACf,SAAW,AAAD,IAAS,EAAE,cAAc,GAAS,EAAK,EAAM,EACvD,UAAU,2HAEV,CAAA,EAAA,EAAA,IAAA,EAAC,OAAA,CAAK,UAAU,oBAAW,EAAM,QACjC,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,UAAU,kEAA0D,IAC1E,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,aAAW,CAAA,CAAA,EAAC,UAAU,qDACzB,IAAW,EAAO,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,KAAK,CAAA,CAAC,UAAU,cAAiB,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,IAAI,CAAA,CAAA,QAKhE,MACE,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,YAAY,CAAA,WACX,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,mBAAmB,CAAA,CAAC,OAAO,CAAA,CAAA,WAC1B,CAAA,EAAA,EAAA,IAAA,EAAC,SAAA,CACC,KAAK,SACL,MAAM,4BACN,UAAW,CAAA,EAAA,EAAA,EAAA,AAAE,EAAC,wJAAyJ,cAEvK,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,IAAI,CAAA,CAAC,aAAW,CAAA,CAAA,EAAC,UAAU,aAAa,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,UAAU,0BAAiB,iBAG9E,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,mBAAmB,CAAA,CAAC,MAAM,MAAM,UAAU,mFACzC,CAAA,EAAA,EAAA,GAAA,EAAC,IAAA,CAAE,UAAU,+BAAsB,0BACnC,CAAA,EAAA,EAAA,GAAA,EAAC,IAAA,CAAE,UAAU,mCAA0B,yGACtC,EAAI,EAAU,iBACd,EAAI,EAAS,+BACd,CAAA,EAAA,EAAA,IAAA,EAAC,IAAA,CAAE,UAAU,kDAAwC,oBACjC,EAAuB,QAAZ,EAAoB,WAAa,CAAA,EAAG,EAAQ,IAAI,CAAC,CAAI,cAEpF,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,gBAAgB,CAAA,CAAC,OAAO,CAAA,CAAA,EAAC,UAAU,wDAClC,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,OAAI,CAAA,CAAC,KAAK,sBAAY,wCAAqC,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,UAAU,uBAAc,6BAKpG,qFcvOmD,yCAC7B,CAAA,ADAJ,ADAA,CEAI,ADAJ,ADAA,CAAA,ACAA,CAAA,ADAA,OEAiB,CAAA,AFAD,ACAF,UCAiB,EAAG,CAAA,CAAA,EAAK,CAAA,EAAI,CAAA,CAAA,CAAA,CAAA,IAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,2BAC9C,WAAc,EAAG,CAAA,CAAA,CAAA,CAAA,CAAA,AAAM,CAAA,CAAA,CAAA,AAAI,CAAA,CAAA,CAAA,CAAA,AAAK,CAAA,CAAA,CAAA,CAAA,AAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,qGZPlF,IAAA,GAAA,EAAA,CAAA,CAAA,QAAA,GAAA,EAAA,CAAA,CAAA,QAAA,GAAA,EAAA,CAAA,CAAA,QAAA,GAAA,EAAA,CAAA,CAAA,uXemB0C,CNgBC,AMhBD,CNgBC,AMhBD,CAAA,CAAK,QAAA,CAAU,CAAA,EACpD,OAAQ,GAAK,CAAA,CAAA,CAAA,uBAA2B,CAAA,CAAA,EAAK,CAAA,CAAA,CAAA,KAAA,CAAU,CAAA,MAOL,CAAA,GAAA,CAavD,CAAA,GAAM,CAAA,EAAa,CAAA,EAAA,EAAA,OAAA,EAAA,IfxCnB,IAAA,GAAA,EAAA,CAAA,CAAA,QAAA,GAAA,EAAA,CAAA,CAAA,sUWMgC,CDAH,AEAF,ADAK,GAAA,YAC3B,OAAQ,CCAA,ADAA,AAAE,EAAA,YAAgB,IAAK,CCAD,ADAC,wFAG/B,qBAAyB,CAAA,GAAK,CAAA,CAAA,CAAA,CAAA,IAAA,CAAU,CAAA,SAChC,GAAK,CDgBA,AChBA,UAAY,IAAA,mBACjB,CAAA,ACgBP,AChBO,cFAkB,IAAA,UAAe,CCgBL,CAAA,CAAA,CAAU,mCDfD,CFAH,CAAA,IEAW,CAAA,CAAA,CAAA,AAAI,CAAA,CAAA,CAAA,CAAA,AAAK,CAAA,CAAA,CAAA,CAAK,AAAL,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,qBAoBjE,CEAX,AFAW,CEAX,AFAW,OAAA,EAAA,IZ9BjB,IAAA,GAAA,EAAA,CAAA,CAAA,QAAA,GAAA,EAAA,CAAA,CAAA,OAMA,GAAA,EAAA,CAAA,CAAA,QAOA,IAAM,GAAW,CAAA,EAAA,EAAA,WAAA,AAAW,EAAC,SACvB,GAAW,8FAGV,SAAS,KACd,MACE,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,QAAQ,CAAA,UACP,CAAA,EAAA,EAAA,GAAA,EAAC,GAAA,CAAA,IAGP,CAEA,SAAS,KACP,GAAM,OAAE,CAAK,QAAE,CAAM,SAAE,CAAO,MAAE,CAAI,QAAE,CAAM,SAAE,CAAO,cAAE,CAAY,cAAE,CAAY,CAAE,YAAU,CAAE,KAAG,CAAE,CAAGT,CAAAA,EAAAA,EAAAA,QAAAA,AAAQ,IACzG,EAAW,CAAA,EAAA,EAAA,WAAA,AAAW,IACtB,EAASA,CAAAA,EAAAA,EAAAA,eAAAA,AAAe,IAAG,GAAG,CAACgB,MAC/B,EAAI,CAAA,EAAA,GAAA,UAAA,AAAU,EAAC,EAAO,GACtB,EAAS,IAAI,EAAE,QAAQ,IAAK,EAAE,MAAM,IAAK,EAAE,OAAO,IAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAlBpD,CAkBuD,EAAmB,CAC5F,EAAS,EAAM,MAAM,CAAG,EAAO,MAAM,CACrC,EAAU,CAAC,GAAgB,CAAA,EAAG,EAAa,QAAQ,CAAC,CAAE,GAAgB,CAAA,EAAG,EAAa,gBAAgB,CAAC,CAAE,GAAc,CAAA,EAAG,EAAW,cAAc,CAAC,CAAC,CACxJ,MAAM,CAAC,SAAS,IAAI,CAAC,OAClB,EAAY,EAAU,CAAC,WAAQ,EAAE,EAAA,CAAS,CAAG,QAGnD,MACE,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,CAAa,KAAK,QAAQ,aAAW,kBACpC,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,UAAkB,UACnB,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,CAAmB,MAAM,WAAW,QAAS,IAAM,EAAK,eACvD,CAAA,EAAA,EAAA,GAAA,EAAC,GAAA,IAAI,CAAA,CAAA,GACL,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,UAAU,mBAAU,gBAE5B,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,UACC,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,WAEC,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CAAgB,UAAU,sDACzB,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CAAkB,OAAO,CAAA,CAAA,EAAC,QAAS,CAAE,SAAU,CAAA,EAAA,EAAA,IAAA,EAAC,OAAA,CAAK,UAAU,oCAA2B,EAAW,IAAY,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,UAAW,YAAW,OAAwB,EAAG,SAAuB,UAAb,WAChL,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,OAAI,CAAA,CAAC,KAAK,QAAQ,oBAAmB,GAAU,UAAU,qBACvD,EAAe,EAAI,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,OAAO,CAAA,CAAC,UAAU,6BAAgC,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CAAA,GACxE,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,UAAM,IACN,EAAe,GAAK,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,aAAW,CAAA,CAAA,EAAC,UAAU,4EAChD,EAAa,GAAK,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,aAAW,CAAA,CAAA,EAAC,UAAU,qEAKpD,GAAU,AAAiB,MAAX,MAAM,EACrB,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CAAgB,UAAU,gDACzB,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,CAAkB,QAAS,IAAM,EAAK,KAAW,UAAU,uBAC1D,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CAAA,GACD,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,UAAK,sBAKX,EAAO,GAAG,CAAC,AAAC,IACX,MAAM,EAAS,CAAA,EAAA,GAAA,WAAA,AAAW,EAAC,EAAG,GACxB,EAAQ,CAAA,EAAA,GAAA,iBAAA,AAAiB,EAAC,EAAG,GACnC,MACE,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,CAA2B,UAAU,kEACpC,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,CACC,QAAS,IAAM,EAAK,EAAE,EAAE,EACxB,SAvCe,CAuCL,IAvCV,EAuCiB,EAAE,EAAE,CAvCM,EAAoB,UAAb,GAAwB,IAAW,EAwCrE,UAAW,CAAA,EAAA,EAAA,EAAA,AAAE,EAAC,MAAkB,SAAX,GAAqB,aAAc,GAAS,QACjE,MAAO,EAAE,KAAK,WAEd,CAAA,EAAA,EAAA,GAAA,EAAC,GAAA,YAAY,CAAA,CAAC,OAAQ,EAAQ,QAAQ,CAAA,CAAA,IACtC,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,UAAU,mCAA2B,EAAE,KAAK,GACjD,GAAS,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,aAAW,CAAA,CAAA,EAAC,UAAU,sDAA6C,UAElF,EAAE,MAAM,EAAI,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,EAAE,GAAK,CAAA,EAAA,EAAA,GAAA,EAAC,GAAA,WAAW,CAAA,CAAC,OAAQ,EAAE,MAAM,CAAE,UAAU,2BAEzF,GACC,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,CAAkB,MAAM,gBAAgB,QAAS,IAAM,EAAQ,EAAE,EAAE,EAAG,UAAU,sCAC/E,CAAA,EAAA,EAAA,GAAA,EAAC,GAAA,CAAC,CAAA,CAAA,GACF,CAAA,EAAA,EAAA,IAAA,EAAC,OAAA,CAAK,UAAU,oBAAU,oBAAkB,EAAE,KAAK,SAhBnC,EAAE,EAAE,CAqB9B,GAEC,EAAM,MAAM,CAAG,GACd,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CAAgB,UAAU,gDACzB,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CAAkB,OAAO,CAAA,CAAA,EAAC,SAAuB,UAAb,GAAwB,CAAC,EAAQ,UAAU,kCAC9E,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,OAAI,CAAA,CAAC,KAAK,QAAQ,oBAAmB,aACpC,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CAAA,GACD,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,UAAM,EAAS,EAAI,CAAC,eAAY,EAAE,EAAM,MAAM,CAAA,CAAE,CAAG,cACnD,IAAY,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,aAAW,CAAA,CAAA,EAAC,UAAW,CAAA,EAAA,EAAA,EAAE,AAAF,EAAG,GAAU,4FAAqF,mBAS7J,CC3FA,IAAM,GAAa,CACjB,CACE,MAAO,mBACP,MAAO,CACL,CAAE,KAAM,SAAU,KAAMR,GAAiB,MAAO,OAAQ,EACxD,CAAE,KAAM,WAAY,KAAM,GAAA,GAAG,CAAE,MAAO,SAAU,EAChD,CAAE,KAAM,gBAAiB,KAAM,GAAA,YAAY,CAAE,MAAO,cAAe,EACnE,CAAE,KAAM,YAAa,KAAMI,GAAAA,GAAG,CAAE,MAAO,UAAW,EACnD,AACH,EACA,CACE,MAAO,YACP,MAAO,CACL,CAAE,KAAM,QAAS,KAAM,GAAA,QAAQ,CAAE,MAAO,MAAO,EAC/C,CAAE,KAAM,UAAW,KAAM,GAAA,KAAK,CAAE,MAAO,QAAS,EAChD,CAAE,KAAM,YAAa,KAAM,GAAY,MAAO,UAAW,EAC1D,AACH,EACD,CAEK,GAAW,8FAGjB,SAAS,KACP,OAAO,aAAa,CAAC,IAAI,cAAc,UAAW,CAAE,IAAK,GAAI,GAC/D,CAOO,SAAS,GAAW,OAAE,CAAK,CAAmB,EACnD,IAAM,EAAW,CAAA,EAAA,EAAA,WAAA,AAAW,IACtB,EAAc,CAAA,EAAA,EAAA,WAAA,AAAW,EAAC,aAE1B,EAAW,EAAQ,OAAO,MAAM,CAAC,GAAO,IAAI,GAAG,MAAM,CAAC,CAAC,EAAG,IAAM,GAAK,CAAD,CAAG,WAAW,CAAG,EAAE,WAAW,CAAC,KAAK,CAAG,EAAE,WAAW,CAAC,IAAI,EAAG,CAAC,CAAG,GAAK,EAIzI,EAAsD,CAC1D,SAAU,CAAE,EAHC,CAGE,CAHM,CAAK,CAAC,cAAc,CAAC,MAAM,CAAG,EAAM,MAAM,CAAC,MAAM,CAAG,EAGlD,MAAO,0BAA2B,EACzD,gBAAiB,CAAE,EAAG,EAAU,MAAO,UAAW,CACpD,EAEA,MACE,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,CAAQ,YAAY,iBACnB,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,UACC,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,8CACb,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,aAAW,CAAA,CAAA,EAAC,UAAU,uFACzB,CAAA,EAAA,EAAA,GAAA,EAAC,GAAA,CAAQ,UAAU,WAAW,YAAa,QAE7C,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,UAAU,8FAAqF,iBAGzG,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,WACC,CAAA,EAAA,EAAA,GAAA,EAAC,GAAA,CAAA,GACA,GAAW,GAAG,CAAC,AAAC,GACf,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,WACC,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,UAAmB,EAAM,KAAK,GAC/B,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,UACC,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,UACE,EAAM,KAAK,CAAC,GAAG,CAAC,CAAC,MAAE,CAAI,CAAE,KAAM,CAAI,OAAE,CAAK,CAAE,IAC3C,IAAM,EAAM,CAAA,EAAA,EAAA,WAAA,AAAW,EAAC,GAClB,EAAI,CAAK,CAAC,EAAK,CACrB,MACE,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,UACC,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CACC,OAAO,CAAA,CAAA,EACP,SAAU,EAAS,UAAU,CAAC,GAC9B,QAAS,CAAE,SAAU,CAAA,EAAA,EAAA,IAAA,EAAC,OAAA,CAAK,UAAU,oCAA2B,EAAO,GAAO,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,UAAW,YAAW,MAAmB,WAE5H,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,OAAI,CAAA,CAAC,KAAM,EAAM,oBAAmB,YACnC,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CAAA,GACD,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,UAAM,IACN,GAAG,EAAI,GACN,CAAA,EAAA,EAAA,IAAA,EAAC,OAAA,CAAK,UAAU,kEAAyD,EAAE,CAAC,CAAC,CAAA,EAAA,EAAA,IAAA,EAAC,OAAA,CAAK,UAAU,oBAAU,IAAE,EAAE,KAAK,OAEjH,GAAO,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,aAAW,CAAA,CAAA,EAAC,UAAW,CAAA,EAAA,EAAA,EAAA,AAAE,EAAC,GAAU,CAAC,CAAC,GAAG,GAAI,CAAC,EAAK,UAAW,oFAA6E,UAZxI,EAiB1B,SAzBa,EAAM,KAAK,MA+BlC,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,UACC,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,WACC,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,UACC,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,CAAkB,QAAS,GAAkB,oBAAkB,IAAI,QAAQ,yBAAyB,UAAU,uBAC7G,CAAA,EAAA,EAAA,GAAA,EAAC,GAAA,CAAA,GACD,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,UAAK,cACN,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,aAAW,CAAA,CAAA,EAAC,UAAW,CAAA,EAAA,EAAA,EAAA,AAAE,EAAC,GAAU,oBAAY,WAGzD,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,UACC,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CAAkB,OAAO,CAAA,CAAA,EAAC,SAAU,EAAS,UAAU,CAAC,aAAc,QAAS,CAAE,SAAU,CAAA,EAAA,EAAA,IAAA,EAAC,OAAA,CAAK,UAAU,oCAA0B,WAAQ,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,UAAW,YAAW,MAA0B,WACjM,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,OAAI,CAAA,CAAC,KAAK,YAAY,oBAAmB,YACxC,CAAA,EAAA,EAAA,GAAA,EAAC,GAAA,QAAQ,CAAA,CAAA,GACT,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,UAAK,aACN,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,aAAW,CAAA,CAAA,EAAC,UAAW,CAAA,EAAA,EAAA,EAAA,AAAE,EAAC,GAAU,4FAAqF,kBAQ9I,CGlIA,IAAA,GAAA,EAAA,CAAA,CAAA,QAAA,GAAA,EAAA,CAAA,CAAA,QAAA,GAAA,EAAA,CAAA,CAAA,oNUUkB,UAAW,CFAX,ACgBM,AChBK,GFAX,UEA0B,CDgBH,ADhBK,yCEQS,IAAA,sBAaZ,CFAC,AEAD,CFAC,AEAD,mCJ7BnC,YACU,CGAH,AFAA,ACAG,AFAA,SAAW,CGAF,ADAT,AFAW,ACAD,GDAM,yIAK1B,CEAH,ADIuC,CCJvC,ADIuC,EAAA,WDDxC,CAAC,UAAa,2BAA6B,kBAClC,CAAA,AKI0C,ELJrC,CAAA,mBAAqB,CAAA,CAAA,CAAA,CAAA,AAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,EACjD,QAAU,EAAA,WAAe,CKgBd,AEhBL,APAmB,AMAnB,GNAwB,CKgBF,AEhBtB,ADAA,ANAwB,mBAOoB,WAavC,CAAA,CAAA,OAAA,EAAiB,INjCjC,IAAA,GAAA,EAAA,CAAA,CAAA,QFAA,IAAM,GAAW,WAsCV,SAAS,GAAeK,CAAa,CAAE,CAAU,CAAE,CAA4BpB,EACpF,OAAO,EACJ,GAAG,CAAC,AAAC,GAAU,IAAD,GAAG,EAAM,KAAM,EAAQ,GAAO,MAAO,AAjCjD,SAAS,AAAW,CAAa,CAAE,CAAY,EACpD,IAAM,EAAI,EAAM,WAAW,GAAG,OAAO,CAAC,OAAQ,IAC9C,GAAI,CAAC,EAAG,OAAO,EACf,IAAM,EAAI,EAAK,WAAW,GACtB,EAAsB,KAC1B,IAAK,IAAI,EAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,EAAEK,EAAG,AAAU,CAAC,MAAG,EAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAE,EAAQ,GAAI,CAClF,IAAM,EAAI,AAOd,SAAS,AAAY,CAAS,CAAE,CAAS,CAAE,CAAa,EACtD,IAAM,EAAY,EAAE,WAAW,CAAC,KAAO,EACnC,EAAQ,EACR,EAAK,EACL,EAAO,CAAC,EACZ,IAAK,IAAI,EAAI,EAAO,EAAI,EAAE,MAAM,EAAI,EAAK,EAAE,MAAM,CAAE,IAAK,AAClD,CAAC,CAAC,EAAE,GAAK,CAAC,CAAC,EAAG,EAAE,CACpB,GAAS,EACL,IAAM,EAAO,IAAG,GAAS,IACnB,IAAN,GAAW,GAAS,IAAI,CAAC,CAAC,CAAC,EAAIH,GAAE,IAAG,IAAS,EAC7C,GAAK,IAAW,IAAS,EAC7B,EAAO,EACP,KAEF,OAAO,IAAO,EAAE,MAAM,CAAG,EAAQ,IACnC,EAtB0B,EAAG,EAAG,EACxB,AAAM,QAAQ,IAAC,AAAS,UAAQ,EAAI,CAAA,CAAI,GAAG,GAAO,CACxD,CACA,OAAO,CACT,EAuBmE,EAAO,EAAQ,IAAO,CAAC,EACrF,MAAM,CAAC,AAAC,GAAiE,OAAZ,EAAE,KAAK,EACpE,IAAI,CAAC,CAAC,EAAG,IAAM,EAAE,KAAK,CAAG,EAAE,KAAK,EAAI,EAAE,IAAI,CAAC,MAAM,CAAG,EAAE,IAAI,CAAC,MAAM,EACjE,GAAG,CAAC,AAAC,GAAM,EAAE,IAAI,CACtB,CEhCAG,IAAAA,GAAAA,EAAAA,CAAAA,CAAAA,QAEA,GAAA,EAAA,CAAA,CAAA,QAEA,GAAA,EAAA,CAAA,CAAA,QACA,GAAA,EAAA,CAAA,CAAA,QAEA,IAAM,GAA6D,CACjE,CAAE,KAAM,QAAS,MAAO,QAAS,KAAM,EAAA,GAAG,AAAC,EAC3C,CAAE,KAAM,SAAU,MAAO,QAAS,KAAM,EAAgB,EACxD,CAAEY,KAAM,WAAY,MAAO,UAAW,KAAM,GAAA,GAAG,AAAC,EAChD,CAAE,KAAM,QAAS,MAAOd,OAAQ,KAAM,GAAA,QAAQgB,AAAC,EAC/C,CAAE,KAAM,YAAa,MAAO,WAAY,KAAM,GAAA,QAAQ,AAAC,EACvD,CAAE,KAAM,UAAW,MAAO,SAAU,KAAM,GAAA,KAAMF,AAAD,EAC/C,CAAE,KAAM,gBAAiB,MAAO,eAAgB,KAAM,GAAA,YAAY,AAAC,EACnE,CAAE,KAAM,YAAa,MAAO,WAAY,KAAM,EAAW,EACzD,CAAE,KAAM,YAAa,MAAO,WAAY,KAAM,GAAA,QAAQ,AAAC,EACxD,CA2BK,GAAQ,AAAD,GAAsB,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CAAK,UAAU,+BAA+B,aAAW,CAAA,CAAA,IAGtF,SAAS,GAAe,MAAE,CAAI,SAAE,CAAO,WAAE,CAAS,UAAE,CAAQ,aAAE,CAAW,YAAE,CAAU,CAAE,WAAS,CAAuB,EAC5H,IAAM,EAAS,CAAA,EAAA,EAAA,SAAA,AAAS,IAClB,OAAE,CAAK,CAAE,UAAQ,CAAE,eAAa,CAAE,iBAAe,CAAE,CAAG,CAAA,EAAA,EAAA,MAAA,AAAM,IAC5D,OAAE,CAAK,OAAE,CAAK,KAAE,CAAG,MAAE,CAAI,QAAE,CAAM,CAAE,CAAG,CAAA,EAAA,EAAA,QAAA,AAAQ,IAC9C,CAAC,EAAO,EAAS,CAAG,CAAA,EAAA,EAAA,QAAQ,AAAR,EAAS,IAC7B,CAAC,EAAa,EAAe,CAAG,CAAA,EAAA,EAAA,QAAA,AAAQ,EAAC,GACzC,CAAC,EAAM,EAAQ,CAAG,CAAA,EAAA,EAAA,QAAA,AAAQ,EAAmB,MAC7C,CAAC,EAAO,EAAS,CAAG,CAAA,EAAA,EAAA,QAAA,AAAQ,EAAgB,EAAE,EAC9C,EAAU,CAAA,EAAA,EAAA,MAAM,AAAN,EAAuB,MACjC,EAAU,CAAA,EAAA,GAAA,sBAAA,AAAsB,IAEhC,CAAC,EAAS,EAAW,CAAG,CAAA,EAAA,EAAA,QAAQ,AAAR,EAAS,GACnC,IAAS,IACX,EAAW,GADS,AAEhB,IAAQ,EAAF,AAAW,IAAK,EAAe,GAAI,EAAQ,QAIvD,CAAA,EAAA,EAAA,SAAA,AAAS,EAAC,KACR,GAAI,CAAC,EAAM,OACX,IAAI,GAAY,EAKhB,OAJA,MAAM,CAAC,YAAY,EAAE,EAAA,CAAW,EAC7B,IAAI,CAAC,AAAC,GAAO,EAAE,EAAE,CAAG,EAAE,IAAI,GAAK,CAAE,MAAO,EAAE,AAAC,GAC3C,IAAI,CAAC,AAAC,IAAuC,AAAC,GAAW,EAAS,CAAC,EAAE,KAAK,EAAI,EAAA,AAAE,EAAE,MAAM,CAAC,AAAC,GAAM,EAAE,MAAM,EAAG,GAC3G,KAAK,CAAC,AAAC,GAAM,QAAQ,IAAI,CAAC,gDAAiD,IACvE,KAAQ,GAAY,CAAK,CAClC,EAAG,CAAC,EAAM,EAAU,EAGpB,IAAM,EAAI,EAAM,IAAI,GACpB,CAAA,EAAA,EAAA,SAAA,AAAS,EAAC,KACR,GAAI,EAAE,MAAM,CAAG,EAAG,OAClB,IAAM,EAAI,WAAW,UACnB,GAAI,CACF,IAAM,EAAM,MAAM,MAAM,CAAC,SAAS,EAAE,EAAU,GAAG,EAAE,mBAAmB,GAAA,CAAI,EAC1E,GAAI,CAAC,EAAI,EAAE,CAAE,MAAM,AAAI,MAAM,CAAC,KAAK,EAAE,EAAI,MAAM,CAAA,CAAE,EACjD,IAAM,EAAO,MAAM,EAAI,IAAI,GAC3B,EAAQ,CAAE,MAAO,EAAG,OAAQ,OAAQ,MAAO,EAAK,OAAO,EAAE,IAAI,AAAC,GAAwB,EAAE,IAAI,GAAK,EAAE,AAAC,EACtG,CAAE,MAAO,EAAG,CACV,QAAQ,IAAI,CAAC,+BAAgC,GAC7C,EAAQ,CAAE,MAAO,EAAG,OAAQ,QAAS,MAAO,EAAE,AAAC,EACjD,CACF,EAAG,KACH,MAAO,IAAM,aAAa,EAC5B,EAAG,CAAC,EAAG,EAAU,EAEjB,IAAM,EAAO,CAAA,EAAA,EAAA,OAAA,AAAO,EAAC,KACnB,IAAM,EAAK,AAAC,GAAiB,KAAQ,EAAO,IAAI,CAAC,GAAO,GAAU,EAC5D,EAAM,CAAK,EAAY,IAA8B,EAAI,GAAY,EAAG,EAAO,GAAK,KAAK,CAAC,GAAG,EAAa,EAC1G,EAAa,EAAE,CACf,EAAkB,EAAE,CAG1B,GAAI,EACF,IAAK,GADM,CACA,KAAK,EAAI,EAAQ,QAAQ,CAAG,AAAD,GAAO,EAAE,KAAK,EAAG,AACrD,EAAI,IAAI,CAAC,CACP,GAAI,CAAC,SAAS,EAAE,EAAE,MAAM,CAAA,CAAE,CAAE,MAAO,EAAQ,KAAK,CAAE,MAAO,EAAE,KAAK,CAAE,KAAM,GAAK,GAAA,GAAG,EAAG,IAAK,CAAA,EAAA,GAAA,YAAA,AAAY,EAAC,EAAE,MAAM,EAC7G,IAAK,KAAQ,IAAW,EAAE,GAAG,EAAG,CAClC,GAIJ,GAAI,EAAG,CAEL,IAAM,EAAQ,IADA,AAET,GAFiB,OAAO,MAAM,CAAC,GAAO,IAAI,GAAK,EAAA,AAAE,EAE3C,GAAG,CAAC,AAAC,IAAM,AAAC,CAAE,GAAI,EAAE,EAAE,CAAE,MAAO,EAAE,KAAK,CAAE,KAAM,CAAA,EAAA,EAAA,GAAA,EAAC,GAAA,UAAU,CAAA,CAAC,OAAQ,CAAA,EAAA,GAAA,aAAA,AAAa,EAAC,KAAQ,KAAM,CAAA,EAAA,GAAA,UAAA,AAAU,EAAC,CAAE,KAAM,OAAQ,GAAI,EAAE,EAAE,AAAC,GAAG,CAAC,KAC5I,EAAM,GAAG,CAAC,AAAC,IAAM,AAAC,CAAE,GAAI,EAAE,EAAE,CAAE,MAAO,EAAE,KAAK,CAAE,KAAM,GAAK,GAAA,GAAG,EAAG,KAAM,CAAA,EAAA,GAAA,UAAA,AAAU,EAAC,CAAE,KAAM,OAAQ,GAAI,EAAE,EAAE,AAAC,EAAG,CAAC,GACjH,CAEK,EAAQ,EAAE,WAAW,GACrB,EAAO,EAAM,MAAM,CAAE,AAAD,GAAO,EAAE,EAAE,CAAC,WAAW,GAAG,UAAU,CAAC,IAAQ,IAAI,CAAC,CAAC,EAAG,IAAM,EAAE,EAAE,CAAC,MAAM,CAAG,EAAE,EAAE,CAAC,MAAM,EAE/G,IAAK,IAAM,IAAK,CADH,EAAK,MAAM,CAAG,EAAO,GAAY,EAAG,EAAQ,AAAD,GAAO,EAAE,KAAK,GACjD,KAAK,CAAC,GAAG,EAC5B,EAAS,IAAI,CAAC,CAAE,CADwB,EACpB,CAAC,KAAK,EAAE,EAAE,EAAE,CAAA,CAAE,CAAE,MAAO,gBAAiB,MAAO,EAAE,KAAK,CAAE,KAAM,EAAE,EAAE,CAAE,KAAM,EAAE,IAAI,CAAE,IAAK,EAAG,EAAE,IAAI,CAAE,EAE1H,CAEA,IAAM,EAAU,WAAW,IAAI,CAAC,GAC5B,GAAS,EAAI,IAAI,IAAI,GAGzB,IAAM,EAAI,CAAA,EAAA,GAAA,UAAU,AAAV,EAAW,EAAO,GACtB,EAAS,IAAI,KAAU,EAAE,OAAO,CAAC,CAEvC,IAAK,IAAM,KAAK,EADC,EAAI,AACD,EADS,EAAO,MAAM,CAAG,EAAS,EAAE,MAAM,CAAC,KAAK,CAAC,EAAG,GAC1C,AAAC,GAAM,CAAA,EAAG,EAAE,MAAM,EAAE,IAAM,GAAG,CAAC,EAAE,EAAE,KAAK,CAAA,CAAE,EAAG,AACxE,EAAI,IAAI,CAAC,CACP,GAAI,CAAC,KAAK,EAAE,EAAE,EAAE,CAAA,CAAE,CAAE,MAAO,QAAS,MAAO,EAAE,KAAK,CAAE,KAAM,EAAE,MAAM,EAAE,GACpE,KAAM,CAAA,EAAA,EAAA,GAAA,EAAC,GAAA,YAAY,CAAA,CAAC,OAAQ,CAAA,EAAA,GAAA,WAAW,AAAX,EAAY,EAAG,GAAM,QAAQ,CAAA,CAAA,IACzD,IAAK,KAAQ,EAAK,EAAE,EAAE,EAAG,GAAU,CACrC,GAIF,IAAK,IAAM,KAFP,AAAC,GAAS,EAAI,IAAI,IAAI,GAEV,EAAI,GAAO,AAAC,GAAM,EAAE,KAAK,EAAG,CAC1C,EAAI,IAAI,CAAC,CAAE,GAAI,CAAC,KAAK,EAAE,EAAE,IAAI,CAAA,CAAE,CAAE,MAAO,WAAY,MAAO,EAAE,KAAK,CAAE,KAAM,GAAK,EAAE,IAAI,EAAG,IAAK,CAAA,EAAA,EAAA,WAAA,AAAW,EAAC,EAAE,IAAI,EAAG,IAAK,EAAG,EAAE,IAAI,CAAE,GAGpI,IAAM,EAAiB,CACrB,CAAE,GAAI,WAAY,MAAO,UAAW,MAAO,WAAY,KAAM,GAAK,IAAoB,IAAK,KAAQ,EAAK,KAAW,GAAU,CAAE,EAC/H,CAAE,GAAI,UAAW,MAAO,UAAW,MAAO,UAAW,KAAM,GAAK,GAAA,QAAQ,EAAG,IAAK,KAAQ,MAAc,GAAU,CAAE,EAClH,CAAE,GAAI,UAAW,MAAO,UAAW,MAAO,aAAc,KAAM,GAAK,GAAA,QAAQ,EAAG,IAAK,KAAM,IAAK,CAAY,EAC1G,CAAE,GAAI,QAAS,MAAO,UAAW,MAAO,4BAA6B,KAAM,GAAK,IAAU,IAAK,KAAQ,GAAY,GAAY,GAAU,CAAE,EAC3I,CAAE,GAAI,OAAQ,MAAO,UAAW,MAAO,qBAAsB,KAAM,GAAK,IAAW,IAAK,IAAK,IAAK,CAAW,KAE1G,CAAC,EAAI,EAAS,MAAM,CAAC,AAAC,GAAM,EAAE,IAAI,GAAK,GAAiB,EAAA,AAAE,EAAE,GAAG,CAAE,AAAD,IAAO,AAAC,CACzE,GAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAA,CAAE,CAAE,MAAO,UAAW,MAAO,CAAC,gBAAgB,EAAE,EAAE,IAAI,CAAA,CAAE,CAAE,OAAQ,EAAE,IAAI,CAC7F,KAAM,GAAK,GAAA,UAAU,EAAG,IAAK,KAAQ,EAAgB,EAAE,IAAI,EAAG,GAAU,CAC1E,CAAC,GACF,CAGD,GAFA,EAAI,IAAI,IAAI,EAAI,EAAS,AAAC,GAAM,EAAE,KAAK,GAEnC,EAAE,MAAM,EAAI,GAAK,GAAM,QAAU,EAGnC,CAHsC,GAGjC,IAAM,KADG,AACK,EADA,KAAK,CAAC,MAAM,CAAC,AAAC,GAAM,CAAC,4BAA4B,IAAI,CAAC,IAChD,KAAK,CAAC,EA/InB,CA+IsB,EAAY,CAC5C,IAAM,EAAQ,EAAK,WAAW,CAAC,KAC/B,EAAI,IAAI,CAAC,CACP,GAAI,CAAC,IAAI,EAAE,EAAA,CAAM,CAAE,MAAO,OAAQ,MAAO,EAAK,KAAK,CAAC,EAAQ,GAAG,OAAO,CAAC,QAAS,IAChF,OAAQ,EAAQ,EAAI,EAAK,KAAK,CAAC,EAAG,QAAS,EAAW,KAAM,GAAK,GAAA,QAAQ,EACzE,IAAK,KAAQ,EAAU,GAAO,GAAU,CAC1C,EACF,CAEF,OAAO,CACT,EAAG,CAAC,EAAG,EAAS,EAAO,EAAO,EAAK,EAAO,EAAO,EAAU,EAAe,EAAM,EAAQ,EAAS,EAAM,EAAQ,EAAU,EAAa,EAAY,EAAW,EAAiB,EAAU,EAElL,EAAS,KAAK,GAAG,CAAC,EAAG,KAAK,GAAG,CAAC,EAAa,EAAK,MAAM,CAAG,IAEzD,EAAS,EAAK,MAAM,CAAmD,CAAC,EAAK,EAAK,KACtF,IAAM,EAAO,CAAG,CAAC,EAAI,MAAM,CAAG,EAAE,CAGhC,OAFI,GAAM,QAAU,EAAI,KAAK,CAAE,EAAK,KAAK,CAAC,IAAI,CAAC,GAC1C,EAAI,IAAI,CAAC,CAAE,MAAO,EAAI,KAAK,CAAE,MAAO,EAAG,MAAO,CAAC,EAAK,AAAD,GACjD,CACT,EAAG,EAAE,EACC,EAAc,EAAE,MAAM,EAAI,GAAK,GAAM,QAAU,EAC/C,EAAa,EAAE,MAAM,EAAI,GAAK,GAAM,QAAU,GAAqB,UAAhB,EAAK,MAAM,OAEpE,CAAA,EAAA,EAAA,SAAA,AAAS,EAAC,KACR,EAAQ,OAAO,EAAE,cAAc,CAAC,aAAa,EAAE,EAAO,EAAE,CAAC,GAAG,eAAe,CAAE,MAAO,SAAU,EAChG,EAAG,CAAC,EAAO,EAgBT,CAAA,EAAA,EAAA,GAAA,EAAC,GAAA,MAAM,CAAA,CAAC,KAAM,EAAM,aAAc,AAAC,IAAY,AAAC,GAAG,GAAU,WAC3D,CAAA,EAAA,EAAA,IAAA,EAAC,GAAA,aAAa,CAAA,CAAC,UAAU,gGACvB,CAAA,EAAA,EAAA,GAAA,EAAC,GAAA,WAAW,CAAA,CAAC,UAAU,mBAAU,oBACjC,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,qEACb,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,MAAM,CAAA,CAAC,UAAU,6BAA6B,aAAW,CAAA,CAAA,IAC1D,CAAA,EAAA,EAAA,GAAA,EAAC,QAAA,CACC,SAAS,CAAA,CAAA,EACT,KAAK,WACL,gBAAe,EAAK,MAAM,CAAG,EAC7B,gBAAc,WACd,oBAAkB,OAClB,wBAAuB,CAAI,CAAC,EAAO,CAAG,CAAC,IAAI,EAAE,EAAA,CAAQ,MAAG,EACxD,MAAO,EACP,SAAW,AAAD,IAAS,EAAS,EAAE,MAAM,CAAC,KAAK,EAAG,EAAe,EAAG,EAC/D,UA5BV,CA4BqB,QA5BZ,AAAc,CAAwC,EAC/C,aAAa,CAAvB,EAAE,GAAG,EACP,EAAE,cAAc,GAChB,EAAe,KAAK,GAAG,CAAC,EAAS,EAAG,EAAK,MAAM,CAAG,KAC/B,WAAW,CAArB,EAAE,GAAG,EACd,EAAE,cAAc,GAChB,EAAe,KAAK,GAAG,CAAC,EAAS,EAAG,KACjB,SAAS,CAAnB,EAAE,GAAG,GACd,EAAE,cAAc,GAChB,CAAI,CAAC,EAAO,EAAE,MAElB,EAkBU,YAAY,oCACZ,UAAU,yFAGd,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,IAAK,EAAS,GAAG,WAAW,KAAK,UAAU,aAAW,UAAU,UAAU,0CAC5E,EAAO,GAAG,CAAC,CAAC,OAAE,CAAK,CAAE,OAAK,CAAE,OAAK,CAAE,GAClC,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAA8B,KAAK,QAAQ,kBAAiB,CAAC,MAAM,EAAE,EAAA,CAAO,WAC3E,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,GAAI,CAAC,MAAM,EAAE,EAAA,CAAO,CAAE,KAAK,eAAe,UAAU,uFACtD,IAEF,EAAM,GAAG,CAAC,CAAC,EAAK,KAAQ,IAAM,EAAI,EAAQ,EAAG,MAC9C,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAEC,GAAI,CAAC,IAAI,EAAE,EAAA,CAAG,CACd,aAAY,EACZ,KAAK,SACL,gBAAe,IAAM,EACrB,QAAS,EAAI,GAAG,CAChB,YAAa,IAAM,EAAe,GAClC,UAAW,CAAA,EAAA,EAAA,EAAA,AAAE,EACX,4HACA,IAAM,EAAS,wBAA0B,wBAG1C,EAAI,IAAI,CACR,EAAI,IAAI,EAAI,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,UAAU,qDAA6C,EAAI,IAAI,GAClF,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,UAAU,6BAAqB,EAAI,KAAK,GAC7C,EAAI,MAAM,EAAI,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,UAAU,2CAAmC,EAAI,MAAM,GAC3E,EAAI,GAAG,EACN,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,UAAU,kGAA0F,EAAI,GAAG,KAjB7G,EAAI,EAAE,CAoBX,KA1BM,CAAA,EAAG,EAAM,CAAC,EAAE,EAAA,CAAO,GA6B9B,GAAe,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,UAAU,8CAAqC,oBACnE,GAAc,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,KAAK,QAAQ,UAAU,+CAAsC,mDAChE,IAAhB,EAAK,MAAM,EAAU,CAAC,GAAe,CAAC,GACrC,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,yDAA+C,oBAAkB,EAAE,cAM9F,CAGA,eAAe,GAAY,CAAiB,EAC1C,GAAI,CACF,IAAM,EAAM,MAAM,MAAM,CAAC,aAAa,EAAE,EAAU,cAAc,CAAC,EAEjE,GAAI,CAAC,EAAI,EAAE,CAAE,MAAM,AAAI,MAAM,CAAC,KAAK,EAAE,EAAI,MAAM,CAAA,CAAE,EACjD,IAAM,EAAwB,CAAE,GAAG,EAAA,gBAAgB,CAAE,GAAI,MAAM,EAAI,IAAI,EAAE,AAAE,EAC3E,EAAS,KAAK,CAAG,SAAS,eAAe,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAU,QAAU,OACjF,CAAA,EAAA,EAAA,UAAA,AAAU,EAAC,EAAS,KAAK,EACzB,MAAM,MAAM,CAAC,aAAa,EAAE,EAAU,cAAc,CAAC,CAAE,CACrD,OAAQ,MACR,QAAS,CAAE,eAAgB,kBAAmB,EAC9C,KAAM,KAAK,SAAS,CAAC,EACvB,EACF,CAAE,MAAO,EAAG,CACV,QAAQ,IAAI,CAAC,sCAAuC,EACtD,CACF,CCpRO,SAAS,GAAU,MAAE,CAAIX,CAAE,SAAO,CAAE,WAAS,WAAEP,CAAS,CAAkB,EAC/E,GAAMS,CAAC,EAAMC,EAAQ,CAAG,CAAA,EAAA,EAAA,QAAQ,AAAR,EAAoB,EAAE,EACxC,CAAC,EAAO,EAAS,CAAG,CAAA,EAAA,EAAA,QAAA,AAAQ,EAAC,IAC7B,CAAC,EAAa,EAAe,CAAG,CAAA,EAAA,EAAA,QAAQJ,AAAR,EAAS,GACzC,EAAU,CAAA,EAAA,EAAA,MAAA,AAAM,EAAiBQ,MAEjC,CAAC,EAAS,EAAW,CAAG,CAAA,EAAA,EAAA,QAAA,AAAQ,EAAC,GACnC,IAAS,IACX,EAAW,GADS,AAEhBR,IAAQ,EAAF,AAAW,IAAK,EAAe,KAI3C,CAAA,EAAA,EAAA,SAAA,AAAS,EAAC,KACH,GACL,GADW,GACL,CAAC,SAAS,EAAE,EAAA,CAAW,EAC1B,IAAI,CAAC,AAAC,GAAM,EAAE,IAAI,IAClB,IAAI,CAAC,AAAC,GAAM,EAAQ,MAAM,OAAO,CAAC,GAAK,EAAI,EAAE,GAC7C,KAAK,CAAC,IAAM,EAAQ,EAAE,EAC3B,EAAG,CAAC,EAAM,EAAU,EAEpB,IAAM,EAAU,CAAA,EAAA,EAAA,OAAA,AAAO,EAAC,IAAM,GAAY,EAAO,EAAM,AAAC,GAAMH,EAAE,IAAI,EAAG,CAAC,EAAO,EAAK,EAC9EC,EAAQ,EAAQ,KAAK,CAACgB,GAAG,GAM/B,SAAS,EAAO,CAAwB,EACjC,IACL,CADUnB,CACA,EAAI,IAAI,EAClB,IACF,OARA,CAAA,EAAA,EAAA,SAAA,AAAS,EAAC,KACR,EAAQ,OAAO,EAAE,cAAc,CAAC,aAAa,EAAE,EAAY,EAAE,CAAC,GAAG,eAAe,CAAE,MAAO,SAAUoB,EACrG,EAAG,CAAC,EAAY,EAsBd,CAAA,EAAA,EAAA,GAAA,EAAC,GAAA,MAAM,CAAA,CAAC,KAAM,EAAM,aAAc,AAAC,IAAY,AAAC,GAAG,GAAU,WAC3D,CAAA,EAAA,EAAA,IAAA,EAAC,GAAA,aAAa,CAAA,CAAC,UAAU,gGACvB,CAAA,EAAA,EAAA,GAAA,EAAC,GAAA,WAAW,CAAA,CAAC,UAAU,mBAAU,eACjC,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,KAAK,CAAA,CACJ,SAAS,CAAA,CAAA,EACT,KAAK,WACL,gBAAe,EAAM,MAAM,CAAG,EAC9B,gBAAc,kBACd,oBAAkB,OAClB,wBAAuB,CAAK,CAAC,EAAY,CAAG,CAAC,WAAW,EAAE,EAAA,CAAa,MAAG,EAC1E,MAAO,EACP,SAAU,AAAC,IAAQ,EAAS,EAAE,MAAM,CAAC,KAAK,EAAG,EAAe,EAAG,EAC/D,UA1BR,CA0BmB,QA1BV,AAAc,CAAwC,EAC/C,cAAV,EAAE,GAAG,EAAqB,EAAE,OAAO,EAAI,AAAU,KAAM,GAAd,GAAG,EAC9C,EAAE,cAAc,GAChB,EAAe,AAAC,GAAM,KAAK,GAAG,CAAC,EAAI,EAAG,EAAM,MAAM,CAAG,KAClC,YAAV,EAAE,GAAG,EAAmB,EAAE,OAAO,EAAc,KAAM,CAAhB,EAAE,GAAG,EACnD,EAAE,cAAc,GAChB,EAAe,AAAC,GAAM,KAAK,GAAG,CAAC,EAAI,EAAG,KACnB,SAAS,CAAnB,EAAE,GAAG,GACd,EAAE,cAAc,GAChB,EAAO,CAAK,CAAC,EAAY,EAE7B,EAgBQ,YAAY,cACZ,UAAU,0IAEZ,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,IAAK,EAAS,GAAG,kBAAkB,KAAK,UAAU,aAAW,QAAQ,UAAU,0CACjF,EAAM,GAAG,CAAC,CAAC,EAAK,KACf,IAAM,EAAQ,EAAI,IAAI,CAAC,WAAW,CAAC,KACnC,MACE,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAEC,GAAI,CAAC,WAAW,EAAE,EAAA,CAAG,CACrB,aAAY,EACZ,KAAK,SACL,gBAAe,IAAgB,EAC/B,QAAS,IAAM,EAAO,GACtB,YAAa,IAAM,EAAe,GAClC,UAAW,CAAA,EAAA,EAAA,EAAA,AAAE,EACX,kGACA,IAAgB,EAAI,wBAA0B,wBAGhD,CAAA,EAAA,EAAA,GAAA,EAAC,GAAA,QAAQ,CAAA,CAAC,aAAW,CAAA,CAAA,EAAC,UAAU,oCAChC,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,UAAU,6BAAqB,EAAI,IAAI,CAAC,KAAK,CAAC,EAAQ,KAC3D,EAAQ,GAAK,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,UAAU,uCAA+B,EAAI,IAAI,CAAC,KAAK,CAAC,EAAG,OAd1E,EAAI,IAAI,CAiBnB,GACkB,IAAjB,EAAM,MAAM,EAAU,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,KAAK,eAAe,UAAU,oDAA2C,sBACpG,EAAQ,MAAM,GAAG,EAChB,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,2CAAkC,EAAQ,MAAM,CAnGvD,EAmG0D,CAAY,0CAM1F,CFxGA,IAAA,GAAA,EAAA,CAAA,CAAA,QPNA,GAAA,EAAA,CAAA,CAAA,QAGO,SAAS,KACd,GAAM,OAAE,CAAK,CAAE,SAAO,YAAE,CAAU,CAAE,CAAG,CAAA,EAAA,EAAA,QAAA,AAAQ,IACzC,EAAS,CAAA,EAAA,EAAA,SAAA,AAAS,IAClB,EAAQ,EAAM,IAAI,CAAC,AAAC,GAAM,EAAE,EAAE,GAAK,IAAU,OAAS,OAE5D,MACE,CAAA,EAAA,EAAA,GAAA,EAAC,GAAA,MAAM,CAAA,CAAC,KAAM,CAAC,CAAC,EAAS,aAAc,AAAC,IAAe,AAAC,GAAM,GAAa,WACzE,CAAA,EAAA,EAAA,IAAA,EAAC,GAAA,aAAa,CAAA,CACZ,wBAAkB,EAClB,UAAU,8IAEV,CAAA,EAAA,EAAA,GAAA,EAAC,GAAA,WAAW,CAAA,CAAC,UAAUT,mBAAW,IACjC,GACC,CAAA,EAAA,EAAA,GAAA,EAAC,GAAA,QAAQ,CAAA,CACP,OAAQ,EACR,QAAQ,QACR,WAAY,EACZ,SAAU,KAAQ,EAAW,CAAEK,MAAM,CAAK,GAAI,EAAO,IAAI,CAAC,CAAC,SAAS,EAAE,mBAAmB,GAAA,CAAU,CAAEZ,QAMjH,COlBA,IAAA,GAAA,EAAA,CAAA,CAAA,QAkBA,IAAMgB,GAAoB,CACxB,CAAE,MAAO,QAAS,KAAM,EAAA,cAAc,CAAC,GAAG,CAAC,CAAC,KAAE,CAAG,OAAE,CAAK,MAAE,CAAI,CAAE,GAAKjB,CAAC,KAAE,EAAK,YAAa,GAAQ,CAAM,CAAC,EAAG,KACxG,CAAC,OAAQiB,QAAS,YAAa,kBAAkB,CAAW,GAAG,CAAC,AAAC,IAAW,IAAD,GAC7E,EAAO,KAAM,EAAA,eAAe,CAAC,MAAM,CAAC,AAAC,GAAM,EAAE,OAAO,GAAK,GAAO,GAAG,CAAC,CAAC,KAAE,CAAG,OAAE,CAAK,CAAE,GAAK,AAAC,MAAE,EAAK,YAAa,EAAM,CAAC,EACtH,CAAC,EACF,CAEK,GAAW,gMAEjB,SAAS,GAAe,UAAE,CAAQ,CAAiC,EACjE,GAAM,SAAE,CAAO,SAAE,CAAO,CAAE,UAAQ,eAAE,CAAa,eAAE,CAAa,CAAE,iBAAe,OAAE,CAAK,SAAE,CAAO,WAAE,CAAS,CAAE,CAAG,CAAA,EAAA,EAAA,MAAA,AAAM,IACjH,EAAS,CAAA,EAAA,EAAA,SAAA,AAAS,IAClB,EAAW,CAAA,EAAA,EAAA,WAAA,AAAW,IACtB,CAAC,EAAU,EAAY,CAAG,CAAA,EAAA,EAAA,QAAA,AAAQ,GAAC,GACnC,CAAC,EAAS,EAAW,CAAG,CAAA,EAAA,EAAA,QAAA,AAAQ,GAAC,GACjC,CAAC,EAAW,EAAa,CAAG,CAAA,EAAA,EAAA,QAAA,AAAQ,EAAC,IACrC,CAAC,EAAY,EAAc,CAAG,CAAA,EAAA,EAAA,QAAA,AAAQ,GAAC,GACvC,aAAE,CAAW,CAAE,CAAG,CAAA,EAAA,EAAA,QAAA,AAAQ,IAC1B,EAAc,CAAA,EAAA,EAAA,MAAA,AAAM,GAAC,GACrB,EAAc,CAAA,EAAA,EAAA,MAAA,AAAM,EAAC,GAIrB,EAAc,GAAS,WA8D7B,CA7DA,CAAA,EAAA,EAAA,SAAA,AAAS,EAAC,KAER,IAAM,EAAO,CADA,CAAA,EAAA,EAAA,SAAA,AAAS,EAAC,GACH,EAAY,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC,OAChD,EAAS,SAAS,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE,EAAI,GACzD,SAAS,KAAK,CAAG,CAAA,EAAG,EAAA,EAAS,EAAO,CAAA,EAAG,EAAK,GAAG,CAAC,CAAG,GAAG,OAAO,CAAC,CAC1D,EAAY,OAAO,GAAK,IAC5B,EAAY,IAD0B,GACnB,CAAG,EAClB,EAFyC,AAE7B,OAAO,EAAE,SAAS,cAAc,CAAC,SAAS,MAAM,CAAE,QAFoC,OAErB,CAAK,GACxF,EAAG,CAAC,EAAU,EAAY,EAG1B,CAAA,EAAA,EAAA,SAAA,AAAS,EAAC,KACR,IAAM,EAAQ,KAAQ,EAAY,OAAO,EAAG,CAAK,EAC3C,EAAY,KAAQ,EAAY,OAAO,EAAG,CAAM,EAGtD,OAFA,OAAO,gBAAgB,CAAC,UAAW,GAAO,GAC1C,OAAO,gBAAgB,CAAC,cAAe,EAAW,IAC3C,KACL,OAAO,mBAAmB,CAAC,UAAW,GAAO,GAC7C,OAAO,mBAAmB,CAAC,cAAe,GAAW,EACvD,CACF,EAAG,EAAE,EAEL,CAAA,EAAA,EAAA,SAAA,AAAS,EAAC,KACR,SAAS,EAAM,CAAgB,EAC7B,GAAI,CAAC,EAAE,OAAO,EAAI,EAAE,OAAA,AAAO,GAAK,AAAU,QAAR,GAAG,CAAU,CAC7C,EAAE,cAAc,GAChB,EAAW,GAAK,CAAC,GACjB,MACF,CAEA,GAAI,CAAC,EAAE,OAAO,EAAI,EAAE,OAAA,AAAO,GAAe,MAAV,EAAE,GAAG,CAAU,CAC7C,EAAE,cAAc,GAChB,GAAW,GACX,EAAa,GAAK,CAAC,GACnB,MACF,CAEA,GAAI,CAAC,CAAA,EAAA,EAAA,oBAAA,AAAoB,EAAC,GAAI,OAC9B,IAAM,EAAO,CAAA,EAAA,EAAA,UAAA,AAAU,EAAC,EAAE,GAAG,EAC7B,GAAI,EAAM,YAAE,EAAO,IAAI,CAAC,GACxB,OAAQ,EAAE,GAAG,EAEX,KAAK,EAAA,QAAQ,CAAE,EAAE,cAAc,GAAI,IAAe,KAClD,KAAK,IAAK,EAAY,AAAC,GAAM,CAAC,GAAI,KAClC,KAAK,SAAU,EAAY,IAAQ,KACnC,KAAK,IACH,EAAE,cAAc,GACC,SAAS,CAAtB,EACF,SAAS,cAAc,CAAC,eAAe,QAC9B,AAAa,UAAU,GAChC,SAAS,cAAc,CAAC,iBAAiB,QAEzC,EAAO,IAAI,CAAC,QAGlB,CACF,CAEA,OADA,OAAO,gBAAgB,CAAC,UAAW,GAC5B,IAAM,OAAO,mBAAmB,CAAC,UAAW,EACrD,EAAG,CAAC,EAAQ,EAAU,EAAY,EAE9B,GAAgB,CAAA,EAAA,EAAA,CAAP,EAAO,EAAC,EAAA,CAAA,GAGnB,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,WAEC,CAAA,EAAA,EAAA,GAAA,EAAC,IAAA,CAAE,KAAK,gBAAgB,UAAW,YAAU,yBAC7C,CAAA,EAAA,EAAA,GAAA,EAAC,IAAA,CAAE,KAAK,QAAQ,UAAW,YAAU,oBACrC,CAAA,EAAA,EAAA,GAAA,EAAC,GAAA,CAAW,MAAO,IACnB,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,CAAa,UAAU,oBACtB,CAAA,EAAA,EAAA,GAAA,EAAC,GAAA,CACC,QAAS,EACT,SAAU,EACV,cAAe,EACf,cAAe,EACf,gBAAiB,EACjB,aAAc,EACd,aAAc,IAAM,GAAW,KAEjC,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,GAAG,OAAO,SAAU,CAAC,EAAG,UAAU,uDAA+C,IACvF,CAAA,EAAA,EAAA,GAAA,EAAC,GAAA,CAAA,GACD,CAAA,EAAA,EAAA,GAAA,EAAC,GAAA,OAAO,CAAA,CAAA,GACR,CAAA,EAAA,EAAA,GAAA,EAAC,GAAA,eAAe,CAAA,CAAA,GAEhB,CAAA,EAAA,EAAA,GAAA,EAAC,GAAA,CACC,KAAM,EACN,QAAS,IAAM,GAAa,GAC5B,UAAW,EACX,UAAW,IAEb,CAAA,EAAA,EAAA,GAAA,EAAC,GAAA,CACC,KAAM,EACN,QAAS,IAAM,GAAW,GAC1B,UAAW,EACX,SAAU,KAAQ,GAAW,GAAQ,GAAc,EAAM,EACzD,YAAa,KAAQ,EAAW,IAAQ,GAAa,EAAM,EAC3D,WAAY,KAAQ,GAAW,GAAQ,GAAY,EAAM,EACzD,UAAW,IAEb,CAAA,EAAA,EAAA,GAAA,EAAC,GAAA,WAAW,CAAA,CACV,KAAM,EACN,aAAc,EACd,UAAW,EACX,aAAc,MAAO,IAAW,MAAM,EAAQ,EAAM,IAItD,CAAA,EAAA,EAAA,GAAA,EAAC,GAAA,MAAM,CAAA,CAAC,KAAM,EAAU,aAAc,WACpC,CAAA,EAAA,EAAA,IAAA,EAAC,GAAA,aAAa,CAAA,CAAC,wBAAkB,EAAW,UAAU,+DACpD,CAAA,EAAA,EAAA,GAAA,EAAC,GAAA,WAAW,CAAA,CAAC,UAAU,4DAAmD,uBACzE,GAAkB,GAAG,CAAC,CAAC,OAAE,CAAK,MAAE,CAAI,CAAE,GACrC,CAAA,EAAA,EAAA,IAAA,EAAC,QAAA,CAAkB,UAAU,mDAC3B,CAAA,EAAA,EAAA,GAAA,EAAC,UAAA,CAAQ,UAAU,uFAA+E,IAClG,CAAA,EAAA,EAAA,GAAA,EAAC,QAAA,UACE,EAAK,GAAG,CAAC,CAAC,KAAE,CAAG,aAAE,CAAW,CAAE,GAC7B,CAAA,EAAA,EAAA,IAAA,EAAC,KAAA,CAAa,UAAU,kDACtB,CAAA,EAAA,EAAA,GAAA,EAAC,KAAA,CAAG,UAAU,8CACZ,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,UAAU,wFACZ,MAGL,CAAA,EAAA,EAAA,GAAA,EAAC,KAAA,CAAG,UAAU,6BAAqB,MAN5B,QAJH,cAqB1B,kBAvKe,SAAS,AAAU,UAAE,CAAQ,CAAiC,EAC3E,MACE,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,WAAW,CAAA,WACV,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CAAA,GACD,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,YAAYjB,CAAAA,UACX,CAAA,EAAA,EAAA,GAAA,EAAC,GAAA,UAAgB,QAIzB","ignoreList":[14,15,16,17,18,19,20,21]}
@@ -0,0 +1,3 @@
1
+ module.exports=[694739,a=>{"use strict";var b=a.i(662145),c=a.i(147758),d=a.i(174897),e=a.i(822404),f=a.i(256857);let g={name:"arrow-right",size:24,node:[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"m12 5 7 7-7 7",key:"xquz4c"}]]};g.node;let h=(0,f.default)(g);var i=a.i(425404),j=a.i(531761),k=a.i(270923),l=a.i(544394),m=a.i(173628);let n=/^\s*[-*]\s+\[( |x|X)\]\s+(.*)$/;var o=a.i(368114);function p({epic:a}){let c=a.match(/^(R\d+)\s*[—–-]\s*(.+)$/);return(0,b.jsxs)("h2",{className:"flex items-baseline gap-3 pt-2",children:[c&&(0,b.jsx)("span",{className:"font-mono text-[11px] text-muted",children:c[1]}),(0,b.jsx)("span",{className:"text-[1.1rem] leading-snug font-semibold text-txt",children:c?c[2]:a})]})}let q=/((?<=^|[\s(])\/[\w\-./#?=]+|\b[a-z][\w-]+\/[\w\-./]*\w|\b[\w-]+\.(?:md|json|tsx?|mts)\b|\b(?:[TR]\d{3}|ADR-\d{3})\b|\bvibedoc_\w+|\bmanualTests\b)/g;function r({text:a}){return(0,b.jsx)(b.Fragment,{children:a.split(q).map((a,c)=>c%2?(0,b.jsx)("code",{className:"font-mono text-[0.9em]",children:a},c):a)})}function s({text:a,checked:c}){let d=a.indexOf(" → "),e=d<0?a:a.slice(0,d),f=d<0?null:a.slice(d+3);return(0,b.jsxs)("span",{className:(0,o.cn)("flex min-w-0 flex-col gap-1 transition-colors duration-(--duration-base)",c?"text-muted line-through":"text-txt"),children:[(0,b.jsx)("span",{className:"text-sm leading-snug",children:(0,b.jsx)(r,{text:e})}),f&&(0,b.jsxs)("span",{className:"flex items-start gap-1.5 text-[13px] leading-snug text-muted",children:[(0,b.jsx)(h,{className:"mt-0.5 size-3.5 shrink-0","aria-hidden":!0}),(0,b.jsx)("span",{className:"sr-only",children:"Expected: "}),(0,b.jsx)("span",{children:(0,b.jsx)(r,{text:f})})]})]})}function t({t:a,checkedOf:d,onToggle:f}){let g=a.tests.items.filter(d).length,h=a.tests.total,i=g===h,j=[{label:"Steps",items:a.tests.items.filter(a=>"steps"===a.group)},{label:"Regression risk",items:a.tests.items.filter(a=>"regression"===a.group)}].filter(a=>a.items.length);return(0,b.jsxs)("article",{id:a.task.id,className:(0,o.cn)("scroll-mt-16 rounded-lg border bg-surface animate-fade-in transition-colors duration-(--duration-slow)",i?"border-teal/30":"border-border"),children:[(0,b.jsxs)("header",{className:"flex flex-col gap-3 px-4 pt-4 pb-3 sm:px-5",children:[(0,b.jsxs)("div",{className:"flex flex-wrap items-baseline gap-x-3 gap-y-1.5",children:[(0,b.jsx)("span",{className:"font-mono text-[11px] text-muted",children:a.task.id}),(0,b.jsx)(e.default,{href:`/board?task=${a.task.id}`,className:"min-w-0 flex-1 basis-60 text-[15px] leading-snug font-semibold text-txt hover:text-accent focus-visible:text-accent focus-visible:outline-none",children:a.task.title}),(0,b.jsxs)("span",{className:"flex items-center gap-3",children:[(0,b.jsx)(m.StatusChip,{status:(0,c.displayStatus)(a.task)}),(0,b.jsxs)("span",{className:"font-mono text-[11px] text-muted tabular-nums",children:[(0,b.jsx)("span",{className:"text-txt",children:g}),"/",h]})]})]}),(0,b.jsx)("div",{className:"flex gap-0.5",role:"progressbar","aria-label":`${a.task.id} manual tests`,"aria-valuemin":0,"aria-valuemax":h,"aria-valuenow":g,children:a.tests.items.map(a=>(0,b.jsx)("span",{className:(0,o.cn)("h-1 flex-1 rounded-full transition-colors duration-(--duration-base)",d(a)?"bg-teal":"regression"===a.group?"bg-amber/25":"bg-border2")},a.index))})]}),(0,b.jsxs)("div",{className:"flex flex-col gap-4 border-t border-border px-4 py-4 sm:px-5",children:[j.map(a=>(0,b.jsxs)("div",{className:"flex flex-col gap-1",children:[(0,b.jsx)("p",{className:(0,o.cn)("font-mono text-[10px] uppercase tracking-widest","Steps"===a.label?"text-muted":"text-amber"),children:a.label}),(0,b.jsx)("ol",{className:"flex flex-col",children:a.items.map((c,e)=>{let g=d(c);return(0,b.jsx)("li",{children:(0,b.jsxs)("label",{className:"-mx-2 grid cursor-pointer grid-cols-[1rem_1.25rem_1fr] items-start gap-x-2.5 rounded-md px-2 py-2 hover:bg-surface2",children:[(0,b.jsx)(u,{checked:g,onChange:a=>f(c,a)}),(0,b.jsx)("span",{className:"mt-px font-mono text-[11px] leading-5 text-muted tabular-nums","aria-hidden":!0,children:"Steps"===a.label?String(e+1).padStart(2,"0"):""}),(0,b.jsx)(s,{text:c.text,checked:g})]})},c.index)})})]},a.label)),a.tests.date&&(0,b.jsxs)("p",{className:"font-mono text-[10px] text-muted",children:["Report from ",a.tests.date]})]})]})}function u({checked:a,onChange:c,className:d}){return(0,b.jsxs)("span",{className:(0,o.cn)("relative mt-0.5 flex size-4 shrink-0",d),children:[(0,b.jsx)("input",{type:"checkbox",checked:a,onChange:a=>c(a.target.checked),className:"peer size-4 cursor-pointer appearance-none rounded-sm border border-muted bg-bg transition-colors duration-(--duration-fast) checked:border-teal checked:bg-teal hover:border-txt focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent"}),(0,b.jsx)(i.Check,{strokeWidth:3,className:"pointer-events-none absolute inset-0.5 size-3 text-accent-fg opacity-0 peer-checked:opacity-100","aria-hidden":!0})]})}a.s(["default",0,function(){let{board:a,rootParam:c}=(0,l.useApp)(),[e,f]=(0,d.useState)(!1),[g,h]=(0,d.useState)({}),[i,m]=(0,d.useState)(null),[o,q]=(0,d.useState)([]),r=(0,d.useMemo)(()=>(a?Object.values(a).flat():[]).flatMap(a=>{let b=a.raw?function(a){let b=a.split("\n"),c=function(a){let b,c=(b=!1,a.map(a=>/^\s*```/.test(a)?(b=!b,!0):b)),d=a.findIndex((a,b)=>!c[b]&&"## Manual tests"===a.trim());if(d<0)return null;let e=a.findIndex((a,b)=>b>d&&!c[b]&&/^##\s/.test(a));return[d,e<0?a.length:e]}(b);if(!c)return null;let d=[],e="steps",f=null;for(let a of b.slice(c[0]+1,c[1])){let b=a.match(/^_(\d{4}-\d{2}-\d{2})\b/);if(b&&!f&&!d.length){f=b[1];continue}if(/^\s*###\s/.test(a)){e=/^\s*###\s+regression/i.test(a)?"regression":"steps";continue}let c=a.match(n);c&&d.push({text:c[2].trim(),checked:" "!==c[1],group:e,index:d.length})}return d.length?{items:d,total:d.length,done:d.filter(a=>a.checked).length,date:f}:null}(a.raw):null;return b?[{task:a,tests:b}]:[]}),[a]),s=(a,b)=>{let c=g[`${a.task.id}:${b.index}`];return c&&c.raw===a.task.raw?c.checked:b.checked},v=a=>a.tests.items.filter(b=>!s(a,b)).length,w=r.filter(a=>v(a)>0),x=e?r:r.filter(a=>v(a)>0||o.includes(a.task.id)),y=w.reduce((a,b)=>a+v(b),0),z=(0,d.useMemo)(()=>{let a=new Map;for(let b of[...x].sort((a,b)=>(b.tests.date??"").localeCompare(a.tests.date??"")||b.task.id.localeCompare(a.task.id))){let c=b.task.phase||"No epic";a.set(c,[...a.get(c)??[],b])}return[...a.entries()]},[x]),A=r.length>0;async function B(a,b,d){let e=`${a.task.id}:${b.index}`;m(null),h(b=>({...b,[e]:{checked:d,raw:a.task.raw??""}})),d&&1===v(a)&&q(b=>[...b,a.task.id]);try{let e=await fetch(`/api/tasks/manual-tests${c}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({id:a.task.id,index:b.index,checked:d})});if(!e.ok)throw Error((await e.json().catch(()=>null))?.error??`Request failed (${e.status})`)}catch(b){h(a=>{let b={...a};return delete b[e],b}),m(`Couldn't save the tick on ${a.task.id}: ${b.message}. The box is back as it was; try again.`)}}return(0,d.useEffect)(()=>{let a=window.location.hash.slice(1);a&&A&&document.getElementById(a)?.scrollIntoView({block:"start",behavior:"smooth"})},[A]),(0,b.jsxs)("div",{className:"mx-auto flex max-w-4xl flex-col gap-6 px-6 py-8",children:[(0,b.jsxs)("header",{className:"flex flex-wrap items-end gap-x-6 gap-y-3 border-b border-border pb-5",children:[(0,b.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,b.jsx)("h1",{className:"text-[1.6rem] leading-tight font-semibold tracking-[-0.02em] text-txt",children:"Manual tests"}),(0,b.jsx)("p",{className:"mt-2 text-[1.1rem] leading-snug font-semibold text-txt",children:w.length?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("span",{className:"font-mono tabular-nums",children:y})," check",1===y?"":"s"," left across"," ",(0,b.jsx)("span",{className:"font-mono tabular-nums",children:w.length})," task",1===w.length?"":"s"]}):r.length?"Everything is checked":"Nothing to check yet"}),(0,b.jsx)("p",{className:"mt-1 text-sm text-muted",children:"Ticking saves to the task file. It never changes the task's status."})]}),(0,b.jsxs)("label",{className:"flex w-full cursor-pointer items-center gap-2 text-xs text-muted select-none hover:text-txt sm:w-auto",children:[(0,b.jsx)(u,{checked:e,onChange:f,className:"mt-0"}),"Show fully tested ",(0,b.jsxs)("span",{className:"font-mono tabular-nums",children:["(",r.length-w.length,")"]})]})]}),i&&(0,b.jsx)("p",{role:"alert",className:"rounded-md border border-danger/30 bg-danger/5 px-3 py-2 text-xs text-danger",children:i}),0===r.length&&(0,b.jsxs)("div",{className:"flex flex-col items-start gap-2 rounded-lg border border-dashed border-border2 p-6 animate-fade-in",children:[(0,b.jsx)(k.FlaskConical,{className:"size-5 text-muted"}),(0,b.jsx)("p",{className:"text-sm text-txt",children:"No manual test reports yet"}),(0,b.jsxs)("p",{className:"max-w-lg text-xs leading-relaxed text-muted",children:["When an agent finishes a task with ",(0,b.jsx)("code",{className:"font-mono",children:"vibedoc_update_task"})," and a ",(0,b.jsx)("code",{className:"font-mono",children:"manualTests"})," checklist, the steps to click through show up here."]})]}),r.length>0&&0===z.length&&(0,b.jsxs)("div",{className:"flex items-center gap-2.5 rounded-lg border border-teal/30 px-4 py-3 text-sm text-txt animate-fade-in",children:[(0,b.jsx)(j.CircleCheck,{className:"size-4 shrink-0 text-teal","aria-hidden":!0}),"All ",r.length," report",1===r.length?" is":"s are"," fully checked. Turn on Show fully tested to see them again."]}),z.map(([a,c])=>(0,b.jsxs)("section",{className:"flex flex-col gap-4",children:[(0,b.jsx)(p,{epic:a}),c.map(a=>(0,b.jsx)(t,{t:a,checkedOf:b=>s(a,b),onToggle:(b,c)=>B(a,b,c)},a.task.id))]},a))]})}],694739)}];
2
+
3
+ //# sourceMappingURL=src_app_%28app%29_manual-tests_page_tsx_01tnunf._.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/app/%28app%29/manual-tests/page.tsx","../../../../node_modules/.pnpm/lucide-react%401.48.0_react%4019.3.0/node_modules/lucide-react/src/icons/arrow-right.ts","../../../../src/lib/manual-tests.ts"],"sourcesContent":["\"use client\"\n\nimport { displayStatus } from \"@/lib/statuses\"\nimport { useEffect, useMemo, useState } from \"react\"\nimport Link from \"next/link\"\nimport { ArrowRight, Check, CircleCheck, FlaskConical } from \"lucide-react\"\nimport { useApp } from \"@/context/AppContext\"\nimport { StatusChip } from \"@/components/shared/StatusIcon\"\nimport { parseManualTests, type ManualTestItem, type ManualTests } from \"@/lib/manual-tests\"\nimport { cn } from \"@/lib/utils\"\nimport type { Task } from \"@/types\"\n\ninterface Tested { task: Task; tests: ManualTests }\n\n/** A tick not yet reflected in the board data, keyed \"T001:3\"; only applies while the task file is unchanged. */\ntype Pending = Record<string, { checked: boolean; raw: string }>\n\nexport default function ManualTestsPage() {\n const { board, rootParam } = useApp()\n const [showTested, setShowTested] = useState(false)\n const [pending, setPending] = useState<Pending>({})\n const [error, setError] = useState<string | null>(null)\n // Tasks finished during this visit stay in place (marked done) instead of vanishing under the cursor\n const [finishedHere, setFinishedHere] = useState<string[]>([])\n\n const all = useMemo<Tested[]>(() => {\n const tasks = board ? Object.values(board).flat() : []\n return tasks.flatMap((task) => {\n const tests = task.raw ? parseManualTests(task.raw) : null\n return tests ? [{ task, tests }] : []\n })\n }, [board])\n\n const checkedOf = (t: Tested, item: ManualTestItem) => {\n const p = pending[`${t.task.id}:${item.index}`]\n return p && p.raw === t.task.raw ? p.checked : item.checked\n }\n const remaining = (t: Tested) => t.tests.items.filter((i) => !checkedOf(t, i)).length\n\n const open = all.filter((t) => remaining(t) > 0)\n const shown = showTested ? all : all.filter((t) => remaining(t) > 0 || finishedHere.includes(t.task.id))\n const itemsLeft = open.reduce((n, t) => n + remaining(t), 0)\n\n // Group by epic (Phase); newest report first, both for groups and for tasks inside them\n const groups = useMemo(() => {\n const byEpic = new Map<string, Tested[]>()\n for (const t of [...shown].sort((a, b) => (b.tests.date ?? \"\").localeCompare(a.tests.date ?? \"\") || b.task.id.localeCompare(a.task.id))) {\n const key = t.task.phase || \"No epic\"\n byEpic.set(key, [...(byEpic.get(key) ?? []), t])\n }\n return [...byEpic.entries()]\n }, [shown])\n\n // /manual-tests#T060 (the card badge): scroll that task into view once it's rendered\n const hasTasks = all.length > 0\n useEffect(() => {\n const id = window.location.hash.slice(1)\n if (id && hasTasks) document.getElementById(id)?.scrollIntoView({ block: \"start\", behavior: \"smooth\" })\n }, [hasTasks])\n\n async function toggle(t: Tested, item: ManualTestItem, checked: boolean) {\n const key = `${t.task.id}:${item.index}`\n setError(null)\n setPending((p) => ({ ...p, [key]: { checked, raw: t.task.raw ?? \"\" } }))\n if (checked && remaining(t) === 1) setFinishedHere((ids) => [...ids, t.task.id])\n try {\n const res = await fetch(`/api/tasks/manual-tests${rootParam}`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ id: t.task.id, index: item.index, checked }),\n })\n if (!res.ok) throw new Error((await res.json().catch(() => null))?.error ?? `Request failed (${res.status})`)\n // The SSE task_updated refresh brings the new file; the pending entry stops applying once raw changes\n } catch (e) {\n setPending((p) => { const next = { ...p }; delete next[key]; return next })\n setError(`Couldn't save the tick on ${t.task.id}: ${(e as Error).message}. The box is back as it was; try again.`)\n }\n }\n\n return (\n <div className=\"mx-auto flex max-w-4xl flex-col gap-6 px-6 py-8\">\n <header className=\"flex flex-wrap items-end gap-x-6 gap-y-3 border-b border-border pb-5\">\n <div className=\"min-w-0 flex-1\">\n <h1 className=\"text-[1.6rem] leading-tight font-semibold tracking-[-0.02em] text-txt\">Manual tests</h1>\n <p className=\"mt-2 text-[1.1rem] leading-snug font-semibold text-txt\">\n {open.length ? (\n <>\n <span className=\"font-mono tabular-nums\">{itemsLeft}</span> check{itemsLeft === 1 ? \"\" : \"s\"} left across{\" \"}\n <span className=\"font-mono tabular-nums\">{open.length}</span> task{open.length === 1 ? \"\" : \"s\"}\n </>\n ) : all.length ? \"Everything is checked\" : \"Nothing to check yet\"}\n </p>\n <p className=\"mt-1 text-sm text-muted\">Ticking saves to the task file. It never changes the task&apos;s status.</p>\n </div>\n <label className=\"flex w-full cursor-pointer items-center gap-2 text-xs text-muted select-none hover:text-txt sm:w-auto\">\n <Tick checked={showTested} onChange={setShowTested} className=\"mt-0\" />\n Show fully tested <span className=\"font-mono tabular-nums\">({all.length - open.length})</span>\n </label>\n </header>\n\n {error && <p role=\"alert\" className=\"rounded-md border border-danger/30 bg-danger/5 px-3 py-2 text-xs text-danger\">{error}</p>}\n\n {all.length === 0 && (\n <div className=\"flex flex-col items-start gap-2 rounded-lg border border-dashed border-border2 p-6 animate-fade-in\">\n <FlaskConical className=\"size-5 text-muted\" />\n <p className=\"text-sm text-txt\">No manual test reports yet</p>\n <p className=\"max-w-lg text-xs leading-relaxed text-muted\">\n When an agent finishes a task with <code className=\"font-mono\">vibedoc_update_task</code> and a <code className=\"font-mono\">manualTests</code> checklist,\n the steps to click through show up here.\n </p>\n </div>\n )}\n\n {all.length > 0 && groups.length === 0 && (\n <div className=\"flex items-center gap-2.5 rounded-lg border border-teal/30 px-4 py-3 text-sm text-txt animate-fade-in\">\n <CircleCheck className=\"size-4 shrink-0 text-teal\" aria-hidden />\n All {all.length} report{all.length === 1 ? \" is\" : \"s are\"} fully checked. Turn on Show fully tested to see them again.\n </div>\n )}\n\n {groups.map(([epic, tasks]) => (\n <section key={epic} className=\"flex flex-col gap-4\">\n <EpicHeading epic={epic} />\n {tasks.map((t) => (\n <TaskTests key={t.task.id} t={t} checkedOf={(i) => checkedOf(t, i)} onToggle={(i, c) => toggle(t, i, c)} />\n ))}\n </section>\n ))}\n </div>\n )\n}\n\n/** \"R043 — Task verification & review\" → the ID in mono, the name as a headline. */\nfunction EpicHeading({ epic }: { epic: string }) {\n const m = epic.match(/^(R\\d+)\\s*[—–-]\\s*(.+)$/)\n return (\n <h2 className=\"flex items-baseline gap-3 pt-2\">\n {m && <span className=\"font-mono text-[11px] text-muted\">{m[1]}</span>}\n <span className=\"text-[1.1rem] leading-snug font-semibold text-txt\">{m ? m[2] : epic}</span>\n </h2>\n )\n}\n\n// Paths, commands, files, IDs and tool names inside a step (the Grep rule: set them in mono)\nconst CODE = /((?<=^|[\\s(])\\/[\\w\\-./#?=]+|\\b[a-z][\\w-]+\\/[\\w\\-./]*\\w|\\b[\\w-]+\\.(?:md|json|tsx?|mts)\\b|\\b(?:[TR]\\d{3}|ADR-\\d{3})\\b|\\bvibedoc_\\w+|\\bmanualTests\\b)/g\n\nfunction Inline({ text }: { text: string }) {\n return (\n <>\n {text.split(CODE).map((part, i) =>\n i % 2 ? <code key={i} className=\"font-mono text-[0.9em]\">{part}</code> : part,\n )}\n </>\n )\n}\n\n/** A step reads \"do this → see that\": the action, then the expected result on its own line. */\nfunction StepText({ text, checked }: { text: string; checked: boolean }) {\n const at = text.indexOf(\" → \")\n const action = at < 0 ? text : text.slice(0, at)\n const expected = at < 0 ? null : text.slice(at + 3)\n return (\n <span className={cn(\"flex min-w-0 flex-col gap-1 transition-colors duration-(--duration-base)\", checked ? \"text-muted line-through\" : \"text-txt\")}>\n <span className=\"text-sm leading-snug\"><Inline text={action} /></span>\n {expected && (\n <span className=\"flex items-start gap-1.5 text-[13px] leading-snug text-muted\">\n <ArrowRight className=\"mt-0.5 size-3.5 shrink-0\" aria-hidden />\n <span className=\"sr-only\">Expected: </span>\n <span><Inline text={expected} /></span>\n </span>\n )}\n </span>\n )\n}\n\nfunction TaskTests({ t, checkedOf, onToggle }: {\n t: Tested\n checkedOf: (item: ManualTestItem) => boolean\n onToggle: (item: ManualTestItem, checked: boolean) => void\n}) {\n const done = t.tests.items.filter(checkedOf).length\n const total = t.tests.total\n const complete = done === total\n const groups = [\n { label: \"Steps\", items: t.tests.items.filter((i) => i.group === \"steps\") },\n { label: \"Regression risk\", items: t.tests.items.filter((i) => i.group === \"regression\") },\n ].filter((g) => g.items.length)\n\n return (\n <article\n id={t.task.id}\n className={cn(\"scroll-mt-16 rounded-lg border bg-surface animate-fade-in transition-colors duration-(--duration-slow)\", complete ? \"border-teal/30\" : \"border-border\")}\n >\n <header className=\"flex flex-col gap-3 px-4 pt-4 pb-3 sm:px-5\">\n <div className=\"flex flex-wrap items-baseline gap-x-3 gap-y-1.5\">\n <span className=\"font-mono text-[11px] text-muted\">{t.task.id}</span>\n <Link href={`/board?task=${t.task.id}`} className=\"min-w-0 flex-1 basis-60 text-[15px] leading-snug font-semibold text-txt hover:text-accent focus-visible:text-accent focus-visible:outline-none\">\n {t.task.title}\n </Link>\n <span className=\"flex items-center gap-3\">\n <StatusChip status={displayStatus(t.task)} />\n <span className=\"font-mono text-[11px] text-muted tabular-nums\">\n <span className=\"text-txt\">{done}</span>/{total}\n </span>\n </span>\n </div>\n {/* One mark per item: the report's ruling, filled as you tick */}\n <div className=\"flex gap-0.5\" role=\"progressbar\" aria-label={`${t.task.id} manual tests`} aria-valuemin={0} aria-valuemax={total} aria-valuenow={done}>\n {t.tests.items.map((i) => (\n <span\n key={i.index}\n className={cn(\"h-1 flex-1 rounded-full transition-colors duration-(--duration-base)\", checkedOf(i) ? \"bg-teal\" : i.group === \"regression\" ? \"bg-amber/25\" : \"bg-border2\")}\n />\n ))}\n </div>\n </header>\n <div className=\"flex flex-col gap-4 border-t border-border px-4 py-4 sm:px-5\">\n {groups.map((g) => (\n <div key={g.label} className=\"flex flex-col gap-1\">\n <p className={cn(\"font-mono text-[10px] uppercase tracking-widest\", g.label === \"Steps\" ? \"text-muted\" : \"text-amber\")}>{g.label}</p>\n <ol className=\"flex flex-col\">\n {g.items.map((item, n) => {\n const checked = checkedOf(item)\n return (\n <li key={item.index}>\n <label className=\"-mx-2 grid cursor-pointer grid-cols-[1rem_1.25rem_1fr] items-start gap-x-2.5 rounded-md px-2 py-2 hover:bg-surface2\">\n <Tick checked={checked} onChange={(c) => onToggle(item, c)} />\n {/* Steps are a sequence; regression checks aren't */}\n <span className=\"mt-px font-mono text-[11px] leading-5 text-muted tabular-nums\" aria-hidden>{g.label === \"Steps\" ? String(n + 1).padStart(2, \"0\") : \"\"}</span>\n <StepText text={item.text} checked={checked} />\n </label>\n </li>\n )\n })}\n </ol>\n </div>\n ))}\n {t.tests.date && <p className=\"font-mono text-[10px] text-muted\">Report from {t.tests.date}</p>}\n </div>\n </article>\n )\n}\n\n/** The native checkbox, drawn in the system: pencil-grey box, teal fill with an ink check when ticked. */\nfunction Tick({ checked, onChange, className }: { checked: boolean; onChange: (checked: boolean) => void; className?: string }) {\n return (\n <span className={cn(\"relative mt-0.5 flex size-4 shrink-0\", className)}>\n <input\n type=\"checkbox\"\n checked={checked}\n onChange={(e) => onChange(e.target.checked)}\n className=\"peer size-4 cursor-pointer appearance-none rounded-sm border border-muted bg-bg transition-colors duration-(--duration-fast) checked:border-teal checked:bg-teal hover:border-txt focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent\"\n />\n <Check strokeWidth={3} className=\"pointer-events-none absolute inset-0.5 size-3 text-accent-fg opacity-0 peer-checked:opacity-100\" aria-hidden />\n </span>\n )\n}\n","import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'arrow-right',\n size: 24,\n node: [\n ['path', { d: 'M5 12h14', key: '1ays0h' }],\n ['path', { d: 'm12 5 7 7-7 7', key: 'xquz4c' }],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name ArrowRight\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNNSAxMmgxNCIgLz4KICA8cGF0aCBkPSJtMTIgNSA3IDctNyA3IiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/arrow-right\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ArrowRight = createLucideIcon(__iconData);\n\nexport default ArrowRight;\n","// Manual test report on a task (R043): a `## Manual tests` checklist section at the end of the task file.\n// Pure (no fs): core.ts reads/writes the file; `node src/lib/manual-tests.check.mts` runs the self-check.\n//\n// ## Manual tests\n// _2026-10-01 — ai_\n// ### Steps\n// - [ ] Open /roadmap, click \"Break down\" on R043 → a chat opens titled with the epic\n// ### Regression risk\n// - [ ] Dragging a card between columns still works\n\nexport const MANUAL_TESTS_HEADING = \"## Manual tests\"\n\nexport type ManualTestGroup = \"steps\" | \"regression\"\n\nexport interface ManualTestItem {\n text: string\n checked: boolean\n group: ManualTestGroup\n /** Position among all checklist items in the section (T061 toggles by this) */\n index: number\n}\n\nexport interface ManualTests {\n items: ManualTestItem[]\n total: number\n done: number\n /** From the `_YYYY-MM-DD — actor_` line; null if missing */\n date: string | null\n}\n\nconst ITEM = /^\\s*[-*]\\s+\\[( |x|X)\\]\\s+(.*)$/\nconst BULLET = /^\\s*[-*]\\s+(.*)$/\n\n/** Lines inside ``` fences, so an example section quoted in a task's spec is never taken for the real one. */\nfunction fenced(lines: string[]): boolean[] {\n let inFence = false\n return lines.map((l) => {\n if (/^\\s*```/.test(l)) { inFence = !inFence; return true }\n return inFence\n })\n}\n\n/** [start, end) line range of the section: its heading up to the next `## ` heading or the end of the file. */\nfunction sectionRange(lines: string[]): [number, number] | null {\n const code = fenced(lines)\n const start = lines.findIndex((l, i) => !code[i] && l.trim() === MANUAL_TESTS_HEADING)\n if (start < 0) return null\n const next = lines.findIndex((l, i) => i > start && !code[i] && /^##\\s/.test(l))\n return [start, next < 0 ? lines.length : next]\n}\n\n/**\n * The report body as a checklist: `### ` group headings kept, every other non-empty line becomes `- [ ] …`\n * (plain text and plain bullets alike). Items before any heading go under `### Steps`.\n */\nexport function normalizeReport(report: string): string {\n const out: string[] = []\n for (const raw of report.replace(/\\r\\n/g, \"\\n\").split(\"\\n\")) {\n const line = raw.trimEnd()\n if (!line.trim()) continue\n if (/^\\s*###\\s/.test(line)) { out.push(line.trim()); continue }\n if (/^\\s*##?\\s/.test(line)) continue // a stray \"## Manual tests\" or H1 from the agent\n const item = line.match(ITEM)\n const text = item ? item[2] : (line.match(BULLET)?.[1] ?? line.trim())\n if (!out.some((l) => l.startsWith(\"### \"))) out.push(\"### Steps\")\n out.push(`- [${item && item[1] !== \" \" ? \"x\" : \" \"}] ${text.trim()}`)\n }\n return out.join(\"\\n\")\n}\n\n/** Write the report as the task's `## Manual tests` section, replacing an older one (old ticks no longer apply). */\nexport function setManualTests(raw: string, report: string, actor: \"ai\" | \"human\", date: string): string {\n const body = normalizeReport(report)\n if (!body) throw new Error(\"manualTests is empty: give at least one checklist item\")\n const lines = raw.split(\"\\n\")\n const range = sectionRange(lines)\n const rest = range ? [...lines.slice(0, range[0]), ...lines.slice(range[1])] : lines\n const kept = rest.join(\"\\n\").replace(/\\s+$/, \"\")\n return `${kept}\\n\\n${MANUAL_TESTS_HEADING}\\n_${date} — ${actor}_\\n${body}\\n`\n}\n\n/** The checklist in a task file, or null when it has no `## Manual tests` section (or the section has no items). */\nexport function parseManualTests(raw: string): ManualTests | null {\n const lines = raw.split(\"\\n\")\n const range = sectionRange(lines)\n if (!range) return null\n const items: ManualTestItem[] = []\n let group: ManualTestGroup = \"steps\"\n let date: string | null = null\n for (const line of lines.slice(range[0] + 1, range[1])) {\n const stamp = line.match(/^_(\\d{4}-\\d{2}-\\d{2})\\b/)\n if (stamp && !date && !items.length) { date = stamp[1]; continue }\n if (/^\\s*###\\s/.test(line)) { group = /^\\s*###\\s+regression/i.test(line) ? \"regression\" : \"steps\"; continue }\n const m = line.match(ITEM)\n if (m) items.push({ text: m[2].trim(), checked: m[1] !== \" \", group, index: items.length })\n }\n if (!items.length) return null\n return { items, total: items.length, done: items.filter((i) => i.checked).length, date }\n}\n\n/** Tick or untick the `index`th checklist item of the `## Manual tests` section (file order), nothing else. */\nexport function toggleManualTest(raw: string, index: number, checked: boolean): string {\n const lines = raw.split(\"\\n\")\n const range = sectionRange(lines)\n if (!range) throw new RangeError(\"This task has no manual tests\")\n let n = 0\n for (let i = range[0] + 1; i < range[1]; i++) {\n if (!ITEM.test(lines[i])) continue\n if (n++ === index) {\n lines[i] = lines[i].replace(/\\[( |x|X)\\]/, checked ? \"[x]\" : \"[ ]\")\n return lines.join(\"\\n\")\n }\n }\n throw new RangeError(`No manual test item ${index} (the task has ${n})`)\n}\n"],"names":[],"mappings":"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","ignoreList":[1]}