@whoz-oss/coday-client 0.191.0 → 0.192.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 (58) hide show
  1. package/browser/{chunk-NW27XB47.js → chunk-2E6MYDFG.js} +1 -1
  2. package/browser/{chunk-VTAI3MOF.js → chunk-3TUBTI3K.js} +1 -1
  3. package/browser/{chunk-QUJXN3NC.js → chunk-4KJQDGDQ.js} +1 -1
  4. package/browser/{chunk-UT7VOSQ7.js → chunk-6LPLMT5G.js} +1 -1
  5. package/browser/{chunk-OONW44HQ.js → chunk-7CSO3M7Q.js} +1 -1
  6. package/browser/chunk-AJAMHOBU.js +1 -0
  7. package/browser/{chunk-HIA7DOSV.js → chunk-BHZ7DCUX.js} +1 -1
  8. package/browser/{chunk-UL3MSBXV.js → chunk-BRQRJTLE.js} +1 -1
  9. package/browser/chunk-BWTU7I6I.js +1 -0
  10. package/browser/chunk-E3YDDL7X.js +1 -0
  11. package/browser/chunk-E7DFLZK7.js +1 -0
  12. package/browser/{chunk-BLT2UGUM.js → chunk-E7XT4AGE.js} +5 -5
  13. package/browser/{chunk-V7RYUISE.js → chunk-ECEWYTGM.js} +1 -1
  14. package/browser/chunk-EYS2HGZ4.js +1 -0
  15. package/browser/chunk-GRJZARL3.js +1 -0
  16. package/browser/chunk-HEBIR2K3.js +1 -0
  17. package/browser/{chunk-H76XRLTE.js → chunk-I6YWE5DW.js} +1 -1
  18. package/browser/{chunk-CPPSTTTC.js → chunk-JRJCV4WT.js} +1 -1
  19. package/browser/{chunk-OSUSTGJD.js → chunk-KTG6TT73.js} +1 -1
  20. package/browser/chunk-KW4N7QC3.js +1 -0
  21. package/browser/{chunk-37Z4RQMS.js → chunk-LJN5BVCL.js} +1 -1
  22. package/browser/chunk-M4B5E7RD.js +1 -0
  23. package/browser/{chunk-IO7Y6AGH.js → chunk-NA7C7FYU.js} +1 -1
  24. package/browser/{chunk-7XZSS2EV.js → chunk-OULUES5R.js} +1 -1
  25. package/browser/chunk-OZXXB3UF.js +1 -0
  26. package/browser/chunk-PIZZDP7D.js +1 -0
  27. package/browser/{chunk-ECF4ASWE.js → chunk-PMFBZ6OG.js} +1 -1
  28. package/browser/{chunk-YHAKQS2P.js → chunk-PW6HGLWK.js} +1 -1
  29. package/browser/chunk-QPBFAKWK.js +1 -0
  30. package/browser/{chunk-RKONB72C.js → chunk-SGCZJMPT.js} +4 -4
  31. package/browser/{chunk-3UWHDPW7.js → chunk-VEHGBGGY.js} +2 -2
  32. package/browser/{chunk-OGI7MX2M.js → chunk-WEEYHBKK.js} +1 -1
  33. package/browser/chunk-WQVPMMUH.js +1 -0
  34. package/browser/{chunk-VDRETD5H.js → chunk-WV7ML4CJ.js} +3 -3
  35. package/browser/{chunk-UVOW2VIJ.js → chunk-XBVYORVG.js} +1 -1
  36. package/browser/chunk-YC254XBK.js +270 -0
  37. package/browser/{chunk-L75REITS.js → chunk-YKWYW7YJ.js} +3 -3
  38. package/browser/{chunk-5BDX24G5.js → chunk-YNF2EAXK.js} +1 -1
  39. package/browser/{chunk-FSOL3ALS.js → chunk-YNYTAOEP.js} +1 -1
  40. package/browser/index.html +2 -2
  41. package/browser/main-GZS32O2T.js +1 -0
  42. package/browser/styles-OTP4QCB4.css +1 -0
  43. package/package.json +1 -1
  44. package/browser/chunk-3USYL5BG.js +0 -1
  45. package/browser/chunk-5DONQZON.js +0 -1
  46. package/browser/chunk-6ID3TABK.js +0 -1
  47. package/browser/chunk-ADN4NBOA.js +0 -1
  48. package/browser/chunk-IYL3P5IQ.js +0 -1
  49. package/browser/chunk-KOR36WEI.js +0 -1
  50. package/browser/chunk-OTANLRGJ.js +0 -1
  51. package/browser/chunk-SEVRZF2U.js +0 -1
  52. package/browser/chunk-SFLR6TA7.js +0 -1
  53. package/browser/chunk-T6BQJAEY.js +0 -1
  54. package/browser/chunk-TDB2ASJ5.js +0 -1
  55. package/browser/chunk-XUO5X2DR.js +0 -1
  56. package/browser/chunk-ZZTT5MET.js +0 -270
  57. package/browser/main-IFKRYXRT.js +0 -1
  58. package/browser/styles-DXY4Y6E7.css +0 -1
