@whoz-oss/coday-client 3.14.0 → 3.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. package/browser/{chunk-CCQglZL5.js → chunk-5LRyprMF.js} +1 -1
  2. package/browser/{chunk-Cqy-kSp8.js → chunk-5t7zJzqM.js} +1 -1
  3. package/browser/{chunk-CGJJDRqH.js → chunk-9CSRlx74.js} +1 -1
  4. package/browser/{chunk-QDqqdtZx.js → chunk-B11WEBEl.js} +1 -1
  5. package/browser/{chunk-BUpmxKd8.js → chunk-B5_o_qhk.js} +1 -1
  6. package/browser/{chunk-DzSHyN8O.js → chunk-BC0acSZF.js} +1 -1
  7. package/browser/{chunk-CNRDeQvk.js → chunk-BIMT-HvS.js} +1 -1
  8. package/browser/{chunk-DKfZ0J0-.js → chunk-BKlwFrFB.js} +1 -1
  9. package/browser/{chunk-Duz7aHYs.js → chunk-BLa2Gx7h.js} +1 -1
  10. package/browser/{chunk-Bz081WAa.js → chunk-BUEM7g7F.js} +1 -1
  11. package/browser/{chunk-CCFtehVS.js → chunk-BVCQOGLR.js} +1 -1
  12. package/browser/chunk-BZMAEe_X.js +1 -0
  13. package/browser/{chunk-DzXp5mWz.js → chunk-B_2kLXvG.js} +1 -1
  14. package/browser/{chunk-BzcZylVP.js → chunk-BfD1F12k.js} +1 -1
  15. package/browser/{chunk-Co3aK_ug.js → chunk-BgHTiTG2.js} +1 -1
  16. package/browser/{chunk-Lt-5ZOWn.js → chunk-Bgy3uCgK.js} +1 -1
  17. package/browser/{chunk-B6GXI9z-.js → chunk-Bh1p6jDj.js} +1 -1
  18. package/browser/{chunk-BUJvZgLu.js → chunk-BhM0bmJW.js} +1 -1
  19. package/browser/{chunk-HHbcGqdi.js → chunk-BhfpLr7-.js} +1 -1
  20. package/browser/{chunk-RPuzC8Su.js → chunk-BlWlE-Cq.js} +1 -1
  21. package/browser/{chunk-BOq6QumJ.js → chunk-Bnic_hdt.js} +1 -1
  22. package/browser/{chunk-BQ7Z34pK.js → chunk-BqKdrvcS.js} +1 -1
  23. package/browser/{chunk-BR4Pl8xo.js → chunk-C4U0w8cP.js} +1 -1
  24. package/browser/{chunk-CfO-PCnU.js → chunk-C5wr-vqf.js} +1 -1
  25. package/browser/{chunk-DQj9SXnH.js → chunk-C6RPhP4t.js} +1 -1
  26. package/browser/{chunk-Wd2dgg4g.js → chunk-C7MXO6BQ.js} +1 -1
  27. package/browser/{chunk-LgALnta4.js → chunk-C9tuHQmZ.js} +1 -1
  28. package/browser/{chunk-DoW9c054.js → chunk-CHrmSvQM.js} +1 -1
  29. package/browser/chunk-CNIfOUla.js +1 -0
  30. package/browser/{chunk-UX95uV76.js → chunk-CUmS2-ak.js} +1 -1
  31. package/browser/{chunk-BWqySSd7.js → chunk-CYMQSJz6.js} +1 -1
  32. package/browser/{chunk-CSa65gP2.js → chunk-CcLheUaL.js} +1 -1
  33. package/browser/{chunk-E-XRHTIB.js → chunk-Ce03Ba0V.js} +1 -1
  34. package/browser/chunk-CebS4RAf.js +1 -0
  35. package/browser/{chunk-DMo8nEUq.js → chunk-Cf3l2UgA.js} +1 -1
  36. package/browser/{chunk-Cqva3eF5.js → chunk-CnnGSYzi.js} +1 -1
  37. package/browser/{chunk-DJtRPrJe.js → chunk-CyUmCedx.js} +1 -1
  38. package/browser/{chunk-iUyWeEFy.js → chunk-CysW_ro-.js} +1 -1
  39. package/browser/{chunk-GHUL_MFq.js → chunk-CyxhAtE7.js} +1 -1
  40. package/browser/{chunk-b9_We0yK.js → chunk-DEsz0fzs.js} +1 -1
  41. package/browser/chunk-DG2FCeMu.js +2 -0
  42. package/browser/{chunk-BSY9MBD-.js → chunk-DTIhOEG_.js} +1 -1
  43. package/browser/{chunk-2R-L-8TB.js → chunk-DTZ7N3wC.js} +1 -1
  44. package/browser/{chunk-DGbegOkt.js → chunk-DX2ZzvT5.js} +1 -1
  45. package/browser/chunk-DXDohTwX.js +1 -0
  46. package/browser/chunk-DYE131qf.js +1 -0
  47. package/browser/{chunk-CS_CmKL0.js → chunk-DYUMiAN8.js} +1 -1
  48. package/browser/{chunk-Di5brgj6.js → chunk-D_vvo2qx.js} +1 -1
  49. package/browser/{chunk-CJIcHr4L.js → chunk-Dd2dq7xg.js} +1 -1
  50. package/browser/{chunk-CZutweoy.js → chunk-Dg6QAZUw.js} +1 -1
  51. package/browser/{chunk-CkwB4YzM.js → chunk-Dj9y_5pr.js} +1 -1
  52. package/browser/{chunk-Hhxvnnlp.js → chunk-DvzNS1Bs.js} +1 -1
  53. package/browser/{chunk-nRV2u7bW.js → chunk-DxxECdrg.js} +1 -1
  54. package/browser/{chunk-rjkvu4Y6.js → chunk-DzicJow4.js} +1 -1
  55. package/browser/{chunk-B64oBHQ_.js → chunk-HSc9fwVS.js} +1 -1
  56. package/browser/{chunk-DfyXf4Lw.js → chunk-Jv7RGmnK.js} +1 -1
  57. package/browser/{chunk-MtaKFhdm.js → chunk-K-fhwl_z.js} +1 -1
  58. package/browser/{chunk-CnFhM0Nt.js → chunk-RxHlNJ_t.js} +1 -1
  59. package/browser/{chunk-BM9I1k6S.js → chunk-XgEfnfT0.js} +1 -1
  60. package/browser/{chunk-D2wlWOWp.js → chunk-ZvcyZV3G.js} +1 -1
  61. package/browser/{chunk-CkXXby9d.js → chunk-fP29MqaN.js} +1 -1
  62. package/browser/{chunk-BESIk8ll.js → chunk-l0HLnBLv.js} +1 -1
  63. package/browser/{chunk-N-tYgqQC.js → chunk-mHtuxvLs.js} +1 -1
  64. package/browser/{chunk-CaAK8DtC.js → chunk-n1eKIk8H.js} +1 -1
  65. package/browser/{chunk-BxnUTBZC.js → chunk-nWqZHM4o.js} +1 -1
  66. package/browser/{chunk-DEr2MMdQ.js → chunk-qARg6ese.js} +1 -1
  67. package/browser/{chunk-Bf1Bttqy.js → chunk-uPxETzZs.js} +5 -5
  68. package/browser/index.html +1 -1
  69. package/browser/{main-4SCUMPDY.js → main-6K2UFGD2.js} +15 -15
  70. package/package.json +1 -1
  71. package/browser/chunk-B9IQiMog.js +0 -1
  72. package/browser/chunk-BUALjXbx.js +0 -1
  73. package/browser/chunk-Bsv9CCXL.js +0 -1
  74. package/browser/chunk-NLyO0ldw.js +0 -1
  75. package/browser/chunk-iamu8zs_.js +0 -1
