@cuongtran001/kanna 1.94.0 → 1.94.2

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 (63) hide show
  1. package/dist/client/assets/{BoardsPage-R1NeKyda.js → BoardsPage-CcEgSKEH.js} +1 -1
  2. package/dist/client/assets/{BoardsRoutePage-D5h9v8uT.js → BoardsRoutePage-DYG2WpTB.js} +1 -1
  3. package/dist/client/assets/{ChatPage-BVynEKaw.js → ChatPage-CUa9Mlv0.js} +4 -4
  4. package/dist/client/assets/{CronJobsPage-Cdd4RzOX.js → CronJobsPage-LCRBV65t.js} +1 -1
  5. package/dist/client/assets/{FilePreviewSheet-qV0aMjbN.js → FilePreviewSheet-DK4JlQ4b.js} +1 -1
  6. package/dist/client/assets/{FlowSurface-D7etyg8o.js → FlowSurface-B34Ui27C.js} +1 -1
  7. package/dist/client/assets/{GenUIBlock-CNxJQPAv.js → GenUIBlock-B90q9Hoz.js} +2 -2
  8. package/dist/client/assets/{InboundHandlerFields-C06QVuEE.js → InboundHandlerFields-CrbQcRFr.js} +1 -1
  9. package/dist/client/assets/{InboxPage-Qs044g9g.js → InboxPage-CcU-wMdJ.js} +1 -1
  10. package/dist/client/assets/{LocalProjectsPage-BgXOD_d2.js → LocalProjectsPage-Csj-YWVf.js} +1 -1
  11. package/dist/client/assets/{SettingsPage-CstF60NX.js → SettingsPage-BFnBY3op.js} +1 -1
  12. package/dist/client/assets/{StackBoardsRoutePage-D4bMyO1r.js → StackBoardsRoutePage-qh4CMVbO.js} +1 -1
  13. package/dist/client/assets/{ToolCallMessage-CMy_SA4Q.js → ToolCallMessage-36Dj7xkk.js} +2 -2
  14. package/dist/client/assets/{VChartSurface-C0qDeGVZ.js → VChartSurface-CcMrzPBy.js} +1 -1
  15. package/dist/client/assets/{WebhooksPage-DhNxgRWe.js → WebhooksPage-5KNcw-Vz.js} +1 -1
  16. package/dist/client/assets/{WorkflowsPage-BQRfiTio.js → WorkflowsPage-DNYcsvtV.js} +1 -1
  17. package/dist/client/assets/{appSettingsStore-DorOhX3h.js → appSettingsStore-LgzUNvfd.js} +1 -1
  18. package/dist/client/assets/{arrow-left-C_A55luo.js → arrow-left-BIWqzCsH.js} +1 -1
  19. package/dist/client/assets/{beacon-alias-RvDfxoXq.js → beacon-alias-DxONetqC.js} +3 -3
  20. package/dist/client/assets/{code-xml-4HW1ZKvY.js → code-xml-BfYZcKk2.js} +1 -1
  21. package/dist/client/assets/{commandFeedback-Crg0feI_.js → commandFeedback-yC5d0Ae6.js} +1 -1
  22. package/dist/client/assets/{contextWindow-BclfwNFJ.js → contextWindow-pvBJBrsH.js} +1 -1
  23. package/dist/client/assets/{copyFeedbackStore-DmcvdlxG.js → copyFeedbackStore-BpFUDutm.js} +1 -1
  24. package/dist/client/assets/{createScopedStore-BaYuVAci.js → createScopedStore-Ba9K_10X.js} +1 -1
  25. package/dist/client/assets/{cronJobsStore-C25mtJN2.js → cronJobsStore-Dehc4edG.js} +1 -1
  26. package/dist/client/assets/{file-plus-corner-Z5JxncXS.js → file-plus-corner-DWHF_kbn.js} +1 -1
  27. package/dist/client/assets/{inboxStore-DkbalqdJ.js → inboxStore-BxT26bsM.js} +1 -1
  28. package/dist/client/assets/{index-CgldJgZf.js → index-CRk0GD4y.js} +13 -13
  29. package/dist/client/assets/{info-BIQxnSmG.js → info-Ba70747-.js} +1 -1
  30. package/dist/client/assets/{input-BpTxjU7c.js → input-BY7tE022.js} +1 -1
  31. package/dist/client/assets/{log-CqB88hyY.js → log-DxnWb_y2.js} +1 -1
  32. package/dist/client/assets/minus-DpkN1lgU.js +1 -0
  33. package/dist/client/assets/{monitor-Ba_DrtaE.js → monitor-ByZxj7H9.js} +1 -1
  34. package/dist/client/assets/{pencil-CAEODwO4.js → pencil-41SXT97L.js} +1 -1
  35. package/dist/client/assets/{pendingActionsStore-Dxvq78CS.js → pendingActionsStore-BEJnZIRD.js} +1 -1
  36. package/dist/client/assets/{plus-DYBSDYfu.js → plus-CVyLwE7_.js} +1 -1
  37. package/dist/client/assets/{refresh-cw-Di2hSIFd.js → refresh-cw-CLCXCzaY.js} +1 -1
  38. package/dist/client/assets/runDetached-K6ggut3D.js +1 -0
  39. package/dist/client/assets/{search-D4oI8xx9.js → search-BabRSZmb.js} +1 -1
  40. package/dist/client/assets/{searchable-select-BIlhJs3K.js → searchable-select-prsU5V9D.js} +1 -1
  41. package/dist/client/assets/{segmented-control-Cy9xs9vv.js → segmented-control-BdqpOGH3.js} +1 -1
  42. package/dist/client/assets/{select-DNJTBH-m.js → select-BuN3bPMQ.js} +1 -1
  43. package/dist/client/assets/{settings-header-button-DW05_hgi.js → settings-header-button-BkDztcVR.js} +1 -1
  44. package/dist/client/assets/{state-mark-Urny-Qku.js → state-mark-BoV1BBc0.js} +1 -1
  45. package/dist/client/assets/{terminal-DtmtrN53.js → terminal-uWEJ91yR.js} +1 -1
  46. package/dist/client/assets/{timer.adapter-DKD6x2d-.js → timer.adapter-BX7ibpTi.js} +1 -1
  47. package/dist/client/assets/{tools-FX7P00jZ.js → tools-B59RcrVm.js} +1 -1
  48. package/dist/client/assets/{triangle-alert-SdPlbDKh.js → triangle-alert-D3aY6mGU.js} +1 -1
  49. package/dist/client/assets/{useAppGlobalState-mBUTgrw-.js → useAppGlobalState-vHoqoq7W.js} +1 -1
  50. package/dist/client/assets/{useProviderCatalog-Y4EMjO8f.js → useProviderCatalog-BJE2nJJQ.js} +1 -1
  51. package/dist/client/assets/{useTheme-C1N4Xgyo.js → useTheme-CuVmsdqy.js} +1 -1
  52. package/dist/client/index.html +31 -31
  53. package/package.json +1 -1
  54. package/src/server/cloudflare-tunnel/e2e.test.ts +2 -0
  55. package/src/server/cloudflare-tunnel/read-model.test.ts +5 -7
  56. package/src/server/cloudflare-tunnel/read-model.ts +6 -2
  57. package/src/server/cloudflare-tunnel/tunnel-manager.adapter.ts +20 -4
  58. package/src/server/cloudflare-tunnel/tunnel-manager.test.ts +54 -0
  59. package/src/server/cloudflare-tunnel/tunnel-reachability.adapter.test.ts +45 -0
  60. package/src/server/cloudflare-tunnel/tunnel-reachability.adapter.ts +97 -0
  61. package/src/shared/settings/cloudflare-tunnel.ts +1 -1
  62. package/dist/client/assets/minus-Cr55u0-M.js +0 -1
  63. package/dist/client/assets/runDetached-BJ8sTmI_.js +0 -1