@@ -1,3 +1,3 @@
1
- import{a as Qe,b as He,d as Ge,f as ye,h as Pe}from"./chunk-RKONB72C.js";import{a as $e,b as pe,c as Be,w as Ye}from"./chunk-ZZTT5MET.js";import{d as le}from"./chunk-4GVABYH4.js";import{c as nt}from"./chunk-YNZD2HBV.js";import{a as Ue,b as Xe,j as qe,n as Je,s as Ze,t as Ke,u as et,v as tt}from"./chunk-BUA6GPP7.js";import{a as T,c as P}from"./chunk-V363EHJE.js";import{d as Re}from"./chunk-6CNI4FAD.js";import{a as B,b as U}from"./chunk-ZEMOOOQR.js";import{D as We,E as he,c as _e,g as ge,m as ue}from"./chunk-HZF57OLY.js";import{a as de,b as me}from"./chunk-5URVSSXV.js";import{E as ze,O as R,S as $,n as Le}from"./chunk-EF2BOSEH.js";import{Ab as be,Bb as C,Db as u,Fb as c,Gb as Ve,Gc as Ae,Ha as J,Hb as De,Jb as te,Ka as d,Kb as ne,Lb as ie,Pb as xe,Qb as V,Rb as x,T as I,Tb as l,Ub as y,Vb as Y,Wa as E,Xa as je,Xb as re,Yb as oe,Zb as ae,_ as Ee,a as k,ab as K,b as H,bc as Ne,ca as v,cc as Fe,ga as m,h as Oe,ha as p,hc as Ie,jb as ee,kc as se,lb as _,ma as Z,mb as g,oa as q,oc as ce,pb as L,qb as z,rb as b,sb as o,t as G,ta as A,tb as a,ua as W,ub as j,z as ke}from"./chunk-B4RKRLIY.js";var it=(()=>{class n{static \u0275fac=function(i){return new(i||n)};static \u0275mod=je({type:n});static \u0275inj=Ee({imports:[ze]})}return n})();var mt=(n,t)=>({subThreads:n,depth:t}),pt=n=>({subThreads:n,depth:1}),st=(n,t)=>t.id,_t=(n,t)=>t.label;function gt(n,t){if(n&1){let e=C();o(0,"mat-icon",10),u("click",function(r){m(e);let s=c().$implicit,f=c(3);return p(f.toggleSubThreads(r,s.id))}),l(1),a()}if(n&2){let e=c().$implicit,i=c(3);d(),y(i.isParentExpanded(e.id)?"expand_more":"chevron_right")}}function ut(n,t){n&1&&be(0)}function ht(n,t){if(n&1&&K(0,ut,1,0,"ng-container",11),n&2){let e=c().$implicit,i=c().depth;c();let r=xe(1);b("ngTemplateOutlet",r)("ngTemplateOutletContext",Fe(2,mt,e.subThreads,i+1))}}function ft(n,t){if(n&1){let e=C();o(0,"div",5)(1,"a",6),u("click",function(r){let s=m(e).$implicit;return c(3).selectThread(s.id),p(r.preventDefault())})("keydown.enter",function(r){let s=m(e).$implicit;return c(3).selectThread(s.id),p(r.preventDefault())})("keydown.space",function(r){let s=m(e).$implicit;return c(3).selectThread(s.id),p(r.preventDefault())}),_(2,gt,2,1,"mat-icon",7),o(3,"span",8),l(4),a(),o(5,"span",9),l(6),a()()(),_(7,ht,1,5,"ng-container")}if(n&2){let e,i=t.$implicit,r=c().depth,s=c(2);V("--sub-depth",r),x("current",i.id===((e=s.currentThread())==null?null:e.id)),d(2),g(i.subThreads!=null&&i.subThreads.length?2:-1),d(2),y(i.delegatedAgentName||"Agent"),d(2),y(i.delegatedTask||i.name),d(),g(s.isParentExpanded(i.id)&&(i.subThreads!=null&&i.subThreads.length)?7:-1)}}function Ct(n,t){if(n&1&&L(0,ft,8,8,null,null,st),n&2){let e=t.subThreads;z(e)}}function vt(n,t){n&1&&(o(0,"div",4),j(1,"span",12),o(2,"span",13),l(3,"Loading threads..."),a()())}function bt(n,t){if(n&1&&(o(0,"div",27),l(1),a()),n&2){let e=c(6);d(),y(e.renameErrorMessage)}}function xt(n,t){if(n&1){let e=C();o(0,"div",18)(1,"input",26),ae("ngModelChange",function(r){m(e);let s=c(5);return oe(s.editingThreadName,r)||(s.editingThreadName=r),p(r)}),u("keydown",function(r){m(e);let s=c(5);return p(s.onEditKeydown(r))})("blur",function(){m(e);let r=c(5);return p(r.onEditBlur())})("click",function(r){return r.stopPropagation()}),a(),_(2,bt,2,1,"div",27),a()}if(n&2){let e=c(5);d(),re("ngModel",e.editingThreadName),b("disabled",e.isRenamingThread),d(),g(e.renameErrorMessage?2:-1)}}function yt(n,t){if(n&1){let e=C();o(0,"mat-icon",10),u("click",function(r){m(e);let s=c(2).$implicit,f=c(4);return p(f.toggleSubThreads(r,s.id))}),l(1),a()}if(n&2){let e=c(2).$implicit,i=c(4);d(),y(i.isParentExpanded(e.id)?"expand_more":"chevron_right")}}function Pt(n,t){if(n&1&&(o(0,"span",29),l(1),a()),n&2){let e=c(2).$implicit;d(),y(e.name)}}function St(n,t){n&1&&(j(0,"mat-spinner",31),o(1,"span",32),l(2,"Generating name..."),a()),n&2&&b("diameter",16)}function Mt(n,t){n&1&&(o(0,"mat-icon",30),l(1,"group"),a())}function wt(n,t){if(n&1){let e=C();o(0,"a",28),u("click",function(r){m(e);let s=c().$implicit;return c(4).selectThread(s.id),p(r.preventDefault())})("keydown.enter",function(r){m(e);let s=c().$implicit;return c(4).selectThread(s.id),p(r.preventDefault())})("keydown.space",function(r){m(e);let s=c().$implicit;return c(4).selectThread(s.id),p(r.preventDefault())}),_(1,yt,2,1,"mat-icon",7),_(2,Pt,2,1,"span",29)(3,St,3,1),_(4,Mt,2,0,"mat-icon",30),a()}if(n&2){let e=c().$implicit,i=c(4);b("matTooltip",e.name?e.name+`
1
+ import{a as He,b as Ge,d as qe,f as ye,h as Pe}from"./chunk-SGCZJMPT.js";import{a as $e,b as pe,c as Be,d as Ue}from"./chunk-YC254XBK.js";import{d as le}from"./chunk-4GVABYH4.js";import{c as nt}from"./chunk-YNZD2HBV.js";import{a as Xe,b as Qe,j as We,n as Ye,s as Ze,t as Ke,u as et,v as tt}from"./chunk-BUA6GPP7.js";import{d as Re}from"./chunk-6CNI4FAD.js";import{a as T,c as P}from"./chunk-V363EHJE.js";import{a as B,b as U}from"./chunk-ZEMOOOQR.js";import{D as Je,E as he,c as _e,g as ge,m as ue}from"./chunk-HZF57OLY.js";import{a as de,b as me}from"./chunk-5URVSSXV.js";import{E as ze,O as R,S as $,n as Le}from"./chunk-EF2BOSEH.js";import{Ab as be,Bb as C,Db as u,Fb as c,Gb as Ve,Gc as Ae,Ha as J,Hb as De,Jb as te,Ka as d,Kb as ne,Lb as ie,Pb as xe,Qb as V,Rb as x,T as I,Tb as l,Ub as y,Vb as Y,Wa as E,Xa as je,Xb as re,Yb as oe,Zb as ae,_ as Ee,a as k,ab as K,b as H,bc as Ne,ca as v,cc as Fe,ga as m,h as Oe,ha as p,hc as Ie,jb as ee,kc as se,lb as _,ma as Z,mb as g,oa as q,oc as ce,pb as L,qb as z,rb as b,sb as o,t as G,ta as A,tb as a,ua as W,ub as j,z as ke}from"./chunk-B4RKRLIY.js";var it=(()=>{class n{static \u0275fac=function(i){return new(i||n)};static \u0275mod=je({type:n});static \u0275inj=Ee({imports:[ze]})}return n})();var mt=(n,t)=>({subThreads:n,depth:t}),pt=n=>({subThreads:n,depth:1}),st=(n,t)=>t.id,_t=(n,t)=>t.label;function gt(n,t){if(n&1){let e=C();o(0,"mat-icon",10),u("click",function(r){m(e);let s=c().$implicit,f=c(3);return p(f.toggleSubThreads(r,s.id))}),l(1),a()}if(n&2){let e=c().$implicit,i=c(3);d(),y(i.isParentExpanded(e.id)?"expand_more":"chevron_right")}}function ut(n,t){n&1&&be(0)}function ht(n,t){if(n&1&&K(0,ut,1,0,"ng-container",11),n&2){let e=c().$implicit,i=c().depth;c();let r=xe(1);b("ngTemplateOutlet",r)("ngTemplateOutletContext",Fe(2,mt,e.subThreads,i+1))}}function ft(n,t){if(n&1){let e=C();o(0,"div",5)(1,"a",6),u("click",function(r){let s=m(e).$implicit;return c(3).selectThread(s.id),p(r.preventDefault())})("keydown.enter",function(r){let s=m(e).$implicit;return c(3).selectThread(s.id),p(r.preventDefault())})("keydown.space",function(r){let s=m(e).$implicit;return c(3).selectThread(s.id),p(r.preventDefault())}),_(2,gt,2,1,"mat-icon",7),o(3,"span",8),l(4),a(),o(5,"span",9),l(6),a()()(),_(7,ht,1,5,"ng-container")}if(n&2){let e,i=t.$implicit,r=c().depth,s=c(2);V("--sub-depth",r),x("current",i.id===((e=s.currentThread())==null?null:e.id)),d(2),g(i.subThreads!=null&&i.subThreads.length?2:-1),d(2),y(i.delegatedAgentName||"Agent"),d(2),y(i.delegatedTask||i.name),d(),g(s.isParentExpanded(i.id)&&(i.subThreads!=null&&i.subThreads.length)?7:-1)}}function Ct(n,t){if(n&1&&L(0,ft,8,8,null,null,st),n&2){let e=t.subThreads;z(e)}}function vt(n,t){n&1&&(o(0,"div",4),j(1,"span",12),o(2,"span",13),l(3,"Loading threads..."),a()())}function bt(n,t){if(n&1&&(o(0,"div",27),l(1),a()),n&2){let e=c(6);d(),y(e.renameErrorMessage)}}function xt(n,t){if(n&1){let e=C();o(0,"div",18)(1,"input",26),ae("ngModelChange",function(r){m(e);let s=c(5);return oe(s.editingThreadName,r)||(s.editingThreadName=r),p(r)}),u("keydown",function(r){m(e);let s=c(5);return p(s.onEditKeydown(r))})("blur",function(){m(e);let r=c(5);return p(r.onEditBlur())})("click",function(r){return r.stopPropagation()}),a(),_(2,bt,2,1,"div",27),a()}if(n&2){let e=c(5);d(),re("ngModel",e.editingThreadName),b("disabled",e.isRenamingThread),d(),g(e.renameErrorMessage?2:-1)}}function yt(n,t){if(n&1){let e=C();o(0,"mat-icon",10),u("click",function(r){m(e);let s=c(2).$implicit,f=c(4);return p(f.toggleSubThreads(r,s.id))}),l(1),a()}if(n&2){let e=c(2).$implicit,i=c(4);d(),y(i.isParentExpanded(e.id)?"expand_more":"chevron_right")}}function Pt(n,t){if(n&1&&(o(0,"span",29),l(1),a()),n&2){let e=c(2).$implicit;d(),y(e.name)}}function St(n,t){n&1&&(j(0,"mat-spinner",31),o(1,"span",32),l(2,"Generating name..."),a()),n&2&&b("diameter",16)}function Mt(n,t){n&1&&(o(0,"mat-icon",30),l(1,"group"),a())}function wt(n,t){if(n&1){let e=C();o(0,"a",28),u("click",function(r){m(e);let s=c().$implicit;return c(4).selectThread(s.id),p(r.preventDefault())})("keydown.enter",function(r){m(e);let s=c().$implicit;return c(4).selectThread(s.id),p(r.preventDefault())})("keydown.space",function(r){m(e);let s=c().$implicit;return c(4).selectThread(s.id),p(r.preventDefault())}),_(1,yt,2,1,"mat-icon",7),_(2,Pt,2,1,"span",29)(3,St,3,1),_(4,Mt,2,0,"mat-icon",30),a()}if(n&2){let e=c().$implicit,i=c(4);b("matTooltip",e.name?e.name+`
2
2
 
3
- `+(e.summary||""):e.summary||"")("matTooltipDisabled",!e.summary),d(),g(e.subThreads!=null&&e.subThreads.length?1:-1),d(),g(e.name?2:3),d(2),g(i.isSharedThread(e)?4:-1)}}function Tt(n,t){if(n&1){let e=C();o(0,"button",33),u("click",function(r){m(e);let s=c().$implicit,f=c(4);return p(f.startEditingThreadName(r,s))}),o(1,"mat-icon"),l(2,"edit"),a()()}}function Ot(n,t){if(n&1){let e=C();o(0,"button",34),u("click",function(r){m(e);let s=c().$implicit,f=c(4);return p(f.markActive(r,s))}),o(1,"mat-icon"),l(2,"replay"),a()()}}function kt(n,t){if(n&1){let e=C();o(0,"button",35),u("click",function(r){m(e);let s=c().$implicit,f=c(4);return p(f.markDone(r,s))}),o(1,"mat-icon"),l(2,"check_circle_outline"),a()()}}function Et(n,t){n&1&&be(0)}function jt(n,t){if(n&1&&K(0,Et,1,0,"ng-container",11),n&2){let e=c().$implicit;c(3);let i=xe(1);b("ngTemplateOutlet",i)("ngTemplateOutletContext",Ne(2,pt,e.subThreads))}}function Vt(n,t){if(n&1){let e=C();o(0,"div",17),_(1,xt,3,3,"div",18)(2,wt,5,5,"a",19),o(3,"div",20),_(4,Tt,3,0,"button",21),_(5,Ot,3,0,"button",22)(6,kt,3,0,"button",23),o(7,"button",24),u("click",function(r){let s=m(e).$implicit,f=c(4);return p(f.toggleStar(r,s))}),o(8,"mat-icon"),l(9),a()(),o(10,"button",25),u("click",function(r){let s=m(e).$implicit,f=c(4);return p(f.deleteThread(r,s))}),o(11,"mat-icon"),l(12,"delete"),a()()()(),_(13,jt,1,4,"ng-container")}if(n&2){let e,i=t.$implicit,r=c(4);x("current",i.id===((e=r.currentThread())==null?null:e.id)),d(),g(r.editingThreadId===i.id?1:2),d(3),g(r.editingThreadId!==i.id&&i.name?4:-1),d(),g(i.closedByUser?5:6),d(2),x("starred",r.isStarred(i)),b("title",r.isStarred(i)?"Unstar thread":"Star thread"),d(2),y(r.isStarred(i)?"star":"star_outline"),d(4),g(r.isParentExpanded(i.id)&&(i.subThreads!=null&&i.subThreads.length)?13:-1)}}function Dt(n,t){if(n&1&&(o(0,"div",14)(1,"div",16),l(2),a(),L(3,Vt,14,10,null,null,st),a()),n&2){let e=t.$implicit;d(2),y(e.label),d(),z(e.threads)}}function Nt(n,t){n&1&&(o(0,"div",15),l(1,"No existing threads"),a())}function Ft(n,t){if(n&1&&(o(0,"div",15),l(1),a()),n&2){let e=c(3);d(),Y('No threads matching "',e.searchQuery(),'"')}}function It(n,t){if(n&1&&(L(0,Dt,5,1,"div",14,_t),_(2,Nt,2,0,"div",15)(3,Ft,2,1,"div",15)),n&2){let e,i=c(2);z(i.getGroupedThreads()),d(2),g(!((e=i.threads())!=null&&e.length)&&!i.searchQuery()?2:i.searchQuery()&&i.getGroupedThreads().length===0?3:-1)}}function At(n,t){if(n&1&&(K(0,Ct,2,0,"ng-template",null,0,Ie),o(2,"div",3),_(3,vt,4,0,"div",4)(4,It,4,1),a()),n&2){let e=c();d(3),g(e.isLoadingThreadList()?3:4)}}function Lt(n,t){n&1&&(o(0,"span",36),l(1,"No project selected"),a())}function zt(n,t){n&1&&(o(0,"span",36),l(1,"Loading..."),a())}function Rt(n,t){if(n&1&&(o(0,"div",2),_(1,Lt,2,0,"span",36)(2,zt,2,0,"span",36),a()),n&2){let e,i=c();d(),g((e=i.currentProject())!=null&&e.name?2:1)}}var fe=class n{projects=null;searchMode=!1;searchQuery=ce("");searchModeChange=new q;threadSelected=new q;projectStateService=v(me);threadStateService=v(pe);threadApiService=v($e);userService=v(Be);router=v(le);destroyRef=v(Z);currentThread=P(this.threadStateService.selectedThread$);currentProject=P(this.projectStateService.selectedProject$);threads=P(this.threadStateService.threadList$);isLoadingThreadList=P(this.threadStateService.isLoadingThreadList$);username=P(this.userService.username$);isTouchDevice="ontouchstart"in window||navigator.maxTouchPoints>0;editingThreadId=null;editingThreadName="";isRenamingThread=!1;renameErrorMessage="";expandedParents=new Set;constructor(){W(()=>{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 r=t;for(;r;){let s=i.get(r);s&&this.expandedParents.add(s),r=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),r=t.filter(h=>!!h.parentThreadId),s=r.filter(h=>!e.has(h.parentThreadId)),f=r.filter(h=>e.has(h.parentThreadId)),D=new Map;for(let h of f){let S=h.parentThreadId;D.has(S)||D.set(S,[]),D.get(S).push(h)}let X=h=>(D.get(h)||[]).sort((w,O)=>w.modifiedDate>O.modifiedDate?-1:1).map(w=>H(k({},w),{subThreads:X(w.id)})),N=[...i,...s];if(this.searchQuery()&&this.searchQuery().trim()){let h=this.searchQuery().toLowerCase().trim();N=N.filter(S=>S.name.toLowerCase().includes(h)||S.summary&&S.summary.toLowerCase().includes(h))}if(!N.length)return[];let F=this.username();if(!F)return[];let Me=N.map(h=>H(k({},h),{subThreads:X(h.id)})),we=Me.filter(h=>h.starring&&h.starring.includes(F)),lt=Me.filter(h=>!h.starring||!h.starring.includes(F)),Q=new Map,Te=new Date;Te.setHours(0,0,0,0);for(let h of lt){let S=new Date(h.modifiedDate);S.setHours(0,0,0,0);let w=Te.getTime()-S.getTime(),O=Math.floor(w/(1e3*60*60*24)),M;O===0?M="Today":O===1?M="Yesterday":O<7?M="This Week":O<30?M="This Month":O<90?M="Last 3 Months":M="Older",Q.has(M)||Q.set(M,[]),Q.get(M).push(h)}let ve=[];if(we.length>0){let h=[...we].sort((S,w)=>S.modifiedDate>w.modifiedDate?-1:1);ve.push({label:"Starred",threads:h})}return["Today","Yesterday","This Week","This Month","Last 3 Months","Older"].filter(h=>Q.has(h)).forEach(h=>{ve.push({label:h,threads:Q.get(h)})}),ve}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 r=e.starring&&e.starring.includes(i),s=r?this.threadApiService.unstarThread(e.id):this.threadApiService.starThread(e.id);this.threadStateService.updateStarLocal(e.id,!r,i),s.pipe(T(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),r=new Date().getTime()-e.getTime(),s=Math.floor(r/(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=!0,this.renameErrorMessage="",this.threadStateService.renameThread(i,e).subscribe({next:()=>{console.log("[THREAD-SELECTOR] Thread renamed successfully"),this.cancelEditingThreadName(),this.isRenamingThread=!1},error:r=>{console.error("[THREAD-SELECTOR] Error renaming thread:",r),this.renameErrorMessage=r.message||"Failed to rename thread",this.isRenamingThread=!1}})}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=E({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){if(e&1&&(o(0,"div",1),u("click",function(s){return s.stopPropagation()})("keydown",function(s){return s.stopPropagation()}),_(1,At,5,1)(2,Rt,3,1,"div",2),a()),e&2){let r;d(),g((r=i.currentProject())!=null&&r.name?1:2)}},dependencies:[Ae,he,_e,ge,We,ue,U,B,$,R,Je,qe,He,Qe,Xe,Ue],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}}"]})};var $t=["logsContent"],Bt=(n,t)=>t.name;function Ut(n,t){if(n&1){let e=C();o(0,"button",12),u("click",function(){m(e);let r=c().$implicit,s=c();return p(s.start(r.name))}),o(1,"mat-icon"),l(2,"play_arrow"),a()()}if(n&2){let e=c().$implicit;b("disabled",e.isLoading)}}function Xt(n,t){if(n&1){let e=C();o(0,"button",13),u("click",function(){m(e);let r=c().$implicit,s=c();return p(s.stop(r.name))}),o(1,"mat-icon"),l(2,"stop"),a()()}if(n&2){let e=c().$implicit;b("disabled",e.isLoading)}}function Qt(n,t){if(n&1&&(o(0,"a",8)(1,"mat-icon",14),l(2,"open_in_new"),a()()),n&2){let e=c().$implicit;b("href",e.url,J)("title",e.url)}}function Ht(n,t){if(n&1&&(o(0,"div",15),l(1),a()),n&2){let e=c(),i=e.$implicit,r=e.$index;V("order",r*2),d(),y(i.errorMessage)}}function Gt(n,t){if(n&1){let e=C();o(0,"button",21),u("click",function(){m(e);let r=c(3);return p(r.onManualRefresh())}),o(1,"mat-icon"),l(2,"refresh"),a()()}}function qt(n,t){if(n&1&&(o(0,"div",16)(1,"div",17)(2,"span",18),l(3),a(),_(4,Gt,3,0,"button",19),a(),o(5,"pre",20,0),l(7),a()()),n&2){let e=c(),i=e.$implicit,r=e.$index,s=c();V("order",r*2+1),d(3),Y("",i.name," logs"),d(),g(i.status==="running"?4:-1),d(3),y(s.logs()||"(empty)")}}function Wt(n,t){if(n&1){let e=C();o(0,"div",2)(1,"span",3),l(2),a(),o(3,"div",4),_(4,Ut,3,1,"button",5)(5,Xt,3,1,"button",6),o(6,"span",7),l(7),a(),_(8,Qt,3,2,"a",8),o(9,"button",9),u("click",function(){let r=m(e).$implicit,s=c();return p(s.toggleLogs(r.name))}),o(10,"mat-icon"),l(11),a()()()(),_(12,Ht,2,3,"div",10),_(13,qt,8,5,"div",11)}if(n&2){let e=t.$implicit,i=t.$index,r=c();V("order",i*2),d(2),y(e.name),d(2),g(e.status==="stopped"?4:5),d(2),x("running",e.status==="running"),d(),Y(" ",e.status==="running"?"Running":"Stopped"," "),d(),g(e.url?8:-1),d(),b("title",r.logsOpenFor()===e.name?"Hide logs":"Show logs"),d(2),y(r.logsOpenFor()===e.name?"expand_less":"terminal"),d(),g(e.errorMessage?12:-1),d(),g(r.logsOpenFor()===e.name?13:-1)}}var Ce=class n{destroyRef=v(Z);projectApi=v(de);projectName=ce.required();entryStates=A([]);hasPreview=se(()=>this.entryStates().length>0);logsOpenFor=A(null);logs=A("");logsContent;logsPollTimer=null;logsTimeoutTimer=null;static LOGS_POLL_MS=5e3;static LOGS_TIMEOUT_MS=1200*1e3;constructor(){W(()=>{let t=this.projectName();t&&this.onProjectChanged(t)},{allowSignalWrites:!0}),W(()=>{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(T(this.destroyRef)).subscribe({next:e=>{let i=e.entries;if(i.length===0)return;let r=i.map(f=>({name:f.name,command:f.command,url:f.url,status:"stopped",isLoading:!1,errorMessage:""}));this.entryStates.set(r);let s=i.map(f=>this.projectApi.getPreviewStatus(t,f.name));ke(s).pipe(T(this.destroyRef)).subscribe({next:f=>{this.entryStates.update(D=>D.map((X,N)=>{let F=f[N];return F?H(k({},X),{status:F.status}):X}))},error:()=>{}})},error:()=>{}})}start(t){this.updateEntry(t,{isLoading:!0,errorMessage:""}),this.projectApi.startPreview(this.projectName(),t).pipe(T(this.destroyRef)).subscribe({next:e=>{this.updateEntry(t,{status:e.status,isLoading:!1})},error:e=>{this.updateEntry(t,{errorMessage:e?.error?.error??"Failed to start preview",isLoading:!1})}})}stop(t){this.updateEntry(t,{isLoading:!0,errorMessage:""}),this.projectApi.stopPreview(this.projectName(),t).pipe(T(this.destroyRef)).subscribe({next:()=>{this.updateEntry(t,{status:"stopped",isLoading:!1}),this.logsOpenFor()===t&&this.stopLogPolling()},error:e=>{this.updateEntry(t,{errorMessage:e?.error?.error??"Failed to stop preview",isLoading:!1})}})}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(T(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(r=>r.name===t?k(k({},r),e):r))}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=E({type:n,selectors:[["app-preview-panel"]],viewQuery:function(e,i){if(e&1&&te($t,5),e&2){let r;ne(r=ie())&&(i.logsContent=r.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&&(o(0,"div",1),L(1,Wt,14,12,null,null,Bt),a()),e&2&&(d(),z(i.entryStates()))},dependencies:[$,R,U,B],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}"]})};var Jt=["threadSearchInput"],Yt=["*"];function Zt(n,t){if(n&1){let e=C();o(0,"button",27),u("click",function(){m(e);let r=c();return p(r.toggle())}),o(1,"mat-icon"),l(2,"menu"),a()(),o(3,"button",28),u("click",function(){m(e);let r=c();return p(r.createNewThread())}),o(4,"mat-icon",10),l(5,"play_circle"),a()()}if(n&2){let e=c();d(3),b("disabled",!e.selectedProjectName())}}function Kt(n,t){if(n&1){let e=C();o(0,"div",12)(1,"a",29),u("click",function(r){return m(e),c().openMissionControl(),p(r.preventDefault())}),o(2,"mat-icon"),l(3,"rocket_launch"),a(),o(4,"span",30),l(5,"Task Control"),a()()()}}function en(n,t){if(n&1){let e=C();o(0,"div",15)(1,"mat-icon",31),l(2,"search"),a(),o(3,"input",32,0),ae("ngModelChange",function(r){m(e);let s=c();return oe(s.threadSearchQuery,r)||(s.threadSearchQuery=r),p(r)}),u("input",function(){m(e);let r=c();return p(r.onThreadSearchInput())}),a(),o(5,"button",33),u("click",function(){m(e);let r=c();return p(r.closeThreadSearch())}),o(6,"mat-icon"),l(7,"close"),a()()()}if(n&2){let e=c();d(3),re("ngModel",e.threadSearchQuery)}}function tn(n,t){if(n&1){let e=C();o(0,"div",16)(1,"mat-icon",23),l(2,"forum"),a(),o(3,"span",24),l(4,"Threads"),a(),o(5,"button",34),u("click",function(r){m(e);let s=c();return p(s.toggleThreadSearch(r))}),o(6,"mat-icon"),l(7,"search"),a()()()}}function nn(n,t){n&1&&(o(0,"mat-icon",22),l(1,"keyboard_arrow_up"),a())}function rn(n,t){n&1&&(o(0,"mat-icon",23),l(1,"hub"),a())}function on(n,t){n&1&&(o(0,"mat-icon",22),l(1,"keyboard_arrow_up"),a())}function an(n,t){n&1&&(o(0,"mat-icon",23),l(1,"tune"),a())}function sn(n,t){n&1&&(o(0,"div",36)(1,"div",40),j(2,"app-options-panel",41),a()())}function cn(n,t){if(n&1){let e=C();o(0,"div",35)(1,"a",21),u("click",function(r){return m(e),c(3).openProjectConfig(),r.preventDefault(),p(r.stopPropagation())}),o(2,"mat-icon",23),l(3,"settings_applications"),a(),o(4,"span",24),l(5,"Project Configuration"),a()()()}}function ln(n,t){n&1&&(o(0,"div",35)(1,"a",42)(2,"mat-icon",23),l(3,"settings_applications"),a(),o(4,"span",24),l(5,"Project config (No project)"),a()()())}function dn(n,t){if(n&1&&_(0,cn,6,0,"div",35)(1,ln,6,0,"div",35),n&2){let e=c(2);g(e.selectedProjectName()?0:1)}}function mn(n,t){if(n&1){let e=C();o(0,"div",35)(1,"a",21),u("click",function(r){return m(e),c(2).openAgents(),r.preventDefault(),p(r.stopPropagation())}),o(2,"mat-icon",23),l(3,"smart_toy"),a(),o(4,"span",24),l(5,"Agents"),a()()()}}function pn(n,t){n&1&&(o(0,"div",35)(1,"a",42)(2,"mat-icon",23),l(3,"smart_toy"),a(),o(4,"span",24),l(5,"Agents (No project)"),a()()())}function _n(n,t){if(n&1){let e=C();o(0,"div",35)(1,"a",21),u("click",function(r){return m(e),c(2).openPrompts(),r.preventDefault(),p(r.stopPropagation())}),o(2,"mat-icon",23),l(3,"description"),a(),o(4,"span",24),l(5,"Prompts"),a()()()}}function gn(n,t){n&1&&(o(0,"div",35)(1,"a",42)(2,"mat-icon",23),l(3,"description"),a(),o(4,"span",24),l(5,"Prompts (No project)"),a()()())}function un(n,t){if(n&1){let e=C();o(0,"div",35)(1,"a",21),u("click",function(r){return m(e),c(2).openSchedulers(),r.preventDefault(),p(r.stopPropagation())}),o(2,"mat-icon",23),l(3,"schedule"),a(),o(4,"span",24),l(5,"Schedulers"),a()()()}}function hn(n,t){n&1&&(o(0,"div",35)(1,"a",42)(2,"mat-icon",23),l(3,"schedule"),a(),o(4,"span",24),l(5,"Schedulers (No project)"),a()()())}function fn(n,t){n&1&&(o(0,"mat-icon",22),l(1,"keyboard_arrow_up"),a())}function Cn(n,t){n&1&&(o(0,"mat-icon",23),l(1,"rocket_launch"),a())}function vn(n,t){if(n&1&&(o(0,"div",36),j(1,"app-preview-panel",43),a()),n&2){let e=c(3);d(),b("projectName",e.selectedProjectName())}}function bn(n,t){if(n&1){let e=C();o(0,"div",35)(1,"a",21),u("click",function(r){return m(e),c(2).toggleSection("preview"),r.preventDefault(),p(r.stopPropagation())}),_(2,fn,2,0,"mat-icon",22)(3,Cn,2,0,"mat-icon",23),o(4,"span",24),l(5,"Preview Server"),a()(),_(6,vn,2,1,"div",36),a()}if(n&2){let e=c(2);x("expanded",e.expandedSections.preview),d(),x("active",e.expandedSections.preview),d(),g(e.expandedSections.preview?2:3),d(4),g(e.expandedSections.preview?6:-1)}}function xn(n,t){if(n&1){let e=C();o(0,"div",25)(1,"div",35)(2,"a",21),u("click",function(r){return m(e),c().toggleSection("config"),p(r.preventDefault())}),_(3,on,2,0,"mat-icon",22)(4,an,2,0,"mat-icon",23),o(5,"span",24),l(6,"Preferences"),a()(),_(7,sn,3,0,"div",36),a(),o(8,"div",35)(9,"a",21),u("click",function(r){return m(e),c().openTokenUsage(),r.preventDefault(),p(r.stopPropagation())}),o(10,"mat-icon",23),l(11,"data_usage"),a(),o(12,"span",24),l(13,"Token Usage"),a()()(),o(14,"div",35)(15,"a",21),u("click",function(r){return m(e),c().openUserConfig(),r.preventDefault(),p(r.stopPropagation())}),o(16,"mat-icon",23),l(17,"manage_accounts"),a(),o(18,"span",24),l(19,"User Configuration"),a()()(),_(20,dn,2,1),_(21,mn,6,0,"div",35)(22,pn,6,0,"div",35),_(23,_n,6,0,"div",35)(24,gn,6,0,"div",35),_(25,un,6,0,"div",35)(26,hn,6,0,"div",35),_(27,bn,7,6,"div",37),o(28,"div",35)(29,"a",38),j(30,"img",39),o(31,"span",24),l(32,"Contribute on GitHub"),a()()()()}if(n&2){let e=c();d(),x("expanded",e.expandedSections.config),d(),x("active",e.expandedSections.config),d(),g(e.expandedSections.config?3:4),d(4),g(e.expandedSections.config?7:-1),d(13),g(e.isAdmin?20:-1),d(),g(e.selectedProjectName()?21:22),d(2),g(e.selectedProjectName()?23:24),d(2),g(e.selectedProjectName()?25:26),d(2),g(e.hasPreviewConfig()?27:-1),d(3),ee("src","CODAY-Logo.png",J)}}function yn(n,t){if(n&1){let e=C();o(0,"div",26)(1,"mat-icon",44),l(2,"warning"),a(),o(3,"span",45),l(4),a(),o(5,"button",46),u("click",function(){m(e);let r=c();return p(r.configErrorMessage="")}),o(6,"mat-icon"),l(7,"close"),a()()()}if(n&2){let e=c();d(4),y(e.configErrorMessage)}}var ct=class n{destroy$=new Oe;sidenavStateChange=new q;drawerOpen=!1;breakpointObserver=v(Le);isDesktop=P(this.breakpointObserver.observe("(min-width: 1400px)").pipe(G(t=>t.matches)),{initialValue:!1});userOpenPreference=A(!0);isOpen=se(()=>this.userOpenPreference());isAdmin=!1;configErrorMessage="";expandedSections={config:!1,preview:!1,settings:!1};isThreadSearchActive=!1;threadSearchQuery="";threadSearchInput;dialog=v(Re);configApi=v(nt);projectStateService=v(me);projectApi=v(de);router=v(le);preferences=v(Ye);threadStateService=v(pe);projects=P(this.projectStateService.projectList$);selectedProject=P(this.projectStateService.selectedProject$);selectedProjectName=P(this.projectStateService.selectedProject$.pipe(G(t=>t?.name)));isProjectVolatile=P(this.projectStateService.selectedProject$.pipe(G(t=>t?.config?.volatile||!1)));forcedProject=P(this.projectStateService.forcedProject$);hasPreviewConfig=P(this.projectStateService.selectedProject$.pipe(G(t=>{let e=t?.config?.preview;return Array.isArray(e)&&!!e.length})),{initialValue:!1});ngOnInit(){let t=window.innerWidth>=1024,e=this.preferences.getPreference("sidenavOpen",t);this.userOpenPreference.set(e??t),this.configApi.getUserConfig().pipe(I(this.destroy$)).subscribe({next:i=>{this.isAdmin=i.groups?.includes("CODAY_ADMIN")??!1,console.log("[SIDENAV] User admin status:",this.isAdmin)},error:i=>{console.error("[SIDENAV] Error loading user config for roles:",i),this.isAdmin=!1}})}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(!1),this.saveSidenavState(!1),this.sidenavStateChange.emit(!1))}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(I(this.destroy$)).subscribe({next:t=>{console.log("[SIDENAV] User config loaded, opening dialog"),this.dialog.open(Pe,{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(I(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(I(this.destroy$)).subscribe({next:e=>{console.log("[SIDENAV] Project config loaded, opening dialog"),this.dialog.open(Pe,{data:{configType:"project",projectName:t,initialContent:JSON.stringify(e,null,2)}}).afterClosed().subscribe(r=>{r&&this.saveProjectConfig(t,r)})},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(I(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()?!0:(console.error(`[SIDENAV] No project selected, cannot ${t}`),this.configErrorMessage="Please select a project first",!1)}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(r=>{this.expandedSections[r]=!1}),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=!0,this.threadSearchQuery="",setTimeout(()=>{this.threadSearchInput?.nativeElement.focus()},0)}closeThreadSearch(){this.isThreadSearchActive=!1,this.threadSearchQuery=""}onThreadSearchInput(){}onThreadSearchModeChange(t){t||this.closeThreadSearch()}static \u0275fac=function(e){return new(e||n)};static \u0275cmp=E({type:n,selectors:[["app-sidenav"]],viewQuery:function(e,i){if(e&1&&te(Jt,5),e&2){let r;ne(r=ie())&&(i.threadSearchInput=r.first)}},inputs:{drawerOpen:"drawerOpen"},outputs:{sidenavStateChange:"sidenavStateChange"},ngContentSelectors:Yt,decls:35,vars:23,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"],["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&&(Ve(),_(0,Zt,6,1),o(1,"mat-sidenav-container",1)(2,"mat-sidenav",2),u("closed",function(){return i.close()}),o(3,"div",3)(4,"button",4),u("click",function(){return i.close()}),o(5,"mat-icon"),l(6,"chevron_left"),a()(),o(7,"img",5),u("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()}),a(),o(8,"div",6)(9,"h2",7),l(10),a()()(),o(11,"div",8)(12,"a",9),u("click",function(s){return i.createNewThread(),s.preventDefault()}),o(13,"mat-icon",10),l(14,"play_circle"),a(),o(15,"span",11),l(16,"Start a new thread"),a()()(),_(17,Kt,6,0,"div",12),o(18,"div",13)(19,"div",14),_(20,en,8,1,"div",15)(21,tn,8,0,"div",16),o(22,"div",17)(23,"app-thread-selector",18),u("searchModeChange",function(s){return i.onThreadSearchModeChange(s)})("threadSelected",function(){return i.onThreadSelectedOnMobile()}),a()()()(),o(24,"div",19)(25,"div",20)(26,"a",21),u("click",function(s){return i.toggleSection("settings"),s.preventDefault()}),_(27,nn,2,0,"mat-icon",22)(28,rn,2,0,"mat-icon",23),o(29,"span",24),l(30,"Control Center"),a()(),_(31,xn,33,12,"div",25),a()()(),o(32,"mat-sidenav-content"),De(33),a()(),_(34,yn,8,1,"div",26)),e&2&&(g(!i.isOpen()&&!i.drawerOpen?0:-1),d(),x("sidenav-open",i.isOpen()),b("hasBackdrop",!1),d(),b("opened",i.isOpen())("disableClose",!0),d(5),ee("src","CODAY-Logo.png",J),d(3),y(i.selectedProjectName()),d(7),g(i.selectedProjectName()?17:-1),d(3),g(i.isThreadSearchActive?20:21),d(3),b("searchMode",i.isThreadSearchActive)("searchQuery",i.threadSearchQuery),d(),x("is-admin",i.isAdmin),d(),x("expanded",i.expandedSections.settings),d(),x("active",i.expandedSections.settings),d(),g(i.expandedSections.settings?27:28),d(4),g(i.expandedSections.settings?31:-1),d(),x("sidenav-closed-offset",!i.isOpen()),d(2),g(i.configErrorMessage?34:-1))},dependencies:[he,_e,ge,ue,tt,Ke,et,Ze,U,B,$,R,Ge,it,ye,fe,Ce],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}"]})};export{ct as a};
3
+ `+(e.summary||""):e.summary||"")("matTooltipDisabled",!e.summary),d(),g(e.subThreads!=null&&e.subThreads.length?1:-1),d(),g(e.name?2:3),d(2),g(i.isSharedThread(e)?4:-1)}}function Tt(n,t){if(n&1){let e=C();o(0,"button",33),u("click",function(r){m(e);let s=c().$implicit,f=c(4);return p(f.startEditingThreadName(r,s))}),o(1,"mat-icon"),l(2,"edit"),a()()}}function Ot(n,t){if(n&1){let e=C();o(0,"button",34),u("click",function(r){m(e);let s=c().$implicit,f=c(4);return p(f.markActive(r,s))}),o(1,"mat-icon"),l(2,"replay"),a()()}}function kt(n,t){if(n&1){let e=C();o(0,"button",35),u("click",function(r){m(e);let s=c().$implicit,f=c(4);return p(f.markDone(r,s))}),o(1,"mat-icon"),l(2,"check_circle_outline"),a()()}}function Et(n,t){n&1&&be(0)}function jt(n,t){if(n&1&&K(0,Et,1,0,"ng-container",11),n&2){let e=c().$implicit;c(3);let i=xe(1);b("ngTemplateOutlet",i)("ngTemplateOutletContext",Ne(2,pt,e.subThreads))}}function Vt(n,t){if(n&1){let e=C();o(0,"div",17),_(1,xt,3,3,"div",18)(2,wt,5,5,"a",19),o(3,"div",20),_(4,Tt,3,0,"button",21),_(5,Ot,3,0,"button",22)(6,kt,3,0,"button",23),o(7,"button",24),u("click",function(r){let s=m(e).$implicit,f=c(4);return p(f.toggleStar(r,s))}),o(8,"mat-icon"),l(9),a()(),o(10,"button",25),u("click",function(r){let s=m(e).$implicit,f=c(4);return p(f.deleteThread(r,s))}),o(11,"mat-icon"),l(12,"delete"),a()()()(),_(13,jt,1,4,"ng-container")}if(n&2){let e,i=t.$implicit,r=c(4);x("current",i.id===((e=r.currentThread())==null?null:e.id)),d(),g(r.editingThreadId===i.id?1:2),d(3),g(r.editingThreadId!==i.id&&i.name?4:-1),d(),g(i.closedByUser?5:6),d(2),x("starred",r.isStarred(i)),b("title",r.isStarred(i)?"Unstar thread":"Star thread"),d(2),y(r.isStarred(i)?"star":"star_outline"),d(4),g(r.isParentExpanded(i.id)&&(i.subThreads!=null&&i.subThreads.length)?13:-1)}}function Dt(n,t){if(n&1&&(o(0,"div",14)(1,"div",16),l(2),a(),L(3,Vt,14,10,null,null,st),a()),n&2){let e=t.$implicit;d(2),y(e.label),d(),z(e.threads)}}function Nt(n,t){n&1&&(o(0,"div",15),l(1,"No existing threads"),a())}function Ft(n,t){if(n&1&&(o(0,"div",15),l(1),a()),n&2){let e=c(3);d(),Y('No threads matching "',e.searchQuery(),'"')}}function It(n,t){if(n&1&&(L(0,Dt,5,1,"div",14,_t),_(2,Nt,2,0,"div",15)(3,Ft,2,1,"div",15)),n&2){let e,i=c(2);z(i.getGroupedThreads()),d(2),g(!((e=i.threads())!=null&&e.length)&&!i.searchQuery()?2:i.searchQuery()&&i.getGroupedThreads().length===0?3:-1)}}function At(n,t){if(n&1&&(K(0,Ct,2,0,"ng-template",null,0,Ie),o(2,"div",3),_(3,vt,4,0,"div",4)(4,It,4,1),a()),n&2){let e=c();d(3),g(e.isLoadingThreadList()?3:4)}}function Lt(n,t){n&1&&(o(0,"span",36),l(1,"No project selected"),a())}function zt(n,t){n&1&&(o(0,"span",36),l(1,"Loading..."),a())}function Rt(n,t){if(n&1&&(o(0,"div",2),_(1,Lt,2,0,"span",36)(2,zt,2,0,"span",36),a()),n&2){let e,i=c();d(),g((e=i.currentProject())!=null&&e.name?2:1)}}var fe=class n{projects=null;searchMode=!1;searchQuery=ce("");searchModeChange=new q;threadSelected=new q;projectStateService=v(me);threadStateService=v(pe);threadApiService=v($e);userService=v(Be);router=v(le);destroyRef=v(Z);currentThread=P(this.threadStateService.selectedThread$);currentProject=P(this.projectStateService.selectedProject$);threads=P(this.threadStateService.threadList$);isLoadingThreadList=P(this.threadStateService.isLoadingThreadList$);username=P(this.userService.username$);isTouchDevice="ontouchstart"in window||navigator.maxTouchPoints>0;editingThreadId=null;editingThreadName="";isRenamingThread=!1;renameErrorMessage="";expandedParents=new Set;constructor(){W(()=>{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 r=t;for(;r;){let s=i.get(r);s&&this.expandedParents.add(s),r=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),r=t.filter(h=>!!h.parentThreadId),s=r.filter(h=>!e.has(h.parentThreadId)),f=r.filter(h=>e.has(h.parentThreadId)),D=new Map;for(let h of f){let S=h.parentThreadId;D.has(S)||D.set(S,[]),D.get(S).push(h)}let X=h=>(D.get(h)||[]).sort((w,O)=>w.modifiedDate>O.modifiedDate?-1:1).map(w=>H(k({},w),{subThreads:X(w.id)})),N=[...i,...s];if(this.searchQuery()&&this.searchQuery().trim()){let h=this.searchQuery().toLowerCase().trim();N=N.filter(S=>S.name.toLowerCase().includes(h)||S.summary&&S.summary.toLowerCase().includes(h))}if(!N.length)return[];let F=this.username();if(!F)return[];let Me=N.map(h=>H(k({},h),{subThreads:X(h.id)})),we=Me.filter(h=>h.starring&&h.starring.includes(F)),lt=Me.filter(h=>!h.starring||!h.starring.includes(F)),Q=new Map,Te=new Date;Te.setHours(0,0,0,0);for(let h of lt){let S=new Date(h.modifiedDate);S.setHours(0,0,0,0);let w=Te.getTime()-S.getTime(),O=Math.floor(w/(1e3*60*60*24)),M;O===0?M="Today":O===1?M="Yesterday":O<7?M="This Week":O<30?M="This Month":O<90?M="Last 3 Months":M="Older",Q.has(M)||Q.set(M,[]),Q.get(M).push(h)}let ve=[];if(we.length>0){let h=[...we].sort((S,w)=>S.modifiedDate>w.modifiedDate?-1:1);ve.push({label:"Starred",threads:h})}return["Today","Yesterday","This Week","This Month","Last 3 Months","Older"].filter(h=>Q.has(h)).forEach(h=>{ve.push({label:h,threads:Q.get(h)})}),ve}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 r=e.starring&&e.starring.includes(i),s=r?this.threadApiService.unstarThread(e.id):this.threadApiService.starThread(e.id);this.threadStateService.updateStarLocal(e.id,!r,i),s.pipe(T(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),r=new Date().getTime()-e.getTime(),s=Math.floor(r/(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=!0,this.renameErrorMessage="",this.threadStateService.renameThread(i,e).subscribe({next:()=>{console.log("[THREAD-SELECTOR] Thread renamed successfully"),this.cancelEditingThreadName(),this.isRenamingThread=!1},error:r=>{console.error("[THREAD-SELECTOR] Error renaming thread:",r),this.renameErrorMessage=r.message||"Failed to rename thread",this.isRenamingThread=!1}})}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=E({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){if(e&1&&(o(0,"div",1),u("click",function(s){return s.stopPropagation()})("keydown",function(s){return s.stopPropagation()}),_(1,At,5,1)(2,Rt,3,1,"div",2),a()),e&2){let r;d(),g((r=i.currentProject())!=null&&r.name?1:2)}},dependencies:[Ae,he,_e,ge,Je,ue,U,B,$,R,Ye,We,Ge,He,Qe,Xe],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}}"]})};var $t=["logsContent"],Bt=(n,t)=>t.name;function Ut(n,t){if(n&1){let e=C();o(0,"button",12),u("click",function(){m(e);let r=c().$implicit,s=c();return p(s.start(r.name))}),o(1,"mat-icon"),l(2,"play_arrow"),a()()}if(n&2){let e=c().$implicit;b("disabled",e.isLoading)}}function Xt(n,t){if(n&1){let e=C();o(0,"button",13),u("click",function(){m(e);let r=c().$implicit,s=c();return p(s.stop(r.name))}),o(1,"mat-icon"),l(2,"stop"),a()()}if(n&2){let e=c().$implicit;b("disabled",e.isLoading)}}function Qt(n,t){if(n&1&&(o(0,"a",8)(1,"mat-icon",14),l(2,"open_in_new"),a()()),n&2){let e=c().$implicit;b("href",e.url,J)("title",e.url)}}function Ht(n,t){if(n&1&&(o(0,"div",15),l(1),a()),n&2){let e=c(),i=e.$implicit,r=e.$index;V("order",r*2),d(),y(i.errorMessage)}}function Gt(n,t){if(n&1){let e=C();o(0,"button",21),u("click",function(){m(e);let r=c(3);return p(r.onManualRefresh())}),o(1,"mat-icon"),l(2,"refresh"),a()()}}function qt(n,t){if(n&1&&(o(0,"div",16)(1,"div",17)(2,"span",18),l(3),a(),_(4,Gt,3,0,"button",19),a(),o(5,"pre",20,0),l(7),a()()),n&2){let e=c(),i=e.$implicit,r=e.$index,s=c();V("order",r*2+1),d(3),Y("",i.name," logs"),d(),g(i.status==="running"?4:-1),d(3),y(s.logs()||"(empty)")}}function Wt(n,t){if(n&1){let e=C();o(0,"div",2)(1,"span",3),l(2),a(),o(3,"div",4),_(4,Ut,3,1,"button",5)(5,Xt,3,1,"button",6),o(6,"span",7),l(7),a(),_(8,Qt,3,2,"a",8),o(9,"button",9),u("click",function(){let r=m(e).$implicit,s=c();return p(s.toggleLogs(r.name))}),o(10,"mat-icon"),l(11),a()()()(),_(12,Ht,2,3,"div",10),_(13,qt,8,5,"div",11)}if(n&2){let e=t.$implicit,i=t.$index,r=c();V("order",i*2),d(2),y(e.name),d(2),g(e.status==="stopped"?4:5),d(2),x("running",e.status==="running"),d(),Y(" ",e.status==="running"?"Running":"Stopped"," "),d(),g(e.url?8:-1),d(),b("title",r.logsOpenFor()===e.name?"Hide logs":"Show logs"),d(2),y(r.logsOpenFor()===e.name?"expand_less":"terminal"),d(),g(e.errorMessage?12:-1),d(),g(r.logsOpenFor()===e.name?13:-1)}}var Ce=class n{destroyRef=v(Z);projectApi=v(de);projectName=ce.required();entryStates=A([]);hasPreview=se(()=>this.entryStates().length>0);logsOpenFor=A(null);logs=A("");logsContent;logsPollTimer=null;logsTimeoutTimer=null;static LOGS_POLL_MS=5e3;static LOGS_TIMEOUT_MS=1200*1e3;constructor(){W(()=>{let t=this.projectName();t&&this.onProjectChanged(t)},{allowSignalWrites:!0}),W(()=>{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(T(this.destroyRef)).subscribe({next:e=>{let i=e.entries;if(i.length===0)return;let r=i.map(f=>({name:f.name,command:f.command,url:f.url,status:"stopped",isLoading:!1,errorMessage:""}));this.entryStates.set(r);let s=i.map(f=>this.projectApi.getPreviewStatus(t,f.name));ke(s).pipe(T(this.destroyRef)).subscribe({next:f=>{this.entryStates.update(D=>D.map((X,N)=>{let F=f[N];return F?H(k({},X),{status:F.status}):X}))},error:()=>{}})},error:()=>{}})}start(t){this.updateEntry(t,{isLoading:!0,errorMessage:""}),this.projectApi.startPreview(this.projectName(),t).pipe(T(this.destroyRef)).subscribe({next:e=>{this.updateEntry(t,{status:e.status,isLoading:!1})},error:e=>{this.updateEntry(t,{errorMessage:e?.error?.error??"Failed to start preview",isLoading:!1})}})}stop(t){this.updateEntry(t,{isLoading:!0,errorMessage:""}),this.projectApi.stopPreview(this.projectName(),t).pipe(T(this.destroyRef)).subscribe({next:()=>{this.updateEntry(t,{status:"stopped",isLoading:!1}),this.logsOpenFor()===t&&this.stopLogPolling()},error:e=>{this.updateEntry(t,{errorMessage:e?.error?.error??"Failed to stop preview",isLoading:!1})}})}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(T(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(r=>r.name===t?k(k({},r),e):r))}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=E({type:n,selectors:[["app-preview-panel"]],viewQuery:function(e,i){if(e&1&&te($t,5),e&2){let r;ne(r=ie())&&(i.logsContent=r.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&&(o(0,"div",1),L(1,Wt,14,12,null,null,Bt),a()),e&2&&(d(),z(i.entryStates()))},dependencies:[$,R,U,B],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}"]})};var Jt=["threadSearchInput"],Yt=["*"];function Zt(n,t){if(n&1){let e=C();o(0,"button",27),u("click",function(){m(e);let r=c();return p(r.toggle())}),o(1,"mat-icon"),l(2,"menu"),a()(),o(3,"button",28),u("click",function(){m(e);let r=c();return p(r.createNewThread())}),o(4,"mat-icon",10),l(5,"play_circle"),a()()}if(n&2){let e=c();d(3),b("disabled",!e.selectedProjectName())}}function Kt(n,t){if(n&1){let e=C();o(0,"div",12)(1,"a",29),u("click",function(r){return m(e),c().openMissionControl(),p(r.preventDefault())}),o(2,"mat-icon"),l(3,"rocket_launch"),a(),o(4,"span",30),l(5,"Task Control"),a()()()}}function en(n,t){if(n&1){let e=C();o(0,"div",15)(1,"mat-icon",31),l(2,"search"),a(),o(3,"input",32,0),ae("ngModelChange",function(r){m(e);let s=c();return oe(s.threadSearchQuery,r)||(s.threadSearchQuery=r),p(r)}),u("input",function(){m(e);let r=c();return p(r.onThreadSearchInput())}),a(),o(5,"button",33),u("click",function(){m(e);let r=c();return p(r.closeThreadSearch())}),o(6,"mat-icon"),l(7,"close"),a()()()}if(n&2){let e=c();d(3),re("ngModel",e.threadSearchQuery)}}function tn(n,t){if(n&1){let e=C();o(0,"div",16)(1,"mat-icon",23),l(2,"forum"),a(),o(3,"span",24),l(4,"Threads"),a(),o(5,"button",34),u("click",function(r){m(e);let s=c();return p(s.toggleThreadSearch(r))}),o(6,"mat-icon"),l(7,"search"),a()()()}}function nn(n,t){n&1&&(o(0,"mat-icon",22),l(1,"keyboard_arrow_up"),a())}function rn(n,t){n&1&&(o(0,"mat-icon",23),l(1,"hub"),a())}function on(n,t){n&1&&(o(0,"mat-icon",22),l(1,"keyboard_arrow_up"),a())}function an(n,t){n&1&&(o(0,"mat-icon",23),l(1,"tune"),a())}function sn(n,t){n&1&&(o(0,"div",36)(1,"div",40),j(2,"app-options-panel",41),a()())}function cn(n,t){if(n&1){let e=C();o(0,"div",35)(1,"a",21),u("click",function(r){return m(e),c(3).openProjectConfig(),r.preventDefault(),p(r.stopPropagation())}),o(2,"mat-icon",23),l(3,"settings_applications"),a(),o(4,"span",24),l(5,"Project Configuration"),a()()()}}function ln(n,t){n&1&&(o(0,"div",35)(1,"a",42)(2,"mat-icon",23),l(3,"settings_applications"),a(),o(4,"span",24),l(5,"Project config (No project)"),a()()())}function dn(n,t){if(n&1&&_(0,cn,6,0,"div",35)(1,ln,6,0,"div",35),n&2){let e=c(2);g(e.selectedProjectName()?0:1)}}function mn(n,t){if(n&1){let e=C();o(0,"div",35)(1,"a",21),u("click",function(r){return m(e),c(2).openAgents(),r.preventDefault(),p(r.stopPropagation())}),o(2,"mat-icon",23),l(3,"smart_toy"),a(),o(4,"span",24),l(5,"Agents"),a()()()}}function pn(n,t){n&1&&(o(0,"div",35)(1,"a",42)(2,"mat-icon",23),l(3,"smart_toy"),a(),o(4,"span",24),l(5,"Agents (No project)"),a()()())}function _n(n,t){if(n&1){let e=C();o(0,"div",35)(1,"a",21),u("click",function(r){return m(e),c(2).openPrompts(),r.preventDefault(),p(r.stopPropagation())}),o(2,"mat-icon",23),l(3,"description"),a(),o(4,"span",24),l(5,"Prompts"),a()()()}}function gn(n,t){n&1&&(o(0,"div",35)(1,"a",42)(2,"mat-icon",23),l(3,"description"),a(),o(4,"span",24),l(5,"Prompts (No project)"),a()()())}function un(n,t){if(n&1){let e=C();o(0,"div",35)(1,"a",21),u("click",function(r){return m(e),c(2).openSchedulers(),r.preventDefault(),p(r.stopPropagation())}),o(2,"mat-icon",23),l(3,"schedule"),a(),o(4,"span",24),l(5,"Schedulers"),a()()()}}function hn(n,t){n&1&&(o(0,"div",35)(1,"a",42)(2,"mat-icon",23),l(3,"schedule"),a(),o(4,"span",24),l(5,"Schedulers (No project)"),a()()())}function fn(n,t){n&1&&(o(0,"mat-icon",22),l(1,"keyboard_arrow_up"),a())}function Cn(n,t){n&1&&(o(0,"mat-icon",23),l(1,"rocket_launch"),a())}function vn(n,t){if(n&1&&(o(0,"div",36),j(1,"app-preview-panel",43),a()),n&2){let e=c(3);d(),b("projectName",e.selectedProjectName())}}function bn(n,t){if(n&1){let e=C();o(0,"div",35)(1,"a",21),u("click",function(r){return m(e),c(2).toggleSection("preview"),r.preventDefault(),p(r.stopPropagation())}),_(2,fn,2,0,"mat-icon",22)(3,Cn,2,0,"mat-icon",23),o(4,"span",24),l(5,"Preview Server"),a()(),_(6,vn,2,1,"div",36),a()}if(n&2){let e=c(2);x("expanded",e.expandedSections.preview),d(),x("active",e.expandedSections.preview),d(),g(e.expandedSections.preview?2:3),d(4),g(e.expandedSections.preview?6:-1)}}function xn(n,t){if(n&1){let e=C();o(0,"div",25)(1,"div",35)(2,"a",21),u("click",function(r){return m(e),c().toggleSection("config"),p(r.preventDefault())}),_(3,on,2,0,"mat-icon",22)(4,an,2,0,"mat-icon",23),o(5,"span",24),l(6,"Preferences"),a()(),_(7,sn,3,0,"div",36),a(),o(8,"div",35)(9,"a",21),u("click",function(r){return m(e),c().openTokenUsage(),r.preventDefault(),p(r.stopPropagation())}),o(10,"mat-icon",23),l(11,"data_usage"),a(),o(12,"span",24),l(13,"Token Usage"),a()()(),o(14,"div",35)(15,"a",21),u("click",function(r){return m(e),c().openUserConfig(),r.preventDefault(),p(r.stopPropagation())}),o(16,"mat-icon",23),l(17,"manage_accounts"),a(),o(18,"span",24),l(19,"User Configuration"),a()()(),_(20,dn,2,1),_(21,mn,6,0,"div",35)(22,pn,6,0,"div",35),_(23,_n,6,0,"div",35)(24,gn,6,0,"div",35),_(25,un,6,0,"div",35)(26,hn,6,0,"div",35),_(27,bn,7,6,"div",37),o(28,"div",35)(29,"a",38),j(30,"img",39),o(31,"span",24),l(32,"Contribute on GitHub"),a()()()()}if(n&2){let e=c();d(),x("expanded",e.expandedSections.config),d(),x("active",e.expandedSections.config),d(),g(e.expandedSections.config?3:4),d(4),g(e.expandedSections.config?7:-1),d(13),g(e.isAdmin?20:-1),d(),g(e.selectedProjectName()?21:22),d(2),g(e.selectedProjectName()?23:24),d(2),g(e.selectedProjectName()?25:26),d(2),g(e.hasPreviewConfig()?27:-1),d(3),ee("src","CODAY-Logo.png",J)}}function yn(n,t){if(n&1){let e=C();o(0,"div",26)(1,"mat-icon",44),l(2,"warning"),a(),o(3,"span",45),l(4),a(),o(5,"button",46),u("click",function(){m(e);let r=c();return p(r.configErrorMessage="")}),o(6,"mat-icon"),l(7,"close"),a()()()}if(n&2){let e=c();d(4),y(e.configErrorMessage)}}var ct=class n{destroy$=new Oe;sidenavStateChange=new q;drawerOpen=!1;breakpointObserver=v(Le);isDesktop=P(this.breakpointObserver.observe("(min-width: 1400px)").pipe(G(t=>t.matches)),{initialValue:!1});userOpenPreference=A(!0);isOpen=se(()=>this.userOpenPreference());isAdmin=!1;configErrorMessage="";expandedSections={config:!1,preview:!1,settings:!1};isThreadSearchActive=!1;threadSearchQuery="";threadSearchInput;dialog=v(Re);configApi=v(nt);projectStateService=v(me);projectApi=v(de);router=v(le);preferences=v(Ue);threadStateService=v(pe);projects=P(this.projectStateService.projectList$);selectedProject=P(this.projectStateService.selectedProject$);selectedProjectName=P(this.projectStateService.selectedProject$.pipe(G(t=>t?.name)));isProjectVolatile=P(this.projectStateService.selectedProject$.pipe(G(t=>t?.config?.volatile||!1)));forcedProject=P(this.projectStateService.forcedProject$);hasPreviewConfig=P(this.projectStateService.selectedProject$.pipe(G(t=>{let e=t?.config?.preview;return Array.isArray(e)&&!!e.length})),{initialValue:!1});ngOnInit(){let t=window.innerWidth>=1024,e=this.preferences.getPreference("sidenavOpen",t);this.userOpenPreference.set(e??t),this.configApi.getUserConfig().pipe(I(this.destroy$)).subscribe({next:i=>{this.isAdmin=i.groups?.includes("CODAY_ADMIN")??!1,console.log("[SIDENAV] User admin status:",this.isAdmin)},error:i=>{console.error("[SIDENAV] Error loading user config for roles:",i),this.isAdmin=!1}})}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(!1),this.saveSidenavState(!1),this.sidenavStateChange.emit(!1))}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(I(this.destroy$)).subscribe({next:t=>{console.log("[SIDENAV] User config loaded, opening dialog"),this.dialog.open(Pe,{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(I(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(I(this.destroy$)).subscribe({next:e=>{console.log("[SIDENAV] Project config loaded, opening dialog"),this.dialog.open(Pe,{data:{configType:"project",projectName:t,initialContent:JSON.stringify(e,null,2)}}).afterClosed().subscribe(r=>{r&&this.saveProjectConfig(t,r)})},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(I(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()?!0:(console.error(`[SIDENAV] No project selected, cannot ${t}`),this.configErrorMessage="Please select a project first",!1)}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(r=>{this.expandedSections[r]=!1}),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=!0,this.threadSearchQuery="",setTimeout(()=>{this.threadSearchInput?.nativeElement.focus()},0)}closeThreadSearch(){this.isThreadSearchActive=!1,this.threadSearchQuery=""}onThreadSearchInput(){}onThreadSearchModeChange(t){t||this.closeThreadSearch()}static \u0275fac=function(e){return new(e||n)};static \u0275cmp=E({type:n,selectors:[["app-sidenav"]],viewQuery:function(e,i){if(e&1&&te(Jt,5),e&2){let r;ne(r=ie())&&(i.threadSearchInput=r.first)}},inputs:{drawerOpen:"drawerOpen"},outputs:{sidenavStateChange:"sidenavStateChange"},ngContentSelectors:Yt,decls:35,vars:23,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"],["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&&(Ve(),_(0,Zt,6,1),o(1,"mat-sidenav-container",1)(2,"mat-sidenav",2),u("closed",function(){return i.close()}),o(3,"div",3)(4,"button",4),u("click",function(){return i.close()}),o(5,"mat-icon"),l(6,"chevron_left"),a()(),o(7,"img",5),u("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()}),a(),o(8,"div",6)(9,"h2",7),l(10),a()()(),o(11,"div",8)(12,"a",9),u("click",function(s){return i.createNewThread(),s.preventDefault()}),o(13,"mat-icon",10),l(14,"play_circle"),a(),o(15,"span",11),l(16,"Start a new thread"),a()()(),_(17,Kt,6,0,"div",12),o(18,"div",13)(19,"div",14),_(20,en,8,1,"div",15)(21,tn,8,0,"div",16),o(22,"div",17)(23,"app-thread-selector",18),u("searchModeChange",function(s){return i.onThreadSearchModeChange(s)})("threadSelected",function(){return i.onThreadSelectedOnMobile()}),a()()()(),o(24,"div",19)(25,"div",20)(26,"a",21),u("click",function(s){return i.toggleSection("settings"),s.preventDefault()}),_(27,nn,2,0,"mat-icon",22)(28,rn,2,0,"mat-icon",23),o(29,"span",24),l(30,"Control Center"),a()(),_(31,xn,33,12,"div",25),a()()(),o(32,"mat-sidenav-content"),De(33),a()(),_(34,yn,8,1,"div",26)),e&2&&(g(!i.isOpen()&&!i.drawerOpen?0:-1),d(),x("sidenav-open",i.isOpen()),b("hasBackdrop",!1),d(),b("opened",i.isOpen())("disableClose",!0),d(5),ee("src","CODAY-Logo.png",J),d(3),y(i.selectedProjectName()),d(7),g(i.selectedProjectName()?17:-1),d(3),g(i.isThreadSearchActive?20:21),d(3),b("searchMode",i.isThreadSearchActive)("searchQuery",i.threadSearchQuery),d(),x("is-admin",i.isAdmin),d(),x("expanded",i.expandedSections.settings),d(),x("active",i.expandedSections.settings),d(),g(i.expandedSections.settings?27:28),d(4),g(i.expandedSections.settings?31:-1),d(),x("sidenav-closed-offset",!i.isOpen()),d(2),g(i.configErrorMessage?34:-1))},dependencies:[he,_e,ge,ue,tt,Ke,et,Ze,U,B,$,R,qe,it,ye,fe,Ce],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}"]})};export{ct as a};
@@ -1 +1 @@
1
- import{a as j}from"./chunk-AIC4U2MU.js";import{a as W}from"./chunk-3IVR2HN6.js";import{a as U}from"./chunk-26U7XARR.js";import"./chunk-T3IUNA6F.js";import"./chunk-UF5SWABD.js";import"./chunk-EBPDINXG.js";import{b as K,d as G}from"./chunk-4GVABYH4.js";import{p as I,u as z,v as F}from"./chunk-VDRETD5H.js";import"./chunk-BUA6GPP7.js";import{a as C}from"./chunk-V363EHJE.js";import"./chunk-Z7E7NSDY.js";import"./chunk-ZEMOOOQR.js";import"./chunk-HZF57OLY.js";import"./chunk-EF2BOSEH.js";import{Bb as f,Db as p,Fb as s,Hc as B,Ka as d,Pb as k,S as O,Tb as m,Ub as b,Vb as N,Wa as P,ab as E,ac as T,ca as u,dc as V,ec as L,ga as l,ha as c,hc as $,jb as q,kc as R,lb as v,m as M,ma as D,mb as g,nc as A,oc as x,rb as y,sb as r,t as S,ta as h,tb as a}from"./chunk-B4RKRLIY.js";function Z(n,t){if(n&1&&(r(0,"span",6),m(1),a()),n&2){let e=s();d(),b(e.config().baseUrl)}}function ee(n,t){if(n&1){let e=f();r(0,"span",8),m(1,"Delete?"),a(),r(2,"ds-icon-button",9),p("action",function(){l(e);let o=s();return c(o.onDeleteConfirmed())}),a(),r(3,"ds-icon-button",10),p("action",function(){l(e);let o=s();return c(o.onDeleteCancelled())}),a()}}function te(n,t){if(n&1){let e=f();r(0,"ds-kebab-menu",13),p("itemSelected",function(o){l(e);let _=s(2);return c(_.onMenuAction(o))}),a()}if(n&2){let e=s(2);y("items",e.menuItems())}}function ie(n,t){if(n&1){let e=f();r(0,"ds-icon-button",11),p("action",function(){l(e);let o=s();return c(o.onDuplicate())}),a(),v(1,te,1,1,"ds-kebab-menu",12)}if(n&2){let e=s();d(),g(e.readOnly()?-1:1)}}var ne=Object.freeze({namespace:{label:"NS",ariaLabel:"Configuration partag\xE9e du namespace",variant:"neutral"},userOnNs:{label:"USER \xD7 NS",ariaLabel:"Configuration utilisateur sur ce namespace",variant:"info"},userGlobal:{label:"USER GLOBAL",ariaLabel:"Configuration utilisateur globale",variant:"warning"}}),w=class n{config=x.required();scope=x.required();readOnly=x(!1);editRequested=A();deleteRequested=A();duplicateRequested=A();pendingDelete=h(!1);badge=R(()=>ne[this.scope()]);menuItems=R(()=>[{key:"edit",label:"Edit provider",icon:"edit"},{key:"delete",label:"Delete provider",icon:"delete",variant:"danger"}]);onMenuAction(t){switch(t){case"edit":this.editRequested.emit(this.config());break;case"delete":this.pendingDelete.set(!0);break}}onDuplicate(){this.duplicateRequested.emit(this.config())}onDeleteConfirmed(){this.pendingDelete.set(!1),this.deleteRequested.emit(this.config())}onDeleteCancelled(){this.pendingDelete.set(!1)}static \u0275fac=function(e){return new(e||n)};static \u0275cmp=P({type:n,selectors:[["agentos-ai-provider-item"]],inputs:{config:[1,"config"],scope:[1,"scope"],readOnly:[1,"readOnly"]},outputs:{editRequested:"editRequested",deleteRequested:"deleteRequested",duplicateRequested:"duplicateRequested"},decls:13,vars:7,consts:[["role","listitem",1,"ai-provider-item"],[1,"ai-provider-item__body"],[1,"ai-provider-item__heading"],[1,"ai-provider-item__name"],[1,"ai-provider-item__badge"],[1,"ai-provider-item__type"],[1,"ai-provider-item__url"],[1,"ai-provider-item__actions"],[1,"ai-provider-item__confirm-label"],["icon","check","variant","danger","title","Confirm deletion",3,"action"],["icon","close","title","Cancel deletion",3,"action"],["icon","content_copy","title","Duplicate this provider",3,"action"],[3,"items"],[3,"itemSelected","items"]],template:function(e,i){e&1&&(r(0,"div",0)(1,"div",1)(2,"div",2)(3,"span",3),m(4),a(),r(5,"span",4),m(6),a()(),r(7,"span",5),m(8),a(),v(9,Z,2,1,"span",6),a(),r(10,"div",7),v(11,ee,4,0)(12,ie,2,1),a()()),e&2&&(d(4),b(i.config().name),d(),q("data-variant",i.badge().variant)("aria-label",i.badge().ariaLabel),d(),N(" ",i.badge().label," "),d(2),b(i.config().apiType),d(),g(i.config().baseUrl?9:-1),d(2),g(i.pendingDelete()?11:12))},dependencies:[F,I],styles:[".ai-provider-item[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem;padding:.75rem 1rem;border-radius:10px;border:1px solid var(--color-border);background:var(--glass-bg);-webkit-backdrop-filter:var(--glass-backdrop-blur);backdrop-filter:var(--glass-backdrop-blur);transition:background .15s ease,border-color .15s ease}.ai-provider-item[_ngcontent-%COMP%]:hover{background:var(--color-bg-hover);border-color:var(--color-primary)}.ai-provider-item__body[_ngcontent-%COMP%]{flex:1;display:flex;flex-direction:column;gap:.2rem;min-width:0}.ai-provider-item__heading[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem;min-width:0}.ai-provider-item__name[_ngcontent-%COMP%]{font-size:.95rem;font-weight:500;color:var(--color-text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}.ai-provider-item__badge[_ngcontent-%COMP%]{flex-shrink:0;font-size:.65rem;font-weight:600;letter-spacing:.04em;text-transform:uppercase;padding:.1rem .4rem;border-radius:4px;line-height:1.2}.ai-provider-item__badge[data-variant=neutral][_ngcontent-%COMP%]{background:var(--color-bg-secondary);color:var(--color-text-secondary)}.ai-provider-item__badge[data-variant=info][_ngcontent-%COMP%]{background:color-mix(in srgb,var(--color-info) 15%,transparent);color:var(--color-info)}.ai-provider-item__badge[data-variant=warning][_ngcontent-%COMP%]{background:color-mix(in srgb,var(--color-warning) 15%,transparent);color:var(--color-warning)}.ai-provider-item__type[_ngcontent-%COMP%]{font-size:.78rem;color:var(--color-text-secondary);font-family:monospace;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ai-provider-item__url[_ngcontent-%COMP%]{font-size:.75rem;color:var(--color-text-secondary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ai-provider-item__actions[_ngcontent-%COMP%]{flex-shrink:0;display:flex;align-items:center;gap:.125rem;opacity:0;transition:opacity .15s ease}.ai-provider-item[_ngcontent-%COMP%]:hover .ai-provider-item__actions[_ngcontent-%COMP%], .ai-provider-item[_ngcontent-%COMP%]:focus-within .ai-provider-item__actions[_ngcontent-%COMP%]{opacity:1}.ai-provider-item__confirm-label[_ngcontent-%COMP%]{font-size:.8rem;font-weight:500;color:var(--color-error);margin-right:.25rem;white-space:nowrap}"],changeDetection:0})};var oe=()=>[];function re(n,t){if(n&1&&(r(0,"p",3),m(1),a()),n&2){let e=s().$implicit;d(),b(e.name)}}function ae(n,t){if(n&1){let e=f();r(0,"agentos-ai-provider-item",5),p("editRequested",function(){let o=l(e),_=s(2);return c(_.onEdit(o))})("deleteRequested",function(){let o=l(e),_=s(2);return c(_.onDelete(o))})("duplicateRequested",function(){let o=l(e),_=s(2);return c(_.onDuplicate(o))}),a()}if(n&2){let e=t,i=s(2);y("config",e.config)("scope",e.scope)("readOnly",e.scope==="namespace"&&!i.isAdmin())}}function se(n,t){if(n&1&&v(0,re,2,1,"p",3)(1,ae,1,3,"agentos-ai-provider-item",4),n&2){let e,i=t.$implicit,o=s();g(o.isEmptyPlaceholder(i.id)?0:(e=o.resolve(i.id))?1:-1,e)}}var X=Object.freeze({namespace:"AI Providers du namespace",userOnNs:"Mes overrides sur ce namespace",userGlobal:"Mes overrides globaux"}),Y="__empty__",H=class n{route=u(K);router=u(G);destroyRef=u(D);state=u(W);namespaceRole=u(U);namespaceId=this.route.snapshot.params.namespaceId;isAdmin=h(!1);listItems$=this.state.vm$.pipe(S(t=>this.toListItems(t)));resolved=new Map;ngOnInit(){this.route.paramMap.pipe(C(this.destroyRef)).subscribe(t=>{let e=t.get("namespaceId")??"";e&&e!==this.namespaceId&&(this.namespaceId=e),this.state.setNamespace(e)}),this.route.paramMap.pipe(S(t=>t.get("namespaceId")??""),O(t=>t?this.namespaceRole.isAdminOfNamespace$(t):M(!1)),C(this.destroyRef)).subscribe(t=>this.isAdmin.set(t)),this.state.vm$.pipe(C(this.destroyRef)).subscribe(t=>{let e=new Map;t.namespace.forEach(i=>{i.id&&e.set(this.itemKey("namespace",i.id),{config:i,scope:"namespace"})}),t.userOnNs.forEach(i=>{i.id&&e.set(this.itemKey("userOnNs",i.id),{config:i,scope:"userOnNs"})}),t.userGlobal.forEach(i=>{i.id&&e.set(this.itemKey("userGlobal",i.id),{config:i,scope:"userGlobal"})}),this.resolved=e})}isEmptyPlaceholder(t){return t.startsWith(Y)}resolve(t){return this.resolved.get(t)??null}itemKey(t,e){return`${t}:${e}`}goBack(){this.router.navigate(["/agentos","namespaces"])}openCreateForm(){this.router.navigate(["/agentos",this.namespaceId,"ai-providers","new"],{queryParams:{scope:j(this.isAdmin())}})}onEdit(t){let e=t.config.id;e&&this.router.navigate(["/agentos",this.namespaceId,"ai-providers",e,"edit"],{queryParams:{scope:t.scope}})}onDelete(t){let e=t.config.id;e&&this.state.delete(e,t.scope).pipe(C(this.destroyRef)).subscribe({error:i=>{console.error(`[AiProvidersAllScopes] Delete failed for ${t.scope}:${e}:`,i)}})}onDuplicate(t){if(!t.config.id)return;let e=t.scope==="namespace"&&!this.isAdmin()?"userOnNs":t.scope;this.router.navigate(["/agentos",this.namespaceId,"ai-providers","new"],{queryParams:{scope:e,template:t.config.id,templateScope:t.scope}})}toListItems(t){let e=[];return e.push(...this.sectionItems("namespace",t.namespace)),e.push(...this.sectionItems("userOnNs",t.userOnNs)),e.push(...this.sectionItems("userGlobal",t.userGlobal)),e}sectionItems(t,e){return e.length===0?[{id:`${Y}${t}`,name:"Aucun AI Provider",groupKey:t,groupLabel:X[t]}]:e.filter(i=>!!i.id).map(i=>({id:this.itemKey(t,i.id),name:i.name,description:i.apiType,groupKey:t,groupLabel:X[t]}))}static \u0275fac=function(e){return new(e||n)};static \u0275cmp=P({type:n,selectors:[["agentos-ai-providers-all-scopes"]],decls:5,vars:6,consts:[["aiProviderItemTpl",""],["title","AI Providers","emptyMessage","No AI providers available.","cardMinWidth","400px",3,"createRequested","items","showCreate","itemTemplate"],["toolbar-start","","icon","arrow_back","title","Back",3,"action"],[1,"ai-providers-all-scopes__empty"],[3,"config","scope","readOnly"],[3,"editRequested","deleteRequested","duplicateRequested","config","scope","readOnly"]],template:function(e,i){if(e&1&&(r(0,"ds-entity-list",1),V(1,"async"),p("createRequested",function(){return i.openCreateForm()}),r(2,"ds-icon-button",2),p("action",function(){return i.goBack()}),a()(),E(3,se,2,1,"ng-template",null,0,$)),e&2){let o=k(4);y("items",L(1,3,i.listItems$)??T(5,oe))("showCreate",!0)("itemTemplate",o)}},dependencies:[z,w,I,B],styles:[".ai-providers-all-scopes__empty[_ngcontent-%COMP%]{font-size:.85rem;color:var(--color-text-secondary);padding:.5rem .25rem;margin:0;font-style:italic}"],changeDetection:0})};export{H as AiProvidersAllScopesComponent};
1
+ import{a as j}from"./chunk-AIC4U2MU.js";import{a as W}from"./chunk-3IVR2HN6.js";import{a as U}from"./chunk-26U7XARR.js";import"./chunk-T3IUNA6F.js";import"./chunk-UF5SWABD.js";import"./chunk-EBPDINXG.js";import{b as K,d as G}from"./chunk-4GVABYH4.js";import{p as I,u as z,v as F}from"./chunk-WV7ML4CJ.js";import"./chunk-BUA6GPP7.js";import"./chunk-Z7E7NSDY.js";import{a as C}from"./chunk-V363EHJE.js";import"./chunk-ZEMOOOQR.js";import"./chunk-HZF57OLY.js";import"./chunk-EF2BOSEH.js";import{Bb as f,Db as p,Fb as s,Hc as B,Ka as d,Pb as k,S as O,Tb as m,Ub as b,Vb as N,Wa as P,ab as E,ac as T,ca as u,dc as V,ec as L,ga as l,ha as c,hc as $,jb as q,kc as R,lb as v,m as M,ma as D,mb as g,nc as A,oc as x,rb as y,sb as r,t as S,ta as h,tb as a}from"./chunk-B4RKRLIY.js";function Z(n,t){if(n&1&&(r(0,"span",6),m(1),a()),n&2){let e=s();d(),b(e.config().baseUrl)}}function ee(n,t){if(n&1){let e=f();r(0,"span",8),m(1,"Delete?"),a(),r(2,"ds-icon-button",9),p("action",function(){l(e);let o=s();return c(o.onDeleteConfirmed())}),a(),r(3,"ds-icon-button",10),p("action",function(){l(e);let o=s();return c(o.onDeleteCancelled())}),a()}}function te(n,t){if(n&1){let e=f();r(0,"ds-kebab-menu",13),p("itemSelected",function(o){l(e);let _=s(2);return c(_.onMenuAction(o))}),a()}if(n&2){let e=s(2);y("items",e.menuItems())}}function ie(n,t){if(n&1){let e=f();r(0,"ds-icon-button",11),p("action",function(){l(e);let o=s();return c(o.onDuplicate())}),a(),v(1,te,1,1,"ds-kebab-menu",12)}if(n&2){let e=s();d(),g(e.readOnly()?-1:1)}}var ne=Object.freeze({namespace:{label:"NS",ariaLabel:"Configuration partag\xE9e du namespace",variant:"neutral"},userOnNs:{label:"USER \xD7 NS",ariaLabel:"Configuration utilisateur sur ce namespace",variant:"info"},userGlobal:{label:"USER GLOBAL",ariaLabel:"Configuration utilisateur globale",variant:"warning"}}),w=class n{config=x.required();scope=x.required();readOnly=x(!1);editRequested=A();deleteRequested=A();duplicateRequested=A();pendingDelete=h(!1);badge=R(()=>ne[this.scope()]);menuItems=R(()=>[{key:"edit",label:"Edit provider",icon:"edit"},{key:"delete",label:"Delete provider",icon:"delete",variant:"danger"}]);onMenuAction(t){switch(t){case"edit":this.editRequested.emit(this.config());break;case"delete":this.pendingDelete.set(!0);break}}onDuplicate(){this.duplicateRequested.emit(this.config())}onDeleteConfirmed(){this.pendingDelete.set(!1),this.deleteRequested.emit(this.config())}onDeleteCancelled(){this.pendingDelete.set(!1)}static \u0275fac=function(e){return new(e||n)};static \u0275cmp=P({type:n,selectors:[["agentos-ai-provider-item"]],inputs:{config:[1,"config"],scope:[1,"scope"],readOnly:[1,"readOnly"]},outputs:{editRequested:"editRequested",deleteRequested:"deleteRequested",duplicateRequested:"duplicateRequested"},decls:13,vars:7,consts:[["role","listitem",1,"ai-provider-item"],[1,"ai-provider-item__body"],[1,"ai-provider-item__heading"],[1,"ai-provider-item__name"],[1,"ai-provider-item__badge"],[1,"ai-provider-item__type"],[1,"ai-provider-item__url"],[1,"ai-provider-item__actions"],[1,"ai-provider-item__confirm-label"],["icon","check","variant","danger","title","Confirm deletion",3,"action"],["icon","close","title","Cancel deletion",3,"action"],["icon","content_copy","title","Duplicate this provider",3,"action"],[3,"items"],[3,"itemSelected","items"]],template:function(e,i){e&1&&(r(0,"div",0)(1,"div",1)(2,"div",2)(3,"span",3),m(4),a(),r(5,"span",4),m(6),a()(),r(7,"span",5),m(8),a(),v(9,Z,2,1,"span",6),a(),r(10,"div",7),v(11,ee,4,0)(12,ie,2,1),a()()),e&2&&(d(4),b(i.config().name),d(),q("data-variant",i.badge().variant)("aria-label",i.badge().ariaLabel),d(),N(" ",i.badge().label," "),d(2),b(i.config().apiType),d(),g(i.config().baseUrl?9:-1),d(2),g(i.pendingDelete()?11:12))},dependencies:[F,I],styles:[".ai-provider-item[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem;padding:.75rem 1rem;border-radius:10px;border:1px solid var(--color-border);background:var(--glass-bg);-webkit-backdrop-filter:var(--glass-backdrop-blur);backdrop-filter:var(--glass-backdrop-blur);transition:background .15s ease,border-color .15s ease}.ai-provider-item[_ngcontent-%COMP%]:hover{background:var(--color-bg-hover);border-color:var(--color-primary)}.ai-provider-item__body[_ngcontent-%COMP%]{flex:1;display:flex;flex-direction:column;gap:.2rem;min-width:0}.ai-provider-item__heading[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem;min-width:0}.ai-provider-item__name[_ngcontent-%COMP%]{font-size:.95rem;font-weight:500;color:var(--color-text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}.ai-provider-item__badge[_ngcontent-%COMP%]{flex-shrink:0;font-size:.65rem;font-weight:600;letter-spacing:.04em;text-transform:uppercase;padding:.1rem .4rem;border-radius:4px;line-height:1.2}.ai-provider-item__badge[data-variant=neutral][_ngcontent-%COMP%]{background:var(--color-bg-secondary);color:var(--color-text-secondary)}.ai-provider-item__badge[data-variant=info][_ngcontent-%COMP%]{background:color-mix(in srgb,var(--color-info) 15%,transparent);color:var(--color-info)}.ai-provider-item__badge[data-variant=warning][_ngcontent-%COMP%]{background:color-mix(in srgb,var(--color-warning) 15%,transparent);color:var(--color-warning)}.ai-provider-item__type[_ngcontent-%COMP%]{font-size:.78rem;color:var(--color-text-secondary);font-family:monospace;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ai-provider-item__url[_ngcontent-%COMP%]{font-size:.75rem;color:var(--color-text-secondary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ai-provider-item__actions[_ngcontent-%COMP%]{flex-shrink:0;display:flex;align-items:center;gap:.125rem;opacity:0;transition:opacity .15s ease}.ai-provider-item[_ngcontent-%COMP%]:hover .ai-provider-item__actions[_ngcontent-%COMP%], .ai-provider-item[_ngcontent-%COMP%]:focus-within .ai-provider-item__actions[_ngcontent-%COMP%]{opacity:1}.ai-provider-item__confirm-label[_ngcontent-%COMP%]{font-size:.8rem;font-weight:500;color:var(--color-error);margin-right:.25rem;white-space:nowrap}"],changeDetection:0})};var oe=()=>[];function re(n,t){if(n&1&&(r(0,"p",3),m(1),a()),n&2){let e=s().$implicit;d(),b(e.name)}}function ae(n,t){if(n&1){let e=f();r(0,"agentos-ai-provider-item",5),p("editRequested",function(){let o=l(e),_=s(2);return c(_.onEdit(o))})("deleteRequested",function(){let o=l(e),_=s(2);return c(_.onDelete(o))})("duplicateRequested",function(){let o=l(e),_=s(2);return c(_.onDuplicate(o))}),a()}if(n&2){let e=t,i=s(2);y("config",e.config)("scope",e.scope)("readOnly",e.scope==="namespace"&&!i.isAdmin())}}function se(n,t){if(n&1&&v(0,re,2,1,"p",3)(1,ae,1,3,"agentos-ai-provider-item",4),n&2){let e,i=t.$implicit,o=s();g(o.isEmptyPlaceholder(i.id)?0:(e=o.resolve(i.id))?1:-1,e)}}var X=Object.freeze({namespace:"AI Providers du namespace",userOnNs:"Mes overrides sur ce namespace",userGlobal:"Mes overrides globaux"}),Y="__empty__",H=class n{route=u(K);router=u(G);destroyRef=u(D);state=u(W);namespaceRole=u(U);namespaceId=this.route.snapshot.params.namespaceId;isAdmin=h(!1);listItems$=this.state.vm$.pipe(S(t=>this.toListItems(t)));resolved=new Map;ngOnInit(){this.route.paramMap.pipe(C(this.destroyRef)).subscribe(t=>{let e=t.get("namespaceId")??"";e&&e!==this.namespaceId&&(this.namespaceId=e),this.state.setNamespace(e)}),this.route.paramMap.pipe(S(t=>t.get("namespaceId")??""),O(t=>t?this.namespaceRole.isAdminOfNamespace$(t):M(!1)),C(this.destroyRef)).subscribe(t=>this.isAdmin.set(t)),this.state.vm$.pipe(C(this.destroyRef)).subscribe(t=>{let e=new Map;t.namespace.forEach(i=>{i.id&&e.set(this.itemKey("namespace",i.id),{config:i,scope:"namespace"})}),t.userOnNs.forEach(i=>{i.id&&e.set(this.itemKey("userOnNs",i.id),{config:i,scope:"userOnNs"})}),t.userGlobal.forEach(i=>{i.id&&e.set(this.itemKey("userGlobal",i.id),{config:i,scope:"userGlobal"})}),this.resolved=e})}isEmptyPlaceholder(t){return t.startsWith(Y)}resolve(t){return this.resolved.get(t)??null}itemKey(t,e){return`${t}:${e}`}goBack(){this.router.navigate(["/agentos","namespaces"])}openCreateForm(){this.router.navigate(["/agentos",this.namespaceId,"ai-providers","new"],{queryParams:{scope:j(this.isAdmin())}})}onEdit(t){let e=t.config.id;e&&this.router.navigate(["/agentos",this.namespaceId,"ai-providers",e,"edit"],{queryParams:{scope:t.scope}})}onDelete(t){let e=t.config.id;e&&this.state.delete(e,t.scope).pipe(C(this.destroyRef)).subscribe({error:i=>{console.error(`[AiProvidersAllScopes] Delete failed for ${t.scope}:${e}:`,i)}})}onDuplicate(t){if(!t.config.id)return;let e=t.scope==="namespace"&&!this.isAdmin()?"userOnNs":t.scope;this.router.navigate(["/agentos",this.namespaceId,"ai-providers","new"],{queryParams:{scope:e,template:t.config.id,templateScope:t.scope}})}toListItems(t){let e=[];return e.push(...this.sectionItems("namespace",t.namespace)),e.push(...this.sectionItems("userOnNs",t.userOnNs)),e.push(...this.sectionItems("userGlobal",t.userGlobal)),e}sectionItems(t,e){return e.length===0?[{id:`${Y}${t}`,name:"Aucun AI Provider",groupKey:t,groupLabel:X[t]}]:e.filter(i=>!!i.id).map(i=>({id:this.itemKey(t,i.id),name:i.name,description:i.apiType,groupKey:t,groupLabel:X[t]}))}static \u0275fac=function(e){return new(e||n)};static \u0275cmp=P({type:n,selectors:[["agentos-ai-providers-all-scopes"]],decls:5,vars:6,consts:[["aiProviderItemTpl",""],["title","AI Providers","emptyMessage","No AI providers available.","cardMinWidth","400px",3,"createRequested","items","showCreate","itemTemplate"],["toolbar-start","","icon","arrow_back","title","Back",3,"action"],[1,"ai-providers-all-scopes__empty"],[3,"config","scope","readOnly"],[3,"editRequested","deleteRequested","duplicateRequested","config","scope","readOnly"]],template:function(e,i){if(e&1&&(r(0,"ds-entity-list",1),V(1,"async"),p("createRequested",function(){return i.openCreateForm()}),r(2,"ds-icon-button",2),p("action",function(){return i.goBack()}),a()(),E(3,se,2,1,"ng-template",null,0,$)),e&2){let o=k(4);y("items",L(1,3,i.listItems$)??T(5,oe))("showCreate",!0)("itemTemplate",o)}},dependencies:[z,w,I,B],styles:[".ai-providers-all-scopes__empty[_ngcontent-%COMP%]{font-size:.85rem;color:var(--color-text-secondary);padding:.5rem .25rem;margin:0;font-style:italic}"],changeDetection:0})};export{H as AiProvidersAllScopesComponent};
@@ -0,0 +1 @@
1
+ import{c as i}from"./chunk-QPBFAKWK.js";import{c as s}from"./chunk-4GVABYH4.js";import{Wa as o,ca as t,ub as r}from"./chunk-B4RKRLIY.js";var l=class n{constructor(){t(i)}static \u0275fac=function(e){return new(e||n)};static \u0275cmp=o({type:n,selectors:[["agentos-shell"]],decls:1,vars:0,template:function(e,c){e&1&&r(0,"router-outlet")},dependencies:[s],styles:[".shell-loader[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:100vh;gap:1rem;color:var(--color-text-secondary, #6e6e73);font-size:.9rem}.shell-loader[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:0}.spinner[_ngcontent-%COMP%]{width:32px;height:32px;border:3px solid var(--color-border, rgba(0, 0, 0, .1));border-top-color:var(--color-primary, #007aff);border-radius:50%;animation:_ngcontent-%COMP%_spin .8s linear infinite}@keyframes _ngcontent-%COMP%_spin{to{transform:rotate(360deg)}}"]})};export{l as a};