@@ -1,4 +1,4 @@
1
- import {Z as Ze,Y as Ye$1,E as Et$1,y as yt$3}from'./chunk-Wd2dgg4g.js';import {an as ce,al as yt$1,g,O as Ot$1,F,u as ue,z as zi,y as yT,R as Re,P,Q as c,G,L,U,ap as Vy,h as Rw,i as hr,k as Gn,bA as DC,t as tC,I as Is,A as Ag,q as qC,m as pl,bB as EC,n as bg,v as nC,J as JE,H as Hg,T as Tg,C as Cg,bk as yh,a8 as Zg,D as Fg,E as wC,K as CC,aL as Eo,aM as qn,aO as wt$1,cb as TB,N,p as pe,w as we$1,cd as Hf,a as z$1,b as P$1,c as U$1,ce as _b,S as By,o as iC,x as sC,aw as hl,bo as rC,ax as gl,b6 as Sg,c0 as Ng,ad as Vg,a9 as fC,aa as If,ac as yC,ab as wf,ai as Jg,aj as XC,a3 as UI,ak as Xg,a6 as zI,af as Dg,ag as pT,a5 as vl,aG as fe,ae as Ot$2,cf as _,Y as x,r as bC,cg as sT,ch as Mg,b4 as iT}from'./main-4SCUMPDY.js';import {W}from'./chunk-CCFtehVS.js';import {T as Tn$1,c as ce$1}from'./chunk-Bz081WAa.js';import {u as ui,a as me,f as fi,Y as Yt$1,H as He,V as Ve,n as ne}from'./chunk-BSY9MBD-.js';import {t as ti,Y as Ye,Z as Zn,c as cn$1,y as yt$2,w as wt,X as Xt$1}from'./chunk-LgALnta4.js';var bt=(()=>{class n{static \u0275fac=function(i){return new(i||n)};static \u0275mod=Eo({type:n});static \u0275inj=qn({imports:[wt$1]})}return n})();var Tt=(n,t)=>({subThreads:n,depth:t}),Ot=n=>({subThreads:n,depth:1}),xt=(n,t)=>t.id,kt=(n,t)=>t.label;function Et(n,t){if(n&1){let e=fC();Is(0,"mat-icon",10),Ag("click",function(o){If(e);let s=yC().$implicit,f=yC(3);return wf(f.toggleSubThreads(o,s.id))}),qC(1),pl();}if(n&2){let e=yC().$implicit,i=yC(3);JE(),Zg(i.isParentExpanded(e.id)?"expand_more":"chevron_right");}}function Dt(n,t){n&1&&Mg(0);}function Nt(n,t){if(n&1&&Dg(0,Dt,1,0,"ng-container",11),n&2){let e=yC().$implicit,i=yC().depth;yC();let o=bC(1);Tg("ngTemplateOutlet",o)("ngTemplateOutletContext",sT(2,Tt,e.subThreads,i+1));}}function jt(n,t){if(n&1){let e=fC();Is(0,"div",5)(1,"a",6),Ag("click",function(o){let s=If(e).$implicit;return yC(3).selectThread(s.id),wf(o.preventDefault())})("keydown.enter",function(o){let s=If(e).$implicit;return yC(3).selectThread(s.id),wf(o.preventDefault())})("keydown.space",function(o){let s=If(e).$implicit;return yC(3).selectThread(s.id),wf(o.preventDefault())}),tC(2,Et,2,1,"mat-icon",7),Is(3,"span",8),qC(4),pl(),Is(5,"span",9),qC(6),pl()()(),tC(7,Nt,1,5,"ng-container");}if(n&2){let e=t.$implicit,i=yC().depth,o=yC(2);Vg("--sub-depth",i),Hg("current",e.id===o.currentThread()?.id),JE(2),nC(e.subThreads?.length?2:-1),JE(2),Zg(e.delegatedAgentName||"Agent"),JE(2),Zg(e.delegatedTask||e.name),JE(),nC(o.isParentExpanded(e.id)&&e.subThreads?.length?7:-1);}}function Vt(n,t){if(n&1&&iC(0,jt,8,8,null,null,xt),n&2){let e=t.subThreads;sC(e);}}function Ft(n,t){n&1&&(Is(0,"div",4),bg(1,"span",12),Is(2,"span",13),qC(3,"Loading threads..."),pl()());}function It(n,t){if(n&1&&(Is(0,"div",27),qC(1),pl()),n&2){let e=yC(6);JE(),Zg(e.renameErrorMessage);}}function zt(n,t){if(n&1){let e=fC();Is(0,"div",18)(1,"input",26),Jg("ngModelChange",function(o){If(e);let s=yC(5);return XC(s.editingThreadName,o)||(s.editingThreadName=o),wf(o)}),Ag("keydown",function(o){If(e);let s=yC(5);return wf(s.onEditKeydown(o))})("blur",function(){If(e);let o=yC(5);return wf(o.onEditBlur())})("click",function(o){return o.stopPropagation()}),pl(),UI(),tC(2,It,2,1,"div",27),pl();}if(n&2){let e=yC(5);JE(),Xg("ngModel",e.editingThreadName),Tg("disabled",e.isRenamingThread),zI(),JE(),nC(e.renameErrorMessage?2:-1);}}function At(n,t){if(n&1){let e=fC();Is(0,"mat-icon",10),Ag("click",function(o){If(e);let s=yC(2).$implicit,f=yC(4);return wf(f.toggleSubThreads(o,s.id))}),qC(1),pl();}if(n&2){let e=yC(2).$implicit,i=yC(4);JE(),Zg(i.isParentExpanded(e.id)?"expand_more":"chevron_right");}}function Lt(n,t){if(n&1&&(Is(0,"span",29),qC(1),pl()),n&2){let e=yC(2).$implicit;JE(),Zg(e.name);}}function Rt(n,t){n&1&&(bg(0,"mat-spinner",31),Is(1,"span",32),qC(2,"Generating name..."),pl()),n&2&&Tg("diameter",16);}function $t(n,t){n&1&&(Is(0,"mat-icon",30),qC(1,"group"),pl());}function Bt(n,t){if(n&1){let e=fC();Is(0,"a",28),Ag("click",function(o){If(e);let s=yC().$implicit;return yC(4).selectThread(s.id),wf(o.preventDefault())})("keydown.enter",function(o){If(e);let s=yC().$implicit;return yC(4).selectThread(s.id),wf(o.preventDefault())})("keydown.space",function(o){If(e);let s=yC().$implicit;return yC(4).selectThread(s.id),wf(o.preventDefault())}),tC(1,At,2,1,"mat-icon",7),tC(2,Lt,2,1,"span",29)(3,Rt,3,1),tC(4,$t,2,0,"mat-icon",30),pl();}if(n&2){let e=yC().$implicit,i=yC(4);Tg("matTooltip",e.name?e.name+`
1
+ import {Z as Ze,Y as Ye$1,E as Et$1,y as yt$3}from'./chunk-C7MXO6BQ.js';import {an as ce,al as yt$1,g,O as Ot$1,F,u as ue,z as zi,y as yT,R as Re,P,Q as c,G,L,U,ap as Vy,h as Rw,i as hr,k as Gn,bA as DC,t as tC,I as Is,A as Ag,q as qC,m as pl,bB as EC,n as bg,v as nC,J as JE,H as Hg,T as Tg,C as Cg,bk as yh,a8 as Zg,D as Fg,E as wC,K as CC,aL as Eo,aM as qn,aO as wt$1,cb as TB,N,p as pe,w as we$1,cd as Hf,a as z$1,b as P$1,c as U$1,ce as _b,S as By,o as iC,x as sC,aw as hl,bo as rC,ax as gl,b6 as Sg,c0 as Ng,ad as Vg,a9 as fC,aa as If,ac as yC,ab as wf,ai as Jg,aj as XC,a3 as UI,ak as Xg,a6 as zI,af as Dg,ag as pT,a5 as vl,aG as fe,ae as Ot$2,cf as _,Y as x,r as bC,cg as sT,ch as Mg,b4 as iT}from'./main-6K2UFGD2.js';import {W}from'./chunk-BVCQOGLR.js';import {T as Tn$1,c as ce$1}from'./chunk-BUEM7g7F.js';import {u as ui,a as me,f as fi,Y as Yt$1,H as He,V as Ve,n as ne}from'./chunk-DTIhOEG_.js';import {t as ti,Y as Ye,Z as Zn,c as cn$1,y as yt$2,w as wt,X as Xt$1}from'./chunk-C9tuHQmZ.js';var bt=(()=>{class n{static \u0275fac=function(i){return new(i||n)};static \u0275mod=Eo({type:n});static \u0275inj=qn({imports:[wt$1]})}return n})();var Tt=(n,t)=>({subThreads:n,depth:t}),Ot=n=>({subThreads:n,depth:1}),xt=(n,t)=>t.id,kt=(n,t)=>t.label;function Et(n,t){if(n&1){let e=fC();Is(0,"mat-icon",10),Ag("click",function(o){If(e);let s=yC().$implicit,f=yC(3);return wf(f.toggleSubThreads(o,s.id))}),qC(1),pl();}if(n&2){let e=yC().$implicit,i=yC(3);JE(),Zg(i.isParentExpanded(e.id)?"expand_more":"chevron_right");}}function Dt(n,t){n&1&&Mg(0);}function Nt(n,t){if(n&1&&Dg(0,Dt,1,0,"ng-container",11),n&2){let e=yC().$implicit,i=yC().depth;yC();let o=bC(1);Tg("ngTemplateOutlet",o)("ngTemplateOutletContext",sT(2,Tt,e.subThreads,i+1));}}function jt(n,t){if(n&1){let e=fC();Is(0,"div",5)(1,"a",6),Ag("click",function(o){let s=If(e).$implicit;return yC(3).selectThread(s.id),wf(o.preventDefault())})("keydown.enter",function(o){let s=If(e).$implicit;return yC(3).selectThread(s.id),wf(o.preventDefault())})("keydown.space",function(o){let s=If(e).$implicit;return yC(3).selectThread(s.id),wf(o.preventDefault())}),tC(2,Et,2,1,"mat-icon",7),Is(3,"span",8),qC(4),pl(),Is(5,"span",9),qC(6),pl()()(),tC(7,Nt,1,5,"ng-container");}if(n&2){let e=t.$implicit,i=yC().depth,o=yC(2);Vg("--sub-depth",i),Hg("current",e.id===o.currentThread()?.id),JE(2),nC(e.subThreads?.length?2:-1),JE(2),Zg(e.delegatedAgentName||"Agent"),JE(2),Zg(e.delegatedTask||e.name),JE(),nC(o.isParentExpanded(e.id)&&e.subThreads?.length?7:-1);}}function Vt(n,t){if(n&1&&iC(0,jt,8,8,null,null,xt),n&2){let e=t.subThreads;sC(e);}}function Ft(n,t){n&1&&(Is(0,"div",4),bg(1,"span",12),Is(2,"span",13),qC(3,"Loading threads..."),pl()());}function It(n,t){if(n&1&&(Is(0,"div",27),qC(1),pl()),n&2){let e=yC(6);JE(),Zg(e.renameErrorMessage);}}function zt(n,t){if(n&1){let e=fC();Is(0,"div",18)(1,"input",26),Jg("ngModelChange",function(o){If(e);let s=yC(5);return XC(s.editingThreadName,o)||(s.editingThreadName=o),wf(o)}),Ag("keydown",function(o){If(e);let s=yC(5);return wf(s.onEditKeydown(o))})("blur",function(){If(e);let o=yC(5);return wf(o.onEditBlur())})("click",function(o){return o.stopPropagation()}),pl(),UI(),tC(2,It,2,1,"div",27),pl();}if(n&2){let e=yC(5);JE(),Xg("ngModel",e.editingThreadName),Tg("disabled",e.isRenamingThread),zI(),JE(),nC(e.renameErrorMessage?2:-1);}}function At(n,t){if(n&1){let e=fC();Is(0,"mat-icon",10),Ag("click",function(o){If(e);let s=yC(2).$implicit,f=yC(4);return wf(f.toggleSubThreads(o,s.id))}),qC(1),pl();}if(n&2){let e=yC(2).$implicit,i=yC(4);JE(),Zg(i.isParentExpanded(e.id)?"expand_more":"chevron_right");}}function Lt(n,t){if(n&1&&(Is(0,"span",29),qC(1),pl()),n&2){let e=yC(2).$implicit;JE(),Zg(e.name);}}function Rt(n,t){n&1&&(bg(0,"mat-spinner",31),Is(1,"span",32),qC(2,"Generating name..."),pl()),n&2&&Tg("diameter",16);}function $t(n,t){n&1&&(Is(0,"mat-icon",30),qC(1,"group"),pl());}function Bt(n,t){if(n&1){let e=fC();Is(0,"a",28),Ag("click",function(o){If(e);let s=yC().$implicit;return yC(4).selectThread(s.id),wf(o.preventDefault())})("keydown.enter",function(o){If(e);let s=yC().$implicit;return yC(4).selectThread(s.id),wf(o.preventDefault())})("keydown.space",function(o){If(e);let s=yC().$implicit;return yC(4).selectThread(s.id),wf(o.preventDefault())}),tC(1,At,2,1,"mat-icon",7),tC(2,Lt,2,1,"span",29)(3,Rt,3,1),tC(4,$t,2,0,"mat-icon",30),pl();}if(n&2){let e=yC().$implicit,i=yC(4);Tg("matTooltip",e.name?e.name+`
2
2
 
3
3
  `+(e.summary||""):e.summary||"")("matTooltipDisabled",!e.summary),JE(),nC(e.subThreads?.length?1:-1),JE(),nC(e.name?2:3),JE(2),nC(i.isSharedThread(e)?4:-1);}}function Ut(n,t){if(n&1){let e=fC();Is(0,"button",33),Ag("click",function(o){If(e);let s=yC().$implicit,f=yC(4);return wf(f.startEditingThreadName(o,s))}),Is(1,"mat-icon"),qC(2,"edit"),pl()();}}function Xt(n,t){if(n&1){let e=fC();Is(0,"button",34),Ag("click",function(o){If(e);let s=yC().$implicit,f=yC(4);return wf(f.markActive(o,s))}),Is(1,"mat-icon"),qC(2,"replay"),pl()();}}function Qt(n,t){if(n&1){let e=fC();Is(0,"button",35),Ag("click",function(o){If(e);let s=yC().$implicit,f=yC(4);return wf(f.markDone(o,s))}),Is(1,"mat-icon"),qC(2,"check_circle_outline"),pl()();}}function Gt(n,t){n&1&&Mg(0);}function Ht(n,t){if(n&1&&Dg(0,Gt,1,0,"ng-container",11),n&2){let e=yC().$implicit;yC(3);let i=bC(1);Tg("ngTemplateOutlet",i)("ngTemplateOutletContext",iT(2,Ot,e.subThreads));}}function qt(n,t){if(n&1){let e=fC();Is(0,"div",17),tC(1,zt,3,3,"div",18)(2,Bt,5,5,"a",19),Is(3,"div",20),tC(4,Ut,3,0,"button",21),tC(5,Xt,3,0,"button",22)(6,Qt,3,0,"button",23),Is(7,"button",24),Ag("click",function(o){let s=If(e).$implicit,f=yC(4);return wf(f.toggleStar(o,s))}),Is(8,"mat-icon"),qC(9),pl()(),Is(10,"button",25),Ag("click",function(o){let s=If(e).$implicit,f=yC(4);return wf(f.deleteThread(o,s))}),Is(11,"mat-icon"),qC(12,"delete"),pl()()()(),tC(13,Ht,1,4,"ng-container");}if(n&2){let e=t.$implicit,i=yC(4);Hg("current",e.id===i.currentThread()?.id),JE(),nC(i.editingThreadId===e.id?1:2),JE(3),nC(i.editingThreadId!==e.id&&e.name?4:-1),JE(),nC(e.closedByUser?5:6),JE(2),Hg("starred",i.isStarred(e)),Tg("title",i.isStarred(e)?"Unstar thread":"Star thread"),JE(2),Zg(i.isStarred(e)?"star":"star_outline"),JE(4),nC(i.isParentExpanded(e.id)&&e.subThreads?.length?13:-1);}}function Wt(n,t){if(n&1&&(Is(0,"div",14)(1,"div",16),qC(2),pl(),iC(3,qt,14,10,null,null,xt),pl()),n&2){let e=t.$implicit;JE(2),Zg(e.label),JE(),sC(e.threads);}}function Jt(n,t){n&1&&(Is(0,"div",15),qC(1,"No existing threads"),pl());}function Yt(n,t){if(n&1&&(Is(0,"div",15),qC(1),pl()),n&2){let e=yC(3);JE(),vl('No threads matching "',e.searchQuery(),'"');}}function Zt(n,t){if(n&1&&(iC(0,Wt,5,1,"div",14,kt),tC(2,Jt,2,0,"div",15)(3,Yt,2,1,"div",15)),n&2){let e=yC(2);sC(e.getGroupedThreads()),JE(2),nC(!e.threads()?.length&&!e.searchQuery()?2:e.searchQuery()&&e.getGroupedThreads().length===0?3:-1);}}function Kt(n,t){if(n&1&&(Dg(0,Vt,2,0,"ng-template",null,0,pT),Is(2,"div",3),tC(3,Ft,4,0,"div",4)(4,Zt,4,1),pl()),n&2){let e=yC();JE(3),nC(e.isLoadingThreadList()?3:4);}}function en(n,t){n&1&&(Is(0,"span",36),qC(1,"No project selected"),pl());}function tn(n,t){n&1&&(Is(0,"span",36),qC(1,"Loading..."),pl());}function nn(n,t){if(n&1&&(Is(0,"div",2),tC(1,en,2,0,"span",36)(2,tn,2,0,"span",36),pl()),n&2){let e=yC();JE(),nC(e.currentProject()?.name?2:1);}}var we=class n{projects=null;searchMode=false;searchQuery=TB("");searchModeChange=new yt$1;threadSelected=new yt$1;projectStateService=g(P);threadStateService=g(U);threadApiService=g(N);userService=g(pe);router=g(G);destroyRef=g(we$1);currentThread=F(this.threadStateService.selectedThread$);currentProject=F(this.projectStateService.selectedProject$);threads=F(this.threadStateService.threadList$);isLoadingThreadList=F(this.threadStateService.isLoadingThreadList$);username=F(this.userService.username$);isTouchDevice="ontouchstart"in window||navigator.maxTouchPoints>0;editingThreadId=null;editingThreadName="";isRenamingThread=false;renameErrorMessage="";expandedParents=new Set;constructor(){Hf(()=>{let t=this.currentThread()?.id,e=this.threads();if(!t||!e?.length)return;let i=new Map;for(let s of e)s.parentThreadId&&i.set(s.id,s.parentThreadId);let o=t;for(;o;){let s=i.get(o);s&&this.expandedParents.add(s),o=s;}});}ngOnInit(){this.userService.fetchCurrentUser().subscribe({error:t=>{console.error("[THREAD-SELECTOR] Failed to load current user:",t);}});}selectThread(t){this.threadStateService.selectThread(t),this.threadSelected.emit(),this.router.navigate(["project",this.currentProject()?.name,"thread",t]);}getGroupedThreads(){let t=this.threads();if(!t?.length)return [];let e=new Set(t.map(h=>h.id)),i=t.filter(h=>!h.parentThreadId),o=t.filter(h=>!!h.parentThreadId),s=o.filter(h=>!e.has(h.parentThreadId)),f=o.filter(h=>e.has(h.parentThreadId)),A=new Map;for(let h of f){let O=h.parentThreadId;A.has(O)||A.set(O,[]),A.get(O).push(h);}let J=h=>(A.get(h)||[]).sort((j,I)=>j.modifiedDate>I.modifiedDate?-1:1).map(j=>z$1(P$1({},j),{subThreads:J(j.id)})),L=[...i,...s];if(this.searchQuery()&&this.searchQuery().trim()){let h=this.searchQuery().toLowerCase().trim();L=L.filter(O=>O.name.toLowerCase().includes(h)||O.summary&&O.summary.toLowerCase().includes(h));}if(!L.length)return [];let R=this.username();if(!R)return [];let Ie=L.map(h=>z$1(P$1({},h),{subThreads:J(h.id)})),ze=Ie.filter(h=>h.starring&&h.starring.includes(R)),Mt=Ie.filter(h=>!h.starring||!h.starring.includes(R)),Y=new Map,Ae=new Date;Ae.setHours(0,0,0,0);for(let h of Mt){let O=new Date(h.modifiedDate);O.setHours(0,0,0,0);let j=Ae.getTime()-O.getTime(),I=Math.floor(j/(1e3*60*60*24)),D;I===0?D="Today":I===1?D="Yesterday":I<7?D="This Week":I<30?D="This Month":I<90?D="Last 3 Months":D="Older",Y.has(D)||Y.set(D,[]),Y.get(D).push(h);}let Ee=[];if(ze.length>0){let h=[...ze].sort((O,j)=>O.modifiedDate>j.modifiedDate?-1:1);Ee.push({label:"Starred",threads:h});}return ["Today","Yesterday","This Week","This Month","Last 3 Months","Older"].filter(h=>Y.has(h)).forEach(h=>{Ee.push({label:h,threads:Y.get(h)});}),Ee}isParentExpanded(t){return this.expandedParents.has(t)}toggleSubThreads(t,e){t.stopPropagation(),this.expandedParents.has(e)?this.expandedParents.delete(e):this.expandedParents.add(e);}isSubThread(t){return !!t.parentThreadId}isSharedThread(t){return t.users&&t.users.length>1}isStarred(t){let e=this.username();return !!e&&t.starring&&t.starring.includes(e)}toggleStar(t,e){t.stopPropagation();let i=this.username();if(!i)return;let o=e.starring&&e.starring.includes(i),s=o?this.threadApiService.unstarThread(e.id):this.threadApiService.starThread(e.id);this.threadStateService.updateStarLocal(e.id,!o,i),s.pipe(U$1(this.destroyRef)).subscribe({next:()=>{},error:f=>{console.error("Error toggling star:",f),this.threadStateService.refreshThreadList();}});}markDone(t,e){t.stopPropagation(),this.threadStateService.markDone(e.id);}markActive(t,e){t.stopPropagation(),this.threadStateService.markActive(e.id);}deleteThread(t,e){t.stopPropagation();let i=this.currentProject()?.name;!i||!confirm(`Are you sure you want to delete the thread "${e.name}"?`)||this.threadApiService.deleteThread(e.id).subscribe({next:()=>{this.currentThread()?.id===e.id&&(this.threadStateService.clearSelection(),this.router.navigate(["project",i])),this.threadStateService.refreshThreadList();},error:s=>{console.error("Error deleting thread:",s),alert("Failed to delete thread. Please try again.");}});}formatDate(t){try{let e=new Date(t),o=new Date().getTime()-e.getTime(),s=Math.floor(o/(1e3*60*60*24));return s===0?"Today":s===1?"Yesterday":s<7?`${s} days ago`:e.toLocaleDateString("en-EN",{day:"numeric",month:"short"})}catch(e){return "No date"}}startEditingThreadName(t,e){t.stopPropagation(),this.editingThreadId=e.id,this.editingThreadName=e.name||"",this.renameErrorMessage="",setTimeout(()=>{let i=document.querySelector(".thread-name-input");i&&(i.focus(),i.select());},0);}cancelEditingThreadName(){this.editingThreadId=null,this.editingThreadName="",this.renameErrorMessage="";}saveThreadName(t){if(t&&t.stopPropagation(),!this.editingThreadId)return;let e=this.editingThreadName.trim();if(!e){this.renameErrorMessage="Thread name cannot be empty";return}if(e.length>200){this.renameErrorMessage="Thread name is too long (max 200 characters)";return}let i=this.editingThreadId;this.isRenamingThread=true,this.renameErrorMessage="",this.threadStateService.renameThread(i,e).subscribe({next:()=>{console.log("[THREAD-SELECTOR] Thread renamed successfully"),this.cancelEditingThreadName(),this.isRenamingThread=false;},error:o=>{console.error("[THREAD-SELECTOR] Error renaming thread:",o),this.renameErrorMessage=o.message||"Failed to rename thread",this.isRenamingThread=false;}});}onEditKeydown(t){t.key==="Enter"?(t.preventDefault(),t.stopPropagation(),this.saveThreadName()):t.key==="Escape"&&(t.preventDefault(),t.stopPropagation(),this.cancelEditingThreadName());}onEditBlur(){setTimeout(()=>{this.editingThreadId&&!this.isRenamingThread&&this.saveThreadName();},200);}static \u0275fac=function(e){return new(e||n)};static \u0275cmp=Rw({type:n,selectors:[["app-thread-selector"]],inputs:{searchMode:"searchMode",searchQuery:[1,"searchQuery"]},outputs:{searchModeChange:"searchModeChange",threadSelected:"threadSelected"},decls:3,vars:1,consts:[["subThreadTemplate",""],["tabindex","0","role","application","aria-label","Thread selector",1,"thread-selector",3,"click","keydown"],[1,"thread-disabled"],["role","menu","aria-label","Thread selection",1,"thread-list"],[1,"thread-loading"],[1,"thread-item-wrapper","sub-thread"],["role","menuitem","tabindex","0",1,"thread-item","sub-thread-item",3,"click","keydown.enter","keydown.space"],[1,"sub-thread-toggle"],[1,"sub-thread-agent"],[1,"sub-thread-task"],[1,"sub-thread-toggle",3,"click"],[4,"ngTemplateOutlet","ngTemplateOutletContext"],[1,"loading-spinner"],[1,"loading-text"],[1,"thread-group"],[1,"thread-empty"],[1,"thread-group-header"],[1,"thread-item-wrapper"],[1,"thread-name-edit-wrapper"],["matTooltipShowDelay","1000","role","menuitem","tabindex","0",1,"thread-item",3,"matTooltip","matTooltipDisabled"],[1,"action-buttons"],["mat-icon-button","","title","Rename thread","type","button",1,"action-button","edit-button"],["mat-icon-button","","title","Mark as active","type","button",1,"action-button","mark-active-button"],["mat-icon-button","","title","Mark as done","type","button",1,"action-button","mark-done-button"],["mat-icon-button","","type","button",1,"action-button","star-button",3,"click","title"],["mat-icon-button","","title","Delete thread","type","button",1,"action-button","delete-button",3,"click"],["type","text","maxlength","200",1,"thread-name-input",3,"ngModelChange","keydown","blur","click","ngModel","disabled"],[1,"rename-error"],["matTooltipShowDelay","1000","role","menuitem","tabindex","0",1,"thread-item",3,"click","keydown.enter","keydown.space","matTooltip","matTooltipDisabled"],[1,"thread-name"],["matTooltip","Shared thread",1,"shared-indicator"],[1,"thread-name-spinner",3,"diameter"],[1,"thread-name","thread-name-generating"],["mat-icon-button","","title","Rename thread","type","button",1,"action-button","edit-button",3,"click"],["mat-icon-button","","title","Mark as active","type","button",1,"action-button","mark-active-button",3,"click"],["mat-icon-button","","title","Mark as done","type","button",1,"action-button","mark-done-button",3,"click"],[1,"disabled-text"]],template:function(e,i){e&1&&(Is(0,"div",1),Ag("click",function(s){return s.stopPropagation()})("keydown",function(s){return s.stopPropagation()}),tC(1,Kt,5,1)(2,nn,3,1,"div",2),pl()),e&2&&(JE(),nC(i.currentProject()?.name?1:2));},dependencies:[_b,ti,Ye,Zn,Xt$1,cn$1,yt$2,wt,hr,Gn,Tn$1,ce$1,Et$1,yt$3,Ve,ne],styles:[".thread-selector[_ngcontent-%COMP%]{display:flex;flex-direction:column;width:100%;flex:1;min-height:0;overflow-x:hidden;overflow-y:auto}.thread-list[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:0;max-height:none;overflow:visible}.thread-group[_ngcontent-%COMP%]{display:flex;flex-direction:column;margin-bottom:.5rem}.thread-group[_ngcontent-%COMP%]:last-child{margin-bottom:0}.thread-group-header[_ngcontent-%COMP%]{padding:.5rem 1rem .25rem;font-size:.75rem;font-weight:600;color:var(--color-text-secondary);text-transform:uppercase;letter-spacing:.5px;position:sticky;top:0;background:var(--glass-bg);backdrop-filter:var(--glass-backdrop-blur);-webkit-backdrop-filter:var(--glass-backdrop-blur);z-index:1}.thread-item-wrapper[_ngcontent-%COMP%]{display:flex;align-items:center;position:relative;width:100%;border-radius:0;min-width:0;gap:.25rem}.thread-item-wrapper[_ngcontent-%COMP%]:hover{background:var(--color-bg-hover)}.thread-item-wrapper[_ngcontent-%COMP%]:hover .action-buttons[_ngcontent-%COMP%]{display:flex}.thread-item-wrapper.current[_ngcontent-%COMP%]{background:var(--color-primary-light)}.thread-item-wrapper.current[_ngcontent-%COMP%] .thread-item[_ngcontent-%COMP%]{color:var(--color-primary-text);font-weight:600}.thread-item[_ngcontent-%COMP%]{display:flex;align-items:center;flex:1;min-width:0;padding:.75rem 1rem;text-decoration:none;cursor:pointer;transition:all .2s ease;background:transparent;border:none;border-radius:0;color:var(--color-text);text-align:left;justify-content:flex-start}.thread-item.new-thread-item[_ngcontent-%COMP%]{margin-bottom:.25rem}.thread-item[_ngcontent-%COMP%]:hover{color:var(--color-primary)}.thread-item[_ngcontent-%COMP%]:focus-visible{outline:2px solid var(--color-primary);outline-offset:-2px}.action-buttons[_ngcontent-%COMP%]{display:none;align-items:center;gap:.25rem;flex-shrink:0;margin-right:.5rem}.thread-item-wrapper[_ngcontent-%COMP%]:hover .action-buttons[_ngcontent-%COMP%], .thread-item-wrapper.current[_ngcontent-%COMP%] .action-buttons[_ngcontent-%COMP%]{display:flex}.action-button[_ngcontent-%COMP%]{flex-shrink:0;border-radius:4px!important;width:28px!important;height:28px!important;padding:0!important}.action-button[_ngcontent-%COMP%] .mat-mdc-button-persistent-ripple{border-radius:4px!important}.action-button[_ngcontent-%COMP%]:hover{background:var(--color-bg-hover)!important}.action-button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:18px;width:18px;height:18px}.action-button.edit-button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:18px;width:18px;height:18px}.action-button.edit-button[_ngcontent-%COMP%]:hover{background-color:var(--color-primary-hover)!important}.action-button.edit-button[_ngcontent-%COMP%]:hover mat-icon[_ngcontent-%COMP%]{color:var(--color-primary)}.action-button.star-button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{transition:color .2s ease}.action-button.star-button.starred[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{color:#fbbf24}.action-button.star-button[_ngcontent-%COMP%]:not(.starred):hover mat-icon[_ngcontent-%COMP%]{color:#fbbf24}.action-button.delete-button[_ngcontent-%COMP%]:hover mat-icon[_ngcontent-%COMP%]{color:#ef4444}.action-button.mark-done-button[_ngcontent-%COMP%]:hover mat-icon[_ngcontent-%COMP%]{color:#22c55e}.action-button.mark-active-button[_ngcontent-%COMP%]:hover mat-icon[_ngcontent-%COMP%]{color:var(--color-primary)}.thread-link[_ngcontent-%COMP%]{display:inline-flex;align-items:center;background:transparent;border:none;text-decoration:none;cursor:pointer;transition:all .2s ease;gap:.5rem;font-size:.875rem;font-weight:400;padding:0 1rem;min-width:0}.thread-link[_ngcontent-%COMP%]:hover:not(.new-thread-link){color:var(--color-primary-hover, var(--color-primary));text-decoration:underline;text-decoration-thickness:1.5px;text-underline-offset:3px}.thread-link[_ngcontent-%COMP%]:focus{outline:2px solid var(--color-primary);outline-offset:2px}.thread-link.new-thread-link[_ngcontent-%COMP%]{margin-bottom:.5rem;font-weight:600;font-size:.95rem}.thread-link.new-thread-link[_ngcontent-%COMP%] .thread-name[_ngcontent-%COMP%]{background:linear-gradient(90deg,var(--color-primary, #3b82f6) 0%,var(--color-accent, #8b5cf6) 50%,var(--color-primary, #3b82f6) 100%);background-size:200% auto;background-clip:text;-webkit-background-clip:text;-webkit-text-fill-color:transparent;animation:_ngcontent-%COMP%_gradientShift 3s ease-in-out infinite}.thread-link.new-thread-link[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{color:var(--color-primary);animation:_ngcontent-%COMP%_iconPulse 3s ease-in-out infinite}.thread-link.new-thread-link[_ngcontent-%COMP%]:hover{transform:translate(4px)}.thread-link.new-thread-link[_ngcontent-%COMP%]:hover mat-icon[_ngcontent-%COMP%]{animation:_ngcontent-%COMP%_iconPulse 1.5s ease-in-out infinite}.thread-link[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:20px;width:20px;height:20px}@keyframes _ngcontent-%COMP%_gradientShift{0%{background-position:0 center}50%{background-position:100% center}to{background-position:0 center}}@keyframes _ngcontent-%COMP%_iconPulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.8;transform:scale(1.05)}}.thread-name[_ngcontent-%COMP%]{flex:1;font-size:.875rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-align:left}.thread-name.thread-name-generating[_ngcontent-%COMP%]{color:var(--color-text-muted);font-style:italic}.thread-name-edit-wrapper[_ngcontent-%COMP%]{flex:1;display:flex;flex-direction:column;padding:0 .5rem}.thread-name-input[_ngcontent-%COMP%]{width:100%;padding:.5rem;border:1px solid var(--color-border);border-radius:4px;background:var(--color-bg-secondary);color:var(--color-text-primary);font-size:.9rem;font-family:inherit}.thread-name-input[_ngcontent-%COMP%]:focus{outline:none;border-color:var(--color-primary);box-shadow:0 0 0 2px #3b82f61a}.thread-name-input[_ngcontent-%COMP%]:disabled{opacity:.6;cursor:not-allowed}.rename-error[_ngcontent-%COMP%]{color:var(--color-error);font-size:.75rem;margin-top:.25rem;padding-left:.5rem}.thread-name-spinner[_ngcontent-%COMP%]{flex-shrink:0;margin-right:.5rem}.thread-name-spinner[_ngcontent-%COMP%] .mat-mdc-progress-spinner circle{stroke:var(--color-primary)!important}.current-indicator[_ngcontent-%COMP%]{color:var(--color-success);font-weight:700;flex-shrink:0;font-size:1rem}.thread-separator[_ngcontent-%COMP%]{height:1px;background:var(--color-border);margin:.25rem 0}.thread-empty[_ngcontent-%COMP%]{padding:1.5rem 1rem;text-align:center;color:var(--color-text-muted);font-size:.8rem;font-style:italic}.thread-loading[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:2rem 1rem;gap:.75rem}.thread-loading[_ngcontent-%COMP%] .loading-spinner[_ngcontent-%COMP%]{width:24px;height:24px;border:3px solid var(--color-border);border-top-color:var(--color-primary);border-radius:50%;animation:_ngcontent-%COMP%_spin .8s linear infinite}.thread-loading[_ngcontent-%COMP%] .loading-text[_ngcontent-%COMP%]{color:var(--color-text-muted);font-size:.8rem}@keyframes _ngcontent-%COMP%_spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.thread-disabled[_ngcontent-%COMP%]{padding:1.5rem 1rem}.thread-disabled[_ngcontent-%COMP%] .disabled-text[_ngcontent-%COMP%]{display:block;color:var(--color-text-muted);font-size:.85rem;font-style:italic;text-align:center}.thread-item-wrapper.sub-thread[_ngcontent-%COMP%]{padding-left:calc(.2rem + var(--sub-depth, 1) * 1.5rem);border-left:2px solid var(--color-primary, #3b82f6);margin-left:.75rem}.thread-item-wrapper.sub-thread[_ngcontent-%COMP%] .sub-thread-item[_ngcontent-%COMP%]{padding:.35rem .5rem .35rem 0;gap:.2rem;font-size:.8rem;color:var(--color-text-secondary)}.thread-item-wrapper.sub-thread[_ngcontent-%COMP%] .sub-thread-item[_ngcontent-%COMP%]:hover{color:var(--color-primary)}.thread-item-wrapper.sub-thread[_ngcontent-%COMP%] .sub-thread-agent[_ngcontent-%COMP%]{font-weight:600;color:var(--color-primary);white-space:nowrap;flex-shrink:0;font-size:.8rem}.thread-item-wrapper.sub-thread[_ngcontent-%COMP%] .sub-thread-task[_ngcontent-%COMP%]{color:var(--color-text-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:.75rem}.sub-thread-toggle[_ngcontent-%COMP%]{font-size:16px;width:16px;height:16px;flex-shrink:0;cursor:pointer;color:var(--color-text-secondary);margin-right:.25rem}.sub-thread-toggle[_ngcontent-%COMP%]:hover{color:var(--color-primary)}.shared-indicator[_ngcontent-%COMP%]{font-size:14px;width:14px;height:14px;color:var(--color-text-secondary);flex-shrink:0;margin-left:.25rem}@media(max-width:768px){.thread-item[_ngcontent-%COMP%]{padding:.6rem .8rem}.thread-name[_ngcontent-%COMP%]{font-size:.8rem}}"],changeDetection:1})};var on=["logsContent"],rn=(n,t)=>t.name;function an(n,t){if(n&1){let e=fC();Is(0,"button",12),Ag("click",function(){If(e);let o=yC().$implicit,s=yC();return wf(s.start(o.name))}),Is(1,"mat-icon"),qC(2,"play_arrow"),pl()();}if(n&2){let e=yC().$implicit;Tg("disabled",e.isLoading);}}function sn(n,t){if(n&1){let e=fC();Is(0,"button",13),Ag("click",function(){If(e);let o=yC().$implicit,s=yC();return wf(s.stop(o.name))}),Is(1,"mat-icon"),qC(2,"stop"),pl()();}if(n&2){let e=yC().$implicit;Tg("disabled",e.isLoading);}}function cn(n,t){if(n&1&&(Is(0,"a",8)(1,"mat-icon",14),qC(2,"open_in_new"),pl()()),n&2){let e=yC().$implicit;Tg("href",e.url,yh)("title",e.url);}}function ln(n,t){if(n&1&&(Is(0,"div",15),qC(1),pl()),n&2){let e=yC(),i=e.$implicit,o=e.$index;Vg("order",o*2),JE(),Zg(i.errorMessage);}}function dn(n,t){if(n&1){let e=fC();Is(0,"button",21),Ag("click",function(){If(e);let o=yC(3);return wf(o.onManualRefresh())}),Is(1,"mat-icon"),qC(2,"refresh"),pl()();}}function mn(n,t){if(n&1&&(Is(0,"div",16)(1,"div",17)(2,"span",18),qC(3),pl(),tC(4,dn,3,0,"button",19),pl(),Is(5,"pre",20,0),qC(7),pl()()),n&2){let e=yC(),i=e.$implicit,o=e.$index,s=yC();Vg("order",o*2+1),JE(3),vl("",i.name," logs"),JE(),nC(i.status==="running"?4:-1),JE(3),Zg(s.logs()||"(empty)");}}function pn(n,t){if(n&1){let e=fC();Is(0,"div",2)(1,"span",3),qC(2),pl(),Is(3,"div",4),tC(4,an,3,1,"button",5)(5,sn,3,1,"button",6),Is(6,"span",7),qC(7),pl(),tC(8,cn,3,2,"a",8),Is(9,"button",9),Ag("click",function(){let o=If(e).$implicit,s=yC();return wf(s.toggleLogs(o.name))}),Is(10,"mat-icon"),qC(11),pl()()()(),tC(12,ln,2,3,"div",10),tC(13,mn,8,5,"div",11);}if(n&2){let e=t.$implicit,i=t.$index,o=yC();Vg("order",i*2),JE(2),Zg(e.name),JE(2),nC(e.status==="stopped"?4:5),JE(2),Hg("running",e.status==="running"),JE(),vl(" ",e.status==="running"?"Running":"Stopped"," "),JE(),nC(e.url?8:-1),JE(),Tg("title",o.logsOpenFor()===e.name?"Hide logs":"Show logs"),JE(2),Zg(o.logsOpenFor()===e.name?"expand_less":"terminal"),JE(),nC(e.errorMessage?12:-1),JE(),nC(o.logsOpenFor()===e.name?13:-1);}}var Te=class n{destroyRef=g(we$1);projectApi=g(c);projectName=TB.required();entryStates=zi([]);hasPreview=yT(()=>this.entryStates().length>0);logsOpenFor=zi(null);logs=zi("");logsContent;logsPollTimer=null;logsTimeoutTimer=null;static LOGS_POLL_MS=5e3;static LOGS_TIMEOUT_MS=1200*1e3;constructor(){Hf(()=>{let t=this.projectName();t&&this.onProjectChanged(t);},{}),Hf(()=>{console.log("entry states",this.entryStates());});}ngOnDestroy(){this.stopLogPolling();}onProjectChanged(t){this.stopLogPolling(),this.entryStates.set([]),this.logsOpenFor.set(null),this.logs.set(""),this.projectApi.getPreviewEntries(t).pipe(U$1(this.destroyRef)).subscribe({next:e=>{let i=e.entries;if(i.length===0)return;let o=i.map(f=>({name:f.name,command:f.command,url:f.url,status:"stopped",isLoading:false,errorMessage:""}));this.entryStates.set(o);let s=i.map(f=>this.projectApi.getPreviewStatus(t,f.name));By(s).pipe(U$1(this.destroyRef)).subscribe({next:f=>{this.entryStates.update(A=>A.map((J,L)=>{let R=f[L];return R?z$1(P$1({},J),{status:R.status}):J}));},error:()=>{}});},error:()=>{}});}start(t){this.updateEntry(t,{isLoading:true,errorMessage:""}),this.projectApi.startPreview(this.projectName(),t).pipe(U$1(this.destroyRef)).subscribe({next:e=>{this.updateEntry(t,{status:e.status,isLoading:false});},error:e=>{this.updateEntry(t,{errorMessage:e?.error?.error??"Failed to start preview",isLoading:false});}});}stop(t){this.updateEntry(t,{isLoading:true,errorMessage:""}),this.projectApi.stopPreview(this.projectName(),t).pipe(U$1(this.destroyRef)).subscribe({next:()=>{this.updateEntry(t,{status:"stopped",isLoading:false}),this.logsOpenFor()===t&&this.stopLogPolling();},error:e=>{this.updateEntry(t,{errorMessage:e?.error?.error??"Failed to stop preview",isLoading:false});}});}toggleLogs(t){this.logsOpenFor()===t?(this.logsOpenFor.set(null),this.logs.set(""),this.stopLogPolling()):(this.logsOpenFor.set(t),this.refreshLogs(),this.startLogPolling());}onManualRefresh(){this.refreshLogs(),this.logsPollTimer&&this.resetLogsTimeout();}refreshLogs(){let t=this.logsOpenFor();t&&this.projectApi.getPreviewLogs(this.projectName(),t).pipe(U$1(this.destroyRef)).subscribe({next:e=>{this.logs.set(e.logs),this.scrollLogsToBottom();},error:()=>this.logs.set("(failed to load logs)")});}updateEntry(t,e){this.entryStates.update(i=>i.map(o=>o.name===t?P$1(P$1({},o),e):o));}startLogPolling(){this.stopLogPolling(),this.logsPollTimer=setInterval(()=>{this.logsOpenFor()?this.refreshLogs():this.stopLogPolling();},n.LOGS_POLL_MS),this.resetLogsTimeout();}stopLogPolling(){this.logsPollTimer&&(clearInterval(this.logsPollTimer),this.logsPollTimer=null),this.logsTimeoutTimer&&(clearTimeout(this.logsTimeoutTimer),this.logsTimeoutTimer=null);}resetLogsTimeout(){this.logsTimeoutTimer&&clearTimeout(this.logsTimeoutTimer),this.logsTimeoutTimer=setTimeout(()=>{this.stopLogPolling();},n.LOGS_TIMEOUT_MS);}scrollLogsToBottom(){setTimeout(()=>{let t=this.logsContent?.nativeElement;t&&(t.scrollTop=t.scrollHeight);});}static \u0275fac=function(e){return new(e||n)};static \u0275cmp=Rw({type:n,selectors:[["app-preview-panel"]],viewQuery:function(e,i){if(e&1&&Fg(on,5),e&2){let o;wC(o=CC())&&(i.logsContent=o.first);}},inputs:{projectName:[1,"projectName"]},decls:3,vars:0,consts:[["logsContent",""],[1,"preview-panel"],[1,"entry-row"],[1,"entry-name"],[1,"entry-actions"],["mat-icon-button","","title","Start","type","button",1,"entry-btn","start",3,"disabled"],["mat-icon-button","","title","Stop","type","button",1,"entry-btn","stop",3,"disabled"],[1,"status-pill"],["target","_blank","rel","noopener noreferrer",1,"preview-url",3,"href","title"],["mat-icon-button","","type","button",1,"entry-btn","logs",3,"click","title"],[1,"preview-error",3,"order"],[1,"logs-container",3,"order"],["mat-icon-button","","title","Start","type","button",1,"entry-btn","start",3,"click","disabled"],["mat-icon-button","","title","Stop","type","button",1,"entry-btn","stop",3,"click","disabled"],[1,"link-icon"],[1,"preview-error"],[1,"logs-container"],[1,"logs-header"],[1,"logs-title"],["mat-icon-button","","title","Refresh logs","type","button",1,"entry-btn"],[1,"logs-content"],["mat-icon-button","","title","Refresh logs","type","button",1,"entry-btn",3,"click"]],template:function(e,i){e&1&&(Is(0,"div",1),iC(1,pn,14,12,null,null,rn),pl()),e&2&&(JE(),sC(i.entryStates()));},dependencies:[hr,Gn,yt$2,wt],styles:["[_nghost-%COMP%]{display:block}.preview-panel[_ngcontent-%COMP%]{display:flex;flex-direction:column;padding:.25rem 0}.entry-row[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.375rem;padding:.125rem .5rem;min-height:36px}.entry-name[_ngcontent-%COMP%]{font-size:.82rem;font-weight:500;color:var(--on-surface, #e0e0e0);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex:1 1 auto;min-width:0}.entry-actions[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.25rem;flex-shrink:0}.entry-btn[_ngcontent-%COMP%]{width:28px!important;height:28px!important;padding:0!important;display:inline-flex!important;align-items:center;justify-content:center;flex-shrink:0}.entry-btn[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:18px;width:18px;height:18px;line-height:18px}.entry-btn.start[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{color:var(--color-primary)}.entry-btn.stop[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{color:#e53935}.entry-btn.logs[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:16px;width:16px;height:16px;line-height:16px;color:var(--color-text-secondary)}.entry-btn[disabled][_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{color:var(--color-text-secondary)}.status-pill[_ngcontent-%COMP%]{display:inline-flex;align-items:center;justify-content:center;padding:1px 6px;border-radius:12px;font-size:.68rem;font-weight:600;letter-spacing:.02em;flex-shrink:0;min-width:52px;text-align:center;background:var(--color-bg-hover);color:var(--color-text-secondary);border:1px solid var(--color-border)}.status-pill.running[_ngcontent-%COMP%]{background:#22c55e26;color:#16a34a;border-color:#22c55e66}.preview-url[_ngcontent-%COMP%]{display:inline-flex;align-items:center;text-decoration:none;color:var(--color-primary);flex-shrink:0}.preview-url[_ngcontent-%COMP%]:hover{text-decoration:underline}.preview-url[_ngcontent-%COMP%] .link-icon[_ngcontent-%COMP%]{font-size:14px;width:14px;height:14px}.preview-error[_ngcontent-%COMP%]{font-size:.75rem;color:#c00;padding:0 .75rem}.logs-container[_ngcontent-%COMP%]{display:flex;flex-direction:column;margin:.125rem .5rem .25rem;background:var(--color-bg-hover);border-radius:8px;overflow:hidden;border:1px solid var(--color-border)}.logs-header[_ngcontent-%COMP%]{display:flex;align-items:center;padding:.25rem .75rem;border-bottom:1px solid var(--color-border)}.logs-header[_ngcontent-%COMP%] .logs-title[_ngcontent-%COMP%]{flex:1;font-size:.72rem;font-weight:600;color:var(--color-text-secondary);text-transform:uppercase;letter-spacing:.05em}.logs-content[_ngcontent-%COMP%]{margin:0;padding:.5rem .75rem;font-family:Courier New,Courier,monospace;font-size:.72rem;line-height:1.5;color:var(--color-text);white-space:pre-wrap;word-break:break-all;max-height:200px;overflow-y:auto}.logs-content[_ngcontent-%COMP%]::-webkit-scrollbar{width:6px}.logs-content[_ngcontent-%COMP%]::-webkit-scrollbar-track{background:transparent}.logs-content[_ngcontent-%COMP%]::-webkit-scrollbar-thumb{background:var(--color-text-secondary);border-radius:3px}"],changeDetection:1})};var Oe=class n{eventStream=g(fe);threadState=g(U);ratio=zi(0);inputTokens=zi(0);contextWindow=zi(0);price=zi(0);iterations=zi(0);cacheReadTokens=zi(0);visible=zi(false);level=yT(()=>{let t=this.ratio();return t<.6?"ok":t<.85?"warning":"danger"});constructor(){this.eventStream.events$.pipe(Ot$2(t=>t instanceof _),Ot$2(t=>!t.threadId||t.threadId===this.threadState.getSelectedThreadId())).subscribe(t=>{this.inputTokens.set(t.inputTokens),this.contextWindow.set(t.contextWindow),this.price.set(t.price),this.iterations.set(t.iterations),this.cacheReadTokens.set(t.cacheReadTokens),this.ratio.set(t.contextWindow>0?t.inputTokens/t.contextWindow:0),this.visible.set(true);}),this.eventStream.connectionStatus$.pipe(Ot$2(t=>!t.connected)).subscribe(()=>{this.visible.set(false),this.ratio.set(0),this.inputTokens.set(0),this.contextWindow.set(0),this.price.set(0),this.iterations.set(0),this.cacheReadTokens.set(0);});}static \u0275fac=function(e){return new(e||n)};static \u0275prov=x({token:n,factory:n.\u0275fac,providedIn:"root"})};function gn(n,t){if(n&1&&Sg(0,"div",12),n&2){let e=t.$implicit,i=t.$index,o=yC();Vg("--delay",e.delay+"s")("--left",e.left+"%")("--dur",e.dur+"s")("--size",e.size+"px")("--rise",e.rise+"px"),Hg("invisible",i>=o.aboveBubbleCount());}}function _n(n,t){if(n&1&&Sg(0,"div",13),n&2){let e=t.$implicit;Vg("--delay",e.delay+"s")("--size",e.size+"px")("--left",e.left+"%")("--dur",e.dur+"s")("--top",e.top+"px");}}function un(n,t){if(n&1&&Sg(0,"div",14),n&2){let e=t.$implicit,i=t.$index,o=yC();Vg("--delay",e.delay+"s")("--left",e.left+"%")("--dur",e.dur+"s")("--size",e.size+"px"),Hg("invisible",i>=o.insideBubbleCount());}}var yt=30,Pt=27,hn=40;function T(n,t,e,i=0){return i+(n*137+t*31)%e}var ke=class n{gaugeState=g(Oe);sidenavOpen=TB(false);aboveBubbles=Array.from({length:yt},(t,e)=>({delay:T(e,1,30)/10,left:T(e,2,82,5),dur:2.5+T(e,3,20)/10,size:1.5+T(e,4,40)/10,rise:150+T(e,5,150)}));insideBubbles=Array.from({length:Pt},(t,e)=>({delay:T(e,6,20)/10,left:T(e,7,80,5),dur:1.2+T(e,8,15)/10,size:2+T(e,9,35)/10}));foamBubbles=Array.from({length:hn},(t,e)=>({delay:T(e,10,25)/10,left:T(e,11,85,3),dur:1.5+T(e,12,10)/10,size:(3+T(e,13,80)/10)*.75,top:T(e,14,4)+8}));displayRatio=yT(()=>Math.min(100,this.gaugeState.ratio()*100));liquidColor=yT(()=>{let t=this.gaugeState.ratio();return t<=.5?`rgb(${Math.round(t*2*255)}, 255, 0)`:`rgb(255, ${Math.round((1-(t-.5)*2)*255)}, 0)`});aboveBubbleCount=yT(()=>Math.round(this.gaugeState.ratio()*yt));insideBubbleCount=yT(()=>{let t=this.gaugeState.ratio();return t<.5?0:t<.65?5:t<.8?13:t<.9?20:Pt});foamActive=yT(()=>this.gaugeState.ratio()>=.5);overflowing=yT(()=>this.gaugeState.ratio()>=.9);tooltipText=yT(()=>{let t=Math.round(this.gaugeState.ratio()*100),e=this.gaugeState.price().toFixed(4);return [`${this.gaugeState.inputTokens().toLocaleString()} / ${this.gaugeState.contextWindow().toLocaleString()} tokens (${t}%)`,`Cost: $${e}`,`Iterations: ${this.gaugeState.iterations()}`,`Cache read: ${this.gaugeState.cacheReadTokens().toLocaleString()}`].join(`
4
4
  `)});static \u0275fac=function(e){return new(e||n)};static \u0275cmp=Rw({type:n,selectors:[["app-context-gauge"]],inputs:{sidenavOpen:[1,"sidenavOpen"]},decls:15,vars:11,consts:[[1,"tube-host",3,"title"],[1,"tube"],[1,"bubbles-above"],[1,"bubble-color",3,"invisible","--delay","--left","--dur","--size","--rise"],[1,"foam"],[1,"foam-bubble",3,"--delay","--size","--left","--dur","--top"],[1,"body"],[1,"shine"],[1,"liquid"],[1,"percentage"],[1,"bubbles-inside"],[1,"bubble-dark",3,"invisible","--delay","--left","--dur","--size"],[1,"bubble-color"],[1,"foam-bubble"],[1,"bubble-dark"]],template:function(e,i){e&1&&(hl(0,"div",0)(1,"div",1)(2,"div",2),iC(3,gn,1,12,"div",3,rC),gl(),hl(5,"div",4),iC(6,_n,1,10,"div",5,rC),gl(),hl(8,"div",6),Sg(9,"div",7),hl(10,"div",8)(11,"div",9)(12,"div",10),iC(13,un,1,10,"div",11,rC),gl()()()()()()),e&2&&(Hg("hidden",i.sidenavOpen()),Ng("title",i.tooltipText()),JE(),Vg("--tube-color",i.liquidColor()),JE(2),sC(i.aboveBubbles),JE(2),Vg("bottom",i.displayRatio()+"%"),Hg("active",i.foamActive()),JE(),sC(i.foamBubbles),JE(5),Vg("height",i.displayRatio(),"%"),JE(2),sC(i.insideBubbles));},styles:['[_nghost-%COMP%]{position:fixed;left:calc(1rem + 10px);z-index:1500;display:block;top:calc(3.5rem + 80px);--gauge-glass: #dddddd}[data-theme$=dark][_nghost-%COMP%], [data-theme$=dark] [_nghost-%COMP%]{--gauge-glass: #333333}.tube-host[_ngcontent-%COMP%]{position:relative;display:flex;flex-direction:column;align-items:center}.tube-host.hidden[_ngcontent-%COMP%]{visibility:hidden}.tube[_ngcontent-%COMP%]{position:relative;height:100px;width:24px;border:none;border-radius:0 0 50rem 50rem;background-color:var(--gauge-glass, #333333);cursor:default;overflow:visible}.tube[_ngcontent-%COMP%]:after{content:"";position:absolute;left:-3px;top:0;width:calc(100% + 6px);height:4px;border-radius:50rem;background:var(--gauge-glass, #333333)}.body[_ngcontent-%COMP%]{position:absolute;border-radius:inherit;height:100%;width:100%;bottom:0;overflow:hidden;z-index:5}.shine[_ngcontent-%COMP%]{position:absolute;left:20%;top:0;width:10%;height:100%;z-index:90;opacity:.2;pointer-events:none}.shine[_ngcontent-%COMP%]:before, .shine[_ngcontent-%COMP%]:after{content:"";position:absolute;background-color:#fff;border-radius:50rem;top:10%;height:40%;width:100%}.shine[_ngcontent-%COMP%]:after{height:15%;top:60%}@keyframes _ngcontent-%COMP%_liquid-spin{0%{transform:translate(-50%) rotate(0)}to{transform:translate(-50%) rotate(360deg)}}.liquid[_ngcontent-%COMP%]{position:absolute;height:100%;width:100%;bottom:0}.percentage[_ngcontent-%COMP%]{position:absolute;height:0%;width:100%;bottom:0;left:0;z-index:80;transition:height .9s cubic-bezier(.4,0,.2,1);overflow:visible}.percentage[_ngcontent-%COMP%]:before, .percentage[_ngcontent-%COMP%]:after{position:absolute;content:"";width:100px;height:100px;border-radius:40px;animation:_ngcontent-%COMP%_liquid-spin 4s infinite linear;transform:translate(-50%);left:50%;top:0;background:var(--tube-color, #34c759);transition:background .5s ease}.percentage[_ngcontent-%COMP%]:after{opacity:.4;animation-direction:reverse;border-radius:30px}@keyframes _ngcontent-%COMP%_bubble-rise-inside{0%{bottom:2%;opacity:0;transform:scale(.5)}15%{opacity:.7}85%{opacity:.4}to{bottom:96%;opacity:0;transform:scale(1.1)}}.bubbles-inside[_ngcontent-%COMP%]{position:absolute;left:0;bottom:0;width:100%;height:100%;z-index:10;pointer-events:none}.bubbles-inside[_ngcontent-%COMP%] .bubble-dark[_ngcontent-%COMP%]{position:absolute;border-radius:50%;background:var(--color-bg, rgba(20, 20, 20, .55));width:var(--size, 3px);height:var(--size, 3px);opacity:0;bottom:2%;left:var(--left, 30%);animation:_ngcontent-%COMP%_bubble-rise-inside var(--dur, 1.5s) infinite ease-in;animation-delay:var(--delay, 0s)}.bubbles-inside[_ngcontent-%COMP%] .bubble-dark.invisible[_ngcontent-%COMP%]{animation:none;opacity:0}@keyframes _ngcontent-%COMP%_bubble-rise-above{0%{bottom:0;opacity:0;transform:scale(.4)}10%{opacity:.9}70%{opacity:.8}90%{opacity:.3}to{bottom:var(--rise, 80px);opacity:0;transform:scale(1.2)}}.bubbles-above[_ngcontent-%COMP%]{position:absolute;left:0;bottom:0;width:100%;height:100%;z-index:20;pointer-events:none;overflow:visible}.bubbles-above[_ngcontent-%COMP%] .bubble-color[_ngcontent-%COMP%]{position:absolute;border-radius:50%;background:var(--tube-color, #34c759);opacity:0;bottom:0;left:var(--left, 30%);width:var(--size, 3px);height:var(--size, 3px);animation:_ngcontent-%COMP%_bubble-rise-above var(--dur, 1.5s) infinite ease-in;animation-delay:var(--delay, 0s)}.bubbles-above[_ngcontent-%COMP%] .bubble-color.invisible[_ngcontent-%COMP%]{animation:none;opacity:0}.foam[_ngcontent-%COMP%]{position:absolute;bottom:0;left:-1px;width:100%;height:14px;z-index:100;pointer-events:none;overflow:visible;transition:bottom .9s cubic-bezier(.4,0,.2,1)}.foam[_ngcontent-%COMP%] .foam-bubble[_ngcontent-%COMP%]{position:absolute;top:var(--top, 0px);left:var(--left, 50%);width:var(--size, 4px);height:var(--size, 4px);border-radius:50%;background:#fff0;animation:none}.foam.active[_ngcontent-%COMP%] .foam-bubble[_ngcontent-%COMP%]{animation:_ngcontent-%COMP%_foam-pulse var(--dur, 1.5s) ease-in-out infinite;animation-delay:var(--delay, 0s)}@keyframes _ngcontent-%COMP%_foam-pulse{0%{background:#fff0;transform:scale(.5)}30%{background:#ffffff73;transform:scale(1)}60%{background:#ffffff40;transform:scale(1.1)}to{background:#fff0;transform:scale(.6)}}@media(max-width:768px){[_nghost-%COMP%]{top:calc(3.25rem + 80px);left:calc(.75rem + 10px)}.tube[_ngcontent-%COMP%]{height:75px;width:20px}}']})};var fn=["threadSearchInput"],bn=["*"];function vn(n,t){if(n&1){let e=fC();Is(0,"button",28),Ag("click",function(){If(e);let o=yC();return wf(o.toggle())}),Is(1,"mat-icon"),qC(2,"menu"),pl()(),Is(3,"button",29),Ag("click",function(){If(e);let o=yC();return wf(o.createNewThread())}),Is(4,"mat-icon",10),qC(5,"play_circle"),pl()();}if(n&2){let e=yC();JE(3),Tg("disabled",!e.selectedProjectName());}}function Cn(n,t){if(n&1){let e=fC();Is(0,"div",12)(1,"a",30),Ag("click",function(o){return If(e),yC().openMissionControl(),wf(o.preventDefault())}),Is(2,"mat-icon"),qC(3,"rocket_launch"),pl(),Is(4,"span",31),qC(5,"Task Control"),pl()()();}}function xn(n,t){if(n&1){let e=fC();Is(0,"div",15)(1,"mat-icon",32),qC(2,"search"),pl(),Is(3,"input",33,0),Jg("ngModelChange",function(o){If(e);let s=yC();return XC(s.threadSearchQuery,o)||(s.threadSearchQuery=o),wf(o)}),Ag("input",function(){If(e);let o=yC();return wf(o.onThreadSearchInput())}),pl(),UI(),Is(5,"button",34),Ag("click",function(){If(e);let o=yC();return wf(o.closeThreadSearch())}),Is(6,"mat-icon"),qC(7,"close"),pl()()();}if(n&2){let e=yC();JE(3),Xg("ngModel",e.threadSearchQuery),zI();}}function yn(n,t){if(n&1){let e=fC();Is(0,"div",16)(1,"mat-icon",23),qC(2,"forum"),pl(),Is(3,"span",24),qC(4,"Threads"),pl(),Is(5,"button",35),Ag("click",function(o){If(e);let s=yC();return wf(s.toggleThreadSearch(o))}),Is(6,"mat-icon"),qC(7,"search"),pl()()();}}function Pn(n,t){n&1&&(Is(0,"mat-icon",22),qC(1,"keyboard_arrow_up"),pl());}function Sn(n,t){n&1&&(Is(0,"mat-icon",23),qC(1,"hub"),pl());}function Mn(n,t){n&1&&(Is(0,"mat-icon",22),qC(1,"keyboard_arrow_up"),pl());}function wn(n,t){n&1&&(Is(0,"mat-icon",23),qC(1,"tune"),pl());}function Tn(n,t){n&1&&(Is(0,"div",37)(1,"div",41),bg(2,"app-options-panel",42),pl()());}function On(n,t){if(n&1){let e=fC();Is(0,"div",36)(1,"a",21),Ag("click",function(o){return If(e),yC(3).openProjectConfig(),o.preventDefault(),wf(o.stopPropagation())}),Is(2,"mat-icon",23),qC(3,"settings_applications"),pl(),Is(4,"span",24),qC(5,"Project Configuration"),pl()()();}}function kn(n,t){n&1&&(Is(0,"div",36)(1,"a",43)(2,"mat-icon",23),qC(3,"settings_applications"),pl(),Is(4,"span",24),qC(5,"Project config (No project)"),pl()()());}function En(n,t){if(n&1&&tC(0,On,6,0,"div",36)(1,kn,6,0,"div",36),n&2){let e=yC(2);nC(e.selectedProjectName()?0:1);}}function Dn(n,t){if(n&1){let e=fC();Is(0,"div",36)(1,"a",21),Ag("click",function(o){return If(e),yC(2).openAgents(),o.preventDefault(),wf(o.stopPropagation())}),Is(2,"mat-icon",23),qC(3,"smart_toy"),pl(),Is(4,"span",24),qC(5,"Agents"),pl()()();}}function Nn(n,t){n&1&&(Is(0,"div",36)(1,"a",43)(2,"mat-icon",23),qC(3,"smart_toy"),pl(),Is(4,"span",24),qC(5,"Agents (No project)"),pl()()());}function jn(n,t){if(n&1){let e=fC();Is(0,"div",36)(1,"a",21),Ag("click",function(o){return If(e),yC(2).openPrompts(),o.preventDefault(),wf(o.stopPropagation())}),Is(2,"mat-icon",23),qC(3,"description"),pl(),Is(4,"span",24),qC(5,"Prompts"),pl()()();}}function Vn(n,t){n&1&&(Is(0,"div",36)(1,"a",43)(2,"mat-icon",23),qC(3,"description"),pl(),Is(4,"span",24),qC(5,"Prompts (No project)"),pl()()());}function Fn(n,t){if(n&1){let e=fC();Is(0,"div",36)(1,"a",21),Ag("click",function(o){return If(e),yC(2).openSchedulers(),o.preventDefault(),wf(o.stopPropagation())}),Is(2,"mat-icon",23),qC(3,"schedule"),pl(),Is(4,"span",24),qC(5,"Schedulers"),pl()()();}}function In(n,t){n&1&&(Is(0,"div",36)(1,"a",43)(2,"mat-icon",23),qC(3,"schedule"),pl(),Is(4,"span",24),qC(5,"Schedulers (No project)"),pl()()());}function zn(n,t){n&1&&(Is(0,"mat-icon",22),qC(1,"keyboard_arrow_up"),pl());}function An(n,t){n&1&&(Is(0,"mat-icon",23),qC(1,"rocket_launch"),pl());}function Ln(n,t){if(n&1&&(Is(0,"div",37),bg(1,"app-preview-panel",44),pl()),n&2){let e=yC(3);JE(),Tg("projectName",e.selectedProjectName());}}function Rn(n,t){if(n&1){let e=fC();Is(0,"div",36)(1,"a",21),Ag("click",function(o){return If(e),yC(2).toggleSection("preview"),o.preventDefault(),wf(o.stopPropagation())}),tC(2,zn,2,0,"mat-icon",22)(3,An,2,0,"mat-icon",23),Is(4,"span",24),qC(5,"Preview Server"),pl()(),tC(6,Ln,2,1,"div",37),pl();}if(n&2){let e=yC(2);Hg("expanded",e.expandedSections.preview),JE(),Hg("active",e.expandedSections.preview),JE(),nC(e.expandedSections.preview?2:3),JE(4),nC(e.expandedSections.preview?6:-1);}}function $n(n,t){if(n&1){let e=fC();Is(0,"div",25)(1,"div",36)(2,"a",21),Ag("click",function(o){return If(e),yC().toggleSection("config"),wf(o.preventDefault())}),tC(3,Mn,2,0,"mat-icon",22)(4,wn,2,0,"mat-icon",23),Is(5,"span",24),qC(6,"Preferences"),pl()(),tC(7,Tn,3,0,"div",37),pl(),Is(8,"div",36)(9,"a",21),Ag("click",function(o){return If(e),yC().openTokenUsage(),o.preventDefault(),wf(o.stopPropagation())}),Is(10,"mat-icon",23),qC(11,"data_usage"),pl(),Is(12,"span",24),qC(13,"Token Usage"),pl()()(),Is(14,"div",36)(15,"a",21),Ag("click",function(o){return If(e),yC().openUserConfig(),o.preventDefault(),wf(o.stopPropagation())}),Is(16,"mat-icon",23),qC(17,"manage_accounts"),pl(),Is(18,"span",24),qC(19,"User Configuration"),pl()()(),tC(20,En,2,1),tC(21,Dn,6,0,"div",36)(22,Nn,6,0,"div",36),tC(23,jn,6,0,"div",36)(24,Vn,6,0,"div",36),tC(25,Fn,6,0,"div",36)(26,In,6,0,"div",36),tC(27,Rn,7,6,"div",38),Is(28,"div",36)(29,"a",39),bg(30,"img",40),Is(31,"span",24),qC(32,"Contribute on GitHub"),pl()()()();}if(n&2){let e=yC();JE(),Hg("expanded",e.expandedSections.config),JE(),Hg("active",e.expandedSections.config),JE(),nC(e.expandedSections.config?3:4),JE(4),nC(e.expandedSections.config?7:-1),JE(13),nC(e.isAdmin?20:-1),JE(),nC(e.selectedProjectName()?21:22),JE(2),nC(e.selectedProjectName()?23:24),JE(2),nC(e.selectedProjectName()?25:26),JE(2),nC(e.hasPreviewConfig()?27:-1),JE(3),Cg("src","CODAY-Logo.png",yh);}}function Bn(n,t){if(n&1){let e=fC();Is(0,"div",27)(1,"mat-icon",45),qC(2,"warning"),pl(),Is(3,"span",46),qC(4),pl(),Is(5,"button",47),Ag("click",function(){If(e);let o=yC();return wf(o.configErrorMessage="")}),Is(6,"mat-icon"),qC(7,"close"),pl()()();}if(n&2){let e=yC();JE(4),Zg(e.configErrorMessage);}}var St=class n{destroy$=new ce;sidenavStateChange=new yt$1;drawerOpen=false;breakpointObserver=g(Ot$1);isDesktop=F(this.breakpointObserver.observe("(min-width: 1400px)").pipe(ue(t=>t.matches)),{initialValue:false});userOpenPreference=zi(true);isOpen=yT(()=>this.userOpenPreference());isAdmin=false;configErrorMessage="";expandedSections={config:false,preview:false,settings:false};isThreadSearchActive=false;threadSearchQuery="";threadSearchInput;dialog=g(Re);configApi=g(W);projectStateService=g(P);projectApi=g(c);router=g(G);preferences=g(L);threadStateService=g(U);projects=F(this.projectStateService.projectList$);selectedProject=F(this.projectStateService.selectedProject$);selectedProjectName=F(this.projectStateService.selectedProject$.pipe(ue(t=>t?.name)));isProjectVolatile=F(this.projectStateService.selectedProject$.pipe(ue(t=>t?.config?.volatile||false)));forcedProject=F(this.projectStateService.forcedProject$);hasPreviewConfig=F(this.projectStateService.selectedProject$.pipe(ue(t=>{let e=t?.config?.preview;return Array.isArray(e)&&!!e.length})),{initialValue:false});ngOnInit(){let t=window.innerWidth>=1024,e=this.preferences.getPreference("sidenavOpen",t);this.userOpenPreference.set(e??t),this.configApi.getUserConfig().pipe(Vy(this.destroy$)).subscribe({next:i=>{this.isAdmin=i.groups?.includes("CODAY_ADMIN")??false,console.log("[SIDENAV] User admin status:",this.isAdmin);},error:i=>{console.error("[SIDENAV] Error loading user config for roles:",i),this.isAdmin=false;}});}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete();}toggle(){let t=!this.userOpenPreference();this.userOpenPreference.set(t),this.saveSidenavState(t),this.sidenavStateChange.emit(t);}close(){this.userOpenPreference()&&(this.userOpenPreference.set(false),this.saveSidenavState(false),this.sidenavStateChange.emit(false));}saveSidenavState(t){this.preferences.setPreference("sidenavOpen",t);}openTokenUsage(){this.configErrorMessage="",this.router.navigate(["/token-usage"]);}openUserConfig(){console.log("[SIDENAV] openUserConfig called"),this.configErrorMessage="",this.configApi.getUserConfig().pipe(Vy(this.destroy$)).subscribe({next:t=>{console.log("[SIDENAV] User config loaded, opening dialog"),this.dialog.open(Ze,{data:{configType:"user",initialContent:JSON.stringify(t,null,2)}}).afterClosed().subscribe(i=>{i&&this.saveUserConfig(i);});},error:t=>{console.error("[SIDENAV] Error loading user config:",t),this.configErrorMessage=t?.error?.error||"Failed to load user configuration";}});}saveUserConfig(t){this.configApi.updateUserConfig(t).pipe(Vy(this.destroy$)).subscribe({next:e=>{console.log("[SIDENAV] User config saved successfully");},error:e=>{console.error("[SIDENAV] Error saving user config:",e),this.configErrorMessage=e?.error?.error||"Failed to save user configuration";}});}openProjectConfig(){let t=this.selectedProjectName();if(!t){console.error("[SIDENAV] No project selected"),this.configErrorMessage="No project selected. Please select a project first.";return}this.configErrorMessage="",this.projectApi.getProjectConfig(t).pipe(Vy(this.destroy$)).subscribe({next:e=>{console.log("[SIDENAV] Project config loaded, opening dialog"),this.dialog.open(Ze,{data:{configType:"project",projectName:t,initialContent:JSON.stringify(e,null,2)}}).afterClosed().subscribe(o=>{o&&this.saveProjectConfig(t,o);});},error:e=>{console.error("[SIDENAV] Error loading project config:",e),this.configErrorMessage=e?.error?.error||"Failed to load project configuration";}});}saveProjectConfig(t,e){this.projectApi.updateProjectConfig(t,e).pipe(Vy(this.destroy$)).subscribe({next:i=>{console.log("[SIDENAV] Project config saved successfully");},error:i=>{console.error("[SIDENAV] Error saving project config:",i),this.configErrorMessage=i?.error?.error||"Failed to save project configuration";}});}requireProjectSelection(t){return this.selectedProjectName()?true:(console.error(`[SIDENAV] No project selected, cannot ${t}`),this.configErrorMessage="Please select a project first",false)}openAgents(){if(!this.requireProjectSelection("open agents"))return;let t=this.selectedProjectName();this.router.navigate(["project",t,"agents"]);}openPrompts(){if(!this.requireProjectSelection("open prompts"))return;let t=this.selectedProjectName();this.router.navigate(["project",t,"prompts"]);}openSchedulers(){if(!this.requireProjectSelection("open schedulers"))return;let t=this.selectedProjectName();this.router.navigate(["project",t,"schedulers"]);}toggleSection(t){let e=this.expandedSections[t];t==="settings"?this.expandedSections[t]=!e:(["config","preview"].forEach(o=>{this.expandedSections[o]=false;}),this.expandedSections[t]=!e);}navigateToHome(){console.log("[SIDENAV] Navigating to home (project selection)"),this.projectStateService.clearSelection(),this.router.navigate(["/"]);}openMissionControl(){let t=this.selectedProjectName();t&&(this.router.navigate(["project",t,"tasks"]),this.close());}createNewThread(){let t=this.selectedProjectName();if(!t){console.error("[SIDENAV] No project selected, cannot create new thread"),this.configErrorMessage="Please select a project first";return}console.log("[SIDENAV] Navigating to welcome view for new thread"),this.threadStateService.clearSelection(),this.router.navigate(["project",t]);}onThreadSelectedOnMobile(){this.isDesktop()||this.close();}toggleThreadSearch(t){t.stopPropagation(),this.isThreadSearchActive=true,this.threadSearchQuery="",setTimeout(()=>{this.threadSearchInput?.nativeElement.focus();},0);}closeThreadSearch(){this.isThreadSearchActive=false,this.threadSearchQuery="";}onThreadSearchInput(){}onThreadSearchModeChange(t){t||this.closeThreadSearch();}static \u0275fac=function(e){return new(e||n)};static \u0275cmp=Rw({type:n,selectors:[["app-sidenav"]],viewQuery:function(e,i){if(e&1&&Fg(fn,5),e&2){let o;wC(o=CC())&&(i.threadSearchInput=o.first);}},inputs:{drawerOpen:"drawerOpen"},outputs:{sidenavStateChange:"sidenavStateChange"},ngContentSelectors:bn,decls:36,vars:24,consts:[["threadSearchInput",""],[1,"sidenav-container",3,"hasBackdrop"],["mode","push","position","start",1,"app-sidenav",3,"closed","opened","disableClose"],[1,"sidenav-header"],["mat-icon-button","","title","Close menu",3,"click"],["alt","coday","title","Go to project selection","role","button","tabindex","0",1,"sidenav-logo","clickable",3,"click","keydown.enter","keydown.space"],[1,"header-title-section"],[1,"sidenav-title"],[1,"new-thread-section"],["role","button","tabindex","0",1,"new-thread-link",3,"click"],["fontSet","material-icons-outlined"],[1,"new-thread-text"],[1,"mission-control-section"],[1,"sidenav-sections"],[1,"section-container","expanded"],[1,"search-header"],[1,"section-toggle","active","threads-header"],[1,"section-content","threads"],[1,"sidenav-thread-selector",3,"searchModeChange","threadSelected","searchMode","searchQuery"],[1,"sidenav-nav"],[1,"section-container","settings-group"],["role","button","tabindex","0",1,"section-toggle",3,"click"],[1,"arrow-icon","expanded"],[1,"section-icon"],[1,"section-label"],[1,"section-content","settings-content"],[3,"sidenavOpen"],["role","alert",1,"error-notification"],["mat-icon-button","","title","Menu","type","button",1,"sidenav-toggle-btn",3,"click"],["mat-icon-button","","title","Start a new thread","type","button",1,"sidenav-new-thread-btn",3,"click","disabled"],["role","button","tabindex","0",1,"mission-control-link",3,"click"],[1,"mission-control-text"],[1,"search-icon"],["type","text","placeholder","Search threads...",1,"search-input",3,"ngModelChange","input","ngModel"],["mat-icon-button","","title","Close search","type","button",1,"close-search-btn",3,"click"],["mat-icon-button","","title","Search threads","type","button",1,"search-button",3,"click"],[1,"section-container"],[1,"section-content"],[1,"section-container",3,"expanded"],["href","https://github.com/whoz-oss/coday","target","_blank","rel","noopener noreferrer","title","Contribute on GitHub",1,"section-toggle","contribute-btn"],["alt","Coday",1,"contribute-logo"],[1,"preference-item"],[1,"inline-panel"],["role","button","tabindex","-1","aria-disabled","true",1,"section-toggle","disabled"],[3,"projectName"],[1,"error-icon"],[1,"error-text"],["mat-icon-button","","aria-label","Close error message",1,"error-close",3,"click"]],template:function(e,i){e&1&&(DC(),tC(0,vn,6,1),Is(1,"mat-sidenav-container",1)(2,"mat-sidenav",2),Ag("closed",function(){return i.close()}),Is(3,"div",3)(4,"button",4),Ag("click",function(){return i.close()}),Is(5,"mat-icon"),qC(6,"chevron_left"),pl()(),Is(7,"img",5),Ag("click",function(s){return i.navigateToHome(),s.stopPropagation()})("keydown.enter",function(s){return i.navigateToHome(),s.preventDefault(),s.stopPropagation()})("keydown.space",function(s){return i.navigateToHome(),s.preventDefault(),s.stopPropagation()}),pl(),Is(8,"div",6)(9,"h2",7),qC(10),pl()()(),Is(11,"div",8)(12,"a",9),Ag("click",function(s){return i.createNewThread(),s.preventDefault()}),Is(13,"mat-icon",10),qC(14,"play_circle"),pl(),Is(15,"span",11),qC(16,"Start a new thread"),pl()()(),tC(17,Cn,6,0,"div",12),Is(18,"div",13)(19,"div",14),tC(20,xn,8,1,"div",15)(21,yn,8,0,"div",16),Is(22,"div",17)(23,"app-thread-selector",18),Ag("searchModeChange",function(s){return i.onThreadSearchModeChange(s)})("threadSelected",function(){return i.onThreadSelectedOnMobile()}),pl()()()(),Is(24,"div",19)(25,"div",20)(26,"a",21),Ag("click",function(s){return i.toggleSection("settings"),s.preventDefault()}),tC(27,Pn,2,0,"mat-icon",22)(28,Sn,2,0,"mat-icon",23),Is(29,"span",24),qC(30,"Control Center"),pl()(),tC(31,$n,33,12,"div",25),pl()()(),Is(32,"mat-sidenav-content"),EC(33),pl()(),bg(34,"app-context-gauge",26),tC(35,Bn,8,1,"div",27)),e&2&&(nC(!i.isOpen()&&!i.drawerOpen?0:-1),JE(),Hg("sidenav-open",i.isOpen()),Tg("hasBackdrop",false),JE(),Tg("opened",i.isOpen())("disableClose",true),JE(5),Cg("src","CODAY-Logo.png",yh),JE(3),Zg(i.selectedProjectName()),JE(7),nC(i.selectedProjectName()?17:-1),JE(3),nC(i.isThreadSearchActive?20:21),JE(3),Tg("searchMode",i.isThreadSearchActive)("searchQuery",i.threadSearchQuery),JE(),Hg("is-admin",i.isAdmin),JE(),Hg("expanded",i.expandedSections.settings),JE(),Hg("active",i.expandedSections.settings),JE(),nC(i.expandedSections.settings?27:28),JE(4),nC(i.expandedSections.settings?31:-1),JE(),Hg("sidenav-closed-offset",!i.isOpen()),JE(2),Tg("sidenavOpen",i.isOpen()),JE(),nC(i.configErrorMessage?35:-1));},dependencies:[ti,Ye,Zn,cn$1,ui,me,fi,Yt$1,yt$2,wt,hr,Gn,He,bt,Ye$1,we,Te,ke],styles:["[_nghost-%COMP%]{display:block;width:100%;height:100%;position:relative}.sidenav-container[_ngcontent-%COMP%]{position:fixed;top:0;left:0;right:0;height:100dvh;z-index:1400;transition:width;display:flex}.sidenav-container[_ngcontent-%COMP%] mat-sidenav[_ngcontent-%COMP%]{position:relative!important;transition:width;width:25%;min-width:320px;height:100dvh!important;flex-shrink:0}.sidenav-container[_ngcontent-%COMP%] mat-sidenav[_ngcontent-%COMP%]:not(.mat-drawer-opened){width:0!important;min-width:0;overflow:hidden!important;visibility:hidden!important}.sidenav-container[_ngcontent-%COMP%] mat-sidenav-content[_ngcontent-%COMP%]{width:100%;margin:0!important}@media(min-width:1024px){.sidenav-container[_ngcontent-%COMP%] mat-sidenav-content[_ngcontent-%COMP%]{min-width:0}}[_nghost-%COMP%] .mat-drawer-backdrop{pointer-events:auto}[_nghost-%COMP%] .mat-drawer-content{pointer-events:auto!important;background:transparent!important;overflow:visible!important}[_nghost-%COMP%] .mat-drawer-inner-container{overflow:hidden!important;height:100dvh!important;display:flex!important;flex-direction:column!important}.sidenav-new-thread-btn[_ngcontent-%COMP%], .sidenav-toggle-btn[_ngcontent-%COMP%]{position:fixed!important;z-index:1500!important;width:40px!important;height:40px!important;border-radius:50%!important;background:var(--glass-bg)!important;backdrop-filter:var(--glass-backdrop-blur)!important;-webkit-backdrop-filter:var(--glass-backdrop-blur)!important;border:1px solid var(--glass-border)!important;box-shadow:var(--glass-shadow)!important}.sidenav-toggle-btn[_ngcontent-%COMP%]{top:1rem!important;left:1rem!important}.sidenav-new-thread-btn[_ngcontent-%COMP%]{top:calc(1.5rem + 40px)!important;left:1rem!important}.sidenav-new-thread-btn[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{color:var(--color-primary)!important}.sidenav-new-thread-btn[_ngcontent-%COMP%]:disabled{opacity:.5!important}.sidenav-logo-btn[_ngcontent-%COMP%]{position:fixed!important;bottom:1rem!important;left:1rem!important;z-index:1500!important;width:56px!important;height:56px!important;border-radius:50%!important;border:1px solid var(--glass-border)!important;padding:4px!important;background:var(--glass-bg)!important;backdrop-filter:var(--glass-backdrop-blur)!important;-webkit-backdrop-filter:var(--glass-backdrop-blur)!important;box-shadow:var(--glass-shadow)!important;transition:all .3s cubic-bezier(.4,0,.2,1)!important;cursor:pointer!important;pointer-events:auto!important;display:flex!important;align-items:center!important;justify-content:center!important;overflow:hidden!important;text-decoration:none!important}.sidenav-logo-btn[_ngcontent-%COMP%]:hover{transform:scale(1.08) translateY(-2px)!important;box-shadow:0 16px 48px #0003!important;border-color:var(--color-primary)!important}.sidenav-logo-btn[_ngcontent-%COMP%]:active{transform:scale(.96)!important}.sidenav-logo-btn[_ngcontent-%COMP%] .logo[_ngcontent-%COMP%]{width:48px;height:48px;border-radius:2px}.app-sidenav[_ngcontent-%COMP%]{width:480px;height:100dvh!important;min-height:0!important;position:relative;background:var(--glass-bg);backdrop-filter:var(--glass-backdrop-blur);-webkit-backdrop-filter:var(--glass-backdrop-blur);overflow:hidden!important;display:flex;flex-direction:column}.sidenav-header[_ngcontent-%COMP%]{display:flex;align-items:center;gap:1rem;padding:1.5rem 1rem .5rem;flex-shrink:0}.sidenav-header[_ngcontent-%COMP%] .sidenav-logo[_ngcontent-%COMP%]{width:40px;height:40px;border-radius:4px;flex-shrink:0;transition:all .2s ease}.sidenav-header[_ngcontent-%COMP%] .sidenav-logo.clickable[_ngcontent-%COMP%]{cursor:pointer}.sidenav-header[_ngcontent-%COMP%] .sidenav-logo.clickable[_ngcontent-%COMP%]:hover{transform:scale(1.1);filter:drop-shadow(0 4px 12px rgba(0,0,0,.15))}.sidenav-header[_ngcontent-%COMP%] .sidenav-logo.clickable[_ngcontent-%COMP%]:active{transform:scale(.95)}.sidenav-header[_ngcontent-%COMP%] .sidenav-logo.clickable[_ngcontent-%COMP%]:focus{outline:2px solid var(--color-primary);outline-offset:2px}.sidenav-header[_ngcontent-%COMP%] .header-title-section[_ngcontent-%COMP%]{flex:1;display:flex;align-items:center;min-width:0}.sidenav-header[_ngcontent-%COMP%] .header-title-section[_ngcontent-%COMP%] .sidenav-title[_ngcontent-%COMP%]{margin:0;font-size:1.25rem;font-weight:600;color:var(--color-text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mission-control-section[_ngcontent-%COMP%]{padding:.25rem 1rem .5rem;flex-shrink:0}.mission-control-link[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:.5rem;background:transparent;border:none;text-decoration:none;cursor:pointer;transition:all .2s ease;font-size:.875rem;font-weight:500;color:var(--color-text-secondary);padding:0}.mission-control-link[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:18px;width:18px;height:18px;color:var(--color-text-secondary);transition:color .2s ease}.mission-control-link[_ngcontent-%COMP%]:hover{color:var(--color-primary);transform:translate(3px)}.mission-control-link[_ngcontent-%COMP%]:hover mat-icon[_ngcontent-%COMP%]{color:var(--color-primary)}.mission-control-link[_ngcontent-%COMP%]:focus-visible{outline:2px solid var(--color-primary);outline-offset:2px;border-radius:4px}.new-thread-section[_ngcontent-%COMP%]{padding:1rem 1rem .5rem;flex-shrink:0}.new-thread-link[_ngcontent-%COMP%]{display:inline-flex;align-items:center;background:transparent;border:none;text-decoration:none;cursor:pointer;transition:all .2s ease;gap:.5rem;font-size:.95rem;font-weight:600;padding:0}.new-thread-link[_ngcontent-%COMP%] .new-thread-text[_ngcontent-%COMP%]{background:linear-gradient(90deg,var(--color-primary, #3b82f6) 0%,var(--color-accent, #8b5cf6) 50%,var(--color-primary, #3b82f6) 100%);background-size:200% auto;background-clip:text;-webkit-background-clip:text;-webkit-text-fill-color:transparent;animation:_ngcontent-%COMP%_gradientShift 3s ease-in-out infinite}.new-thread-link[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:20px;width:20px;height:20px;color:var(--color-primary);animation:_ngcontent-%COMP%_iconPulse 3s ease-in-out infinite}.new-thread-link[_ngcontent-%COMP%]:hover{transform:translate(4px)}.new-thread-link[_ngcontent-%COMP%]:hover mat-icon[_ngcontent-%COMP%]{animation:_ngcontent-%COMP%_iconPulse 1.5s ease-in-out infinite}.new-thread-link[_ngcontent-%COMP%]:focus{transform:scale(1.1)}@keyframes _ngcontent-%COMP%_gradientShift{0%{background-position:0% center}50%{background-position:100% center}to{background-position:0% center}}@keyframes _ngcontent-%COMP%_iconPulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.8;transform:scale(1.05)}}.sidenav-sections[_ngcontent-%COMP%]{display:flex;flex-direction:column;flex:1;min-height:100px;overflow:hidden}.sidenav-sections[_ngcontent-%COMP%] > .section-container[_ngcontent-%COMP%], .sidenav-sections[_ngcontent-%COMP%] > .section-container.expanded[_ngcontent-%COMP%], .sidenav-sections[_ngcontent-%COMP%] > .section-container[_ngcontent-%COMP%] > .section-content.threads[_ngcontent-%COMP%], .sidenav-sections[_ngcontent-%COMP%] > .section-container[_ngcontent-%COMP%] > .section-content.threads[_ngcontent-%COMP%] > app-thread-selector[_ngcontent-%COMP%]{display:flex!important;flex-direction:column!important;flex:1!important;min-height:0!important;overflow:hidden!important}.sidenav-nav[_ngcontent-%COMP%]{flex-shrink:0;display:flex;flex-direction:column;overflow:hidden;max-height:70%;border-top:1px solid var(--color-border)}.sidenav-nav[_ngcontent-%COMP%] > .settings-group[_ngcontent-%COMP%] > .section-toggle.active[_ngcontent-%COMP%]{border-top:none}.sidenav-nav[_ngcontent-%COMP%] .settings-group[_ngcontent-%COMP%]{display:flex;flex-direction:column;flex:1;min-height:0;overflow:hidden}.sidenav-nav[_ngcontent-%COMP%] .settings-group[_ngcontent-%COMP%] > .section-toggle[_ngcontent-%COMP%]{flex-shrink:0}.sidenav-nav[_ngcontent-%COMP%] .settings-group[_ngcontent-%COMP%] > .section-content.settings-content[_ngcontent-%COMP%]{flex:1;min-height:0;overflow-y:auto;overflow-x:hidden}.settings-group[_ngcontent-%COMP%] > .section-content.settings-content[_ngcontent-%COMP%]{padding:0;border-bottom:1px solid var(--color-border);overflow:visible}.settings-group[_ngcontent-%COMP%] > .section-content.settings-content[_ngcontent-%COMP%] .section-container.expanded[_ngcontent-%COMP%] .section-content[_ngcontent-%COMP%]{max-height:40vh;overflow-y:auto;overflow-x:hidden}.contribute-btn[_ngcontent-%COMP%] .contribute-logo[_ngcontent-%COMP%]{width:20px;height:20px;border-radius:2px;flex-shrink:0}.section-container[_ngcontent-%COMP%]{flex-shrink:0;display:flex;flex-direction:column}.section-container.expanded[_ngcontent-%COMP%] .section-content[_ngcontent-%COMP%]{border-bottom:none}.section-toggle[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.75rem;width:100%;padding:.5rem 1rem;height:50px;text-decoration:none;cursor:pointer;transition:all .2s ease;background:transparent;border:none;border-radius:0;color:var(--color-text);flex-shrink:0}.section-toggle.active[_ngcontent-%COMP%]{border-top:1px solid var(--color-border)}.section-toggle.disabled[_ngcontent-%COMP%]{opacity:.5;cursor:not-allowed;pointer-events:none}.section-toggle[_ngcontent-%COMP%] .arrow-icon[_ngcontent-%COMP%]{font-size:20px;width:20px;height:20px;color:var(--color-text-secondary);transition:transform .2s ease;flex-shrink:0}.section-toggle[_ngcontent-%COMP%] .section-icon[_ngcontent-%COMP%]{font-size:20px;width:20px;height:20px;color:var(--color-text-secondary);flex-shrink:0}.section-toggle[_ngcontent-%COMP%] .section-label[_ngcontent-%COMP%]{flex:1;font-size:.9rem;color:var(--color-text);text-align:left}.section-toggle[_ngcontent-%COMP%] .search-button[_ngcontent-%COMP%]{margin-left:auto;flex-shrink:0}.section-toggle[_ngcontent-%COMP%] .search-button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:18px;width:18px;height:18px}.section-toggle[_ngcontent-%COMP%]:hover:not(.disabled){background:var(--color-bg-hover)}.section-toggle[_ngcontent-%COMP%]:active:not(.disabled){transform:scale(.98)}.section-toggle[_ngcontent-%COMP%]:focus-visible{outline:2px solid var(--color-primary);outline-offset:-2px}.search-header[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem;padding:.5rem 1rem;height:50px;background:var(--color-bg-hover);border-top:1px solid var(--color-border);transition:all .2s ease}.search-header[_ngcontent-%COMP%] .search-icon[_ngcontent-%COMP%]{font-size:20px;width:20px;height:20px;color:var(--color-text-secondary);flex-shrink:0}.search-header[_ngcontent-%COMP%] .search-input[_ngcontent-%COMP%]{flex:1;border:none;outline:none;background:transparent;color:var(--color-text);font-size:.9rem;padding:0;min-width:0}.search-header[_ngcontent-%COMP%] .search-input[_ngcontent-%COMP%]::placeholder{color:var(--color-text-muted)}.search-header[_ngcontent-%COMP%] .close-search-btn[_ngcontent-%COMP%]{flex-shrink:0}.search-header[_ngcontent-%COMP%] .close-search-btn[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:18px;width:18px;height:18px}.section-content[_ngcontent-%COMP%]{padding:.5rem 0 0;animation:_ngcontent-%COMP%_slideDown .2s ease;border-bottom:1px solid var(--color-border);display:flex;flex-direction:column}.section-content.threads[_ngcontent-%COMP%]{padding:0;border-bottom:none;flex:1!important;min-height:0!important;overflow:hidden!important}.section-content.threads[_ngcontent-%COMP%] app-thread-selector[_ngcontent-%COMP%]{flex:1!important;min-height:0!important;overflow:hidden!important;display:flex!important;flex-direction:column!important}@keyframes _ngcontent-%COMP%_slideDown{0%{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}.preference-item[_ngcontent-%COMP%]{padding-bottom:1rem;margin-bottom:1rem;border-bottom:1px solid var(--color-border)}.preference-item[_ngcontent-%COMP%]:last-child{margin-bottom:0;padding-bottom:0;border-bottom:none}.preference-item[_ngcontent-%COMP%] .preference-header[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.75rem;margin-bottom:.75rem;padding:0 1rem}.preference-item[_ngcontent-%COMP%] .preference-header[_ngcontent-%COMP%] .item-icon[_ngcontent-%COMP%]{font-size:20px;width:20px;height:20px}.preference-item[_ngcontent-%COMP%] .preference-header[_ngcontent-%COMP%] .item-text[_ngcontent-%COMP%]{font-size:.875rem;font-weight:500;color:var(--color-text)}.preference-item[_ngcontent-%COMP%] .preference-content[_ngcontent-%COMP%]{padding:0 1rem}.error-notification[_ngcontent-%COMP%]{position:fixed;top:5rem;left:50%;transform:translate(-50%);z-index:2000;display:flex;align-items:center;gap:.75rem;background:#ff3b3026;backdrop-filter:var(--glass-backdrop-blur);-webkit-backdrop-filter:var(--glass-backdrop-blur);border:1px solid rgba(255,59,48,.3);border-radius:16px;padding:1rem 1.5rem;box-shadow:var(--glass-shadow);animation:_ngcontent-%COMP%_errorSlideDown .3s cubic-bezier(.4,0,.2,1)}.error-notification[_ngcontent-%COMP%] .error-icon[_ngcontent-%COMP%]{font-size:1.2rem;flex-shrink:0;color:#c00}.error-notification[_ngcontent-%COMP%] .error-text[_ngcontent-%COMP%]{flex:1;color:#c00;font-size:.9rem;font-weight:500}@keyframes _ngcontent-%COMP%_errorSlideDown{0%{opacity:0;transform:translate(-50%,-10px)}to{opacity:1;transform:translate(-50%)}}@media(max-width:480px){.app-sidenav[_ngcontent-%COMP%]{width:320px}.sidenav-toggle-btn[_ngcontent-%COMP%]{top:.75rem!important;left:.75rem!important}.sidenav-new-thread-btn[_ngcontent-%COMP%]{top:calc(1.25rem + 40px)!important;left:.75rem!important}.error-notification[_ngcontent-%COMP%]{left:1rem;right:1rem;transform:none;max-width:calc(100vw - 2rem)}}body.dark[_nghost-%COMP%] .app-sidenav[_ngcontent-%COMP%], body.dark [_nghost-%COMP%] .app-sidenav[_ngcontent-%COMP%], [_ngcontent-%COMP%]:root[data-theme=dark] .app-sidenav[_ngcontent-%COMP%]{background:#242830f2;border-right-color:#b4c8ff17}body.dark[_nghost-%COMP%] .sidenav-header[_ngcontent-%COMP%], body.dark [_nghost-%COMP%] .sidenav-header[_ngcontent-%COMP%], [_ngcontent-%COMP%]:root[data-theme=dark] .sidenav-header[_ngcontent-%COMP%]{background:#242830b3}"],changeDetection:1})};
@@ -1 +1 @@
1
- import {K as Kn,Z as Zn,S as Se}from'./chunk-BESIk8ll.js';import {cb as TB,cc as CB,z as zi,h as Rw,I as Is,q as qC,m as pl,t as tC,J as JE,a8 as Zg,a5 as vl,v as nC,a9 as fC,A as Ag,ac as yC,T as Tg,aa as If,ab as wf}from'./main-4SCUMPDY.js';function A(o,a){if(o&1){let e=fC();Is(0,"span",7),qC(1,"Delete?"),pl(),Is(2,"ds-icon-button",8),Ag("action",function(){If(e);let l=yC();return wf(l.onDeleteConfirmed())}),pl(),Is(3,"ds-icon-button",9),Ag("action",function(){If(e);let l=yC();return wf(l.onDeleteCancelled())}),pl();}}function P(o,a){if(o&1){let e=fC();Is(0,"ds-kebab-menu",10),Ag("itemSelected",function(l){If(e);let O=yC();return wf(O.onMenuAction(l))}),pl();}if(o&2){let e=yC();Tg("items",e.menuItems);}}var I=class o{model=TB.required();namespaceId=TB(void 0);readOnly=TB(false);deleteRequested=CB();editRequested=CB();pendingDelete=zi(false);menuItems=[{key:"edit",label:"Edit model",icon:"edit"},{key:"delete",label:"Delete model",icon:"delete",variant:"danger"}];get displayTitle(){return this.model().alias??this.model().apiModelName}onMenuAction(a){switch(a){case "edit":this.editRequested.emit(this.model());break;case "delete":this.pendingDelete.set(true);break}}onDeleteConfirmed(){this.pendingDelete.set(false),this.deleteRequested.emit(this.model());}onDeleteCancelled(){this.pendingDelete.set(false);}static \u0275fac=function(e){return new(e||o)};static \u0275cmp=Rw({type:o,selectors:[["agentos-ai-model-item"]],inputs:{model:[1,"model"],namespaceId:[1,"namespaceId"],readOnly:[1,"readOnly"]},outputs:{deleteRequested:"deleteRequested",editRequested:"editRequested"},decls:12,vars:4,consts:[["role","listitem","dsBlueprint","",1,"ai-model-item"],[1,"ai-model-item__body"],[1,"ai-model-item__name"],[1,"ai-model-item__api-name"],[1,"ai-model-item__params"],[1,"ai-model-item__actions"],[3,"items"],[1,"ai-model-item__confirm-label"],["icon","check","variant","danger","title","Confirm deletion",3,"action"],["icon","close","title","Cancel deletion",3,"action"],[3,"itemSelected","items"]],template:function(e,i){e&1&&(Is(0,"div",0)(1,"div",1)(2,"span",2),qC(3),pl(),Is(4,"span",3),qC(5),pl(),Is(6,"span",4)(7,"span"),qC(8),pl()()(),Is(9,"div",5),tC(10,A,4,0)(11,P,1,1,"ds-kebab-menu",6),pl()()),e&2&&(JE(3),Zg(i.displayTitle),JE(2),Zg(i.model().apiModelName),JE(3),vl("priority: ",i.model().priority),JE(2),nC(i.pendingDelete()?10:i.readOnly()?-1:11));},dependencies:[Kn,Zn,Se],styles:[".ai-model-item[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem;padding:14px 16px;position:relative;border-radius:0;border:1px solid var(--color-divider);background:var(--color-bg);box-shadow:var(--shadow-sm);overflow:visible;transition:border-color .15s ease}.ai-model-item[_ngcontent-%COMP%]:hover{border-color:var(--color-accent)}.ai-model-item__body[_ngcontent-%COMP%]{flex:1;display:flex;flex-direction:column;gap:.2rem;min-width:0}.ai-model-item__name[_ngcontent-%COMP%]{font-size:15px;font-weight:600;color:var(--color-text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ai-model-item__api-name[_ngcontent-%COMP%]{font-size:13px;color:var(--color-text-secondary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ai-model-item__params[_ngcontent-%COMP%]{display:flex;gap:.75rem;font-size:13px;color:var(--color-text-secondary)}.ai-model-item__actions[_ngcontent-%COMP%]{flex-shrink:0;display:flex;align-items:center;gap:.125rem;opacity:0;transition:opacity .15s ease}.ai-model-item[_ngcontent-%COMP%]:hover .ai-model-item__actions[_ngcontent-%COMP%], .ai-model-item[_ngcontent-%COMP%]:focus-within .ai-model-item__actions[_ngcontent-%COMP%]{opacity:1}.ai-model-item__confirm-label[_ngcontent-%COMP%]{font-family:var(--font-heading);font-size:11px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--red-deep);margin-right:.25rem;white-space:nowrap}"]})};export{I};
1
+ import {K as Kn,Z as Zn,S as Se}from'./chunk-l0HLnBLv.js';import {cb as TB,cc as CB,z as zi,h as Rw,I as Is,q as qC,m as pl,t as tC,J as JE,a8 as Zg,a5 as vl,v as nC,a9 as fC,A as Ag,ac as yC,T as Tg,aa as If,ab as wf}from'./main-6K2UFGD2.js';function A(o,a){if(o&1){let e=fC();Is(0,"span",7),qC(1,"Delete?"),pl(),Is(2,"ds-icon-button",8),Ag("action",function(){If(e);let l=yC();return wf(l.onDeleteConfirmed())}),pl(),Is(3,"ds-icon-button",9),Ag("action",function(){If(e);let l=yC();return wf(l.onDeleteCancelled())}),pl();}}function P(o,a){if(o&1){let e=fC();Is(0,"ds-kebab-menu",10),Ag("itemSelected",function(l){If(e);let O=yC();return wf(O.onMenuAction(l))}),pl();}if(o&2){let e=yC();Tg("items",e.menuItems);}}var I=class o{model=TB.required();namespaceId=TB(void 0);readOnly=TB(false);deleteRequested=CB();editRequested=CB();pendingDelete=zi(false);menuItems=[{key:"edit",label:"Edit model",icon:"edit"},{key:"delete",label:"Delete model",icon:"delete",variant:"danger"}];get displayTitle(){return this.model().alias??this.model().apiModelName}onMenuAction(a){switch(a){case "edit":this.editRequested.emit(this.model());break;case "delete":this.pendingDelete.set(true);break}}onDeleteConfirmed(){this.pendingDelete.set(false),this.deleteRequested.emit(this.model());}onDeleteCancelled(){this.pendingDelete.set(false);}static \u0275fac=function(e){return new(e||o)};static \u0275cmp=Rw({type:o,selectors:[["agentos-ai-model-item"]],inputs:{model:[1,"model"],namespaceId:[1,"namespaceId"],readOnly:[1,"readOnly"]},outputs:{deleteRequested:"deleteRequested",editRequested:"editRequested"},decls:12,vars:4,consts:[["role","listitem","dsBlueprint","",1,"ai-model-item"],[1,"ai-model-item__body"],[1,"ai-model-item__name"],[1,"ai-model-item__api-name"],[1,"ai-model-item__params"],[1,"ai-model-item__actions"],[3,"items"],[1,"ai-model-item__confirm-label"],["icon","check","variant","danger","title","Confirm deletion",3,"action"],["icon","close","title","Cancel deletion",3,"action"],[3,"itemSelected","items"]],template:function(e,i){e&1&&(Is(0,"div",0)(1,"div",1)(2,"span",2),qC(3),pl(),Is(4,"span",3),qC(5),pl(),Is(6,"span",4)(7,"span"),qC(8),pl()()(),Is(9,"div",5),tC(10,A,4,0)(11,P,1,1,"ds-kebab-menu",6),pl()()),e&2&&(JE(3),Zg(i.displayTitle),JE(2),Zg(i.model().apiModelName),JE(3),vl("priority: ",i.model().priority),JE(2),nC(i.pendingDelete()?10:i.readOnly()?-1:11));},dependencies:[Kn,Zn,Se],styles:[".ai-model-item[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem;padding:14px 16px;position:relative;border-radius:0;border:1px solid var(--color-divider);background:var(--color-bg);box-shadow:var(--shadow-sm);overflow:visible;transition:border-color .15s ease}.ai-model-item[_ngcontent-%COMP%]:hover{border-color:var(--color-accent)}.ai-model-item__body[_ngcontent-%COMP%]{flex:1;display:flex;flex-direction:column;gap:.2rem;min-width:0}.ai-model-item__name[_ngcontent-%COMP%]{font-size:15px;font-weight:600;color:var(--color-text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ai-model-item__api-name[_ngcontent-%COMP%]{font-size:13px;color:var(--color-text-secondary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ai-model-item__params[_ngcontent-%COMP%]{display:flex;gap:.75rem;font-size:13px;color:var(--color-text-secondary)}.ai-model-item__actions[_ngcontent-%COMP%]{flex-shrink:0;display:flex;align-items:center;gap:.125rem;opacity:0;transition:opacity .15s ease}.ai-model-item[_ngcontent-%COMP%]:hover .ai-model-item__actions[_ngcontent-%COMP%], .ai-model-item[_ngcontent-%COMP%]:focus-within .ai-model-item__actions[_ngcontent-%COMP%]{opacity:1}.ai-model-item__confirm-label[_ngcontent-%COMP%]{font-family:var(--font-heading);font-size:11px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--red-deep);margin-right:.25rem;white-space:nowrap}"]})};export{I};
@@ -1 +1 @@
1
- import {g,ao as V,G,d5 as N,w as we,z as zi,c as U$1,a as z$1,b as P,h as Rw,I as Is,A as Ag,q as qC,m as pl,t as tC,J as JE,a8 as Zg,v as nC,a9 as fC,n as bg,a3 as UI,ac as yC,T as Tg,a6 as zI,a5 as vl,aa as If,ab as wf}from'./main-4SCUMPDY.js';import {o as z,k as _t,b as _e,n as ni,J as Jn,Y as Ye,f as fn,Z as Zn,l as Xn,$ as $t,C as Cn,E as En}from'./chunk-LgALnta4.js';function U(l,r){l&1&&(Is(0,"p",5),qC(1,"Loading\u2026"),pl());}function H(l,r){if(l&1){let e=fC();Is(0,"form",7),Ag("ngSubmit",function(){If(e);let u=yC();return wf(u.submit())}),Is(1,"div",8)(2,"label",9),qC(3,"Name "),Is(4,"span",10),qC(5,"*"),pl()(),bg(6,"input",11),UI(),pl(),Is(7,"div",8)(8,"label",12),qC(9,"Description"),pl(),bg(10,"textarea",13),UI(),pl(),Is(11,"div",8)(12,"label",14),qC(13,"External ID"),pl(),bg(14,"input",15),UI(),pl(),Is(15,"div",8)(16,"label",16),qC(17,"Default agent"),pl(),bg(18,"input",17),UI(),pl(),Is(19,"div",8)(20,"label",18),qC(21,"Config path"),pl(),bg(22,"input",19),UI(),pl(),Is(23,"div",8)(24,"label",20),qC(25,"Run cost threshold"),pl(),bg(26,"input",21),UI(),Is(27,"span",22),qC(28,"Leave empty to inherit the platform default."),pl()(),Is(29,"div",23)(30,"button",24),qC(31),pl(),Is(32,"button",25),Ag("click",function(){If(e);let u=yC();return wf(u.cancel())}),qC(33,"Cancel"),pl()()();}if(l&2){let e=yC();Tg("formGroup",e.form),JE(6),Tg("formControl",e.nameControl),zI(),JE(4),Tg("formControl",e.descriptionControl),zI(),JE(4),Tg("formControl",e.externalIdControl),zI(),JE(4),Tg("formControl",e.defaultAgentNameControl),zI(),JE(4),Tg("formControl",e.configPathControl),zI(),JE(4),Tg("formControl",e.runCostThresholdControl),zI(),JE(4),Tg("disabled",e.nameControl.invalid||e.isSubmitting()),JE(),vl(" ",e.isEditMode()?"Save changes":"Create"," ");}}var q=class l{route=g(V);router=g(G);namespaceController=g(N);destroyRef=g(we);form=new z({name:new _t("",{nonNullable:true,validators:[_e.required,_e.minLength(1)]}),description:new _t("",{nonNullable:true}),configPath:new _t("",{nonNullable:true}),externalId:new _t("",{nonNullable:true}),defaultAgentName:new _t("",{nonNullable:true}),runCostThreshold:new _t(null)});get nameControl(){return this.form.controls.name}get descriptionControl(){return this.form.controls.description}get configPathControl(){return this.form.controls.configPath}get externalIdControl(){return this.form.controls.externalId}get defaultAgentNameControl(){return this.form.controls.defaultAgentName}get runCostThresholdControl(){return this.form.controls.runCostThreshold}isEditMode=zi(false);isSubmitting=zi(false);isLoading=zi(false);existingNamespace=null;ngOnInit(){let r=this.route.snapshot.paramMap.get("namespaceId");r&&(this.isEditMode.set(true),this.loadNamespace(r));}loadNamespace(r){this.isLoading.set(true),this.namespaceController.getByIdNamespace(r).pipe(U$1(this.destroyRef)).subscribe({next:e=>{this.existingNamespace=e,this.nameControl.setValue(e.name),this.descriptionControl.setValue(e.description??""),this.configPathControl.setValue(e.configPath??""),this.externalIdControl.setValue(e.externalId??""),this.defaultAgentNameControl.setValue(e.defaultAgentName??""),this.runCostThresholdControl.setValue(e.runCostThreshold??null),this.isLoading.set(false);},error:()=>{this.isLoading.set(false),this.navigateBack();}});}submit(){if(this.nameControl.invalid||this.isSubmitting())return;this.isSubmitting.set(true);let r=z$1(P({},this.existingNamespace),{name:this.nameControl.value.trim(),description:this.descriptionControl.value.trim()||void 0,configPath:this.configPathControl.value.trim()||void 0,externalId:this.externalIdControl.value.trim()||void 0,defaultAgentName:this.defaultAgentNameControl.value.trim()||void 0,runCostThreshold:this.runCostThresholdControl.value??void 0});(this.isEditMode()?this.namespaceController.updateNamespace(this.existingNamespace.id??"",r):this.namespaceController.createNamespace(r)).pipe(U$1(this.destroyRef)).subscribe({next:()=>this.navigateBack(),error:()=>this.isSubmitting.set(false)});}cancel(){this.navigateBack();}navigateBack(){this.router.navigate(["/agentos/namespaces"]);}static \u0275fac=function(e){return new(e||l)};static \u0275cmp=Rw({type:l,selectors:[["agentos-namespace-form"]],decls:10,vars:2,consts:[[1,"namespace-form"],[1,"namespace-form__header"],["type","button","title","Back to namespaces",1,"namespace-form__back",3,"click"],[1,"namespace-form__back-icon"],[1,"namespace-form__title"],[1,"namespace-form__loading"],[1,"namespace-form__form",3,"formGroup"],[1,"namespace-form__form",3,"ngSubmit","formGroup"],[1,"namespace-form__field"],["for","ns-name",1,"namespace-form__label"],["aria-hidden","true"],["id","ns-name","type","text","placeholder","Namespace name","autocomplete","off",1,"namespace-form__input",3,"formControl"],["for","ns-description",1,"namespace-form__label"],["id","ns-description","rows","4","placeholder","Optional description",1,"namespace-form__textarea",3,"formControl"],["for","ns-external-id",1,"namespace-form__label"],["id","ns-external-id","type","text","placeholder","Optional federation ID from an external system","autocomplete","off",1,"namespace-form__input",3,"formControl"],["for","ns-default-agent",1,"namespace-form__label"],["id","ns-default-agent","type","text","placeholder","Logical name of the default agent (e.g. coday)","autocomplete","off",1,"namespace-form__input",3,"formControl"],["for","ns-config-path",1,"namespace-form__label"],["id","ns-config-path","type","text","placeholder","Optional path to base configuration directory","autocomplete","off",1,"namespace-form__input",3,"formControl"],["for","ns-run-cost-threshold",1,"namespace-form__label"],["id","ns-run-cost-threshold","type","number","min","0","step","0.01","placeholder","Optional maximum cost per run (e.g. 0.50)",1,"namespace-form__input",3,"formControl"],[1,"namespace-form__hint"],[1,"namespace-form__actions"],["type","submit",1,"namespace-form__btn","namespace-form__btn--primary",3,"disabled"],["type","button",1,"namespace-form__btn",3,"click"]],template:function(e,p){e&1&&(Is(0,"div",0)(1,"header",1)(2,"button",2),Ag("click",function(){return p.cancel()}),Is(3,"span",3),qC(4,"\u2190"),pl(),qC(5," Namespaces "),pl(),Is(6,"h1",4),qC(7),pl()(),tC(8,U,2,0,"p",5)(9,H,34,9,"form",6),pl()),e&2&&(JE(7),Zg(p.isEditMode()?"Edit namespace":"New namespace"),JE(),nC(p.isLoading()?8:9));},dependencies:[ni,Jn,Ye,fn,Zn,Xn,$t,Cn,En],styles:[".namespace-form[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:2rem;max-width:480px;margin:0 auto;padding:2rem 1rem}.namespace-form__header[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.5rem}.namespace-form__back[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:.375rem;background:none;border:none;padding:0;cursor:pointer;font-size:.875rem;color:var(--color-accent)}.namespace-form__back[_ngcontent-%COMP%]:hover{text-decoration:underline}.namespace-form__back-icon[_ngcontent-%COMP%]{font-size:1rem;line-height:1}.namespace-form__title[_ngcontent-%COMP%]{margin:0;font-size:1.5rem;font-weight:700;color:var(--color-text);letter-spacing:-.02em}.namespace-form__loading[_ngcontent-%COMP%]{color:var(--color-text-secondary);font-size:.9rem;margin:0}.namespace-form__form[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:1.25rem}.namespace-form__field[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.375rem}.namespace-form__label[_ngcontent-%COMP%]{font-size:.875rem;font-weight:500;color:var(--color-text)}.namespace-form__input[_ngcontent-%COMP%], .namespace-form__textarea[_ngcontent-%COMP%]{width:100%;padding:.625rem .875rem;border-radius:0;border:1px solid var(--color-divider);background:var(--color-surface);color:var(--color-text);font-size:.9375rem;font-family:inherit;outline:none;box-sizing:border-box;transition:border-color .15s ease}.namespace-form__input[_ngcontent-%COMP%]:focus, .namespace-form__textarea[_ngcontent-%COMP%]:focus{border-color:var(--color-accent)}.namespace-form__input[_ngcontent-%COMP%]::placeholder, .namespace-form__textarea[_ngcontent-%COMP%]::placeholder{color:var(--color-neutral-500)}.namespace-form__textarea[_ngcontent-%COMP%]{resize:vertical;min-height:96px;line-height:1.5}.namespace-form__hint[_ngcontent-%COMP%]{font-size:.8rem;color:var(--color-text-secondary)}.namespace-form__actions[_ngcontent-%COMP%]{display:flex;gap:.75rem;padding-top:.5rem}.namespace-form__btn[_ngcontent-%COMP%]{padding:.6rem 1.25rem;border-radius:0;border:1px solid var(--color-divider);background:transparent;color:var(--color-text);font-size:13px;font-family:var(--font-heading);font-weight:600;cursor:pointer;transition:background .15s ease,border-color .15s ease}.namespace-form__btn[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--color-bg-hover);border-color:var(--color-neutral-500)}.namespace-form__btn[_ngcontent-%COMP%]:disabled{opacity:.45;cursor:not-allowed}.namespace-form__btn--primary[_ngcontent-%COMP%]{background:var(--color-accent);border-color:var(--color-accent);color:#fff}.namespace-form__btn--primary[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--color-accent-700);border-color:var(--color-accent-700)}"]})};export{q as NamespaceFormComponent};
1
+ import {g,ao as V,G,d5 as N,w as we,z as zi,c as U$1,a as z$1,b as P,h as Rw,I as Is,A as Ag,q as qC,m as pl,t as tC,J as JE,a8 as Zg,v as nC,a9 as fC,n as bg,a3 as UI,ac as yC,T as Tg,a6 as zI,a5 as vl,aa as If,ab as wf}from'./main-6K2UFGD2.js';import {o as z,k as _t,b as _e,n as ni,J as Jn,Y as Ye,f as fn,Z as Zn,l as Xn,$ as $t,C as Cn,E as En}from'./chunk-C9tuHQmZ.js';function U(l,r){l&1&&(Is(0,"p",5),qC(1,"Loading\u2026"),pl());}function H(l,r){if(l&1){let e=fC();Is(0,"form",7),Ag("ngSubmit",function(){If(e);let u=yC();return wf(u.submit())}),Is(1,"div",8)(2,"label",9),qC(3,"Name "),Is(4,"span",10),qC(5,"*"),pl()(),bg(6,"input",11),UI(),pl(),Is(7,"div",8)(8,"label",12),qC(9,"Description"),pl(),bg(10,"textarea",13),UI(),pl(),Is(11,"div",8)(12,"label",14),qC(13,"External ID"),pl(),bg(14,"input",15),UI(),pl(),Is(15,"div",8)(16,"label",16),qC(17,"Default agent"),pl(),bg(18,"input",17),UI(),pl(),Is(19,"div",8)(20,"label",18),qC(21,"Config path"),pl(),bg(22,"input",19),UI(),pl(),Is(23,"div",8)(24,"label",20),qC(25,"Run cost threshold"),pl(),bg(26,"input",21),UI(),Is(27,"span",22),qC(28,"Leave empty to inherit the platform default."),pl()(),Is(29,"div",23)(30,"button",24),qC(31),pl(),Is(32,"button",25),Ag("click",function(){If(e);let u=yC();return wf(u.cancel())}),qC(33,"Cancel"),pl()()();}if(l&2){let e=yC();Tg("formGroup",e.form),JE(6),Tg("formControl",e.nameControl),zI(),JE(4),Tg("formControl",e.descriptionControl),zI(),JE(4),Tg("formControl",e.externalIdControl),zI(),JE(4),Tg("formControl",e.defaultAgentNameControl),zI(),JE(4),Tg("formControl",e.configPathControl),zI(),JE(4),Tg("formControl",e.runCostThresholdControl),zI(),JE(4),Tg("disabled",e.nameControl.invalid||e.isSubmitting()),JE(),vl(" ",e.isEditMode()?"Save changes":"Create"," ");}}var q=class l{route=g(V);router=g(G);namespaceController=g(N);destroyRef=g(we);form=new z({name:new _t("",{nonNullable:true,validators:[_e.required,_e.minLength(1)]}),description:new _t("",{nonNullable:true}),configPath:new _t("",{nonNullable:true}),externalId:new _t("",{nonNullable:true}),defaultAgentName:new _t("",{nonNullable:true}),runCostThreshold:new _t(null)});get nameControl(){return this.form.controls.name}get descriptionControl(){return this.form.controls.description}get configPathControl(){return this.form.controls.configPath}get externalIdControl(){return this.form.controls.externalId}get defaultAgentNameControl(){return this.form.controls.defaultAgentName}get runCostThresholdControl(){return this.form.controls.runCostThreshold}isEditMode=zi(false);isSubmitting=zi(false);isLoading=zi(false);existingNamespace=null;ngOnInit(){let r=this.route.snapshot.paramMap.get("namespaceId");r&&(this.isEditMode.set(true),this.loadNamespace(r));}loadNamespace(r){this.isLoading.set(true),this.namespaceController.getByIdNamespace(r).pipe(U$1(this.destroyRef)).subscribe({next:e=>{this.existingNamespace=e,this.nameControl.setValue(e.name),this.descriptionControl.setValue(e.description??""),this.configPathControl.setValue(e.configPath??""),this.externalIdControl.setValue(e.externalId??""),this.defaultAgentNameControl.setValue(e.defaultAgentName??""),this.runCostThresholdControl.setValue(e.runCostThreshold??null),this.isLoading.set(false);},error:()=>{this.isLoading.set(false),this.navigateBack();}});}submit(){if(this.nameControl.invalid||this.isSubmitting())return;this.isSubmitting.set(true);let r=z$1(P({},this.existingNamespace),{name:this.nameControl.value.trim(),description:this.descriptionControl.value.trim()||void 0,configPath:this.configPathControl.value.trim()||void 0,externalId:this.externalIdControl.value.trim()||void 0,defaultAgentName:this.defaultAgentNameControl.value.trim()||void 0,runCostThreshold:this.runCostThresholdControl.value??void 0});(this.isEditMode()?this.namespaceController.updateNamespace(this.existingNamespace.id??"",r):this.namespaceController.createNamespace(r)).pipe(U$1(this.destroyRef)).subscribe({next:()=>this.navigateBack(),error:()=>this.isSubmitting.set(false)});}cancel(){this.navigateBack();}navigateBack(){this.router.navigate(["/agentos/namespaces"]);}static \u0275fac=function(e){return new(e||l)};static \u0275cmp=Rw({type:l,selectors:[["agentos-namespace-form"]],decls:10,vars:2,consts:[[1,"namespace-form"],[1,"namespace-form__header"],["type","button","title","Back to namespaces",1,"namespace-form__back",3,"click"],[1,"namespace-form__back-icon"],[1,"namespace-form__title"],[1,"namespace-form__loading"],[1,"namespace-form__form",3,"formGroup"],[1,"namespace-form__form",3,"ngSubmit","formGroup"],[1,"namespace-form__field"],["for","ns-name",1,"namespace-form__label"],["aria-hidden","true"],["id","ns-name","type","text","placeholder","Namespace name","autocomplete","off",1,"namespace-form__input",3,"formControl"],["for","ns-description",1,"namespace-form__label"],["id","ns-description","rows","4","placeholder","Optional description",1,"namespace-form__textarea",3,"formControl"],["for","ns-external-id",1,"namespace-form__label"],["id","ns-external-id","type","text","placeholder","Optional federation ID from an external system","autocomplete","off",1,"namespace-form__input",3,"formControl"],["for","ns-default-agent",1,"namespace-form__label"],["id","ns-default-agent","type","text","placeholder","Logical name of the default agent (e.g. coday)","autocomplete","off",1,"namespace-form__input",3,"formControl"],["for","ns-config-path",1,"namespace-form__label"],["id","ns-config-path","type","text","placeholder","Optional path to base configuration directory","autocomplete","off",1,"namespace-form__input",3,"formControl"],["for","ns-run-cost-threshold",1,"namespace-form__label"],["id","ns-run-cost-threshold","type","number","min","0","step","0.01","placeholder","Optional maximum cost per run (e.g. 0.50)",1,"namespace-form__input",3,"formControl"],[1,"namespace-form__hint"],[1,"namespace-form__actions"],["type","submit",1,"namespace-form__btn","namespace-form__btn--primary",3,"disabled"],["type","button",1,"namespace-form__btn",3,"click"]],template:function(e,p){e&1&&(Is(0,"div",0)(1,"header",1)(2,"button",2),Ag("click",function(){return p.cancel()}),Is(3,"span",3),qC(4,"\u2190"),pl(),qC(5," Namespaces "),pl(),Is(6,"h1",4),qC(7),pl()(),tC(8,U,2,0,"p",5)(9,H,34,9,"form",6),pl()),e&2&&(JE(7),Zg(p.isEditMode()?"Edit namespace":"New namespace"),JE(),nC(p.isLoading()?8:9));},dependencies:[ni,Jn,Ye,fn,Zn,Xn,$t,Cn,En],styles:[".namespace-form[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:2rem;max-width:480px;margin:0 auto;padding:2rem 1rem}.namespace-form__header[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.5rem}.namespace-form__back[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:.375rem;background:none;border:none;padding:0;cursor:pointer;font-size:.875rem;color:var(--color-accent)}.namespace-form__back[_ngcontent-%COMP%]:hover{text-decoration:underline}.namespace-form__back-icon[_ngcontent-%COMP%]{font-size:1rem;line-height:1}.namespace-form__title[_ngcontent-%COMP%]{margin:0;font-size:1.5rem;font-weight:700;color:var(--color-text);letter-spacing:-.02em}.namespace-form__loading[_ngcontent-%COMP%]{color:var(--color-text-secondary);font-size:.9rem;margin:0}.namespace-form__form[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:1.25rem}.namespace-form__field[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.375rem}.namespace-form__label[_ngcontent-%COMP%]{font-size:.875rem;font-weight:500;color:var(--color-text)}.namespace-form__input[_ngcontent-%COMP%], .namespace-form__textarea[_ngcontent-%COMP%]{width:100%;padding:.625rem .875rem;border-radius:0;border:1px solid var(--color-divider);background:var(--color-surface);color:var(--color-text);font-size:.9375rem;font-family:inherit;outline:none;box-sizing:border-box;transition:border-color .15s ease}.namespace-form__input[_ngcontent-%COMP%]:focus, .namespace-form__textarea[_ngcontent-%COMP%]:focus{border-color:var(--color-accent)}.namespace-form__input[_ngcontent-%COMP%]::placeholder, .namespace-form__textarea[_ngcontent-%COMP%]::placeholder{color:var(--color-neutral-500)}.namespace-form__textarea[_ngcontent-%COMP%]{resize:vertical;min-height:96px;line-height:1.5}.namespace-form__hint[_ngcontent-%COMP%]{font-size:.8rem;color:var(--color-text-secondary)}.namespace-form__actions[_ngcontent-%COMP%]{display:flex;gap:.75rem;padding-top:.5rem}.namespace-form__btn[_ngcontent-%COMP%]{padding:.6rem 1.25rem;border-radius:0;border:1px solid var(--color-divider);background:transparent;color:var(--color-text);font-size:13px;font-family:var(--font-heading);font-weight:600;cursor:pointer;transition:background .15s ease,border-color .15s ease}.namespace-form__btn[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--color-bg-hover);border-color:var(--color-neutral-500)}.namespace-form__btn[_ngcontent-%COMP%]:disabled{opacity:.45;cursor:not-allowed}.namespace-form__btn--primary[_ngcontent-%COMP%]{background:var(--color-accent);border-color:var(--color-accent);color:#fff}.namespace-form__btn--primary[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--color-accent-700);border-color:var(--color-accent-700)}"]})};export{q as NamespaceFormComponent};
@@ -1 +1 @@
1
- import {z}from'./chunk-Cqva3eF5.js';import {s}from'./chunk-BM9I1k6S.js';import {g as g$1,G,P,R as Re,w as we,F,y as yT,a as z$1,b as P$1,ae as Ot,c as U,h as Rw,k as Gn,s as si,I as Is,A as Ag,n as bg,m as pl,af as Dg,ag as pT,r as bC,J as JE,T as Tg,a9 as fC,aa as If,ac as yC,ab as wf,q as qC,ah as oT}from'./main-4SCUMPDY.js';import'./chunk-CkXXby9d.js';import {W as Wn,o as ot}from'./chunk-BESIk8ll.js';import'./chunk-BSY9MBD-.js';import {y as yt,w as wt}from'./chunk-LgALnta4.js';var ee=()=>[];function te(u,t){if(u&1){let o=fC();Is(0,"div",5)(1,"ds-entity-card",6),Ag("selected",function(r){If(o);let i=yC();return wf(i.onItemSelected(r))}),pl(),Is(2,"button",7),Ag("click",function(r){let i=If(o).$implicit,f=yC();return r.stopPropagation(),wf(f.onDeleteRequested(i.id))}),Is(3,"mat-icon"),qC(4,"close"),pl()()();}if(u&2){let o=t.$implicit;JE(),Tg("id",o.id)("name",o.name)("description",o.description)("badges",o.badges??oT(4,ee));}}var g="__",Y=class u{router=g$1(G);projectStateService=g$1(P);dialog=g$1(Re);destroyRef=g$1(we);notification=g$1(s);projects=F(this.projectStateService.projectList$);forcedProject=F(this.projectStateService.forcedProject$,{initialValue:null});isLoading=F(this.projectStateService.isLoading$,{initialValue:false});projectItems=yT(()=>{let t=this.projects();if(!t)return [];let o=t.filter(e=>!e.name.includes(g)),n=t.filter(e=>e.name.includes(g)),r=new Set(o.map(e=>e.name)),i=e=>e.split(g)[0]??null,f=new Set(n.map(e=>i(e.name)).filter(e=>e!==null&&r.has(e))),l=[],G=[...f].sort((e,a)=>e.localeCompare(a));for(let e of G){let a=o.find(s=>s.name===e);l.push(z$1(P$1({},this.toEntityListItem(a)),{groupKey:e,groupLabel:e}));let Z=n.filter(s=>i(s.name)===e).sort((s,C)=>s.name.localeCompare(C.name));for(let s of Z){let C=s.name.slice(e.length+g.length);l.push(z$1(P$1({},this.toEntityListItem(s)),{name:C,description:s.name,groupKey:e,groupLabel:e}));}}let H=[...o].filter(e=>!f.has(e.name)&&!e.volatile).sort((e,a)=>e.name.localeCompare(a.name));for(let e of H)l.push(z$1(P$1({},this.toEntityListItem(e)),{groupKey:"__standalone__",groupLabel:"Projects"}));let Q=[...o].filter(e=>!f.has(e.name)&&e.volatile).sort((e,a)=>e.name.localeCompare(a.name));for(let e of Q)l.push(z$1(P$1({},this.toEntityListItem(e)),{groupKey:"__volatile__",groupLabel:"Temporary"}));let X=n.filter(e=>{let a=i(e.name);return a!==null&&!r.has(a)}).sort((e,a)=>e.name.localeCompare(a.name));for(let e of X)l.push(z$1(P$1({},this.toEntityListItem(e)),{groupKey:"__orphaned__",groupLabel:"Orphaned worktrees"}));return l});showCreateButton=yT(()=>!this.forcedProject());constructor(){}onItemSelected(t){this.projectStateService.selectProject(t),this.router.navigate(["project",t]);}onCreateRequested(){this.router.navigate(["project","new"]);}onDeleteRequested(t){let o=t.includes(g);this.dialog.open(z,{width:"400px",panelClass:"confirm-dialog-panel",data:P$1({title:"Delete project",message:`This will remove the project "${t}" from Coday and archive its configuration. The project source code on disk is not affected.`,confirmLabel:"Delete",cancelLabel:"Cancel",isDestructive:true},o?{checkboxLabel:"Also remove git worktree from disk"}:{})}).afterClosed().pipe(Ot(r=>r?.confirmed===true),U(this.destroyRef)).subscribe(r=>{this.notification.info("Deleting project\u2026"),this.projectStateService.deleteProject(t,r.checkboxChecked).pipe(U(this.destroyRef)).subscribe({next:()=>{this.notification.success(`Project "${t}" deleted`),this.router.url.includes(`/project/${encodeURIComponent(t)}`)&&this.router.navigate(["/"]);},error:i=>{console.error("[PROJECT-LIST] Failed to delete project:",i),this.notification.error(i?.error?.error??"Failed to delete project");}});});}toEntityListItem(t){return {id:t.name,name:t.name,badges:t.volatile?[{label:"temp",variant:"warning"}]:[]}}static \u0275fac=function(o){return new(o||u)};static \u0275cmp=Rw({type:u,selectors:[["app-project-selection"]],decls:6,vars:5,consts:[["projectCard",""],[1,"project-page-layout"],["title","Projects","contentMaxWidth","1400px","searchPlaceholder","Filter projects\u2026","emptyMessage","No projects found.",3,"itemSelected","createRequested","items","loading","itemTemplate","showCreate","autoFocusSearch"],["toolbar-start","","routerLink","/","title","Back to tasks",1,"project-list__logo"],["src","CODAY-Logo.png","alt","Coday"],[1,"project-card-wrapper"],[3,"selected","id","name","description","badges"],["mat-icon-button","","title","Delete project",1,"project-card-wrapper__delete",3,"click"]],template:function(o,n){if(o&1&&(Is(0,"div",1)(1,"ds-entity-list",2),Ag("itemSelected",function(i){return n.onItemSelected(i)})("createRequested",function(){return n.onCreateRequested()}),Is(2,"a",3),bg(3,"img",4),pl()()(),Dg(4,te,5,5,"ng-template",null,0,pT)),o&2){let r=bC(5);JE(),Tg("items",n.projectItems())("loading",n.isLoading())("itemTemplate",r)("showCreate",n.showCreateButton())("autoFocusSearch",true);}},dependencies:[Wn,ot,yt,wt,Gn,si],styles:["[_nghost-%COMP%]{display:block;width:100%;min-height:100vh;background:var(--color-bg);overflow-y:auto}.project-page-layout[_ngcontent-%COMP%]{display:flex;flex-direction:column;width:100%}.project-list__logo[_ngcontent-%COMP%]{display:flex;align-items:center;flex-shrink:0;border-radius:4px;opacity:.85;transition:opacity .15s ease;cursor:pointer}.project-list__logo[_ngcontent-%COMP%]:hover{opacity:1}.project-list__logo[_ngcontent-%COMP%] img[_ngcontent-%COMP%]{width:40px;height:40px;object-fit:contain;border-radius:4px}.project-card-wrapper[_ngcontent-%COMP%]{position:relative}.project-card-wrapper__delete[_ngcontent-%COMP%]{position:absolute;top:4px;right:4px;width:28px;height:28px;line-height:28px;padding:0;opacity:0;transition:opacity .15s ease;color:var(--color-text-secondary, #6e6e73)}.project-card-wrapper__delete[_ngcontent-%COMP%] .mat-icon[_ngcontent-%COMP%]{font-size:16px;width:16px;height:16px}.project-card-wrapper__delete[_ngcontent-%COMP%]:hover{color:var(--color-error, #ff3b30)}.project-card-wrapper[_ngcontent-%COMP%]:hover .project-card-wrapper__delete[_ngcontent-%COMP%]{opacity:1}"],changeDetection:1})};export{Y as ProjectListComponent};
1
+ import {z}from'./chunk-CnnGSYzi.js';import {s}from'./chunk-XgEfnfT0.js';import {g as g$1,G,P,R as Re,w as we,F,y as yT,a as z$1,b as P$1,ae as Ot,c as U,h as Rw,k as Gn,s as si,I as Is,A as Ag,n as bg,m as pl,af as Dg,ag as pT,r as bC,J as JE,T as Tg,a9 as fC,aa as If,ac as yC,ab as wf,q as qC,ah as oT}from'./main-6K2UFGD2.js';import'./chunk-fP29MqaN.js';import {W as Wn,o as ot}from'./chunk-l0HLnBLv.js';import'./chunk-DTIhOEG_.js';import {y as yt,w as wt}from'./chunk-C9tuHQmZ.js';var ee=()=>[];function te(u,t){if(u&1){let o=fC();Is(0,"div",5)(1,"ds-entity-card",6),Ag("selected",function(r){If(o);let i=yC();return wf(i.onItemSelected(r))}),pl(),Is(2,"button",7),Ag("click",function(r){let i=If(o).$implicit,f=yC();return r.stopPropagation(),wf(f.onDeleteRequested(i.id))}),Is(3,"mat-icon"),qC(4,"close"),pl()()();}if(u&2){let o=t.$implicit;JE(),Tg("id",o.id)("name",o.name)("description",o.description)("badges",o.badges??oT(4,ee));}}var g="__",Y=class u{router=g$1(G);projectStateService=g$1(P);dialog=g$1(Re);destroyRef=g$1(we);notification=g$1(s);projects=F(this.projectStateService.projectList$);forcedProject=F(this.projectStateService.forcedProject$,{initialValue:null});isLoading=F(this.projectStateService.isLoading$,{initialValue:false});projectItems=yT(()=>{let t=this.projects();if(!t)return [];let o=t.filter(e=>!e.name.includes(g)),n=t.filter(e=>e.name.includes(g)),r=new Set(o.map(e=>e.name)),i=e=>e.split(g)[0]??null,f=new Set(n.map(e=>i(e.name)).filter(e=>e!==null&&r.has(e))),l=[],G=[...f].sort((e,a)=>e.localeCompare(a));for(let e of G){let a=o.find(s=>s.name===e);l.push(z$1(P$1({},this.toEntityListItem(a)),{groupKey:e,groupLabel:e}));let Z=n.filter(s=>i(s.name)===e).sort((s,C)=>s.name.localeCompare(C.name));for(let s of Z){let C=s.name.slice(e.length+g.length);l.push(z$1(P$1({},this.toEntityListItem(s)),{name:C,description:s.name,groupKey:e,groupLabel:e}));}}let H=[...o].filter(e=>!f.has(e.name)&&!e.volatile).sort((e,a)=>e.name.localeCompare(a.name));for(let e of H)l.push(z$1(P$1({},this.toEntityListItem(e)),{groupKey:"__standalone__",groupLabel:"Projects"}));let Q=[...o].filter(e=>!f.has(e.name)&&e.volatile).sort((e,a)=>e.name.localeCompare(a.name));for(let e of Q)l.push(z$1(P$1({},this.toEntityListItem(e)),{groupKey:"__volatile__",groupLabel:"Temporary"}));let X=n.filter(e=>{let a=i(e.name);return a!==null&&!r.has(a)}).sort((e,a)=>e.name.localeCompare(a.name));for(let e of X)l.push(z$1(P$1({},this.toEntityListItem(e)),{groupKey:"__orphaned__",groupLabel:"Orphaned worktrees"}));return l});showCreateButton=yT(()=>!this.forcedProject());constructor(){}onItemSelected(t){this.projectStateService.selectProject(t),this.router.navigate(["project",t]);}onCreateRequested(){this.router.navigate(["project","new"]);}onDeleteRequested(t){let o=t.includes(g);this.dialog.open(z,{width:"400px",panelClass:"confirm-dialog-panel",data:P$1({title:"Delete project",message:`This will remove the project "${t}" from Coday and archive its configuration. The project source code on disk is not affected.`,confirmLabel:"Delete",cancelLabel:"Cancel",isDestructive:true},o?{checkboxLabel:"Also remove git worktree from disk"}:{})}).afterClosed().pipe(Ot(r=>r?.confirmed===true),U(this.destroyRef)).subscribe(r=>{this.notification.info("Deleting project\u2026"),this.projectStateService.deleteProject(t,r.checkboxChecked).pipe(U(this.destroyRef)).subscribe({next:()=>{this.notification.success(`Project "${t}" deleted`),this.router.url.includes(`/project/${encodeURIComponent(t)}`)&&this.router.navigate(["/"]);},error:i=>{console.error("[PROJECT-LIST] Failed to delete project:",i),this.notification.error(i?.error?.error??"Failed to delete project");}});});}toEntityListItem(t){return {id:t.name,name:t.name,badges:t.volatile?[{label:"temp",variant:"warning"}]:[]}}static \u0275fac=function(o){return new(o||u)};static \u0275cmp=Rw({type:u,selectors:[["app-project-selection"]],decls:6,vars:5,consts:[["projectCard",""],[1,"project-page-layout"],["title","Projects","contentMaxWidth","1400px","searchPlaceholder","Filter projects\u2026","emptyMessage","No projects found.",3,"itemSelected","createRequested","items","loading","itemTemplate","showCreate","autoFocusSearch"],["toolbar-start","","routerLink","/","title","Back to tasks",1,"project-list__logo"],["src","CODAY-Logo.png","alt","Coday"],[1,"project-card-wrapper"],[3,"selected","id","name","description","badges"],["mat-icon-button","","title","Delete project",1,"project-card-wrapper__delete",3,"click"]],template:function(o,n){if(o&1&&(Is(0,"div",1)(1,"ds-entity-list",2),Ag("itemSelected",function(i){return n.onItemSelected(i)})("createRequested",function(){return n.onCreateRequested()}),Is(2,"a",3),bg(3,"img",4),pl()()(),Dg(4,te,5,5,"ng-template",null,0,pT)),o&2){let r=bC(5);JE(),Tg("items",n.projectItems())("loading",n.isLoading())("itemTemplate",r)("showCreate",n.showCreateButton())("autoFocusSearch",true);}},dependencies:[Wn,ot,yt,wt,Gn,si],styles:["[_nghost-%COMP%]{display:block;width:100%;min-height:100vh;background:var(--color-bg);overflow-y:auto}.project-page-layout[_ngcontent-%COMP%]{display:flex;flex-direction:column;width:100%}.project-list__logo[_ngcontent-%COMP%]{display:flex;align-items:center;flex-shrink:0;border-radius:4px;opacity:.85;transition:opacity .15s ease;cursor:pointer}.project-list__logo[_ngcontent-%COMP%]:hover{opacity:1}.project-list__logo[_ngcontent-%COMP%] img[_ngcontent-%COMP%]{width:40px;height:40px;object-fit:contain;border-radius:4px}.project-card-wrapper[_ngcontent-%COMP%]{position:relative}.project-card-wrapper__delete[_ngcontent-%COMP%]{position:absolute;top:4px;right:4px;width:28px;height:28px;line-height:28px;padding:0;opacity:0;transition:opacity .15s ease;color:var(--color-text-secondary, #6e6e73)}.project-card-wrapper__delete[_ngcontent-%COMP%] .mat-icon[_ngcontent-%COMP%]{font-size:16px;width:16px;height:16px}.project-card-wrapper__delete[_ngcontent-%COMP%]:hover{color:var(--color-error, #ff3b30)}.project-card-wrapper[_ngcontent-%COMP%]:hover .project-card-wrapper__delete[_ngcontent-%COMP%]{opacity:1}"],changeDetection:1})};export{Y as ProjectListComponent};
@@ -1 +1 @@
1
- import {A,k as kt,b as bt}from'./chunk-BR4Pl8xo.js';import {S as St}from'./chunk-rjkvu4Y6.js';import {E as Et,y as yt$1,G as Ge}from'./chunk-Wd2dgg4g.js';import {g,G,P,U,N,p as pe$1,Q as c,w as we,z as zi,F as F$1,y as yT,c as U$1,h as Rw,i as hr,j as pr,I as Is,q as qC,m as pl,A as Ag,t as tC,o as iC,J as JE,T as Tg,v as nC,x as sC,H as Hg,C as Cg,u as ue$1,ca as _e$1,Y as x,an as ce$1,ap as Vy,l as le$1,V,n as bg,a9 as fC,aa as If,ac as yC,ab as wf,a8 as Zg,a5 as vl}from'./main-4SCUMPDY.js';import'./chunk-CkXXby9d.js';import'./chunk-CCFtehVS.js';import'./chunk-Bz081WAa.js';import'./chunk-BSY9MBD-.js';import {y as yt,w as wt}from'./chunk-LgALnta4.js';var R=class n{threadState=g(U);codayService=g(Ge);threadList=F$1(this.threadState.threadList$,{initialValue:[]});selectedThread=F$1(this.threadState.selectedThread$,{initialValue:null});isThinking=F$1(this.codayService.isThinking$,{initialValue:false});inviteEvent=F$1(this.codayService.currentInviteEvent$.pipe(ue$1(t=>t?.invite===_e$1?null:t)),{initialValue:null});tasks=yT(()=>{let t=this.threadList(),e=this.selectedThread(),r=this.isThinking(),o=this.inviteEvent();return t.filter(i=>!i.parentThreadId).map(i=>{let m=!!e&&i.id===e.id;return {id:i.id,name:i.name,summary:i.summary,modifiedDate:i.modifiedDate,starring:i.starring??[],users:i.users??[],status:this.deriveStatus(i,m,r,!!o),isActive:m,worktreeProject:i.worktreeProject}}).sort((i,m)=>{let q=kt[i.status]-kt[m.status];return q!==0?q:i.modifiedDate>m.modifiedDate?-1:1})});deriveStatus(t,e,r,o){let i=Date.now()-new Date(t.modifiedDate).getTime();return t.closedByUser?"done":t.pendingInvite?"waiting-you":e?r?"in-progress":"paused":i<bt?"in-progress":"paused"}static \u0275fac=function(e){return new(e||n)};static \u0275prov=x({token:n,factory:n.\u0275fac,providedIn:"root"})};var F=class n{projectState=g(P);threadState=g(U);destroy$=new ce$1;eventSource=null;currentProject=null;constructor(){this.projectState.selectedProject$.pipe(Vy(this.destroy$)).subscribe(t=>{let e=t?.name??null;e!==this.currentProject&&(this.disconnect(),e&&this.connect(e));});}connect(t,e=5e3){this.currentProject=t;let r=`/api/projects/${encodeURIComponent(t)}/event-stream`;console.log(`[PROJECT_SSE] Connecting to ${r}`),this.eventSource=new EventSource(r),this.eventSource.onmessage=o=>{try{let i=JSON.parse(o.data),m=le$1(i);if(!m)return;m instanceof V&&(console.log("[PROJECT_SSE] ThreadUpdateEvent \u2014 refreshing thread list"),this.threadState.refreshThreadList());}catch(i){console.warn("[PROJECT_SSE] Failed to parse event:",i);}},this.eventSource.onerror=()=>{this.eventSource?.readyState===EventSource.CLOSED&&(console.warn(`[PROJECT_SSE] Connection closed for ${t}, reconnecting in ${e}ms`),this.eventSource=null,setTimeout(()=>{this.currentProject===t&&this.connect(t,Math.min(e*2,6e4));},e));};}disconnect(){this.eventSource&&(this.eventSource.close(),this.eventSource=null,console.log(`[PROJECT_SSE] Disconnected from project ${this.currentProject}`)),this.currentProject=null;}ngOnDestroy(){this.disconnect(),this.destroy$.next(),this.destroy$.complete();}static \u0275fac=function(e){return new(e||n)};static \u0275prov=x({token:n,factory:n.\u0275fac,providedIn:"root"})};var ce=(n,t)=>t.key,de=(n,t)=>t.status,le=(n,t)=>t.id;function pe(n,t){n&1&&bg(0,"mat-spinner",6);}function me(n,t){n&1&&(Is(0,"mat-icon"),qC(1,"add"),pl());}function ue(n,t){if(n&1&&(Is(0,"span",16),qC(1),pl()),n&2){let e=yC().$implicit,r=yC();JE(),Zg(r.filterCounts()[e.key]);}}function ge(n,t){if(n&1){let e=fC();Is(0,"button",15),Ag("click",function(){let o=If(e).$implicit,i=yC();return wf(i.setFilter(o.key))}),Is(1,"mat-icon",10),qC(2),pl(),Is(3,"span"),qC(4),pl(),tC(5,ue,2,1,"span",16),pl();}if(n&2){let e=t.$implicit,r=yC();Hg("active",r.activeFilter()===e.key),Cg("aria-selected",r.activeFilter()===e.key),JE(2),Zg(e.icon),JE(2),Zg(e.label),JE(),nC(r.filterCounts()[e.key]>0?5:-1);}}function _e(n,t){n&1&&(Is(0,"div",12),bg(1,"mat-spinner",17),Is(2,"p"),qC(3,"Loading tasks\u2026"),pl()());}function fe(n,t){if(n&1){let e=fC();Is(0,"p"),qC(1,"No tasks yet. Start your first one!"),pl(),Is(2,"button",19),Ag("click",function(){If(e);let o=yC(2);return wf(o.createTask())}),Is(3,"mat-icon"),qC(4,"add"),pl(),qC(5," New Task "),pl();}}function he(n,t){n&1&&(Is(0,"p"),qC(1,"No tasks in this category."),pl());}function ke(n,t){if(n&1&&(Is(0,"div",13)(1,"mat-icon",18),qC(2,"rocket_launch"),pl(),tC(3,fe,6,0)(4,he,2,0,"p"),pl()),n&2){let e=yC();JE(3),nC(e.activeFilter()==="all"?3:4);}}function ve(n,t){if(n&1){let e=fC();Is(0,"app-task-card",25),Ag("stopRequested",function(o){If(e);let i=yC(3);return wf(i.onStopRequested(o))})("deleteRequested",function(o){If(e);let i=yC(3);return wf(i.onDeleteRequested(o))})("starToggled",function(o){If(e);let i=yC(3);return wf(i.onStarToggled(o))})("markDoneRequested",function(o){If(e);let i=yC(3);return wf(i.onMarkDoneRequested(o))})("markActiveRequested",function(o){If(e);let i=yC(3);return wf(i.onMarkActiveRequested(o))}),pl();}if(n&2){let e=t.$implicit;Tg("task",e);}}function Ce(n,t){if(n&1&&(Is(0,"section",20)(1,"h2",21)(2,"mat-icon",22),qC(3),pl(),qC(4),Is(5,"span",23),qC(6),pl()(),Is(7,"div",14),iC(8,ve,1,1,"app-task-card",24,le),pl()()),n&2){let e=t.$implicit;JE(3),Zg(e.icon),JE(),vl(" ",e.label," "),JE(2),Zg(e.tasks.length),JE(2),sC(e.tasks);}}function be(n,t){if(n&1&&iC(0,Ce,10,3,"section",20,de),n&2){let e=yC();sC(e.taskGroups());}}function ye(n,t){if(n&1){let e=fC();Is(0,"app-task-card",25),Ag("stopRequested",function(o){If(e);let i=yC(2);return wf(i.onStopRequested(o))})("deleteRequested",function(o){If(e);let i=yC(2);return wf(i.onDeleteRequested(o))})("starToggled",function(o){If(e);let i=yC(2);return wf(i.onStarToggled(o))})("markDoneRequested",function(o){If(e);let i=yC(2);return wf(i.onMarkDoneRequested(o))})("markActiveRequested",function(o){If(e);let i=yC(2);return wf(i.onMarkActiveRequested(o))}),pl();}if(n&2){let e=t.$implicit;Tg("task",e);}}function xe(n,t){if(n&1&&(Is(0,"div",14),iC(1,ye,1,1,"app-task-card",24,le),pl()),n&2){let e=yC();JE(),sC(e.filteredTasks());}}var Te=[{key:"all",label:"All",icon:"grid_view"},{key:"waiting-you",label:"Waiting for you",icon:"mark_unread_chat_alt"},{key:"in-progress",label:"In progress",icon:"pending"},{key:"paused",label:"Paused",icon:"pause_circle"},{key:"done",label:"Done",icon:"check_circle"}],se=class n{router=g(G);projectState=g(P);threadState=g(U);threadApi=g(N);taskStatus=g(R);userService=g(pe$1);projectApi=g(c);destroyRef=g(we);_projectEventStream=g(F);filters=Te;activeFilter=zi("all");starredOnly=zi(false);isCreating=zi(false);isLoadingList=F$1(this.threadState.isLoadingThreadList$,{initialValue:false});username=F$1(this.userService.username$,{initialValue:null});allTasks=this.taskStatus.tasks;filteredTasks=yT(()=>{let t=this.activeFilter(),e=this.username(),r=this.allTasks();return this.starredOnly()&&e&&(r=r.filter(o=>o.starring.includes(e))),t==="all"?r:r.filter(o=>o.status===t)});filterCounts=yT(()=>{let t=this.username(),e=this.allTasks();return this.starredOnly()&&t&&(e=e.filter(r=>r.starring.includes(t))),{all:e.length,"waiting-you":e.filter(r=>r.status==="waiting-you").length,"in-progress":e.filter(r=>r.status==="in-progress").length,paused:e.filter(r=>r.status==="paused").length,done:e.filter(r=>r.status==="done").length}});taskGroups=yT(()=>{let t=this.username(),e=this.allTasks();this.starredOnly()&&t&&(e=e.filter(o=>o.starring.includes(t)));let r=[{status:"waiting-you",label:"Waiting for you",icon:"mark_unread_chat_alt",tasks:[]},{status:"in-progress",label:"In progress",icon:"pending",tasks:[]},{status:"done",label:"Done",icon:"check_circle",tasks:[]},{status:"paused",label:"Paused",icon:"pause_circle",tasks:[]},{status:"error",label:"Error",icon:"error",tasks:[]}];for(let o of e){let i=r.find(m=>m.status===o.status);i&&i.tasks.push(o);}return r.filter(o=>o.tasks.length>0)});ngOnInit(){this.userService.fetchCurrentUser().pipe(U$1(this.destroyRef)).subscribe({error:t=>console.warn("[TASK-CONTROL] Could not fetch user:",t)});}setFilter(t){this.activeFilter.set(t);}toggleStarredFilter(){this.starredOnly.update(t=>!t);}createTask(){let t=this.projectState.getSelectedProjectId();!t||this.isCreating()||(this.isCreating.set(true),this.threadApi.createThread().pipe(U$1(this.destroyRef)).subscribe({next:e=>{this.isCreating.set(false),this.router.navigate(["project",t,"thread",e.thread.id]);},error:e=>{console.error("[TASK-CONTROL] Failed to create thread:",e),this.isCreating.set(false);}}));}onStopRequested(t){this.threadApi.stopThread(t).pipe(U$1(this.destroyRef)).subscribe({error:e=>console.error("[TASK-CONTROL] Failed to stop thread:",e)});}onDeleteRequested(t){this.threadApi.deleteThread(t).pipe(U$1(this.destroyRef)).subscribe({next:()=>this.threadState.refreshThreadList(),error:e=>console.error("[TASK-CONTROL] Failed to delete thread:",e)});}onStarToggled(t){let e=this.username();if(!e)return;let r=this.allTasks().find(m=>m.id===t);if(!r)return;let o=r.starring.includes(e),i=o?this.threadApi.unstarThread(t):this.threadApi.starThread(t);this.threadState.updateStarLocal(t,!o,e),i.pipe(U$1(this.destroyRef)).subscribe({error:m=>{console.error("[TASK-CONTROL] Failed to toggle star:",m),this.threadState.refreshThreadList();}});}onMarkDoneRequested(t){let e=this.projectState.getSelectedProjectId();e&&this.projectApi.markThreadDone(e,t).pipe(U$1(this.destroyRef)).subscribe({next:()=>this.threadState.refreshThreadList(),error:r=>console.error("[TASK-CONTROL] Failed to mark task as done:",r)});}onMarkActiveRequested(t){let e=this.projectState.getSelectedProjectId();e&&this.projectApi.markThreadActive(e,t).pipe(U$1(this.destroyRef)).subscribe({next:()=>this.threadState.refreshThreadList(),error:r=>console.error("[TASK-CONTROL] Failed to mark task as active:",r)});}static \u0275fac=function(e){return new(e||n)};static \u0275cmp=Rw({type:n,selectors:[["app-task-control"]],decls:25,vars:6,consts:[[1,"task-control"],[1,"tc-header"],[1,"tc-title-row"],[1,"tc-title"],[1,"title-icon"],["mat-flat-button","","aria-label","Start a new task",1,"new-task-btn",3,"click","disabled"],["diameter","16"],["role","tablist","aria-label","Filter tasks",1,"tc-filters"],["role","tab",1,"filter-chip",3,"active"],["role","switch","aria-label","Show starred tasks only",1,"filter-chip","starred-filter",3,"click"],[1,"filter-icon"],[1,"tc-grid-wrapper"],[1,"tc-loading"],[1,"tc-empty"],[1,"tc-grid"],["role","tab",1,"filter-chip",3,"click"],[1,"filter-badge"],["diameter","40"],[1,"empty-icon"],["mat-flat-button","",1,"new-task-btn",3,"click"],[1,"tc-group"],[1,"tc-group-title"],[1,"group-icon"],[1,"group-count"],[3,"task"],[3,"stopRequested","deleteRequested","starToggled","markDoneRequested","markActiveRequested","task"]],template:function(e,r){e&1&&(Is(0,"app-sidenav")(1,"div",0)(2,"header",1)(3,"div",2)(4,"h1",3)(5,"mat-icon",4),qC(6,"rocket_launch"),pl(),qC(7," Task Control "),pl(),Is(8,"button",5),Ag("click",function(){return r.createTask()}),tC(9,pe,1,0,"mat-spinner",6)(10,me,2,0,"mat-icon"),qC(11," New Task "),pl()(),Is(12,"nav",7),iC(13,ge,6,6,"button",8,ce),Is(15,"button",9),Ag("click",function(){return r.toggleStarredFilter()}),Is(16,"mat-icon",10),qC(17,"star"),pl(),Is(18,"span"),qC(19,"Starred"),pl()()()(),Is(20,"main",11),tC(21,_e,4,0,"div",12)(22,ke,5,1,"div",13)(23,be,2,0)(24,xe,3,0,"div",14),pl()()()),e&2&&(JE(8),Tg("disabled",r.isCreating()),JE(),nC(r.isCreating()?9:10),JE(4),sC(r.filters),JE(2),Hg("active",r.starredOnly()),Cg("aria-checked",r.starredOnly()),JE(6),nC(r.isLoadingList()?21:r.filteredTasks().length===0?22:r.activeFilter()==="all"?23:24));},dependencies:[A,St,yt,wt,hr,pr,Et,yt$1],styles:[".glass-panel[_ngcontent-%COMP%]{background:var(--glass-bg);backdrop-filter:var(--glass-backdrop-blur);-webkit-backdrop-filter:var(--glass-backdrop-blur);border:1px solid var(--glass-border);box-shadow:var(--glass-shadow)}.glass-interactive[_ngcontent-%COMP%]{background:var(--glass-bg);backdrop-filter:var(--glass-backdrop-blur);-webkit-backdrop-filter:var(--glass-backdrop-blur);border:1px solid var(--glass-border);box-shadow:var(--glass-shadow);transition:all .3s cubic-bezier(.4,0,.2,1)}.glass-interactive[_ngcontent-%COMP%]:hover{transform:translateY(-2px);box-shadow:0 12px 40px #00000026}.glass-interactive[_ngcontent-%COMP%]:active{transform:translateY(0)}.glass-card[_ngcontent-%COMP%]{background:var(--glass-bg);backdrop-filter:var(--glass-backdrop-blur);-webkit-backdrop-filter:var(--glass-backdrop-blur);border:1px solid var(--glass-border);box-shadow:var(--glass-shadow);border-radius:20px;padding:1.5rem}.glass-button[_ngcontent-%COMP%]{background:var(--glass-bg);backdrop-filter:var(--glass-backdrop-blur);-webkit-backdrop-filter:var(--glass-backdrop-blur);border:1px solid var(--glass-border);box-shadow:var(--glass-shadow);transition:all .3s cubic-bezier(.4,0,.2,1)}.glass-button[_ngcontent-%COMP%]:hover{transform:translateY(-2px);box-shadow:0 12px 40px #00000026}.glass-button[_ngcontent-%COMP%]:active{transform:translateY(0)}.glass-button[_ngcontent-%COMP%]{border-radius:12px;padding:.75rem 1.5rem;font-weight:600;cursor:pointer}.glass-button[_ngcontent-%COMP%]:disabled{opacity:.5;cursor:not-allowed;transform:none}.glass-button[_ngcontent-%COMP%]:disabled:hover{transform:none}.smooth-theme-transition[_ngcontent-%COMP%]{transition:background .3s ease,color .3s ease,border-color .3s ease,box-shadow .3s ease}[_nghost-%COMP%]{display:flex;height:100vh;width:100%;overflow:hidden}.task-control[_ngcontent-%COMP%]{display:flex;flex-direction:column;height:100%;overflow:hidden;padding:1.5rem;gap:1.25rem;box-sizing:border-box}.tc-header[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:1rem;flex-shrink:0}.tc-title-row[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;gap:1rem}.tc-title[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem;margin:0;font-size:1.5rem;font-weight:700;color:var(--color-text)}.tc-title[_ngcontent-%COMP%] .title-icon[_ngcontent-%COMP%]{font-size:1.5rem;width:1.5rem;height:1.5rem;color:var(--color-primary)}.new-task-btn[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.375rem;background:var(--color-primary);color:var(--color-text-inverse);border-radius:12px;font-weight:600;padding:0 1rem;height:36px;flex-shrink:0}.new-task-btn[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:1.1rem;width:1.1rem;height:1.1rem}.new-task-btn[_ngcontent-%COMP%] mat-spinner[_ngcontent-%COMP%]{display:inline-block}.tc-filters[_ngcontent-%COMP%]{display:flex;gap:.5rem;flex-wrap:wrap}.filter-chip[_ngcontent-%COMP%]{background:var(--glass-bg);backdrop-filter:var(--glass-backdrop-blur);-webkit-backdrop-filter:var(--glass-backdrop-blur);border:1px solid var(--glass-border);box-shadow:var(--glass-shadow);display:flex;align-items:center;gap:.375rem;padding:.375rem .875rem;border-radius:100px;font-size:.8rem;font-weight:500;color:var(--color-text-secondary);cursor:pointer;border:1px solid var(--color-border);transition:background .15s ease,color .15s ease,border-color .15s ease;white-space:nowrap}.filter-chip[_ngcontent-%COMP%] .filter-icon[_ngcontent-%COMP%]{font-size:.9rem;width:.9rem;height:.9rem}.filter-chip[_ngcontent-%COMP%] .filter-badge[_ngcontent-%COMP%]{background:var(--color-primary);color:var(--color-text-inverse);border-radius:100px;padding:0 .375rem;font-size:.7rem;font-weight:700;min-width:18px;text-align:center;line-height:18px}.filter-chip.active[_ngcontent-%COMP%]{background:var(--color-primary);color:var(--color-text-inverse);border-color:var(--color-primary)}.filter-chip.active[_ngcontent-%COMP%] .filter-icon[_ngcontent-%COMP%]{color:var(--color-text-inverse)}.filter-chip.active[_ngcontent-%COMP%] .filter-badge[_ngcontent-%COMP%]{background:#ffffff4d;color:var(--color-text-inverse)}.filter-chip[_ngcontent-%COMP%]:hover:not(.active){background:var(--color-bg-hover);color:var(--color-text)}.starred-filter.active[_ngcontent-%COMP%]{background:#f5a62326;border-color:#f5a623;color:#f5a623}.starred-filter.active[_ngcontent-%COMP%] .filter-icon[_ngcontent-%COMP%]{color:#f5a623}.tc-group[_ngcontent-%COMP%]{margin-bottom:1.5rem}.tc-group[_ngcontent-%COMP%]:last-child{margin-bottom:0}.tc-group-title[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem;margin:0 0 .75rem;font-size:.85rem;font-weight:600;color:var(--color-text-secondary);text-transform:uppercase;letter-spacing:.05em}.tc-group-title[_ngcontent-%COMP%] .group-icon[_ngcontent-%COMP%]{font-size:1rem;width:1rem;height:1rem}.tc-group-title[_ngcontent-%COMP%] .group-count[_ngcontent-%COMP%]{background:var(--color-bg-hover);border-radius:100px;padding:0 .375rem;font-size:.75rem;font-weight:700;min-width:18px;text-align:center;line-height:18px}.tc-grid-wrapper[_ngcontent-%COMP%]{flex:1;overflow-y:auto;scrollbar-width:thin;scrollbar-color:var(--color-border) transparent}.tc-grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:1rem;padding-bottom:1rem}@media(max-width:600px){.tc-grid[_ngcontent-%COMP%]{grid-template-columns:1fr}}.tc-loading[_ngcontent-%COMP%], .tc-empty[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1rem;height:100%;min-height:240px;color:var(--color-text-secondary);text-align:center}.tc-loading[_ngcontent-%COMP%] p[_ngcontent-%COMP%], .tc-empty[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:0;font-size:.95rem}.empty-icon[_ngcontent-%COMP%]{font-size:3rem;width:3rem;height:3rem;opacity:.3}"]})};export{se as TaskControlComponent};
1
+ import {A,k as kt,b as bt}from'./chunk-C4U0w8cP.js';import {S as St}from'./chunk-DzicJow4.js';import {E as Et,y as yt$1,G as Ge}from'./chunk-C7MXO6BQ.js';import {g,G,P,U,N,p as pe$1,Q as c,w as we,z as zi,F as F$1,y as yT,c as U$1,h as Rw,i as hr,j as pr,I as Is,q as qC,m as pl,A as Ag,t as tC,o as iC,J as JE,T as Tg,v as nC,x as sC,H as Hg,C as Cg,u as ue$1,ca as _e$1,Y as x,an as ce$1,ap as Vy,l as le$1,V,n as bg,a9 as fC,aa as If,ac as yC,ab as wf,a8 as Zg,a5 as vl}from'./main-6K2UFGD2.js';import'./chunk-fP29MqaN.js';import'./chunk-BVCQOGLR.js';import'./chunk-BUEM7g7F.js';import'./chunk-DTIhOEG_.js';import {y as yt,w as wt}from'./chunk-C9tuHQmZ.js';var R=class n{threadState=g(U);codayService=g(Ge);threadList=F$1(this.threadState.threadList$,{initialValue:[]});selectedThread=F$1(this.threadState.selectedThread$,{initialValue:null});isThinking=F$1(this.codayService.isThinking$,{initialValue:false});inviteEvent=F$1(this.codayService.currentInviteEvent$.pipe(ue$1(t=>t?.invite===_e$1?null:t)),{initialValue:null});tasks=yT(()=>{let t=this.threadList(),e=this.selectedThread(),r=this.isThinking(),o=this.inviteEvent();return t.filter(i=>!i.parentThreadId).map(i=>{let m=!!e&&i.id===e.id;return {id:i.id,name:i.name,summary:i.summary,modifiedDate:i.modifiedDate,starring:i.starring??[],users:i.users??[],status:this.deriveStatus(i,m,r,!!o),isActive:m,worktreeProject:i.worktreeProject}}).sort((i,m)=>{let q=kt[i.status]-kt[m.status];return q!==0?q:i.modifiedDate>m.modifiedDate?-1:1})});deriveStatus(t,e,r,o){let i=Date.now()-new Date(t.modifiedDate).getTime();return t.closedByUser?"done":t.pendingInvite?"waiting-you":e?r?"in-progress":"paused":i<bt?"in-progress":"paused"}static \u0275fac=function(e){return new(e||n)};static \u0275prov=x({token:n,factory:n.\u0275fac,providedIn:"root"})};var F=class n{projectState=g(P);threadState=g(U);destroy$=new ce$1;eventSource=null;currentProject=null;constructor(){this.projectState.selectedProject$.pipe(Vy(this.destroy$)).subscribe(t=>{let e=t?.name??null;e!==this.currentProject&&(this.disconnect(),e&&this.connect(e));});}connect(t,e=5e3){this.currentProject=t;let r=`/api/projects/${encodeURIComponent(t)}/event-stream`;console.log(`[PROJECT_SSE] Connecting to ${r}`),this.eventSource=new EventSource(r),this.eventSource.onmessage=o=>{try{let i=JSON.parse(o.data),m=le$1(i);if(!m)return;m instanceof V&&(console.log("[PROJECT_SSE] ThreadUpdateEvent \u2014 refreshing thread list"),this.threadState.refreshThreadList());}catch(i){console.warn("[PROJECT_SSE] Failed to parse event:",i);}},this.eventSource.onerror=()=>{this.eventSource?.readyState===EventSource.CLOSED&&(console.warn(`[PROJECT_SSE] Connection closed for ${t}, reconnecting in ${e}ms`),this.eventSource=null,setTimeout(()=>{this.currentProject===t&&this.connect(t,Math.min(e*2,6e4));},e));};}disconnect(){this.eventSource&&(this.eventSource.close(),this.eventSource=null,console.log(`[PROJECT_SSE] Disconnected from project ${this.currentProject}`)),this.currentProject=null;}ngOnDestroy(){this.disconnect(),this.destroy$.next(),this.destroy$.complete();}static \u0275fac=function(e){return new(e||n)};static \u0275prov=x({token:n,factory:n.\u0275fac,providedIn:"root"})};var ce=(n,t)=>t.key,de=(n,t)=>t.status,le=(n,t)=>t.id;function pe(n,t){n&1&&bg(0,"mat-spinner",6);}function me(n,t){n&1&&(Is(0,"mat-icon"),qC(1,"add"),pl());}function ue(n,t){if(n&1&&(Is(0,"span",16),qC(1),pl()),n&2){let e=yC().$implicit,r=yC();JE(),Zg(r.filterCounts()[e.key]);}}function ge(n,t){if(n&1){let e=fC();Is(0,"button",15),Ag("click",function(){let o=If(e).$implicit,i=yC();return wf(i.setFilter(o.key))}),Is(1,"mat-icon",10),qC(2),pl(),Is(3,"span"),qC(4),pl(),tC(5,ue,2,1,"span",16),pl();}if(n&2){let e=t.$implicit,r=yC();Hg("active",r.activeFilter()===e.key),Cg("aria-selected",r.activeFilter()===e.key),JE(2),Zg(e.icon),JE(2),Zg(e.label),JE(),nC(r.filterCounts()[e.key]>0?5:-1);}}function _e(n,t){n&1&&(Is(0,"div",12),bg(1,"mat-spinner",17),Is(2,"p"),qC(3,"Loading tasks\u2026"),pl()());}function fe(n,t){if(n&1){let e=fC();Is(0,"p"),qC(1,"No tasks yet. Start your first one!"),pl(),Is(2,"button",19),Ag("click",function(){If(e);let o=yC(2);return wf(o.createTask())}),Is(3,"mat-icon"),qC(4,"add"),pl(),qC(5," New Task "),pl();}}function he(n,t){n&1&&(Is(0,"p"),qC(1,"No tasks in this category."),pl());}function ke(n,t){if(n&1&&(Is(0,"div",13)(1,"mat-icon",18),qC(2,"rocket_launch"),pl(),tC(3,fe,6,0)(4,he,2,0,"p"),pl()),n&2){let e=yC();JE(3),nC(e.activeFilter()==="all"?3:4);}}function ve(n,t){if(n&1){let e=fC();Is(0,"app-task-card",25),Ag("stopRequested",function(o){If(e);let i=yC(3);return wf(i.onStopRequested(o))})("deleteRequested",function(o){If(e);let i=yC(3);return wf(i.onDeleteRequested(o))})("starToggled",function(o){If(e);let i=yC(3);return wf(i.onStarToggled(o))})("markDoneRequested",function(o){If(e);let i=yC(3);return wf(i.onMarkDoneRequested(o))})("markActiveRequested",function(o){If(e);let i=yC(3);return wf(i.onMarkActiveRequested(o))}),pl();}if(n&2){let e=t.$implicit;Tg("task",e);}}function Ce(n,t){if(n&1&&(Is(0,"section",20)(1,"h2",21)(2,"mat-icon",22),qC(3),pl(),qC(4),Is(5,"span",23),qC(6),pl()(),Is(7,"div",14),iC(8,ve,1,1,"app-task-card",24,le),pl()()),n&2){let e=t.$implicit;JE(3),Zg(e.icon),JE(),vl(" ",e.label," "),JE(2),Zg(e.tasks.length),JE(2),sC(e.tasks);}}function be(n,t){if(n&1&&iC(0,Ce,10,3,"section",20,de),n&2){let e=yC();sC(e.taskGroups());}}function ye(n,t){if(n&1){let e=fC();Is(0,"app-task-card",25),Ag("stopRequested",function(o){If(e);let i=yC(2);return wf(i.onStopRequested(o))})("deleteRequested",function(o){If(e);let i=yC(2);return wf(i.onDeleteRequested(o))})("starToggled",function(o){If(e);let i=yC(2);return wf(i.onStarToggled(o))})("markDoneRequested",function(o){If(e);let i=yC(2);return wf(i.onMarkDoneRequested(o))})("markActiveRequested",function(o){If(e);let i=yC(2);return wf(i.onMarkActiveRequested(o))}),pl();}if(n&2){let e=t.$implicit;Tg("task",e);}}function xe(n,t){if(n&1&&(Is(0,"div",14),iC(1,ye,1,1,"app-task-card",24,le),pl()),n&2){let e=yC();JE(),sC(e.filteredTasks());}}var Te=[{key:"all",label:"All",icon:"grid_view"},{key:"waiting-you",label:"Waiting for you",icon:"mark_unread_chat_alt"},{key:"in-progress",label:"In progress",icon:"pending"},{key:"paused",label:"Paused",icon:"pause_circle"},{key:"done",label:"Done",icon:"check_circle"}],se=class n{router=g(G);projectState=g(P);threadState=g(U);threadApi=g(N);taskStatus=g(R);userService=g(pe$1);projectApi=g(c);destroyRef=g(we);_projectEventStream=g(F);filters=Te;activeFilter=zi("all");starredOnly=zi(false);isCreating=zi(false);isLoadingList=F$1(this.threadState.isLoadingThreadList$,{initialValue:false});username=F$1(this.userService.username$,{initialValue:null});allTasks=this.taskStatus.tasks;filteredTasks=yT(()=>{let t=this.activeFilter(),e=this.username(),r=this.allTasks();return this.starredOnly()&&e&&(r=r.filter(o=>o.starring.includes(e))),t==="all"?r:r.filter(o=>o.status===t)});filterCounts=yT(()=>{let t=this.username(),e=this.allTasks();return this.starredOnly()&&t&&(e=e.filter(r=>r.starring.includes(t))),{all:e.length,"waiting-you":e.filter(r=>r.status==="waiting-you").length,"in-progress":e.filter(r=>r.status==="in-progress").length,paused:e.filter(r=>r.status==="paused").length,done:e.filter(r=>r.status==="done").length}});taskGroups=yT(()=>{let t=this.username(),e=this.allTasks();this.starredOnly()&&t&&(e=e.filter(o=>o.starring.includes(t)));let r=[{status:"waiting-you",label:"Waiting for you",icon:"mark_unread_chat_alt",tasks:[]},{status:"in-progress",label:"In progress",icon:"pending",tasks:[]},{status:"done",label:"Done",icon:"check_circle",tasks:[]},{status:"paused",label:"Paused",icon:"pause_circle",tasks:[]},{status:"error",label:"Error",icon:"error",tasks:[]}];for(let o of e){let i=r.find(m=>m.status===o.status);i&&i.tasks.push(o);}return r.filter(o=>o.tasks.length>0)});ngOnInit(){this.userService.fetchCurrentUser().pipe(U$1(this.destroyRef)).subscribe({error:t=>console.warn("[TASK-CONTROL] Could not fetch user:",t)});}setFilter(t){this.activeFilter.set(t);}toggleStarredFilter(){this.starredOnly.update(t=>!t);}createTask(){let t=this.projectState.getSelectedProjectId();!t||this.isCreating()||(this.isCreating.set(true),this.threadApi.createThread().pipe(U$1(this.destroyRef)).subscribe({next:e=>{this.isCreating.set(false),this.router.navigate(["project",t,"thread",e.thread.id]);},error:e=>{console.error("[TASK-CONTROL] Failed to create thread:",e),this.isCreating.set(false);}}));}onStopRequested(t){this.threadApi.stopThread(t).pipe(U$1(this.destroyRef)).subscribe({error:e=>console.error("[TASK-CONTROL] Failed to stop thread:",e)});}onDeleteRequested(t){this.threadApi.deleteThread(t).pipe(U$1(this.destroyRef)).subscribe({next:()=>this.threadState.refreshThreadList(),error:e=>console.error("[TASK-CONTROL] Failed to delete thread:",e)});}onStarToggled(t){let e=this.username();if(!e)return;let r=this.allTasks().find(m=>m.id===t);if(!r)return;let o=r.starring.includes(e),i=o?this.threadApi.unstarThread(t):this.threadApi.starThread(t);this.threadState.updateStarLocal(t,!o,e),i.pipe(U$1(this.destroyRef)).subscribe({error:m=>{console.error("[TASK-CONTROL] Failed to toggle star:",m),this.threadState.refreshThreadList();}});}onMarkDoneRequested(t){let e=this.projectState.getSelectedProjectId();e&&this.projectApi.markThreadDone(e,t).pipe(U$1(this.destroyRef)).subscribe({next:()=>this.threadState.refreshThreadList(),error:r=>console.error("[TASK-CONTROL] Failed to mark task as done:",r)});}onMarkActiveRequested(t){let e=this.projectState.getSelectedProjectId();e&&this.projectApi.markThreadActive(e,t).pipe(U$1(this.destroyRef)).subscribe({next:()=>this.threadState.refreshThreadList(),error:r=>console.error("[TASK-CONTROL] Failed to mark task as active:",r)});}static \u0275fac=function(e){return new(e||n)};static \u0275cmp=Rw({type:n,selectors:[["app-task-control"]],decls:25,vars:6,consts:[[1,"task-control"],[1,"tc-header"],[1,"tc-title-row"],[1,"tc-title"],[1,"title-icon"],["mat-flat-button","","aria-label","Start a new task",1,"new-task-btn",3,"click","disabled"],["diameter","16"],["role","tablist","aria-label","Filter tasks",1,"tc-filters"],["role","tab",1,"filter-chip",3,"active"],["role","switch","aria-label","Show starred tasks only",1,"filter-chip","starred-filter",3,"click"],[1,"filter-icon"],[1,"tc-grid-wrapper"],[1,"tc-loading"],[1,"tc-empty"],[1,"tc-grid"],["role","tab",1,"filter-chip",3,"click"],[1,"filter-badge"],["diameter","40"],[1,"empty-icon"],["mat-flat-button","",1,"new-task-btn",3,"click"],[1,"tc-group"],[1,"tc-group-title"],[1,"group-icon"],[1,"group-count"],[3,"task"],[3,"stopRequested","deleteRequested","starToggled","markDoneRequested","markActiveRequested","task"]],template:function(e,r){e&1&&(Is(0,"app-sidenav")(1,"div",0)(2,"header",1)(3,"div",2)(4,"h1",3)(5,"mat-icon",4),qC(6,"rocket_launch"),pl(),qC(7," Task Control "),pl(),Is(8,"button",5),Ag("click",function(){return r.createTask()}),tC(9,pe,1,0,"mat-spinner",6)(10,me,2,0,"mat-icon"),qC(11," New Task "),pl()(),Is(12,"nav",7),iC(13,ge,6,6,"button",8,ce),Is(15,"button",9),Ag("click",function(){return r.toggleStarredFilter()}),Is(16,"mat-icon",10),qC(17,"star"),pl(),Is(18,"span"),qC(19,"Starred"),pl()()()(),Is(20,"main",11),tC(21,_e,4,0,"div",12)(22,ke,5,1,"div",13)(23,be,2,0)(24,xe,3,0,"div",14),pl()()()),e&2&&(JE(8),Tg("disabled",r.isCreating()),JE(),nC(r.isCreating()?9:10),JE(4),sC(r.filters),JE(2),Hg("active",r.starredOnly()),Cg("aria-checked",r.starredOnly()),JE(6),nC(r.isLoadingList()?21:r.filteredTasks().length===0?22:r.activeFilter()==="all"?23:24));},dependencies:[A,St,yt,wt,hr,pr,Et,yt$1],styles:[".glass-panel[_ngcontent-%COMP%]{background:var(--glass-bg);backdrop-filter:var(--glass-backdrop-blur);-webkit-backdrop-filter:var(--glass-backdrop-blur);border:1px solid var(--glass-border);box-shadow:var(--glass-shadow)}.glass-interactive[_ngcontent-%COMP%]{background:var(--glass-bg);backdrop-filter:var(--glass-backdrop-blur);-webkit-backdrop-filter:var(--glass-backdrop-blur);border:1px solid var(--glass-border);box-shadow:var(--glass-shadow);transition:all .3s cubic-bezier(.4,0,.2,1)}.glass-interactive[_ngcontent-%COMP%]:hover{transform:translateY(-2px);box-shadow:0 12px 40px #00000026}.glass-interactive[_ngcontent-%COMP%]:active{transform:translateY(0)}.glass-card[_ngcontent-%COMP%]{background:var(--glass-bg);backdrop-filter:var(--glass-backdrop-blur);-webkit-backdrop-filter:var(--glass-backdrop-blur);border:1px solid var(--glass-border);box-shadow:var(--glass-shadow);border-radius:20px;padding:1.5rem}.glass-button[_ngcontent-%COMP%]{background:var(--glass-bg);backdrop-filter:var(--glass-backdrop-blur);-webkit-backdrop-filter:var(--glass-backdrop-blur);border:1px solid var(--glass-border);box-shadow:var(--glass-shadow);transition:all .3s cubic-bezier(.4,0,.2,1)}.glass-button[_ngcontent-%COMP%]:hover{transform:translateY(-2px);box-shadow:0 12px 40px #00000026}.glass-button[_ngcontent-%COMP%]:active{transform:translateY(0)}.glass-button[_ngcontent-%COMP%]{border-radius:12px;padding:.75rem 1.5rem;font-weight:600;cursor:pointer}.glass-button[_ngcontent-%COMP%]:disabled{opacity:.5;cursor:not-allowed;transform:none}.glass-button[_ngcontent-%COMP%]:disabled:hover{transform:none}.smooth-theme-transition[_ngcontent-%COMP%]{transition:background .3s ease,color .3s ease,border-color .3s ease,box-shadow .3s ease}[_nghost-%COMP%]{display:flex;height:100vh;width:100%;overflow:hidden}.task-control[_ngcontent-%COMP%]{display:flex;flex-direction:column;height:100%;overflow:hidden;padding:1.5rem;gap:1.25rem;box-sizing:border-box}.tc-header[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:1rem;flex-shrink:0}.tc-title-row[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;gap:1rem}.tc-title[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem;margin:0;font-size:1.5rem;font-weight:700;color:var(--color-text)}.tc-title[_ngcontent-%COMP%] .title-icon[_ngcontent-%COMP%]{font-size:1.5rem;width:1.5rem;height:1.5rem;color:var(--color-primary)}.new-task-btn[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.375rem;background:var(--color-primary);color:var(--color-text-inverse);border-radius:12px;font-weight:600;padding:0 1rem;height:36px;flex-shrink:0}.new-task-btn[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:1.1rem;width:1.1rem;height:1.1rem}.new-task-btn[_ngcontent-%COMP%] mat-spinner[_ngcontent-%COMP%]{display:inline-block}.tc-filters[_ngcontent-%COMP%]{display:flex;gap:.5rem;flex-wrap:wrap}.filter-chip[_ngcontent-%COMP%]{background:var(--glass-bg);backdrop-filter:var(--glass-backdrop-blur);-webkit-backdrop-filter:var(--glass-backdrop-blur);border:1px solid var(--glass-border);box-shadow:var(--glass-shadow);display:flex;align-items:center;gap:.375rem;padding:.375rem .875rem;border-radius:100px;font-size:.8rem;font-weight:500;color:var(--color-text-secondary);cursor:pointer;border:1px solid var(--color-border);transition:background .15s ease,color .15s ease,border-color .15s ease;white-space:nowrap}.filter-chip[_ngcontent-%COMP%] .filter-icon[_ngcontent-%COMP%]{font-size:.9rem;width:.9rem;height:.9rem}.filter-chip[_ngcontent-%COMP%] .filter-badge[_ngcontent-%COMP%]{background:var(--color-primary);color:var(--color-text-inverse);border-radius:100px;padding:0 .375rem;font-size:.7rem;font-weight:700;min-width:18px;text-align:center;line-height:18px}.filter-chip.active[_ngcontent-%COMP%]{background:var(--color-primary);color:var(--color-text-inverse);border-color:var(--color-primary)}.filter-chip.active[_ngcontent-%COMP%] .filter-icon[_ngcontent-%COMP%]{color:var(--color-text-inverse)}.filter-chip.active[_ngcontent-%COMP%] .filter-badge[_ngcontent-%COMP%]{background:#ffffff4d;color:var(--color-text-inverse)}.filter-chip[_ngcontent-%COMP%]:hover:not(.active){background:var(--color-bg-hover);color:var(--color-text)}.starred-filter.active[_ngcontent-%COMP%]{background:#f5a62326;border-color:#f5a623;color:#f5a623}.starred-filter.active[_ngcontent-%COMP%] .filter-icon[_ngcontent-%COMP%]{color:#f5a623}.tc-group[_ngcontent-%COMP%]{margin-bottom:1.5rem}.tc-group[_ngcontent-%COMP%]:last-child{margin-bottom:0}.tc-group-title[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem;margin:0 0 .75rem;font-size:.85rem;font-weight:600;color:var(--color-text-secondary);text-transform:uppercase;letter-spacing:.05em}.tc-group-title[_ngcontent-%COMP%] .group-icon[_ngcontent-%COMP%]{font-size:1rem;width:1rem;height:1rem}.tc-group-title[_ngcontent-%COMP%] .group-count[_ngcontent-%COMP%]{background:var(--color-bg-hover);border-radius:100px;padding:0 .375rem;font-size:.75rem;font-weight:700;min-width:18px;text-align:center;line-height:18px}.tc-grid-wrapper[_ngcontent-%COMP%]{flex:1;overflow-y:auto;scrollbar-width:thin;scrollbar-color:var(--color-border) transparent}.tc-grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:1rem;padding-bottom:1rem}@media(max-width:600px){.tc-grid[_ngcontent-%COMP%]{grid-template-columns:1fr}}.tc-loading[_ngcontent-%COMP%], .tc-empty[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1rem;height:100%;min-height:240px;color:var(--color-text-secondary);text-align:center}.tc-loading[_ngcontent-%COMP%] p[_ngcontent-%COMP%], .tc-empty[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:0;font-size:.95rem}.empty-icon[_ngcontent-%COMP%]{font-size:3rem;width:3rem;height:3rem;opacity:.3}"]})};export{se as TaskControlComponent};
@@ -1 +1 @@
1
- import {g,bl as Mt,Y as x}from'./main-4SCUMPDY.js';var s=class n{snackBar=g(Mt);success(t,o=2e3){this.snackBar.open(t,"",{duration:o,horizontalPosition:"center",verticalPosition:"bottom",panelClass:["snackbar-success"]});}error(t,o=3e3){this.snackBar.open(t,"",{duration:o,horizontalPosition:"center",verticalPosition:"bottom",panelClass:["snackbar-error"]});}info(t,o=2e3){this.snackBar.open(t,"",{duration:o,horizontalPosition:"center",verticalPosition:"bottom",panelClass:["snackbar-info"]});}static \u0275fac=function(o){return new(o||n)};static \u0275prov=x({token:n,factory:n.\u0275fac,providedIn:"root"})};export{s};
1
+ import {g,bl as Mt,Y as x}from'./main-6K2UFGD2.js';var s=class n{snackBar=g(Mt);success(t,o=2e3){this.snackBar.open(t,"",{duration:o,horizontalPosition:"center",verticalPosition:"bottom",panelClass:["snackbar-success"]});}error(t,o=3e3){this.snackBar.open(t,"",{duration:o,horizontalPosition:"center",verticalPosition:"bottom",panelClass:["snackbar-error"]});}info(t,o=2e3){this.snackBar.open(t,"",{duration:o,horizontalPosition:"center",verticalPosition:"bottom",panelClass:["snackbar-info"]});}static \u0275fac=function(o){return new(o||n)};static \u0275prov=x({token:n,factory:n.\u0275fac,providedIn:"root"})};export{s};
@@ -1 +1 @@
1
- import {g,bm as Sm,R as Re,z as zi,y as yT,h as Rw,i as hr,k as Gn,I as Is,A as Ag,q as qC,m as pl,a3 as UI,t as tC,af as Dg,ag as pT,r as bC,J as JE,T as Tg,a6 as zI,v as nC,Z as z,bl as Mt,_ as Ue$1,am as Gm,$ as zt,a0 as jt,a1 as Vt,a2 as Nt,j as pr,bn as Xt,ai as Jg,aj as XC,o as iC,bo as rC,a8 as Zg,ak as Xg,x as sC,a5 as vl,ac as yC,a9 as fC,aa as If,ab as wf,bp as ml,bq as yl,ah as oT,b4 as iT,H as Hg}from'./main-4SCUMPDY.js';import {d}from'./chunk-BUJvZgLu.js';import {W,k as ke,s as se}from'./chunk-CCFtehVS.js';import {T as Tn,S as Sn,n as nt,a as ae,l as le,c as ce}from'./chunk-Bz081WAa.js';import {W as Wn,o as ot,i as it,I as In,D as De,B as Be,y as ya,E as En}from'./chunk-BESIk8ll.js';import'./chunk-BSY9MBD-.js';import {y as yt,w as wt,t as ti,Z as Zn,c as cn,Y as Ye$1,a as wt$1,m as mn,g as gt}from'./chunk-LgALnta4.js';function Ue(s,i){if(s&1){let e=fC();Is(0,"div",9)(1,"mat-form-field",18)(2,"mat-label"),qC(3),pl(),Is(4,"textarea",19),Jg("ngModelChange",function(r){let m=If(e).$index,D=yC();return XC(D.commands[m],r)||(D.commands[m]=r),wf(r)}),pl(),UI(),Is(5,"mat-hint"),qC(6,"Use placeholder for dynamic values"),pl()(),Is(7,"button",20),Ag("click",function(){let r=If(e).$index,m=yC();return wf(m.removeCommand(r))}),Is(8,"mat-icon"),qC(9,"delete"),pl()()();}if(s&2){let e=i.$index,t=yC();JE(3),vl("Prompt ",e+1),JE(),Xg("ngModel",t.commands[e]),zI(),JE(3),Tg("disabled",t.commands.length===1);}}function Ne(s,i){if(s&1){let e=fC();Is(0,"div",10)(1,"h3"),qC(2,"Save to"),pl(),Is(3,"div",21)(4,"label",22)(5,"input",23),Jg("ngModelChange",function(r){If(e);let m=yC();return XC(m.source,r)||(m.source=r),wf(r)}),pl(),UI(),Is(6,"div",24)(7,"div",25)(8,"span",26),qC(9,"\u{1F464}"),pl(),Is(10,"span",27),qC(11,"Local"),pl()(),Is(12,"p",28),qC(13,"Personal prompt in ~/.coday/... (not committed)"),pl()()(),Is(14,"label",22)(15,"input",29),Jg("ngModelChange",function(r){If(e);let m=yC();return XC(m.source,r)||(m.source=r),wf(r)}),pl(),UI(),Is(16,"div",24)(17,"div",25)(18,"span",26),qC(19,"\u{1F4E6}"),pl(),Is(20,"span",27),qC(21,"Project"),pl()(),Is(22,"p",28),qC(23,"Shared prompt in ./prompts/ (committable)"),pl()()()(),Is(24,"p",30),qC(25,"Storage location is permanent and cannot be changed after creation"),pl()();}if(s&2){let e=yC();JE(4),Hg("selected",e.source==="local"),JE(),Xg("ngModel",e.source),zI(),JE(9),Hg("selected",e.source==="project"),JE(),Xg("ngModel",e.source),zI();}}function je(s,i){if(s&1&&(Is(0,"div",11)(1,"h3"),qC(2,"Storage Location"),pl(),Is(3,"div",31)(4,"span",26),qC(5),pl(),Is(6,"span",27),qC(7),pl()(),Is(8,"p",30),qC(9,"Cannot be changed after creation"),pl()()),s&2){let e=yC();JE(3),Hg("badge-local",e.source==="local")("badge-project",e.source==="project"),JE(2),Zg(e.source==="local"?"\u{1F464}":"\u{1F4E6}"),JE(2),Zg(e.source==="local"?"Local":"Project");}}function qe(s,i){if(s&1){let e=fC();Is(0,"div",12)(1,"label",32)(2,"input",33),Jg("ngModelChange",function(r){If(e);let m=yC();return XC(m.webhookEnabled,r)||(m.webhookEnabled=r),wf(r)}),pl(),UI(),Is(3,"span"),qC(4,"Enable webhook"),pl()(),Is(5,"p",30),qC(6,"Enable webhook to trigger this prompt via HTTP POST"),pl()();}if(s&2){let e=yC();JE(2),Xg("ngModel",e.webhookEnabled),zI();}}function He(s,i){if(s&1){let e=fC();Is(0,"div",13)(1,"div",34)(2,"mat-icon",35),qC(3,"link"),pl(),Is(4,"h4"),qC(5,"Webhook URL"),pl()(),Is(6,"div",36)(7,"p",37),qC(8),pl(),Is(9,"button",38),Ag("click",function(){If(e);let r=yC();return wf(r.copyWebhookUrl())}),Is(10,"mat-icon"),qC(11,"content_copy"),pl(),Is(12,"span"),qC(13,"Copy URL"),pl()()(),Is(14,"p",30),qC(15,"Use this URL to trigger the prompt via HTTP POST"),pl()();}if(s&2){let e=yC();JE(8),Zg(e.getWebhookUrl());}}function Ye(s,i){if(s&1&&(Is(0,"div",14)(1,"mat-icon"),qC(2,"error"),pl(),Is(3,"span"),qC(4),pl()()),s&2){let e=yC();JE(4),Zg(e.errorMessage);}}var S=class s{promptApi=g(d);dialogRef=g(z);configApi=g(W);snackBar=g(Mt);name="";description="";commands=[""];webhookEnabled=false;threadLifetime="";source="local";isSaving=false;errorMessage="";isAdmin=false;isEditMode=false;promptId="";data=g(Ue$1);constructor(){this.isEditMode=this.data.mode==="edit";}ngOnInit(){this.configApi.getUserConfig().subscribe({next:i=>{this.isAdmin=i.groups?.includes("CODAY_ADMIN")??false;},error:i=>{console.error("[PROMPT_FORM] Error loading user config:",i),this.isAdmin=false;}}),this.isEditMode&&this.data.prompt&&(this.promptId=this.data.prompt.id,this.name=this.data.prompt.name,this.description=this.data.prompt.description,this.commands=[...this.data.prompt.commands],this.webhookEnabled=this.data.prompt.webhookEnabled,this.source=this.data.prompt.source);}addCommand(){this.commands.push("");}removeCommand(i){this.commands.length>1&&this.commands.splice(i,1);}trackByIndex(i){return i}normalizeName(){this.name=this.name.replace(/[\s_.,;:!?()[\]{}]+/g,"-").replace(/-+/g,"-").replace(/^-|-$/g,"").toLowerCase();}validateForm(){return this.name.trim()?this.description.trim()?this.commands.filter(e=>e.trim()).length===0?(this.errorMessage="At least one command is required",false):true:(this.errorMessage="Description is required",false):(this.errorMessage="Name is required",false)}save(){if(this.errorMessage="",!this.validateForm())return;let i=this.commands.filter(e=>e.trim());if(this.isSaving=true,this.isEditMode&&this.data.prompt){let e={name:this.name.trim(),description:this.description.trim(),commands:i,webhookEnabled:this.webhookEnabled};this.promptApi.updatePrompt(this.data.prompt.id,e).subscribe({next:()=>{this.isSaving=false,this.dialogRef.close(true);},error:t=>{console.error("Error updating prompt:",t),this.errorMessage=t?.error?.error||t?.message||"Failed to update prompt",this.isSaving=false;}});}else {let e={name:this.name.trim(),description:this.description.trim(),commands:i,webhookEnabled:this.webhookEnabled,source:this.source};this.promptApi.createPrompt(e).subscribe({next:()=>{this.isSaving=false,this.dialogRef.close(true);},error:t=>{console.error("Error creating prompt:",t),this.errorMessage=t?.error?.error||t?.message||"Failed to create prompt",this.isSaving=false;}});}}cancel(){this.dialogRef.close(false);}getWebhookUrl(){return `${window.location.origin}/api/webhooks/${this.promptId}/execute`}copyWebhookUrl(){if(!this.webhookEnabled){this.snackBar.open("Webhook is not enabled","Close",{duration:3e3});return}if(!this.promptId){this.snackBar.open("Prompt must be saved before getting webhook URL","Close",{duration:3e3});return}let i=this.getWebhookUrl();navigator.clipboard.writeText(i).then(()=>{this.snackBar.open("Webhook URL copied to clipboard!","Close",{duration:3e3});}).catch(e=>{console.error("Failed to copy webhook URL:",e),this.snackBar.open("Failed to copy URL","Close",{duration:3e3});});}static \u0275fac=function(e){return new(e||s)};static \u0275cmp=Rw({type:s,selectors:[["app-prompt-form"]],decls:36,vars:11,consts:[["mat-dialog-title",""],[1,"form-container"],["appearance","outline",1,"full-width"],["matInput","","placeholder","my-prompt","required","",3,"ngModelChange","blur","ngModel"],["matInput","","placeholder","What does this prompt do?","rows","3","required","",3,"ngModelChange","ngModel"],[1,"commands-section"],[1,"section-header"],["mat-icon-button","","type","button","title","Add command",3,"click"],[1,"commands-list"],[1,"command-item"],[1,"source-section"],[1,"source-display"],[1,"webhook-section"],[1,"webhook-url-section"],[1,"error-message"],["align","end"],["mat-button","",3,"click","disabled"],["mat-raised-button","","color","primary",3,"click","disabled"],["appearance","outline",1,"command-field"],["matInput","","placeholder","Enter command with placeholders like \\{\\{key\\}\\}","rows","2",3,"ngModelChange","ngModel"],["mat-icon-button","","type","button","title","Remove command",1,"remove-btn",3,"click","disabled"],[1,"source-options"],[1,"source-option"],["type","radio","name","source","value","local",3,"ngModelChange","ngModel"],[1,"source-content"],[1,"source-header"],[1,"source-icon"],[1,"source-label"],[1,"source-description"],["type","radio","name","source","value","project",3,"ngModelChange","ngModel"],[1,"hint"],[1,"source-badge"],[1,"checkbox-label"],["type","checkbox",3,"ngModelChange","ngModel"],[1,"webhook-url-header"],[1,"webhook-icon"],[1,"webhook-url-content"],[1,"url-text"],["mat-raised-button","","color","accent","type","button",3,"click"]],template:function(e,t){e&1&&(Is(0,"h2",0),qC(1),pl(),Is(2,"mat-dialog-content")(3,"div",1)(4,"mat-form-field",2)(5,"mat-label"),qC(6,"Name"),pl(),Is(7,"input",3),Jg("ngModelChange",function(m){return XC(t.name,m)||(t.name=m),m}),Ag("blur",function(){return t.normalizeName()}),pl(),UI(),Is(8,"mat-hint"),qC(9,"A descriptive name (spaces and punctuation will be replaced with hyphens), will be used as command name"),pl()(),Is(10,"mat-form-field",2)(11,"mat-label"),qC(12,"Description"),pl(),Is(13,"textarea",4),Jg("ngModelChange",function(m){return XC(t.description,m)||(t.description=m),m}),pl(),UI(),Is(14,"mat-hint"),qC(15,"Explain the purpose of this prompt, helps for searchability"),pl()(),Is(16,"div",5)(17,"div",6)(18,"h3"),qC(19,"Prompts"),pl(),Is(20,"button",7),Ag("click",function(){return t.addCommand()}),Is(21,"mat-icon"),qC(22,"add"),pl()()(),Is(23,"div",8),iC(24,Ue,10,3,"div",9,rC),pl()(),tC(26,Ne,26,6,"div",10),tC(27,je,10,6,"div",11),tC(28,qe,7,1,"div",12),tC(29,He,16,1,"div",13),tC(30,Ye,5,1,"div",14),pl()(),Is(31,"mat-dialog-actions",15)(32,"button",16),Ag("click",function(){return t.cancel()}),qC(33,"Cancel"),pl(),Is(34,"button",17),Ag("click",function(){return t.save()}),qC(35),pl()()),e&2&&(JE(),Zg(t.isEditMode?"Edit Prompt":"Create Prompt"),JE(6),Xg("ngModel",t.name),zI(),JE(6),Xg("ngModel",t.description),zI(),JE(11),sC(t.commands),JE(2),nC(t.isEditMode?-1:26),JE(),nC(t.isEditMode?27:-1),JE(),nC(t.isAdmin?28:-1),JE(),nC(t.isEditMode&&t.webhookEnabled&&t.isAdmin?29:-1),JE(),nC(t.errorMessage?30:-1),JE(2),Tg("disabled",t.isSaving),JE(2),Tg("disabled",t.isSaving),JE(),vl(" ",t.isSaving?"Saving...":"Save"," "));},dependencies:[Gm,ti,Ye$1,wt$1,mn,Zn,gt,cn,zt,jt,Vt,Nt,hr,pr,Gn,Tn,Sn,nt,ae,le,ce,yt,wt,Xt],styles:[".form-container[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:1rem;padding:0;min-width:500px}@media(max-width:768px){.form-container[_ngcontent-%COMP%]{min-width:auto}}.full-width[_ngcontent-%COMP%]{width:100%}.commands-section[_ngcontent-%COMP%] .section-header[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;margin-bottom:.5rem}.commands-section[_ngcontent-%COMP%] .section-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:0;font-size:1rem;font-weight:600}.commands-section[_ngcontent-%COMP%] .commands-list[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:1rem}.commands-section[_ngcontent-%COMP%] .command-item[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:.5rem}.commands-section[_ngcontent-%COMP%] .command-item[_ngcontent-%COMP%] .command-field[_ngcontent-%COMP%]{flex:1}.commands-section[_ngcontent-%COMP%] .command-item[_ngcontent-%COMP%] .remove-btn[_ngcontent-%COMP%]{margin-top:8px}.commands-section[_ngcontent-%COMP%] .command-item[_ngcontent-%COMP%] .remove-btn[_ngcontent-%COMP%]:disabled{opacity:.3;cursor:not-allowed}.webhook-section[_ngcontent-%COMP%]{padding:1rem;background:var(--color-surface);border-radius:8px;border:1px solid var(--color-border)}.webhook-section[_ngcontent-%COMP%] .checkbox-label[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem;cursor:pointer}.webhook-section[_ngcontent-%COMP%] .checkbox-label[_ngcontent-%COMP%] input[type=checkbox][_ngcontent-%COMP%]{width:18px;height:18px;cursor:pointer}.webhook-section[_ngcontent-%COMP%] .checkbox-label[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{font-size:.95rem}.webhook-section[_ngcontent-%COMP%] .hint[_ngcontent-%COMP%]{margin:.5rem 0 0;font-size:.85rem;color:var(--color-text-secondary)}.webhook-url-section[_ngcontent-%COMP%]{padding:1rem;background:var(--color-surface);border-radius:8px;border:1px solid var(--color-border)}.webhook-url-section[_ngcontent-%COMP%] .webhook-url-header[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem;margin-bottom:.75rem}.webhook-url-section[_ngcontent-%COMP%] .webhook-url-header[_ngcontent-%COMP%] .webhook-icon[_ngcontent-%COMP%]{color:var(--color-primary)}.webhook-url-section[_ngcontent-%COMP%] .webhook-url-header[_ngcontent-%COMP%] h4[_ngcontent-%COMP%]{margin:0;font-size:1rem;font-weight:600}.webhook-url-section[_ngcontent-%COMP%] .webhook-url-content[_ngcontent-%COMP%]{display:flex;align-items:center;gap:1rem;margin-bottom:.5rem}.webhook-url-section[_ngcontent-%COMP%] .webhook-url-content[_ngcontent-%COMP%] .url-text[_ngcontent-%COMP%]{flex:1;margin:0;padding:.75rem;background:var(--color-bg);border:1px solid var(--color-border);border-radius:4px;font-family:monospace;font-size:.85rem;word-break:break-all;color:var(--color-text)}.webhook-url-section[_ngcontent-%COMP%] .webhook-url-content[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{white-space:nowrap;display:flex;align-items:center;gap:.5rem}.webhook-url-section[_ngcontent-%COMP%] .hint[_ngcontent-%COMP%]{margin:0;font-size:.85rem;color:var(--color-text-secondary)}.error-message[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem;padding:.75rem;background:#f443361a;border:1px solid var(--color-error);border-radius:4px;color:var(--color-error)}.error-message[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:1.25rem;width:1.25rem;height:1.25rem}.error-message[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{flex:1}.source-section[_ngcontent-%COMP%]{padding:1rem;background:var(--color-surface);border-radius:8px;border:1px solid var(--color-border)}.source-section[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:0 0 1rem;font-size:1rem;font-weight:600}.source-section[_ngcontent-%COMP%] .source-options[_ngcontent-%COMP%]{display:flex;gap:1rem;margin-bottom:.75rem}@media(max-width:768px){.source-section[_ngcontent-%COMP%] .source-options[_ngcontent-%COMP%]{flex-direction:column}}.source-section[_ngcontent-%COMP%] .source-option[_ngcontent-%COMP%]{flex:1;display:flex;align-items:flex-start;gap:.75rem;padding:1rem;background:var(--color-bg);border:2px solid var(--color-border);border-radius:8px;cursor:pointer;transition:all .2s ease}.source-section[_ngcontent-%COMP%] .source-option[_ngcontent-%COMP%]:hover{border-color:var(--color-primary);background:var(--color-bg-hover)}.source-section[_ngcontent-%COMP%] .source-option.selected[_ngcontent-%COMP%]{border-color:var(--color-primary);background:var(--color-bg-hover);box-shadow:0 0 0 1px var(--color-primary)}.source-section[_ngcontent-%COMP%] .source-option[_ngcontent-%COMP%] input[type=radio][_ngcontent-%COMP%]{margin-top:2px;cursor:pointer}.source-section[_ngcontent-%COMP%] .source-option[_ngcontent-%COMP%] .source-content[_ngcontent-%COMP%]{flex:1}.source-section[_ngcontent-%COMP%] .source-option[_ngcontent-%COMP%] .source-content[_ngcontent-%COMP%] .source-header[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem;margin-bottom:.5rem}.source-section[_ngcontent-%COMP%] .source-option[_ngcontent-%COMP%] .source-content[_ngcontent-%COMP%] .source-header[_ngcontent-%COMP%] .source-icon[_ngcontent-%COMP%]{font-size:1.25rem}.source-section[_ngcontent-%COMP%] .source-option[_ngcontent-%COMP%] .source-content[_ngcontent-%COMP%] .source-header[_ngcontent-%COMP%] .source-label[_ngcontent-%COMP%]{font-weight:600;font-size:.95rem}.source-section[_ngcontent-%COMP%] .source-option[_ngcontent-%COMP%] .source-content[_ngcontent-%COMP%] .source-description[_ngcontent-%COMP%]{margin:0;font-size:.85rem;color:var(--color-text-secondary);line-height:1.4}.source-section[_ngcontent-%COMP%] .hint[_ngcontent-%COMP%]{margin:0;font-size:.85rem;color:var(--color-text-secondary);font-style:italic}.thread-lifetime-disabled[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:.75rem;padding:1rem;background:#2196f30d;border:1px solid rgba(33,150,243,.2);border-radius:8px;margin-bottom:1rem}.thread-lifetime-disabled[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{color:#2196f3cc;font-size:1.25rem;width:1.25rem;height:1.25rem;margin-top:2px}.thread-lifetime-disabled[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:0;flex:1}.thread-lifetime-disabled[_ngcontent-%COMP%] p[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{font-size:.95rem;color:var(--color-text)}.thread-lifetime-disabled[_ngcontent-%COMP%] p[_ngcontent-%COMP%] .hint[_ngcontent-%COMP%]{display:block;margin-top:.25rem;font-size:.85rem;color:var(--color-text-secondary);line-height:1.4}.source-display[_ngcontent-%COMP%]{padding:1rem;background:var(--color-surface);border-radius:8px;border:1px solid var(--color-border)}.source-display[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:0 0 .75rem;font-size:1rem;font-weight:600}.source-display[_ngcontent-%COMP%] .source-badge[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:.5rem;padding:.5rem 1rem;border-radius:6px;font-size:.9rem;font-weight:500;margin-bottom:.5rem}.source-display[_ngcontent-%COMP%] .source-badge[_ngcontent-%COMP%] .source-icon[_ngcontent-%COMP%]{font-size:1.1rem}.source-display[_ngcontent-%COMP%] .source-badge.badge-local[_ngcontent-%COMP%]{background:#2196f31a;color:#2196f3;border:1px solid rgba(33,150,243,.3)}.source-display[_ngcontent-%COMP%] .source-badge.badge-project[_ngcontent-%COMP%]{background:#4caf501a;color:#4caf50;border:1px solid rgba(76,175,80,.3)}.source-display[_ngcontent-%COMP%] .hint[_ngcontent-%COMP%]{margin:0;font-size:.85rem;color:var(--color-text-secondary);font-style:italic}"],changeDetection:1})};var Ge=()=>[],Ke=s=>({id:s});function Je(s,i){if(s&1&&(Is(0,"div",6),qC(1),pl()),s&2){let e=yC();JE(),Zg(e.errorMessage());}}function Qe(s,i){if(s&1){let e=fC();Is(0,"ds-entity-card",8),Ag("selected",function(r){If(e);let m=yC();return wf(m.onEdit(r))}),ml(1,9),Is(2,"button",10),Ag("click",function(r){return r.stopPropagation()}),Is(3,"mat-icon"),qC(4,"more_vert"),pl()(),yl(),pl();}if(s&2){let e=i.$implicit;yC();let t=bC(11);Tg("id",e.id)("name",e.name)("description",e.description)("badges",e.badges??oT(6,Ge)),JE(2),Tg("matMenuTriggerFor",t)("matMenuTriggerData",iT(7,Ke,e.id));}}function Xe(s,i){if(s&1){let e=fC();Is(0,"button",11),Ag("click",function(){If(e);let r=yC().id,m=yC();return wf(m.onToggleWebhook(r))}),Is(1,"mat-icon"),qC(2),pl(),qC(3),pl();}if(s&2){let e=yC().id,t=yC();JE(2),Zg(t.isWebhookEnabled(e)?"link_off":"link"),JE(),vl(" ",t.isWebhookEnabled(e)?"Disable webhook":"Enable webhook"," ");}}function Ze(s,i){if(s&1){let e=fC();Is(0,"button",11),Ag("click",function(){let r=If(e).id,m=yC();return wf(m.onEdit(r))}),Is(1,"mat-icon"),qC(2,"edit"),pl(),qC(3," Edit "),pl(),tC(4,Xe,4,2,"button",12),Is(5,"button",13),Ag("click",function(){let r=If(e).id,m=yC();return wf(m.onDelete(r))}),Is(6,"mat-icon"),qC(7,"delete"),pl(),qC(8," Delete "),pl();}if(s&2){let e=yC();JE(4),nC(e.isAdmin()?4:-1);}}var Le="system",Ie=class s{promptApi=g(d);configApi=g(W);location=g(Sm);dialog=g(Re);prompts=zi([]);isLoading=zi(false);errorMessage=zi(null);showOnlyMine=zi(true);isAdmin=zi(false);currentUsername=zi("");promptItems=yT(()=>{let i=this.prompts(),e=this.currentUsername(),r=this.showOnlyMine()&&e?i.filter(p=>this.isMyPrompt(p)):i,D=[...new Set(r.map(p=>p.createdBy))].sort((p,k)=>p===e&&k!==e?-1:k===e&&p!==e||p===Le?1:k===Le?-1:p.localeCompare(k)),H=[];for(let p of D){let k=p===e?`${p} (you)`:p;for(let F of r.filter(Ae=>Ae.createdBy===p))H.push({id:F.id,name:F.name,description:F.description,badges:this.buildBadges(F),groupKey:p,groupLabel:k});}return H});ngOnInit(){this.configApi.getUserConfig().subscribe({next:i=>{this.isAdmin.set(i.groups?.includes("CODAY_ADMIN")??false),this.currentUsername.set(i.username??"");},error:()=>this.isAdmin.set(false)}),this.loadPrompts();}loadPrompts(){this.isLoading.set(true),this.promptApi.listPrompts().subscribe({next:i=>{this.prompts.set(i.filter(e=>!e.id.startsWith("builtin"))),this.isLoading.set(false);},error:i=>{this.errorMessage.set(i?.error?.error??"Failed to load prompts"),this.isLoading.set(false);}});}onBack(){this.location.back();}onCreate(){this.dialog.open(S,{width:"700px",maxHeight:"90vh",data:{mode:"create"}}).afterClosed().subscribe(e=>{e&&this.loadPrompts();});}onEdit(i){this.promptApi.getPrompt(i).subscribe({next:e=>{this.dialog.open(S,{width:"700px",maxHeight:"90vh",data:{mode:"edit",prompt:e}}).afterClosed().subscribe(r=>{r&&this.loadPrompts();});},error:e=>this.errorMessage.set(e?.error?.error??"Failed to load prompt")});}onDelete(i){confirm("Are you sure you want to delete this prompt?")&&this.promptApi.deletePrompt(i).subscribe({next:()=>this.loadPrompts(),error:e=>this.errorMessage.set(e?.error?.error??"Failed to delete prompt")});}onToggleWebhook(i){let e=this.prompts().find(r=>r.id===i);if(!e)return;(e.webhookEnabled?this.promptApi.disableWebhook(i):this.promptApi.enableWebhook(i)).subscribe({next:()=>this.loadPrompts(),error:r=>this.errorMessage.set(r?.error?.error??"Failed to toggle webhook")});}isWebhookEnabled(i){return this.prompts().find(e=>e.id===i)?.webhookEnabled??false}isMyPrompt(i){let e=t=>t.replace(/[.\s]+/g,"_").toLowerCase();return e(i.createdBy)===e(this.currentUsername())}buildBadges(i){let e=[];return i.source==="local"?e.push({label:"local",variant:"info"}):e.push({label:"project",variant:"success"}),i.webhookEnabled&&e.push({label:"webhook",variant:"warning"}),e}static \u0275fac=function(e){return new(e||s)};static \u0275cmp=Rw({type:s,selectors:[["app-prompt-list"]],decls:13,vars:6,consts:[["promptCard",""],["cardMenu","matMenu"],[1,"prompt-list-page"],["title","Prompts","cardMinWidth","320px","contentMaxWidth","1400px","searchPlaceholder","Filter prompts\u2026","emptyMessage","No prompts found.",3,"createRequested","items","loading","showCreate","itemTemplate"],["toolbar-start","","mat-icon-button","","title","Back",3,"click"],["toolbar-extras","","color","primary",1,"prompt-list__mine-toggle",3,"ngModelChange","ngModel"],[1,"prompt-list__error"],["matMenuContent",""],[3,"selected","id","name","description","badges"],["dsCardActions",""],["mat-icon-button","",3,"click","matMenuTriggerFor","matMenuTriggerData"],["mat-menu-item","",3,"click"],["mat-menu-item",""],["mat-menu-item","",1,"prompt-list__delete-item",3,"click"]],template:function(e,t){if(e&1&&(Is(0,"div",2)(1,"ds-entity-list",3),Ag("createRequested",function(){return t.onCreate()}),Is(2,"button",4),Ag("click",function(){return t.onBack()}),Is(3,"mat-icon"),qC(4,"chevron_left"),pl()(),Is(5,"mat-slide-toggle",5),Ag("ngModelChange",function(m){return t.showOnlyMine.set(m)}),qC(6," Mine "),pl(),UI(),pl(),tC(7,Je,2,1,"div",6),pl(),Dg(8,Qe,5,9,"ng-template",null,0,pT),Is(10,"mat-menu",null,1),Dg(12,Ze,9,1,"ng-template",7),pl()),e&2){let r=bC(9);JE(),Tg("items",t.promptItems())("loading",t.isLoading())("showCreate",true)("itemTemplate",r),JE(4),Tg("ngModel",t.showOnlyMine()),zI(),JE(2),nC(t.errorMessage()?7:-1);}},dependencies:[Wn,ot,it,hr,Gn,yt,wt,ke,se,In,De,Be,ya,En,ti,Zn,cn],styles:["[_nghost-%COMP%]{display:block;width:100%;min-height:100vh;background:var(--color-bg);overflow-y:auto}.prompt-list__mine-toggle[_ngcontent-%COMP%]{flex-shrink:0;font-size:.875rem}.prompt-list__delete-item[_ngcontent-%COMP%]{color:var(--color-error, #ff3b30)}.prompt-list__delete-item[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{color:inherit}.prompt-list__error[_ngcontent-%COMP%]{margin:1rem auto;max-width:900px;padding:.75rem 1rem;background:#dc262614;border:1px solid rgba(220,38,38,.25);border-radius:8px;color:var(--color-error, #ff3b30);font-size:.875rem}"],changeDetection:1})};export{Ie as PromptListComponent};
1
+ import {g,bm as Sm,R as Re,z as zi,y as yT,h as Rw,i as hr,k as Gn,I as Is,A as Ag,q as qC,m as pl,a3 as UI,t as tC,af as Dg,ag as pT,r as bC,J as JE,T as Tg,a6 as zI,v as nC,Z as z,bl as Mt,_ as Ue$1,am as Gm,$ as zt,a0 as jt,a1 as Vt,a2 as Nt,j as pr,bn as Xt,ai as Jg,aj as XC,o as iC,bo as rC,a8 as Zg,ak as Xg,x as sC,a5 as vl,ac as yC,a9 as fC,aa as If,ab as wf,bp as ml,bq as yl,ah as oT,b4 as iT,H as Hg}from'./main-6K2UFGD2.js';import {d}from'./chunk-BhM0bmJW.js';import {W,k as ke,s as se}from'./chunk-BVCQOGLR.js';import {T as Tn,S as Sn,n as nt,a as ae,l as le,c as ce}from'./chunk-BUEM7g7F.js';import {W as Wn,o as ot,i as it,I as In,D as De,B as Be,y as ya,E as En}from'./chunk-l0HLnBLv.js';import'./chunk-DTIhOEG_.js';import {y as yt,w as wt,t as ti,Z as Zn,c as cn,Y as Ye$1,a as wt$1,m as mn,g as gt}from'./chunk-C9tuHQmZ.js';function Ue(s,i){if(s&1){let e=fC();Is(0,"div",9)(1,"mat-form-field",18)(2,"mat-label"),qC(3),pl(),Is(4,"textarea",19),Jg("ngModelChange",function(r){let m=If(e).$index,D=yC();return XC(D.commands[m],r)||(D.commands[m]=r),wf(r)}),pl(),UI(),Is(5,"mat-hint"),qC(6,"Use placeholder for dynamic values"),pl()(),Is(7,"button",20),Ag("click",function(){let r=If(e).$index,m=yC();return wf(m.removeCommand(r))}),Is(8,"mat-icon"),qC(9,"delete"),pl()()();}if(s&2){let e=i.$index,t=yC();JE(3),vl("Prompt ",e+1),JE(),Xg("ngModel",t.commands[e]),zI(),JE(3),Tg("disabled",t.commands.length===1);}}function Ne(s,i){if(s&1){let e=fC();Is(0,"div",10)(1,"h3"),qC(2,"Save to"),pl(),Is(3,"div",21)(4,"label",22)(5,"input",23),Jg("ngModelChange",function(r){If(e);let m=yC();return XC(m.source,r)||(m.source=r),wf(r)}),pl(),UI(),Is(6,"div",24)(7,"div",25)(8,"span",26),qC(9,"\u{1F464}"),pl(),Is(10,"span",27),qC(11,"Local"),pl()(),Is(12,"p",28),qC(13,"Personal prompt in ~/.coday/... (not committed)"),pl()()(),Is(14,"label",22)(15,"input",29),Jg("ngModelChange",function(r){If(e);let m=yC();return XC(m.source,r)||(m.source=r),wf(r)}),pl(),UI(),Is(16,"div",24)(17,"div",25)(18,"span",26),qC(19,"\u{1F4E6}"),pl(),Is(20,"span",27),qC(21,"Project"),pl()(),Is(22,"p",28),qC(23,"Shared prompt in ./prompts/ (committable)"),pl()()()(),Is(24,"p",30),qC(25,"Storage location is permanent and cannot be changed after creation"),pl()();}if(s&2){let e=yC();JE(4),Hg("selected",e.source==="local"),JE(),Xg("ngModel",e.source),zI(),JE(9),Hg("selected",e.source==="project"),JE(),Xg("ngModel",e.source),zI();}}function je(s,i){if(s&1&&(Is(0,"div",11)(1,"h3"),qC(2,"Storage Location"),pl(),Is(3,"div",31)(4,"span",26),qC(5),pl(),Is(6,"span",27),qC(7),pl()(),Is(8,"p",30),qC(9,"Cannot be changed after creation"),pl()()),s&2){let e=yC();JE(3),Hg("badge-local",e.source==="local")("badge-project",e.source==="project"),JE(2),Zg(e.source==="local"?"\u{1F464}":"\u{1F4E6}"),JE(2),Zg(e.source==="local"?"Local":"Project");}}function qe(s,i){if(s&1){let e=fC();Is(0,"div",12)(1,"label",32)(2,"input",33),Jg("ngModelChange",function(r){If(e);let m=yC();return XC(m.webhookEnabled,r)||(m.webhookEnabled=r),wf(r)}),pl(),UI(),Is(3,"span"),qC(4,"Enable webhook"),pl()(),Is(5,"p",30),qC(6,"Enable webhook to trigger this prompt via HTTP POST"),pl()();}if(s&2){let e=yC();JE(2),Xg("ngModel",e.webhookEnabled),zI();}}function He(s,i){if(s&1){let e=fC();Is(0,"div",13)(1,"div",34)(2,"mat-icon",35),qC(3,"link"),pl(),Is(4,"h4"),qC(5,"Webhook URL"),pl()(),Is(6,"div",36)(7,"p",37),qC(8),pl(),Is(9,"button",38),Ag("click",function(){If(e);let r=yC();return wf(r.copyWebhookUrl())}),Is(10,"mat-icon"),qC(11,"content_copy"),pl(),Is(12,"span"),qC(13,"Copy URL"),pl()()(),Is(14,"p",30),qC(15,"Use this URL to trigger the prompt via HTTP POST"),pl()();}if(s&2){let e=yC();JE(8),Zg(e.getWebhookUrl());}}function Ye(s,i){if(s&1&&(Is(0,"div",14)(1,"mat-icon"),qC(2,"error"),pl(),Is(3,"span"),qC(4),pl()()),s&2){let e=yC();JE(4),Zg(e.errorMessage);}}var S=class s{promptApi=g(d);dialogRef=g(z);configApi=g(W);snackBar=g(Mt);name="";description="";commands=[""];webhookEnabled=false;threadLifetime="";source="local";isSaving=false;errorMessage="";isAdmin=false;isEditMode=false;promptId="";data=g(Ue$1);constructor(){this.isEditMode=this.data.mode==="edit";}ngOnInit(){this.configApi.getUserConfig().subscribe({next:i=>{this.isAdmin=i.groups?.includes("CODAY_ADMIN")??false;},error:i=>{console.error("[PROMPT_FORM] Error loading user config:",i),this.isAdmin=false;}}),this.isEditMode&&this.data.prompt&&(this.promptId=this.data.prompt.id,this.name=this.data.prompt.name,this.description=this.data.prompt.description,this.commands=[...this.data.prompt.commands],this.webhookEnabled=this.data.prompt.webhookEnabled,this.source=this.data.prompt.source);}addCommand(){this.commands.push("");}removeCommand(i){this.commands.length>1&&this.commands.splice(i,1);}trackByIndex(i){return i}normalizeName(){this.name=this.name.replace(/[\s_.,;:!?()[\]{}]+/g,"-").replace(/-+/g,"-").replace(/^-|-$/g,"").toLowerCase();}validateForm(){return this.name.trim()?this.description.trim()?this.commands.filter(e=>e.trim()).length===0?(this.errorMessage="At least one command is required",false):true:(this.errorMessage="Description is required",false):(this.errorMessage="Name is required",false)}save(){if(this.errorMessage="",!this.validateForm())return;let i=this.commands.filter(e=>e.trim());if(this.isSaving=true,this.isEditMode&&this.data.prompt){let e={name:this.name.trim(),description:this.description.trim(),commands:i,webhookEnabled:this.webhookEnabled};this.promptApi.updatePrompt(this.data.prompt.id,e).subscribe({next:()=>{this.isSaving=false,this.dialogRef.close(true);},error:t=>{console.error("Error updating prompt:",t),this.errorMessage=t?.error?.error||t?.message||"Failed to update prompt",this.isSaving=false;}});}else {let e={name:this.name.trim(),description:this.description.trim(),commands:i,webhookEnabled:this.webhookEnabled,source:this.source};this.promptApi.createPrompt(e).subscribe({next:()=>{this.isSaving=false,this.dialogRef.close(true);},error:t=>{console.error("Error creating prompt:",t),this.errorMessage=t?.error?.error||t?.message||"Failed to create prompt",this.isSaving=false;}});}}cancel(){this.dialogRef.close(false);}getWebhookUrl(){return `${window.location.origin}/api/webhooks/${this.promptId}/execute`}copyWebhookUrl(){if(!this.webhookEnabled){this.snackBar.open("Webhook is not enabled","Close",{duration:3e3});return}if(!this.promptId){this.snackBar.open("Prompt must be saved before getting webhook URL","Close",{duration:3e3});return}let i=this.getWebhookUrl();navigator.clipboard.writeText(i).then(()=>{this.snackBar.open("Webhook URL copied to clipboard!","Close",{duration:3e3});}).catch(e=>{console.error("Failed to copy webhook URL:",e),this.snackBar.open("Failed to copy URL","Close",{duration:3e3});});}static \u0275fac=function(e){return new(e||s)};static \u0275cmp=Rw({type:s,selectors:[["app-prompt-form"]],decls:36,vars:11,consts:[["mat-dialog-title",""],[1,"form-container"],["appearance","outline",1,"full-width"],["matInput","","placeholder","my-prompt","required","",3,"ngModelChange","blur","ngModel"],["matInput","","placeholder","What does this prompt do?","rows","3","required","",3,"ngModelChange","ngModel"],[1,"commands-section"],[1,"section-header"],["mat-icon-button","","type","button","title","Add command",3,"click"],[1,"commands-list"],[1,"command-item"],[1,"source-section"],[1,"source-display"],[1,"webhook-section"],[1,"webhook-url-section"],[1,"error-message"],["align","end"],["mat-button","",3,"click","disabled"],["mat-raised-button","","color","primary",3,"click","disabled"],["appearance","outline",1,"command-field"],["matInput","","placeholder","Enter command with placeholders like \\{\\{key\\}\\}","rows","2",3,"ngModelChange","ngModel"],["mat-icon-button","","type","button","title","Remove command",1,"remove-btn",3,"click","disabled"],[1,"source-options"],[1,"source-option"],["type","radio","name","source","value","local",3,"ngModelChange","ngModel"],[1,"source-content"],[1,"source-header"],[1,"source-icon"],[1,"source-label"],[1,"source-description"],["type","radio","name","source","value","project",3,"ngModelChange","ngModel"],[1,"hint"],[1,"source-badge"],[1,"checkbox-label"],["type","checkbox",3,"ngModelChange","ngModel"],[1,"webhook-url-header"],[1,"webhook-icon"],[1,"webhook-url-content"],[1,"url-text"],["mat-raised-button","","color","accent","type","button",3,"click"]],template:function(e,t){e&1&&(Is(0,"h2",0),qC(1),pl(),Is(2,"mat-dialog-content")(3,"div",1)(4,"mat-form-field",2)(5,"mat-label"),qC(6,"Name"),pl(),Is(7,"input",3),Jg("ngModelChange",function(m){return XC(t.name,m)||(t.name=m),m}),Ag("blur",function(){return t.normalizeName()}),pl(),UI(),Is(8,"mat-hint"),qC(9,"A descriptive name (spaces and punctuation will be replaced with hyphens), will be used as command name"),pl()(),Is(10,"mat-form-field",2)(11,"mat-label"),qC(12,"Description"),pl(),Is(13,"textarea",4),Jg("ngModelChange",function(m){return XC(t.description,m)||(t.description=m),m}),pl(),UI(),Is(14,"mat-hint"),qC(15,"Explain the purpose of this prompt, helps for searchability"),pl()(),Is(16,"div",5)(17,"div",6)(18,"h3"),qC(19,"Prompts"),pl(),Is(20,"button",7),Ag("click",function(){return t.addCommand()}),Is(21,"mat-icon"),qC(22,"add"),pl()()(),Is(23,"div",8),iC(24,Ue,10,3,"div",9,rC),pl()(),tC(26,Ne,26,6,"div",10),tC(27,je,10,6,"div",11),tC(28,qe,7,1,"div",12),tC(29,He,16,1,"div",13),tC(30,Ye,5,1,"div",14),pl()(),Is(31,"mat-dialog-actions",15)(32,"button",16),Ag("click",function(){return t.cancel()}),qC(33,"Cancel"),pl(),Is(34,"button",17),Ag("click",function(){return t.save()}),qC(35),pl()()),e&2&&(JE(),Zg(t.isEditMode?"Edit Prompt":"Create Prompt"),JE(6),Xg("ngModel",t.name),zI(),JE(6),Xg("ngModel",t.description),zI(),JE(11),sC(t.commands),JE(2),nC(t.isEditMode?-1:26),JE(),nC(t.isEditMode?27:-1),JE(),nC(t.isAdmin?28:-1),JE(),nC(t.isEditMode&&t.webhookEnabled&&t.isAdmin?29:-1),JE(),nC(t.errorMessage?30:-1),JE(2),Tg("disabled",t.isSaving),JE(2),Tg("disabled",t.isSaving),JE(),vl(" ",t.isSaving?"Saving...":"Save"," "));},dependencies:[Gm,ti,Ye$1,wt$1,mn,Zn,gt,cn,zt,jt,Vt,Nt,hr,pr,Gn,Tn,Sn,nt,ae,le,ce,yt,wt,Xt],styles:[".form-container[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:1rem;padding:0;min-width:500px}@media(max-width:768px){.form-container[_ngcontent-%COMP%]{min-width:auto}}.full-width[_ngcontent-%COMP%]{width:100%}.commands-section[_ngcontent-%COMP%] .section-header[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;margin-bottom:.5rem}.commands-section[_ngcontent-%COMP%] .section-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:0;font-size:1rem;font-weight:600}.commands-section[_ngcontent-%COMP%] .commands-list[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:1rem}.commands-section[_ngcontent-%COMP%] .command-item[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:.5rem}.commands-section[_ngcontent-%COMP%] .command-item[_ngcontent-%COMP%] .command-field[_ngcontent-%COMP%]{flex:1}.commands-section[_ngcontent-%COMP%] .command-item[_ngcontent-%COMP%] .remove-btn[_ngcontent-%COMP%]{margin-top:8px}.commands-section[_ngcontent-%COMP%] .command-item[_ngcontent-%COMP%] .remove-btn[_ngcontent-%COMP%]:disabled{opacity:.3;cursor:not-allowed}.webhook-section[_ngcontent-%COMP%]{padding:1rem;background:var(--color-surface);border-radius:8px;border:1px solid var(--color-border)}.webhook-section[_ngcontent-%COMP%] .checkbox-label[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem;cursor:pointer}.webhook-section[_ngcontent-%COMP%] .checkbox-label[_ngcontent-%COMP%] input[type=checkbox][_ngcontent-%COMP%]{width:18px;height:18px;cursor:pointer}.webhook-section[_ngcontent-%COMP%] .checkbox-label[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{font-size:.95rem}.webhook-section[_ngcontent-%COMP%] .hint[_ngcontent-%COMP%]{margin:.5rem 0 0;font-size:.85rem;color:var(--color-text-secondary)}.webhook-url-section[_ngcontent-%COMP%]{padding:1rem;background:var(--color-surface);border-radius:8px;border:1px solid var(--color-border)}.webhook-url-section[_ngcontent-%COMP%] .webhook-url-header[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem;margin-bottom:.75rem}.webhook-url-section[_ngcontent-%COMP%] .webhook-url-header[_ngcontent-%COMP%] .webhook-icon[_ngcontent-%COMP%]{color:var(--color-primary)}.webhook-url-section[_ngcontent-%COMP%] .webhook-url-header[_ngcontent-%COMP%] h4[_ngcontent-%COMP%]{margin:0;font-size:1rem;font-weight:600}.webhook-url-section[_ngcontent-%COMP%] .webhook-url-content[_ngcontent-%COMP%]{display:flex;align-items:center;gap:1rem;margin-bottom:.5rem}.webhook-url-section[_ngcontent-%COMP%] .webhook-url-content[_ngcontent-%COMP%] .url-text[_ngcontent-%COMP%]{flex:1;margin:0;padding:.75rem;background:var(--color-bg);border:1px solid var(--color-border);border-radius:4px;font-family:monospace;font-size:.85rem;word-break:break-all;color:var(--color-text)}.webhook-url-section[_ngcontent-%COMP%] .webhook-url-content[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{white-space:nowrap;display:flex;align-items:center;gap:.5rem}.webhook-url-section[_ngcontent-%COMP%] .hint[_ngcontent-%COMP%]{margin:0;font-size:.85rem;color:var(--color-text-secondary)}.error-message[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem;padding:.75rem;background:#f443361a;border:1px solid var(--color-error);border-radius:4px;color:var(--color-error)}.error-message[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:1.25rem;width:1.25rem;height:1.25rem}.error-message[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{flex:1}.source-section[_ngcontent-%COMP%]{padding:1rem;background:var(--color-surface);border-radius:8px;border:1px solid var(--color-border)}.source-section[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:0 0 1rem;font-size:1rem;font-weight:600}.source-section[_ngcontent-%COMP%] .source-options[_ngcontent-%COMP%]{display:flex;gap:1rem;margin-bottom:.75rem}@media(max-width:768px){.source-section[_ngcontent-%COMP%] .source-options[_ngcontent-%COMP%]{flex-direction:column}}.source-section[_ngcontent-%COMP%] .source-option[_ngcontent-%COMP%]{flex:1;display:flex;align-items:flex-start;gap:.75rem;padding:1rem;background:var(--color-bg);border:2px solid var(--color-border);border-radius:8px;cursor:pointer;transition:all .2s ease}.source-section[_ngcontent-%COMP%] .source-option[_ngcontent-%COMP%]:hover{border-color:var(--color-primary);background:var(--color-bg-hover)}.source-section[_ngcontent-%COMP%] .source-option.selected[_ngcontent-%COMP%]{border-color:var(--color-primary);background:var(--color-bg-hover);box-shadow:0 0 0 1px var(--color-primary)}.source-section[_ngcontent-%COMP%] .source-option[_ngcontent-%COMP%] input[type=radio][_ngcontent-%COMP%]{margin-top:2px;cursor:pointer}.source-section[_ngcontent-%COMP%] .source-option[_ngcontent-%COMP%] .source-content[_ngcontent-%COMP%]{flex:1}.source-section[_ngcontent-%COMP%] .source-option[_ngcontent-%COMP%] .source-content[_ngcontent-%COMP%] .source-header[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem;margin-bottom:.5rem}.source-section[_ngcontent-%COMP%] .source-option[_ngcontent-%COMP%] .source-content[_ngcontent-%COMP%] .source-header[_ngcontent-%COMP%] .source-icon[_ngcontent-%COMP%]{font-size:1.25rem}.source-section[_ngcontent-%COMP%] .source-option[_ngcontent-%COMP%] .source-content[_ngcontent-%COMP%] .source-header[_ngcontent-%COMP%] .source-label[_ngcontent-%COMP%]{font-weight:600;font-size:.95rem}.source-section[_ngcontent-%COMP%] .source-option[_ngcontent-%COMP%] .source-content[_ngcontent-%COMP%] .source-description[_ngcontent-%COMP%]{margin:0;font-size:.85rem;color:var(--color-text-secondary);line-height:1.4}.source-section[_ngcontent-%COMP%] .hint[_ngcontent-%COMP%]{margin:0;font-size:.85rem;color:var(--color-text-secondary);font-style:italic}.thread-lifetime-disabled[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:.75rem;padding:1rem;background:#2196f30d;border:1px solid rgba(33,150,243,.2);border-radius:8px;margin-bottom:1rem}.thread-lifetime-disabled[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{color:#2196f3cc;font-size:1.25rem;width:1.25rem;height:1.25rem;margin-top:2px}.thread-lifetime-disabled[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:0;flex:1}.thread-lifetime-disabled[_ngcontent-%COMP%] p[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{font-size:.95rem;color:var(--color-text)}.thread-lifetime-disabled[_ngcontent-%COMP%] p[_ngcontent-%COMP%] .hint[_ngcontent-%COMP%]{display:block;margin-top:.25rem;font-size:.85rem;color:var(--color-text-secondary);line-height:1.4}.source-display[_ngcontent-%COMP%]{padding:1rem;background:var(--color-surface);border-radius:8px;border:1px solid var(--color-border)}.source-display[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:0 0 .75rem;font-size:1rem;font-weight:600}.source-display[_ngcontent-%COMP%] .source-badge[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:.5rem;padding:.5rem 1rem;border-radius:6px;font-size:.9rem;font-weight:500;margin-bottom:.5rem}.source-display[_ngcontent-%COMP%] .source-badge[_ngcontent-%COMP%] .source-icon[_ngcontent-%COMP%]{font-size:1.1rem}.source-display[_ngcontent-%COMP%] .source-badge.badge-local[_ngcontent-%COMP%]{background:#2196f31a;color:#2196f3;border:1px solid rgba(33,150,243,.3)}.source-display[_ngcontent-%COMP%] .source-badge.badge-project[_ngcontent-%COMP%]{background:#4caf501a;color:#4caf50;border:1px solid rgba(76,175,80,.3)}.source-display[_ngcontent-%COMP%] .hint[_ngcontent-%COMP%]{margin:0;font-size:.85rem;color:var(--color-text-secondary);font-style:italic}"],changeDetection:1})};var Ge=()=>[],Ke=s=>({id:s});function Je(s,i){if(s&1&&(Is(0,"div",6),qC(1),pl()),s&2){let e=yC();JE(),Zg(e.errorMessage());}}function Qe(s,i){if(s&1){let e=fC();Is(0,"ds-entity-card",8),Ag("selected",function(r){If(e);let m=yC();return wf(m.onEdit(r))}),ml(1,9),Is(2,"button",10),Ag("click",function(r){return r.stopPropagation()}),Is(3,"mat-icon"),qC(4,"more_vert"),pl()(),yl(),pl();}if(s&2){let e=i.$implicit;yC();let t=bC(11);Tg("id",e.id)("name",e.name)("description",e.description)("badges",e.badges??oT(6,Ge)),JE(2),Tg("matMenuTriggerFor",t)("matMenuTriggerData",iT(7,Ke,e.id));}}function Xe(s,i){if(s&1){let e=fC();Is(0,"button",11),Ag("click",function(){If(e);let r=yC().id,m=yC();return wf(m.onToggleWebhook(r))}),Is(1,"mat-icon"),qC(2),pl(),qC(3),pl();}if(s&2){let e=yC().id,t=yC();JE(2),Zg(t.isWebhookEnabled(e)?"link_off":"link"),JE(),vl(" ",t.isWebhookEnabled(e)?"Disable webhook":"Enable webhook"," ");}}function Ze(s,i){if(s&1){let e=fC();Is(0,"button",11),Ag("click",function(){let r=If(e).id,m=yC();return wf(m.onEdit(r))}),Is(1,"mat-icon"),qC(2,"edit"),pl(),qC(3," Edit "),pl(),tC(4,Xe,4,2,"button",12),Is(5,"button",13),Ag("click",function(){let r=If(e).id,m=yC();return wf(m.onDelete(r))}),Is(6,"mat-icon"),qC(7,"delete"),pl(),qC(8," Delete "),pl();}if(s&2){let e=yC();JE(4),nC(e.isAdmin()?4:-1);}}var Le="system",Ie=class s{promptApi=g(d);configApi=g(W);location=g(Sm);dialog=g(Re);prompts=zi([]);isLoading=zi(false);errorMessage=zi(null);showOnlyMine=zi(true);isAdmin=zi(false);currentUsername=zi("");promptItems=yT(()=>{let i=this.prompts(),e=this.currentUsername(),r=this.showOnlyMine()&&e?i.filter(p=>this.isMyPrompt(p)):i,D=[...new Set(r.map(p=>p.createdBy))].sort((p,k)=>p===e&&k!==e?-1:k===e&&p!==e||p===Le?1:k===Le?-1:p.localeCompare(k)),H=[];for(let p of D){let k=p===e?`${p} (you)`:p;for(let F of r.filter(Ae=>Ae.createdBy===p))H.push({id:F.id,name:F.name,description:F.description,badges:this.buildBadges(F),groupKey:p,groupLabel:k});}return H});ngOnInit(){this.configApi.getUserConfig().subscribe({next:i=>{this.isAdmin.set(i.groups?.includes("CODAY_ADMIN")??false),this.currentUsername.set(i.username??"");},error:()=>this.isAdmin.set(false)}),this.loadPrompts();}loadPrompts(){this.isLoading.set(true),this.promptApi.listPrompts().subscribe({next:i=>{this.prompts.set(i.filter(e=>!e.id.startsWith("builtin"))),this.isLoading.set(false);},error:i=>{this.errorMessage.set(i?.error?.error??"Failed to load prompts"),this.isLoading.set(false);}});}onBack(){this.location.back();}onCreate(){this.dialog.open(S,{width:"700px",maxHeight:"90vh",data:{mode:"create"}}).afterClosed().subscribe(e=>{e&&this.loadPrompts();});}onEdit(i){this.promptApi.getPrompt(i).subscribe({next:e=>{this.dialog.open(S,{width:"700px",maxHeight:"90vh",data:{mode:"edit",prompt:e}}).afterClosed().subscribe(r=>{r&&this.loadPrompts();});},error:e=>this.errorMessage.set(e?.error?.error??"Failed to load prompt")});}onDelete(i){confirm("Are you sure you want to delete this prompt?")&&this.promptApi.deletePrompt(i).subscribe({next:()=>this.loadPrompts(),error:e=>this.errorMessage.set(e?.error?.error??"Failed to delete prompt")});}onToggleWebhook(i){let e=this.prompts().find(r=>r.id===i);if(!e)return;(e.webhookEnabled?this.promptApi.disableWebhook(i):this.promptApi.enableWebhook(i)).subscribe({next:()=>this.loadPrompts(),error:r=>this.errorMessage.set(r?.error?.error??"Failed to toggle webhook")});}isWebhookEnabled(i){return this.prompts().find(e=>e.id===i)?.webhookEnabled??false}isMyPrompt(i){let e=t=>t.replace(/[.\s]+/g,"_").toLowerCase();return e(i.createdBy)===e(this.currentUsername())}buildBadges(i){let e=[];return i.source==="local"?e.push({label:"local",variant:"info"}):e.push({label:"project",variant:"success"}),i.webhookEnabled&&e.push({label:"webhook",variant:"warning"}),e}static \u0275fac=function(e){return new(e||s)};static \u0275cmp=Rw({type:s,selectors:[["app-prompt-list"]],decls:13,vars:6,consts:[["promptCard",""],["cardMenu","matMenu"],[1,"prompt-list-page"],["title","Prompts","cardMinWidth","320px","contentMaxWidth","1400px","searchPlaceholder","Filter prompts\u2026","emptyMessage","No prompts found.",3,"createRequested","items","loading","showCreate","itemTemplate"],["toolbar-start","","mat-icon-button","","title","Back",3,"click"],["toolbar-extras","","color","primary",1,"prompt-list__mine-toggle",3,"ngModelChange","ngModel"],[1,"prompt-list__error"],["matMenuContent",""],[3,"selected","id","name","description","badges"],["dsCardActions",""],["mat-icon-button","",3,"click","matMenuTriggerFor","matMenuTriggerData"],["mat-menu-item","",3,"click"],["mat-menu-item",""],["mat-menu-item","",1,"prompt-list__delete-item",3,"click"]],template:function(e,t){if(e&1&&(Is(0,"div",2)(1,"ds-entity-list",3),Ag("createRequested",function(){return t.onCreate()}),Is(2,"button",4),Ag("click",function(){return t.onBack()}),Is(3,"mat-icon"),qC(4,"chevron_left"),pl()(),Is(5,"mat-slide-toggle",5),Ag("ngModelChange",function(m){return t.showOnlyMine.set(m)}),qC(6," Mine "),pl(),UI(),pl(),tC(7,Je,2,1,"div",6),pl(),Dg(8,Qe,5,9,"ng-template",null,0,pT),Is(10,"mat-menu",null,1),Dg(12,Ze,9,1,"ng-template",7),pl()),e&2){let r=bC(9);JE(),Tg("items",t.promptItems())("loading",t.isLoading())("showCreate",true)("itemTemplate",r),JE(4),Tg("ngModel",t.showOnlyMine()),zI(),JE(2),nC(t.errorMessage()?7:-1);}},dependencies:[Wn,ot,it,hr,Gn,yt,wt,ke,se,In,De,Be,ya,En,ti,Zn,cn],styles:["[_nghost-%COMP%]{display:block;width:100%;min-height:100vh;background:var(--color-bg);overflow-y:auto}.prompt-list__mine-toggle[_ngcontent-%COMP%]{flex-shrink:0;font-size:.875rem}.prompt-list__delete-item[_ngcontent-%COMP%]{color:var(--color-error, #ff3b30)}.prompt-list__delete-item[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{color:inherit}.prompt-list__error[_ngcontent-%COMP%]{margin:1rem auto;max-width:900px;padding:.75rem 1rem;background:#dc262614;border:1px solid rgba(220,38,38,.25);border-radius:8px;color:var(--color-error, #ff3b30);font-size:.875rem}"],changeDetection:1})};export{Ie as PromptListComponent};