@ironmussa/funny 0.1.6 → 0.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. package/package.json +6 -2
  2. package/packages/client/dist/assets/{AcceptInvitePage-Dy5B7DII.js → AcceptInvitePage-BjMGmkD4.js} +1 -1
  3. package/packages/client/dist/assets/{ActivityPane-CV-MhQ_w.js → ActivityPane-Cl-bUP3W.js} +1 -1
  4. package/packages/client/dist/assets/{AddProjectView-CtW0xjNI.js → AddProjectView-DZuks8BQ.js} +1 -1
  5. package/packages/client/dist/assets/{AllThreadsView-Cf2UKLJT.js → AllThreadsView-DdT3QdFb.js} +1 -1
  6. package/packages/client/dist/assets/{AnalyticsView-YsDXUQUQ.js → AnalyticsView-b_BZhrh1.js} +1 -1
  7. package/packages/client/dist/assets/{App-C4O1uemY.js → App-CY9kuarV.js} +3 -3
  8. package/packages/client/dist/assets/{AutomationInboxView-Cj4jEXBW.js → AutomationInboxView-BQfGidRk.js} +1 -1
  9. package/packages/client/dist/assets/{BrowserPanel-CDhQ4pqq.js → BrowserPanel-CY_wB1AB.js} +1 -1
  10. package/packages/client/dist/assets/{BrowserPreview-mlb1GznK.js → BrowserPreview-2gdJqMpN.js} +1 -1
  11. package/packages/client/dist/assets/{CircuitBreakerDialog-IM7SsKrh.js → CircuitBreakerDialog-B6kP1aCS.js} +1 -1
  12. package/packages/client/dist/assets/{CommandPalette-DeUqe9ev.js → CommandPalette-DeBQCdqo.js} +1 -1
  13. package/packages/client/dist/assets/{CommentsPane-D6mo7vNO.js → CommentsPane-JY0CN5R2.js} +1 -1
  14. package/packages/client/dist/assets/{CsvTable-Bmlrdqi0.js → CsvTable-CaJ4BQ4d.js} +1 -1
  15. package/packages/client/dist/assets/{FileSearchDialog-DOht2aCz.js → FileSearchDialog-C2RhpM7Z.js} +1 -1
  16. package/packages/client/dist/assets/{FileTree-C-k9qiIl.js → FileTree-Bl25zGAE.js} +1 -1
  17. package/packages/client/dist/assets/{FolderPicker-Ccn8T963.js → FolderPicker-CpXi_ZrF.js} +1 -1
  18. package/packages/client/dist/assets/{GeneralSettingsView-70nd75Ez.js → GeneralSettingsView-f8pBncJY.js} +2 -2
  19. package/packages/client/dist/assets/{GitProgressModal-D0sRB_fY.js → GitProgressModal-CJG5MsSI.js} +1 -1
  20. package/packages/client/dist/assets/{LiveColumnsView-Dtj6sjhY.js → LiveColumnsView-DwUkXA8m.js} +1 -1
  21. package/packages/client/dist/assets/{LoginPage-CX5SoY9d.js → LoginPage-CkgRw9Ji.js} +1 -1
  22. package/packages/client/dist/assets/{MediaPreview-CSLd2xQQ.js → MediaPreview-DmMe4hGN.js} +1 -1
  23. package/packages/client/dist/assets/{MediaPreviewDialog-b3uRxGUy.js → MediaPreviewDialog-DHIv3gai.js} +1 -1
  24. package/packages/client/dist/assets/{MermaidBlock--PnCK6OJ.js → MermaidBlock-BZLj2TmL.js} +1 -1
  25. package/packages/client/dist/assets/{MobilePage-Z6RW3JRa.js → MobilePage-BRWC2SVo.js} +2 -2
  26. package/packages/client/dist/assets/{MonacoEditorDialog-W6AzCK4P.js → MonacoEditorDialog-CTUQ5NFr.js} +1 -1
  27. package/packages/client/dist/assets/{OrchestratorView-Bk_chlQ2.js → OrchestratorView-wTF6Ae0A.js} +1 -1
  28. package/packages/client/dist/assets/{PreferencesPanel-aHOy4y8T.js → PreferencesPanel-CpIL485D.js} +1 -1
  29. package/packages/client/dist/assets/{PreviewBrowser-C2HgO5nb.js → PreviewBrowser-CEXO1tHq.js} +1 -1
  30. package/packages/client/dist/assets/{ProjectFilesPane-B3eZDUID.js → ProjectFilesPane-02_p9zry.js} +1 -1
  31. package/packages/client/dist/assets/{ProjectHeader-D8OTTLq1.js → ProjectHeader-TWkvwAxm.js} +1 -1
  32. package/packages/client/dist/assets/{ProjectHooksSettings-oE9zynCA.js → ProjectHooksSettings-CIaY32WM.js} +1 -1
  33. package/packages/client/dist/assets/{ReviewPane-DodN13Ot.js → ReviewPane-DHTvq8t1.js} +1 -1
  34. package/packages/client/dist/assets/{SearchablePicker-BRZ5MGoM.js → SearchablePicker-BJnuJVEi.js} +1 -1
  35. package/packages/client/dist/assets/{SettingsDetailView-1z4FmtOi.js → SettingsDetailView-eBDvn5cS.js} +1 -1
  36. package/packages/client/dist/assets/{SettingsPageContent-CypV-sTN.js → SettingsPageContent-CiHRUvG3.js} +3 -3
  37. package/packages/client/dist/assets/{SetupWizard-DCtmS7Go.js → SetupWizard-B8rFRPma.js} +1 -1
  38. package/packages/client/dist/assets/{Sidebar-DG8RI-WX.js → Sidebar-CPU0yoaQ.js} +1 -1
  39. package/packages/client/dist/assets/{StashTab-CH8c3zKD.js → StashTab-BswTfOlb.js} +1 -1
  40. package/packages/client/dist/assets/{TestRunnerPane-Dx19F3V9.js → TestRunnerPane-DZXDbHCu.js} +1 -1
  41. package/packages/client/dist/assets/{TextSearchDialog-CLPa_FJZ.js → TextSearchDialog-BUMBp448.js} +1 -1
  42. package/packages/client/dist/assets/{ThreadPowerline-zo87eggE.js → ThreadPowerline-CSegubLW.js} +1 -1
  43. package/packages/client/dist/assets/{ThreadStatusPin-DQr-M4nV.js → ThreadStatusPin-DhrEC0n-.js} +1 -1
  44. package/packages/client/dist/assets/{ThreadView-42eEYL7W.js → ThreadView-hYXeM23q.js} +1 -1
  45. package/packages/client/dist/assets/{app-store-CfgpkFla.js → app-store-DKW9sVHv.js} +1 -1
  46. package/packages/client/dist/assets/{automation-store-CeG5quCS.js → automation-store-C8v9UlHX.js} +1 -1
  47. package/packages/client/dist/assets/{browser-panel-store-NtcEgowi.js → browser-panel-store-CSx5jc7O.js} +2 -2
  48. package/packages/client/dist/assets/{button-CZ967bB8.js → button-B9Ypx1uQ.js} +1 -1
  49. package/packages/client/dist/assets/{combine-BhTXrTft.js → combine-CIrCcf3o.js} +1 -1
  50. package/packages/client/dist/assets/{comment-store-CK5G8WPn.js → comment-store-BfRTY3FY.js} +1 -1
  51. package/packages/client/dist/assets/{diff-parse-PPACfn0L.js → diff-parse-DgLol0S6.js} +1 -1
  52. package/packages/client/dist/assets/{element-A6J8F7_i.js → element-yfBHMYal.js} +1 -1
  53. package/packages/client/dist/assets/{go-to-thread-BNBZv0ib.js → go-to-thread-DD0G5vFp.js} +1 -1
  54. package/packages/client/dist/assets/{index-DCJpZz6M.js → index-DNxUSLe_.js} +2 -2
  55. package/packages/client/dist/assets/{input-C2LWQS5Y.js → input-CJ3TsT2L.js} +1 -1
  56. package/packages/client/dist/assets/{items-azeOGVff.js → items-7qqySF-X.js} +1 -1
  57. package/packages/client/dist/assets/{job-store-Bxebwj0k.js → job-store-0PeOgBpX.js} +1 -1
  58. package/packages/client/dist/assets/{kbd-GnT1qEi9.js → kbd-d4Wzagpn.js} +1 -1
  59. package/packages/client/dist/assets/{loading-state-CZgfErMi.js → loading-state-yLj5fYb6.js} +1 -1
  60. package/packages/client/dist/assets/{markdown-components-gp0WAMTj.js → markdown-components-DxMKBjnh.js} +1 -1
  61. package/packages/client/dist/assets/{native-git-store-KpsndLzH.js → native-git-store-CCenGgLt.js} +1 -1
  62. package/packages/client/dist/assets/{orchestrator-store-CgmJPyrE.js → orchestrator-store-DP8UohlO.js} +1 -1
  63. package/packages/client/dist/assets/{pipeline-approval-store-B7WMnOHB.js → pipeline-approval-store-BiH1mYlB.js} +1 -1
  64. package/packages/client/dist/assets/{pr-detail-store-DetZmOmN.js → pr-detail-store-DHF0exs_.js} +1 -1
  65. package/packages/client/dist/assets/{providers-tWTQl7V7.js → providers-Dd9yhyUY.js} +1 -1
  66. package/packages/client/dist/assets/{sidebar-D6F-jed-.js → sidebar-Dzb_F1kj.js} +1 -1
  67. package/packages/client/dist/assets/{tabs-DK0DleVt.js → tabs-Cu3cWMHb.js} +1 -1
  68. package/packages/client/dist/assets/{test-store-20Ippy2V.js → test-store-D72ZqWH2.js} +1 -1
  69. package/packages/client/dist/assets/{tooltip-icon-button-DD8fKyR8.js → tooltip-icon-button-8C1wJ-l9.js} +1 -1
  70. package/packages/client/dist/assets/use-active-thread-id-ZlJtsqq4.js +1 -0
  71. package/packages/client/dist/assets/{use-branch-switch-DiWo4rV_.js → use-branch-switch-C45m2mx7.js} +1 -1
  72. package/packages/client/dist/assets/{use-image-lightbox-Wc7UJrhB.js → use-image-lightbox-CsMDwY1v.js} +1 -1
  73. package/packages/client/dist/assets/{use-stable-navigate-skK7Gqvr.js → use-stable-navigate-Cz_jWBHP.js} +1 -1
  74. package/packages/client/dist/assets/{use-terminal-scope-CFAKbZrD.js → use-terminal-scope-BX8zAMzc.js} +1 -1
  75. package/packages/client/dist/assets/{use-thread-creation-O-5GoSUZ.js → use-thread-creation-DSLV7F8I.js} +1 -1
  76. package/packages/client/dist/assets/{use-thread-search-BvRo6Jmy.js → use-thread-search-CXsiNqRR.js} +1 -1
  77. package/packages/client/dist/assets/{use-todo-panel-DE66QQ1x.js → use-todo-panel-DjPuehjq.js} +1 -1
  78. package/packages/client/dist/assets/{use-unified-prompt-model-groups-BFPXD7t_.js → use-unified-prompt-model-groups-wdA26Vnd.js} +1 -1
  79. package/packages/client/dist/assets/{use-ws-DSu9Bw5F.js → use-ws-AWIhcFYo.js} +3 -3
  80. package/packages/client/dist/assets/{visualizer-loader-Dsa-0UOJ.js → visualizer-loader-oxC04P38.js} +1 -1
  81. package/packages/client/dist/assets/{watcher-store-CPHW6IK4.js → watcher-store-gym76Ag_.js} +1 -1
  82. package/packages/client/dist/index.html +1 -1
  83. package/packages/runtime/dist/index.js +2 -2
  84. package/packages/runtime/dist/index.js.map +1 -1
  85. package/packages/client/dist/assets/use-active-thread-id-E8-K63Gj.js +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ironmussa/funny",
3
- "version": "0.1.6",
3
+ "version": "0.1.7",
4
4
  "private": false,
5
5
  "packageManager": "bun@1.3.10",
6
6
  "description": "Codex App clone powered by Claude Code — parallel agent orchestration with git worktrees",
@@ -93,8 +93,13 @@
93
93
  "@anthropic-ai/claude-agent-sdk": "^0.3.179",
94
94
  "@langchain/google-genai": "^2.1.31",
95
95
  "@langchain/openai": "^1.4.7",
96
+ "better-auth": "^1.6.19",
96
97
  "deepagents-acp": "^0.1.12",
98
+ "drizzle-orm": "^0.45.1",
97
99
  "hono": "^4.12.25",
100
+ "nanoid": "^5.0.9",
101
+ "neverthrow": "^8.2.0",
102
+ "nodemailer": "^9.0.1",
98
103
  "undici": "^8.5.0"
99
104
  },
