vibedoc 1.9.0 → 1.10.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.
- package/.next/BUILD_ID +1 -1
- package/.next/build-manifest.json +3 -3
- package/.next/prerender-manifest.json +13 -13
- package/.next/server/app/(app)/activity/page.js.nft.json +1 -1
- package/.next/server/app/(app)/activity/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/board/page.js.nft.json +1 -1
- package/.next/server/app/(app)/board/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/chat/page.js.nft.json +1 -1
- package/.next/server/app/(app)/chat/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/docs/page.js.nft.json +1 -1
- package/.next/server/app/(app)/docs/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/explorer/page.js.nft.json +1 -1
- package/.next/server/app/(app)/explorer/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/manual-tests/page.js.nft.json +1 -1
- package/.next/server/app/(app)/manual-tests/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/memory/page.js.nft.json +1 -1
- package/.next/server/app/(app)/memory/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/roadmap/page.js.nft.json +1 -1
- package/.next/server/app/(app)/roadmap/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/settings/page.js.nft.json +1 -1
- package/.next/server/app/(app)/settings/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/setup/page.js.nft.json +1 -1
- package/.next/server/app/(app)/setup/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_global-error.html +1 -1
- package/.next/server/app/_global-error.rsc +1 -1
- package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_not-found.html +1 -1
- package/.next/server/app/_not-found.rsc +2 -2
- package/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
- package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/activity.html +1 -1
- package/.next/server/app/activity.rsc +23 -22
- package/.next/server/app/activity.segments/!KGFwcCk/activity/__PAGE__.segment.rsc +9 -11
- package/.next/server/app/activity.segments/_full.segment.rsc +23 -22
- package/.next/server/app/activity.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/api/activity/route.js +1 -1
- package/.next/server/app/api/activity/route.js.nft.json +1 -1
- package/.next/server/app/api/backlinks/route.js +1 -1
- package/.next/server/app/api/backlinks/route.js.nft.json +1 -1
- package/.next/server/app/api/chat/route.js +1 -1
- package/.next/server/app/api/chat/route.js.nft.json +1 -1
- package/.next/server/app/api/context/route.js +1 -1
- package/.next/server/app/api/context/route.js.nft.json +1 -1
- package/.next/server/app/api/conversations/route.js +1 -1
- package/.next/server/app/api/conversations/route.js.nft.json +1 -1
- package/.next/server/app/api/decisions/route.js +1 -1
- package/.next/server/app/api/decisions/route.js.nft.json +1 -1
- package/.next/server/app/api/docs/route.js +1 -1
- package/.next/server/app/api/docs/route.js.nft.json +1 -1
- package/.next/server/app/api/explorer/route.js +1 -1
- package/.next/server/app/api/explorer/route.js.nft.json +1 -1
- package/.next/server/app/api/mcp/route.js +1 -1
- package/.next/server/app/api/mcp/route.js.nft.json +1 -1
- package/.next/server/app/api/memory/entries/delete/route.js +1 -1
- package/.next/server/app/api/memory/entries/delete/route.js.nft.json +1 -1
- package/.next/server/app/api/memory/entries/restore/route.js +1 -1
- package/.next/server/app/api/memory/entries/restore/route.js.nft.json +1 -1
- package/.next/server/app/api/memory/entries/route.js +1 -1
- package/.next/server/app/api/memory/entries/route.js.nft.json +1 -1
- package/.next/server/app/api/memory/entries/save/route.js +1 -1
- package/.next/server/app/api/memory/entries/save/route.js.nft.json +1 -1
- package/.next/server/app/api/memory/graph/route.js +1 -1
- package/.next/server/app/api/memory/graph/route.js.nft.json +1 -1
- package/.next/server/app/api/memory/history/route.js +1 -1
- package/.next/server/app/api/memory/history/route.js.nft.json +1 -1
- package/.next/server/app/api/memory/route.js +1 -1
- package/.next/server/app/api/memory/route.js.nft.json +1 -1
- package/.next/server/app/api/plan/apply/route.js +1 -1
- package/.next/server/app/api/plan/apply/route.js.nft.json +1 -1
- package/.next/server/app/api/projects/route.js +1 -1
- package/.next/server/app/api/projects/route.js.nft.json +1 -1
- package/.next/server/app/api/registry/route.js +1 -1
- package/.next/server/app/api/registry/route.js.nft.json +1 -1
- package/.next/server/app/api/roadmap/create/route.js +1 -1
- package/.next/server/app/api/roadmap/create/route.js.nft.json +1 -1
- package/.next/server/app/api/roadmap/delete/route.js +1 -1
- package/.next/server/app/api/roadmap/delete/route.js.nft.json +1 -1
- package/.next/server/app/api/roadmap/generate/route.js +1 -1
- package/.next/server/app/api/roadmap/generate/route.js.nft.json +1 -1
- package/.next/server/app/api/roadmap/layout/route.js +1 -1
- package/.next/server/app/api/roadmap/layout/route.js.nft.json +1 -1
- package/.next/server/app/api/roadmap/restore/route.js +1 -1
- package/.next/server/app/api/roadmap/restore/route.js.nft.json +1 -1
- package/.next/server/app/api/roadmap/route.js +1 -1
- package/.next/server/app/api/roadmap/route.js.nft.json +1 -1
- package/.next/server/app/api/roadmap/update/route.js +1 -1
- package/.next/server/app/api/roadmap/update/route.js.nft.json +1 -1
- package/.next/server/app/api/sessions/route.js +1 -1
- package/.next/server/app/api/sessions/route.js.nft.json +1 -1
- package/.next/server/app/api/settings/route.js +1 -1
- package/.next/server/app/api/settings/route.js.nft.json +1 -1
- package/.next/server/app/api/setup/generate/route.js +1 -1
- package/.next/server/app/api/setup/generate/route.js.nft.json +1 -1
- package/.next/server/app/api/setup/write/route.js +1 -1
- package/.next/server/app/api/setup/write/route.js.nft.json +1 -1
- package/.next/server/app/api/summary/route.js +1 -1
- package/.next/server/app/api/summary/route.js.nft.json +1 -1
- package/.next/server/app/api/tasks/bulk/route.js +1 -1
- package/.next/server/app/api/tasks/bulk/route.js.nft.json +1 -1
- package/.next/server/app/api/tasks/create/route.js +1 -1
- package/.next/server/app/api/tasks/create/route.js.nft.json +1 -1
- package/.next/server/app/api/tasks/delete/route.js +1 -1
- package/.next/server/app/api/tasks/delete/route.js.nft.json +1 -1
- package/.next/server/app/api/tasks/manual-tests/route.js +1 -1
- package/.next/server/app/api/tasks/manual-tests/route.js.nft.json +1 -1
- package/.next/server/app/api/tasks/restore/route.js +1 -1
- package/.next/server/app/api/tasks/restore/route.js.nft.json +1 -1
- package/.next/server/app/api/tasks/review/route.js +1 -1
- package/.next/server/app/api/tasks/review/route.js.nft.json +1 -1
- package/.next/server/app/api/tasks/route.js +1 -1
- package/.next/server/app/api/tasks/route.js.nft.json +1 -1
- package/.next/server/app/api/tasks/update/route.js +1 -1
- package/.next/server/app/api/tasks/update/route.js.nft.json +1 -1
- package/.next/server/app/api/views/route.js +1 -1
- package/.next/server/app/api/views/route.js.nft.json +1 -1
- package/.next/server/app/board.html +1 -1
- package/.next/server/app/board.rsc +23 -22
- package/.next/server/app/board.segments/!KGFwcCk/board/__PAGE__.segment.rsc +6 -6
- package/.next/server/app/board.segments/_full.segment.rsc +23 -22
- package/.next/server/app/board.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/chat.html +1 -1
- package/.next/server/app/chat.rsc +23 -22
- package/.next/server/app/chat.segments/!KGFwcCk/chat/__PAGE__.segment.rsc +11 -9
- package/.next/server/app/chat.segments/_full.segment.rsc +23 -22
- package/.next/server/app/chat.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/docs.html +1 -1
- package/.next/server/app/docs.rsc +23 -22
- package/.next/server/app/docs.segments/!KGFwcCk/docs/__PAGE__.segment.rsc +6 -6
- package/.next/server/app/docs.segments/_full.segment.rsc +23 -22
- package/.next/server/app/docs.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/explorer.html +1 -1
- package/.next/server/app/explorer.rsc +23 -22
- package/.next/server/app/explorer.segments/!KGFwcCk/explorer/__PAGE__.segment.rsc +5 -5
- package/.next/server/app/explorer.segments/_full.segment.rsc +23 -22
- package/.next/server/app/explorer.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/index.html +1 -1
- package/.next/server/app/index.rsc +2 -2
- package/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/index.segments/_full.segment.rsc +2 -2
- package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/manual-tests.html +1 -1
- package/.next/server/app/manual-tests.rsc +23 -22
- package/.next/server/app/manual-tests.segments/!KGFwcCk/manual-tests/__PAGE__.segment.rsc +5 -5
- package/.next/server/app/manual-tests.segments/_full.segment.rsc +23 -22
- package/.next/server/app/manual-tests.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/memory.html +1 -1
- package/.next/server/app/memory.rsc +23 -22
- package/.next/server/app/memory.segments/!KGFwcCk/memory/__PAGE__.segment.rsc +9 -11
- package/.next/server/app/memory.segments/_full.segment.rsc +23 -22
- package/.next/server/app/memory.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/page.js.nft.json +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/roadmap.html +1 -1
- package/.next/server/app/roadmap.rsc +23 -22
- package/.next/server/app/roadmap.segments/!KGFwcCk/roadmap/__PAGE__.segment.rsc +6 -6
- package/.next/server/app/roadmap.segments/_full.segment.rsc +23 -22
- package/.next/server/app/roadmap.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings.html +1 -1
- package/.next/server/app/settings.rsc +23 -22
- package/.next/server/app/settings.segments/!KGFwcCk/settings/__PAGE__.segment.rsc +9 -10
- package/.next/server/app/settings.segments/_full.segment.rsc +23 -22
- package/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/setup.html +1 -1
- package/.next/server/app/setup.rsc +23 -22
- package/.next/server/app/setup.segments/!KGFwcCk/setup/__PAGE__.segment.rsc +5 -5
- package/.next/server/app/setup.segments/_full.segment.rsc +23 -22
- package/.next/server/app/setup.segments/_tree.segment.rsc +2 -2
- package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0-_cqh8._.js → 11mp_@anthropic-ai_sdk_053zt3c._.js} +1 -1
- package/.next/server/chunks/{11mp_@anthropic-ai_sdk_03cp17a._.js → 11mp_@anthropic-ai_sdk_0_zx69c._.js} +1 -1
- package/.next/server/chunks/{11mp_@anthropic-ai_sdk_00o5o78._.js → 11mp_@anthropic-ai_sdk_0gvxfg3._.js} +1 -1
- package/.next/server/chunks/{11mp_@anthropic-ai_sdk_07dk2er._.js → 11mp_@anthropic-ai_sdk_0gx5t2l._.js} +1 -1
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_0krkw4y._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_0l0xzie._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_0pgjvhr._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_0r-keh6._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_0tvfbjt._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_0u4b8_f._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_0ud37xh._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_0v3ar-t._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_0wk0b65._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_0wqkd2r._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_0wypotx._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_0yuq-9s._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_0z-e57x._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_108ltz4._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_10c_i6_._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_14jogs8._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_15u-n39._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_194ahxu._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1ahph2t._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1ajy77y._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1b57s9p._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1brf2xn._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1btfw2x._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1cyy_q6._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1fz9fev._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1i_rz7h._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1it8zsv._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1jzusvd._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1lfknr2._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1mewd-3._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1mkm4u_._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1rggqq3._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1rhjf1m._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1s6ks8c._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1u8z4hp._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1vyy3_4._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_036bvwf._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_046taqd._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0bxad5f._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0g65abt._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0pb9bu1._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_120-cio._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_13uyu_v._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_13x2ww0._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_17og64d._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1e_sh4o._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1ecuo9i._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1go8d0m._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1i13ryx._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1jv_hid._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1mh5mqk._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1oq7e8u._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1p-cq-p._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1the3g0._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1xubh-w._.js +3 -0
- package/.next/server/chunks/{[root-of-the-server]__0hfyuhq._.js → [root-of-the-server]__00o3mbd._.js} +2 -2
- package/.next/server/chunks/{[root-of-the-server]__0y5usoz._.js → [root-of-the-server]__01n_hoh._.js} +2 -2
- package/.next/server/chunks/{[root-of-the-server]__08yaps5._.js → [root-of-the-server]__05tx02j._.js} +2 -2
- package/.next/server/chunks/{[root-of-the-server]__0b2488c._.js → [root-of-the-server]__06dfvb0._.js} +2 -2
- package/.next/server/chunks/{[root-of-the-server]__1tu85zx._.js → [root-of-the-server]__06z8i6e._.js} +2 -2
- package/.next/server/chunks/{[root-of-the-server]__0qij7wy._.js → [root-of-the-server]__076d4xm._.js} +2 -2
- package/.next/server/chunks/{[root-of-the-server]__1z3tswg._.js → [root-of-the-server]__09j_-hj._.js} +2 -2
- package/.next/server/chunks/[root-of-the-server]__0jr_5eq._.js +11 -11
- package/.next/server/chunks/[root-of-the-server]__0jr_5eq._.js.map +1 -1
- package/.next/server/chunks/{[root-of-the-server]__1gvv2xp._.js → [root-of-the-server]__0kuhhna._.js} +2 -2
- package/.next/server/chunks/{[root-of-the-server]__008focd._.js → [root-of-the-server]__0p4w_o-._.js} +2 -2
- package/.next/server/chunks/{[root-of-the-server]__1ssunti._.js → [root-of-the-server]__0uu9pgg._.js} +2 -2
- package/.next/server/chunks/{[root-of-the-server]__1b448u7._.js → [root-of-the-server]__1-1hfrj._.js} +2 -2
- package/.next/server/chunks/{[root-of-the-server]__0ikbk15._.js → [root-of-the-server]__15jhpgl._.js} +2 -2
- package/.next/server/chunks/[root-of-the-server]__19rxcu4._.js +11 -11
- package/.next/server/chunks/[root-of-the-server]__19rxcu4._.js.map +1 -1
- package/.next/server/chunks/{[root-of-the-server]__0m8hmg0._.js → [root-of-the-server]__19w-7h9._.js} +2 -2
- package/.next/server/chunks/{[root-of-the-server]__01xmabe._.js → [root-of-the-server]__1af-wfk._.js} +2 -2
- package/.next/server/chunks/{[root-of-the-server]__0cbh1s-._.js → [root-of-the-server]__1e_o8h4._.js} +2 -2
- package/.next/server/chunks/{[root-of-the-server]__16u25oa._.js → [root-of-the-server]__1gr4e22._.js} +2 -2
- package/.next/server/chunks/{[root-of-the-server]__1jz98vb._.js → [root-of-the-server]__1h5hb6u._.js} +2 -2
- package/.next/server/chunks/{[root-of-the-server]__1xpp36t._.js → [root-of-the-server]__1kw2vct._.js} +2 -2
- package/.next/server/chunks/{[root-of-the-server]__0axugex._.js → [root-of-the-server]__1lt5cds._.js} +2 -2
- package/.next/server/chunks/[root-of-the-server]__1qd-ecl._.js +11 -11
- package/.next/server/chunks/[root-of-the-server]__1qd-ecl._.js.map +1 -1
- package/.next/server/chunks/{[root-of-the-server]__03ogp2r._.js → [root-of-the-server]__1rjgpbm._.js} +2 -2
- package/.next/server/chunks/{[root-of-the-server]__0x8wtot._.js → [root-of-the-server]__1spley9._.js} +2 -2
- package/.next/server/chunks/_04byth9._.js +25 -25
- package/.next/server/chunks/_04byth9._.js.map +1 -1
- package/.next/server/chunks/_1au4syj._.js +1 -1
- package/.next/server/chunks/_1au4syj._.js.map +1 -1
- package/.next/server/chunks/ssr/{0_nd_mermaid_dist_mermaid_core_mjs_027n2yl._.js → 0_nd_mermaid_dist_mermaid_core_mjs_0itmgkm._.js} +2 -2
- package/.next/server/chunks/ssr/{1u84_katex_dist_katex_mjs_1kb5xea._.js → 1u84_katex_dist_katex_mjs_08jn-sj._.js} +1 -1
- package/.next/server/chunks/ssr/1x05_lucide-react_dist_esm_icons_1tcci-3._.js +3 -0
- package/.next/server/chunks/ssr/1x05_lucide-react_dist_esm_icons_1tcci-3._.js.map +1 -0
- package/.next/server/chunks/ssr/{1x05_lucide-react_dist_esm_icons_14hl50o._.js → 1x05_lucide-react_dist_esm_icons_1uybmua._.js} +2 -2
- package/.next/server/chunks/ssr/1x05_lucide-react_dist_esm_icons_1uybmua._.js.map +1 -0
- package/.next/server/chunks/ssr/_04xff_2._.js +1 -1
- package/.next/server/chunks/ssr/_04xff_2._.js.map +1 -1
- package/.next/server/chunks/ssr/_0h91h9n._.js +3 -0
- package/.next/server/chunks/ssr/_0h91h9n._.js.map +1 -0
- package/.next/server/chunks/ssr/_0idb-vo._.js.map +1 -1
- package/.next/server/chunks/ssr/_0ip7sg0._.js +3 -0
- package/.next/server/chunks/ssr/_0ip7sg0._.js.map +1 -0
- package/.next/server/chunks/ssr/_0ks_bep._.js +3 -0
- package/.next/server/chunks/ssr/_0ks_bep._.js.map +1 -0
- package/.next/server/chunks/ssr/{_1ocnpth._.js → _0lqrpim._.js} +2 -2
- package/.next/server/chunks/ssr/_0lqrpim._.js.map +1 -0
- package/.next/server/chunks/ssr/_0qp3gu7._.js +1 -1
- package/.next/server/chunks/ssr/_0qp3gu7._.js.map +1 -1
- package/.next/server/chunks/ssr/_0rmo9r-._.js +4 -0
- package/.next/server/chunks/ssr/_0rmo9r-._.js.map +1 -0
- package/.next/server/chunks/ssr/_0ust7tw._.js +4 -0
- package/.next/server/chunks/ssr/_0ust7tw._.js.map +1 -0
- package/.next/server/chunks/ssr/_197jl3g._.js +3 -0
- package/.next/server/chunks/ssr/_197jl3g._.js.map +1 -0
- package/.next/server/chunks/ssr/{src_components_docs_MarkdownRenderer_tsx_1kshaz1._.js → _19k2iz0._.js} +21 -21
- package/.next/server/chunks/ssr/_19k2iz0._.js.map +1 -0
- package/.next/server/chunks/ssr/_1el478k._.js +3 -0
- package/.next/server/chunks/ssr/_1el478k._.js.map +1 -0
- package/.next/server/chunks/ssr/_1s2ya35._.js +3 -0
- package/.next/server/chunks/ssr/_1t76zdx._.js +1 -1
- package/.next/server/chunks/ssr/_1t76zdx._.js.map +1 -1
- package/.next/server/chunks/ssr/{node_modules__pnpm_1qp_jvj._.js → node_modules__pnpm_00lsytc._.js} +2 -2
- package/.next/server/chunks/ssr/{node_modules__pnpm_1ygal0c._.js → node_modules__pnpm_02p2rqs._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules__pnpm_1-76qxg._.js → node_modules__pnpm_05-p8zy._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules__pnpm_1qmkxyo._.js → node_modules__pnpm_060kz-j._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules__pnpm_0ctisl0._.js → node_modules__pnpm_0_83tv8._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules__pnpm_0ycbjbd._.js → node_modules__pnpm_0_ajzll._.js} +2 -2
- package/.next/server/chunks/ssr/{node_modules__pnpm_0kpu0-2._.js → node_modules__pnpm_0abf_e9._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules__pnpm_0fwp8jm._.js → node_modules__pnpm_0e55e7-._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules__pnpm_1q_hhr3._.js → node_modules__pnpm_0eub17j._.js} +2 -2
- package/.next/server/chunks/ssr/{node_modules__pnpm_1-r94f7._.js → node_modules__pnpm_0gp90ei._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules__pnpm_16u1vfb._.js → node_modules__pnpm_0iqb0_x._.js} +2 -2
- package/.next/server/chunks/ssr/{node_modules__pnpm_1uwkcin._.js → node_modules__pnpm_0j7asqf._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules__pnpm_1f440kx._.js → node_modules__pnpm_0jlzk5z._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules__pnpm_14piqi4._.js → node_modules__pnpm_0rsfj9v._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules__pnpm_01bjcv9._.js → node_modules__pnpm_0s63lee._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules__pnpm_189m48n._.js → node_modules__pnpm_0s7j-tv._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules__pnpm_1ssjj4u._.js → node_modules__pnpm_0up4z7m._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules__pnpm_06d-fdo._.js → node_modules__pnpm_0v_mhl7._.js} +2 -2
- package/.next/server/chunks/ssr/{node_modules__pnpm_1a48_nl._.js → node_modules__pnpm_0vuao3_._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules__pnpm_0vry74x._.js → node_modules__pnpm_14j18h7._.js} +2 -2
- package/.next/server/chunks/ssr/{node_modules__pnpm_17i6z2d._.js → node_modules__pnpm_16bj927._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules__pnpm_192f222._.js → node_modules__pnpm_1ch46nl._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules__pnpm_1txccoj._.js → node_modules__pnpm_1dc-yxd._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules__pnpm_1min2jl._.js → node_modules__pnpm_1fry8_2._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules__pnpm_1fn3ejy._.js → node_modules__pnpm_1gpkxns._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules__pnpm_1aa37e1._.js → node_modules__pnpm_1hqh95z._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules__pnpm_03qrzdb._.js → node_modules__pnpm_1oaf50x._.js} +1 -1
- package/.next/server/chunks/ssr/src_app_(app)_board_page_tsx_0gpfc77._.js +1 -1
- package/.next/server/chunks/ssr/src_app_(app)_board_page_tsx_0gpfc77._.js.map +1 -1
- package/.next/server/chunks/ssr/src_app_(app)_layout_tsx_1yu5hom._.js +1 -1
- package/.next/server/chunks/ssr/src_app_(app)_layout_tsx_1yu5hom._.js.map +1 -1
- package/.next/server/chunks/ssr/src_app_(app)_memory_page_tsx_19jhb1c._.js +2 -2
- package/.next/server/chunks/ssr/src_app_(app)_memory_page_tsx_19jhb1c._.js.map +1 -1
- package/.next/server/chunks/ssr/src_app_(app)_roadmap_page_tsx_0vcq3jr._.js +2 -2
- package/.next/server/chunks/ssr/src_app_(app)_roadmap_page_tsx_0vcq3jr._.js.map +1 -1
- package/.next/server/chunks/ssr/src_app_(app)_settings_page_tsx_0zevtee._.js +2 -2
- package/.next/server/chunks/ssr/src_app_(app)_settings_page_tsx_0zevtee._.js.map +1 -1
- package/.next/server/chunks/ssr/src_app_(app)_setup_page_tsx_1yids_n._.js +1 -1
- package/.next/server/chunks/ssr/src_app_(app)_setup_page_tsx_1yids_n._.js.map +1 -1
- package/.next/server/chunks/ssr/src_components_0eyr_zi._.js +1 -1
- package/.next/server/chunks/ssr/src_components_0eyr_zi._.js.map +1 -1
- package/.next/server/chunks/ssr/src_components_1s861m8._.js +1 -1
- package/.next/server/chunks/ssr/src_components_1s861m8._.js.map +1 -1
- package/.next/server/chunks/ssr/src_components_docs_editor-theme_ts_0ji4rd5._.js +3 -0
- package/.next/server/chunks/ssr/src_components_docs_editor-theme_ts_0ji4rd5._.js.map +1 -0
- package/.next/server/middleware-build-manifest.js +3 -3
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.js +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/chunks/05qw7-fs1exlt.js +1 -0
- package/.next/static/chunks/{16k196zyl-n9q.js → 08sqjdq-43nbt.js} +1 -1
- package/.next/static/chunks/09r4_4wr0aga3.js +1 -0
- package/.next/static/chunks/0xw_sa58zqv5s.js +1 -0
- package/.next/static/chunks/{3ruw8lu2_re-h.js → 1-a3-6c_nce84.js} +1 -1
- package/.next/static/chunks/13cz-8lvre7gj.js +1 -0
- package/.next/static/chunks/149fj-mseo8q3.css +1 -0
- package/.next/static/chunks/1c11k-snzp541.js +1 -0
- package/.next/static/chunks/1c459q7xpgq6r.js +3 -0
- package/.next/static/chunks/1hh2cxd9ndxf-.js +68 -0
- package/.next/static/chunks/1huu1nljqois-.js +1 -0
- package/.next/static/chunks/{1l_dys0-y5-r7.js → 1n4_u3om7ye4z.js} +1 -1
- package/.next/static/chunks/1qhndyi2gdbkf.js +1 -0
- package/.next/static/chunks/1s64z5c36fv-4.js +21 -0
- package/.next/static/chunks/1x40-5s54wd5m.js +11 -0
- package/.next/static/chunks/2-0lpccy0f8bk.js +2 -0
- package/.next/static/chunks/2x6eh3w-u8lk4.js +1 -0
- package/.next/static/chunks/30s090l71e1gs.js +1 -0
- package/.next/static/chunks/37u2gjz5dzhep.js +1 -0
- package/.next/static/chunks/3t8px4aygy1s9.js +1 -0
- package/.next/static/chunks/{0b547y6rqct9z.js → 44gr_v5092gwh.js} +1 -1
- package/package.json +3 -2
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_0_e9zpr._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_0_xx_qf._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_0aer9lc._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_0ax30pe._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_0gn7vgs._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_0hye94a._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_0ir5cgk._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_0je0_pa._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_0jfgh0o._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_0mha4x1._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_0n__boa._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_0sqv26_._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_0wnc6g-._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_0xh0g59._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1-5wyhj._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_13ahm3n._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_13e6aq4._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_14eg0ld._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_15md1n2._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_16av8b9._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_16hjhv1._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_16txvf7._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_198yu7d._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1_9tfq3._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1_izr2o._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1fljcyg._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1lrt6ul._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1nev_ee._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1pgoe2i._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1rgl7mu._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1slq49k._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1t9bdf0._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1u6qqm2._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1v7ygvz._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1wls8zc._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1ywboja._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_00kwqu5._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_01j2nrd._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_05ybj3t._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0adt7jj._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0bnl14w._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0f557t9._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0ra6giw._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_107cqfx._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1377sl6._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1_2hcok._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1g--m6y._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1geopi5._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1i11dte._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1mj3_qk._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1qgy210._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1rkng9q._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1vr8q8y._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1x8b64g._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1zhahf7._.js +0 -3
- package/.next/server/chunks/ssr/1x05_lucide-react_dist_esm_icons_0wurouw._.js +0 -3
- package/.next/server/chunks/ssr/1x05_lucide-react_dist_esm_icons_0wurouw._.js.map +0 -1
- package/.next/server/chunks/ssr/1x05_lucide-react_dist_esm_icons_14hl50o._.js.map +0 -1
- package/.next/server/chunks/ssr/_071j6mr._.js +0 -4
- package/.next/server/chunks/ssr/_071j6mr._.js.map +0 -1
- package/.next/server/chunks/ssr/_0i75x-o._.js +0 -3
- package/.next/server/chunks/ssr/_0i75x-o._.js.map +0 -1
- package/.next/server/chunks/ssr/_15qpb4z._.js +0 -3
- package/.next/server/chunks/ssr/_15qpb4z._.js.map +0 -1
- package/.next/server/chunks/ssr/_1fg0usp._.js +0 -3
- package/.next/server/chunks/ssr/_1fg0usp._.js.map +0 -1
- package/.next/server/chunks/ssr/_1h0wfpz._.js +0 -3
- package/.next/server/chunks/ssr/_1h0wfpz._.js.map +0 -1
- package/.next/server/chunks/ssr/_1ncdakv._.js +0 -4
- package/.next/server/chunks/ssr/_1ncdakv._.js.map +0 -1
- package/.next/server/chunks/ssr/_1ocnpth._.js.map +0 -1
- package/.next/server/chunks/ssr/_1uno162._.js +0 -3
- package/.next/server/chunks/ssr/_1uno162._.js.map +0 -1
- package/.next/server/chunks/ssr/node_modules__pnpm_1xeothw._.js +0 -3
- package/.next/server/chunks/ssr/src_components_docs_MarkdownRenderer_tsx_1kshaz1._.js.map +0 -1
- package/.next/static/chunks/02cj5_i9np4sg.js +0 -3
- package/.next/static/chunks/0e3ha56i_0j05.css +0 -1
- package/.next/static/chunks/0f32hudp0yir7.js +0 -2
- package/.next/static/chunks/0rsmz1jgro1kj.js +0 -1
- package/.next/static/chunks/0wnq_kh8-6wc1.js +0 -2
- package/.next/static/chunks/13l4l-boqg8fx.js +0 -1
- package/.next/static/chunks/14hxe1qiaram9.js +0 -1
- package/.next/static/chunks/18b5l8p0vd9f8.js +0 -1
- package/.next/static/chunks/1acpfyut6j4e2.js +0 -1
- package/.next/static/chunks/1rko_88i85yqb.js +0 -21
- package/.next/static/chunks/1tu8lforstp1o.js +0 -1
- package/.next/static/chunks/20mdcup14_0yi.js +0 -11
- package/.next/static/chunks/23-xknrz6o748.js +0 -1
- package/.next/static/chunks/2p-pkveutoh75.js +0 -1
- package/.next/static/chunks/329sozud9-tvr.js +0 -1
- package/.next/static/chunks/3qqvn9vv6i0gy.js +0 -68
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0-_cqh8._.js.map → 11mp_@anthropic-ai_sdk_053zt3c._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_00o5o78._.js.map → 11mp_@anthropic-ai_sdk_0_zx69c._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_03cp17a._.js.map → 11mp_@anthropic-ai_sdk_0gvxfg3._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_07dk2er._.js.map → 11mp_@anthropic-ai_sdk_0gx5t2l._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0_e9zpr._.js.map → 11mp_@anthropic-ai_sdk_0krkw4y._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0_xx_qf._.js.map → 11mp_@anthropic-ai_sdk_0l0xzie._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0aer9lc._.js.map → 11mp_@anthropic-ai_sdk_0pgjvhr._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0ax30pe._.js.map → 11mp_@anthropic-ai_sdk_0r-keh6._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0gn7vgs._.js.map → 11mp_@anthropic-ai_sdk_0tvfbjt._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0hye94a._.js.map → 11mp_@anthropic-ai_sdk_0u4b8_f._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0ir5cgk._.js.map → 11mp_@anthropic-ai_sdk_0ud37xh._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0je0_pa._.js.map → 11mp_@anthropic-ai_sdk_0v3ar-t._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0jfgh0o._.js.map → 11mp_@anthropic-ai_sdk_0wk0b65._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0mha4x1._.js.map → 11mp_@anthropic-ai_sdk_0wqkd2r._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0n__boa._.js.map → 11mp_@anthropic-ai_sdk_0wypotx._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0sqv26_._.js.map → 11mp_@anthropic-ai_sdk_0yuq-9s._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0wnc6g-._.js.map → 11mp_@anthropic-ai_sdk_0z-e57x._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0xh0g59._.js.map → 11mp_@anthropic-ai_sdk_108ltz4._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1-5wyhj._.js.map → 11mp_@anthropic-ai_sdk_10c_i6_._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_13ahm3n._.js.map → 11mp_@anthropic-ai_sdk_14jogs8._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_13e6aq4._.js.map → 11mp_@anthropic-ai_sdk_15u-n39._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_14eg0ld._.js.map → 11mp_@anthropic-ai_sdk_194ahxu._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_15md1n2._.js.map → 11mp_@anthropic-ai_sdk_1ahph2t._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_16av8b9._.js.map → 11mp_@anthropic-ai_sdk_1ajy77y._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_16hjhv1._.js.map → 11mp_@anthropic-ai_sdk_1b57s9p._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_16txvf7._.js.map → 11mp_@anthropic-ai_sdk_1brf2xn._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_198yu7d._.js.map → 11mp_@anthropic-ai_sdk_1btfw2x._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1_9tfq3._.js.map → 11mp_@anthropic-ai_sdk_1cyy_q6._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1_izr2o._.js.map → 11mp_@anthropic-ai_sdk_1fz9fev._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1fljcyg._.js.map → 11mp_@anthropic-ai_sdk_1i_rz7h._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1lrt6ul._.js.map → 11mp_@anthropic-ai_sdk_1it8zsv._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1nev_ee._.js.map → 11mp_@anthropic-ai_sdk_1jzusvd._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1pgoe2i._.js.map → 11mp_@anthropic-ai_sdk_1lfknr2._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1rgl7mu._.js.map → 11mp_@anthropic-ai_sdk_1mewd-3._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1slq49k._.js.map → 11mp_@anthropic-ai_sdk_1mkm4u_._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1t9bdf0._.js.map → 11mp_@anthropic-ai_sdk_1rggqq3._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1u6qqm2._.js.map → 11mp_@anthropic-ai_sdk_1rhjf1m._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1v7ygvz._.js.map → 11mp_@anthropic-ai_sdk_1s6ks8c._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1wls8zc._.js.map → 11mp_@anthropic-ai_sdk_1u8z4hp._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1ywboja._.js.map → 11mp_@anthropic-ai_sdk_1vyy3_4._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_00kwqu5._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_036bvwf._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_01j2nrd._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_046taqd._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_05ybj3t._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_0bxad5f._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_0adt7jj._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_0g65abt._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_0bnl14w._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_0pb9bu1._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_0f557t9._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_120-cio._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_0ra6giw._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_13uyu_v._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_107cqfx._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_13x2ww0._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_1377sl6._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_17og64d._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_1_2hcok._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_1e_sh4o._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_1g--m6y._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_1ecuo9i._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_1geopi5._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_1go8d0m._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_1i11dte._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_1i13ryx._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_1mj3_qk._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_1jv_hid._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_1qgy210._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_1mh5mqk._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_1rkng9q._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_1oq7e8u._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_1vr8q8y._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_1p-cq-p._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_1x8b64g._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_1the3g0._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_1zhahf7._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_1xubh-w._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__0hfyuhq._.js.map → [root-of-the-server]__00o3mbd._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__0y5usoz._.js.map → [root-of-the-server]__01n_hoh._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__08yaps5._.js.map → [root-of-the-server]__05tx02j._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__0b2488c._.js.map → [root-of-the-server]__06dfvb0._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__1tu85zx._.js.map → [root-of-the-server]__06z8i6e._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__0qij7wy._.js.map → [root-of-the-server]__076d4xm._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__1ssunti._.js.map → [root-of-the-server]__09j_-hj._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__1gvv2xp._.js.map → [root-of-the-server]__0kuhhna._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__008focd._.js.map → [root-of-the-server]__0p4w_o-._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__1z3tswg._.js.map → [root-of-the-server]__0uu9pgg._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__1b448u7._.js.map → [root-of-the-server]__1-1hfrj._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__0ikbk15._.js.map → [root-of-the-server]__15jhpgl._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__0m8hmg0._.js.map → [root-of-the-server]__19w-7h9._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__01xmabe._.js.map → [root-of-the-server]__1af-wfk._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__0cbh1s-._.js.map → [root-of-the-server]__1e_o8h4._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__16u25oa._.js.map → [root-of-the-server]__1gr4e22._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__1jz98vb._.js.map → [root-of-the-server]__1h5hb6u._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__1xpp36t._.js.map → [root-of-the-server]__1kw2vct._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__0axugex._.js.map → [root-of-the-server]__1lt5cds._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__03ogp2r._.js.map → [root-of-the-server]__1rjgpbm._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__0x8wtot._.js.map → [root-of-the-server]__1spley9._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{0_nd_mermaid_dist_mermaid_core_mjs_027n2yl._.js.map → 0_nd_mermaid_dist_mermaid_core_mjs_0itmgkm._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{1u84_katex_dist_katex_mjs_1kb5xea._.js.map → 1u84_katex_dist_katex_mjs_08jn-sj._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules__pnpm_14piqi4._.js.map → _1s2ya35._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules__pnpm_1qp_jvj._.js.map → node_modules__pnpm_00lsytc._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules__pnpm_1ygal0c._.js.map → node_modules__pnpm_02p2rqs._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules__pnpm_1-76qxg._.js.map → node_modules__pnpm_05-p8zy._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules__pnpm_1qmkxyo._.js.map → node_modules__pnpm_060kz-j._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules__pnpm_0ctisl0._.js.map → node_modules__pnpm_0_83tv8._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules__pnpm_0ycbjbd._.js.map → node_modules__pnpm_0_ajzll._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules__pnpm_0kpu0-2._.js.map → node_modules__pnpm_0abf_e9._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules__pnpm_0fwp8jm._.js.map → node_modules__pnpm_0e55e7-._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules__pnpm_1q_hhr3._.js.map → node_modules__pnpm_0eub17j._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules__pnpm_1-r94f7._.js.map → node_modules__pnpm_0gp90ei._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules__pnpm_16u1vfb._.js.map → node_modules__pnpm_0iqb0_x._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules__pnpm_1uwkcin._.js.map → node_modules__pnpm_0j7asqf._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules__pnpm_1f440kx._.js.map → node_modules__pnpm_0jlzk5z._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules__pnpm_189m48n._.js.map → node_modules__pnpm_0rsfj9v._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules__pnpm_01bjcv9._.js.map → node_modules__pnpm_0s63lee._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules__pnpm_1xeothw._.js.map → node_modules__pnpm_0s7j-tv._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules__pnpm_1ssjj4u._.js.map → node_modules__pnpm_0up4z7m._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules__pnpm_06d-fdo._.js.map → node_modules__pnpm_0v_mhl7._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules__pnpm_1a48_nl._.js.map → node_modules__pnpm_0vuao3_._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules__pnpm_0vry74x._.js.map → node_modules__pnpm_14j18h7._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules__pnpm_17i6z2d._.js.map → node_modules__pnpm_16bj927._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules__pnpm_192f222._.js.map → node_modules__pnpm_1ch46nl._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules__pnpm_1txccoj._.js.map → node_modules__pnpm_1dc-yxd._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules__pnpm_1min2jl._.js.map → node_modules__pnpm_1fry8_2._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules__pnpm_1fn3ejy._.js.map → node_modules__pnpm_1gpkxns._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules__pnpm_1aa37e1._.js.map → node_modules__pnpm_1hqh95z._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules__pnpm_03qrzdb._.js.map → node_modules__pnpm_1oaf50x._.js.map} +0 -0
- /package/.next/static/{Q29Tn_NjyVms0d3pKn4Yx → qCiKQ9_g49vaoQ-Fewybk}/_buildManifest.js +0 -0
- /package/.next/static/{Q29Tn_NjyVms0d3pKn4Yx → qCiKQ9_g49vaoQ-Fewybk}/_clientMiddlewareManifest.js +0 -0
- /package/.next/static/{Q29Tn_NjyVms0d3pKn4Yx → qCiKQ9_g49vaoQ-Fewybk}/_ssgManifest.js +0 -0
|
@@ -1 +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  - 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  - 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  - 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  - 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  - 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  - 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  - 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  - 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":"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","ignoreList":[14,15,16,17,18,19,20,21]}
|
|
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 { usePathname, useRouter } from \"next/navigation\"\nimport {\n Search, FilePlus, LayoutDashboard, Activity, Brain, Map, BookOpen, Bot, FlaskConical, FolderTree, Settings,\n FileText, MessageSquarePlus, SunMoon, FolderOpen, Keyboard, Zap, PanelLeft, type LucideIcon,\n} from \"lucide-react\"\nimport { cn } from \"@/lib/utils\"\nimport { fuzzyFilter } from \"@/lib/fuzzy\"\nimport { DOCS_LIST_KEY, TOGGLE_DOCS_LIST_EVENT, 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 pathname = usePathname()\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 ...(pathname?.startsWith(\"/docs\") ? [{\n id: \"toggle-docs-list\", group: \"Actions\", label: \"Hide / show docs list\", lead: icon(PanelLeft), kbd: DOCS_LIST_KEY.label,\n run: () => { window.dispatchEvent(new Event(TOGGLE_DOCS_LIST_EVENT)); onClose() },\n }] : []),\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, pathname])\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  - 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  - 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  - 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  - 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  - 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  - 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  - 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  - 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","fetch","settings","then","r","ok","json","theme","fontSize","accentColor","editor","current","clearInterval","project","autoRefresh","catch","setInterval"],"mappings":"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","ignoreList":[14,15,16,17,18,19,20,21]}
|