@@ -1 +1 @@
1
- import{o as e}from"./rolldown-runtime-BCiCTKAo.js";import{t}from"./react-BWPDF9mI.js";import{t as n}from"./jsx-runtime-BB9-612F.js";import{d as r,f as i,i as a,l as o,n as s,r as c,t as l}from"./pendingActionsStore-Dxvq78CS.js";import{t as u}from"./plus-DYBSDYfu.js";import{f as d,i as f,l as p,t as m}from"./log-CqB88hyY.js";import{t as h}from"./input-BpTxjU7c.js";import{bt as g,un as _,vt as v,yt as y}from"./index-CgldJgZf.js";import{f as b,h as x,m as S,p as C}from"./ChatPage-BVynEKaw.js";var w=e(t(),1),T=[],E=d()(e=>({templates:T,templatesStatus:`loading`,openMenuId:null,picking:!1,renamingId:null,error:null,setTemplates:t=>e({templates:Array.isArray(t)?t:[],templatesStatus:`ready`}),beginTemplatesLoad:()=>e({templatesStatus:`loading`}),failTemplatesLoad:()=>e({templatesStatus:`failed`}),openMenu:t=>e({openMenuId:t}),closeMenu:()=>e({openMenuId:null}),openPicker:()=>e({picking:!0,error:null}),closePicker:()=>e({picking:!1}),startRename:t=>e({renamingId:t,picking:!1,openMenuId:null}),stopRename:()=>e({renamingId:null}),setError:t=>e({error:t})}));function D(e){return e.templates}var O=e(n(),1),k=[`board.update`,`board.duplicate`,`board.saveAsTemplate`,`board.archive`];function A(e){return a(t=>k.some(n=>t.inFlight[l(n,e)]===!0))}function j({ownerKind:e,ownerId:t,ownerName:n,socket:r,onOpenBoard:i}){let a=C(e,t),d=x(S(a)),h=E(D),g=E(e=>e.picking),_=E(e=>e.renamingId),v=E(e=>e.error),y=E(e=>e.templatesStatus),b=l(`board.create`,a),T=c(b),{openPicker:k,closePicker:A,startRename:j,stopRename:N,setError:P,setTemplates:I}=E.getState();(0,w.useEffect)(()=>r.subscribe({type:`boards`,ownerKind:e,ownerId:t},e=>{x.getState().setBoards(C(e.ownerKind,e.ownerId),e.boards)}),[e,t,r]),(0,w.useEffect)(()=>{let e=!1,t=E.getState();return t.templatesStatus!==`ready`&&t.beginTemplatesLoad(),r.command({type:`board.templates.list`}).then(t=>{e||I(t)},f(t=>{m.error(p,`board.templates.list failed`,t),e||E.getState().failTemplatesLoad()})),()=>{e=!0}},[r,I]);let L=(0,w.useCallback)(async e=>{try{return await r.command(e),P(null),!0}catch(e){return P(e instanceof Error?e.message:`That did not work.`),!1}},[r,P]),R=(0,w.useCallback)(n=>{s(b,async()=>{await L({type:`board.create`,ownerKind:e,ownerId:t,title:n?n.name:`Untitled board`,templateId:n?.id??null})&&A()})},[A,b,e,t,L]),z=(0,w.useCallback)((e,t)=>{N();let n=t.trim();n!==``&&s(l(`board.update`,e),()=>L({type:`board.update`,boardId:e,title:n}))},[L,N]),B=g||d.length===0;return(0,O.jsxs)(`div`,{className:`flex min-h-0 min-w-0 flex-1 flex-col bg-background`,children:[(0,O.jsxs)(`header`,{className:`flex items-end justify-between gap-4 border-b border-border px-6 py-4`,children:[(0,O.jsxs)(`div`,{className:`min-w-0`,children:[(0,O.jsx)(`h1`,{className:`text-lg font-medium leading-tight tracking-[-0.01em] text-foreground`,children:`Boards`}),(0,O.jsxs)(`p`,{className:`truncate text-13 text-muted-foreground`,children:[n,d.length>0?(0,O.jsxs)(`span`,{className:`tabular-nums`,children:[` · `,d.length,` boards`]}):null]})]}),d.length>0?(0,O.jsxs)(o,{size:`sm`,onClick:k,pending:T,children:[(0,O.jsx)(u,{className:`size-3.5`}),`New board`]}):null]}),v?(0,O.jsx)(`p`,{className:`border-b border-border px-6 py-2 text-13 text-destructive-text`,children:v}):null,(0,O.jsxs)(`div`,{className:`min-h-0 flex-1 overflow-y-auto`,children:[B?(0,O.jsx)(F,{templates:h,templatesStatus:y,creating:T,firstRun:d.length===0,onPick:R,onCancel:A}):null,d.length>0?(0,O.jsx)(`ul`,{className:`px-4 py-1`,children:d.map(e=>(0,O.jsx)(M,{board:e,renaming:_===e.id,onOpen:i,onStartRename:j,onRename:z,onCancelRename:N,onCommand:L},e.id))}):null]})]})}function M({board:e,renaming:t,onOpen:n,onStartRename:r,onRename:i,onCancelRename:a,onCommand:o}){let s=A(e.id),c=(0,w.useCallback)(()=>n(e.id),[e.id,n]),l=(0,w.useCallback)(t=>{t.key===`Enter`&&i(e.id,t.currentTarget.value),t.key===`Escape`&&a()},[e.id,a,i]),u=(0,w.useCallback)(t=>i(e.id,t.currentTarget.value),[e.id,i]);return(0,O.jsxs)(`li`,{"aria-busy":s||void 0,className:`group grid grid-cols-[1fr_auto_auto] items-center gap-5 border-b border-border px-3 py-3 last:border-b-0 hover:bg-secondary`,children:[(0,O.jsx)(`div`,{className:`min-w-0`,children:t?(0,O.jsx)(h,{autoFocus:!0,defaultValue:e.title,onKeyDown:l,onBlur:u,className:`h-7 max-w-sm`,"aria-label":`Board name`}):(0,O.jsxs)(`button`,{type:`button`,onClick:c,className:`block w-full text-left`,children:[(0,O.jsx)(`span`,{className:`block truncate text-15 font-semibold tracking-[-0.005em] text-foreground`,children:e.title}),e.description?(0,O.jsx)(`span`,{className:`mt-0.5 block truncate text-13 text-muted-foreground`,children:e.description}):null]})}),(0,O.jsxs)(`div`,{className:`flex items-center gap-4 text-xs text-muted-foreground`,children:[(0,O.jsxs)(`span`,{children:[(0,O.jsx)(`b`,{className:`font-medium tabular-nums text-foreground`,children:e.columnCount}),` columns`]}),(0,O.jsxs)(`span`,{children:[(0,O.jsx)(`b`,{className:`font-medium tabular-nums text-foreground`,children:e.cardCount}),` cards`]})]}),(0,O.jsx)(N,{board:e,pending:s,onStartRename:r,onCommand:o})]})}function N({board:e,pending:t,onStartRename:n,onCommand:a}){let o=E(t=>t.openMenuId===e.id),{openMenu:c,closeMenu:u}=E.getState(),d=(0,w.useCallback)(t=>{t?c(e.id):u()},[e.id,u,c]),f=(0,w.useCallback)(()=>{u(),n(e.id)},[e.id,u,n]),p=(0,w.useCallback)(()=>{u(),s(l(`board.duplicate`,e.id),()=>a({type:`board.duplicate`,boardId:e.id,title:`${e.title} copy`}))},[e.id,e.title,u,a]),m=(0,w.useCallback)(()=>{u(),s(l(`board.saveAsTemplate`,e.id),()=>a({type:`board.saveAsTemplate`,boardId:e.id,name:e.title}))},[e.id,e.title,u,a]),h=(0,w.useCallback)(()=>{u(),s(l(`board.archive`,e.id),()=>a({type:`board.archive`,boardId:e.id}))},[e.id,u,a]);return(0,O.jsxs)(v,{open:o,onOpenChange:d,children:[(0,O.jsx)(g,{asChild:!0,children:(0,O.jsx)(`button`,{type:`button`,"aria-label":`Actions for ${e.title}`,disabled:t,"aria-busy":t||void 0,className:i(`rounded-md px-1.5 py-1 text-muted-foreground opacity-0 transition-opacity group-hover:opacity-100 data-[state=open]:opacity-100`,t&&`opacity-100`),children:t?(0,O.jsx)(r,{className:`size-4`}):(0,O.jsx)(_,{className:`size-4`})})}),(0,O.jsxs)(y,{align:`end`,className:`w-56 p-1`,children:[(0,O.jsx)(P,{onClick:f,children:`Rename`}),(0,O.jsx)(P,{onClick:p,children:`Duplicate structure`}),(0,O.jsx)(P,{onClick:m,children:`Save as template`}),(0,O.jsx)(`div`,{className:`my-1 h-px bg-border`}),(0,O.jsx)(P,{onClick:h,tone:`destructive`,children:`Archive`})]})]})}function P({onClick:e,children:t,tone:n}){return(0,O.jsx)(`button`,{type:`button`,onClick:e,className:i(`flex w-full items-center rounded-sm px-2 py-1.5 text-left text-xs font-medium hover:bg-secondary`,n===`destructive`&&`text-destructive-text`),children:t})}function F({templates:e,templatesStatus:t,creating:n,firstRun:i,onPick:a,onCancel:s}){let c=(0,w.useCallback)(()=>a(null),[a]);return(0,O.jsxs)(`div`,{className:`px-6 py-8`,children:[i?(0,O.jsxs)(O.Fragment,{children:[(0,O.jsx)(`h2`,{className:`text-15 font-semibold text-foreground`,children:`No boards yet.`}),(0,O.jsx)(`p`,{className:`mt-1 max-w-[58ch] text-sm text-muted-foreground`,children:`A board turns issues into work your agents can pick up. Start from a shape, or import an existing tracker.`})]}):(0,O.jsx)(`h2`,{className:`text-15 font-semibold text-foreground`,children:`Start from a shape`}),(0,O.jsxs)(`div`,{className:`mt-4 max-w-xl rounded-lg border border-border`,"aria-busy":n||void 0,children:[e.map(e=>(0,O.jsx)(I,{template:e,disabled:n,onPick:a},e.id)),t===`loading`?(0,O.jsxs)(`p`,{role:`status`,className:`flex items-center gap-2 px-3.5 py-2.5 text-xs text-muted-foreground`,children:[(0,O.jsx)(r,{}),`Loading templates…`]}):null,t===`failed`?(0,O.jsx)(`p`,{className:`px-3.5 py-2.5 text-xs text-muted-foreground`,children:`Couldn't load templates.`}):null,(0,O.jsx)(`button`,{type:`button`,onClick:c,disabled:n,className:`flex w-full items-center border-t border-border px-3.5 py-2.5 text-left hover:bg-secondary disabled:pointer-events-none disabled:opacity-60`,children:(0,O.jsxs)(`span`,{children:[(0,O.jsx)(`span`,{className:`block text-sm font-medium text-foreground`,children:`Empty board`}),(0,O.jsx)(`span`,{className:`block text-xs text-muted-foreground`,children:`Name your own columns`})]})})]}),n?(0,O.jsxs)(`p`,{role:`status`,className:`mt-3 flex items-center gap-2 text-xs text-muted-foreground`,children:[(0,O.jsx)(r,{}),`Creating board…`]}):null,i?null:(0,O.jsx)(o,{variant:`ghost`,size:`sm`,className:`mt-3`,onClick:s,children:`Cancel`})]})}function I({template:e,disabled:t,onPick:n}){let r=(0,w.useCallback)(()=>n(e),[n,e]),a=e.definition.columns;return(0,O.jsxs)(`button`,{type:`button`,onClick:r,disabled:t,className:`flex w-full items-center gap-3 border-b border-border px-3.5 py-2.5 text-left last:border-b-0 hover:bg-secondary disabled:pointer-events-none disabled:opacity-60`,children:[(0,O.jsxs)(`span`,{className:`min-w-0`,children:[(0,O.jsx)(`span`,{className:`block text-sm font-medium text-foreground`,children:e.name}),(0,O.jsx)(`span`,{className:`block truncate text-xs text-muted-foreground`,children:a.map(e=>e.title).join(` · `)})]}),(0,O.jsx)(`span`,{"aria-hidden":!0,className:`ml-auto flex shrink-0 gap-1`,children:a.map((t,n)=>(0,O.jsx)(`span`,{className:i(`size-1.5 rounded-full`,t.colorToken?b[t.colorToken]:`bg-muted-icon`)},`${e.id}-${String(n)}`))})]})}export{j as t};
1
+ import{o as e}from"./rolldown-runtime-BCiCTKAo.js";import{t}from"./react-BWPDF9mI.js";import{t as n}from"./jsx-runtime-BB9-612F.js";import{d as r,f as i,i as a,l as o,n as s,r as c,t as l}from"./pendingActionsStore-BEJnZIRD.js";import{t as u}from"./plus-CVyLwE7_.js";import{f as d,i as f,l as p,t as m}from"./log-DxnWb_y2.js";import{t as h}from"./input-BY7tE022.js";import{bt as g,un as _,vt as v,yt as y}from"./index-CRk0GD4y.js";import{f as b,h as x,m as S,p as C}from"./ChatPage-CUa9Mlv0.js";var w=e(t(),1),T=[],E=d()(e=>({templates:T,templatesStatus:`loading`,openMenuId:null,picking:!1,renamingId:null,error:null,setTemplates:t=>e({templates:Array.isArray(t)?t:[],templatesStatus:`ready`}),beginTemplatesLoad:()=>e({templatesStatus:`loading`}),failTemplatesLoad:()=>e({templatesStatus:`failed`}),openMenu:t=>e({openMenuId:t}),closeMenu:()=>e({openMenuId:null}),openPicker:()=>e({picking:!0,error:null}),closePicker:()=>e({picking:!1}),startRename:t=>e({renamingId:t,picking:!1,openMenuId:null}),stopRename:()=>e({renamingId:null}),setError:t=>e({error:t})}));function D(e){return e.templates}var O=e(n(),1),k=[`board.update`,`board.duplicate`,`board.saveAsTemplate`,`board.archive`];function A(e){return a(t=>k.some(n=>t.inFlight[l(n,e)]===!0))}function j({ownerKind:e,ownerId:t,ownerName:n,socket:r,onOpenBoard:i}){let a=C(e,t),d=x(S(a)),h=E(D),g=E(e=>e.picking),_=E(e=>e.renamingId),v=E(e=>e.error),y=E(e=>e.templatesStatus),b=l(`board.create`,a),T=c(b),{openPicker:k,closePicker:A,startRename:j,stopRename:N,setError:P,setTemplates:I}=E.getState();(0,w.useEffect)(()=>r.subscribe({type:`boards`,ownerKind:e,ownerId:t},e=>{x.getState().setBoards(C(e.ownerKind,e.ownerId),e.boards)}),[e,t,r]),(0,w.useEffect)(()=>{let e=!1,t=E.getState();return t.templatesStatus!==`ready`&&t.beginTemplatesLoad(),r.command({type:`board.templates.list`}).then(t=>{e||I(t)},f(t=>{m.error(p,`board.templates.list failed`,t),e||E.getState().failTemplatesLoad()})),()=>{e=!0}},[r,I]);let L=(0,w.useCallback)(async e=>{try{return await r.command(e),P(null),!0}catch(e){return P(e instanceof Error?e.message:`That did not work.`),!1}},[r,P]),R=(0,w.useCallback)(n=>{s(b,async()=>{await L({type:`board.create`,ownerKind:e,ownerId:t,title:n?n.name:`Untitled board`,templateId:n?.id??null})&&A()})},[A,b,e,t,L]),z=(0,w.useCallback)((e,t)=>{N();let n=t.trim();n!==``&&s(l(`board.update`,e),()=>L({type:`board.update`,boardId:e,title:n}))},[L,N]),B=g||d.length===0;return(0,O.jsxs)(`div`,{className:`flex min-h-0 min-w-0 flex-1 flex-col bg-background`,children:[(0,O.jsxs)(`header`,{className:`flex items-end justify-between gap-4 border-b border-border px-6 py-4`,children:[(0,O.jsxs)(`div`,{className:`min-w-0`,children:[(0,O.jsx)(`h1`,{className:`text-lg font-medium leading-tight tracking-[-0.01em] text-foreground`,children:`Boards`}),(0,O.jsxs)(`p`,{className:`truncate text-13 text-muted-foreground`,children:[n,d.length>0?(0,O.jsxs)(`span`,{className:`tabular-nums`,children:[` · `,d.length,` boards`]}):null]})]}),d.length>0?(0,O.jsxs)(o,{size:`sm`,onClick:k,pending:T,children:[(0,O.jsx)(u,{className:`size-3.5`}),`New board`]}):null]}),v?(0,O.jsx)(`p`,{className:`border-b border-border px-6 py-2 text-13 text-destructive-text`,children:v}):null,(0,O.jsxs)(`div`,{className:`min-h-0 flex-1 overflow-y-auto`,children:[B?(0,O.jsx)(F,{templates:h,templatesStatus:y,creating:T,firstRun:d.length===0,onPick:R,onCancel:A}):null,d.length>0?(0,O.jsx)(`ul`,{className:`px-4 py-1`,children:d.map(e=>(0,O.jsx)(M,{board:e,renaming:_===e.id,onOpen:i,onStartRename:j,onRename:z,onCancelRename:N,onCommand:L},e.id))}):null]})]})}function M({board:e,renaming:t,onOpen:n,onStartRename:r,onRename:i,onCancelRename:a,onCommand:o}){let s=A(e.id),c=(0,w.useCallback)(()=>n(e.id),[e.id,n]),l=(0,w.useCallback)(t=>{t.key===`Enter`&&i(e.id,t.currentTarget.value),t.key===`Escape`&&a()},[e.id,a,i]),u=(0,w.useCallback)(t=>i(e.id,t.currentTarget.value),[e.id,i]);return(0,O.jsxs)(`li`,{"aria-busy":s||void 0,className:`group grid grid-cols-[1fr_auto_auto] items-center gap-5 border-b border-border px-3 py-3 last:border-b-0 hover:bg-secondary`,children:[(0,O.jsx)(`div`,{className:`min-w-0`,children:t?(0,O.jsx)(h,{autoFocus:!0,defaultValue:e.title,onKeyDown:l,onBlur:u,className:`h-7 max-w-sm`,"aria-label":`Board name`}):(0,O.jsxs)(`button`,{type:`button`,onClick:c,className:`block w-full text-left`,children:[(0,O.jsx)(`span`,{className:`block truncate text-15 font-semibold tracking-[-0.005em] text-foreground`,children:e.title}),e.description?(0,O.jsx)(`span`,{className:`mt-0.5 block truncate text-13 text-muted-foreground`,children:e.description}):null]})}),(0,O.jsxs)(`div`,{className:`flex items-center gap-4 text-xs text-muted-foreground`,children:[(0,O.jsxs)(`span`,{children:[(0,O.jsx)(`b`,{className:`font-medium tabular-nums text-foreground`,children:e.columnCount}),` columns`]}),(0,O.jsxs)(`span`,{children:[(0,O.jsx)(`b`,{className:`font-medium tabular-nums text-foreground`,children:e.cardCount}),` cards`]})]}),(0,O.jsx)(N,{board:e,pending:s,onStartRename:r,onCommand:o})]})}function N({board:e,pending:t,onStartRename:n,onCommand:a}){let o=E(t=>t.openMenuId===e.id),{openMenu:c,closeMenu:u}=E.getState(),d=(0,w.useCallback)(t=>{t?c(e.id):u()},[e.id,u,c]),f=(0,w.useCallback)(()=>{u(),n(e.id)},[e.id,u,n]),p=(0,w.useCallback)(()=>{u(),s(l(`board.duplicate`,e.id),()=>a({type:`board.duplicate`,boardId:e.id,title:`${e.title} copy`}))},[e.id,e.title,u,a]),m=(0,w.useCallback)(()=>{u(),s(l(`board.saveAsTemplate`,e.id),()=>a({type:`board.saveAsTemplate`,boardId:e.id,name:e.title}))},[e.id,e.title,u,a]),h=(0,w.useCallback)(()=>{u(),s(l(`board.archive`,e.id),()=>a({type:`board.archive`,boardId:e.id}))},[e.id,u,a]);return(0,O.jsxs)(v,{open:o,onOpenChange:d,children:[(0,O.jsx)(g,{asChild:!0,children:(0,O.jsx)(`button`,{type:`button`,"aria-label":`Actions for ${e.title}`,disabled:t,"aria-busy":t||void 0,className:i(`rounded-md px-1.5 py-1 text-muted-foreground opacity-0 transition-opacity group-hover:opacity-100 data-[state=open]:opacity-100`,t&&`opacity-100`),children:t?(0,O.jsx)(r,{className:`size-4`}):(0,O.jsx)(_,{className:`size-4`})})}),(0,O.jsxs)(y,{align:`end`,className:`w-56 p-1`,children:[(0,O.jsx)(P,{onClick:f,children:`Rename`}),(0,O.jsx)(P,{onClick:p,children:`Duplicate structure`}),(0,O.jsx)(P,{onClick:m,children:`Save as template`}),(0,O.jsx)(`div`,{className:`my-1 h-px bg-border`}),(0,O.jsx)(P,{onClick:h,tone:`destructive`,children:`Archive`})]})]})}function P({onClick:e,children:t,tone:n}){return(0,O.jsx)(`button`,{type:`button`,onClick:e,className:i(`flex w-full items-center rounded-sm px-2 py-1.5 text-left text-xs font-medium hover:bg-secondary`,n===`destructive`&&`text-destructive-text`),children:t})}function F({templates:e,templatesStatus:t,creating:n,firstRun:i,onPick:a,onCancel:s}){let c=(0,w.useCallback)(()=>a(null),[a]);return(0,O.jsxs)(`div`,{className:`px-6 py-8`,children:[i?(0,O.jsxs)(O.Fragment,{children:[(0,O.jsx)(`h2`,{className:`text-15 font-semibold text-foreground`,children:`No boards yet.`}),(0,O.jsx)(`p`,{className:`mt-1 max-w-[58ch] text-sm text-muted-foreground`,children:`A board turns issues into work your agents can pick up. Start from a shape, or import an existing tracker.`})]}):(0,O.jsx)(`h2`,{className:`text-15 font-semibold text-foreground`,children:`Start from a shape`}),(0,O.jsxs)(`div`,{className:`mt-4 max-w-xl rounded-lg border border-border`,"aria-busy":n||void 0,children:[e.map(e=>(0,O.jsx)(I,{template:e,disabled:n,onPick:a},e.id)),t===`loading`?(0,O.jsxs)(`p`,{role:`status`,className:`flex items-center gap-2 px-3.5 py-2.5 text-xs text-muted-foreground`,children:[(0,O.jsx)(r,{}),`Loading templates…`]}):null,t===`failed`?(0,O.jsx)(`p`,{className:`px-3.5 py-2.5 text-xs text-muted-foreground`,children:`Couldn't load templates.`}):null,(0,O.jsx)(`button`,{type:`button`,onClick:c,disabled:n,className:`flex w-full items-center border-t border-border px-3.5 py-2.5 text-left hover:bg-secondary disabled:pointer-events-none disabled:opacity-60`,children:(0,O.jsxs)(`span`,{children:[(0,O.jsx)(`span`,{className:`block text-sm font-medium text-foreground`,children:`Empty board`}),(0,O.jsx)(`span`,{className:`block text-xs text-muted-foreground`,children:`Name your own columns`})]})})]}),n?(0,O.jsxs)(`p`,{role:`status`,className:`mt-3 flex items-center gap-2 text-xs text-muted-foreground`,children:[(0,O.jsx)(r,{}),`Creating board…`]}):null,i?null:(0,O.jsx)(o,{variant:`ghost`,size:`sm`,className:`mt-3`,onClick:s,children:`Cancel`})]})}function I({template:e,disabled:t,onPick:n}){let r=(0,w.useCallback)(()=>n(e),[n,e]),a=e.definition.columns;return(0,O.jsxs)(`button`,{type:`button`,onClick:r,disabled:t,className:`flex w-full items-center gap-3 border-b border-border px-3.5 py-2.5 text-left last:border-b-0 hover:bg-secondary disabled:pointer-events-none disabled:opacity-60`,children:[(0,O.jsxs)(`span`,{className:`min-w-0`,children:[(0,O.jsx)(`span`,{className:`block text-sm font-medium text-foreground`,children:e.name}),(0,O.jsx)(`span`,{className:`block truncate text-xs text-muted-foreground`,children:a.map(e=>e.title).join(` · `)})]}),(0,O.jsx)(`span`,{"aria-hidden":!0,className:`ml-auto flex shrink-0 gap-1`,children:a.map((t,n)=>(0,O.jsx)(`span`,{className:i(`size-1.5 rounded-full`,t.colorToken?b[t.colorToken]:`bg-muted-icon`)},`${e.id}-${String(n)}`))})]})}export{j as t};
@@ -1 +1 @@
1
- import{o as e}from"./rolldown-runtime-BCiCTKAo.js";import{t}from"./react-BWPDF9mI.js";import{l as n,u as r}from"./chunk-OB3PAWPO-zund-gx-.js";import{t as i}from"./jsx-runtime-BB9-612F.js";import{n as a}from"./pathUtils-DTWwEzHK.js";import{ot as o}from"./index-CgldJgZf.js";import{t as s}from"./BoardsPage-R1NeKyda.js";var c=e(t(),1),l=e(i(),1);function u({projectId:e}){let t=r(),i=n(),u=o(t.sidebarData).find(t=>t.groupKey===e),d=u?a(u.localPath):`Project`,f=(0,c.useCallback)(t=>{i(`/boards/${e}/${t}`)},[i,e]);return(0,l.jsx)(`div`,{className:`relative flex min-h-0 min-w-0 flex-1 flex-col`,children:(0,l.jsx)(s,{ownerKind:`project`,ownerId:e,ownerName:d,socket:t.socket,onOpenBoard:f})})}export{u as BoardsRoutePage};
1
+ import{o as e}from"./rolldown-runtime-BCiCTKAo.js";import{t}from"./react-BWPDF9mI.js";import{l as n,u as r}from"./chunk-OB3PAWPO-zund-gx-.js";import{t as i}from"./jsx-runtime-BB9-612F.js";import{n as a}from"./pathUtils-DTWwEzHK.js";import{ot as o}from"./index-CRk0GD4y.js";import{t as s}from"./BoardsPage-CcEgSKEH.js";var c=e(t(),1),l=e(i(),1);function u({projectId:e}){let t=r(),i=n(),u=o(t.sidebarData).find(t=>t.groupKey===e),d=u?a(u.localPath):`Project`,f=(0,c.useCallback)(t=>{i(`/boards/${e}/${t}`)},[i,e]);return(0,l.jsx)(`div`,{className:`relative flex min-h-0 min-w-0 flex-1 flex-col`,children:(0,l.jsx)(s,{ownerKind:`project`,ownerId:e,ownerName:d,socket:t.socket,onOpenBoard:f})})}export{u as BoardsRoutePage};