@ironmussa/funny 0.1.4 → 0.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +14 -19
- package/bin/funny.js +37 -66
- package/package.json +1 -1
- package/packages/client/dist/assets/{AcceptInvitePage-D2QlnwXy.js → AcceptInvitePage-Bz8azFPS.js} +1 -1
- package/packages/client/dist/assets/{ActivityPane-kz91jVAM.js → ActivityPane-DY9GzNxE.js} +1 -1
- package/packages/client/dist/assets/{AddProjectView-DWAvSEfh.js → AddProjectView-CS9PMuwG.js} +1 -1
- package/packages/client/dist/assets/{AllThreadsView-CEwWCoDj.js → AllThreadsView-wK8q3SsH.js} +1 -1
- package/packages/client/dist/assets/{AnalyticsView-DAWyZa5z.js → AnalyticsView-CZlraPUL.js} +1 -1
- package/packages/client/dist/assets/{App-BzBTjMsb.js → App-9j57f85r.js} +3 -3
- package/packages/client/dist/assets/{AutomationInboxView-zNA4E_CB.js → AutomationInboxView-CDlKbclJ.js} +1 -1
- package/packages/client/dist/assets/{BrowserPanel-CLETmPIM.js → BrowserPanel-B7imTgqS.js} +1 -1
- package/packages/client/dist/assets/{BrowserPreview-D6-GY7Lk.js → BrowserPreview-DOUyF-0l.js} +1 -1
- package/packages/client/dist/assets/{CircuitBreakerDialog-DCiRlBvD.js → CircuitBreakerDialog-C20MeUCC.js} +1 -1
- package/packages/client/dist/assets/{CommandPalette-MY2bMCP4.js → CommandPalette-B55GwOW8.js} +1 -1
- package/packages/client/dist/assets/{CommentsPane-tyNsUWqs.js → CommentsPane-js2FWA8j.js} +1 -1
- package/packages/client/dist/assets/{CsvTable-DB3mtG8a.js → CsvTable-CBgoinyU.js} +1 -1
- package/packages/client/dist/assets/{FileSearchDialog-4lhZizzD.js → FileSearchDialog-HCT2Hz0_.js} +1 -1
- package/packages/client/dist/assets/{FileTree-DESC68xP.js → FileTree-DUODDbNL.js} +1 -1
- package/packages/client/dist/assets/{FolderPicker-B5JTJeAY.js → FolderPicker-DEwPUyou.js} +1 -1
- package/packages/client/dist/assets/{GeneralSettingsView-SHsx-3nX.js → GeneralSettingsView-DkKqhc1H.js} +2 -2
- package/packages/client/dist/assets/{GitProgressModal-C_W78wcH.js → GitProgressModal-wumxtrFG.js} +1 -1
- package/packages/client/dist/assets/{LiveColumnsView-XMHr9OEz.js → LiveColumnsView-C9sNbvg3.js} +1 -1
- package/packages/client/dist/assets/{LoginPage-CQ9fP0F4.js → LoginPage-5VQrfpbg.js} +1 -1
- package/packages/client/dist/assets/{MediaPreview-2jhQWqiK.js → MediaPreview-DzlqoZwu.js} +1 -1
- package/packages/client/dist/assets/{MediaPreviewDialog-ZMIFbNgy.js → MediaPreviewDialog-C9ZILO-C.js} +1 -1
- package/packages/client/dist/assets/{MermaidBlock-Ub8VkOL4.js → MermaidBlock-xuBty90Y.js} +1 -1
- package/packages/client/dist/assets/{MobilePage-C9PpVVfq.js → MobilePage-B3b4tpPe.js} +2 -2
- package/packages/client/dist/assets/{MonacoEditorDialog-Co2xdBGu.js → MonacoEditorDialog-DfJmfHiL.js} +1 -1
- package/packages/client/dist/assets/{OrchestratorView-CJ529EFF.js → OrchestratorView--Df-JFQd.js} +1 -1
- package/packages/client/dist/assets/{PreferencesPanel-Cz4IuCEn.js → PreferencesPanel-CAhnrHw0.js} +1 -1
- package/packages/client/dist/assets/{PreviewBrowser-Csflu6Sr.js → PreviewBrowser-DKz2hR71.js} +1 -1
- package/packages/client/dist/assets/{ProjectFilesPane-C0-WA5jW.js → ProjectFilesPane-BbOGQ3kp.js} +1 -1
- package/packages/client/dist/assets/{ProjectHeader-Bf1gaA1F.js → ProjectHeader-DZ9UUaqW.js} +1 -1
- package/packages/client/dist/assets/{ProjectHooksSettings-DdChzrcv.js → ProjectHooksSettings-BGHkJMxp.js} +1 -1
- package/packages/client/dist/assets/{ReviewPane-DSytotSX.js → ReviewPane-83OOq41s.js} +1 -1
- package/packages/client/dist/assets/{SearchablePicker-ePO3BIOx.js → SearchablePicker-Cz6G4abl.js} +1 -1
- package/packages/client/dist/assets/{SettingsDetailView-DH9yGrff.js → SettingsDetailView-DwWVM6qW.js} +1 -1
- package/packages/client/dist/assets/{SettingsPageContent-C8EUEhHQ.js → SettingsPageContent-Cre7rDf1.js} +3 -3
- package/packages/client/dist/assets/{SetupWizard-DXcV9Vsz.js → SetupWizard-im6s3weh.js} +1 -1
- package/packages/client/dist/assets/{Sidebar-CnSzyO_S.js → Sidebar-C7PRUuZe.js} +1 -1
- package/packages/client/dist/assets/{StashTab-BZn6-Wn3.js → StashTab-CzC8WNxJ.js} +1 -1
- package/packages/client/dist/assets/{TestRunnerPane-Cz8KHMSp.js → TestRunnerPane-DjzPYNLs.js} +1 -1
- package/packages/client/dist/assets/{TextSearchDialog-BWChISXp.js → TextSearchDialog-DcYyEuMd.js} +1 -1
- package/packages/client/dist/assets/{ThreadPowerline-CX-bm7_6.js → ThreadPowerline-CTbQgGLL.js} +1 -1
- package/packages/client/dist/assets/{ThreadStatusPin-CjNRn4Rx.js → ThreadStatusPin-CYsH0F8e.js} +1 -1
- package/packages/client/dist/assets/{ThreadView-DbwUcWMo.js → ThreadView-DUaDYGnz.js} +1 -1
- package/packages/client/dist/assets/{app-store-BwZB2xp_.js → app-store-CVcOgstJ.js} +1 -1
- package/packages/client/dist/assets/{automation-store-DBy-NuND.js → automation-store-DteeWFhQ.js} +1 -1
- package/packages/client/dist/assets/{browser-panel-store-Bih_qYi6.js → browser-panel-store-3T75tTA2.js} +2 -2
- package/packages/client/dist/assets/{button-DeEOU1Fb.js → button-Bi9_EZFh.js} +1 -1
- package/packages/client/dist/assets/{combine-ISTWP4AL.js → combine-JFcc9GB_.js} +1 -1
- package/packages/client/dist/assets/{comment-store-Be3Fd_A7.js → comment-store-DgECCb00.js} +1 -1
- package/packages/client/dist/assets/{diff-parse-738OLLMl.js → diff-parse-CRTMJKOI.js} +1 -1
- package/packages/client/dist/assets/{element-CuNJpCWR.js → element-DgNlo25W.js} +1 -1
- package/packages/client/dist/assets/{go-to-thread-XoxeW5m_.js → go-to-thread-DJT-R5-a.js} +1 -1
- package/packages/client/dist/assets/{index-BsxcqNXe.js → index-Bmp1UFM1.js} +2 -2
- package/packages/client/dist/assets/{input-DV30TVat.js → input-BGZP-HTx.js} +1 -1
- package/packages/client/dist/assets/{items-_g3-I08l.js → items-C-m69VjA.js} +1 -1
- package/packages/client/dist/assets/{job-store-C5Ten7SL.js → job-store-BBERDOJO.js} +1 -1
- package/packages/client/dist/assets/{kbd-C7L0hICt.js → kbd-BrgsdFIb.js} +1 -1
- package/packages/client/dist/assets/{loading-state-BQjalkhM.js → loading-state-DGzdeccZ.js} +1 -1
- package/packages/client/dist/assets/{markdown-components-D4Y3yxJk.js → markdown-components-DbIYr3N1.js} +1 -1
- package/packages/client/dist/assets/{native-git-store-B9ZRXl6g.js → native-git-store-CYZj3IWH.js} +1 -1
- package/packages/client/dist/assets/{orchestrator-store-Vf7hIdtx.js → orchestrator-store-B-nOHeLj.js} +1 -1
- package/packages/client/dist/assets/{pipeline-approval-store-BzDMPaHv.js → pipeline-approval-store-DOhazL3I.js} +1 -1
- package/packages/client/dist/assets/{pr-detail-store-ZCVq5jO-.js → pr-detail-store-BJ3P2gik.js} +1 -1
- package/packages/client/dist/assets/{providers-CBJW4tBi.js → providers-BD43Asis.js} +1 -1
- package/packages/client/dist/assets/{sidebar-BzOM_jNz.js → sidebar-CL7TSCIO.js} +1 -1
- package/packages/client/dist/assets/{tabs-C98UD1RJ.js → tabs-DWlrx7U8.js} +1 -1
- package/packages/client/dist/assets/{test-store-BbGZeyOw.js → test-store-C40x04Fz.js} +1 -1
- package/packages/client/dist/assets/{tooltip-icon-button-z_YicoMI.js → tooltip-icon-button-DUnFi3-p.js} +1 -1
- package/packages/client/dist/assets/use-active-thread-id-De6IjhUY.js +1 -0
- package/packages/client/dist/assets/{use-branch-switch-mtbqs9Jw.js → use-branch-switch-4nDECRMh.js} +1 -1
- package/packages/client/dist/assets/{use-image-lightbox-D_bv65q5.js → use-image-lightbox-13VQ9o9i.js} +1 -1
- package/packages/client/dist/assets/{use-stable-navigate-CTxO5fW7.js → use-stable-navigate-uXVRGpin.js} +1 -1
- package/packages/client/dist/assets/{use-terminal-scope-DdXii8xw.js → use-terminal-scope-DHhH7AvQ.js} +1 -1
- package/packages/client/dist/assets/{use-thread-creation-Dyd2HCG5.js → use-thread-creation-CgT3SuOi.js} +1 -1
- package/packages/client/dist/assets/{use-thread-search-BIXj6zRV.js → use-thread-search-CbgQmS3O.js} +1 -1
- package/packages/client/dist/assets/{use-todo-panel-D9pAUf5W.js → use-todo-panel-CsXYDjtr.js} +1 -1
- package/packages/client/dist/assets/{use-unified-prompt-model-groups-CjX0kT2J.js → use-unified-prompt-model-groups-CUMps-gq.js} +1 -1
- package/packages/client/dist/assets/{use-ws-CeBgbigk.js → use-ws-DVvliZBW.js} +3 -3
- package/packages/client/dist/assets/{visualizer-loader-BVlcAMHr.js → visualizer-loader-Dv9AyyLp.js} +1 -1
- package/packages/client/dist/assets/{watcher-store-C6B9wUDN.js → watcher-store-srZSE5jI.js} +1 -1
- package/packages/client/dist/index.html +1 -1
- package/packages/runtime/dist/index.js +2 -2
- package/packages/runtime/dist/index.js.map +1 -1
- package/packages/client/dist/assets/use-active-thread-id-DE1fU7g0.js +0 -1
package/packages/client/dist/assets/{AllThreadsView-CEwWCoDj.js → AllThreadsView-wK8q3SsH.js}
RENAMED
|
@@ -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-BsxcqNXe.js";import{t as T}from"./button-DeEOU1Fb.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-_g3-I08l.js";import{t as ge}from"./input-DV30TVat.js";import{t as _e}from"./loading-state-BQjalkhM.js";import{n as ve,r as Z,t as ye}from"./adapter-g71mvnZo.js";import{t as be}from"./use-active-thread-id-DE1fU7g0.js";import{t as xe}from"./app-store-BwZB2xp_.js";import{t as Se}from"./tooltip-icon-button-z_YicoMI.js";import{c as Ce,n as we,r as Te,s as Ee,t as De}from"./element-CuNJpCWR.js";import{t as Oe}from"./ThreadStatusPin-CjNRn4Rx.js";import{t as ke}from"./ThreadPowerline-CX-bm7_6.js";import{n as Ae}from"./go-to-thread-XoxeW5m_.js";import{n as je,r as Me,t as Ne}from"./use-thread-creation-Dyd2HCG5.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-Bmp1UFM1.js";import{t as T}from"./button-Bi9_EZFh.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-C-m69VjA.js";import{t as ge}from"./input-BGZP-HTx.js";import{t as _e}from"./loading-state-DGzdeccZ.js";import{n as ve,r as Z,t as ye}from"./adapter-g71mvnZo.js";import{t as be}from"./use-active-thread-id-De6IjhUY.js";import{t as xe}from"./app-store-CVcOgstJ.js";import{t as Se}from"./tooltip-icon-button-DUnFi3-p.js";import{c as Ce,n as we,r as Te,s as Ee,t as De}from"./element-DgNlo25W.js";import{t as Oe}from"./ThreadStatusPin-CYsH0F8e.js";import{t as ke}from"./ThreadPowerline-CTbQgGLL.js";import{n as Ae}from"./go-to-thread-DJT-R5-a.js";import{n as je,r as Me,t as Ne}from"./use-thread-creation-CgT3SuOi.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-
|
|
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-Bmp1UFM1.js";import{An as _,Mn as v,in as y,jn as b}from"./items-C-m69VjA.js";import{t as x}from"./loading-state-DGzdeccZ.js";import{t as S}from"./app-store-CVcOgstJ.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};
|