100
105
  "devDependencies": {
@@ -107,7 +112,6 @@
107
112
  "cross-env": "^10.1.0",
108
113
  "eslint-plugin-zod": "4.7.0",
109
114
  "husky": "^9.1.7",
110
- "neverthrow": "^8.2.0",
111
115
  "oxfmt": "^0.55.0",
112
116
  "oxlint": "^1.70.0",
113
117
  "react-doctor": "^0.5.6",
@@ -1 +1 @@
1
- import{a as e}from"./rolldown-runtime-Cyuzqnbw.js";import{Lt as t,ar as n,lr as r,m as i,zr as a}from"./icons-sqwAEN28.js";import{o}from"./markdown-DBtwZWLP.js";import{M as s,P as c,k as l}from"./index-DCJpZz6M.js";import{t as u}from"./button-CZ967bB8.js";import{t as d}from"./input-C2LWQS5Y.js";import{t as f}from"./loading-state-CZgfErMi.js";var p=e(a(),1),m=e(o(),1);function h({token:e}){let a=l(e=>e.isAuthenticated),[o,h]=(0,p.useState)(`verifying`),[g,_]=(0,p.useState)(``),[v,y]=(0,p.useState)(``),[b,x]=(0,p.useState)(``),[S,C]=(0,p.useState)(``),[w,T]=(0,p.useState)(``),[E,D]=(0,p.useState)(``),[O,k]=(0,p.useState)(!1),[A,j]=(0,p.useState)(``),[M,N]=(0,p.useState)(!1);(0,p.useEffect)(()=>{c.verifyInviteLink(e).then(e=>{e.isOk()?(y(e.value.organizationName),x(e.value.role),a?P():h(`register`)):(h(`error`),_(e.error.message||`Invalid or expired invite link`))})},[e]);let P=(0,p.useCallback)(async()=>{h(`accepting`);let t=await c.acceptInviteLink(e);t.isOk()?h(t.value.alreadyMember?`already`:`success`):(h(`error`),_(t.error.message||`Failed to join organization`))},[e]),F=async t=>{t.preventDefault(),j(``),k(!0);try{let t=await c.registerViaInvite({token:e,username:S,password:w,displayName:E||void 0});if(t.isOk()){let{user:e}=t.value;l.setState({isAuthenticated:!0,user:{id:e.id,username:e.username,displayName:e.displayName,role:`user`}}),h(`success`)}else j(t.error.message||`Registration failed`),k(!1)}catch(e){j(e.message||`Registration failed`),k(!1)}},I=async e=>{e.preventDefault(),j(``),k(!0);try{let e=await s.signIn.username({username:S,password:w});if(e.error){j(e.error.message||`Login failed`),k(!1);return}let t=e.data?.user;t&&l.setState({isAuthenticated:!0,user:{id:t.id,username:t.username||t.name||`user`,displayName:t.name||t.username||`User`,role:t.role||`user`}}),await P()}catch(e){j(e.message||`Login failed`),k(!1)}},L=()=>{window.location.href=`/`};return(0,m.jsx)(`div`,{className:`bg-background flex min-h-screen items-center justify-center`,children:(0,m.jsxs)(`div`,{className:`border-border bg-card w-full max-w-sm space-y-6 rounded-lg border p-8 text-center shadow-lg`,children:[o===`verifying`&&(0,m.jsx)(f,{fill:!1,testId:`accept-invite-verifying`,label:`Verifying invite link…`}),o===`register`&&(0,m.jsxs)(m.Fragment,{children:[(0,m.jsx)(i,{className:`text-primary mx-auto size-8`}),(0,m.jsxs)(`div`,{children:[(0,m.jsxs)(`h2`,{className:`text-foreground text-lg font-semibold`,children:[`Join `,v]}),(0,m.jsxs)(`p`,{className:`text-muted-foreground mt-1 text-sm`,children:[`You've been invited as `,(0,m.jsx)(`span`,{className:`font-medium`,children:b}),`.`,` `,M?`Sign in to accept.`:`Create an account to get started.`]})]}),(0,m.jsxs)(`form`,{onSubmit:M?I:F,className:`space-y-4 text-left`,children:[(0,m.jsxs)(`div`,{className:`space-y-2`,children:[(0,m.jsx)(`label`,{htmlFor:`invite-username`,className:`text-foreground text-sm font-medium`,children:`Username`}),(0,m.jsx)(d,{id:`invite-username`,type:`text`,value:S,onChange:e=>C(e.target.value),placeholder:`Choose a username`,autoFocus:!0,required:!0,"data-testid":`invite-username`})]}),!M&&(0,m.jsxs)(`div`,{className:`space-y-2`,children:[(0,m.jsxs)(`label`,{htmlFor:`invite-display-name`,className:`text-foreground text-sm font-medium`,children:[`Display Name`,(0,m.jsx)(`span`,{className:`text-muted-foreground ml-1 font-normal`,children:`(optional)`})]}),(0,m.jsx)(d,{id:`invite-display-name`,type:`text`,value:E,onChange:e=>D(e.target.value),placeholder:`Your display name`,"data-testid":`invite-display-name`})]}),(0,m.jsxs)(`div`,{className:`space-y-2`,children:[(0,m.jsx)(`label`,{htmlFor:`invite-password`,className:`text-foreground text-sm font-medium`,children:`Password`}),(0,m.jsx)(d,{id:`invite-password`,type:`password`,value:w,onChange:e=>T(e.target.value),placeholder:M?`Your password`:`Choose a password`,required:!0,"data-testid":`invite-password`})]}),A&&(0,m.jsx)(`p`,{className:`text-destructive text-sm`,children:A}),(0,m.jsxs)(u,{type:`submit`,className:`w-full`,disabled:O||!S||!w,"data-testid":`invite-submit`,children:[O?(0,m.jsx)(t,{className:`icon-base mr-2 animate-spin`}):null,M?`Sign In & Join`:`Create Account & Join`]})]}),(0,m.jsx)(`p`,{className:`text-muted-foreground text-sm`,children:M?(0,m.jsxs)(m.Fragment,{children:[`Don't have an account?`,` `,(0,m.jsx)(`button`,{type:`button`,className:`text-primary hover:underline`,onClick:()=>{N(!1),j(``)},"data-testid":`invite-switch-register`,children:`Register`})]}):(0,m.jsxs)(m.Fragment,{children:[`Already have an account?`,` `,(0,m.jsx)(`button`,{type:`button`,className:`text-primary hover:underline`,onClick:()=>{N(!0),j(``)},"data-testid":`invite-switch-login`,children:`Sign in`})]})})]}),o===`accepting`&&(0,m.jsx)(f,{fill:!1,testId:`accept-invite-accepting`,label:`Joining ${v}...`}),o===`success`&&(0,m.jsxs)(m.Fragment,{children:[(0,m.jsx)(r,{className:`mx-auto size-8 text-green-500`}),(0,m.jsx)(`h2`,{className:`text-foreground text-lg font-semibold`,children:`You're in!`}),(0,m.jsxs)(`p`,{className:`text-muted-foreground text-sm`,children:[`You've successfully joined `,(0,m.jsx)(`span`,{className:`font-medium`,children:v}),`.`]}),(0,m.jsx)(u,{onClick:L,className:`w-full`,"data-testid":`invite-continue`,children:`Continue to App`})]}),o===`already`&&(0,m.jsxs)(m.Fragment,{children:[(0,m.jsx)(r,{className:`mx-auto size-8 text-blue-500`}),(0,m.jsx)(`h2`,{className:`text-foreground text-lg font-semibold`,children:`Already a member`}),(0,m.jsxs)(`p`,{className:`text-muted-foreground text-sm`,children:[`You're already a member of `,(0,m.jsx)(`span`,{className:`font-medium`,children:v}),`.`]}),(0,m.jsx)(u,{onClick:L,className:`w-full`,"data-testid":`invite-continue`,children:`Continue to App`})]}),o===`error`&&(0,m.jsxs)(m.Fragment,{children:[(0,m.jsx)(n,{className:`text-destructive mx-auto size-8`}),(0,m.jsx)(`h2`,{className:`text-foreground text-lg font-semibold`,children:`Invitation failed`}),(0,m.jsx)(`p`,{className:`text-muted-foreground text-sm`,children:g}),(0,m.jsx)(u,{variant:`outline`,onClick:L,className:`w-full`,"data-testid":`invite-continue`,children:`Go to App`})]})]})})}export{h as AcceptInvitePage};
1
+ import{a as e}from"./rolldown-runtime-Cyuzqnbw.js";import{Lt as t,ar as n,lr as r,m as i,zr as a}from"./icons-sqwAEN28.js";import{o}from"./markdown-DBtwZWLP.js";import{M as s,P as c,k as l}from"./index-DNxUSLe_.js";import{t as u}from"./button-B9Ypx1uQ.js";import{t as d}from"./input-CJ3TsT2L.js";import{t as f}from"./loading-state-yLj5fYb6.js";var p=e(a(),1),m=e(o(),1);function h({token:e}){let a=l(e=>e.isAuthenticated),[o,h]=(0,p.useState)(`verifying`),[g,_]=(0,p.useState)(``),[v,y]=(0,p.useState)(``),[b,x]=(0,p.useState)(``),[S,C]=(0,p.useState)(``),[w,T]=(0,p.useState)(``),[E,D]=(0,p.useState)(``),[O,k]=(0,p.useState)(!1),[A,j]=(0,p.useState)(``),[M,N]=(0,p.useState)(!1);(0,p.useEffect)(()=>{c.verifyInviteLink(e).then(e=>{e.isOk()?(y(e.value.organizationName),x(e.value.role),a?P():h(`register`)):(h(`error`),_(e.error.message||`Invalid or expired invite link`))})},[e]);let P=(0,p.useCallback)(async()=>{h(`accepting`);let t=await c.acceptInviteLink(e);t.isOk()?h(t.value.alreadyMember?`already`:`success`):(h(`error`),_(t.error.message||`Failed to join organization`))},[e]),F=async t=>{t.preventDefault(),j(``),k(!0);try{let t=await c.registerViaInvite({token:e,username:S,password:w,displayName:E||void 0});if(t.isOk()){let{user:e}=t.value;l.setState({isAuthenticated:!0,user:{id:e.id,username:e.username,displayName:e.displayName,role:`user`}}),h(`success`)}else j(t.error.message||`Registration failed`),k(!1)}catch(e){j(e.message||`Registration failed`),k(!1)}},I=async e=>{e.preventDefault(),j(``),k(!0);try{let e=await s.signIn.username({username:S,password:w});if(e.error){j(e.error.message||`Login failed`),k(!1);return}let t=e.data?.user;t&&l.setState({isAuthenticated:!0,user:{id:t.id,username:t.username||t.name||`user`,displayName:t.name||t.username||`User`,role:t.role||`user`}}),await P()}catch(e){j(e.message||`Login failed`),k(!1)}},L=()=>{window.location.href=`/`};return(0,m.jsx)(`div`,{className:`bg-background flex min-h-screen items-center justify-center`,children:(0,m.jsxs)(`div`,{className:`border-border bg-card w-full max-w-sm space-y-6 rounded-lg border p-8 text-center shadow-lg`,children:[o===`verifying`&&(0,m.jsx)(f,{fill:!1,testId:`accept-invite-verifying`,label:`Verifying invite link…`}),o===`register`&&(0,m.jsxs)(m.Fragment,{children:[(0,m.jsx)(i,{className:`text-primary mx-auto size-8`}),(0,m.jsxs)(`div`,{children:[(0,m.jsxs)(`h2`,{className:`text-foreground text-lg font-semibold`,children:[`Join `,v]}),(0,m.jsxs)(`p`,{className:`text-muted-foreground mt-1 text-sm`,children:[`You've been invited as `,(0,m.jsx)(`span`,{className:`font-medium`,children:b}),`.`,` `,M?`Sign in to accept.`:`Create an account to get started.`]})]}),(0,m.jsxs)(`form`,{onSubmit:M?I:F,className:`space-y-4 text-left`,children:[(0,m.jsxs)(`div`,{className:`space-y-2`,children:[(0,m.jsx)(`label`,{htmlFor:`invite-username`,className:`text-foreground text-sm font-medium`,children:`Username`}),(0,m.jsx)(d,{id:`invite-username`,type:`text`,value:S,onChange:e=>C(e.target.value),placeholder:`Choose a username`,autoFocus:!0,required:!0,"data-testid":`invite-username`})]}),!M&&(0,m.jsxs)(`div`,{className:`space-y-2`,children:[(0,m.jsxs)(`label`,{htmlFor:`invite-display-name`,className:`text-foreground text-sm font-medium`,children:[`Display Name`,(0,m.jsx)(`span`,{className:`text-muted-foreground ml-1 font-normal`,children:`(optional)`})]}),(0,m.jsx)(d,{id:`invite-display-name`,type:`text`,value:E,onChange:e=>D(e.target.value),placeholder:`Your display name`,"data-testid":`invite-display-name`})]}),(0,m.jsxs)(`div`,{className:`space-y-2`,children:[(0,m.jsx)(`label`,{htmlFor:`invite-password`,className:`text-foreground text-sm font-medium`,children:`Password`}),(0,m.jsx)(d,{id:`invite-password`,type:`password`,value:w,onChange:e=>T(e.target.value),placeholder:M?`Your password`:`Choose a password`,required:!0,"data-testid":`invite-password`})]}),A&&(0,m.jsx)(`p`,{className:`text-destructive text-sm`,children:A}),(0,m.jsxs)(u,{type:`submit`,className:`w-full`,disabled:O||!S||!w,"data-testid":`invite-submit`,children:[O?(0,m.jsx)(t,{className:`icon-base mr-2 animate-spin`}):null,M?`Sign In & Join`:`Create Account & Join`]})]}),(0,m.jsx)(`p`,{className:`text-muted-foreground text-sm`,children:M?(0,m.jsxs)(m.Fragment,{children:[`Don't have an account?`,` `,(0,m.jsx)(`button`,{type:`button`,className:`text-primary hover:underline`,onClick:()=>{N(!1),j(``)},"data-testid":`invite-switch-register`,children:`Register`})]}):(0,m.jsxs)(m.Fragment,{children:[`Already have an account?`,` `,(0,m.jsx)(`button`,{type:`button`,className:`text-primary hover:underline`,onClick:()=>{N(!0),j(``)},"data-testid":`invite-switch-login`,children:`Sign in`})]})})]}),o===`accepting`&&(0,m.jsx)(f,{fill:!1,testId:`accept-invite-accepting`,label:`Joining ${v}...`}),o===`success`&&(0,m.jsxs)(m.Fragment,{children:[(0,m.jsx)(r,{className:`mx-auto size-8 text-green-500`}),(0,m.jsx)(`h2`,{className:`text-foreground text-lg font-semibold`,children:`You're in!`}),(0,m.jsxs)(`p`,{className:`text-muted-foreground text-sm`,children:[`You've successfully joined `,(0,m.jsx)(`span`,{className:`font-medium`,children:v}),`.`]}),(0,m.jsx)(u,{onClick:L,className:`w-full`,"data-testid":`invite-continue`,children:`Continue to App`})]}),o===`already`&&(0,m.jsxs)(m.Fragment,{children:[(0,m.jsx)(r,{className:`mx-auto size-8 text-blue-500`}),(0,m.jsx)(`h2`,{className:`text-foreground text-lg font-semibold`,children:`Already a member`}),(0,m.jsxs)(`p`,{className:`text-muted-foreground text-sm`,children:[`You're already a member of `,(0,m.jsx)(`span`,{className:`font-medium`,children:v}),`.`]}),(0,m.jsx)(u,{onClick:L,className:`w-full`,"data-testid":`invite-continue`,children:`Continue to App`})]}),o===`error`&&(0,m.jsxs)(m.Fragment,{children:[(0,m.jsx)(n,{className:`text-destructive mx-auto size-8`}),(0,m.jsx)(`h2`,{className:`text-foreground text-lg font-semibold`,children:`Invitation failed`}),(0,m.jsx)(`p`,{className:`text-muted-foreground text-sm`,children:g}),(0,m.jsx)(u,{variant:`outline`,onClick:L,className:`w-full`,"data-testid":`invite-continue`,children:`Go to App`})]})]})})}export{h as AcceptInvitePage};
@@ -1 +1 @@
1
- import{a as e}from"./rolldown-runtime-Cyuzqnbw.js";import{Dr as t,Gn as n,Lt as r,Mn as i,Rr as a,ir as o,kn as s,lr as c,sr as l,ut as u,wn as d,zr as f}from"./icons-sqwAEN28.js";import{o as p}from"./markdown-DBtwZWLP.js";import{t as m}from"./useTranslation-DAPPK3Hy.js";import{G as h,P as g,W as _,lt as v,q as y}from"./index-DCJpZz6M.js";import{t as b}from"./button-CZ967bB8.js";import{$r as x,Ct as S,Dr as C,Dt as w,Gr as T,Jr as ee,Ot as E,Tt as D,Ur as O,in as te,qr as k,wt as A,yr as ne}from"./items-azeOGVff.js";import{t as j}from"./FileTree-C-k9qiIl.js";import{a as M,i as N,n as P,t as F}from"./diff-parse-PPACfn0L.js";import{n as I}from"./review-pane-store-B31R8Yhv.js";import{n as re}from"./use-todo-panel-DE66QQ1x.js";var L=e(f(),1),R=new Set;function z(e){let t=S(),n=w()===`running`,[r,i]=(0,L.useState)(R),a=(0,L.useRef)(R),o=(0,L.useRef)(void 0),s=(0,L.useRef)(null);return(0,L.useEffect)(()=>{if(t!==o.current&&(o.current=t,i(R),a.current=R,s.current?.abort(),s.current=null),!t||!e)return;let r=!1,c=async()=>{s.current?.abort();let e=new AbortController;s.current=e;let n;try{n=await g.getTouchedFiles(t,e.signal)}catch{return}if(!(r||e.signal.aborted)&&n.isOk()){let e=n.value.files;if(e.length===0){a.current.size!==0&&(a.current=R,i(R));return}let t=new Set(e),r=a.current;(t.size!==r.size||![...t].every(e=>r.has(e)))&&(a.current=t,i(t))}};if(c(),n){let e=setInterval(c,5e3);return()=>{r=!0,s.current?.abort(),clearInterval(e)}}return()=>{r=!0,s.current?.abort()}},[t,n,e]),r}function B(e=!0){let t=S(),n=I(e=>e.dirtySignal),r=z(e),[i,a]=(0,L.useState)([]),[o,s]=(0,L.useState)(!1),[c,l]=(0,L.useState)(0),u=(0,L.useRef)(t);return(0,L.useEffect)(()=>{t!==u.current&&(u.current=t,a([]),s(!!t))},[t]),(0,L.useEffect)(()=>{if(!t){a([]);return}if(r.size===0){a([]),s(!1);return}let e=!1,n=setTimeout(async()=>{s(!0);let n;try{n=await g.getDiffSummary(t)}catch{e||s(!1);return}!e&&n.isOk()&&a(n.value.files.filter(e=>{for(let t of r)if(t.endsWith(`/${e.path}`)||t===e.path)return!0;return!1})),e||s(!1)},300);return()=>{e=!0,clearTimeout(n)}},[t,n,c,r]),{files:i,loading:o,refresh:(0,L.useCallback)(()=>l(e=>e+1),[])}}var V=e(p(),1),H={added:s,modified:i,deleted:d,renamed:i};function U(){let e=(0,L.useRef)([]),t=A();return(0,L.useMemo)(()=>{if(!t)return e.current.length===0||(e.current=[]),e.current;let n=[];for(let e of t)for(let t of e.toolCalls??[])n.push(t);let r=[];for(let e of n)if((e.name===`Task`||e.name===`Agent`)&&!e.output){let t=M(e.input),i=t.description??t.prompt??`Sub-agent`,a=n.filter(t=>t.parentToolCallId===e.id).length;r.push({id:e.id,description:i,childToolCallCount:a})}let i=e.current;return i.length===r.length&&r.every((e,t)=>e.id===i[t].id&&e.childToolCallCount===i[t].childToolCallCount)?i:(e.current=r,r)},[t])}function W({title:e,testId:t,count:n,children:r}){return(0,V.jsxs)(`div`,{"data-testid":t,children:[(0,V.jsxs)(`div`,{className:`border-border/50 flex items-center gap-2 border-b px-2 py-1.5`,children:[(0,V.jsx)(`span`,{className:`text-muted-foreground flex-1 text-xs font-semibold tracking-wider uppercase`,children:e}),n!==void 0&&n>0&&(0,V.jsx)(`span`,{className:`bg-muted text-muted-foreground rounded-full px-1.5 py-0.5 font-mono text-[10px]`,children:n})]}),r]})}function G({todos:e,progress:t}){let n=t.total>0?Math.round(t.completed/t.total*100):0,r=t.completed===t.total;return(0,V.jsxs)(`div`,{className:`mt-1.5 space-y-1.5`,children:[(0,V.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,V.jsx)(`div`,{className:`bg-muted h-1 flex-1 overflow-hidden rounded-full`,children:(0,V.jsx)(`div`,{className:v(`h-full rounded-full transition-all duration-500`,r?`bg-status-success/80`:`bg-status-info/80`),style:{width:`${n}%`}})}),(0,V.jsxs)(`span`,{className:v(`font-mono text-[10px]`,r?`text-status-success/80`:`text-muted-foreground`),children:[t.completed,`/`,t.total]})]}),(0,V.jsx)(`div`,{className:`space-y-1`,children:e.map((e,t)=>(0,V.jsxs)(`div`,{"data-testid":`activity-todo-${t}`,className:`flex items-start gap-2`,children:[e.status===`completed`?(0,V.jsx)(c,{className:`icon-sm text-status-success/80 mt-0.5 shrink-0`}):e.status===`in_progress`?(0,V.jsx)(l,{className:`icon-sm text-status-info mt-0.5 shrink-0 animate-pulse`}):(0,V.jsx)(o,{className:`icon-sm text-muted-foreground/50 mt-0.5 shrink-0`}),(0,V.jsx)(`span`,{className:v(`text-xs leading-relaxed`,e.status===`completed`&&`text-muted-foreground line-through`,e.status===`in_progress`&&`font-medium text-foreground`,e.status===`pending`&&`text-muted-foreground`),children:e.status===`in_progress`&&e.activeForm||e.content})]},e.content))})]})}function K({testId:e,icon:t,label:n,isRunning:i,childToolCallCount:a,todoSnapshot:o}){let{t:s}=m();return(0,V.jsxs)(`div`,{"data-testid":e,className:`px-2.5 py-2`,children:[(0,V.jsxs)(`div`,{className:`flex items-center gap-2`,children:[i&&(0,V.jsx)(r,{className:`icon-xs text-muted-foreground shrink-0 animate-spin`}),(0,V.jsx)(t,{className:`icon-sm text-muted-foreground shrink-0`}),(0,V.jsx)(`span`,{className:`text-muted-foreground min-w-0 flex-1 truncate text-xs font-medium`,children:n}),a!==void 0&&a>0&&(0,V.jsxs)(`span`,{className:`bg-muted text-muted-foreground shrink-0 rounded px-1.5 py-0.5 font-mono text-[10px]`,children:[a,` `,s(`activity.toolCalls`,`tool calls`)]})]}),o&&(0,V.jsx)(G,{todos:o.todos,progress:o.progress})]})}function q({message:e}){return(0,V.jsx)(`div`,{className:`text-muted-foreground/50 px-4 py-3 text-center text-xs italic`,children:e})}function J(){let{t:e}=m(),r=U(),o=re(),s=w()===`running`,c=s||o.mainAgent!==null,l=+!!c+r.length,{files:d,loading:f,refresh:p}=B(),[v,A]=(0,L.useState)(null),[M,I]=(0,L.useState)(null),[R,z]=(0,L.useState)(new Map),[G,J]=(0,L.useState)(null),Y=S(),X=(0,L.useRef)(Y);(0,L.useEffect)(()=>{Y!==X.current&&(X.current=Y,A(null),I(null),z(new Map),J(null))},[Y]);let Z=E(),Q=D(),$=C(e=>e.projects),ie=(0,L.useMemo)(()=>Z||(Q?$.find(e=>e.id===Q)?.path??``:``),[Z,Q,$]),ae=(0,L.useCallback)(async e=>{if(!Y||R.has(e))return;let t=d.find(t=>t.path===e);if(!t)return;J(e);let n=await g.getFileDiff(Y,e,t.staged);n.isOk()&&z(t=>new Map(t).set(e,n.value.diff)),J(t=>t===e?null:t)},[Y,R,d]);(0,L.useEffect)(()=>{M&&!R.has(M)&&ae(M)},[M]);let oe=(0,L.useCallback)(async e=>{if(!Y)return null;let t=d.find(t=>t.path===e);if(!t)return null;let n=await g.getFileDiff(Y,e,t.staged,void 0,`full`);return n.isOk()?{oldValue:P(n.value.diff),newValue:F(n.value.diff),rawDiff:n.value.diff}:null},[Y,d]),se=(0,L.useCallback)(async t=>{if(!Y)return;let n=await g.revertFiles(Y,[t]);n.isErr()?O.error(e(`review.revertFailed`,{message:n.error.message})):(O.success(e(`review.revertSuccess`,{path:t,defaultValue:`{{path}} reverted`})),z(e=>{let n=new Map(e);return n.delete(t),n}),p())},[Y,e,p]),ce=(0,L.useCallback)(e=>{A(e),I(e)},[]);return Y?(0,V.jsxs)(`div`,{"data-testid":`activity-pane`,className:`flex h-full flex-col`,children:[(0,V.jsxs)(`div`,{className:`border-sidebar-border flex shrink-0 items-center justify-between border-b px-4 py-3`,children:[(0,V.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,V.jsx)(a,{className:`icon-base text-muted-foreground`}),(0,V.jsx)(`h3`,{className:`text-sidebar-foreground text-xs font-semibold tracking-wider uppercase`,children:e(`activity.title`,`Activity`)})]}),(0,V.jsxs)(_,{children:[(0,V.jsx)(y,{asChild:!0,children:(0,V.jsx)(b,{variant:`ghost`,size:`icon-xs`,onClick:()=>ne.getState().setReviewPaneOpen(!1),className:`text-muted-foreground`,"data-testid":`activity-close`,children:(0,V.jsx)(u,{className:`icon-sm`})})}),(0,V.jsx)(h,{side:`bottom`,children:e(`common.close`,`Close`)})]})]}),(0,V.jsx)(te,{className:`min-h-0 flex-1`,children:(0,V.jsxs)(`div`,{className:`space-y-3 p-3`,children:[(0,V.jsx)(W,{title:e(`activity.agents`,`Agents`),testId:`activity-agents`,count:l,children:l>0?(0,V.jsxs)(`div`,{className:`space-y-1.5 px-2 py-1.5`,children:[c&&(0,V.jsx)(K,{testId:`activity-agent-main`,icon:n,label:e(`activity.mainAgent`,`Main agent`),isRunning:!!s,todoSnapshot:o.mainAgent}),r.map(e=>(0,V.jsx)(K,{testId:`activity-agent-${e.id}`,icon:t,label:e.description,isRunning:!0,childToolCallCount:e.childToolCallCount,todoSnapshot:o.bySubAgent.get(e.id)??null},e.id))]}):(0,V.jsx)(q,{message:e(`activity.noAgents`,`No running agents`)})}),(0,V.jsx)(W,{title:e(`activity.files`,`Modified Files`),testId:`activity-files`,count:d.length,children:d.length>0?(0,V.jsx)(j,{files:d,selectedFile:v,onFileClick:ce,onRevertFile:se,basePath:ie,diffStatsSize:`xs`,fontSize:`text-xs`,testIdPrefix:`activity-file`}):(0,V.jsx)(q,{message:f?e(`activity.loadingFiles`,`Loading...`):e(`activity.noFiles`,`No modified files`)})})]})}),(0,V.jsx)(T,{open:!!M,onOpenChange:e=>{e||I(null)},children:(0,V.jsx)(k,{className:`flex h-[85vh] w-[90vw] max-w-[90vw] flex-col gap-0 overflow-hidden p-0`,"data-testid":`activity-expanded-diff-overlay`,children:(()=>{let t=M?d.find(e=>e.path===M):void 0,n=M?R.get(M):void 0,r=t&&H[t.status]||i;return(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(x,{className:`sr-only`,children:t?.path??e(`review.diffViewer`,`Diff viewer`)}),(0,V.jsx)(ee,{className:`sr-only`,children:e(`review.diffViewerDescription`,`View and stage changes for the selected file`)}),M&&(0,V.jsx)(`div`,{className:`flex min-h-0 min-w-0 flex-1`,children:(0,V.jsx)(`div`,{className:`flex min-w-0 flex-1 flex-col`,children:(0,V.jsx)(N,{filePath:t?.path||M,oldValue:n?P(n):``,newValue:n?F(n):``,icon:r,loading:G===M,rawDiff:n,files:d,onFileSelect:e=>{A(e),I(e)},diffCache:R,onClose:()=>I(null),onRequestFullDiff:oe})})})]})})()})})]}):(0,V.jsx)(`div`,{"data-testid":`activity-pane`,className:`text-muted-foreground flex h-full items-center justify-center text-sm`,children:e(`activity.noThread`,`Select a thread to see activity`)})}export{J as ActivityPane};
1
+ import{a as e}from"./rolldown-runtime-Cyuzqnbw.js";import{Dr as t,Gn as n,Lt as r,Mn as i,Rr as a,ir as o,kn as s,lr as c,sr as l,ut as u,wn as d,zr as f}from"./icons-sqwAEN28.js";import{o as p}from"./markdown-DBtwZWLP.js";import{t as m}from"./useTranslation-DAPPK3Hy.js";import{G as h,P as g,W as _,lt as v,q as y}from"./index-DNxUSLe_.js";import{t as b}from"./button-B9Ypx1uQ.js";import{$r as x,Ct as S,Dr as C,Dt as w,Gr as T,Jr as ee,Ot as E,Tt as D,Ur as O,in as te,qr as k,wt as A,yr as ne}from"./items-7qqySF-X.js";import{t as j}from"./FileTree-Bl25zGAE.js";import{a as M,i as N,n as P,t as F}from"./diff-parse-DgLol0S6.js";import{n as I}from"./review-pane-store-B31R8Yhv.js";import{n as re}from"./use-todo-panel-DjPuehjq.js";var L=e(f(),1),R=new Set;function z(e){let t=S(),n=w()===`running`,[r,i]=(0,L.useState)(R),a=(0,L.useRef)(R),o=(0,L.useRef)(void 0),s=(0,L.useRef)(null);return(0,L.useEffect)(()=>{if(t!==o.current&&(o.current=t,i(R),a.current=R,s.current?.abort(),s.current=null),!t||!e)return;let r=!1,c=async()=>{s.current?.abort();let e=new AbortController;s.current=e;let n;try{n=await g.getTouchedFiles(t,e.signal)}catch{return}if(!(r||e.signal.aborted)&&n.isOk()){let e=n.value.files;if(e.length===0){a.current.size!==0&&(a.current=R,i(R));return}let t=new Set(e),r=a.current;(t.size!==r.size||![...t].every(e=>r.has(e)))&&(a.current=t,i(t))}};if(c(),n){let e=setInterval(c,5e3);return()=>{r=!0,s.current?.abort(),clearInterval(e)}}return()=>{r=!0,s.current?.abort()}},[t,n,e]),r}function B(e=!0){let t=S(),n=I(e=>e.dirtySignal),r=z(e),[i,a]=(0,L.useState)([]),[o,s]=(0,L.useState)(!1),[c,l]=(0,L.useState)(0),u=(0,L.useRef)(t);return(0,L.useEffect)(()=>{t!==u.current&&(u.current=t,a([]),s(!!t))},[t]),(0,L.useEffect)(()=>{if(!t){a([]);return}if(r.size===0){a([]),s(!1);return}let e=!1,n=setTimeout(async()=>{s(!0);let n;try{n=await g.getDiffSummary(t)}catch{e||s(!1);return}!e&&n.isOk()&&a(n.value.files.filter(e=>{for(let t of r)if(t.endsWith(`/${e.path}`)||t===e.path)return!0;return!1})),e||s(!1)},300);return()=>{e=!0,clearTimeout(n)}},[t,n,c,r]),{files:i,loading:o,refresh:(0,L.useCallback)(()=>l(e=>e+1),[])}}var V=e(p(),1),H={added:s,modified:i,deleted:d,renamed:i};function U(){let e=(0,L.useRef)([]),t=A();return(0,L.useMemo)(()=>{if(!t)return e.current.length===0||(e.current=[]),e.current;let n=[];for(let e of t)for(let t of e.toolCalls??[])n.push(t);let r=[];for(let e of n)if((e.name===`Task`||e.name===`Agent`)&&!e.output){let t=M(e.input),i=t.description??t.prompt??`Sub-agent`,a=n.filter(t=>t.parentToolCallId===e.id).length;r.push({id:e.id,description:i,childToolCallCount:a})}let i=e.current;return i.length===r.length&&r.every((e,t)=>e.id===i[t].id&&e.childToolCallCount===i[t].childToolCallCount)?i:(e.current=r,r)},[t])}function W({title:e,testId:t,count:n,children:r}){return(0,V.jsxs)(`div`,{"data-testid":t,children:[(0,V.jsxs)(`div`,{className:`border-border/50 flex items-center gap-2 border-b px-2 py-1.5`,children:[(0,V.jsx)(`span`,{className:`text-muted-foreground flex-1 text-xs font-semibold tracking-wider uppercase`,children:e}),n!==void 0&&n>0&&(0,V.jsx)(`span`,{className:`bg-muted text-muted-foreground rounded-full px-1.5 py-0.5 font-mono text-[10px]`,children:n})]}),r]})}function G({todos:e,progress:t}){let n=t.total>0?Math.round(t.completed/t.total*100):0,r=t.completed===t.total;return(0,V.jsxs)(`div`,{className:`mt-1.5 space-y-1.5`,children:[(0,V.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,V.jsx)(`div`,{className:`bg-muted h-1 flex-1 overflow-hidden rounded-full`,children:(0,V.jsx)(`div`,{className:v(`h-full rounded-full transition-all duration-500`,r?`bg-status-success/80`:`bg-status-info/80`),style:{width:`${n}%`}})}),(0,V.jsxs)(`span`,{className:v(`font-mono text-[10px]`,r?`text-status-success/80`:`text-muted-foreground`),children:[t.completed,`/`,t.total]})]}),(0,V.jsx)(`div`,{className:`space-y-1`,children:e.map((e,t)=>(0,V.jsxs)(`div`,{"data-testid":`activity-todo-${t}`,className:`flex items-start gap-2`,children:[e.status===`completed`?(0,V.jsx)(c,{className:`icon-sm text-status-success/80 mt-0.5 shrink-0`}):e.status===`in_progress`?(0,V.jsx)(l,{className:`icon-sm text-status-info mt-0.5 shrink-0 animate-pulse`}):(0,V.jsx)(o,{className:`icon-sm text-muted-foreground/50 mt-0.5 shrink-0`}),(0,V.jsx)(`span`,{className:v(`text-xs leading-relaxed`,e.status===`completed`&&`text-muted-foreground line-through`,e.status===`in_progress`&&`font-medium text-foreground`,e.status===`pending`&&`text-muted-foreground`),children:e.status===`in_progress`&&e.activeForm||e.content})]},e.content))})]})}function K({testId:e,icon:t,label:n,isRunning:i,childToolCallCount:a,todoSnapshot:o}){let{t:s}=m();return(0,V.jsxs)(`div`,{"data-testid":e,className:`px-2.5 py-2`,children:[(0,V.jsxs)(`div`,{className:`flex items-center gap-2`,children:[i&&(0,V.jsx)(r,{className:`icon-xs text-muted-foreground shrink-0 animate-spin`}),(0,V.jsx)(t,{className:`icon-sm text-muted-foreground shrink-0`}),(0,V.jsx)(`span`,{className:`text-muted-foreground min-w-0 flex-1 truncate text-xs font-medium`,children:n}),a!==void 0&&a>0&&(0,V.jsxs)(`span`,{className:`bg-muted text-muted-foreground shrink-0 rounded px-1.5 py-0.5 font-mono text-[10px]`,children:[a,` `,s(`activity.toolCalls`,`tool calls`)]})]}),o&&(0,V.jsx)(G,{todos:o.todos,progress:o.progress})]})}function q({message:e}){return(0,V.jsx)(`div`,{className:`text-muted-foreground/50 px-4 py-3 text-center text-xs italic`,children:e})}function J(){let{t:e}=m(),r=U(),o=re(),s=w()===`running`,c=s||o.mainAgent!==null,l=+!!c+r.length,{files:d,loading:f,refresh:p}=B(),[v,A]=(0,L.useState)(null),[M,I]=(0,L.useState)(null),[R,z]=(0,L.useState)(new Map),[G,J]=(0,L.useState)(null),Y=S(),X=(0,L.useRef)(Y);(0,L.useEffect)(()=>{Y!==X.current&&(X.current=Y,A(null),I(null),z(new Map),J(null))},[Y]);let Z=E(),Q=D(),$=C(e=>e.projects),ie=(0,L.useMemo)(()=>Z||(Q?$.find(e=>e.id===Q)?.path??``:``),[Z,Q,$]),ae=(0,L.useCallback)(async e=>{if(!Y||R.has(e))return;let t=d.find(t=>t.path===e);if(!t)return;J(e);let n=await g.getFileDiff(Y,e,t.staged);n.isOk()&&z(t=>new Map(t).set(e,n.value.diff)),J(t=>t===e?null:t)},[Y,R,d]);(0,L.useEffect)(()=>{M&&!R.has(M)&&ae(M)},[M]);let oe=(0,L.useCallback)(async e=>{if(!Y)return null;let t=d.find(t=>t.path===e);if(!t)return null;let n=await g.getFileDiff(Y,e,t.staged,void 0,`full`);return n.isOk()?{oldValue:P(n.value.diff),newValue:F(n.value.diff),rawDiff:n.value.diff}:null},[Y,d]),se=(0,L.useCallback)(async t=>{if(!Y)return;let n=await g.revertFiles(Y,[t]);n.isErr()?O.error(e(`review.revertFailed`,{message:n.error.message})):(O.success(e(`review.revertSuccess`,{path:t,defaultValue:`{{path}} reverted`})),z(e=>{let n=new Map(e);return n.delete(t),n}),p())},[Y,e,p]),ce=(0,L.useCallback)(e=>{A(e),I(e)},[]);return Y?(0,V.jsxs)(`div`,{"data-testid":`activity-pane`,className:`flex h-full flex-col`,children:[(0,V.jsxs)(`div`,{className:`border-sidebar-border flex shrink-0 items-center justify-between border-b px-4 py-3`,children:[(0,V.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,V.jsx)(a,{className:`icon-base text-muted-foreground`}),(0,V.jsx)(`h3`,{className:`text-sidebar-foreground text-xs font-semibold tracking-wider uppercase`,children:e(`activity.title`,`Activity`)})]}),(0,V.jsxs)(_,{children:[(0,V.jsx)(y,{asChild:!0,children:(0,V.jsx)(b,{variant:`ghost`,size:`icon-xs`,onClick:()=>ne.getState().setReviewPaneOpen(!1),className:`text-muted-foreground`,"data-testid":`activity-close`,children:(0,V.jsx)(u,{className:`icon-sm`})})}),(0,V.jsx)(h,{side:`bottom`,children:e(`common.close`,`Close`)})]})]}),(0,V.jsx)(te,{className:`min-h-0 flex-1`,children:(0,V.jsxs)(`div`,{className:`space-y-3 p-3`,children:[(0,V.jsx)(W,{title:e(`activity.agents`,`Agents`),testId:`activity-agents`,count:l,children:l>0?(0,V.jsxs)(`div`,{className:`space-y-1.5 px-2 py-1.5`,children:[c&&(0,V.jsx)(K,{testId:`activity-agent-main`,icon:n,label:e(`activity.mainAgent`,`Main agent`),isRunning:!!s,todoSnapshot:o.mainAgent}),r.map(e=>(0,V.jsx)(K,{testId:`activity-agent-${e.id}`,icon:t,label:e.description,isRunning:!0,childToolCallCount:e.childToolCallCount,todoSnapshot:o.bySubAgent.get(e.id)??null},e.id))]}):(0,V.jsx)(q,{message:e(`activity.noAgents`,`No running agents`)})}),(0,V.jsx)(W,{title:e(`activity.files`,`Modified Files`),testId:`activity-files`,count:d.length,children:d.length>0?(0,V.jsx)(j,{files:d,selectedFile:v,onFileClick:ce,onRevertFile:se,basePath:ie,diffStatsSize:`xs`,fontSize:`text-xs`,testIdPrefix:`activity-file`}):(0,V.jsx)(q,{message:f?e(`activity.loadingFiles`,`Loading...`):e(`activity.noFiles`,`No modified files`)})})]})}),(0,V.jsx)(T,{open:!!M,onOpenChange:e=>{e||I(null)},children:(0,V.jsx)(k,{className:`flex h-[85vh] w-[90vw] max-w-[90vw] flex-col gap-0 overflow-hidden p-0`,"data-testid":`activity-expanded-diff-overlay`,children:(()=>{let t=M?d.find(e=>e.path===M):void 0,n=M?R.get(M):void 0,r=t&&H[t.status]||i;return(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(x,{className:`sr-only`,children:t?.path??e(`review.diffViewer`,`Diff viewer`)}),(0,V.jsx)(ee,{className:`sr-only`,children:e(`review.diffViewerDescription`,`View and stage changes for the selected file`)}),M&&(0,V.jsx)(`div`,{className:`flex min-h-0 min-w-0 flex-1`,children:(0,V.jsx)(`div`,{className:`flex min-w-0 flex-1 flex-col`,children:(0,V.jsx)(N,{filePath:t?.path||M,oldValue:n?P(n):``,newValue:n?F(n):``,icon:r,loading:G===M,rawDiff:n,files:d,onFileSelect:e=>{A(e),I(e)},diffCache:R,onClose:()=>I(null),onRequestFullDiff:oe})})})]})})()})})]}):(0,V.jsx)(`div`,{"data-testid":`activity-pane`,className:`text-muted-foreground flex h-full items-center justify-center text-sm`,children:e(`activity.noThread`,`Select a thread to see activity`)})}export{J as ActivityPane};
@@ -1 +1 @@
1
- import{a as e,t}from"./rolldown-runtime-Cyuzqnbw.js";import{Ft as n,It as r,Kn as i,L as a,Lt as o,Mr as s,Q as c,on as l,yn as u,yr as d,zn as f,zr as p}from"./icons-sqwAEN28.js";import{o as m}from"./markdown-DBtwZWLP.js";import{i as h}from"./_core-lD_pNs53.js";import{a as g,i as _,n as v,o as y,r as b,t as x}from"./useTranslation-DAPPK3Hy.js";import{i as S,n as C,r as ee}from"./initReactI18next-Dr0vnWXF.js";import{G as w,P as T,W as te,_t as E,j as D,lt as O,q as k}from"./index-DCJpZz6M.js";import{t as A}from"./button-CZ967bB8.js";import{$r as ne,Gr as re,Jr as j,K as ie,Nn as M,Rt as N,Ur as P,Wn as F,Xr as ae,Yr as I,gt as oe,in as se,mn as ce,qr as L,yr as le}from"./items-azeOGVff.js";import{t as R}from"./input-C2LWQS5Y.js";import{t as ue}from"./loading-state-CZgfErMi.js";import{t as de}from"./app-store-CfgpkFla.js";import{t as fe}from"./FolderPicker-Ccn8T963.js";var pe=e(t(((e,t)=>{t.exports={area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0}}))()),z=/\s([^'"/\s><]+?)[\s/>]|([^\s=]+)=\s?(".*?"|'.*?')/g;function B(e){var t={type:`tag`,name:``,voidElement:!1,attrs:{},children:[]},n=e.match(/<\/?([^\s]+?)[/\s>]/);if(n&&(t.name=n[1],(pe.default[n[1]]||e.charAt(e.length-2)===`/`)&&(t.voidElement=!0),t.name.startsWith(`!--`))){var r=e.indexOf(`-->`);return{type:`comment`,comment:r===-1?``:e.slice(4,r)}}for(var i=new RegExp(z),a=null;(a=i.exec(e))!==null;)if(a[0].trim())if(a[1]){var o=a[1].trim(),s=[o,``];o.indexOf(`=`)>-1&&(s=o.split(`=`)),t.attrs[s[0]]=s[1],i.lastIndex--}else a[2]&&(t.attrs[a[2]]=a[3].trim().substring(1,a[3].length-1));return t}var V=/<[a-zA-Z0-9\-\!\/](?:"[^"]*"|'[^']*'|[^'">])*>/g,me=/^\s*$/,he=Object.create(null);function ge(e,t){switch(t.type){case`text`:return e+t.content;case`tag`:return e+=`<`+t.name+(t.attrs?function(e){var t=[];for(var n in e)t.push(n+`="`+e[n]+`"`);return t.length?` `+t.join(` `):``}(t.attrs):``)+(t.voidElement?`/>`:`>`),t.voidElement?e:e+t.children.reduce(ge,``)+`</`+t.name+`>`;case`comment`:return e+`<!--`+t.comment+`-->`}}var _e={parse:function(e,t){t||={},t.components||=he;var n,r=[],i=[],a=-1,o=!1;if(e.indexOf(`<`)!==0){var s=e.indexOf(`<`);r.push({type:`text`,content:s===-1?e:e.substring(0,s)})}return e.replace(V,function(s,c){if(o){if(s!==`</`+n.name+`>`)return;o=!1}var l,u=s.charAt(1)!==`/`,d=s.startsWith(`<!--`),f=c+s.length,p=e.charAt(f);if(d){var m=B(s);return a<0?(r.push(m),r):((l=i[a]).children.push(m),r)}if(u&&(a++,(n=B(s)).type===`tag`&&t.components[n.name]&&(n.type=`component`,o=!0),n.voidElement||o||!p||p===`<`||n.children.push({type:`text`,content:e.slice(f,e.indexOf(`<`,f))}),a===0&&r.push(n),(l=i[a-1])&&l.children.push(n),i[a]=n),(!u||n.voidElement)&&(a>-1&&(n.voidElement||n.name===s.slice(2,-1))&&(a--,n=a===-1?r:i[a]),!o&&p!==`<`&&p)){l=a===-1?r:i[a].children;var h=e.indexOf(`<`,f),g=e.slice(f,h===-1?void 0:h);me.test(g)&&(g=` `),(h>-1&&a+l.length>=0||g!==` `)&&l.push({type:`text`,content:g})}}),r},stringify:function(e){return e.reduce(function(e,t){return e+ge(``,t)},``)}},H=e(p()),U=(e,t)=>{if(!e)return!1;let n=e.props?.children??e.children;return t?n.length>0:!!n},W=e=>{if(!e)return[];let t=e.props?.children??e.children;return e.props?.i18nIsDynamicList?K(t):t},G=e=>Array.isArray(e)&&e.every(H.isValidElement),K=e=>Array.isArray(e)?e:[e],ve=(e,t)=>{let n={...t};return n.props={...t.props,...e.props},n},q=e=>{let t={};if(!e)return t;let n=e=>{K(e).forEach(e=>{_(e)||(U(e)?n(W(e)):b(e)&&!(0,H.isValidElement)(e)&&Object.assign(t,e))})};return n(e),t},J=(e,t,n,r)=>{if(!e)return``;let i=``,a=K(e),o=t?.transSupportBasicHtmlNodes?t.transKeepBasicHtmlNodesFor??[]:[];return a.forEach((e,a)=>{if(_(e)){i+=`${e}`;return}if((0,H.isValidElement)(e)){let{props:s,type:c}=e,l=Object.keys(s).length,u=o.indexOf(c)>-1,d=s.children;if(!d&&u&&!l){i+=`<${c}/>`;return}if(!d&&(!u||l)||s.i18nIsDynamicList){i+=`<${a}></${a}>`;return}if(u&&l<=1){let e=_(d)?d:J(d,t,n,r);i+=`<${c}>${e}</${c}>`;return}let f=J(d,t,n,r);i+=`<${a}>${f}</${a}>`;return}if(e===null){g(n,`TRANS_NULL_VALUE`,`Passed in a null value as child`,{i18nKey:r});return}if(b(e)){let{format:t,...a}=e,o=Object.keys(a);if(o.length===1){let e=t?`${o[0]}, ${t}`:o[0];i+=`{{${e}}}`;return}g(n,`TRANS_INVALID_OBJ`,`Invalid child - Object should only have keys {{ value, format }} (format is optional).`,{i18nKey:r,child:e});return}g(n,`TRANS_INVALID_VAR`,`Passed in a variable like {number} - pass variables for interpolation as full objects like {{number}}.`,{i18nKey:r,child:e})}),i},ye=(e,t=[],n={})=>{if(!e)return e;let r=Object.keys(n),i=[...t,...r],a=``,o=0;for(;o<e.length;)if(e[o]===`<`){let t=!1,n=e.slice(o).match(/^<\/(\d+|[a-zA-Z][a-zA-Z0-9_-]*)>/);if(n){let e=n[1];(/^\d+$/.test(e)||i.includes(e))&&(t=!0,a+=n[0],o+=n[0].length)}if(!t){let n=e.slice(o).match(/^<(\d+|[a-zA-Z][a-zA-Z0-9_-]*)(\s+[\w-]+(?:=(?:"[^"]*"|'[^']*'|[^\s>]+))?)*\s*(\/)?>/);if(n){let e=n[1];(/^\d+$/.test(e)||i.includes(e))&&(t=!0,a+=n[0],o+=n[0].length)}}t||(a+=`&lt;`,o+=1)}else a+=e[o],o+=1;return a},be=(e,t,n,r,i,a,o)=>{if(n===``)return[];let s=i.transKeepBasicHtmlNodesFor||[],c=n&&new RegExp(s.map(e=>`<${e}`).join(`|`)).test(n);if(!e&&!t&&!c&&!o)return[n];let l=t??{},u=e=>{K(e).forEach(e=>{_(e)||(U(e)?u(W(e)):b(e)&&!(0,H.isValidElement)(e)&&Object.assign(l,e))})};u(e);let d=ye(n,s,l),f=_e.parse(`<0>${d}</0>`),p={...l,...a},m=(e,t,n)=>{let r=W(e),i=g(r,t.children,n);return G(r)&&i.length===0||e.props?.i18nIsDynamicList?r:i},h=(e,t,n,r,i)=>{e.dummy?(e.children=t,n.push((0,H.cloneElement)(e,{key:r},i?void 0:t))):n.push(...H.Children.map([e],e=>{if(e.type===H.Fragment||e.props?.i18nIsDynamicList!==void 0){let n={key:r};return e&&e.props&&Object.keys(e.props).forEach(t=>{t===`children`||t===`i18nIsDynamicList`||(n[t]=e.props[t])}),(0,H.createElement)(e.type,n,i?null:t)}let n={key:r};return e&&e.props&&Object.keys(e.props).forEach(t=>{t===`ref`||t===`children`||(n[t]=e.props[t])}),(0,H.cloneElement)(e,n,i?null:t)}))},g=(e,n,a)=>{let l=K(e),u=K(n),d={};return u.reduce((e,n,u)=>{let f=n.children?.[0]?.content&&r.services.interpolator.interpolate(n.children[0].content,p,r.language);if(n.type===`tag`){let v=l[parseInt(n.name,10)];!v&&t&&(v=t[n.name]),a.length===1&&!v&&(v=a[0][n.name]),v||={};let y={...n.attrs};o&&Object.keys(y).forEach(e=>{let t=y[e];_(t)&&(y[e]=S(t))});let x=Object.keys(y).length===0?v:ve({props:y},v),C=(0,H.isValidElement)(x),ee=C&&U(n,!0)&&!n.voidElement,w=c&&b(x)&&x.dummy&&!C,T=b(t)&&Object.hasOwnProperty.call(t,n.name);if(_(x)){let t=r.services.interpolator.interpolate(x,p,r.language);e.push(t)}else if(U(x)||ee)h(x,m(x,n,a),e,u);else if(w)h(x,g(l,n.children,a),e,u);else if(Number.isNaN(parseFloat(n.name)))if(T)h(x,m(x,n,a),e,u,n.voidElement);else if(i.transSupportBasicHtmlNodes&&s.indexOf(n.name)>-1)if(n.voidElement)e.push((0,H.createElement)(n.name,{key:`${n.name}-${u}`}));else{let t=d[n.name]||0;d[n.name]=t+1;let r,i=0;for(let e=0;e<l.length;e+=1){let a=l[e];if((0,H.isValidElement)(a)&&a.type===n.name){if(i===t){r=a;break}i+=1}}let o=g(r?K(W(r)):l,n.children,a);e.push((0,H.createElement)(n.name,{key:`${n.name}-${u}`},o))}else if(n.voidElement)e.push(`<${n.name} />`);else{let t=g(l,n.children,a);e.push(`<${n.name}>${t}</${n.name}>`)}else if(b(x)&&!C){let t=n.children[0]?f:null;t&&e.push(t)}else h(x,f,e,u,n.children.length!==1||!f)}else if(n.type===`text`){let t=i.transWrapTextNodes,a=typeof i.unescape==`function`?i.unescape:ee().unescape,s=o?a(r.services.interpolator.interpolate(n.content,p,r.language)):r.services.interpolator.interpolate(n.content,p,r.language);t?e.push((0,H.createElement)(t,{key:`${n.name}-${u}`},s)):e.push(s)}return e},[])};return W(g([{dummy:!0,children:e||[]}],f,K(e||[]))[0])},Y=(e,t,n)=>{let r=e.key||t,i=(0,H.cloneElement)(e,{key:r});if(!i.props||!i.props.children||n.indexOf(`${t}/>`)<0&&n.indexOf(`${t} />`)<0)return i;function a(){return(0,H.createElement)(H.Fragment,null,i)}return(0,H.createElement)(a,{key:r})},xe=(e,t)=>e.map((e,n)=>Y(e,n,t)),X=(e,t)=>{let n={};return Object.keys(e).forEach(r=>{Object.assign(n,{[r]:Y(e[r],r,t)})}),n},Se=(e,t,n,r)=>e?Array.isArray(e)?xe(e,t):b(e)?X(e,t):(y(n,`TRANS_INVALID_COMPONENTS`,`<Trans /> "components" prop expects an object or array`,{i18nKey:r}),null):null,Z=e=>!b(e)||Array.isArray(e)?!1:Object.keys(e).reduce((e,t)=>e&&Number.isNaN(Number.parseFloat(t)),!0);function Ce({children:e,count:t,parent:n,i18nKey:r,context:i,tOptions:a={},values:o,defaults:s,components:c,ns:l,i18n:u,t:d,shouldUnescape:f,...p}){let m=u||C();if(!m)return y(m,`NO_I18NEXT_INSTANCE`,`Trans: You need to pass in an i18next instance using i18nextReactModule`,{i18nKey:r}),e;let g=d||m.t.bind(m)||(e=>e),v={...ee(),...m.options?.react},b=l||g.ns||m.options?.defaultNS;b=_(b)?[b]:b||[`translation`];let{transDefaultProps:x}=v,S=x?.tOptions?{...x.tOptions,...a}:a,w=f??x?.shouldUnescape,T=x?.values?{...x.values,...o}:o,te=x?.components?{...x.components,...c}:c,E=J(e,v,m,r),D=s||S?.defaultValue||E||v.transEmptyNodeValue||(typeof r==`function`?h(r):r),{hashTransKey:O}=v,k=r||(O?O(E||D):E||D);o=m.options?.interpolation?.defaultVariables?T&&Object.keys(T).length>0?{...T,...m.options.interpolation.defaultVariables}:{...m.options.interpolation.defaultVariables}:T;let A=q(e);A&&typeof A.count==`number`&&t===void 0&&(t=A.count);let ne=o||t!==void 0&&!m.options?.interpolation?.alwaysFormat||!e?S.interpolation:{interpolation:{...S.interpolation,prefix:`#$?`,suffix:`?$#`}},re={...S,context:i||S.context,count:t,...o,...ne,defaultValue:D,ns:b},j=k?g(k,re):D;j===k&&D&&(j=D);let ie=Se(te,j,m,r),M=ie||e,N=null;Z(ie)&&(N=ie,M=e);let P=be(M,N,j,m,v,re,w),F=n??v.defaultTransParent;return F?(0,H.createElement)(F,p,P):P}function we({children:e,count:t,parent:n,i18nKey:r,context:i,tOptions:a={},values:o,defaults:s,components:c,ns:l,i18n:u,t:d,shouldUnescape:f,...p}){let{i18n:m,defaultNS:h}=(0,H.useContext)(v)||{},g=u||m||C(),_=d||g?.t.bind(g);return Ce({children:e,count:t,parent:n,i18nKey:r,context:i,tOptions:a,values:o,defaults:s,components:c,ns:l||_?.ns||h||g?.options?.defaultNS,i18n:g,t:d,shouldUnescape:f,...p})}var Q=e(m(),1),Te=D(`clone-repo-view`);function Ee({onCloningChange:e}={}){let{t}=x(),c=E(),p=de(e=>e.loadProjects),m=de(e=>e.setAddProjectOpen),h=le(e=>e.generalSettingsOpen),[g,_]=(0,H.useState)(`checking`);(0,H.useEffect)(()=>{e?.(g===`cloning`)},[g,e]);let[v,y]=(0,H.useState)(null),[b,S]=(0,H.useState)(null),[C,ee]=(0,H.useState)(``),[w,te]=(0,H.useState)(``),[D,k]=(0,H.useState)(``),[ne,re]=(0,H.useState)(5),[j,ae]=ie(),I=(0,H.useRef)(null),[L,pe]=(0,H.useState)([]),[z,B]=(0,H.useState)(``),[V,me]=(0,H.useState)(``),[he,ge]=(0,H.useState)(!1),[_e,U]=(0,H.useState)(!1),[W,G]=(0,H.useState)(-1),K=(0,H.useRef)(null),ve=(0,H.useRef)(null),q=(0,H.useRef)(void 0),J=(0,H.useRef)(!1),ye=(0,H.useRef)(0),be=(0,H.useRef)(1),[Y,xe]=(0,H.useState)(null),[X,Se]=(0,H.useState)(``),[Z,Ce]=(0,H.useState)(``),[Ee,De]=(0,H.useState)(!1),[Oe,ke]=(0,H.useState)(!1),[Ae,je]=(0,H.useState)(``),[Me,Ne]=(0,H.useState)(void 0),[Pe,Fe]=(0,H.useState)(!1),Ie=(0,H.useRef)(``);(0,H.useEffect)(()=>{let e=e=>{let t=e.detail;if(t.phase){let e=t.phase.replace(/:.*$/,``).trim();e!==Ie.current&&(Fe(!0),Ie.current=e,requestAnimationFrame(()=>Fe(!1))),je(t.phase)}t.percent!==void 0&&Ne(t.percent)};return window.addEventListener(`clone:progress`,e),()=>window.removeEventListener(`clone:progress`,e)},[]);let $=(0,H.useCallback)(async()=>{let e=await T.githubStatus();e.isOk()?e.value.connected?(S(e.value.source??`profile`),await Le(),_(`repos`)):(S(null),_(`connect`)):_(`error`)},[]);(0,H.useEffect)(()=>{$()},[$]),(0,H.useEffect)(()=>{!h&&(g===`connect`||g===`error`)&&$()},[h,g,$]);let Le=async()=>{let e=await T.githubUser();e.isOk()&&y(e.value)},Re=(0,H.useCallback)(async(e,t,n)=>{let r=++ye.current;J.current=!0,U(!0),Te.debug(`github repo search`,{page:e,query:t,append:n});let i=await T.githubRepos({page:e,per_page:30,sort:`updated`,search:t||void 0});r===ye.current&&(i.isOk()&&(pe(e=>n?[...e,...i.value.repos]:i.value.repos),ge(i.value.hasMore)),J.current=!1,U(!1))},[]);(0,H.useEffect)(()=>(q.current&&clearTimeout(q.current),q.current=setTimeout(()=>{me(z)},200),()=>{q.current&&clearTimeout(q.current)}),[z]);let ze=z!==V||_e;(0,H.useEffect)(()=>{G(-1)},[V]);let Be=e=>{if(e.key===`ArrowDown`)e.preventDefault(),G(e=>Math.min(e+1,L.length-1));else if(e.key===`ArrowUp`)e.preventDefault(),G(e=>Math.max(e-1,0));else if(e.key===`Enter`&&W>=0&&W<L.length){e.preventDefault();let t=L[W];xe(t),Ce(t.name),_(`clone-config`)}};(0,H.useEffect)(()=>{W<0||!K.current||K.current.querySelectorAll(`[data-repo-item]`)[W]?.scrollIntoView({block:`nearest`})},[W]),(0,H.useEffect)(()=>{g===`repos`&&(be.current=1,Re(1,V,!1))},[g,V,Re]),(0,H.useEffect)(()=>{if(g!==`repos`)return;let e=K.current,t=ve.current;if(!e||!t)return;let n=new IntersectionObserver(e=>{if(!e[0]?.isIntersecting||J.current||!he)return;let t=be.current+1;be.current=t,Re(t,V,!0)},{root:e,rootMargin:`0px 0px 200px 0px`,threshold:0});return n.observe(t),()=>n.disconnect()},[g,he,V,Re]),(0,H.useEffect)(()=>()=>{I.current&&clearInterval(I.current)},[]);let Ve=async()=>{let e=await T.githubStartDevice();if(e.isErr()){F(e.error,`cloneRepo`);return}let t=e.value;ee(t.device_code),te(t.user_code),k(t.verification_uri),re(t.interval),_(`device-flow`),He(t.device_code,t.interval)},He=(e,n)=>{I.current&&clearInterval(I.current),I.current=setInterval(async()=>{let n=await T.githubPoll(e);if(n.isErr())return;let r=n.value;r.status===`success`?(I.current&&clearInterval(I.current),await Le(),_(`repos`),P.success(t(`github.connected`,{login:``}))):r.status===`expired`||r.status===`denied`?(I.current&&clearInterval(I.current),P.error(r.status===`expired`?t(`github.deviceFlow.expired`):t(`github.deviceFlow.denied`)),_(`connect`)):r.interval&&(I.current&&clearInterval(I.current),He(e,r.interval))},(n+1)*1e3)},Ue=e=>{xe(e),Ce(e.name),_(`clone-config`)},We=async()=>{if(!Y||!X||!Z)return;ke(!0),je(``),Ne(void 0),_(`cloning`);let e=await T.cloneRepo(Y.clone_url,X,Z);if(e.isErr()){F(e.error,`cloneRepo`),ke(!1),_(`clone-config`);return}P.success(t(`github.clone.success`)),await p(),m(!1),c(N(`/projects/${e.value.id}`))},Ge=async()=>{await T.githubDisconnect(),y(null),pe([]),_(`connect`),P.success(t(`github.disconnected`))},Ke=e=>{let n=Date.now()-new Date(e).getTime(),r=Math.floor(n/6e4);if(r<60)return t(`time.minutes`,{count:r});let i=Math.floor(r/60);if(i<24)return t(`time.hours`,{count:i});let a=Math.floor(i/24);return a<30?t(`time.days`,{count:a}):t(`time.months`,{count:Math.floor(a/30)})};if(g===`checking`)return(0,Q.jsx)(ue,{fill:!1,className:`py-12`,testId:`clone-repo-checking`});if(g===`error`)return(0,Q.jsxs)(`div`,{className:`flex flex-col items-center gap-4 py-8`,children:[(0,Q.jsx)(`div`,{className:`bg-destructive/10 flex size-12 items-center justify-center rounded-full`,children:(0,Q.jsx)(oe,{className:`icon-xl text-destructive`})}),(0,Q.jsxs)(`div`,{className:`space-y-1 text-center`,children:[(0,Q.jsx)(`h3`,{className:`font-medium`,children:t(`github.connectionError`,{defaultValue:`Connection Error`})}),(0,Q.jsx)(`p`,{className:`text-muted-foreground max-w-xs text-sm`,children:t(`github.connectionErrorDesc`,{defaultValue:`Could not check GitHub connection status. The server may be unavailable.`})})]}),(0,Q.jsx)(A,{onClick:()=>{_(`checking`),$()},"data-testid":`clone-repo-retry`,children:t(`common.retry`,{defaultValue:`Retry`})})]});if(g===`connect`)return(0,Q.jsxs)(`div`,{className:`flex flex-col items-center gap-4 py-8`,children:[(0,Q.jsx)(`div`,{className:`bg-muted flex size-12 items-center justify-center rounded-full`,children:(0,Q.jsx)(oe,{className:`icon-xl`})}),(0,Q.jsxs)(`div`,{className:`space-y-1 text-center`,children:[(0,Q.jsx)(`h3`,{className:`font-medium`,children:t(`github.connectGithub`)}),(0,Q.jsx)(`p`,{className:`text-muted-foreground max-w-xs text-sm`,children:t(`github.connectDesc`)})]}),(0,Q.jsxs)(`div`,{className:`flex w-full max-w-xs flex-col gap-2`,children:[(0,Q.jsxs)(A,{className:`w-full`,onClick:Ve,children:[(0,Q.jsx)(oe,{className:`icon-base mr-2`}),t(`github.connectGithub`)]}),(0,Q.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,Q.jsx)(`div`,{className:`bg-border h-px flex-1`}),(0,Q.jsx)(`span`,{className:`text-muted-foreground text-xs`,children:t(`common.or`)}),(0,Q.jsx)(`div`,{className:`bg-border h-px flex-1`})]}),(0,Q.jsxs)(A,{variant:`outline`,className:`w-full`,onClick:()=>c(N(`/preferences/github`)),children:[(0,Q.jsx)(a,{className:`icon-base mr-2`}),t(`github.useToken`)]}),(0,Q.jsx)(`p`,{className:`text-muted-foreground text-center text-xs`,children:(0,Q.jsx)(we,{i18nKey:`github.useTokenHint`,components:{link:(0,Q.jsx)(`a`,{href:`https://github.com/settings/tokens/new`,target:`_blank`,rel:`noopener noreferrer`,className:`hover:text-foreground underline`})}})})]})]});if(g===`device-flow`)return(0,Q.jsxs)(`div`,{className:`flex flex-col items-center gap-5 py-8`,children:[(0,Q.jsxs)(`div`,{className:`space-y-1 text-center`,children:[(0,Q.jsx)(`h3`,{className:`font-medium`,children:t(`github.deviceFlow.title`)}),(0,Q.jsx)(`p`,{className:`text-muted-foreground text-sm`,children:t(`github.deviceFlow.desc`)})]}),(0,Q.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Q.jsx)(`code`,{className:`bg-muted rounded-md px-4 py-2 font-mono text-2xl font-bold tracking-widest`,children:w}),(0,Q.jsx)(A,{variant:`outline`,size:`sm`,onClick:()=>ae(w),children:j?(0,Q.jsx)(d,{className:`icon-base`}):(0,Q.jsx)(i,{className:`icon-base`})})]}),(0,Q.jsx)(`div`,{className:`flex gap-2`,children:(0,Q.jsxs)(A,{variant:`outline`,onClick:()=>window.open(D,`_blank`),children:[(0,Q.jsx)(f,{className:`icon-base mr-2`}),t(`github.deviceFlow.openGithub`)]})}),(0,Q.jsx)(ue,{fill:!1,layout:`inline`,className:`text-sm`,testId:`clone-repo-waiting-auth`,label:t(`github.deviceFlow.waitingAuth`)}),(0,Q.jsx)(A,{variant:`ghost`,size:`sm`,className:`text-muted-foreground`,onClick:()=>{I.current&&clearInterval(I.current),_(`connect`)},children:t(`common.cancel`)})]});if(g===`repos`)return(0,Q.jsxs)(`div`,{className:`flex h-full flex-col`,children:[v&&(0,Q.jsxs)(`div`,{className:`mb-3 flex items-center gap-2`,children:[(0,Q.jsx)(`img`,{src:v.avatar_url,alt:v.login,className:`size-6 rounded-full`}),(0,Q.jsx)(`span`,{className:`text-sm font-medium`,children:v.login}),b===`cli`?(0,Q.jsx)(`span`,{className:`text-muted-foreground ml-auto text-xs`,children:t(`github.viaGhCli`,{defaultValue:`via gh CLI`})}):(0,Q.jsxs)(A,{variant:`ghost`,size:`sm`,className:`text-muted-foreground ml-auto h-7 text-xs`,onClick:Ge,"data-testid":`clone-repo-disconnect`,children:[(0,Q.jsx)(n,{className:`icon-xs mr-1`}),t(`github.disconnect`)]})]}),(0,Q.jsx)(`div`,{className:`mb-3`,children:(0,Q.jsx)(ce,{query:z,onQueryChange:B,placeholder:t(`github.repos.searchPlaceholder`),totalMatches:L.length,resultLabel:z?`${L.length}`:``,loading:ze,onClose:z?()=>B(``):void 0,onInputKeyDown:Be,autoFocus:!1,testIdPrefix:`clone-repo-search`,className:`border-input bg-background rounded-md border px-2`})}),(0,Q.jsxs)(se,{viewportRef:K,className:`-mx-1 max-h-[40vh] min-h-0 flex-1`,children:[L.map((e,t)=>(0,Q.jsxs)(`button`,{"data-repo-item":!0,"data-testid":`clone-repo-item-${e.id}`,onClick:()=>Ue(e),onMouseEnter:()=>G(t),className:O(`flex w-full flex-col gap-0.5 rounded-md px-3 py-2 text-left transition-colors hover:bg-accent`,W===t&&`bg-accent`),children:[(0,Q.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Q.jsx)(M,{text:e.full_name,query:V,className:`truncate text-sm font-medium`}),e.private?(0,Q.jsx)(r,{className:`icon-xs text-status-pending shrink-0`}):(0,Q.jsx)(l,{className:`icon-xs text-muted-foreground shrink-0`})]}),e.description&&(0,Q.jsx)(M,{text:e.description,query:V,className:`text-muted-foreground truncate text-xs`}),(0,Q.jsxs)(`div`,{className:`text-muted-foreground flex items-center gap-3 text-xs`,children:[e.language&&(0,Q.jsx)(M,{text:e.language,query:V}),(0,Q.jsx)(`span`,{children:Ke(e.updated_at)})]})]},e.id)),_e&&(0,Q.jsx)(ue,{fill:!1,className:`py-4`,testId:`clone-repo-loading-repos`}),!_e&&L.length===0&&(0,Q.jsx)(`p`,{className:`text-muted-foreground py-8 text-center text-sm`,children:t(`github.repos.noRepos`)}),(0,Q.jsx)(`div`,{ref:ve,"aria-hidden":!0,className:`h-1 w-full`})]})]});if(g===`clone-config`&&Y)return(0,Q.jsxs)(`div`,{className:`space-y-4`,children:[(0,Q.jsxs)(A,{variant:`ghost`,size:`sm`,className:`text-muted-foreground -ml-2`,onClick:()=>_(`repos`),children:[(0,Q.jsx)(s,{className:`icon-sm mr-1`}),t(`github.repos.title`)]}),(0,Q.jsxs)(`div`,{className:`border-border space-y-1 rounded-md border p-3`,children:[(0,Q.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Q.jsx)(`span`,{className:`text-sm font-medium`,children:Y.full_name}),Y.private&&(0,Q.jsx)(r,{className:`icon-xs text-status-pending`})]}),Y.description&&(0,Q.jsx)(`p`,{className:`text-muted-foreground text-xs`,children:Y.description})]}),(0,Q.jsxs)(`div`,{children:[(0,Q.jsx)(`label`,{className:`mb-1.5 block text-sm font-medium`,children:t(`github.clone.projectName`)}),(0,Q.jsx)(R,{value:Z,onChange:e=>Ce(e.target.value)})]}),(0,Q.jsxs)(`div`,{children:[(0,Q.jsx)(`label`,{className:`mb-1.5 block text-sm font-medium`,children:t(`github.clone.destination`)}),(0,Q.jsxs)(`div`,{className:`flex gap-2`,children:[(0,Q.jsx)(R,{className:`flex-1`,placeholder:t(`github.clone.destinationDesc`),value:X,onChange:e=>Se(e.target.value)}),(0,Q.jsx)(A,{variant:`outline`,size:`sm`,onClick:()=>De(!0),children:(0,Q.jsx)(u,{className:`icon-base`})})]})]}),(0,Q.jsxs)(`div`,{className:`flex gap-2 pt-2`,children:[(0,Q.jsx)(A,{variant:`outline`,className:`flex-1`,onClick:()=>_(`repos`),children:t(`common.cancel`)}),(0,Q.jsx)(A,{className:`flex-1`,onClick:We,disabled:!X||!Z,children:t(`github.clone.cloneAndCreate`)})]}),Ee&&(0,Q.jsx)(fe,{onSelect:e=>{Se(e),De(!1)},onClose:()=>De(!1)})]});if(g===`cloning`){let e=Ae?Ae.replace(/:.*$/,``).trim().replace(/\b\w/g,e=>e.toUpperCase()):``;return(0,Q.jsxs)(`div`,{className:`flex flex-col items-center gap-4 py-12`,children:[(0,Q.jsx)(o,{className:`text-primary size-8 animate-spin`}),(0,Q.jsx)(`p`,{className:`text-sm font-medium`,children:t(`github.clone.cloning`,{repo:Y?.full_name})}),(0,Q.jsxs)(`div`,{className:`w-full max-w-xs`,children:[e&&(0,Q.jsx)(`p`,{className:`text-muted-foreground mb-1 text-xs font-medium`,children:e}),Me!==void 0&&(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`div`,{className:`bg-muted h-1.5 w-full overflow-hidden rounded-full`,children:(0,Q.jsx)(`div`,{className:O(`h-full rounded-full bg-primary`,Pe?``:`transition-all duration-300`),style:{width:`${Me}%`}})}),(0,Q.jsxs)(`p`,{className:`text-muted-foreground mt-1 text-right text-xs`,children:[Me,`%`]})]})]})]})}return null}function De(){let{t:e}=x(),t=E(),n=de(e=>e.loadProjects),[r,i]=(0,H.useState)(`local`),[a,s]=(0,H.useState)(``),[l,d]=(0,H.useState)(``),[f,p]=(0,H.useState)(!1),[m,h]=(0,H.useState)(!1),[g,_]=(0,H.useState)(!1),[v,y]=(0,H.useState)(!1);return(0,Q.jsxs)(se,{className:`flex flex-1 justify-center pt-[10vh]`,children:[(0,Q.jsxs)(`div`,{className:`mx-auto w-full max-w-md space-y-6 px-4 pb-8`,children:[!v&&(0,Q.jsxs)(`div`,{className:`space-y-2 text-center`,children:[(0,Q.jsx)(`div`,{className:`bg-primary/10 mx-auto flex size-12 items-center justify-center rounded-full`,children:(0,Q.jsx)(c,{className:`icon-xl text-primary`})}),(0,Q.jsx)(`h2`,{className:`text-xl font-semibold`,children:e(`sidebar.addProject`)})]}),(0,Q.jsxs)(`div`,{className:O(`flex gap-1 rounded-lg bg-muted p-1`,v&&`hidden`),children:[(0,Q.jsxs)(`button`,{className:`flex flex-1 items-center justify-center gap-1.5 rounded-md px-3 py-1.5 text-sm font-medium transition-colors ${r===`local`?`bg-background text-foreground shadow-xs`:`text-muted-foreground hover:text-foreground`}`,"data-testid":`add-project-tab-local`,onClick:()=>i(`local`),children:[(0,Q.jsx)(u,{className:`icon-sm`}),e(`github.localFolder`)]}),(0,Q.jsxs)(`button`,{className:`flex flex-1 items-center justify-center gap-1.5 rounded-md px-3 py-1.5 text-sm font-medium transition-colors ${r===`github`?`bg-background text-foreground shadow-xs`:`text-muted-foreground hover:text-foreground`}`,"data-testid":`add-project-tab-clone`,onClick:()=>i(`github`),children:[(0,Q.jsx)(oe,{className:`icon-sm`}),e(`github.cloneFromGithub`)]})]}),r===`local`?(0,Q.jsxs)(`div`,{className:`space-y-4`,children:[(0,Q.jsx)(`p`,{className:`text-muted-foreground text-center text-sm`,children:e(`sidebar.addProjectDescription`,{defaultValue:`Enter the project name and select the folder path.`})}),(0,Q.jsxs)(`div`,{children:[(0,Q.jsx)(`label`,{className:`mb-1.5 block text-sm font-medium`,children:e(`sidebar.projectName`)}),(0,Q.jsx)(R,{"data-testid":`add-project-name`,placeholder:e(`sidebar.projectName`),value:a,onChange:e=>s(e.target.value),autoFocus:!0})]}),(0,Q.jsxs)(`div`,{children:[(0,Q.jsx)(`label`,{className:`mb-1.5 block text-sm font-medium`,children:e(`sidebar.absolutePath`)}),(0,Q.jsxs)(`div`,{className:`flex gap-2`,children:[(0,Q.jsx)(R,{"data-testid":`add-project-path`,className:`flex-1`,placeholder:e(`sidebar.absolutePath`),value:l,onChange:e=>d(e.target.value)}),(0,Q.jsxs)(te,{children:[(0,Q.jsx)(k,{asChild:!0,children:(0,Q.jsx)(A,{"data-testid":`add-project-browse`,variant:`outline`,size:`sm`,onClick:()=>p(!0),"aria-label":e(`sidebar.browseFolder`),children:(0,Q.jsx)(u,{className:`icon-base`})})}),(0,Q.jsx)(w,{children:e(`sidebar.browseFolder`)})]})]})]}),(0,Q.jsxs)(`div`,{className:`flex gap-2 pt-2`,children:[(0,Q.jsx)(A,{"data-testid":`add-project-cancel`,variant:`outline`,className:`flex-1`,onClick:()=>t(N(`/`)),children:e(`common.cancel`,{defaultValue:`Cancel`})}),(0,Q.jsx)(A,{"data-testid":`add-project-submit`,className:`flex-1`,onClick:async()=>{if(!a||!l||m)return;h(!0);let r=await T.createProject(a,l);if(r.isErr()){if(r.error.message?.includes(`Not a git repository`)||r.error.message?.includes(`nested inside another git repository`)){h(!1),_(!0);return}F(r.error,`createProject`),h(!1);return}await n(),P.success(e(`project.created`,{name:a,defaultValue:`Project "${a}" created`})),t(N(`/projects/${r.value.id}`)),h(!1)},disabled:m||!a||!l,children:m?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(o,{className:`icon-base mr-2 animate-spin`}),e(`common.loading`)]}):e(`sidebar.add`)})]})]}):(0,Q.jsx)(Ee,{onCloningChange:y})]}),f&&(0,Q.jsx)(fe,{onSelect:async e=>{if(d(e),p(!1),!a){let t=await T.repoName(e);t.isOk()&&t.value.name?s(t.value.name):s(e.split(/[\\/]/).filter(Boolean).pop()||``)}},onClose:()=>p(!1)}),(0,Q.jsx)(re,{open:g,onOpenChange:_,children:(0,Q.jsxs)(L,{children:[(0,Q.jsxs)(ae,{children:[(0,Q.jsx)(ne,{children:e(`confirm.gitInitTitle`,{defaultValue:`Initialize Git Repository`})}),(0,Q.jsx)(j,{children:e(`confirm.notGitRepo`,{path:l})})]}),(0,Q.jsxs)(I,{children:[(0,Q.jsx)(A,{"data-testid":`git-init-cancel`,variant:`outline`,onClick:()=>_(!1),children:e(`common.cancel`,{defaultValue:`Cancel`})}),(0,Q.jsx)(A,{"data-testid":`git-init-confirm`,onClick:async()=>{_(!1),h(!0);let r=await T.gitInit(l);if(r.isErr()){F(r.error,`createProject`),h(!1);return}let i=await T.createProject(a,l);if(i.isErr()){F(i.error,`createProject`),h(!1);return}await n(),P.success(e(`project.created`,{name:a,defaultValue:`Project "${a}" created`})),t(N(`/projects/${i.value.id}`)),h(!1)},children:e(`confirm.gitInitAction`,{defaultValue:`Initialize`})})]})]})})]})}export{De as AddProjectView};
1
+ import{a as e,t}from"./rolldown-runtime-Cyuzqnbw.js";import{Ft as n,It as r,Kn as i,L as a,Lt as o,Mr as s,Q as c,on as l,yn as u,yr as d,zn as f,zr as p}from"./icons-sqwAEN28.js";import{o as m}from"./markdown-DBtwZWLP.js";import{i as h}from"./_core-lD_pNs53.js";import{a as g,i as _,n as v,o as y,r as b,t as x}from"./useTranslation-DAPPK3Hy.js";import{i as S,n as C,r as ee}from"./initReactI18next-Dr0vnWXF.js";import{G as w,P as T,W as te,_t as E,j as D,lt as O,q as k}from"./index-DNxUSLe_.js";import{t as A}from"./button-B9Ypx1uQ.js";import{$r as ne,Gr as re,Jr as j,K as ie,Nn as M,Rt as N,Ur as P,Wn as F,Xr as ae,Yr as I,gt as oe,in as se,mn as ce,qr as L,yr as le}from"./items-7qqySF-X.js";import{t as R}from"./input-CJ3TsT2L.js";import{t as ue}from"./loading-state-yLj5fYb6.js";import{t as de}from"./app-store-DKW9sVHv.js";import{t as fe}from"./FolderPicker-CpXi_ZrF.js";var pe=e(t(((e,t)=>{t.exports={area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0}}))()),z=/\s([^'"/\s><]+?)[\s/>]|([^\s=]+)=\s?(".*?"|'.*?')/g;function B(e){var t={type:`tag`,name:``,voidElement:!1,attrs:{},children:[]},n=e.match(/<\/?([^\s]+?)[/\s>]/);if(n&&(t.name=n[1],(pe.default[n[1]]||e.charAt(e.length-2)===`/`)&&(t.voidElement=!0),t.name.startsWith(`!--`))){var r=e.indexOf(`-->`);return{type:`comment`,comment:r===-1?``:e.slice(4,r)}}for(var i=new RegExp(z),a=null;(a=i.exec(e))!==null;)if(a[0].trim())if(a[1]){var o=a[1].trim(),s=[o,``];o.indexOf(`=`)>-1&&(s=o.split(`=`)),t.attrs[s[0]]=s[1],i.lastIndex--}else a[2]&&(t.attrs[a[2]]=a[3].trim().substring(1,a[3].length-1));return t}var V=/<[a-zA-Z0-9\-\!\/](?:"[^"]*"|'[^']*'|[^'">])*>/g,me=/^\s*$/,he=Object.create(null);function ge(e,t){switch(t.type){case`text`:return e+t.content;case`tag`:return e+=`<`+t.name+(t.attrs?function(e){var t=[];for(var n in e)t.push(n+`="`+e[n]+`"`);return t.length?` `+t.join(` `):``}(t.attrs):``)+(t.voidElement?`/>`:`>`),t.voidElement?e:e+t.children.reduce(ge,``)+`</`+t.name+`>`;case`comment`:return e+`<!--`+t.comment+`-->`}}var _e={parse:function(e,t){t||={},t.components||=he;var n,r=[],i=[],a=-1,o=!1;if(e.indexOf(`<`)!==0){var s=e.indexOf(`<`);r.push({type:`text`,content:s===-1?e:e.substring(0,s)})}return e.replace(V,function(s,c){if(o){if(s!==`</`+n.name+`>`)return;o=!1}var l,u=s.charAt(1)!==`/`,d=s.startsWith(`<!--`),f=c+s.length,p=e.charAt(f);if(d){var m=B(s);return a<0?(r.push(m),r):((l=i[a]).children.push(m),r)}if(u&&(a++,(n=B(s)).type===`tag`&&t.components[n.name]&&(n.type=`component`,o=!0),n.voidElement||o||!p||p===`<`||n.children.push({type:`text`,content:e.slice(f,e.indexOf(`<`,f))}),a===0&&r.push(n),(l=i[a-1])&&l.children.push(n),i[a]=n),(!u||n.voidElement)&&(a>-1&&(n.voidElement||n.name===s.slice(2,-1))&&(a--,n=a===-1?r:i[a]),!o&&p!==`<`&&p)){l=a===-1?r:i[a].children;var h=e.indexOf(`<`,f),g=e.slice(f,h===-1?void 0:h);me.test(g)&&(g=` `),(h>-1&&a+l.length>=0||g!==` `)&&l.push({type:`text`,content:g})}}),r},stringify:function(e){return e.reduce(function(e,t){return e+ge(``,t)},``)}},H=e(p()),U=(e,t)=>{if(!e)return!1;let n=e.props?.children??e.children;return t?n.length>0:!!n},W=e=>{if(!e)return[];let t=e.props?.children??e.children;return e.props?.i18nIsDynamicList?K(t):t},G=e=>Array.isArray(e)&&e.every(H.isValidElement),K=e=>Array.isArray(e)?e:[e],ve=(e,t)=>{let n={...t};return n.props={...t.props,...e.props},n},q=e=>{let t={};if(!e)return t;let n=e=>{K(e).forEach(e=>{_(e)||(U(e)?n(W(e)):b(e)&&!(0,H.isValidElement)(e)&&Object.assign(t,e))})};return n(e),t},J=(e,t,n,r)=>{if(!e)return``;let i=``,a=K(e),o=t?.transSupportBasicHtmlNodes?t.transKeepBasicHtmlNodesFor??[]:[];return a.forEach((e,a)=>{if(_(e)){i+=`${e}`;return}if((0,H.isValidElement)(e)){let{props:s,type:c}=e,l=Object.keys(s).length,u=o.indexOf(c)>-1,d=s.children;if(!d&&u&&!l){i+=`<${c}/>`;return}if(!d&&(!u||l)||s.i18nIsDynamicList){i+=`<${a}></${a}>`;return}if(u&&l<=1){let e=_(d)?d:J(d,t,n,r);i+=`<${c}>${e}</${c}>`;return}let f=J(d,t,n,r);i+=`<${a}>${f}</${a}>`;return}if(e===null){g(n,`TRANS_NULL_VALUE`,`Passed in a null value as child`,{i18nKey:r});return}if(b(e)){let{format:t,...a}=e,o=Object.keys(a);if(o.length===1){let e=t?`${o[0]}, ${t}`:o[0];i+=`{{${e}}}`;return}g(n,`TRANS_INVALID_OBJ`,`Invalid child - Object should only have keys {{ value, format }} (format is optional).`,{i18nKey:r,child:e});return}g(n,`TRANS_INVALID_VAR`,`Passed in a variable like {number} - pass variables for interpolation as full objects like {{number}}.`,{i18nKey:r,child:e})}),i},ye=(e,t=[],n={})=>{if(!e)return e;let r=Object.keys(n),i=[...t,...r],a=``,o=0;for(;o<e.length;)if(e[o]===`<`){let t=!1,n=e.slice(o).match(/^<\/(\d+|[a-zA-Z][a-zA-Z0-9_-]*)>/);if(n){let e=n[1];(/^\d+$/.test(e)||i.includes(e))&&(t=!0,a+=n[0],o+=n[0].length)}if(!t){let n=e.slice(o).match(/^<(\d+|[a-zA-Z][a-zA-Z0-9_-]*)(\s+[\w-]+(?:=(?:"[^"]*"|'[^']*'|[^\s>]+))?)*\s*(\/)?>/);if(n){let e=n[1];(/^\d+$/.test(e)||i.includes(e))&&(t=!0,a+=n[0],o+=n[0].length)}}t||(a+=`&lt;`,o+=1)}else a+=e[o],o+=1;return a},be=(e,t,n,r,i,a,o)=>{if(n===``)return[];let s=i.transKeepBasicHtmlNodesFor||[],c=n&&new RegExp(s.map(e=>`<${e}`).join(`|`)).test(n);if(!e&&!t&&!c&&!o)return[n];let l=t??{},u=e=>{K(e).forEach(e=>{_(e)||(U(e)?u(W(e)):b(e)&&!(0,H.isValidElement)(e)&&Object.assign(l,e))})};u(e);let d=ye(n,s,l),f=_e.parse(`<0>${d}</0>`),p={...l,...a},m=(e,t,n)=>{let r=W(e),i=g(r,t.children,n);return G(r)&&i.length===0||e.props?.i18nIsDynamicList?r:i},h=(e,t,n,r,i)=>{e.dummy?(e.children=t,n.push((0,H.cloneElement)(e,{key:r},i?void 0:t))):n.push(...H.Children.map([e],e=>{if(e.type===H.Fragment||e.props?.i18nIsDynamicList!==void 0){let n={key:r};return e&&e.props&&Object.keys(e.props).forEach(t=>{t===`children`||t===`i18nIsDynamicList`||(n[t]=e.props[t])}),(0,H.createElement)(e.type,n,i?null:t)}let n={key:r};return e&&e.props&&Object.keys(e.props).forEach(t=>{t===`ref`||t===`children`||(n[t]=e.props[t])}),(0,H.cloneElement)(e,n,i?null:t)}))},g=(e,n,a)=>{let l=K(e),u=K(n),d={};return u.reduce((e,n,u)=>{let f=n.children?.[0]?.content&&r.services.interpolator.interpolate(n.children[0].content,p,r.language);if(n.type===`tag`){let v=l[parseInt(n.name,10)];!v&&t&&(v=t[n.name]),a.length===1&&!v&&(v=a[0][n.name]),v||={};let y={...n.attrs};o&&Object.keys(y).forEach(e=>{let t=y[e];_(t)&&(y[e]=S(t))});let x=Object.keys(y).length===0?v:ve({props:y},v),C=(0,H.isValidElement)(x),ee=C&&U(n,!0)&&!n.voidElement,w=c&&b(x)&&x.dummy&&!C,T=b(t)&&Object.hasOwnProperty.call(t,n.name);if(_(x)){let t=r.services.interpolator.interpolate(x,p,r.language);e.push(t)}else if(U(x)||ee)h(x,m(x,n,a),e,u);else if(w)h(x,g(l,n.children,a),e,u);else if(Number.isNaN(parseFloat(n.name)))if(T)h(x,m(x,n,a),e,u,n.voidElement);else if(i.transSupportBasicHtmlNodes&&s.indexOf(n.name)>-1)if(n.voidElement)e.push((0,H.createElement)(n.name,{key:`${n.name}-${u}`}));else{let t=d[n.name]||0;d[n.name]=t+1;let r,i=0;for(let e=0;e<l.length;e+=1){let a=l[e];if((0,H.isValidElement)(a)&&a.type===n.name){if(i===t){r=a;break}i+=1}}let o=g(r?K(W(r)):l,n.children,a);e.push((0,H.createElement)(n.name,{key:`${n.name}-${u}`},o))}else if(n.voidElement)e.push(`<${n.name} />`);else{let t=g(l,n.children,a);e.push(`<${n.name}>${t}</${n.name}>`)}else if(b(x)&&!C){let t=n.children[0]?f:null;t&&e.push(t)}else h(x,f,e,u,n.children.length!==1||!f)}else if(n.type===`text`){let t=i.transWrapTextNodes,a=typeof i.unescape==`function`?i.unescape:ee().unescape,s=o?a(r.services.interpolator.interpolate(n.content,p,r.language)):r.services.interpolator.interpolate(n.content,p,r.language);t?e.push((0,H.createElement)(t,{key:`${n.name}-${u}`},s)):e.push(s)}return e},[])};return W(g([{dummy:!0,children:e||[]}],f,K(e||[]))[0])},Y=(e,t,n)=>{let r=e.key||t,i=(0,H.cloneElement)(e,{key:r});if(!i.props||!i.props.children||n.indexOf(`${t}/>`)<0&&n.indexOf(`${t} />`)<0)return i;function a(){return(0,H.createElement)(H.Fragment,null,i)}return(0,H.createElement)(a,{key:r})},xe=(e,t)=>e.map((e,n)=>Y(e,n,t)),X=(e,t)=>{let n={};return Object.keys(e).forEach(r=>{Object.assign(n,{[r]:Y(e[r],r,t)})}),n},Se=(e,t,n,r)=>e?Array.isArray(e)?xe(e,t):b(e)?X(e,t):(y(n,`TRANS_INVALID_COMPONENTS`,`<Trans /> "components" prop expects an object or array`,{i18nKey:r}),null):null,Z=e=>!b(e)||Array.isArray(e)?!1:Object.keys(e).reduce((e,t)=>e&&Number.isNaN(Number.parseFloat(t)),!0);function Ce({children:e,count:t,parent:n,i18nKey:r,context:i,tOptions:a={},values:o,defaults:s,components:c,ns:l,i18n:u,t:d,shouldUnescape:f,...p}){let m=u||C();if(!m)return y(m,`NO_I18NEXT_INSTANCE`,`Trans: You need to pass in an i18next instance using i18nextReactModule`,{i18nKey:r}),e;let g=d||m.t.bind(m)||(e=>e),v={...ee(),...m.options?.react},b=l||g.ns||m.options?.defaultNS;b=_(b)?[b]:b||[`translation`];let{transDefaultProps:x}=v,S=x?.tOptions?{...x.tOptions,...a}:a,w=f??x?.shouldUnescape,T=x?.values?{...x.values,...o}:o,te=x?.components?{...x.components,...c}:c,E=J(e,v,m,r),D=s||S?.defaultValue||E||v.transEmptyNodeValue||(typeof r==`function`?h(r):r),{hashTransKey:O}=v,k=r||(O?O(E||D):E||D);o=m.options?.interpolation?.defaultVariables?T&&Object.keys(T).length>0?{...T,...m.options.interpolation.defaultVariables}:{...m.options.interpolation.defaultVariables}:T;let A=q(e);A&&typeof A.count==`number`&&t===void 0&&(t=A.count);let ne=o||t!==void 0&&!m.options?.interpolation?.alwaysFormat||!e?S.interpolation:{interpolation:{...S.interpolation,prefix:`#$?`,suffix:`?$#`}},re={...S,context:i||S.context,count:t,...o,...ne,defaultValue:D,ns:b},j=k?g(k,re):D;j===k&&D&&(j=D);let ie=Se(te,j,m,r),M=ie||e,N=null;Z(ie)&&(N=ie,M=e);let P=be(M,N,j,m,v,re,w),F=n??v.defaultTransParent;return F?(0,H.createElement)(F,p,P):P}function we({children:e,count:t,parent:n,i18nKey:r,context:i,tOptions:a={},values:o,defaults:s,components:c,ns:l,i18n:u,t:d,shouldUnescape:f,...p}){let{i18n:m,defaultNS:h}=(0,H.useContext)(v)||{},g=u||m||C(),_=d||g?.t.bind(g);return Ce({children:e,count:t,parent:n,i18nKey:r,context:i,tOptions:a,values:o,defaults:s,components:c,ns:l||_?.ns||h||g?.options?.defaultNS,i18n:g,t:d,shouldUnescape:f,...p})}var Q=e(m(),1),Te=D(`clone-repo-view`);function Ee({onCloningChange:e}={}){let{t}=x(),c=E(),p=de(e=>e.loadProjects),m=de(e=>e.setAddProjectOpen),h=le(e=>e.generalSettingsOpen),[g,_]=(0,H.useState)(`checking`);(0,H.useEffect)(()=>{e?.(g===`cloning`)},[g,e]);let[v,y]=(0,H.useState)(null),[b,S]=(0,H.useState)(null),[C,ee]=(0,H.useState)(``),[w,te]=(0,H.useState)(``),[D,k]=(0,H.useState)(``),[ne,re]=(0,H.useState)(5),[j,ae]=ie(),I=(0,H.useRef)(null),[L,pe]=(0,H.useState)([]),[z,B]=(0,H.useState)(``),[V,me]=(0,H.useState)(``),[he,ge]=(0,H.useState)(!1),[_e,U]=(0,H.useState)(!1),[W,G]=(0,H.useState)(-1),K=(0,H.useRef)(null),ve=(0,H.useRef)(null),q=(0,H.useRef)(void 0),J=(0,H.useRef)(!1),ye=(0,H.useRef)(0),be=(0,H.useRef)(1),[Y,xe]=(0,H.useState)(null),[X,Se]=(0,H.useState)(``),[Z,Ce]=(0,H.useState)(``),[Ee,De]=(0,H.useState)(!1),[Oe,ke]=(0,H.useState)(!1),[Ae,je]=(0,H.useState)(``),[Me,Ne]=(0,H.useState)(void 0),[Pe,Fe]=(0,H.useState)(!1),Ie=(0,H.useRef)(``);(0,H.useEffect)(()=>{let e=e=>{let t=e.detail;if(t.phase){let e=t.phase.replace(/:.*$/,``).trim();e!==Ie.current&&(Fe(!0),Ie.current=e,requestAnimationFrame(()=>Fe(!1))),je(t.phase)}t.percent!==void 0&&Ne(t.percent)};return window.addEventListener(`clone:progress`,e),()=>window.removeEventListener(`clone:progress`,e)},[]);let $=(0,H.useCallback)(async()=>{let e=await T.githubStatus();e.isOk()?e.value.connected?(S(e.value.source??`profile`),await Le(),_(`repos`)):(S(null),_(`connect`)):_(`error`)},[]);(0,H.useEffect)(()=>{$()},[$]),(0,H.useEffect)(()=>{!h&&(g===`connect`||g===`error`)&&$()},[h,g,$]);let Le=async()=>{let e=await T.githubUser();e.isOk()&&y(e.value)},Re=(0,H.useCallback)(async(e,t,n)=>{let r=++ye.current;J.current=!0,U(!0),Te.debug(`github repo search`,{page:e,query:t,append:n});let i=await T.githubRepos({page:e,per_page:30,sort:`updated`,search:t||void 0});r===ye.current&&(i.isOk()&&(pe(e=>n?[...e,...i.value.repos]:i.value.repos),ge(i.value.hasMore)),J.current=!1,U(!1))},[]);(0,H.useEffect)(()=>(q.current&&clearTimeout(q.current),q.current=setTimeout(()=>{me(z)},200),()=>{q.current&&clearTimeout(q.current)}),[z]);let ze=z!==V||_e;(0,H.useEffect)(()=>{G(-1)},[V]);let Be=e=>{if(e.key===`ArrowDown`)e.preventDefault(),G(e=>Math.min(e+1,L.length-1));else if(e.key===`ArrowUp`)e.preventDefault(),G(e=>Math.max(e-1,0));else if(e.key===`Enter`&&W>=0&&W<L.length){e.preventDefault();let t=L[W];xe(t),Ce(t.name),_(`clone-config`)}};(0,H.useEffect)(()=>{W<0||!K.current||K.current.querySelectorAll(`[data-repo-item]`)[W]?.scrollIntoView({block:`nearest`})},[W]),(0,H.useEffect)(()=>{g===`repos`&&(be.current=1,Re(1,V,!1))},[g,V,Re]),(0,H.useEffect)(()=>{if(g!==`repos`)return;let e=K.current,t=ve.current;if(!e||!t)return;let n=new IntersectionObserver(e=>{if(!e[0]?.isIntersecting||J.current||!he)return;let t=be.current+1;be.current=t,Re(t,V,!0)},{root:e,rootMargin:`0px 0px 200px 0px`,threshold:0});return n.observe(t),()=>n.disconnect()},[g,he,V,Re]),(0,H.useEffect)(()=>()=>{I.current&&clearInterval(I.current)},[]);let Ve=async()=>{let e=await T.githubStartDevice();if(e.isErr()){F(e.error,`cloneRepo`);return}let t=e.value;ee(t.device_code),te(t.user_code),k(t.verification_uri),re(t.interval),_(`device-flow`),He(t.device_code,t.interval)},He=(e,n)=>{I.current&&clearInterval(I.current),I.current=setInterval(async()=>{let n=await T.githubPoll(e);if(n.isErr())return;let r=n.value;r.status===`success`?(I.current&&clearInterval(I.current),await Le(),_(`repos`),P.success(t(`github.connected`,{login:``}))):r.status===`expired`||r.status===`denied`?(I.current&&clearInterval(I.current),P.error(r.status===`expired`?t(`github.deviceFlow.expired`):t(`github.deviceFlow.denied`)),_(`connect`)):r.interval&&(I.current&&clearInterval(I.current),He(e,r.interval))},(n+1)*1e3)},Ue=e=>{xe(e),Ce(e.name),_(`clone-config`)},We=async()=>{if(!Y||!X||!Z)return;ke(!0),je(``),Ne(void 0),_(`cloning`);let e=await T.cloneRepo(Y.clone_url,X,Z);if(e.isErr()){F(e.error,`cloneRepo`),ke(!1),_(`clone-config`);return}P.success(t(`github.clone.success`)),await p(),m(!1),c(N(`/projects/${e.value.id}`))},Ge=async()=>{await T.githubDisconnect(),y(null),pe([]),_(`connect`),P.success(t(`github.disconnected`))},Ke=e=>{let n=Date.now()-new Date(e).getTime(),r=Math.floor(n/6e4);if(r<60)return t(`time.minutes`,{count:r});let i=Math.floor(r/60);if(i<24)return t(`time.hours`,{count:i});let a=Math.floor(i/24);return a<30?t(`time.days`,{count:a}):t(`time.months`,{count:Math.floor(a/30)})};if(g===`checking`)return(0,Q.jsx)(ue,{fill:!1,className:`py-12`,testId:`clone-repo-checking`});if(g===`error`)return(0,Q.jsxs)(`div`,{className:`flex flex-col items-center gap-4 py-8`,children:[(0,Q.jsx)(`div`,{className:`bg-destructive/10 flex size-12 items-center justify-center rounded-full`,children:(0,Q.jsx)(oe,{className:`icon-xl text-destructive`})}),(0,Q.jsxs)(`div`,{className:`space-y-1 text-center`,children:[(0,Q.jsx)(`h3`,{className:`font-medium`,children:t(`github.connectionError`,{defaultValue:`Connection Error`})}),(0,Q.jsx)(`p`,{className:`text-muted-foreground max-w-xs text-sm`,children:t(`github.connectionErrorDesc`,{defaultValue:`Could not check GitHub connection status. The server may be unavailable.`})})]}),(0,Q.jsx)(A,{onClick:()=>{_(`checking`),$()},"data-testid":`clone-repo-retry`,children:t(`common.retry`,{defaultValue:`Retry`})})]});if(g===`connect`)return(0,Q.jsxs)(`div`,{className:`flex flex-col items-center gap-4 py-8`,children:[(0,Q.jsx)(`div`,{className:`bg-muted flex size-12 items-center justify-center rounded-full`,children:(0,Q.jsx)(oe,{className:`icon-xl`})}),(0,Q.jsxs)(`div`,{className:`space-y-1 text-center`,children:[(0,Q.jsx)(`h3`,{className:`font-medium`,children:t(`github.connectGithub`)}),(0,Q.jsx)(`p`,{className:`text-muted-foreground max-w-xs text-sm`,children:t(`github.connectDesc`)})]}),(0,Q.jsxs)(`div`,{className:`flex w-full max-w-xs flex-col gap-2`,children:[(0,Q.jsxs)(A,{className:`w-full`,onClick:Ve,children:[(0,Q.jsx)(oe,{className:`icon-base mr-2`}),t(`github.connectGithub`)]}),(0,Q.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,Q.jsx)(`div`,{className:`bg-border h-px flex-1`}),(0,Q.jsx)(`span`,{className:`text-muted-foreground text-xs`,children:t(`common.or`)}),(0,Q.jsx)(`div`,{className:`bg-border h-px flex-1`})]}),(0,Q.jsxs)(A,{variant:`outline`,className:`w-full`,onClick:()=>c(N(`/preferences/github`)),children:[(0,Q.jsx)(a,{className:`icon-base mr-2`}),t(`github.useToken`)]}),(0,Q.jsx)(`p`,{className:`text-muted-foreground text-center text-xs`,children:(0,Q.jsx)(we,{i18nKey:`github.useTokenHint`,components:{link:(0,Q.jsx)(`a`,{href:`https://github.com/settings/tokens/new`,target:`_blank`,rel:`noopener noreferrer`,className:`hover:text-foreground underline`})}})})]})]});if(g===`device-flow`)return(0,Q.jsxs)(`div`,{className:`flex flex-col items-center gap-5 py-8`,children:[(0,Q.jsxs)(`div`,{className:`space-y-1 text-center`,children:[(0,Q.jsx)(`h3`,{className:`font-medium`,children:t(`github.deviceFlow.title`)}),(0,Q.jsx)(`p`,{className:`text-muted-foreground text-sm`,children:t(`github.deviceFlow.desc`)})]}),(0,Q.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Q.jsx)(`code`,{className:`bg-muted rounded-md px-4 py-2 font-mono text-2xl font-bold tracking-widest`,children:w}),(0,Q.jsx)(A,{variant:`outline`,size:`sm`,onClick:()=>ae(w),children:j?(0,Q.jsx)(d,{className:`icon-base`}):(0,Q.jsx)(i,{className:`icon-base`})})]}),(0,Q.jsx)(`div`,{className:`flex gap-2`,children:(0,Q.jsxs)(A,{variant:`outline`,onClick:()=>window.open(D,`_blank`),children:[(0,Q.jsx)(f,{className:`icon-base mr-2`}),t(`github.deviceFlow.openGithub`)]})}),(0,Q.jsx)(ue,{fill:!1,layout:`inline`,className:`text-sm`,testId:`clone-repo-waiting-auth`,label:t(`github.deviceFlow.waitingAuth`)}),(0,Q.jsx)(A,{variant:`ghost`,size:`sm`,className:`text-muted-foreground`,onClick:()=>{I.current&&clearInterval(I.current),_(`connect`)},children:t(`common.cancel`)})]});if(g===`repos`)return(0,Q.jsxs)(`div`,{className:`flex h-full flex-col`,children:[v&&(0,Q.jsxs)(`div`,{className:`mb-3 flex items-center gap-2`,children:[(0,Q.jsx)(`img`,{src:v.avatar_url,alt:v.login,className:`size-6 rounded-full`}),(0,Q.jsx)(`span`,{className:`text-sm font-medium`,children:v.login}),b===`cli`?(0,Q.jsx)(`span`,{className:`text-muted-foreground ml-auto text-xs`,children:t(`github.viaGhCli`,{defaultValue:`via gh CLI`})}):(0,Q.jsxs)(A,{variant:`ghost`,size:`sm`,className:`text-muted-foreground ml-auto h-7 text-xs`,onClick:Ge,"data-testid":`clone-repo-disconnect`,children:[(0,Q.jsx)(n,{className:`icon-xs mr-1`}),t(`github.disconnect`)]})]}),(0,Q.jsx)(`div`,{className:`mb-3`,children:(0,Q.jsx)(ce,{query:z,onQueryChange:B,placeholder:t(`github.repos.searchPlaceholder`),totalMatches:L.length,resultLabel:z?`${L.length}`:``,loading:ze,onClose:z?()=>B(``):void 0,onInputKeyDown:Be,autoFocus:!1,testIdPrefix:`clone-repo-search`,className:`border-input bg-background rounded-md border px-2`})}),(0,Q.jsxs)(se,{viewportRef:K,className:`-mx-1 max-h-[40vh] min-h-0 flex-1`,children:[L.map((e,t)=>(0,Q.jsxs)(`button`,{"data-repo-item":!0,"data-testid":`clone-repo-item-${e.id}`,onClick:()=>Ue(e),onMouseEnter:()=>G(t),className:O(`flex w-full flex-col gap-0.5 rounded-md px-3 py-2 text-left transition-colors hover:bg-accent`,W===t&&`bg-accent`),children:[(0,Q.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Q.jsx)(M,{text:e.full_name,query:V,className:`truncate text-sm font-medium`}),e.private?(0,Q.jsx)(r,{className:`icon-xs text-status-pending shrink-0`}):(0,Q.jsx)(l,{className:`icon-xs text-muted-foreground shrink-0`})]}),e.description&&(0,Q.jsx)(M,{text:e.description,query:V,className:`text-muted-foreground truncate text-xs`}),(0,Q.jsxs)(`div`,{className:`text-muted-foreground flex items-center gap-3 text-xs`,children:[e.language&&(0,Q.jsx)(M,{text:e.language,query:V}),(0,Q.jsx)(`span`,{children:Ke(e.updated_at)})]})]},e.id)),_e&&(0,Q.jsx)(ue,{fill:!1,className:`py-4`,testId:`clone-repo-loading-repos`}),!_e&&L.length===0&&(0,Q.jsx)(`p`,{className:`text-muted-foreground py-8 text-center text-sm`,children:t(`github.repos.noRepos`)}),(0,Q.jsx)(`div`,{ref:ve,"aria-hidden":!0,className:`h-1 w-full`})]})]});if(g===`clone-config`&&Y)return(0,Q.jsxs)(`div`,{className:`space-y-4`,children:[(0,Q.jsxs)(A,{variant:`ghost`,size:`sm`,className:`text-muted-foreground -ml-2`,onClick:()=>_(`repos`),children:[(0,Q.jsx)(s,{className:`icon-sm mr-1`}),t(`github.repos.title`)]}),(0,Q.jsxs)(`div`,{className:`border-border space-y-1 rounded-md border p-3`,children:[(0,Q.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Q.jsx)(`span`,{className:`text-sm font-medium`,children:Y.full_name}),Y.private&&(0,Q.jsx)(r,{className:`icon-xs text-status-pending`})]}),Y.description&&(0,Q.jsx)(`p`,{className:`text-muted-foreground text-xs`,children:Y.description})]}),(0,Q.jsxs)(`div`,{children:[(0,Q.jsx)(`label`,{className:`mb-1.5 block text-sm font-medium`,children:t(`github.clone.projectName`)}),(0,Q.jsx)(R,{value:Z,onChange:e=>Ce(e.target.value)})]}),(0,Q.jsxs)(`div`,{children:[(0,Q.jsx)(`label`,{className:`mb-1.5 block text-sm font-medium`,children:t(`github.clone.destination`)}),(0,Q.jsxs)(`div`,{className:`flex gap-2`,children:[(0,Q.jsx)(R,{className:`flex-1`,placeholder:t(`github.clone.destinationDesc`),value:X,onChange:e=>Se(e.target.value)}),(0,Q.jsx)(A,{variant:`outline`,size:`sm`,onClick:()=>De(!0),children:(0,Q.jsx)(u,{className:`icon-base`})})]})]}),(0,Q.jsxs)(`div`,{className:`flex gap-2 pt-2`,children:[(0,Q.jsx)(A,{variant:`outline`,className:`flex-1`,onClick:()=>_(`repos`),children:t(`common.cancel`)}),(0,Q.jsx)(A,{className:`flex-1`,onClick:We,disabled:!X||!Z,children:t(`github.clone.cloneAndCreate`)})]}),Ee&&(0,Q.jsx)(fe,{onSelect:e=>{Se(e),De(!1)},onClose:()=>De(!1)})]});if(g===`cloning`){let e=Ae?Ae.replace(/:.*$/,``).trim().replace(/\b\w/g,e=>e.toUpperCase()):``;return(0,Q.jsxs)(`div`,{className:`flex flex-col items-center gap-4 py-12`,children:[(0,Q.jsx)(o,{className:`text-primary size-8 animate-spin`}),(0,Q.jsx)(`p`,{className:`text-sm font-medium`,children:t(`github.clone.cloning`,{repo:Y?.full_name})}),(0,Q.jsxs)(`div`,{className:`w-full max-w-xs`,children:[e&&(0,Q.jsx)(`p`,{className:`text-muted-foreground mb-1 text-xs font-medium`,children:e}),Me!==void 0&&(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`div`,{className:`bg-muted h-1.5 w-full overflow-hidden rounded-full`,children:(0,Q.jsx)(`div`,{className:O(`h-full rounded-full bg-primary`,Pe?``:`transition-all duration-300`),style:{width:`${Me}%`}})}),(0,Q.jsxs)(`p`,{className:`text-muted-foreground mt-1 text-right text-xs`,children:[Me,`%`]})]})]})]})}return null}function De(){let{t:e}=x(),t=E(),n=de(e=>e.loadProjects),[r,i]=(0,H.useState)(`local`),[a,s]=(0,H.useState)(``),[l,d]=(0,H.useState)(``),[f,p]=(0,H.useState)(!1),[m,h]=(0,H.useState)(!1),[g,_]=(0,H.useState)(!1),[v,y]=(0,H.useState)(!1);return(0,Q.jsxs)(se,{className:`flex flex-1 justify-center pt-[10vh]`,children:[(0,Q.jsxs)(`div`,{className:`mx-auto w-full max-w-md space-y-6 px-4 pb-8`,children:[!v&&(0,Q.jsxs)(`div`,{className:`space-y-2 text-center`,children:[(0,Q.jsx)(`div`,{className:`bg-primary/10 mx-auto flex size-12 items-center justify-center rounded-full`,children:(0,Q.jsx)(c,{className:`icon-xl text-primary`})}),(0,Q.jsx)(`h2`,{className:`text-xl font-semibold`,children:e(`sidebar.addProject`)})]}),(0,Q.jsxs)(`div`,{className:O(`flex gap-1 rounded-lg bg-muted p-1`,v&&`hidden`),children:[(0,Q.jsxs)(`button`,{className:`flex flex-1 items-center justify-center gap-1.5 rounded-md px-3 py-1.5 text-sm font-medium transition-colors ${r===`local`?`bg-background text-foreground shadow-xs`:`text-muted-foreground hover:text-foreground`}`,"data-testid":`add-project-tab-local`,onClick:()=>i(`local`),children:[(0,Q.jsx)(u,{className:`icon-sm`}),e(`github.localFolder`)]}),(0,Q.jsxs)(`button`,{className:`flex flex-1 items-center justify-center gap-1.5 rounded-md px-3 py-1.5 text-sm font-medium transition-colors ${r===`github`?`bg-background text-foreground shadow-xs`:`text-muted-foreground hover:text-foreground`}`,"data-testid":`add-project-tab-clone`,onClick:()=>i(`github`),children:[(0,Q.jsx)(oe,{className:`icon-sm`}),e(`github.cloneFromGithub`)]})]}),r===`local`?(0,Q.jsxs)(`div`,{className:`space-y-4`,children:[(0,Q.jsx)(`p`,{className:`text-muted-foreground text-center text-sm`,children:e(`sidebar.addProjectDescription`,{defaultValue:`Enter the project name and select the folder path.`})}),(0,Q.jsxs)(`div`,{children:[(0,Q.jsx)(`label`,{className:`mb-1.5 block text-sm font-medium`,children:e(`sidebar.projectName`)}),(0,Q.jsx)(R,{"data-testid":`add-project-name`,placeholder:e(`sidebar.projectName`),value:a,onChange:e=>s(e.target.value),autoFocus:!0})]}),(0,Q.jsxs)(`div`,{children:[(0,Q.jsx)(`label`,{className:`mb-1.5 block text-sm font-medium`,children:e(`sidebar.absolutePath`)}),(0,Q.jsxs)(`div`,{className:`flex gap-2`,children:[(0,Q.jsx)(R,{"data-testid":`add-project-path`,className:`flex-1`,placeholder:e(`sidebar.absolutePath`),value:l,onChange:e=>d(e.target.value)}),(0,Q.jsxs)(te,{children:[(0,Q.jsx)(k,{asChild:!0,children:(0,Q.jsx)(A,{"data-testid":`add-project-browse`,variant:`outline`,size:`sm`,onClick:()=>p(!0),"aria-label":e(`sidebar.browseFolder`),children:(0,Q.jsx)(u,{className:`icon-base`})})}),(0,Q.jsx)(w,{children:e(`sidebar.browseFolder`)})]})]})]}),(0,Q.jsxs)(`div`,{className:`flex gap-2 pt-2`,children:[(0,Q.jsx)(A,{"data-testid":`add-project-cancel`,variant:`outline`,className:`flex-1`,onClick:()=>t(N(`/`)),children:e(`common.cancel`,{defaultValue:`Cancel`})}),(0,Q.jsx)(A,{"data-testid":`add-project-submit`,className:`flex-1`,onClick:async()=>{if(!a||!l||m)return;h(!0);let r=await T.createProject(a,l);if(r.isErr()){if(r.error.message?.includes(`Not a git repository`)||r.error.message?.includes(`nested inside another git repository`)){h(!1),_(!0);return}F(r.error,`createProject`),h(!1);return}await n(),P.success(e(`project.created`,{name:a,defaultValue:`Project "${a}" created`})),t(N(`/projects/${r.value.id}`)),h(!1)},disabled:m||!a||!l,children:m?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(o,{className:`icon-base mr-2 animate-spin`}),e(`common.loading`)]}):e(`sidebar.add`)})]})]}):(0,Q.jsx)(Ee,{onCloningChange:y})]}),f&&(0,Q.jsx)(fe,{onSelect:async e=>{if(d(e),p(!1),!a){let t=await T.repoName(e);t.isOk()&&t.value.name?s(t.value.name):s(e.split(/[\\/]/).filter(Boolean).pop()||``)}},onClose:()=>p(!1)}),(0,Q.jsx)(re,{open:g,onOpenChange:_,children:(0,Q.jsxs)(L,{children:[(0,Q.jsxs)(ae,{children:[(0,Q.jsx)(ne,{children:e(`confirm.gitInitTitle`,{defaultValue:`Initialize Git Repository`})}),(0,Q.jsx)(j,{children:e(`confirm.notGitRepo`,{path:l})})]}),(0,Q.jsxs)(I,{children:[(0,Q.jsx)(A,{"data-testid":`git-init-cancel`,variant:`outline`,onClick:()=>_(!1),children:e(`common.cancel`,{defaultValue:`Cancel`})}),(0,Q.jsx)(A,{"data-testid":`git-init-confirm`,onClick:async()=>{_(!1),h(!0);let r=await T.gitInit(l);if(r.isErr()){F(r.error,`createProject`),h(!1);return}let i=await T.createProject(a,l);if(i.isErr()){F(i.error,`createProject`),h(!1);return}await n(),P.success(e(`project.created`,{name:a,defaultValue:`Project "${a}" created`})),t(N(`/projects/${i.value.id}`)),h(!1)},children:e(`confirm.gitInitAction`,{defaultValue:`Initialize`})})]})]})})]})}export{De as AddProjectView};
@@ -1 +1 @@
1
- import{a as e}from"./rolldown-runtime-Cyuzqnbw.js";import{B as t,Bn as n,D as r,Nr as i,Pr as a,Q as o,_r as s,b as c,bn as l,gr as u,kr as d,o as f,qn as p,w as m,yr as h,zr as g}from"./icons-sqwAEN28.js";import{o as _}from"./markdown-DBtwZWLP.js";import{t as v}from"./useTranslation-DAPPK3Hy.js";import{P as y,_t as b,dt as x,f as S,gt as C,lt as w,vt as ee}from"./index-DCJpZz6M.js";import{t as T}from"./button-CZ967bB8.js";import{$ as E,$r as D,An as O,Bn as k,Dr as A,Fn as j,Ft as M,Gn as N,Gr as P,Jn as F,Jr as te,Kn as I,Lt as L,Mn as R,Mt as ne,Nn as z,Pn as B,Qt as re,Rr as V,Rt as H,Un as ie,Ur as U,Wn as W,Xr as ae,Z as G,Zn as K,et as q,jn as J,m as oe,mn as se,nt as ce,qr as le,rn as Y,rt as ue,sr as de,tn as X,tr as fe,tt as pe,vr as me,yr as he}from"./items-azeOGVff.js";import{t as ge}from"./input-C2LWQS5Y.js";import{t as _e}from"./loading-state-CZgfErMi.js";import{n as ve,r as Z,t as ye}from"./adapter-g71mvnZo.js";import{t as be}from"./use-active-thread-id-E8-K63Gj.js";import{t as xe}from"./app-store-CfgpkFla.js";import{t as Se}from"./tooltip-icon-button-DD8fKyR8.js";import{c as Ce,n as we,r as Te,s as Ee,t as De}from"./element-A6J8F7_i.js";import{t as Oe}from"./ThreadStatusPin-DQr-M4nV.js";import{t as ke}from"./ThreadPowerline-zo87eggE.js";import{n as Ae}from"./go-to-thread-BNBZv0ib.js";import{n as je,r as Me,t as Ne}from"./use-thread-creation-O-5GoSUZ.js";var Q=e(g(),1),$=e(_(),1),Pe=64,Fe=5;function Ie({threads:e,search:t,caseSensitive:n,contentSnippets:r,emptyMessage:i,searchEmptyMessage:o,projectFilter:s,projectInfoById:c,hasMore:l,loadingMore:u,onEndReached:d,onSearchKeyDownRef:f,className:p}){let{t:m}=v(),h=be(),g=ie(e=>e.statusByBranch),_=(0,Q.useRef)(null),[y,b]=(0,Q.useState)(-1),S=we(),{handleSelectThread:C,handleArchiveThreadFromList:ee,handleRenameThread:T,handlePinThread:E,handleDeleteThreadFromList:D}=S,O=me({count:e.length,getScrollElement:()=>_.current,estimateSize:()=>Pe,getItemKey:t=>e[t]?.id??t,overscan:10});(0,Q.useEffect)(()=>{b(-1)},[t,e]);let A=(0,Q.useCallback)(async e=>{he.getState().setKanbanContext({projectId:s||void 0,search:t,caseSensitive:n,threadId:e.id,viewMode:`list`}),await C(e.projectId,e.id),requestAnimationFrame(()=>{document.querySelector(`[data-project-id="${e.projectId}"] [data-testid="thread-item-${e.id}"]`)?.scrollIntoView({block:`nearest`,behavior:`auto`})})},[n,C,s,t]),j=(0,Q.useCallback)(t=>{if(e.length!==0)if(t.key===`ArrowDown`){t.preventDefault();let n=y<e.length-1?y+1:0;b(n),O.scrollToIndex(n,{align:`auto`})}else if(t.key===`ArrowUp`){t.preventDefault();let n=y>0?y-1:e.length-1;b(n),O.scrollToIndex(n,{align:`auto`})}else t.key===`Enter`&&y>=0&&y<e.length&&(t.preventDefault(),A(e[y]))},[A,y,e,O]);(0,Q.useEffect)(()=>(f.current=j,()=>{f.current=null}),[f,j]);let M=O.getVirtualItems(),N=(0,Q.useMemo)(()=>M.map(t=>e[t.index]).filter(e=>!!e),[e,M]);return(0,Q.useEffect)(()=>{ie.getState().ensureStatusForThreads(N)},[N]),(0,Q.useEffect)(()=>{if(!l||u)return;let t=M[M.length-1];t&&t.index>=e.length-1-Fe&&d()},[M,l,u,d,e.length]),e.length===0?(0,$.jsx)(`div`,{className:w(`flex h-32 items-center justify-center text-xs text-muted-foreground`,p),children:t?o:i}):(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`div`,{className:w(`flex min-h-0 flex-1 flex-col`,p),children:(0,$.jsxs)(`div`,{ref:_,"data-testid":`all-threads-thread-list-scroll`,className:`border-border/50 min-h-0 flex-1 overflow-y-auto rounded-lg border p-2`,children:[(0,$.jsx)(`div`,{style:{height:`${O.getTotalSize()}px`,width:`100%`,position:`relative`},children:M.map(i=>{let o=e[i.index];if(!o)return null;let s=c[o.projectId],l=g[k(o)],u=x(o),d=o.mode===`worktree`&&!!u&&o.provider!==`external`,f=o.status===`running`,p=t?n?o.title.includes(t):B(o.title).includes(B(t)):!1,_=t&&!p?r.get(o.id):void 0;return(0,$.jsx)(`div`,{"data-index":i.index,"data-testid":`all-threads-thread-item-${o.id}`,ref:O.measureElement,onMouseMove:()=>b(i.index),className:`absolute top-0 left-0 w-full px-0.5 pb-1`,style:{transform:`translateY(${i.start}px)`},children:(0,$.jsx)(Te,{thread:o,projectPath:s?.path??``,isSelected:h===o.id||y===i.index,subtitle:V(o)?void 0:s?.name??m(`allThreads.unknownProject`,{defaultValue:`Unknown project`}),projectColor:s?.color,timeValue:Y(o.completedAt??o.createdAt,m),search:t||void 0,contentSnippet:_,metadataBadge:o.archived?(0,$.jsxs)(`span`,{className:`bg-muted text-status-warning/80 inline-flex shrink-0 items-center gap-0.5 rounded px-1 py-px text-[10px] leading-tight font-medium`,children:[(0,$.jsx)(a,{className:`icon-2xs`}),m(`allThreads.archived`)]}):void 0,gitStatus:l,href:Ae(o),onSelect:()=>void A(o),onRename:e=>T(o.projectId,o.id,e),onPin:()=>E(o.projectId,o.id,!o.pinned),onArchive:f||o.archived?void 0:()=>ee(o.id,o.projectId,o.title,d),onDelete:()=>D(o.id,o.projectId,o.title,d)})},i.key)})}),u&&(0,$.jsx)(_e,{fill:!1,layout:`inline`,size:`compact`,className:`py-3`,testId:`all-threads-thread-list-loading-more`,label:m(`common.loading`)})]})}),(0,$.jsx)(Le,{actions:S})]})}function Le({actions:e}){return(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(Ce,{archiveConfirm:e.archiveConfirm,setArchiveConfirm:e.setArchiveConfirm,handleArchiveConfirm:e.handleArchiveConfirm,deleteThreadConfirm:e.deleteThreadConfirm,setDeleteThreadConfirm:e.setDeleteThreadConfirm,handleDeleteThreadConfirm:e.handleDeleteThreadConfirm,renameProjectState:e.renameProjectState,setRenameProjectState:e.setRenameProjectState,handleRenameProjectConfirm:e.handleRenameProjectConfirm,deleteProjectConfirm:e.deleteProjectConfirm,setDeleteProjectConfirm:e.setDeleteProjectConfirm,handleDeleteProjectConfirm:e.handleDeleteProjectConfirm,issuesProjectId:e.issuesProjectId,setIssuesProjectId:e.setIssuesProjectId,actionLoading:e.actionLoading}),e.branchSwitchDialog]})}function Re({open:e,onClose:t,onSubmit:n,loading:r=!1,projectId:i}){let{t:a}=v();return(0,$.jsx)(P,{open:e,onOpenChange:e=>{e||t()},children:(0,$.jsxs)(le,{className:`gap-0 p-0 sm:max-w-3xl`,children:[(0,$.jsxs)(ae,{className:`px-4 pt-4 pb-2`,children:[(0,$.jsx)(D,{className:`text-sm`,children:a(`kanban.addThread`,`Add new thread`)}),(0,$.jsx)(te,{className:`sr-only`,children:a(`thread.describeTask`,`Describe the task for the agent`)})]}),(0,$.jsx)(`div`,{className:`px-4 pb-4`,children:(0,$.jsx)(Me,{onSubmit:async(e,r,i)=>await n(e,r,i)===!1?!1:(t(),!0),loading:r,isNewThread:!0,projectId:i,newThreadContextBar:(0,$.jsx)(je,{projectId:i})},i)})]})})}var ze=[`backlog`,`planning`,`in_progress`,`review`,`done`,`archived`],Be=(0,Q.memo)(function({thread:e,projectInfo:t,onDelete:i,onArchive:o,search:s,caseSensitive:u,ghost:d,contentSnippet:p,projectId:h,highlighted:g,stage:_,gitStatus:x}){let{t:S}=v(),C=b(),ee=he(e=>e.setKanbanContext),E=L(e=>e.pinThread),D=(0,Q.useRef)(null),[O,k]=(0,Q.useState)(!1);(0,Q.useEffect)(()=>{g&&D.current&&D.current.scrollIntoView({block:`center`,behavior:`instant`})},[g]),(0,Q.useEffect)(()=>{let t=D.current;if(t)return ye({element:t,getInitialData:()=>({type:`kanban-card`,threadId:e.id,sourceStage:e.archived?`archived`:e.stage||`backlog`,projectId:e.projectId}),onDragStart:()=>k(!0),onDrop:()=>k(!1)})},[e.id,e.stage,e.archived,e.projectId]);let A=e.status===`running`,j=A||e.status===`setting_up`,[M,P]=(0,Q.useState)(!1),te=(0,Q.useCallback)(e=>P(e),[]);return(0,$.jsxs)(`div`,{ref:D,"data-testid":`kanban-card-${e.id}`,className:w(`group/card flex items-stretch rounded-md border bg-card cursor-pointer transition-[opacity,box-shadow] duration-300`,O&&`opacity-40`,d&&!O&&`opacity-50 hover:opacity-80`,g&&`ring-2 ring-ring shadow-md`),onClick:()=>{O||(0,Q.startTransition)(()=>{ee({projectId:h,search:s,caseSensitive:u,threadId:e.id}),C(H(`/projects/${e.projectId}/threads/${e.id}`))})},children:[(0,$.jsxs)(`div`,{className:`min-w-0 flex-1 px-3.5 py-3`,children:[(0,$.jsxs)(`div`,{className:`mb-2 flex min-w-0 items-start gap-2`,children:[(0,$.jsx)(Oe,{thread:e,onPin:t=>E(e.id,e.projectId,t),hoverGroup:`card`,className:`mt-0.5`}),(0,$.jsx)(oe,{title:e.title,search:s||``,multiline:!0,containerClassName:`flex-1`,className:`text-muted-foreground group-hover/card:text-foreground line-clamp-6 text-sm leading-relaxed font-medium transition-colors`,stopBadgePropagation:!0,badgeTestId:`kanban-view-card-attachments-${e.id}`})]}),(0,$.jsx)(ke,{thread:e,projectName:t?.name,projectColor:t?.color,gitStatus:x,diffStatsSize:`xxs`,className:`mb-2`,"data-testid":`kanban-card-powerline-${e.id}`}),p&&s&&!B(e.title).includes(B(s))&&(0,$.jsx)(z,{text:p,query:s,className:`text-muted-foreground mb-1 line-clamp-2 block text-[11px] italic`})]}),(0,$.jsx)(`div`,{className:`flex shrink-0 items-center px-1.5`,children:(0,$.jsxs)(`div`,{className:`grid min-w-10 place-items-center justify-items-center`,children:[(0,$.jsx)(`span`,{className:w(`col-start-1 row-start-1 text-xs text-muted-foreground leading-4 h-4 group-hover/card:opacity-0 group-hover/card:pointer-events-none`,M&&`opacity-0 pointer-events-none`),children:Y(e.completedAt||e.createdAt,S)}),(0,$.jsx)(`div`,{className:w(`col-start-1 row-start-1 flex items-center opacity-0 group-hover/card:opacity-100`,M&&`opacity-100!`),children:(0,$.jsxs)(N,{onOpenChange:te,children:[(0,$.jsx)(fe,{asChild:!0,children:(0,$.jsx)(T,{variant:`ghost`,size:`icon-xs`,tabIndex:-1,"data-testid":`kanban-card-more-${e.id}`,onClick:e=>e.stopPropagation(),className:`text-muted-foreground hover:text-foreground`,children:(0,$.jsx)(n,{className:`icon-sm`})})}),(0,$.jsxs)(I,{align:`end`,side:`bottom`,children:[(0,$.jsxs)(F,{onClick:async t=>{t.stopPropagation();let n=await y.openDirectory({threadId:e.id});n.isErr()&&W(n.error)},children:[(0,$.jsx)(l,{className:`icon-sm`}),S(`sidebar.openDirectory`)]}),(0,$.jsxs)(F,{onClick:t=>{t.stopPropagation(),Ee({thread:e})},children:[(0,$.jsx)(m,{className:`icon-sm`}),S(`sidebar.openTerminal`)]}),A&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(K,{}),(0,$.jsxs)(F,{onClick:async t=>{t.stopPropagation();let n=await y.stopThread(e.id);n.isErr()&&console.error(`Failed to stop thread:`,n.error)},className:`text-status-error focus:text-status-error`,children:[(0,$.jsx)(r,{className:`icon-sm`}),S(`common.stop`)]})]}),o&&!j&&(0,$.jsxs)(F,{onClick:t=>{t.stopPropagation(),o(e)},children:[(0,$.jsx)(a,{className:`icon-sm`}),S(`sidebar.archive`)]}),(0,$.jsxs)(F,{"data-testid":`kanban-card-toggle-orchestrator-${e.id}`,onClick:async t=>{t.stopPropagation();let n=!e.orchestratorManaged,r=await y.setOrchestratorManaged(e.id,n);r.isErr()&&W(r.error)},children:[(0,$.jsx)(f,{className:`icon-sm`}),e.orchestratorManaged?S(`sidebar.disableOrchestrator`,`Disable orchestrator`):S(`sidebar.enableOrchestrator`,`Enable orchestrator`)]}),(0,$.jsx)(K,{}),(0,$.jsxs)(F,{"data-testid":`kanban-card-delete-${e.id}`,onClick:t=>{t.stopPropagation(),i(e)},className:`text-status-error focus:text-status-error`,children:[(0,$.jsx)(c,{className:`icon-sm`}),S(`common.delete`)]})]})]})})]})})]})});function Ve({projectId:e,projects:n,onSelect:r}){let{t:i}=v(),[a,s]=(0,Q.useState)(!1),[c,l]=(0,Q.useState)(``),u=(0,Q.useRef)(null);if(e)return(0,$.jsx)(`button`,{"data-testid":`kanban-add-thread`,className:`text-muted-foreground hover:bg-accent hover:text-foreground ml-auto rounded p-0.5 transition-colors`,onClick:()=>r(e),title:i(`kanban.addThread`),children:(0,$.jsx)(o,{className:`icon-base`})});let d=c?n.filter(e=>e.name.toLowerCase().includes(c.toLowerCase())):n;return(0,$.jsxs)(O,{open:a,onOpenChange:e=>{s(e),e||l(``)},children:[(0,$.jsx)(R,{asChild:!0,children:(0,$.jsx)(`button`,{"data-testid":`kanban-add-thread`,className:`text-muted-foreground hover:bg-accent hover:text-foreground ml-auto rounded p-0.5 transition-colors`,title:i(`kanban.addThread`),children:(0,$.jsx)(o,{className:`icon-base`})})}),(0,$.jsxs)(J,{align:`start`,className:`w-64 p-0`,children:[(0,$.jsxs)(`div`,{className:`border-border/50 flex items-center gap-2 border-b px-3 py-2.5`,children:[(0,$.jsx)(t,{className:`icon-base text-muted-foreground shrink-0`}),(0,$.jsx)(ge,{ref:u,value:c,onChange:e=>l(e.target.value),placeholder:i(`kanban.searchProject`),className:`placeholder:text-muted-foreground h-auto flex-1 rounded-none border-0 bg-transparent px-0 py-0 text-sm shadow-none focus-visible:ring-0`,autoFocus:!0})]}),(0,$.jsx)(`div`,{className:`max-h-56 overflow-y-auto py-1`,children:d.length===0?(0,$.jsx)(`div`,{className:`text-muted-foreground py-3 text-center text-sm`,children:i(`commandPalette.noResults`)}):d.map(e=>(0,$.jsxs)(`button`,{className:`hover:bg-accent flex w-full items-center gap-2 px-3 py-2 text-left text-sm transition-colors`,onClick:()=>{s(!1),l(``),r(e.id)},children:[(0,$.jsx)(`span`,{className:`size-2.5 shrink-0 rounded-full`,style:{backgroundColor:e.color||j(e.name)}}),(0,$.jsx)(`span`,{className:`truncate`,children:e.name})]},e.id))})]})]})}var He=(0,Q.memo)(function({stage:e,threads:t,projectInfoById:n,onDelete:r,onArchive:i,projectId:a,projects:o,onAddThread:s,search:c,caseSensitive:l,contentSnippets:u,highlightThreadId:d,statusByThread:f}){let{t:p}=v(),m=(0,Q.useRef)(null),h=(0,Q.useRef)(null),[g,_]=(0,Q.useState)(!1),[y,b]=(0,Q.useState)(20);(0,Q.useEffect)(()=>{let t=m.current;if(t)return ve({element:t,getData:()=>({type:`kanban-column`,stage:e}),canDrop:({source:e})=>e.data.type===`kanban-card`,onDragEnter:()=>_(!0),onDragLeave:()=>_(!1),onDrop:()=>_(!1)})},[e]),(0,Q.useEffect)(()=>{let e=h.current;if(e)return De({element:e})},[]),(0,Q.useEffect)(()=>{b(20)},[c,a]),(0,Q.useEffect)(()=>{if(!d)return;let e=t.findIndex(e=>e.id===d);e>=y&&b(e+1)},[d,t,y]);let x=t.slice(0,y),S=t.length>y;return(0,$.jsxs)(`div`,{ref:m,className:w(`flex flex-col w-92 min-w-92 shrink-0 rounded-lg bg-secondary/30 transition-colors`,g&&`ring-2 ring-ring bg-secondary/50`),children:[(0,$.jsxs)(`div`,{className:`border-border/50 flex items-center gap-2 border-b px-3 py-2.5`,children:[(0,$.jsx)(`span`,{className:`text-sm font-medium`,children:p(X[e].labelKey)}),(0,$.jsxs)(`span`,{className:`text-muted-foreground text-xs`,children:[`(`,t.length,`)`]}),o.length>0&&e!==`review`&&e!==`done`&&e!==`archived`&&(0,$.jsx)(Ve,{projectId:a,projects:o,onSelect:t=>s(t,e)})]}),(0,$.jsx)(`div`,{ref:h,className:`min-h-[200px] flex-1 space-y-2 overflow-y-auto p-2`,children:t.length===0?(0,$.jsx)(`div`,{className:`text-muted-foreground py-8 text-center text-xs`,children:p(`kanban.emptyColumn`)}):(0,$.jsxs)($.Fragment,{children:[x.map(t=>(0,$.jsx)(Be,{thread:t,projectInfo:n?.[t.projectId],onDelete:r,onArchive:e===`archived`?void 0:i,search:c,caseSensitive:l,ghost:e===`archived`,contentSnippet:u?.get(t.id),projectId:a,highlighted:t.id===d,stage:e,gitStatus:f[t.id]},t.id)),S&&(0,$.jsx)(`button`,{"data-testid":`kanban-load-more-${e}`,onClick:()=>b(e=>e+20),className:`text-muted-foreground hover:bg-accent hover:text-foreground w-full rounded-md py-2 text-xs transition-colors`,children:p(`kanban.loadMore`,{count:Math.min(20,t.length-y)})})]})})]})});function Ue({threads:e,projectId:t,search:n,caseSensitive:r,contentSnippets:i,highlightThreadId:a}){let{t:o}=v(),s=b(),c=L(e=>e.updateThreadStage),l=L(e=>e.archiveThread),u=L(e=>e.unarchiveThread),d=L(e=>e.deleteThread),f=L(e=>e.selectedThreadId),p=xe(e=>e.projects),m=xe(e=>e.loadThreadsForProject),h=S(e=>e.toolPermissions),[g,_]=(0,Q.useState)(null),[y,C]=(0,Q.useState)(!1),[w,ee]=(0,Q.useState)(void 0),[T,E]=(0,Q.useState)(`backlog`),[D,O]=(0,Q.useState)(!1),[A,j]=(0,Q.useState)(null),M=ie(e=>e.statusByBranch),N=ie(e=>e.threadToBranchKey),P=(0,Q.useMemo)(()=>{let t={};for(let n of e){let e=N[n.id]||k(n);M[e]&&(t[n.id]=M[e])}return t},[e,M,N]),[F,te]=(0,Q.useState)(a);(0,Q.useEffect)(()=>{if(!F)return;let e=setTimeout(()=>te(void 0),3e3);return()=>clearTimeout(e)},[F]);let I=(0,Q.useCallback)((e,t)=>{ee(e),E(t),C(!0)},[]),R=(0,Q.useCallback)(e=>{_({threadId:e.id,projectId:e.projectId,title:e.title,isWorktree:e.mode===`worktree`&&!!x(e)})},[]),ne=(0,Q.useCallback)(e=>{l(e.id,e.projectId),U.success(o(`toast.threadArchived`,{title:e.title}))},[l,o]),z=(0,Q.useCallback)(async()=>{if(!g)return;O(!0);let{threadId:e,projectId:t,title:n}=g,r=f===e;await d(e,t),O(!1),_(null),U.success(o(`toast.threadDeleted`,{title:n})),r&&s(H(`/projects/${t}`))},[g,f,d,s,o]),B=(0,Q.useCallback)(()=>{if(!A)return;let{threadId:n,title:r,sourceStage:i,newStage:a}=A,s=t||e.find(e=>e.id===n)?.projectId;if(s){c(n,s,a);let e=o(X[i].labelKey),t=o(X[a].labelKey);U.success(o(`toast.threadMoved`,{title:r,from:e,to:t}))}j(null)},[A,t,e,c,o]),re=p.find(e=>e.id===w)?.defaultMode||`local`,{creating:V,createThread:W}=Ne({projectId:w??null,defaultThreadMode:re,toolPermissions:h,forceIdle:T===`backlog`||T===`planning`,stage:T===`planning`?`planning`:void 0,onSuccess:async(e,t,n)=>{w&&await m(w),U.success(o(`toast.threadCreated`,{title:n?.title??``}))}}),ae=(0,Q.useMemo)(()=>{let e={};for(let t of p)e[t.id]={name:t.name,color:t.color,path:t.path};return e},[p]),G=(0,Q.useMemo)(()=>{let t={backlog:[],planning:[],in_progress:[],review:[],done:[],archived:[]};for(let n of e){let e=n.archived?`archived`:n.stage||`backlog`;t[e]&&t[e].push(n)}for(let e of ze)t[e].sort((e,t)=>{if(e.pinned!==t.pinned)return e.pinned?-1:1;let n=e.completedAt||e.createdAt,r=t.completedAt||t.createdAt;return new Date(r).getTime()-new Date(n).getTime()});return t},[e]),K=(0,Q.useCallback)(({source:n,location:r})=>{let i=r.current.dropTargets;if(!i.length||n.data.type!==`kanban-card`)return;let a=n.data.threadId,s=n.data.sourceStage,d=n.data.projectId,f=i.find(e=>e.data.type===`kanban-column`);if(!f)return;let p=f.data.stage;if(p===s)return;let m=t||d;if(p===`done`){let t=P[a],n=e.find(e=>e.id===a);if(n?.branch&&t&&t.state===`dirty`){j({threadId:a,title:n.title,sourceStage:s,newStage:p,gitState:t.state});return}}p===`archived`?l(a,m):s===`archived`?u(a,m,p):c(a,m,p);let h=e.find(e=>e.id===a)?.title||a,g=o(X[s].labelKey),_=o(X[p].labelKey);U.success(o(`toast.threadMoved`,{title:h,from:g,to:_}))},[t,c,l,u,P,e,o]);(0,Q.useEffect)(()=>Z({onDrop:K}),[K]);let q=(0,Q.useRef)(null);return(0,Q.useEffect)(()=>{let e=q.current;if(e)return De({element:e})},[]),(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`div`,{ref:q,className:`flex h-full gap-3 overflow-x-auto px-4 py-2`,children:ze.map(e=>(0,$.jsx)(He,{stage:e,threads:G[e],projectInfoById:ae,onDelete:R,onArchive:ne,projectId:t,projects:p,onAddThread:I,search:n,caseSensitive:r,contentSnippets:i,highlightThreadId:F,statusByThread:P},e))}),(0,$.jsx)(de,{open:!!g,onOpenChange:e=>{e||_(null)},title:o(`dialog.deleteThread`),description:o(`dialog.deleteThreadDesc`,{title:g?.title&&g.title.length>80?g.title.slice(0,80)+`…`:g?.title}),warning:g?.isWorktree?o(`dialog.worktreeWarning`):void 0,cancelLabel:o(`common.cancel`),confirmLabel:o(`common.delete`),loading:D,onCancel:()=>_(null),onConfirm:z}),(0,$.jsx)(de,{open:!!A,onOpenChange:e=>{e||j(null)},title:o(`dialog.${A?.gitState===`unpushed`?`unpushedChanges`:A?.gitState===`dirty`?`dirtyChanges`:`unmergedChanges`}`),description:o(`dialog.${A?.gitState===`unpushed`?`unpushedChangesDesc`:A?.gitState===`dirty`?`dirtyChangesDesc`:`unmergedChangesDesc`}`,{title:A?.title&&A.title.length>80?A.title.slice(0,80)+`…`:A?.title}),variant:`default`,cancelLabel:o(`common.cancel`),confirmLabel:o(`common.continue`),onCancel:()=>j(null),onConfirm:B}),(0,$.jsx)(Re,{open:y,onClose:()=>C(!1),onSubmit:W,loading:V,projectId:w})]})}function We({viewMode:e,threads:t,search:n,caseSensitive:r,contentMatches:i,highlightThreadId:a,projectFilter:o,projectInfoById:s,hasMoreServerThreads:c,loadingMore:l,onLoadMore:u,searchKeyDownRef:d}){let{t:f}=v();return e===`board`?(0,$.jsx)(`div`,{className:`min-h-0 flex-1`,children:(0,$.jsx)(Ue,{threads:t,projectId:o||void 0,search:n,caseSensitive:r,contentSnippets:i,highlightThreadId:a})}):(0,$.jsx)(`div`,{className:`flex min-h-0 flex-1 flex-col px-4 py-3`,children:(0,$.jsx)(Ie,{threads:t,search:n,caseSensitive:r,contentSnippets:i,emptyMessage:f(`allThreads.noThreads`),searchEmptyMessage:f(`allThreads.noMatch`),projectFilter:o,projectInfoById:s,hasMore:c,loadingMore:l,onEndReached:u,onSearchKeyDownRef:d})})}function Ge({label:e,options:t,selected:n,onToggle:r,counts:i,testId:a}){let o=n.size,c=(0,Q.useRef)(null),l=o===0?e:o===1?t.find(e=>n.has(e.value))?.label??e:`${e} (${o})`,u=(0,Q.useCallback)(e=>{let t=c.current;if(!t)return;let n=Array.from(t.querySelectorAll(`[role="menuitemcheckbox"]`)),r=document.activeElement,i=n.indexOf(r);e.key===`ArrowDown`?(e.preventDefault(),n[(i+1)%n.length]?.focus()):e.key===`ArrowUp`?(e.preventDefault(),n[(i-1+n.length)%n.length]?.focus()):e.key===`Home`?(e.preventDefault(),n[0]?.focus()):e.key===`End`&&(e.preventDefault(),n[n.length-1]?.focus())},[]);return(0,$.jsxs)(O,{children:[(0,$.jsx)(R,{asChild:!0,children:(0,$.jsxs)(`button`,{"data-testid":a,className:w(`inline-flex items-center gap-1 px-2 py-1 text-xs rounded-md border transition-colors whitespace-nowrap`,o>0?`bg-accent text-accent-foreground border-accent-foreground/20`:`bg-transparent text-muted-foreground border-border hover:bg-accent/50 hover:text-foreground`),children:[l,(0,$.jsx)(s,{className:`icon-xs opacity-50`})]})}),(0,$.jsx)(J,{align:`start`,className:`w-auto min-w-[160px] p-1`,onKeyDown:u,onOpenAutoFocus:e=>{e.preventDefault(),(c.current?.querySelector(`[role="menuitemcheckbox"]`))?.focus()},children:(0,$.jsx)(`div`,{ref:c,role:`menu`,children:t.map(e=>{let t=n.has(e.value),a=i?.[e.value];return(0,$.jsxs)(`button`,{role:`menuitemcheckbox`,"aria-checked":t,tabIndex:-1,onClick:()=>r(e.value),className:w(`flex items-center gap-2 w-full px-2 py-1.5 text-xs rounded-sm transition-colors text-left`,`hover:bg-accent hover:text-accent-foreground`,`focus:bg-accent focus:text-accent-foreground focus:outline-hidden`,t&&`text-accent-foreground`),children:[(0,$.jsx)(`span`,{className:w(`flex h-3.5 w-3.5 items-center justify-center rounded-sm border`,t?`bg-primary border-primary text-primary-foreground`:`border-muted-foreground/30`),children:t&&(0,$.jsx)(h,{className:`icon-2xs`})}),(0,$.jsx)(`span`,{className:`flex-1`,children:e.label}),a!=null&&a>0&&(0,$.jsx)(`span`,{className:`text-muted-foreground tabular-nums`,children:a})]},e.value)})})})]})}function Ke({open:e,onOpenChange:t,projects:n,projectFilter:r,filteredProjectName:i,onChange:a}){let{t:o}=v();return(0,$.jsxs)(O,{open:e,onOpenChange:t,children:[(0,$.jsx)(R,{asChild:!0,children:(0,$.jsxs)(`button`,{"data-testid":`all-threads-project-filter`,className:w(`inline-flex items-center gap-1 px-2 py-1 text-xs rounded-md border transition-colors whitespace-nowrap`,r?`bg-accent text-accent-foreground border-accent-foreground/20`:`bg-transparent text-muted-foreground border-border hover:bg-accent/50 hover:text-foreground`),children:[r&&i?i:o(`allThreads.filterProject`),(0,$.jsx)(s,{className:`icon-xs opacity-50`})]})}),(0,$.jsx)(J,{align:`start`,className:`w-[240px] p-0`,children:(0,$.jsxs)(G,{children:[(0,$.jsx)(pe,{placeholder:o(`kanban.searchProject`),className:`h-9 text-xs`,"data-testid":`all-threads-project-filter-search`}),(0,$.jsxs)(ue,{children:[(0,$.jsx)(E,{children:o(`commandPalette.noResults`)}),(0,$.jsxs)(q,{children:[(0,$.jsxs)(ce,{value:o(`allThreads.allProjects`),onSelect:()=>{a(null),t(!1)},className:`text-xs`,children:[(0,$.jsx)(`span`,{className:w(`flex h-3.5 w-3.5 items-center justify-center rounded-full border`,r?`border-muted-foreground/30`:`bg-primary border-primary text-primary-foreground`),children:!r&&(0,$.jsx)(h,{className:`icon-2xs`})}),(0,$.jsx)(`span`,{className:`flex-1`,children:o(`allThreads.allProjects`)})]}),n.map(e=>{let n=r===e.id;return(0,$.jsxs)(ce,{value:`${e.name} ${e.path??``}`,onSelect:()=>{a(e.id),t(!1)},className:`text-xs`,children:[(0,$.jsx)(`span`,{className:w(`flex h-3.5 w-3.5 items-center justify-center rounded-full border`,n?`bg-primary border-primary text-primary-foreground`:`border-muted-foreground/30`),children:n&&(0,$.jsx)(h,{className:`icon-2xs`})}),(0,$.jsx)(`span`,{className:`flex-1 truncate`,children:e.name})]},e.id)})]})]})]})})]})}var qe=e=>t=>{e(e=>{let n=new Set(e);return n.has(t)?n.delete(t):n.add(t),n})};function Je(e){let{t}=v(),n=re(t),{searchInputRef:r,search:i,onSearchChange:o,caseSensitive:s,onCaseSensitiveChange:c,searchKeyDown:l,filteredCount:u,totalCount:d,searchPlaceholder:f,projects:p,projectFilter:m,filteredProjectName:h,projectFilterOpen:g,setProjectFilterOpen:_,onProjectFilterChange:y,statusFilter:b,setStatusFilter:x,gitFilter:S,setGitFilter:C,modeFilter:ee,setModeFilter:T,typeFilter:E,onTypeToggle:D,typeCounts:O,statusCounts:k,gitCounts:A,threadStatuses:j,gitStates:M,sortField:N,setSortField:P,sortDir:F,setSortDir:te,showArchived:I,setShowArchived:L,hasActiveFilters:R,onResetFilters:ne}=e;return(0,$.jsxs)(`div`,{className:`border-border/50 flex items-center gap-2 border-b px-4 py-2`,children:[(0,$.jsx)(se,{inputRef:r,query:i,onQueryChange:o,totalMatches:u,resultLabel:i.trim()?`${u}/${d}`:``,caseSensitive:s,onCaseSensitiveChange:c,onInputKeyDown:l,onClose:i?()=>o(``):void 0,autoFocus:!1,placeholder:f,testIdPrefix:`all-threads-search`,className:`border-input h-7 w-72 shrink-0 rounded-md border bg-transparent px-2`}),(0,$.jsx)(`div`,{className:`bg-border h-4 w-px`}),(0,$.jsx)(Ke,{open:g,onOpenChange:_,projects:p,projectFilter:m,filteredProjectName:h,onChange:y}),(0,$.jsx)(Ge,{testId:`all-threads-status-filter`,label:t(`allThreads.filterStatus`),options:j.filter(e=>(k[e]||0)>0).map(e=>({value:e,label:n[e]})),selected:b,onToggle:qe(x),counts:k}),(0,$.jsx)(Ge,{testId:`all-threads-git-filter`,label:`Git`,options:M.filter(e=>(A[e]||0)>0).map(e=>({value:e,label:t(`gitStatus.${e}`)})),selected:S,onToggle:qe(C),counts:A}),(0,$.jsx)(Ge,{label:t(`allThreads.filterMode`),options:[{value:`local`,label:t(`thread.mode.local`)},{value:`worktree`,label:t(`thread.mode.worktree`)}],selected:ee,onToggle:qe(T)}),(0,$.jsx)(Ge,{testId:`all-threads-type-filter`,label:t(`allThreads.filterType`,{defaultValue:`Type`}),options:[{value:`scratch`,label:t(`sidebar.scratchTitle`,{defaultValue:`Quick Chats`})},{value:`normal`,label:t(`allThreads.typeNormal`,{defaultValue:`Project`})}],selected:E,onToggle:D,counts:O}),(0,$.jsx)(`div`,{className:`bg-border h-4 w-px`}),(0,$.jsx)(Ye,{sortField:N,setSortField:P,sortDir:F,setSortDir:te}),(0,$.jsxs)(`button`,{"data-testid":`all-threads-show-archived`,onClick:()=>L(!I),className:w(`inline-flex items-center gap-1 px-2 py-1 text-xs rounded-md border transition-colors whitespace-nowrap`,I?`bg-status-warning/10 border-status-warning/20 text-status-warning/80`:`bg-transparent text-muted-foreground border-border hover:bg-accent/50 hover:text-foreground`),children:[(0,$.jsx)(a,{className:`icon-xs`}),t(`allThreads.showArchived`)]}),R&&(0,$.jsx)(`button`,{"data-testid":`all-threads-clear-filters`,onClick:ne,className:`text-muted-foreground hover:text-foreground px-2 py-1 text-xs whitespace-nowrap transition-colors`,children:t(`allThreads.clearFilters`)})]})}function Ye({sortField:e,setSortField:t,sortDir:n,setSortDir:r}){let{t:a}=v(),o=(0,Q.useRef)(null),s=(0,Q.useCallback)(e=>{let t=o.current;if(!t)return;let n=Array.from(t.querySelectorAll(`[role="menuitem"], [role="menuitemradio"]`)),r=document.activeElement,i=n.indexOf(r);e.key===`ArrowDown`?(e.preventDefault(),n[(i+1)%n.length]?.focus()):e.key===`ArrowUp`?(e.preventDefault(),n[(i-1+n.length)%n.length]?.focus()):e.key===`Home`?(e.preventDefault(),n[0]?.focus()):e.key===`End`&&(e.preventDefault(),n[n.length-1]?.focus())},[]);return(0,$.jsxs)(O,{children:[(0,$.jsx)(R,{asChild:!0,children:(0,$.jsxs)(`button`,{"data-testid":`all-threads-sort`,className:`border-border text-muted-foreground hover:bg-accent/50 hover:text-foreground inline-flex items-center gap-1 rounded-md border bg-transparent px-2 py-1 text-xs whitespace-nowrap transition-colors`,children:[a(`allThreads.sortLabel`),`:`,` `,a(e===`updated`?`allThreads.sortUpdated`:`allThreads.sortCreated`),n===`desc`?(0,$.jsx)(i,{className:`icon-xs`}):(0,$.jsx)(d,{className:`icon-xs`})]})}),(0,$.jsx)(J,{align:`start`,className:`w-auto min-w-[140px] p-1`,onKeyDown:s,onOpenAutoFocus:e=>{e.preventDefault(),(o.current?.querySelector(`[role="menuitemradio"], [role="menuitem"]`))?.focus()},children:(0,$.jsxs)(`div`,{ref:o,role:`menu`,children:[(0,$.jsx)(Xe,{field:`updated`,activeField:e,onSelect:()=>t(`updated`),label:a(`allThreads.sortUpdated`)}),(0,$.jsx)(Xe,{field:`created`,activeField:e,onSelect:()=>t(`created`),label:a(`allThreads.sortCreated`)}),(0,$.jsx)(`div`,{className:`bg-border my-1 h-px`}),(0,$.jsx)(`button`,{role:`menuitem`,tabIndex:-1,"data-testid":`all-threads-sort-direction`,onClick:()=>r(e=>e===`desc`?`asc`:`desc`),className:`hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground flex w-full items-center gap-2 rounded-sm px-2 py-1.5 text-left text-xs transition-colors focus:outline-hidden`,children:n===`desc`?(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(i,{className:`icon-xs`}),a(`allThreads.sortDesc`)]}):(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(d,{className:`icon-xs`}),a(`allThreads.sortAsc`)]})})]})})]})}function Xe({field:e,activeField:t,onSelect:n,label:r}){let i=e===t;return(0,$.jsxs)(`button`,{role:`menuitemradio`,"aria-checked":i,tabIndex:-1,onClick:n,className:w(`flex items-center gap-2 w-full px-2 py-1.5 text-xs rounded-sm transition-colors text-left`,`hover:bg-accent hover:text-accent-foreground`,`focus:bg-accent focus:text-accent-foreground focus:outline-hidden`),children:[(0,$.jsx)(`span`,{className:w(`flex h-3.5 w-3.5 items-center justify-center rounded-full border`,i?`bg-primary border-primary text-primary-foreground`:`border-muted-foreground/30`),children:i&&(0,$.jsx)(h,{className:`icon-2xs`})}),r]})}function Ze(){let{t:e}=v(),n=b(),r=C(),[i,a]=ee(),o=he(e=>e.allThreadsProjectId),s=M(),c=ne(),l=L(e=>e.threadTotalByProject),d=L(e=>e.loadMoreThreads),f=A(e=>e.projects),m=ie(e=>e.statusByBranch),h=i.get(`status`)?`list`:r.pathname===`/kanban`?`board`:`list`,[g,_]=(0,Q.useState)(()=>i.get(`project`)||null),[x,S]=(0,Q.useState)(!1),w=e=>{let t={},n=e?.project===void 0?g:e.project;n&&(t.project=n);let r=e?.search===void 0?N:e.search;r.trim()&&(t.search=r),(e?.cs===void 0?F:e.cs)&&(t.cs=`1`);let a=i.get(`status`);a&&(t.status=a);let o=i.get(`sort`);o&&(t.sort=o);let s=i.get(`dir`);s&&(t.dir=s);let c=i.get(`scratch`);return c&&(t.scratch=c),t};(0,Q.useEffect)(()=>{let e=i.get(`project`)||null,t=i.get(`status`);e!==g&&_(e);let n=i.get(`search`)??``;n!==N&&P(n);let r=i.get(`cs`)===`1`;if(r!==F&&te(r),t){let e=t.split(`,`).filter(Boolean);R(new Set(e))}let a=i.get(`scratch`)===`1`;ae(e=>{let t=e.has(`scratch`);return a&&!t?new Set([`scratch`]):!a&&e.size===1&&t?new Set:e});let o=i.get(`sort`);(o===`created`||o===`updated`)&&J(o);let s=i.get(`dir`);(s===`asc`||s===`desc`)&&se(s)},[i]);let T=g?f.find(e=>e.id===g):null,E=e=>{_(e),a(w({project:e}),{replace:!0})},D=(0,Q.useCallback)(e=>{ae(t=>{let n=new Set(t);n.has(e)?n.delete(e):n.add(e);let r=new URLSearchParams(i);return n.size===1&&n.has(`scratch`)?r.set(`scratch`,`1`):r.delete(`scratch`),a(r,{replace:!0}),n})},[i,a]),O=(0,Q.useRef)(null),j=(0,Q.useRef)(null),[N,P]=(0,Q.useState)(()=>i.get(`search`)||``),[F,te]=(0,Q.useState)(()=>i.get(`cs`)===`1`),[I,R]=(0,Q.useState)(()=>{let e=i.get(`status`);return e?new Set(e.split(`,`).filter(Boolean)):new Set}),[z,re]=(0,Q.useState)(new Set),[V,U]=(0,Q.useState)(new Set),[W,ae]=(0,Q.useState)(()=>i.get(`scratch`)===`1`?new Set([`scratch`]):new Set),[G,K]=(0,Q.useState)(!1),[q,J]=(0,Q.useState)(()=>{let e=i.get(`sort`);return e===`created`||e===`updated`?e:`updated`}),[oe,se]=(0,Q.useState)(()=>{let e=i.get(`dir`);return e===`asc`||e===`desc`?e:`desc`});(0,Q.useEffect)(()=>{O.current?.focus()},[]),(0,Q.useEffect)(()=>{let e=e=>{if(e.key!==`Escape`||e.defaultPrevented||N.trim())return;let t=L.getState(),r=t.activeThread;if(e.preventDefault(),r){n(H(`/projects/${r.projectId}/threads/${r.id}`));return}let i=t.selectedThreadId;if(i&&g){n(H(`/projects/${g}/threads/${i}`));return}if(g){n(H(`/projects/${g}`));return}n(H(`/`))};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[N,n,g]),(0,Q.useEffect)(()=>{if(!G&&h!==`board`)return;let e=g?[g]:f.map(e=>e.id);for(let t of e)L.getState().loadThreadsForProject(t,!0)},[G,h,g,f]);let[ce,le]=(0,Q.useState)(new Map),Y=(0,Q.useRef)(void 0),ue=(0,Q.useRef)(new Map);(0,Q.useEffect)(()=>{Y.current&&clearTimeout(Y.current);let e=N.trim();if(!e){le(new Map);return}let t=`${e}|${g||``}|${F?`1`:`0`}`,n=ue.current.get(t);if(n){le(n);return}return Y.current=setTimeout(()=>{let n=g||void 0;y.searchThreadContent(e,n,F).then(e=>{if(e.isOk()){let n=new Map,{threadIds:r,snippets:i}=e.value;for(let e of r)n.set(e,i[e]||``);if(ue.current.set(t,n),ue.current.size>50){let e=ue.current.keys().next().value;ue.current.delete(e)}le(n)}})},300),()=>{Y.current&&clearTimeout(Y.current)}},[N,g,F]);let de=(0,Q.useMemo)(()=>{let e={};for(let t of f)e[t.id]={name:t.name,path:t.path,color:t.color};return e},[f]),X=(0,Q.useMemo)(()=>{let e={};for(let t of f)e[t.id]=t.name;return e},[f]),fe=(0,Q.useMemo)(()=>{let e=[...Object.values(s).flat(),...c];return g?e.filter(e=>e.projectId===g):e},[s,g,c]),pe=W.size===1&&W.has(`scratch`),me=(0,Q.useMemo)(()=>pe?!1:(g?[g]:f.map(e=>e.id)).some(e=>(s[e]??[]).length<(l[e]??0)),[s,l,g,f,pe]),[ge,_e]=(0,Q.useState)(!1),ve=(0,Q.useCallback)(async()=>{_e(!0);try{let e=g?[g]:f.map(e=>e.id);await Promise.all(e.filter(e=>(s[e]??[]).length<(l[e]??0)).map(e=>d(e,G)))}finally{_e(!1)}},[g,f,s,l,d,G]),Z=(0,Q.useMemo)(()=>h===`board`||G?fe:fe.filter(e=>!e.archived),[fe,G,h]),ye=(0,Q.useMemo)(()=>{let e=Z;if(N.trim()){let t=F?e=>!!e&&e.includes(N):(e=>t=>!!t&&B(t).includes(e))(B(N));e=e.filter(e=>t(e.title)||t(e.branch)||t(e.status)||!g&&t(X[e.projectId])||ce.has(e.id))}return I.size>0&&(e=e.filter(e=>I.has(e.status))),z.size>0&&(e=e.filter(e=>{let t=m[k(e)];return t?z.has(t.state):!1})),V.size>0&&(e=e.filter(e=>V.has(e.mode))),W.size>0&&(e=e.filter(e=>W.has(e.isScratch?`scratch`:`normal`))),e=e.toSorted((e,t)=>{let n=q===`updated`?e.completedAt??e.createdAt:e.createdAt,r=q===`updated`?t.completedAt??t.createdAt:t.createdAt,i=new Date(n).getTime()-new Date(r).getTime();return oe===`desc`?-i:i}),e},[Z,N,F,I,z,V,W,m,g,X,q,oe,ce]),be=()=>{P(``),R(new Set),re(new Set),U(new Set),ae(new Set),K(!1),g&&_(null);let e=w({project:null,search:``,cs:!1});delete e.scratch,a(e,{replace:!0})},xe=e=>{P(e),a(w({search:e}),{replace:!0})},Ce=e=>{te(e),a(w({cs:e}),{replace:!0})},we=I.size>0||z.size>0||V.size>0||W.size>0||G||!!g,Te=(0,Q.useMemo)(()=>{let e={scratch:0,normal:0};for(let t of Z)e[t.isScratch?`scratch`:`normal`]++;return e},[Z]),Ee=(0,Q.useMemo)(()=>{let e={};for(let t of Z)e[t.status]=(e[t.status]||0)+1;return e},[Z]),De=(0,Q.useMemo)(()=>{let e={};for(let t of Z){let n=m[k(t)];n&&(e[n.state]=(e[n.state]||0)+1)}return e},[Z,m]);return o?(0,$.jsxs)(`div`,{className:`flex h-full min-w-0 flex-1 flex-col`,children:[(0,$.jsxs)(`div`,{className:`border-border flex items-center gap-3 border-b px-4 py-3`,children:[g&&(0,$.jsx)(Se,{onClick:()=>{n(H(`/projects/${g}`))},className:`text-muted-foreground hover:text-foreground`,tooltip:e(`common.back`),children:(0,$.jsx)(u,{className:`icon-base`})}),(0,$.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,$.jsxs)(`h2`,{className:`flex items-center gap-2 text-sm font-medium`,children:[h===`board`?(0,$.jsx)(p,{className:`icon-sm text-muted-foreground`}):(0,$.jsx)(t,{className:`icon-sm text-muted-foreground`}),pe?e(`sidebar.scratchTitle`,{defaultValue:`Quick Chats`}):e(g&&T?`allThreads.title`:`allThreads.globalTitle`)]}),(0,$.jsx)(`p`,{className:`text-muted-foreground text-sm`,children:pe?`${Z.length} ${e(`allThreads.threads`)}`:g&&T?`${T.name} · ${Z.length} ${e(`allThreads.threads`)}`:`${f.length} ${e(`allThreads.projects`)} · ${Z.length} ${e(`allThreads.threads`)}`})]})]}),(0,$.jsx)(Je,{searchInputRef:O,search:N,onSearchChange:xe,caseSensitive:F,onCaseSensitiveChange:Ce,searchKeyDown:e=>j.current?.(e),filteredCount:ye.length,totalCount:Z.length,searchPlaceholder:e(g?`allThreads.searchPlaceholder`:`allThreads.globalSearchPlaceholder`),projects:f,projectFilter:g,filteredProjectName:T?.name,projectFilterOpen:x,setProjectFilterOpen:S,onProjectFilterChange:E,statusFilter:I,setStatusFilter:R,gitFilter:z,setGitFilter:re,modeFilter:V,setModeFilter:U,typeFilter:W,onTypeToggle:D,typeCounts:Te,statusCounts:Ee,gitCounts:De,threadStatuses:[`running`,`waiting`,`completed`,`failed`,`stopped`,`pending`,`interrupted`],gitStates:[`dirty`,`unpushed`,`pushed`,`merged`,`clean`],sortField:q,setSortField:J,sortDir:oe,setSortDir:se,showArchived:G,setShowArchived:K,hasActiveFilters:we,onResetFilters:be}),(0,$.jsx)(`div`,{className:`flex min-h-0 flex-1 flex-col`,children:(0,$.jsx)(We,{viewMode:h,threads:ye,search:N,caseSensitive:F,contentMatches:ce,highlightThreadId:i.get(`highlight`)||void 0,projectFilter:g,projectInfoById:de,hasMoreServerThreads:me,loadingMore:ge,onLoadMore:ve,searchKeyDownRef:j})})]}):null}export{Ze as AllThreadsView};
1
+ import{a as e}from"./rolldown-runtime-Cyuzqnbw.js";import{B as t,Bn as n,D as r,Nr as i,Pr as a,Q as o,_r as s,b as c,bn as l,gr as u,kr as d,o as f,qn as p,w as m,yr as h,zr as g}from"./icons-sqwAEN28.js";import{o as _}from"./markdown-DBtwZWLP.js";import{t as v}from"./useTranslation-DAPPK3Hy.js";import{P as y,_t as b,dt as x,f as S,gt as C,lt as w,vt as ee}from"./index-DNxUSLe_.js";import{t as T}from"./button-B9Ypx1uQ.js";import{$ as E,$r as D,An as O,Bn as k,Dr as A,Fn as j,Ft as M,Gn as N,Gr as P,Jn as F,Jr as te,Kn as I,Lt as L,Mn as R,Mt as ne,Nn as z,Pn as B,Qt as re,Rr as V,Rt as H,Un as ie,Ur as U,Wn as W,Xr as ae,Z as G,Zn as K,et as q,jn as J,m as oe,mn as se,nt as ce,qr as le,rn as Y,rt as ue,sr as de,tn as X,tr as fe,tt as pe,vr as me,yr as he}from"./items-7qqySF-X.js";import{t as ge}from"./input-CJ3TsT2L.js";import{t as _e}from"./loading-state-yLj5fYb6.js";import{n as ve,r as Z,t as ye}from"./adapter-g71mvnZo.js";import{t as be}from"./use-active-thread-id-ZlJtsqq4.js";import{t as xe}from"./app-store-DKW9sVHv.js";import{t as Se}from"./tooltip-icon-button-8C1wJ-l9.js";import{c as Ce,n as we,r as Te,s as Ee,t as De}from"./element-yfBHMYal.js";import{t as Oe}from"./ThreadStatusPin-DhrEC0n-.js";import{t as ke}from"./ThreadPowerline-CSegubLW.js";import{n as Ae}from"./go-to-thread-DD0G5vFp.js";import{n as je,r as Me,t as Ne}from"./use-thread-creation-DSLV7F8I.js";var Q=e(g(),1),$=e(_(),1),Pe=64,Fe=5;function Ie({threads:e,search:t,caseSensitive:n,contentSnippets:r,emptyMessage:i,searchEmptyMessage:o,projectFilter:s,projectInfoById:c,hasMore:l,loadingMore:u,onEndReached:d,onSearchKeyDownRef:f,className:p}){let{t:m}=v(),h=be(),g=ie(e=>e.statusByBranch),_=(0,Q.useRef)(null),[y,b]=(0,Q.useState)(-1),S=we(),{handleSelectThread:C,handleArchiveThreadFromList:ee,handleRenameThread:T,handlePinThread:E,handleDeleteThreadFromList:D}=S,O=me({count:e.length,getScrollElement:()=>_.current,estimateSize:()=>Pe,getItemKey:t=>e[t]?.id??t,overscan:10});(0,Q.useEffect)(()=>{b(-1)},[t,e]);let A=(0,Q.useCallback)(async e=>{he.getState().setKanbanContext({projectId:s||void 0,search:t,caseSensitive:n,threadId:e.id,viewMode:`list`}),await C(e.projectId,e.id),requestAnimationFrame(()=>{document.querySelector(`[data-project-id="${e.projectId}"] [data-testid="thread-item-${e.id}"]`)?.scrollIntoView({block:`nearest`,behavior:`auto`})})},[n,C,s,t]),j=(0,Q.useCallback)(t=>{if(e.length!==0)if(t.key===`ArrowDown`){t.preventDefault();let n=y<e.length-1?y+1:0;b(n),O.scrollToIndex(n,{align:`auto`})}else if(t.key===`ArrowUp`){t.preventDefault();let n=y>0?y-1:e.length-1;b(n),O.scrollToIndex(n,{align:`auto`})}else t.key===`Enter`&&y>=0&&y<e.length&&(t.preventDefault(),A(e[y]))},[A,y,e,O]);(0,Q.useEffect)(()=>(f.current=j,()=>{f.current=null}),[f,j]);let M=O.getVirtualItems(),N=(0,Q.useMemo)(()=>M.map(t=>e[t.index]).filter(e=>!!e),[e,M]);return(0,Q.useEffect)(()=>{ie.getState().ensureStatusForThreads(N)},[N]),(0,Q.useEffect)(()=>{if(!l||u)return;let t=M[M.length-1];t&&t.index>=e.length-1-Fe&&d()},[M,l,u,d,e.length]),e.length===0?(0,$.jsx)(`div`,{className:w(`flex h-32 items-center justify-center text-xs text-muted-foreground`,p),children:t?o:i}):(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`div`,{className:w(`flex min-h-0 flex-1 flex-col`,p),children:(0,$.jsxs)(`div`,{ref:_,"data-testid":`all-threads-thread-list-scroll`,className:`border-border/50 min-h-0 flex-1 overflow-y-auto rounded-lg border p-2`,children:[(0,$.jsx)(`div`,{style:{height:`${O.getTotalSize()}px`,width:`100%`,position:`relative`},children:M.map(i=>{let o=e[i.index];if(!o)return null;let s=c[o.projectId],l=g[k(o)],u=x(o),d=o.mode===`worktree`&&!!u&&o.provider!==`external`,f=o.status===`running`,p=t?n?o.title.includes(t):B(o.title).includes(B(t)):!1,_=t&&!p?r.get(o.id):void 0;return(0,$.jsx)(`div`,{"data-index":i.index,"data-testid":`all-threads-thread-item-${o.id}`,ref:O.measureElement,onMouseMove:()=>b(i.index),className:`absolute top-0 left-0 w-full px-0.5 pb-1`,style:{transform:`translateY(${i.start}px)`},children:(0,$.jsx)(Te,{thread:o,projectPath:s?.path??``,isSelected:h===o.id||y===i.index,subtitle:V(o)?void 0:s?.name??m(`allThreads.unknownProject`,{defaultValue:`Unknown project`}),projectColor:s?.color,timeValue:Y(o.completedAt??o.createdAt,m),search:t||void 0,contentSnippet:_,metadataBadge:o.archived?(0,$.jsxs)(`span`,{className:`bg-muted text-status-warning/80 inline-flex shrink-0 items-center gap-0.5 rounded px-1 py-px text-[10px] leading-tight font-medium`,children:[(0,$.jsx)(a,{className:`icon-2xs`}),m(`allThreads.archived`)]}):void 0,gitStatus:l,href:Ae(o),onSelect:()=>void A(o),onRename:e=>T(o.projectId,o.id,e),onPin:()=>E(o.projectId,o.id,!o.pinned),onArchive:f||o.archived?void 0:()=>ee(o.id,o.projectId,o.title,d),onDelete:()=>D(o.id,o.projectId,o.title,d)})},i.key)})}),u&&(0,$.jsx)(_e,{fill:!1,layout:`inline`,size:`compact`,className:`py-3`,testId:`all-threads-thread-list-loading-more`,label:m(`common.loading`)})]})}),(0,$.jsx)(Le,{actions:S})]})}function Le({actions:e}){return(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(Ce,{archiveConfirm:e.archiveConfirm,setArchiveConfirm:e.setArchiveConfirm,handleArchiveConfirm:e.handleArchiveConfirm,deleteThreadConfirm:e.deleteThreadConfirm,setDeleteThreadConfirm:e.setDeleteThreadConfirm,handleDeleteThreadConfirm:e.handleDeleteThreadConfirm,renameProjectState:e.renameProjectState,setRenameProjectState:e.setRenameProjectState,handleRenameProjectConfirm:e.handleRenameProjectConfirm,deleteProjectConfirm:e.deleteProjectConfirm,setDeleteProjectConfirm:e.setDeleteProjectConfirm,handleDeleteProjectConfirm:e.handleDeleteProjectConfirm,issuesProjectId:e.issuesProjectId,setIssuesProjectId:e.setIssuesProjectId,actionLoading:e.actionLoading}),e.branchSwitchDialog]})}function Re({open:e,onClose:t,onSubmit:n,loading:r=!1,projectId:i}){let{t:a}=v();return(0,$.jsx)(P,{open:e,onOpenChange:e=>{e||t()},children:(0,$.jsxs)(le,{className:`gap-0 p-0 sm:max-w-3xl`,children:[(0,$.jsxs)(ae,{className:`px-4 pt-4 pb-2`,children:[(0,$.jsx)(D,{className:`text-sm`,children:a(`kanban.addThread`,`Add new thread`)}),(0,$.jsx)(te,{className:`sr-only`,children:a(`thread.describeTask`,`Describe the task for the agent`)})]}),(0,$.jsx)(`div`,{className:`px-4 pb-4`,children:(0,$.jsx)(Me,{onSubmit:async(e,r,i)=>await n(e,r,i)===!1?!1:(t(),!0),loading:r,isNewThread:!0,projectId:i,newThreadContextBar:(0,$.jsx)(je,{projectId:i})},i)})]})})}var ze=[`backlog`,`planning`,`in_progress`,`review`,`done`,`archived`],Be=(0,Q.memo)(function({thread:e,projectInfo:t,onDelete:i,onArchive:o,search:s,caseSensitive:u,ghost:d,contentSnippet:p,projectId:h,highlighted:g,stage:_,gitStatus:x}){let{t:S}=v(),C=b(),ee=he(e=>e.setKanbanContext),E=L(e=>e.pinThread),D=(0,Q.useRef)(null),[O,k]=(0,Q.useState)(!1);(0,Q.useEffect)(()=>{g&&D.current&&D.current.scrollIntoView({block:`center`,behavior:`instant`})},[g]),(0,Q.useEffect)(()=>{let t=D.current;if(t)return ye({element:t,getInitialData:()=>({type:`kanban-card`,threadId:e.id,sourceStage:e.archived?`archived`:e.stage||`backlog`,projectId:e.projectId}),onDragStart:()=>k(!0),onDrop:()=>k(!1)})},[e.id,e.stage,e.archived,e.projectId]);let A=e.status===`running`,j=A||e.status===`setting_up`,[M,P]=(0,Q.useState)(!1),te=(0,Q.useCallback)(e=>P(e),[]);return(0,$.jsxs)(`div`,{ref:D,"data-testid":`kanban-card-${e.id}`,className:w(`group/card flex items-stretch rounded-md border bg-card cursor-pointer transition-[opacity,box-shadow] duration-300`,O&&`opacity-40`,d&&!O&&`opacity-50 hover:opacity-80`,g&&`ring-2 ring-ring shadow-md`),onClick:()=>{O||(0,Q.startTransition)(()=>{ee({projectId:h,search:s,caseSensitive:u,threadId:e.id}),C(H(`/projects/${e.projectId}/threads/${e.id}`))})},children:[(0,$.jsxs)(`div`,{className:`min-w-0 flex-1 px-3.5 py-3`,children:[(0,$.jsxs)(`div`,{className:`mb-2 flex min-w-0 items-start gap-2`,children:[(0,$.jsx)(Oe,{thread:e,onPin:t=>E(e.id,e.projectId,t),hoverGroup:`card`,className:`mt-0.5`}),(0,$.jsx)(oe,{title:e.title,search:s||``,multiline:!0,containerClassName:`flex-1`,className:`text-muted-foreground group-hover/card:text-foreground line-clamp-6 text-sm leading-relaxed font-medium transition-colors`,stopBadgePropagation:!0,badgeTestId:`kanban-view-card-attachments-${e.id}`})]}),(0,$.jsx)(ke,{thread:e,projectName:t?.name,projectColor:t?.color,gitStatus:x,diffStatsSize:`xxs`,className:`mb-2`,"data-testid":`kanban-card-powerline-${e.id}`}),p&&s&&!B(e.title).includes(B(s))&&(0,$.jsx)(z,{text:p,query:s,className:`text-muted-foreground mb-1 line-clamp-2 block text-[11px] italic`})]}),(0,$.jsx)(`div`,{className:`flex shrink-0 items-center px-1.5`,children:(0,$.jsxs)(`div`,{className:`grid min-w-10 place-items-center justify-items-center`,children:[(0,$.jsx)(`span`,{className:w(`col-start-1 row-start-1 text-xs text-muted-foreground leading-4 h-4 group-hover/card:opacity-0 group-hover/card:pointer-events-none`,M&&`opacity-0 pointer-events-none`),children:Y(e.completedAt||e.createdAt,S)}),(0,$.jsx)(`div`,{className:w(`col-start-1 row-start-1 flex items-center opacity-0 group-hover/card:opacity-100`,M&&`opacity-100!`),children:(0,$.jsxs)(N,{onOpenChange:te,children:[(0,$.jsx)(fe,{asChild:!0,children:(0,$.jsx)(T,{variant:`ghost`,size:`icon-xs`,tabIndex:-1,"data-testid":`kanban-card-more-${e.id}`,onClick:e=>e.stopPropagation(),className:`text-muted-foreground hover:text-foreground`,children:(0,$.jsx)(n,{className:`icon-sm`})})}),(0,$.jsxs)(I,{align:`end`,side:`bottom`,children:[(0,$.jsxs)(F,{onClick:async t=>{t.stopPropagation();let n=await y.openDirectory({threadId:e.id});n.isErr()&&W(n.error)},children:[(0,$.jsx)(l,{className:`icon-sm`}),S(`sidebar.openDirectory`)]}),(0,$.jsxs)(F,{onClick:t=>{t.stopPropagation(),Ee({thread:e})},children:[(0,$.jsx)(m,{className:`icon-sm`}),S(`sidebar.openTerminal`)]}),A&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(K,{}),(0,$.jsxs)(F,{onClick:async t=>{t.stopPropagation();let n=await y.stopThread(e.id);n.isErr()&&console.error(`Failed to stop thread:`,n.error)},className:`text-status-error focus:text-status-error`,children:[(0,$.jsx)(r,{className:`icon-sm`}),S(`common.stop`)]})]}),o&&!j&&(0,$.jsxs)(F,{onClick:t=>{t.stopPropagation(),o(e)},children:[(0,$.jsx)(a,{className:`icon-sm`}),S(`sidebar.archive`)]}),(0,$.jsxs)(F,{"data-testid":`kanban-card-toggle-orchestrator-${e.id}`,onClick:async t=>{t.stopPropagation();let n=!e.orchestratorManaged,r=await y.setOrchestratorManaged(e.id,n);r.isErr()&&W(r.error)},children:[(0,$.jsx)(f,{className:`icon-sm`}),e.orchestratorManaged?S(`sidebar.disableOrchestrator`,`Disable orchestrator`):S(`sidebar.enableOrchestrator`,`Enable orchestrator`)]}),(0,$.jsx)(K,{}),(0,$.jsxs)(F,{"data-testid":`kanban-card-delete-${e.id}`,onClick:t=>{t.stopPropagation(),i(e)},className:`text-status-error focus:text-status-error`,children:[(0,$.jsx)(c,{className:`icon-sm`}),S(`common.delete`)]})]})]})})]})})]})});function Ve({projectId:e,projects:n,onSelect:r}){let{t:i}=v(),[a,s]=(0,Q.useState)(!1),[c,l]=(0,Q.useState)(``),u=(0,Q.useRef)(null);if(e)return(0,$.jsx)(`button`,{"data-testid":`kanban-add-thread`,className:`text-muted-foreground hover:bg-accent hover:text-foreground ml-auto rounded p-0.5 transition-colors`,onClick:()=>r(e),title:i(`kanban.addThread`),children:(0,$.jsx)(o,{className:`icon-base`})});let d=c?n.filter(e=>e.name.toLowerCase().includes(c.toLowerCase())):n;return(0,$.jsxs)(O,{open:a,onOpenChange:e=>{s(e),e||l(``)},children:[(0,$.jsx)(R,{asChild:!0,children:(0,$.jsx)(`button`,{"data-testid":`kanban-add-thread`,className:`text-muted-foreground hover:bg-accent hover:text-foreground ml-auto rounded p-0.5 transition-colors`,title:i(`kanban.addThread`),children:(0,$.jsx)(o,{className:`icon-base`})})}),(0,$.jsxs)(J,{align:`start`,className:`w-64 p-0`,children:[(0,$.jsxs)(`div`,{className:`border-border/50 flex items-center gap-2 border-b px-3 py-2.5`,children:[(0,$.jsx)(t,{className:`icon-base text-muted-foreground shrink-0`}),(0,$.jsx)(ge,{ref:u,value:c,onChange:e=>l(e.target.value),placeholder:i(`kanban.searchProject`),className:`placeholder:text-muted-foreground h-auto flex-1 rounded-none border-0 bg-transparent px-0 py-0 text-sm shadow-none focus-visible:ring-0`,autoFocus:!0})]}),(0,$.jsx)(`div`,{className:`max-h-56 overflow-y-auto py-1`,children:d.length===0?(0,$.jsx)(`div`,{className:`text-muted-foreground py-3 text-center text-sm`,children:i(`commandPalette.noResults`)}):d.map(e=>(0,$.jsxs)(`button`,{className:`hover:bg-accent flex w-full items-center gap-2 px-3 py-2 text-left text-sm transition-colors`,onClick:()=>{s(!1),l(``),r(e.id)},children:[(0,$.jsx)(`span`,{className:`size-2.5 shrink-0 rounded-full`,style:{backgroundColor:e.color||j(e.name)}}),(0,$.jsx)(`span`,{className:`truncate`,children:e.name})]},e.id))})]})]})}var He=(0,Q.memo)(function({stage:e,threads:t,projectInfoById:n,onDelete:r,onArchive:i,projectId:a,projects:o,onAddThread:s,search:c,caseSensitive:l,contentSnippets:u,highlightThreadId:d,statusByThread:f}){let{t:p}=v(),m=(0,Q.useRef)(null),h=(0,Q.useRef)(null),[g,_]=(0,Q.useState)(!1),[y,b]=(0,Q.useState)(20);(0,Q.useEffect)(()=>{let t=m.current;if(t)return ve({element:t,getData:()=>({type:`kanban-column`,stage:e}),canDrop:({source:e})=>e.data.type===`kanban-card`,onDragEnter:()=>_(!0),onDragLeave:()=>_(!1),onDrop:()=>_(!1)})},[e]),(0,Q.useEffect)(()=>{let e=h.current;if(e)return De({element:e})},[]),(0,Q.useEffect)(()=>{b(20)},[c,a]),(0,Q.useEffect)(()=>{if(!d)return;let e=t.findIndex(e=>e.id===d);e>=y&&b(e+1)},[d,t,y]);let x=t.slice(0,y),S=t.length>y;return(0,$.jsxs)(`div`,{ref:m,className:w(`flex flex-col w-92 min-w-92 shrink-0 rounded-lg bg-secondary/30 transition-colors`,g&&`ring-2 ring-ring bg-secondary/50`),children:[(0,$.jsxs)(`div`,{className:`border-border/50 flex items-center gap-2 border-b px-3 py-2.5`,children:[(0,$.jsx)(`span`,{className:`text-sm font-medium`,children:p(X[e].labelKey)}),(0,$.jsxs)(`span`,{className:`text-muted-foreground text-xs`,children:[`(`,t.length,`)`]}),o.length>0&&e!==`review`&&e!==`done`&&e!==`archived`&&(0,$.jsx)(Ve,{projectId:a,projects:o,onSelect:t=>s(t,e)})]}),(0,$.jsx)(`div`,{ref:h,className:`min-h-[200px] flex-1 space-y-2 overflow-y-auto p-2`,children:t.length===0?(0,$.jsx)(`div`,{className:`text-muted-foreground py-8 text-center text-xs`,children:p(`kanban.emptyColumn`)}):(0,$.jsxs)($.Fragment,{children:[x.map(t=>(0,$.jsx)(Be,{thread:t,projectInfo:n?.[t.projectId],onDelete:r,onArchive:e===`archived`?void 0:i,search:c,caseSensitive:l,ghost:e===`archived`,contentSnippet:u?.get(t.id),projectId:a,highlighted:t.id===d,stage:e,gitStatus:f[t.id]},t.id)),S&&(0,$.jsx)(`button`,{"data-testid":`kanban-load-more-${e}`,onClick:()=>b(e=>e+20),className:`text-muted-foreground hover:bg-accent hover:text-foreground w-full rounded-md py-2 text-xs transition-colors`,children:p(`kanban.loadMore`,{count:Math.min(20,t.length-y)})})]})})]})});function Ue({threads:e,projectId:t,search:n,caseSensitive:r,contentSnippets:i,highlightThreadId:a}){let{t:o}=v(),s=b(),c=L(e=>e.updateThreadStage),l=L(e=>e.archiveThread),u=L(e=>e.unarchiveThread),d=L(e=>e.deleteThread),f=L(e=>e.selectedThreadId),p=xe(e=>e.projects),m=xe(e=>e.loadThreadsForProject),h=S(e=>e.toolPermissions),[g,_]=(0,Q.useState)(null),[y,C]=(0,Q.useState)(!1),[w,ee]=(0,Q.useState)(void 0),[T,E]=(0,Q.useState)(`backlog`),[D,O]=(0,Q.useState)(!1),[A,j]=(0,Q.useState)(null),M=ie(e=>e.statusByBranch),N=ie(e=>e.threadToBranchKey),P=(0,Q.useMemo)(()=>{let t={};for(let n of e){let e=N[n.id]||k(n);M[e]&&(t[n.id]=M[e])}return t},[e,M,N]),[F,te]=(0,Q.useState)(a);(0,Q.useEffect)(()=>{if(!F)return;let e=setTimeout(()=>te(void 0),3e3);return()=>clearTimeout(e)},[F]);let I=(0,Q.useCallback)((e,t)=>{ee(e),E(t),C(!0)},[]),R=(0,Q.useCallback)(e=>{_({threadId:e.id,projectId:e.projectId,title:e.title,isWorktree:e.mode===`worktree`&&!!x(e)})},[]),ne=(0,Q.useCallback)(e=>{l(e.id,e.projectId),U.success(o(`toast.threadArchived`,{title:e.title}))},[l,o]),z=(0,Q.useCallback)(async()=>{if(!g)return;O(!0);let{threadId:e,projectId:t,title:n}=g,r=f===e;await d(e,t),O(!1),_(null),U.success(o(`toast.threadDeleted`,{title:n})),r&&s(H(`/projects/${t}`))},[g,f,d,s,o]),B=(0,Q.useCallback)(()=>{if(!A)return;let{threadId:n,title:r,sourceStage:i,newStage:a}=A,s=t||e.find(e=>e.id===n)?.projectId;if(s){c(n,s,a);let e=o(X[i].labelKey),t=o(X[a].labelKey);U.success(o(`toast.threadMoved`,{title:r,from:e,to:t}))}j(null)},[A,t,e,c,o]),re=p.find(e=>e.id===w)?.defaultMode||`local`,{creating:V,createThread:W}=Ne({projectId:w??null,defaultThreadMode:re,toolPermissions:h,forceIdle:T===`backlog`||T===`planning`,stage:T===`planning`?`planning`:void 0,onSuccess:async(e,t,n)=>{w&&await m(w),U.success(o(`toast.threadCreated`,{title:n?.title??``}))}}),ae=(0,Q.useMemo)(()=>{let e={};for(let t of p)e[t.id]={name:t.name,color:t.color,path:t.path};return e},[p]),G=(0,Q.useMemo)(()=>{let t={backlog:[],planning:[],in_progress:[],review:[],done:[],archived:[]};for(let n of e){let e=n.archived?`archived`:n.stage||`backlog`;t[e]&&t[e].push(n)}for(let e of ze)t[e].sort((e,t)=>{if(e.pinned!==t.pinned)return e.pinned?-1:1;let n=e.completedAt||e.createdAt,r=t.completedAt||t.createdAt;return new Date(r).getTime()-new Date(n).getTime()});return t},[e]),K=(0,Q.useCallback)(({source:n,location:r})=>{let i=r.current.dropTargets;if(!i.length||n.data.type!==`kanban-card`)return;let a=n.data.threadId,s=n.data.sourceStage,d=n.data.projectId,f=i.find(e=>e.data.type===`kanban-column`);if(!f)return;let p=f.data.stage;if(p===s)return;let m=t||d;if(p===`done`){let t=P[a],n=e.find(e=>e.id===a);if(n?.branch&&t&&t.state===`dirty`){j({threadId:a,title:n.title,sourceStage:s,newStage:p,gitState:t.state});return}}p===`archived`?l(a,m):s===`archived`?u(a,m,p):c(a,m,p);let h=e.find(e=>e.id===a)?.title||a,g=o(X[s].labelKey),_=o(X[p].labelKey);U.success(o(`toast.threadMoved`,{title:h,from:g,to:_}))},[t,c,l,u,P,e,o]);(0,Q.useEffect)(()=>Z({onDrop:K}),[K]);let q=(0,Q.useRef)(null);return(0,Q.useEffect)(()=>{let e=q.current;if(e)return De({element:e})},[]),(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`div`,{ref:q,className:`flex h-full gap-3 overflow-x-auto px-4 py-2`,children:ze.map(e=>(0,$.jsx)(He,{stage:e,threads:G[e],projectInfoById:ae,onDelete:R,onArchive:ne,projectId:t,projects:p,onAddThread:I,search:n,caseSensitive:r,contentSnippets:i,highlightThreadId:F,statusByThread:P},e))}),(0,$.jsx)(de,{open:!!g,onOpenChange:e=>{e||_(null)},title:o(`dialog.deleteThread`),description:o(`dialog.deleteThreadDesc`,{title:g?.title&&g.title.length>80?g.title.slice(0,80)+`…`:g?.title}),warning:g?.isWorktree?o(`dialog.worktreeWarning`):void 0,cancelLabel:o(`common.cancel`),confirmLabel:o(`common.delete`),loading:D,onCancel:()=>_(null),onConfirm:z}),(0,$.jsx)(de,{open:!!A,onOpenChange:e=>{e||j(null)},title:o(`dialog.${A?.gitState===`unpushed`?`unpushedChanges`:A?.gitState===`dirty`?`dirtyChanges`:`unmergedChanges`}`),description:o(`dialog.${A?.gitState===`unpushed`?`unpushedChangesDesc`:A?.gitState===`dirty`?`dirtyChangesDesc`:`unmergedChangesDesc`}`,{title:A?.title&&A.title.length>80?A.title.slice(0,80)+`…`:A?.title}),variant:`default`,cancelLabel:o(`common.cancel`),confirmLabel:o(`common.continue`),onCancel:()=>j(null),onConfirm:B}),(0,$.jsx)(Re,{open:y,onClose:()=>C(!1),onSubmit:W,loading:V,projectId:w})]})}function We({viewMode:e,threads:t,search:n,caseSensitive:r,contentMatches:i,highlightThreadId:a,projectFilter:o,projectInfoById:s,hasMoreServerThreads:c,loadingMore:l,onLoadMore:u,searchKeyDownRef:d}){let{t:f}=v();return e===`board`?(0,$.jsx)(`div`,{className:`min-h-0 flex-1`,children:(0,$.jsx)(Ue,{threads:t,projectId:o||void 0,search:n,caseSensitive:r,contentSnippets:i,highlightThreadId:a})}):(0,$.jsx)(`div`,{className:`flex min-h-0 flex-1 flex-col px-4 py-3`,children:(0,$.jsx)(Ie,{threads:t,search:n,caseSensitive:r,contentSnippets:i,emptyMessage:f(`allThreads.noThreads`),searchEmptyMessage:f(`allThreads.noMatch`),projectFilter:o,projectInfoById:s,hasMore:c,loadingMore:l,onEndReached:u,onSearchKeyDownRef:d})})}function Ge({label:e,options:t,selected:n,onToggle:r,counts:i,testId:a}){let o=n.size,c=(0,Q.useRef)(null),l=o===0?e:o===1?t.find(e=>n.has(e.value))?.label??e:`${e} (${o})`,u=(0,Q.useCallback)(e=>{let t=c.current;if(!t)return;let n=Array.from(t.querySelectorAll(`[role="menuitemcheckbox"]`)),r=document.activeElement,i=n.indexOf(r);e.key===`ArrowDown`?(e.preventDefault(),n[(i+1)%n.length]?.focus()):e.key===`ArrowUp`?(e.preventDefault(),n[(i-1+n.length)%n.length]?.focus()):e.key===`Home`?(e.preventDefault(),n[0]?.focus()):e.key===`End`&&(e.preventDefault(),n[n.length-1]?.focus())},[]);return(0,$.jsxs)(O,{children:[(0,$.jsx)(R,{asChild:!0,children:(0,$.jsxs)(`button`,{"data-testid":a,className:w(`inline-flex items-center gap-1 px-2 py-1 text-xs rounded-md border transition-colors whitespace-nowrap`,o>0?`bg-accent text-accent-foreground border-accent-foreground/20`:`bg-transparent text-muted-foreground border-border hover:bg-accent/50 hover:text-foreground`),children:[l,(0,$.jsx)(s,{className:`icon-xs opacity-50`})]})}),(0,$.jsx)(J,{align:`start`,className:`w-auto min-w-[160px] p-1`,onKeyDown:u,onOpenAutoFocus:e=>{e.preventDefault(),(c.current?.querySelector(`[role="menuitemcheckbox"]`))?.focus()},children:(0,$.jsx)(`div`,{ref:c,role:`menu`,children:t.map(e=>{let t=n.has(e.value),a=i?.[e.value];return(0,$.jsxs)(`button`,{role:`menuitemcheckbox`,"aria-checked":t,tabIndex:-1,onClick:()=>r(e.value),className:w(`flex items-center gap-2 w-full px-2 py-1.5 text-xs rounded-sm transition-colors text-left`,`hover:bg-accent hover:text-accent-foreground`,`focus:bg-accent focus:text-accent-foreground focus:outline-hidden`,t&&`text-accent-foreground`),children:[(0,$.jsx)(`span`,{className:w(`flex h-3.5 w-3.5 items-center justify-center rounded-sm border`,t?`bg-primary border-primary text-primary-foreground`:`border-muted-foreground/30`),children:t&&(0,$.jsx)(h,{className:`icon-2xs`})}),(0,$.jsx)(`span`,{className:`flex-1`,children:e.label}),a!=null&&a>0&&(0,$.jsx)(`span`,{className:`text-muted-foreground tabular-nums`,children:a})]},e.value)})})})]})}function Ke({open:e,onOpenChange:t,projects:n,projectFilter:r,filteredProjectName:i,onChange:a}){let{t:o}=v();return(0,$.jsxs)(O,{open:e,onOpenChange:t,children:[(0,$.jsx)(R,{asChild:!0,children:(0,$.jsxs)(`button`,{"data-testid":`all-threads-project-filter`,className:w(`inline-flex items-center gap-1 px-2 py-1 text-xs rounded-md border transition-colors whitespace-nowrap`,r?`bg-accent text-accent-foreground border-accent-foreground/20`:`bg-transparent text-muted-foreground border-border hover:bg-accent/50 hover:text-foreground`),children:[r&&i?i:o(`allThreads.filterProject`),(0,$.jsx)(s,{className:`icon-xs opacity-50`})]})}),(0,$.jsx)(J,{align:`start`,className:`w-[240px] p-0`,children:(0,$.jsxs)(G,{children:[(0,$.jsx)(pe,{placeholder:o(`kanban.searchProject`),className:`h-9 text-xs`,"data-testid":`all-threads-project-filter-search`}),(0,$.jsxs)(ue,{children:[(0,$.jsx)(E,{children:o(`commandPalette.noResults`)}),(0,$.jsxs)(q,{children:[(0,$.jsxs)(ce,{value:o(`allThreads.allProjects`),onSelect:()=>{a(null),t(!1)},className:`text-xs`,children:[(0,$.jsx)(`span`,{className:w(`flex h-3.5 w-3.5 items-center justify-center rounded-full border`,r?`border-muted-foreground/30`:`bg-primary border-primary text-primary-foreground`),children:!r&&(0,$.jsx)(h,{className:`icon-2xs`})}),(0,$.jsx)(`span`,{className:`flex-1`,children:o(`allThreads.allProjects`)})]}),n.map(e=>{let n=r===e.id;return(0,$.jsxs)(ce,{value:`${e.name} ${e.path??``}`,onSelect:()=>{a(e.id),t(!1)},className:`text-xs`,children:[(0,$.jsx)(`span`,{className:w(`flex h-3.5 w-3.5 items-center justify-center rounded-full border`,n?`bg-primary border-primary text-primary-foreground`:`border-muted-foreground/30`),children:n&&(0,$.jsx)(h,{className:`icon-2xs`})}),(0,$.jsx)(`span`,{className:`flex-1 truncate`,children:e.name})]},e.id)})]})]})]})})]})}var qe=e=>t=>{e(e=>{let n=new Set(e);return n.has(t)?n.delete(t):n.add(t),n})};function Je(e){let{t}=v(),n=re(t),{searchInputRef:r,search:i,onSearchChange:o,caseSensitive:s,onCaseSensitiveChange:c,searchKeyDown:l,filteredCount:u,totalCount:d,searchPlaceholder:f,projects:p,projectFilter:m,filteredProjectName:h,projectFilterOpen:g,setProjectFilterOpen:_,onProjectFilterChange:y,statusFilter:b,setStatusFilter:x,gitFilter:S,setGitFilter:C,modeFilter:ee,setModeFilter:T,typeFilter:E,onTypeToggle:D,typeCounts:O,statusCounts:k,gitCounts:A,threadStatuses:j,gitStates:M,sortField:N,setSortField:P,sortDir:F,setSortDir:te,showArchived:I,setShowArchived:L,hasActiveFilters:R,onResetFilters:ne}=e;return(0,$.jsxs)(`div`,{className:`border-border/50 flex items-center gap-2 border-b px-4 py-2`,children:[(0,$.jsx)(se,{inputRef:r,query:i,onQueryChange:o,totalMatches:u,resultLabel:i.trim()?`${u}/${d}`:``,caseSensitive:s,onCaseSensitiveChange:c,onInputKeyDown:l,onClose:i?()=>o(``):void 0,autoFocus:!1,placeholder:f,testIdPrefix:`all-threads-search`,className:`border-input h-7 w-72 shrink-0 rounded-md border bg-transparent px-2`}),(0,$.jsx)(`div`,{className:`bg-border h-4 w-px`}),(0,$.jsx)(Ke,{open:g,onOpenChange:_,projects:p,projectFilter:m,filteredProjectName:h,onChange:y}),(0,$.jsx)(Ge,{testId:`all-threads-status-filter`,label:t(`allThreads.filterStatus`),options:j.filter(e=>(k[e]||0)>0).map(e=>({value:e,label:n[e]})),selected:b,onToggle:qe(x),counts:k}),(0,$.jsx)(Ge,{testId:`all-threads-git-filter`,label:`Git`,options:M.filter(e=>(A[e]||0)>0).map(e=>({value:e,label:t(`gitStatus.${e}`)})),selected:S,onToggle:qe(C),counts:A}),(0,$.jsx)(Ge,{label:t(`allThreads.filterMode`),options:[{value:`local`,label:t(`thread.mode.local`)},{value:`worktree`,label:t(`thread.mode.worktree`)}],selected:ee,onToggle:qe(T)}),(0,$.jsx)(Ge,{testId:`all-threads-type-filter`,label:t(`allThreads.filterType`,{defaultValue:`Type`}),options:[{value:`scratch`,label:t(`sidebar.scratchTitle`,{defaultValue:`Quick Chats`})},{value:`normal`,label:t(`allThreads.typeNormal`,{defaultValue:`Project`})}],selected:E,onToggle:D,counts:O}),(0,$.jsx)(`div`,{className:`bg-border h-4 w-px`}),(0,$.jsx)(Ye,{sortField:N,setSortField:P,sortDir:F,setSortDir:te}),(0,$.jsxs)(`button`,{"data-testid":`all-threads-show-archived`,onClick:()=>L(!I),className:w(`inline-flex items-center gap-1 px-2 py-1 text-xs rounded-md border transition-colors whitespace-nowrap`,I?`bg-status-warning/10 border-status-warning/20 text-status-warning/80`:`bg-transparent text-muted-foreground border-border hover:bg-accent/50 hover:text-foreground`),children:[(0,$.jsx)(a,{className:`icon-xs`}),t(`allThreads.showArchived`)]}),R&&(0,$.jsx)(`button`,{"data-testid":`all-threads-clear-filters`,onClick:ne,className:`text-muted-foreground hover:text-foreground px-2 py-1 text-xs whitespace-nowrap transition-colors`,children:t(`allThreads.clearFilters`)})]})}function Ye({sortField:e,setSortField:t,sortDir:n,setSortDir:r}){let{t:a}=v(),o=(0,Q.useRef)(null),s=(0,Q.useCallback)(e=>{let t=o.current;if(!t)return;let n=Array.from(t.querySelectorAll(`[role="menuitem"], [role="menuitemradio"]`)),r=document.activeElement,i=n.indexOf(r);e.key===`ArrowDown`?(e.preventDefault(),n[(i+1)%n.length]?.focus()):e.key===`ArrowUp`?(e.preventDefault(),n[(i-1+n.length)%n.length]?.focus()):e.key===`Home`?(e.preventDefault(),n[0]?.focus()):e.key===`End`&&(e.preventDefault(),n[n.length-1]?.focus())},[]);return(0,$.jsxs)(O,{children:[(0,$.jsx)(R,{asChild:!0,children:(0,$.jsxs)(`button`,{"data-testid":`all-threads-sort`,className:`border-border text-muted-foreground hover:bg-accent/50 hover:text-foreground inline-flex items-center gap-1 rounded-md border bg-transparent px-2 py-1 text-xs whitespace-nowrap transition-colors`,children:[a(`allThreads.sortLabel`),`:`,` `,a(e===`updated`?`allThreads.sortUpdated`:`allThreads.sortCreated`),n===`desc`?(0,$.jsx)(i,{className:`icon-xs`}):(0,$.jsx)(d,{className:`icon-xs`})]})}),(0,$.jsx)(J,{align:`start`,className:`w-auto min-w-[140px] p-1`,onKeyDown:s,onOpenAutoFocus:e=>{e.preventDefault(),(o.current?.querySelector(`[role="menuitemradio"], [role="menuitem"]`))?.focus()},children:(0,$.jsxs)(`div`,{ref:o,role:`menu`,children:[(0,$.jsx)(Xe,{field:`updated`,activeField:e,onSelect:()=>t(`updated`),label:a(`allThreads.sortUpdated`)}),(0,$.jsx)(Xe,{field:`created`,activeField:e,onSelect:()=>t(`created`),label:a(`allThreads.sortCreated`)}),(0,$.jsx)(`div`,{className:`bg-border my-1 h-px`}),(0,$.jsx)(`button`,{role:`menuitem`,tabIndex:-1,"data-testid":`all-threads-sort-direction`,onClick:()=>r(e=>e===`desc`?`asc`:`desc`),className:`hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground flex w-full items-center gap-2 rounded-sm px-2 py-1.5 text-left text-xs transition-colors focus:outline-hidden`,children:n===`desc`?(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(i,{className:`icon-xs`}),a(`allThreads.sortDesc`)]}):(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(d,{className:`icon-xs`}),a(`allThreads.sortAsc`)]})})]})})]})}function Xe({field:e,activeField:t,onSelect:n,label:r}){let i=e===t;return(0,$.jsxs)(`button`,{role:`menuitemradio`,"aria-checked":i,tabIndex:-1,onClick:n,className:w(`flex items-center gap-2 w-full px-2 py-1.5 text-xs rounded-sm transition-colors text-left`,`hover:bg-accent hover:text-accent-foreground`,`focus:bg-accent focus:text-accent-foreground focus:outline-hidden`),children:[(0,$.jsx)(`span`,{className:w(`flex h-3.5 w-3.5 items-center justify-center rounded-full border`,i?`bg-primary border-primary text-primary-foreground`:`border-muted-foreground/30`),children:i&&(0,$.jsx)(h,{className:`icon-2xs`})}),r]})}function Ze(){let{t:e}=v(),n=b(),r=C(),[i,a]=ee(),o=he(e=>e.allThreadsProjectId),s=M(),c=ne(),l=L(e=>e.threadTotalByProject),d=L(e=>e.loadMoreThreads),f=A(e=>e.projects),m=ie(e=>e.statusByBranch),h=i.get(`status`)?`list`:r.pathname===`/kanban`?`board`:`list`,[g,_]=(0,Q.useState)(()=>i.get(`project`)||null),[x,S]=(0,Q.useState)(!1),w=e=>{let t={},n=e?.project===void 0?g:e.project;n&&(t.project=n);let r=e?.search===void 0?N:e.search;r.trim()&&(t.search=r),(e?.cs===void 0?F:e.cs)&&(t.cs=`1`);let a=i.get(`status`);a&&(t.status=a);let o=i.get(`sort`);o&&(t.sort=o);let s=i.get(`dir`);s&&(t.dir=s);let c=i.get(`scratch`);return c&&(t.scratch=c),t};(0,Q.useEffect)(()=>{let e=i.get(`project`)||null,t=i.get(`status`);e!==g&&_(e);let n=i.get(`search`)??``;n!==N&&P(n);let r=i.get(`cs`)===`1`;if(r!==F&&te(r),t){let e=t.split(`,`).filter(Boolean);R(new Set(e))}let a=i.get(`scratch`)===`1`;ae(e=>{let t=e.has(`scratch`);return a&&!t?new Set([`scratch`]):!a&&e.size===1&&t?new Set:e});let o=i.get(`sort`);(o===`created`||o===`updated`)&&J(o);let s=i.get(`dir`);(s===`asc`||s===`desc`)&&se(s)},[i]);let T=g?f.find(e=>e.id===g):null,E=e=>{_(e),a(w({project:e}),{replace:!0})},D=(0,Q.useCallback)(e=>{ae(t=>{let n=new Set(t);n.has(e)?n.delete(e):n.add(e);let r=new URLSearchParams(i);return n.size===1&&n.has(`scratch`)?r.set(`scratch`,`1`):r.delete(`scratch`),a(r,{replace:!0}),n})},[i,a]),O=(0,Q.useRef)(null),j=(0,Q.useRef)(null),[N,P]=(0,Q.useState)(()=>i.get(`search`)||``),[F,te]=(0,Q.useState)(()=>i.get(`cs`)===`1`),[I,R]=(0,Q.useState)(()=>{let e=i.get(`status`);return e?new Set(e.split(`,`).filter(Boolean)):new Set}),[z,re]=(0,Q.useState)(new Set),[V,U]=(0,Q.useState)(new Set),[W,ae]=(0,Q.useState)(()=>i.get(`scratch`)===`1`?new Set([`scratch`]):new Set),[G,K]=(0,Q.useState)(!1),[q,J]=(0,Q.useState)(()=>{let e=i.get(`sort`);return e===`created`||e===`updated`?e:`updated`}),[oe,se]=(0,Q.useState)(()=>{let e=i.get(`dir`);return e===`asc`||e===`desc`?e:`desc`});(0,Q.useEffect)(()=>{O.current?.focus()},[]),(0,Q.useEffect)(()=>{let e=e=>{if(e.key!==`Escape`||e.defaultPrevented||N.trim())return;let t=L.getState(),r=t.activeThread;if(e.preventDefault(),r){n(H(`/projects/${r.projectId}/threads/${r.id}`));return}let i=t.selectedThreadId;if(i&&g){n(H(`/projects/${g}/threads/${i}`));return}if(g){n(H(`/projects/${g}`));return}n(H(`/`))};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[N,n,g]),(0,Q.useEffect)(()=>{if(!G&&h!==`board`)return;let e=g?[g]:f.map(e=>e.id);for(let t of e)L.getState().loadThreadsForProject(t,!0)},[G,h,g,f]);let[ce,le]=(0,Q.useState)(new Map),Y=(0,Q.useRef)(void 0),ue=(0,Q.useRef)(new Map);(0,Q.useEffect)(()=>{Y.current&&clearTimeout(Y.current);let e=N.trim();if(!e){le(new Map);return}let t=`${e}|${g||``}|${F?`1`:`0`}`,n=ue.current.get(t);if(n){le(n);return}return Y.current=setTimeout(()=>{let n=g||void 0;y.searchThreadContent(e,n,F).then(e=>{if(e.isOk()){let n=new Map,{threadIds:r,snippets:i}=e.value;for(let e of r)n.set(e,i[e]||``);if(ue.current.set(t,n),ue.current.size>50){let e=ue.current.keys().next().value;ue.current.delete(e)}le(n)}})},300),()=>{Y.current&&clearTimeout(Y.current)}},[N,g,F]);let de=(0,Q.useMemo)(()=>{let e={};for(let t of f)e[t.id]={name:t.name,path:t.path,color:t.color};return e},[f]),X=(0,Q.useMemo)(()=>{let e={};for(let t of f)e[t.id]=t.name;return e},[f]),fe=(0,Q.useMemo)(()=>{let e=[...Object.values(s).flat(),...c];return g?e.filter(e=>e.projectId===g):e},[s,g,c]),pe=W.size===1&&W.has(`scratch`),me=(0,Q.useMemo)(()=>pe?!1:(g?[g]:f.map(e=>e.id)).some(e=>(s[e]??[]).length<(l[e]??0)),[s,l,g,f,pe]),[ge,_e]=(0,Q.useState)(!1),ve=(0,Q.useCallback)(async()=>{_e(!0);try{let e=g?[g]:f.map(e=>e.id);await Promise.all(e.filter(e=>(s[e]??[]).length<(l[e]??0)).map(e=>d(e,G)))}finally{_e(!1)}},[g,f,s,l,d,G]),Z=(0,Q.useMemo)(()=>h===`board`||G?fe:fe.filter(e=>!e.archived),[fe,G,h]),ye=(0,Q.useMemo)(()=>{let e=Z;if(N.trim()){let t=F?e=>!!e&&e.includes(N):(e=>t=>!!t&&B(t).includes(e))(B(N));e=e.filter(e=>t(e.title)||t(e.branch)||t(e.status)||!g&&t(X[e.projectId])||ce.has(e.id))}return I.size>0&&(e=e.filter(e=>I.has(e.status))),z.size>0&&(e=e.filter(e=>{let t=m[k(e)];return t?z.has(t.state):!1})),V.size>0&&(e=e.filter(e=>V.has(e.mode))),W.size>0&&(e=e.filter(e=>W.has(e.isScratch?`scratch`:`normal`))),e=e.toSorted((e,t)=>{let n=q===`updated`?e.completedAt??e.createdAt:e.createdAt,r=q===`updated`?t.completedAt??t.createdAt:t.createdAt,i=new Date(n).getTime()-new Date(r).getTime();return oe===`desc`?-i:i}),e},[Z,N,F,I,z,V,W,m,g,X,q,oe,ce]),be=()=>{P(``),R(new Set),re(new Set),U(new Set),ae(new Set),K(!1),g&&_(null);let e=w({project:null,search:``,cs:!1});delete e.scratch,a(e,{replace:!0})},xe=e=>{P(e),a(w({search:e}),{replace:!0})},Ce=e=>{te(e),a(w({cs:e}),{replace:!0})},we=I.size>0||z.size>0||V.size>0||W.size>0||G||!!g,Te=(0,Q.useMemo)(()=>{let e={scratch:0,normal:0};for(let t of Z)e[t.isScratch?`scratch`:`normal`]++;return e},[Z]),Ee=(0,Q.useMemo)(()=>{let e={};for(let t of Z)e[t.status]=(e[t.status]||0)+1;return e},[Z]),De=(0,Q.useMemo)(()=>{let e={};for(let t of Z){let n=m[k(t)];n&&(e[n.state]=(e[n.state]||0)+1)}return e},[Z,m]);return o?(0,$.jsxs)(`div`,{className:`flex h-full min-w-0 flex-1 flex-col`,children:[(0,$.jsxs)(`div`,{className:`border-border flex items-center gap-3 border-b px-4 py-3`,children:[g&&(0,$.jsx)(Se,{onClick:()=>{n(H(`/projects/${g}`))},className:`text-muted-foreground hover:text-foreground`,tooltip:e(`common.back`),children:(0,$.jsx)(u,{className:`icon-base`})}),(0,$.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,$.jsxs)(`h2`,{className:`flex items-center gap-2 text-sm font-medium`,children:[h===`board`?(0,$.jsx)(p,{className:`icon-sm text-muted-foreground`}):(0,$.jsx)(t,{className:`icon-sm text-muted-foreground`}),pe?e(`sidebar.scratchTitle`,{defaultValue:`Quick Chats`}):e(g&&T?`allThreads.title`:`allThreads.globalTitle`)]}),(0,$.jsx)(`p`,{className:`text-muted-foreground text-sm`,children:pe?`${Z.length} ${e(`allThreads.threads`)}`:g&&T?`${T.name} · ${Z.length} ${e(`allThreads.threads`)}`:`${f.length} ${e(`allThreads.projects`)} · ${Z.length} ${e(`allThreads.threads`)}`})]})]}),(0,$.jsx)(Je,{searchInputRef:O,search:N,onSearchChange:xe,caseSensitive:F,onCaseSensitiveChange:Ce,searchKeyDown:e=>j.current?.(e),filteredCount:ye.length,totalCount:Z.length,searchPlaceholder:e(g?`allThreads.searchPlaceholder`:`allThreads.globalSearchPlaceholder`),projects:f,projectFilter:g,filteredProjectName:T?.name,projectFilterOpen:x,setProjectFilterOpen:S,onProjectFilterChange:E,statusFilter:I,setStatusFilter:R,gitFilter:z,setGitFilter:re,modeFilter:V,setModeFilter:U,typeFilter:W,onTypeToggle:D,typeCounts:Te,statusCounts:Ee,gitCounts:De,threadStatuses:[`running`,`waiting`,`completed`,`failed`,`stopped`,`pending`,`interrupted`],gitStates:[`dirty`,`unpushed`,`pushed`,`merged`,`clean`],sortField:q,setSortField:J,sortDir:oe,setSortDir:se,showArchived:G,setShowArchived:K,hasActiveFilters:we,onResetFilters:be}),(0,$.jsx)(`div`,{className:`flex min-h-0 flex-1 flex-col`,children:(0,$.jsx)(We,{viewMode:h,threads:ye,search:N,caseSensitive:F,contentMatches:ce,highlightThreadId:i.get(`highlight`)||void 0,projectFilter:g,projectInfoById:de,hasMoreServerThreads:me,loadingMore:ge,onLoadMore:ve,searchKeyDownRef:j})})]}):null}export{Ze as AllThreadsView};
@@ -1,2 +1,2 @@
1
1
  const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/StageDistributionChart-B7y0aTJz.js","assets/rolldown-runtime-Cyuzqnbw.js","assets/CategoricalChart-gA0eYLAr.js","assets/mermaid-DOtnPRYX.js","assets/tiptap-ByTP6yRf.js","assets/markdown-DBtwZWLP.js","assets/icons-sqwAEN28.js","assets/clsx-CjueKrWZ.js","assets/useTranslation-DAPPK3Hy.js","assets/initReactI18next-Dr0vnWXF.js","assets/TimelineChart-DZuHbkwR.js"])))=>i.map(i=>d[i]);
2
- import{a as e}from"./rolldown-runtime-Cyuzqnbw.js";import{Gt as t,Ln as n,Pr as r,Q as i,Un as a,_r as o,br as s,lr as c,nr as l,yr as u,zr as d}from"./icons-sqwAEN28.js";import{At as f}from"./mermaid-DOtnPRYX.js";import{o as p}from"./markdown-DBtwZWLP.js";import{t as m}from"./useTranslation-DAPPK3Hy.js";import{P as h,lt as g}from"./index-DCJpZz6M.js";import{An as _,Mn as v,in as y,jn as b}from"./items-azeOGVff.js";import{t as x}from"./loading-state-CZgfErMi.js";import{t as S}from"./app-store-CfgpkFla.js";var C=e(d(),1),w=e(p(),1),T={blue:`bg-status-info/10 text-status-info/80`,green:`bg-status-success/10 text-status-success/80`,amber:`bg-status-warning/10 text-status-warning/80`,gray:`bg-status-neutral/10 text-status-neutral/80`,violet:`bg-status-violet/10 text-status-violet/80`,red:`bg-status-error/10 text-status-error/80`};function E({title:e,value:t,icon:n,color:r}){return(0,w.jsxs)(`div`,{className:`border-border rounded-lg border p-4`,"data-testid":`analytics-metric-${r}`,children:[(0,w.jsxs)(`div`,{className:`mb-2 flex items-center justify-between`,children:[(0,w.jsx)(`span`,{className:`text-muted-foreground text-xs`,children:e}),(0,w.jsx)(`div`,{className:g(`p-1.5 rounded-md`,T[r]),children:n})]}),(0,w.jsx)(`p`,{className:`text-2xl font-bold`,children:t})]})}function D({value:e,onChange:t}){let{t:n}=m();return(0,w.jsx)(`div`,{className:`border-border bg-muted/30 flex rounded-md border p-0.5`,"data-testid":`analytics-time-range`,children:[{value:`day`,label:n(`analytics.day`)},{value:`week`,label:n(`analytics.week`)},{value:`month`,label:n(`analytics.month`)},{value:`all`,label:n(`analytics.all`)}].map(n=>(0,w.jsx)(`button`,{"data-testid":`analytics-time-range-${n.value}`,onClick:()=>t(n.value),className:g(`px-3 py-1.5 text-xs rounded-sm transition-colors whitespace-nowrap`,e===n.value?`bg-background text-foreground shadow-xs`:`text-muted-foreground hover:text-foreground`),children:n.label},n.value))})}var O=(0,C.lazy)(()=>f(()=>import(`./StageDistributionChart-B7y0aTJz.js`).then(e=>({default:e.StageDistributionChart})),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9]))),k=(0,C.lazy)(()=>f(()=>import(`./TimelineChart-DZuHbkwR.js`).then(e=>({default:e.TimelineChart})),__vite__mapDeps([10,1,2,3,4,5,6,7,8,9]))),A=()=>(0,w.jsx)(x,{label:`Loading…`});function j(){let{t:e}=m(),d=S(e=>e.projects),f=S(e=>e.selectedProjectId),[p,T]=(0,C.useState)(()=>f||`__all__`),[j,M]=(0,C.useState)(`month`),[N,P]=(0,C.useState)(null),[F,I]=(0,C.useState)(null),[L,R]=(0,C.useState)(!1),z=(0,C.useMemo)(()=>d.find(e=>e.id===p),[d,p]),B=j===`day`||j===`week`?`day`:j===`month`?`week`:`month`;return(0,C.useEffect)(()=>{R(!0),Promise.all([h.analyticsOverview(p===`__all__`?void 0:p,j),h.analyticsTimeline(p===`__all__`?void 0:p,j,B)]).then(([e,t])=>{e.isOk()&&P(e.value),t.isOk()&&I(t.value)}).catch(console.error).finally(()=>R(!1))},[p,j,B]),(0,w.jsxs)(`div`,{className:`flex h-full min-w-0 flex-1 flex-col`,children:[(0,w.jsx)(`div`,{className:`border-border flex items-center gap-3 border-b px-4 py-3`,children:(0,w.jsx)(`div`,{className:`min-w-0 flex-1`,children:(0,w.jsxs)(`h2`,{className:`flex items-center gap-2 text-sm font-medium`,children:[(0,w.jsx)(s,{className:`icon-sm text-muted-foreground`}),` `,e(`analytics.title`)]})})}),(0,w.jsxs)(`div`,{className:`border-border/50 flex items-center gap-2 border-b px-4 py-2`,children:[(0,w.jsxs)(_,{children:[(0,w.jsx)(v,{asChild:!0,children:(0,w.jsxs)(`button`,{"data-testid":`analytics-project-filter`,className:g(`inline-flex items-center gap-1 px-2 py-1 text-xs rounded-md border transition-colors whitespace-nowrap`,p===`__all__`?`bg-transparent text-muted-foreground border-border hover:bg-accent/50 hover:text-foreground`:`bg-accent text-accent-foreground border-accent-foreground/20`),children:[p!==`__all__`&&z?z.name:e(`analytics.allProjects`),(0,w.jsx)(o,{className:`icon-xs opacity-50`})]})}),(0,w.jsx)(b,{align:`start`,className:`w-auto min-w-[180px] p-0`,children:(0,w.jsxs)(y,{className:`max-h-[300px] p-1`,children:[(0,w.jsxs)(`button`,{onClick:()=>T(`__all__`),className:g(`flex items-center gap-2 w-full px-2 py-1.5 text-xs rounded-sm transition-colors text-left`,`hover:bg-accent hover:text-accent-foreground`,p===`__all__`&&`text-accent-foreground`),children:[(0,w.jsx)(`span`,{className:g(`flex h-3.5 w-3.5 items-center justify-center rounded-full border`,p===`__all__`?`bg-primary border-primary text-primary-foreground`:`border-muted-foreground/30`),children:p===`__all__`&&(0,w.jsx)(u,{className:`icon-2xs`})}),(0,w.jsx)(`span`,{className:`flex-1`,children:e(`analytics.allProjects`)})]}),d.map(e=>{let t=p===e.id;return(0,w.jsxs)(`button`,{onClick:()=>T(e.id),className:g(`flex items-center gap-2 w-full px-2 py-1.5 text-xs rounded-sm transition-colors text-left`,`hover:bg-accent hover:text-accent-foreground`,t&&`text-accent-foreground`),children:[(0,w.jsx)(`span`,{className:g(`flex h-3.5 w-3.5 items-center justify-center rounded-full border`,t?`bg-primary border-primary text-primary-foreground`:`border-muted-foreground/30`),children:t&&(0,w.jsx)(u,{className:`icon-2xs`})}),(0,w.jsx)(`span`,{className:`flex-1 truncate`,children:e.name})]},e.id)})]})})]}),(0,w.jsx)(`div`,{className:`bg-border h-4 w-px`}),(0,w.jsx)(D,{value:j,onChange:M})]}),L?(0,w.jsx)(x,{testId:`analytics-loading`,label:`Loading…`}):(0,w.jsx)(y,{className:`min-h-0 flex-1`,children:(0,w.jsx)(`div`,{className:`mx-auto max-w-4xl space-y-6 px-6 py-6`,children:N?(0,w.jsxs)(w.Fragment,{children:[(0,w.jsxs)(`div`,{className:`grid grid-cols-2 gap-3 lg:grid-cols-3`,"data-testid":`analytics-metric-cards`,children:[(0,w.jsx)(E,{title:e(`analytics.tasksCreated`),value:N.createdCount,icon:(0,w.jsx)(i,{className:`icon-sm`}),color:`blue`}),(0,w.jsx)(E,{title:e(`analytics.tasksCompleted`),value:N.completedCount,icon:(0,w.jsx)(c,{className:`icon-sm`}),color:`green`}),(0,w.jsx)(E,{title:e(`analytics.movedToPlanning`),value:N.movedToPlanningCount,icon:(0,w.jsx)(l,{className:`icon-sm`}),color:`violet`}),(0,w.jsx)(E,{title:e(`analytics.movedToReview`),value:N.movedToReviewCount,icon:(0,w.jsx)(n,{className:`icon-sm`}),color:`amber`}),(0,w.jsx)(E,{title:e(`analytics.movedToDone`),value:N.movedToDoneCount,icon:(0,w.jsx)(t,{className:`icon-sm`}),color:`violet`}),(0,w.jsx)(E,{title:e(`analytics.movedToArchived`),value:N.movedToArchivedCount,icon:(0,w.jsx)(r,{className:`icon-sm`}),color:`red`})]}),N.totalCost>0&&(0,w.jsxs)(`div`,{className:`border-border flex items-center justify-between rounded-lg border p-4`,"data-testid":`analytics-cost-card`,children:[(0,w.jsxs)(`div`,{children:[(0,w.jsx)(`p`,{className:`text-muted-foreground text-xs`,children:e(`analytics.totalCost`)}),(0,w.jsxs)(`p`,{className:`mt-1 text-xl font-bold`,children:[`$`,N.totalCost.toFixed(4)]})]}),(0,w.jsx)(`div`,{className:`bg-status-success/10 text-status-success/80 rounded-md p-2`,children:(0,w.jsx)(a,{className:`icon-base`})})]}),(0,w.jsxs)(`div`,{className:`border-border rounded-lg border p-5`,"data-testid":`analytics-stage-chart`,children:[(0,w.jsx)(`h3`,{className:`mb-4 text-sm font-semibold`,children:e(`analytics.currentDistribution`)}),(0,w.jsx)(C.Suspense,{fallback:(0,w.jsx)(A,{}),children:(0,w.jsx)(O,{data:N.currentStageDistribution})})]}),F&&(0,w.jsxs)(`div`,{className:`border-border rounded-lg border p-5`,"data-testid":`analytics-timeline-chart`,children:[(0,w.jsx)(`h3`,{className:`mb-4 text-sm font-semibold`,children:e(`analytics.timeline`)}),(0,w.jsx)(C.Suspense,{fallback:(0,w.jsx)(A,{}),children:(0,w.jsx)(k,{created:F.createdByDate,completed:F.completedByDate,movedToPlanning:F.movedToPlanningByDate??[],movedToReview:F.movedToReviewByDate,movedToDone:F.movedToDoneByDate,movedToArchived:F.movedToArchivedByDate??[],groupBy:B})})]})]}):(0,w.jsx)(`div`,{className:`text-muted-foreground py-16 text-center text-sm`,"data-testid":`analytics-no-data`,children:e(`analytics.noData`)})})})]})}export{j as AnalyticsView};
2
+ import{a as e}from"./rolldown-runtime-Cyuzqnbw.js";import{Gt as t,Ln as n,Pr as r,Q as i,Un as a,_r as o,br as s,lr as c,nr as l,yr as u,zr as d}from"./icons-sqwAEN28.js";import{At as f}from"./mermaid-DOtnPRYX.js";import{o as p}from"./markdown-DBtwZWLP.js";import{t as m}from"./useTranslation-DAPPK3Hy.js";import{P as h,lt as g}from"./index-DNxUSLe_.js";import{An as _,Mn as v,in as y,jn as b}from"./items-7qqySF-X.js";import{t as x}from"./loading-state-yLj5fYb6.js";import{t as S}from"./app-store-DKW9sVHv.js";var C=e(d(),1),w=e(p(),1),T={blue:`bg-status-info/10 text-status-info/80`,green:`bg-status-success/10 text-status-success/80`,amber:`bg-status-warning/10 text-status-warning/80`,gray:`bg-status-neutral/10 text-status-neutral/80`,violet:`bg-status-violet/10 text-status-violet/80`,red:`bg-status-error/10 text-status-error/80`};function E({title:e,value:t,icon:n,color:r}){return(0,w.jsxs)(`div`,{className:`border-border rounded-lg border p-4`,"data-testid":`analytics-metric-${r}`,children:[(0,w.jsxs)(`div`,{className:`mb-2 flex items-center justify-between`,children:[(0,w.jsx)(`span`,{className:`text-muted-foreground text-xs`,children:e}),(0,w.jsx)(`div`,{className:g(`p-1.5 rounded-md`,T[r]),children:n})]}),(0,w.jsx)(`p`,{className:`text-2xl font-bold`,children:t})]})}function D({value:e,onChange:t}){let{t:n}=m();return(0,w.jsx)(`div`,{className:`border-border bg-muted/30 flex rounded-md border p-0.5`,"data-testid":`analytics-time-range`,children:[{value:`day`,label:n(`analytics.day`)},{value:`week`,label:n(`analytics.week`)},{value:`month`,label:n(`analytics.month`)},{value:`all`,label:n(`analytics.all`)}].map(n=>(0,w.jsx)(`button`,{"data-testid":`analytics-time-range-${n.value}`,onClick:()=>t(n.value),className:g(`px-3 py-1.5 text-xs rounded-sm transition-colors whitespace-nowrap`,e===n.value?`bg-background text-foreground shadow-xs`:`text-muted-foreground hover:text-foreground`),children:n.label},n.value))})}var O=(0,C.lazy)(()=>f(()=>import(`./StageDistributionChart-B7y0aTJz.js`).then(e=>({default:e.StageDistributionChart})),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9]))),k=(0,C.lazy)(()=>f(()=>import(`./TimelineChart-DZuHbkwR.js`).then(e=>({default:e.TimelineChart})),__vite__mapDeps([10,1,2,3,4,5,6,7,8,9]))),A=()=>(0,w.jsx)(x,{label:`Loading…`});function j(){let{t:e}=m(),d=S(e=>e.projects),f=S(e=>e.selectedProjectId),[p,T]=(0,C.useState)(()=>f||`__all__`),[j,M]=(0,C.useState)(`month`),[N,P]=(0,C.useState)(null),[F,I]=(0,C.useState)(null),[L,R]=(0,C.useState)(!1),z=(0,C.useMemo)(()=>d.find(e=>e.id===p),[d,p]),B=j===`day`||j===`week`?`day`:j===`month`?`week`:`month`;return(0,C.useEffect)(()=>{R(!0),Promise.all([h.analyticsOverview(p===`__all__`?void 0:p,j),h.analyticsTimeline(p===`__all__`?void 0:p,j,B)]).then(([e,t])=>{e.isOk()&&P(e.value),t.isOk()&&I(t.value)}).catch(console.error).finally(()=>R(!1))},[p,j,B]),(0,w.jsxs)(`div`,{className:`flex h-full min-w-0 flex-1 flex-col`,children:[(0,w.jsx)(`div`,{className:`border-border flex items-center gap-3 border-b px-4 py-3`,children:(0,w.jsx)(`div`,{className:`min-w-0 flex-1`,children:(0,w.jsxs)(`h2`,{className:`flex items-center gap-2 text-sm font-medium`,children:[(0,w.jsx)(s,{className:`icon-sm text-muted-foreground`}),` `,e(`analytics.title`)]})})}),(0,w.jsxs)(`div`,{className:`border-border/50 flex items-center gap-2 border-b px-4 py-2`,children:[(0,w.jsxs)(_,{children:[(0,w.jsx)(v,{asChild:!0,children:(0,w.jsxs)(`button`,{"data-testid":`analytics-project-filter`,className:g(`inline-flex items-center gap-1 px-2 py-1 text-xs rounded-md border transition-colors whitespace-nowrap`,p===`__all__`?`bg-transparent text-muted-foreground border-border hover:bg-accent/50 hover:text-foreground`:`bg-accent text-accent-foreground border-accent-foreground/20`),children:[p!==`__all__`&&z?z.name:e(`analytics.allProjects`),(0,w.jsx)(o,{className:`icon-xs opacity-50`})]})}),(0,w.jsx)(b,{align:`start`,className:`w-auto min-w-[180px] p-0`,children:(0,w.jsxs)(y,{className:`max-h-[300px] p-1`,children:[(0,w.jsxs)(`button`,{onClick:()=>T(`__all__`),className:g(`flex items-center gap-2 w-full px-2 py-1.5 text-xs rounded-sm transition-colors text-left`,`hover:bg-accent hover:text-accent-foreground`,p===`__all__`&&`text-accent-foreground`),children:[(0,w.jsx)(`span`,{className:g(`flex h-3.5 w-3.5 items-center justify-center rounded-full border`,p===`__all__`?`bg-primary border-primary text-primary-foreground`:`border-muted-foreground/30`),children:p===`__all__`&&(0,w.jsx)(u,{className:`icon-2xs`})}),(0,w.jsx)(`span`,{className:`flex-1`,children:e(`analytics.allProjects`)})]}),d.map(e=>{let t=p===e.id;return(0,w.jsxs)(`button`,{onClick:()=>T(e.id),className:g(`flex items-center gap-2 w-full px-2 py-1.5 text-xs rounded-sm transition-colors text-left`,`hover:bg-accent hover:text-accent-foreground`,t&&`text-accent-foreground`),children:[(0,w.jsx)(`span`,{className:g(`flex h-3.5 w-3.5 items-center justify-center rounded-full border`,t?`bg-primary border-primary text-primary-foreground`:`border-muted-foreground/30`),children:t&&(0,w.jsx)(u,{className:`icon-2xs`})}),(0,w.jsx)(`span`,{className:`flex-1 truncate`,children:e.name})]},e.id)})]})})]}),(0,w.jsx)(`div`,{className:`bg-border h-4 w-px`}),(0,w.jsx)(D,{value:j,onChange:M})]}),L?(0,w.jsx)(x,{testId:`analytics-loading`,label:`Loading…`}):(0,w.jsx)(y,{className:`min-h-0 flex-1`,children:(0,w.jsx)(`div`,{className:`mx-auto max-w-4xl space-y-6 px-6 py-6`,children:N?(0,w.jsxs)(w.Fragment,{children:[(0,w.jsxs)(`div`,{className:`grid grid-cols-2 gap-3 lg:grid-cols-3`,"data-testid":`analytics-metric-cards`,children:[(0,w.jsx)(E,{title:e(`analytics.tasksCreated`),value:N.createdCount,icon:(0,w.jsx)(i,{className:`icon-sm`}),color:`blue`}),(0,w.jsx)(E,{title:e(`analytics.tasksCompleted`),value:N.completedCount,icon:(0,w.jsx)(c,{className:`icon-sm`}),color:`green`}),(0,w.jsx)(E,{title:e(`analytics.movedToPlanning`),value:N.movedToPlanningCount,icon:(0,w.jsx)(l,{className:`icon-sm`}),color:`violet`}),(0,w.jsx)(E,{title:e(`analytics.movedToReview`),value:N.movedToReviewCount,icon:(0,w.jsx)(n,{className:`icon-sm`}),color:`amber`}),(0,w.jsx)(E,{title:e(`analytics.movedToDone`),value:N.movedToDoneCount,icon:(0,w.jsx)(t,{className:`icon-sm`}),color:`violet`}),(0,w.jsx)(E,{title:e(`analytics.movedToArchived`),value:N.movedToArchivedCount,icon:(0,w.jsx)(r,{className:`icon-sm`}),color:`red`})]}),N.totalCost>0&&(0,w.jsxs)(`div`,{className:`border-border flex items-center justify-between rounded-lg border p-4`,"data-testid":`analytics-cost-card`,children:[(0,w.jsxs)(`div`,{children:[(0,w.jsx)(`p`,{className:`text-muted-foreground text-xs`,children:e(`analytics.totalCost`)}),(0,w.jsxs)(`p`,{className:`mt-1 text-xl font-bold`,children:[`$`,N.totalCost.toFixed(4)]})]}),(0,w.jsx)(`div`,{className:`bg-status-success/10 text-status-success/80 rounded-md p-2`,children:(0,w.jsx)(a,{className:`icon-base`})})]}),(0,w.jsxs)(`div`,{className:`border-border rounded-lg border p-5`,"data-testid":`analytics-stage-chart`,children:[(0,w.jsx)(`h3`,{className:`mb-4 text-sm font-semibold`,children:e(`analytics.currentDistribution`)}),(0,w.jsx)(C.Suspense,{fallback:(0,w.jsx)(A,{}),children:(0,w.jsx)(O,{data:N.currentStageDistribution})})]}),F&&(0,w.jsxs)(`div`,{className:`border-border rounded-lg border p-5`,"data-testid":`analytics-timeline-chart`,children:[(0,w.jsx)(`h3`,{className:`mb-4 text-sm font-semibold`,children:e(`analytics.timeline`)}),(0,w.jsx)(C.Suspense,{fallback:(0,w.jsx)(A,{}),children:(0,w.jsx)(k,{created:F.createdByDate,completed:F.completedByDate,movedToPlanning:F.movedToPlanningByDate??[],movedToReview:F.movedToReviewByDate,movedToDone:F.movedToDoneByDate,movedToArchived:F.movedToArchivedByDate??[],groupBy:B})})]})]}):(0,w.jsx)(`div`,{className:`text-muted-foreground py-16 text-center text-sm`,"data-testid":`analytics-no-data`,children:e(`analytics.noData`)})})})]})}export{j as AnalyticsView};