@whoz-oss/coday-client 0.125.2 → 0.125.3

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 (33) hide show
  1. package/browser/{chunk-YZSDQIEK.js → chunk-23SYUINW.js} +4 -4
  2. package/browser/chunk-63U732OW.js +2 -0
  3. package/browser/{chunk-LI36MCDZ.js → chunk-CH66E3U2.js} +1 -1
  4. package/browser/{chunk-OWYVTOTW.js → chunk-CYLHTE22.js} +1 -1
  5. package/browser/{chunk-CP2BIFCA.js → chunk-ECBXPEAC.js} +1 -1
  6. package/browser/{chunk-MSXCVNKO.js → chunk-G2OAJDIX.js} +1 -1
  7. package/browser/{chunk-I7DZEVJV.js → chunk-H5SXHH6A.js} +1 -1
  8. package/browser/{chunk-2GTCISR4.js → chunk-H76RJSSA.js} +1 -1
  9. package/browser/{chunk-S66NFQG3.js → chunk-H7YMYOPC.js} +1 -1
  10. package/browser/{chunk-EAGBL5PQ.js → chunk-K3XBOMJY.js} +1 -1
  11. package/browser/{chunk-VXZ7ZIMM.js → chunk-KC2EKCAS.js} +1 -1
  12. package/browser/chunk-KUVTFZWT.js +1 -0
  13. package/browser/{chunk-7QZZJ3DG.js → chunk-LPN5AG4A.js} +1 -1
  14. package/browser/{chunk-PKW64TFV.js → chunk-LR7LOR4R.js} +1 -1
  15. package/browser/chunk-NCBEPUYQ.js +1 -0
  16. package/browser/{chunk-OHZKVDVY.js → chunk-OR62LCJX.js} +1 -1
  17. package/browser/{chunk-SDPOEKGB.js → chunk-OSNI7IJI.js} +1 -1
  18. package/browser/{chunk-J76ELV3B.js → chunk-PWF6LYR2.js} +1 -1
  19. package/browser/chunk-R47KFHEX.js +1 -0
  20. package/browser/{chunk-EUTBCAQW.js → chunk-TMWJKQYT.js} +2 -2
  21. package/browser/chunk-TVFEAMIC.js +1 -0
  22. package/browser/{chunk-J37E3F3X.js → chunk-V6CWNYSW.js} +1 -1
  23. package/browser/chunk-WGDWYJII.js +1 -0
  24. package/browser/{chunk-JUPV65PP.js → chunk-Y5OX3ZR2.js} +1 -1
  25. package/browser/index.html +1 -1
  26. package/browser/{main-PC4NDE3G.js → main-UAKWI34J.js} +1 -1
  27. package/package.json +1 -1
  28. package/browser/chunk-AVSWQR2Q.js +0 -1
  29. package/browser/chunk-E6KB6VWH.js +0 -1
  30. package/browser/chunk-HTRRBKXE.js +0 -2
  31. package/browser/chunk-MFKNL6GY.js +0 -1
  32. package/browser/chunk-NUTSPDGN.js +0 -1
  33. package/browser/chunk-VELN6XU5.js +0 -1
@@ -1,7 +1,7 @@
1
- import{a as we,b as Oe,c as ie,d as Lt,e as zt,f as Bt}from"./chunk-ESGUJDS6.js";import{a as lt,b as ct}from"./chunk-HCG45H7O.js";import{a as rt,b as vt,c as bt,d as Ct,e as xt,f as yt,g as St,h as Mt,i as Pt,j as Tt,k as wt,l as Ot,m as Ae,n as Et,o as kt,q as Vt,r as It,s as jt,t as Nt}from"./chunk-EWEA7F46.js";import{d as Se}from"./chunk-QWMDAFBN.js";import{a as Wt,b as $t}from"./chunk-UKAN3Y3I.js";import{d as Dt,e as At,f as Ft,g as Rt}from"./chunk-ZAM3WGZM.js";import{a as Q,b as O}from"./chunk-AJOXSD6I.js";import{a as at,b as st,j as dt,n as ft}from"./chunk-AK6F2DC7.js";import{a as Ke,b as Ze,d as et,e as tt,f as nt,g as it}from"./chunk-DRBOHCTP.js";import{a as N,b as ne}from"./chunk-WPC6XC7P.js";import{B as _t,C as H,c as B,g as $,m as U,p as pt,q as mt,v as gt,w as ht,x as ut}from"./chunk-XJUBZLY2.js";import{a as Pe,b as Te}from"./chunk-XIQ3L6H6.js";import{E as Me,O as W,Q as ot,S as te,n as Ge}from"./chunk-B2QA6UZX.js";import{Ab as Ne,Bb as M,Db as p,Fb as d,Fc as Ye,Gb as $e,Ha as ce,Hb as Ue,Jb as ve,Jc as qe,Ka as c,Kb as be,Lb as Ce,Pb as De,Qb as G,Rb as T,T as C,Tb as l,Ub as w,V as Be,Vb as I,Wa as V,Wb as He,Xa as _e,Xb as x,Yb as y,Z as ge,Zb as S,_ as he,a as Y,ab as fe,b as re,bc as Qe,ca as v,cc as Xe,d as q,ga as u,h as F,ha as _,hc as Je,i as j,jb as de,kc as xe,lb as m,ma as ue,mb as g,oa as se,oc as ye,pb as R,qb as L,rb as b,sb as a,t as ae,ta as ee,tb as s,ua as le,ub as P,z as We}from"./chunk-3JGMGRXW.js";var Ut=class o{destroy$=new F;currentProject=null;currentThread=null;messagesSubject=new j([]);isThinkingSubject=new j(!1);currentChoiceSubject=new j(null);projectTitleSubject=new j("Coday");currentInviteEventSubject=new j(null);messageToRestoreSubject=new j("");threadUpdateEventSubject=new j(null);currentChoiceEvent=null;thinkingTimeout=null;accumulatedChunks="";streamingTextSubject=new j("");subThreadEventsSubject=new F;subThreadEvents$=this.subThreadEventsSubject.asObservable();subThreadEventBuffers=new Map;getBufferedSubThreadEvents(e){return this.subThreadEventBuffers.get(e)??[]}messages$=this.messagesSubject.asObservable();streamingText$=this.streamingTextSubject.asObservable();isThinking$=this.isThinkingSubject.asObservable();currentChoice$=this.currentChoiceSubject.asObservable();currentInviteEvent$=this.currentInviteEventSubject.asObservable();messageToRestore$=this.messageToRestoreSubject.asObservable();threadUpdateEvent$=this.threadUpdateEventSubject.asObservable();connectionStatus$;tabTitleService=null;eventStream=v(Lt);messageApi=v(zt);userService=v(Oe);constructor(){this.connectionStatus$=this.eventStream.connectionStatus$,this.initializeEventHandling()}setTabTitleService(e){this.tabTitleService=e}connectToThread(e,t){this.currentProject=e,this.currentThread=t,this.eventStream.connectToThread(e,t)}loadHistoryFromRest(e){for(let t of e){let n=Nt(t);n&&this.handleEvent(n)}}resetMessages(){this.messagesSubject.next([]),this.currentChoiceSubject.next(null),this.currentInviteEventSubject.next(null),this.currentChoiceEvent=null,this.accumulatedChunks="",this.streamingTextSubject.next(""),this.subThreadEventBuffers.clear(),this.stopThinking()}sendMessage(e){if(!this.currentProject||!this.currentThread){console.error("[CODAY] Cannot send message: no project or thread selected");return}let t=this.currentInviteEventSubject.value;if(t){this.isThinkingSubject.next(!0),this.tabTitleService?.setSystemActive(),this.currentInviteEventSubject.next(null);let n=t.buildAnswer(e);this.messageApi.sendMessage(n).subscribe({error:i=>{console.error("[CODAY] Send invite answer error:",i),this.currentInviteEventSubject.next(t),this.stopThinking()}})}else this.messageApi.sendFreeMessage(e).subscribe({error:n=>{console.error("[CODAY] Send error:",n)}})}sendChoice(e){if(!this.currentProject||!this.currentThread){console.error("[CODAY] Cannot send choice: no project or thread selected");return}if(this.currentChoiceEvent){this.isThinkingSubject.next(!0),this.tabTitleService?.setSystemActive();let t=this.currentChoiceEvent.buildAnswer(e);this.currentChoiceSubject.next(null),this.currentChoiceEvent=null,this.messageApi.sendMessage(t).subscribe({next:()=>{},error:n=>{console.error("[CODAY-CHOICE] Choice error:",n),this.stopThinking()}})}else console.error("[CODAY-CHOICE] No choice event available for choice:",e)}deleteMessage(e){let t=this.messagesSubject.value.find(i=>i.id===e),n=this.extractTextContentFromMessage(t);return this.messageApi.deleteMessage(e).pipe(Be(i=>{i.success&&(this.removeMessagesFromIndex(e),n.trim()&&this.messageToRestoreSubject.next(n))}))}getCurrentProjectTitle(){return this.projectTitleSubject.value}getCurrentInviteEvent(){return this.currentInviteEventSubject.value}setThinkingForPendingMessage(){this.isThinkingSubject.next(!0),this.tabTitleService?.setSystemActive()}initializeEventHandling(){this.eventStream.events$.pipe(C(this.destroy$)).subscribe({next:e=>this.handleEvent(e),error:e=>console.error("[CODAY] Event stream error:",e),complete:()=>console.log("[CODAY] Event stream completed")})}handleEvent(e){if(e.threadId&&e.threadId!==this.currentThread){let t=this.subThreadEventBuffers.get(e.threadId);t?t.push(e):this.subThreadEventBuffers.set(e.threadId,[e]),this.subThreadEventsSubject.next(e);return}e instanceof Et?this.handleMessageEvent(e):e instanceof St?this.handleTextChunkEvent(e):e instanceof yt?this.handleTextEvent(e):e instanceof xt?this.handleAnswerEvent(e):e instanceof Pt?this.handleErrorEvent(e):e instanceof Mt?this.handleWarnEvent(e):e instanceof Ae?this.handleThinkingEvent(e):e instanceof wt?this.handleToolRequestEvent(e):e instanceof Ot?this.handleToolResponseEvent(e):e instanceof Tt?this.handleChoiceEvent(e):e instanceof vt?this.handleHeartBeatEvent(e):e instanceof bt?this.handleInviteEvent(e):e instanceof kt?this.handleThreadUpdateEvent(e):e instanceof It?this.handleDelegationEvent(e):e instanceof Vt||e instanceof jt||console.warn("[CODAY] Unhandled event type:",e.type)}handleDelegationEvent(e){if(console.log("[CODAY] DelegationEvent received:",e.subThreadId,e.agentName),this.messagesSubject.value.findIndex(i=>i.subThreadId===e.subThreadId)===-1){let i={id:e.timestamp,role:"system",speaker:e.agentName,content:[{type:"text",content:""}],timestamp:new Date,type:"delegation",subThreadId:e.subThreadId,delegationAgentName:e.agentName};this.addMessage(i)}}handleThreadUpdateEvent(e){this.threadUpdateEventSubject.next(e)}handleMessageEvent(e){e.role==="assistant"&&this.accumulatedChunks&&(this.accumulatedChunks="",this.streamingTextSubject.next(""));let t={id:e.timestamp,role:e.role,speaker:e.name,content:e.content,timestamp:e.date,type:"text"};this.addMessage(t)}handleTextChunkEvent(e){this.accumulatedChunks+=e.chunk,this.streamingTextSubject.next(this.accumulatedChunks)}handleTextEvent(e){let t={id:e.timestamp,role:e.speaker?"assistant":"system",speaker:e.speaker??"System",content:[{type:"text",content:e.text}],timestamp:e.date,type:e.speaker?"text":"technical"};this.addMessage(t)}handleAnswerEvent(e){let t=this.currentInviteEventSubject.value;if(t){let i=!!e.parentKey&&e.parentKey===t.timestamp,r=!e.parentKey&&e.date>=t.date;(i||r)&&this.currentInviteEventSubject.next(null)}let n={id:e.timestamp,role:"user",speaker:e.name??this.userService.getUsername()??"User",content:[{type:"text",content:e.answer}],timestamp:e.date,type:"text",parentKey:e.parentKey,invite:e.invite};this.addMessage(n)}handleErrorEvent(e){let t={id:e.timestamp,role:"system",speaker:"System",content:[{type:"text",content:`Error: ${JSON.stringify(e.error)}`}],timestamp:e.date,type:"error"};this.addMessage(t)}handleWarnEvent(e){let t={id:e.timestamp,role:"system",speaker:"System",content:[{type:"text",content:`Warning: ${JSON.stringify(e.warning)}`}],timestamp:e.date,type:"warning"};this.addMessage(t)}handleThinkingEvent(e){this.currentInviteEventSubject.value||this.currentChoiceEvent||(this.clearThinkingTimeout(),this.isThinkingSubject.next(!0),this.tabTitleService?.setSystemActive(),this.thinkingTimeout=setTimeout(()=>{this.isThinkingSubject.next(!1),this.thinkingTimeout=null,this.tabTitleService?.setSystemInactive()},Ae.debounce+1e3))}handleToolRequestEvent(e){let t={id:e.timestamp,role:"system",speaker:"System",content:[{type:"text",content:e.toSingleLineString()}],timestamp:e.date,type:"technical",eventId:e.timestamp};this.addMessage(t)}handleToolResponseEvent(e){let t={id:e.timestamp,role:"system",speaker:"System",content:[{type:"text",content:e.toSingleLineString()}],timestamp:e.date,type:"technical",eventId:e.timestamp};this.addMessage(t)}handleChoiceEvent(e){this.stopThinking(),this.currentChoiceEvent=e,this.tabTitleService?.setSystemInactive();let t=e.options.map(i=>({value:i,label:i})),n=e.optionalQuestion?`${e.optionalQuestion} ${e.invite}`:e.invite;this.currentChoiceSubject.next({options:t,label:n,allowFreeText:e.allowFreeText})}handleHeartBeatEvent(e){}handleInviteEvent(e){if(this.stopThinking(),e.invite===Ct)this.currentInviteEventSubject.next(e),this.tabTitleService?.setSystemInactive();else{let n={id:e.timestamp,role:"assistant",speaker:"Assistant",content:[{type:"text",content:e.invite}],timestamp:e.date,type:"text"};this.addMessage(n),this.messagesSubject.value.some(h=>h.parentKey===e.timestamp||h.role==="user"&&h.timestamp>e.date||h.role==="assistant"&&h.timestamp>e.date)||(this.currentInviteEventSubject.next(e),this.tabTitleService?.setSystemInactive())}}addMessage(e){let t=this.messagesSubject.value;t.some(n=>n.id===e.id)||this.messagesSubject.next([...t,e])}removeMessagesFromIndex(e){let t=this.messagesSubject.value,n=t.findIndex(r=>r.id===e);if(n===-1||n===0)return;let i=t.slice(0,n);this.messagesSubject.next(i),this.stopThinking()}extractTextContentFromMessage(e){return e?e.content.filter(t=>t.type==="text").map(t=>t.content).join(`
1
+ import{a as we,b as Oe,c as ie,d as Lt,e as zt,f as Bt}from"./chunk-ESGUJDS6.js";import{a as lt,b as ct}from"./chunk-HCG45H7O.js";import{a as rt,b as vt,c as bt,d as Ct,e as xt,f as yt,g as St,h as Mt,i as Tt,j as Pt,k as wt,l as Ot,m as Ae,n as Et,o as kt,q as Vt,r as It,s as jt,t as Nt}from"./chunk-EWEA7F46.js";import{d as Se}from"./chunk-QWMDAFBN.js";import{a as Wt,b as $t}from"./chunk-UKAN3Y3I.js";import{d as Dt,e as At,f as Ft,g as Rt}from"./chunk-ZAM3WGZM.js";import{a as at,b as st,j as dt,n as ft}from"./chunk-AK6F2DC7.js";import{a as Q,b as O}from"./chunk-AJOXSD6I.js";import{a as Ke,b as Ze,d as et,e as tt,f as nt,g as it}from"./chunk-DRBOHCTP.js";import{a as N,b as ne}from"./chunk-WPC6XC7P.js";import{B as _t,C as H,c as B,g as $,m as U,p as pt,q as mt,v as gt,w as ht,x as ut}from"./chunk-XJUBZLY2.js";import{a as Te,b as Pe}from"./chunk-XIQ3L6H6.js";import{E as Me,O as W,Q as ot,S as te,n as Ge}from"./chunk-B2QA6UZX.js";import{Ab as Ne,Bb as M,Db as p,Fb as d,Fc as Ye,Gb as $e,Ha as ce,Hb as Ue,Jb as ve,Jc as qe,Ka as c,Kb as be,Lb as Ce,Pb as De,Qb as G,Rb as P,T as b,Tb as l,Ub as w,V as Be,Vb as I,Wa as V,Wb as He,Xa as _e,Xb as x,Yb as y,Z as ge,Zb as S,_ as he,a as Y,ab as fe,b as re,bc as Qe,ca as v,cc as Xe,d as q,ga as u,h as F,ha as _,hc as Je,i as j,jb as de,kc as xe,lb as m,ma as ue,mb as g,oa as se,oc as ye,pb as R,qb as L,rb as C,sb as a,t as ae,ta as ee,tb as s,ua as le,ub as T,z as We}from"./chunk-3JGMGRXW.js";var Ut=class o{destroy$=new F;currentProject=null;currentThread=null;messagesSubject=new j([]);isThinkingSubject=new j(!1);currentChoiceSubject=new j(null);projectTitleSubject=new j("Coday");currentInviteEventSubject=new j(null);messageToRestoreSubject=new j("");threadUpdateEventSubject=new j(null);currentChoiceEvent=null;thinkingTimeout=null;accumulatedChunks="";streamingTextSubject=new j("");subThreadEventsSubject=new F;subThreadEvents$=this.subThreadEventsSubject.asObservable();subThreadEventBuffers=new Map;getBufferedSubThreadEvents(e){return this.subThreadEventBuffers.get(e)??[]}messages$=this.messagesSubject.asObservable();streamingText$=this.streamingTextSubject.asObservable();isThinking$=this.isThinkingSubject.asObservable();currentChoice$=this.currentChoiceSubject.asObservable();currentInviteEvent$=this.currentInviteEventSubject.asObservable();messageToRestore$=this.messageToRestoreSubject.asObservable();threadUpdateEvent$=this.threadUpdateEventSubject.asObservable();connectionStatus$;tabTitleService=null;eventStream=v(Lt);messageApi=v(zt);userService=v(Oe);constructor(){this.connectionStatus$=this.eventStream.connectionStatus$,this.initializeEventHandling()}setTabTitleService(e){this.tabTitleService=e}connectToThread(e,t){this.currentProject=e,this.currentThread=t,this.eventStream.connectToThread(e,t)}loadHistoryFromRest(e){for(let t of e){let n=Nt(t);n&&this.handleEvent(n)}}resetMessages(){this.messagesSubject.next([]),this.currentChoiceSubject.next(null),this.currentInviteEventSubject.next(null),this.currentChoiceEvent=null,this.accumulatedChunks="",this.streamingTextSubject.next(""),this.subThreadEventBuffers.clear(),this.stopThinking()}sendMessage(e){if(!this.currentProject||!this.currentThread){console.error("[CODAY] Cannot send message: no project or thread selected");return}let t=this.currentInviteEventSubject.value;if(t){this.isThinkingSubject.next(!0),this.tabTitleService?.setSystemActive(),this.currentInviteEventSubject.next(null);let n=t.buildAnswer(e);this.messageApi.sendMessage(n).subscribe({error:i=>{console.error("[CODAY] Send invite answer error:",i),this.currentInviteEventSubject.next(t),this.stopThinking()}})}else this.messageApi.sendFreeMessage(e).subscribe({error:n=>{console.error("[CODAY] Send error:",n)}})}sendChoice(e){if(!this.currentProject||!this.currentThread){console.error("[CODAY] Cannot send choice: no project or thread selected");return}if(this.currentChoiceEvent){this.isThinkingSubject.next(!0),this.tabTitleService?.setSystemActive();let t=this.currentChoiceEvent.buildAnswer(e);this.currentChoiceSubject.next(null),this.currentChoiceEvent=null,this.messageApi.sendMessage(t).subscribe({next:()=>{},error:n=>{console.error("[CODAY-CHOICE] Choice error:",n),this.stopThinking()}})}else console.error("[CODAY-CHOICE] No choice event available for choice:",e)}deleteMessage(e){let t=this.messagesSubject.value.find(i=>i.id===e),n=this.extractTextContentFromMessage(t);return this.messageApi.deleteMessage(e).pipe(Be(i=>{i.success&&(this.removeMessagesFromIndex(e),n.trim()&&this.messageToRestoreSubject.next(n))}))}getCurrentProjectTitle(){return this.projectTitleSubject.value}getCurrentInviteEvent(){return this.currentInviteEventSubject.value}setThinkingForPendingMessage(){this.isThinkingSubject.next(!0),this.tabTitleService?.setSystemActive()}initializeEventHandling(){this.eventStream.events$.pipe(b(this.destroy$)).subscribe({next:e=>this.handleEvent(e),error:e=>console.error("[CODAY] Event stream error:",e),complete:()=>console.log("[CODAY] Event stream completed")})}handleEvent(e){if(e.threadId&&e.threadId!==this.currentThread){let t=this.subThreadEventBuffers.get(e.threadId);t?t.push(e):this.subThreadEventBuffers.set(e.threadId,[e]),this.subThreadEventsSubject.next(e);return}e instanceof Et?this.handleMessageEvent(e):e instanceof St?this.handleTextChunkEvent(e):e instanceof yt?this.handleTextEvent(e):e instanceof xt?this.handleAnswerEvent(e):e instanceof Tt?this.handleErrorEvent(e):e instanceof Mt?this.handleWarnEvent(e):e instanceof Ae?this.handleThinkingEvent(e):e instanceof wt?this.handleToolRequestEvent(e):e instanceof Ot?this.handleToolResponseEvent(e):e instanceof Pt?this.handleChoiceEvent(e):e instanceof vt?this.handleHeartBeatEvent(e):e instanceof bt?this.handleInviteEvent(e):e instanceof kt?this.handleThreadUpdateEvent(e):e instanceof It?this.handleDelegationEvent(e):e instanceof Vt||e instanceof jt||console.warn("[CODAY] Unhandled event type:",e.type)}handleDelegationEvent(e){if(console.log("[CODAY] DelegationEvent received:",e.subThreadId,e.agentName),this.messagesSubject.value.findIndex(i=>i.subThreadId===e.subThreadId)===-1){let i={id:e.timestamp,role:"system",speaker:e.agentName,content:[{type:"text",content:""}],timestamp:new Date,type:"delegation",subThreadId:e.subThreadId,delegationAgentName:e.agentName};this.addMessage(i)}}handleThreadUpdateEvent(e){this.threadUpdateEventSubject.next(e)}handleMessageEvent(e){e.role==="assistant"&&this.accumulatedChunks&&(this.accumulatedChunks="",this.streamingTextSubject.next(""));let t={id:e.timestamp,role:e.role,speaker:e.name,content:e.content,timestamp:e.date,type:"text"};this.addMessage(t)}handleTextChunkEvent(e){this.accumulatedChunks+=e.chunk,this.streamingTextSubject.next(this.accumulatedChunks)}handleTextEvent(e){let t={id:e.timestamp,role:e.speaker?"assistant":"system",speaker:e.speaker??"System",content:[{type:"text",content:e.text}],timestamp:e.date,type:e.speaker?"text":"technical"};this.addMessage(t)}handleAnswerEvent(e){let t=this.currentInviteEventSubject.value;if(t){let i=!!e.parentKey&&e.parentKey===t.timestamp,r=!e.parentKey&&e.date>=t.date;(i||r)&&this.currentInviteEventSubject.next(null)}let n={id:e.timestamp,role:"user",speaker:e.name??this.userService.getUsername()??"User",content:[{type:"text",content:e.answer}],timestamp:e.date,type:"text",parentKey:e.parentKey,invite:e.invite};this.addMessage(n)}handleErrorEvent(e){let t={id:e.timestamp,role:"system",speaker:"System",content:[{type:"text",content:`Error: ${JSON.stringify(e.error)}`}],timestamp:e.date,type:"error"};this.addMessage(t)}handleWarnEvent(e){let t={id:e.timestamp,role:"system",speaker:"System",content:[{type:"text",content:`Warning: ${JSON.stringify(e.warning)}`}],timestamp:e.date,type:"warning"};this.addMessage(t)}handleThinkingEvent(e){this.currentInviteEventSubject.value||this.currentChoiceEvent||(this.clearThinkingTimeout(),this.isThinkingSubject.next(!0),this.tabTitleService?.setSystemActive(),this.thinkingTimeout=setTimeout(()=>{this.isThinkingSubject.next(!1),this.thinkingTimeout=null,this.tabTitleService?.setSystemInactive()},Ae.debounce+1e3))}handleToolRequestEvent(e){let t={id:e.timestamp,role:"system",speaker:"System",content:[{type:"text",content:e.toSingleLineString()}],timestamp:e.date,type:"technical",eventId:e.timestamp};this.addMessage(t)}handleToolResponseEvent(e){let t={id:e.timestamp,role:"system",speaker:"System",content:[{type:"text",content:e.toSingleLineString()}],timestamp:e.date,type:"technical",eventId:e.timestamp};this.addMessage(t)}handleChoiceEvent(e){this.stopThinking(),this.currentChoiceEvent=e,this.tabTitleService?.setSystemInactive();let t=e.options.map(i=>({value:i,label:i})),n=e.optionalQuestion?`${e.optionalQuestion} ${e.invite}`:e.invite;this.currentChoiceSubject.next({options:t,label:n,allowFreeText:e.allowFreeText})}handleHeartBeatEvent(e){}handleInviteEvent(e){if(this.stopThinking(),e.invite===Ct)this.currentInviteEventSubject.next(e),this.tabTitleService?.setSystemInactive();else{let n={id:e.timestamp,role:"assistant",speaker:"Assistant",content:[{type:"text",content:e.invite}],timestamp:e.date,type:"text"};this.addMessage(n),this.messagesSubject.value.some(h=>h.parentKey===e.timestamp||h.role==="user"&&h.timestamp>e.date||h.role==="assistant"&&h.timestamp>e.date)||(this.currentInviteEventSubject.next(e),this.tabTitleService?.setSystemInactive())}}addMessage(e){let t=this.messagesSubject.value;t.some(n=>n.id===e.id)||this.messagesSubject.next([...t,e])}removeMessagesFromIndex(e){let t=this.messagesSubject.value,n=t.findIndex(r=>r.id===e);if(n===-1||n===0)return;let i=t.slice(0,n);this.messagesSubject.next(i),this.stopThinking()}extractTextContentFromMessage(e){return e?e.content.filter(t=>t.type==="text").map(t=>t.content).join(`
2
2
 
3
- `):""}clearThinkingTimeout(){this.thinkingTimeout&&(clearTimeout(this.thinkingTimeout),this.thinkingTimeout=null)}stopThinking(){this.clearThinkingTimeout(),this.isThinkingSubject.next(!1),this.tabTitleService&&this.tabTitleService.setSystemInactive()}ngOnDestroy(){this.clearThinkingTimeout(),this.destroy$.next(),this.destroy$.complete(),this.currentInviteEventSubject.complete(),this.messageToRestoreSubject.complete(),this.threadUpdateEventSubject.complete(),this.streamingTextSubject.complete(),this.eventStream.disconnect()}static \u0275fac=function(t){return new(t||o)};static \u0275prov=ge({token:o,factory:o.\u0275fac,providedIn:"root"})};var Ht=(()=>{class o{static \u0275fac=function(n){return new(n||o)};static \u0275mod=_e({type:o});static \u0275inj=he({imports:[Me]})}return o})();var Qt=(()=>{class o{static \u0275fac=function(n){return new(n||o)};static \u0275mod=_e({type:o});static \u0275inj=he({imports:[Me]})}return o})();var Ee=class o{destroy$=new F;voices;currentUtterance=null;currentOnEndCallback=null;speakingSubject=new j(!1);speaking$=this.speakingSubject.asObservable();volume=.8;rate=1.2;language="en-US";selectedVoice;preferencesService=v(ie);constructor(){this.initializeSpeechSynthesis(),this.subscribeToPreferences()}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete(),this.stopSpeech()}initializeSpeechSynthesis(){if(!("speechSynthesis"in window)){console.warn("[VOICE-SERVICE] Speech synthesis not available"),this.voices=new Promise(e=>e([]));return}this.voices=new Promise((e,t)=>{let n=speechSynthesis.getVoices();if(n.length)e(n);else{let i=setTimeout(()=>{t("no voices found")},2e3);speechSynthesis.addEventListener("voiceschanged",()=>{let r=speechSynthesis.getVoices();r.length&&(clearTimeout(i),e(r))})}}),console.log("[VOICE-SERVICE] Speech synthesis initialized")}subscribeToPreferences(){this.preferencesService.voiceVolume$.pipe(C(this.destroy$)).subscribe(e=>{this.volume=e,console.log("[VOICE-SERVICE] Volume updated to:",e)}),this.preferencesService.voiceRate$.pipe(C(this.destroy$)).subscribe(e=>{this.rate=e,console.log("[VOICE-SERVICE] Rate updated to:",e)}),this.preferencesService.voiceLanguage$.pipe(C(this.destroy$)).subscribe(e=>{this.language=e,console.log("[VOICE-SERVICE] Language updated to:",e),this.updateSelectedVoiceForLanguage()}),this.preferencesService.selectedVoice$.pipe(C(this.destroy$)).subscribe(e=>{this.setSelectedVoice(e)}),this.volume=this.preferencesService.getVoiceVolume(),this.rate=this.preferencesService.getVoiceRate(),this.language=this.preferencesService.getVoiceLanguage(),this.setSelectedVoice(this.preferencesService.getSelectedVoice())}isReady(){return"speechSynthesis"in window&&this.selectedVoice!==void 0}isSpeaking(){return speechSynthesis.speaking}speak(e,t){return q(this,null,function*(){if(!this.selectedVoice)return console.warn("[VOICE-SERVICE] No voice selected"),!1;if(!e.trim())return console.warn("[VOICE-SERVICE] No text to speak"),!1;let n=this.extractPlainText(e);if(!n.trim())return console.warn("[VOICE-SERVICE] No text to speak after markdown cleaning"),!1;this.stopSpeech();try{let i=new SpeechSynthesisUtterance(n);i.voice=this.selectedVoice,i.lang=this.selectedVoice.lang,i.volume=this.volume,i.rate=this.rate,this.currentOnEndCallback=t||null,t&&(i.onend=()=>{this.currentOnEndCallback===t&&(this.currentOnEndCallback=null,t())},i.onerror=()=>{this.currentOnEndCallback===t&&(this.currentOnEndCallback=null,t())}),this.currentUtterance=i,this.speakingSubject.next(!0);let r=i.onend,h=i.onerror;return i.onend=k=>{this.speakingSubject.next(!1),r&&r.call(i,k)},i.onerror=k=>{this.speakingSubject.next(!1),h&&h.call(i,k)},speechSynthesis.speak(i),console.log("[VOICE-SERVICE] Started speaking:",e.substring(0,50)+"..."),!0}catch(i){return console.error("[VOICE-SERVICE] Error speaking:",i),!1}})}stopSpeech(){if(this.currentUtterance||speechSynthesis.speaking){if(speechSynthesis.cancel(),this.currentUtterance=null,this.currentOnEndCallback){let e=this.currentOnEndCallback;this.currentOnEndCallback=null,e()}this.speakingSubject.next(!1),console.log("[VOICE-SERVICE] Speech stopped")}}ding(){try{let e=new(window.AudioContext||window.webkitAudioContext),t=e.createOscillator(),n=e.createGain();t.connect(n),n.connect(e.destination),t.frequency.setValueAtTime(800,e.currentTime),n.gain.setValueAtTime(.1,e.currentTime),n.gain.exponentialRampToValueAtTime(.01,e.currentTime+.1),t.start(e.currentTime),t.stop(e.currentTime+.1),console.log("[VOICE-SERVICE] Notification sound played")}catch(e){console.error("[VOICE-SERVICE] Notification sound failed:",e)}}getVoicesForLanguage(){return q(this,null,function*(){try{let e=this.language.slice(0,2),t=yield this.voices;if(!t||t.length===0)return console.warn("[VOICE-SERVICE] No voices available on system"),[];let n=t.filter(i=>i.lang.toLowerCase().startsWith(e)).sort((i,r)=>i.localService&&!r.localService?-1:!i.localService&&r.localService?1:i.name.localeCompare(r.name));return console.log("[VOICE-SERVICE] Found matching voices:",n.length,"for language:",e),n.map(i=>({name:i.name,lang:i.lang,localService:i.localService,default:i.default,displayName:this.formatVoiceDisplayName(i)}))}catch(e){return console.error("[VOICE-SERVICE] Error getting voices for language:",e),[]}})}formatVoiceDisplayName(e){let t=e.localService?"\u{1F3E0}":"\u2601\uFE0F",n=e.default?" \u2B50":"";return`${t} ${e.name} (${e.lang})${n}`}setSelectedVoice(e){return q(this,null,function*(){if(!e){this.selectedVoice=void 0;return}let[t,n]=e.split("|");if(!t||!n){this.selectedVoice=void 0;return}let i=(yield this.voices)?.find(r=>r.name===t&&r.lang===n);i?(this.selectedVoice=i,console.log("[VOICE-SERVICE] Selected voice:",i.name,i.lang)):(this.selectedVoice=void 0,console.warn("[VOICE-SERVICE] Voice not found:",t,n))})}updateSelectedVoiceForLanguage(){return q(this,null,function*(){let e=yield this.getVoicesForLanguage();if(e.length===0){console.warn("[VOICE-SERVICE] No voices available for language:",this.language),this.selectedVoice=void 0,this.preferencesService.setSelectedVoice(null);return}let t=this.preferencesService.getSelectedVoice();if(t){let[i,r]=t.split("|"),h=r?.slice(0,2),k=this.language.slice(0,2);if(h===k&&e.some(D=>D.name===i&&D.lang===r)){console.log("[VOICE-SERVICE] Keeping current voice for language:",t);return}}let n=e[0];if(n){let i=`${n.name}|${n.lang}`;this.preferencesService.setSelectedVoice(i),console.log("[VOICE-SERVICE] Auto-selected voice for language change:",n.displayName)}})}testSelectedVoice(){setTimeout(()=>{if(!this.selectedVoice){console.log("[VOICE-SERVICE] No voice selected for test");return}this.stopSpeech();let e=this.getTestText();e&&this.speak(e)},100)}getTestText(){let e=this.language.slice(0,2),t={fr:"Bonjour, ceci est un test de la voix s\xE9lectionn\xE9e.",en:"Hello, this is a test of the selected voice.",es:"Hola, esta es una prueba de la voz seleccionada.",de:"Hallo, dies ist ein Test der ausgew\xE4hlten Stimme.",it:"Ciao, questo \xE8 un test della voce selezionata.",pt:"Ol\xE1, este \xE9 um teste da voz selecionada.",ja:"\u3053\u3093\u306B\u3061\u306F\u3001\u3053\u308C\u306F\u9078\u629E\u3055\u308C\u305F\u97F3\u58F0\u306E\u30C6\u30B9\u30C8\u3067\u3059\u3002",ko:"\uC548\uB155\uD558\uC138\uC694, \uC774\uAC83\uC740 \uC120\uD0DD\uB41C \uC74C\uC131\uC758 \uD14C\uC2A4\uD2B8\uC785\uB2C8\uB2E4.",zh:"\u4F60\u597D\uFF0C\u8FD9\u662F\u6240\u9009\u8BED\u97F3\u7684\u6D4B\u8BD5\u3002",ru:"\u041F\u0440\u0438\u0432\u0435\u0442, \u044D\u0442\u043E \u0442\u0435\u0441\u0442 \u0432\u044B\u0431\u0440\u0430\u043D\u043D\u043E\u0433\u043E \u0433\u043E\u043B\u043E\u0441\u0430.",ar:"\u0645\u0631\u062D\u0628\u0627\u060C \u0647\u0630\u0627 \u0627\u062E\u062A\u0628\u0627\u0631 \u0644\u0644\u0635\u0648\u062A \u0627\u0644\u0645\u062D\u062F\u062F."};return t[e]||t.en||"Hello, this is a test."}extractPlainText(e){let t=e.replace(/[\u{1F600}-\u{1F64F}]|[\u{1F300}-\u{1F5FF}]|[\u{1F680}-\u{1F6FF}]|[\u{1F1E0}-\u{1F1FF}]|[\u{2600}-\u{26FF}]|[\u{2700}-\u{27BF}]|⭐/gu,"").replace(/```[\s\S]*?```/g,"code block").replace(/`([^`]+)`/g,"$1").replace(/\*\*\*(.*?)\*\*\*/g,"$1").replace(/\*\*(.*?)\*\*/g,"$1").replace(/\*(.*?)\*/g,"$1").replace(/~~(.*?)~~/g,"$1").replace(/#{1,6}\s*(.*)/g,"$1").replace(/\[([^\]]+)\]\([^)]+\)/g,"$1").replace(/https?:\/\/[^\s]+/g,"link").replace(/&nbsp;/g," ").replace(/&amp;/g,"and").replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&quot;/g,'"');return t=this.addNaturalPunctuation(t),t.replace(/\s+/g," ").trim()}addNaturalPunctuation(e){return e.replace(/\n+/g,`
3
+ `):""}clearThinkingTimeout(){this.thinkingTimeout&&(clearTimeout(this.thinkingTimeout),this.thinkingTimeout=null)}stopThinking(){this.clearThinkingTimeout(),this.isThinkingSubject.next(!1),this.tabTitleService&&this.tabTitleService.setSystemInactive()}ngOnDestroy(){this.clearThinkingTimeout(),this.destroy$.next(),this.destroy$.complete(),this.currentInviteEventSubject.complete(),this.messageToRestoreSubject.complete(),this.threadUpdateEventSubject.complete(),this.streamingTextSubject.complete(),this.eventStream.disconnect()}static \u0275fac=function(t){return new(t||o)};static \u0275prov=ge({token:o,factory:o.\u0275fac,providedIn:"root"})};var Ht=(()=>{class o{static \u0275fac=function(n){return new(n||o)};static \u0275mod=_e({type:o});static \u0275inj=he({imports:[Me]})}return o})();var Qt=(()=>{class o{static \u0275fac=function(n){return new(n||o)};static \u0275mod=_e({type:o});static \u0275inj=he({imports:[Me]})}return o})();var Ee=class o{destroy$=new F;voices;currentUtterance=null;currentOnEndCallback=null;speakingSubject=new j(!1);speaking$=this.speakingSubject.asObservable();volume=.8;rate=1.2;language="en-US";selectedVoice;preferencesService=v(ie);constructor(){this.initializeSpeechSynthesis(),this.subscribeToPreferences()}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete(),this.stopSpeech()}initializeSpeechSynthesis(){if(!("speechSynthesis"in window)){console.warn("[VOICE-SERVICE] Speech synthesis not available"),this.voices=new Promise(e=>e([]));return}this.voices=new Promise((e,t)=>{let n=speechSynthesis.getVoices();if(n.length)e(n);else{let i=setTimeout(()=>{t("no voices found")},2e3);speechSynthesis.addEventListener("voiceschanged",()=>{let r=speechSynthesis.getVoices();r.length&&(clearTimeout(i),e(r))})}}),console.log("[VOICE-SERVICE] Speech synthesis initialized")}subscribeToPreferences(){this.preferencesService.voiceVolume$.pipe(b(this.destroy$)).subscribe(e=>{this.volume=e,console.log("[VOICE-SERVICE] Volume updated to:",e)}),this.preferencesService.voiceRate$.pipe(b(this.destroy$)).subscribe(e=>{this.rate=e,console.log("[VOICE-SERVICE] Rate updated to:",e)}),this.preferencesService.voiceLanguage$.pipe(b(this.destroy$)).subscribe(e=>{this.language=e,console.log("[VOICE-SERVICE] Language updated to:",e),this.updateSelectedVoiceForLanguage()}),this.preferencesService.selectedVoice$.pipe(b(this.destroy$)).subscribe(e=>{this.setSelectedVoice(e)}),this.volume=this.preferencesService.getVoiceVolume(),this.rate=this.preferencesService.getVoiceRate(),this.language=this.preferencesService.getVoiceLanguage(),this.setSelectedVoice(this.preferencesService.getSelectedVoice())}isReady(){return"speechSynthesis"in window&&this.selectedVoice!==void 0}isSpeaking(){return speechSynthesis.speaking}speak(e,t){return q(this,null,function*(){if(!this.selectedVoice)return console.warn("[VOICE-SERVICE] No voice selected"),!1;if(!e.trim())return console.warn("[VOICE-SERVICE] No text to speak"),!1;let n=this.extractPlainText(e);if(!n.trim())return console.warn("[VOICE-SERVICE] No text to speak after markdown cleaning"),!1;this.stopSpeech();try{let i=new SpeechSynthesisUtterance(n);i.voice=this.selectedVoice,i.lang=this.selectedVoice.lang,i.volume=this.volume,i.rate=this.rate,this.currentOnEndCallback=t||null,t&&(i.onend=()=>{this.currentOnEndCallback===t&&(this.currentOnEndCallback=null,t())},i.onerror=()=>{this.currentOnEndCallback===t&&(this.currentOnEndCallback=null,t())}),this.currentUtterance=i,this.speakingSubject.next(!0);let r=i.onend,h=i.onerror;return i.onend=k=>{this.speakingSubject.next(!1),r&&r.call(i,k)},i.onerror=k=>{this.speakingSubject.next(!1),h&&h.call(i,k)},speechSynthesis.speak(i),console.log("[VOICE-SERVICE] Started speaking:",e.substring(0,50)+"..."),!0}catch(i){return console.error("[VOICE-SERVICE] Error speaking:",i),!1}})}stopSpeech(){if(this.currentUtterance||speechSynthesis.speaking){if(speechSynthesis.cancel(),this.currentUtterance=null,this.currentOnEndCallback){let e=this.currentOnEndCallback;this.currentOnEndCallback=null,e()}this.speakingSubject.next(!1),console.log("[VOICE-SERVICE] Speech stopped")}}ding(){try{let e=new(window.AudioContext||window.webkitAudioContext),t=e.createOscillator(),n=e.createGain();t.connect(n),n.connect(e.destination),t.frequency.setValueAtTime(800,e.currentTime),n.gain.setValueAtTime(.1,e.currentTime),n.gain.exponentialRampToValueAtTime(.01,e.currentTime+.1),t.start(e.currentTime),t.stop(e.currentTime+.1),console.log("[VOICE-SERVICE] Notification sound played")}catch(e){console.error("[VOICE-SERVICE] Notification sound failed:",e)}}getVoicesForLanguage(){return q(this,null,function*(){try{let e=this.language.slice(0,2),t=yield this.voices;if(!t||t.length===0)return console.warn("[VOICE-SERVICE] No voices available on system"),[];let n=t.filter(i=>i.lang.toLowerCase().startsWith(e)).sort((i,r)=>i.localService&&!r.localService?-1:!i.localService&&r.localService?1:i.name.localeCompare(r.name));return console.log("[VOICE-SERVICE] Found matching voices:",n.length,"for language:",e),n.map(i=>({name:i.name,lang:i.lang,localService:i.localService,default:i.default,displayName:this.formatVoiceDisplayName(i)}))}catch(e){return console.error("[VOICE-SERVICE] Error getting voices for language:",e),[]}})}formatVoiceDisplayName(e){let t=e.localService?"\u{1F3E0}":"\u2601\uFE0F",n=e.default?" \u2B50":"";return`${t} ${e.name} (${e.lang})${n}`}setSelectedVoice(e){return q(this,null,function*(){if(!e){this.selectedVoice=void 0;return}let[t,n]=e.split("|");if(!t||!n){this.selectedVoice=void 0;return}let i=(yield this.voices)?.find(r=>r.name===t&&r.lang===n);i?(this.selectedVoice=i,console.log("[VOICE-SERVICE] Selected voice:",i.name,i.lang)):(this.selectedVoice=void 0,console.warn("[VOICE-SERVICE] Voice not found:",t,n))})}updateSelectedVoiceForLanguage(){return q(this,null,function*(){let e=yield this.getVoicesForLanguage();if(e.length===0){console.warn("[VOICE-SERVICE] No voices available for language:",this.language),this.selectedVoice=void 0,this.preferencesService.setSelectedVoice(null);return}let t=this.preferencesService.getSelectedVoice();if(t){let[i,r]=t.split("|"),h=r?.slice(0,2),k=this.language.slice(0,2);if(h===k&&e.some(D=>D.name===i&&D.lang===r)){console.log("[VOICE-SERVICE] Keeping current voice for language:",t);return}}let n=e[0];if(n){let i=`${n.name}|${n.lang}`;this.preferencesService.setSelectedVoice(i),console.log("[VOICE-SERVICE] Auto-selected voice for language change:",n.displayName)}})}testSelectedVoice(){setTimeout(()=>{if(!this.selectedVoice){console.log("[VOICE-SERVICE] No voice selected for test");return}this.stopSpeech();let e=this.getTestText();e&&this.speak(e)},100)}getTestText(){let e=this.language.slice(0,2),t={fr:"Bonjour, ceci est un test de la voix s\xE9lectionn\xE9e.",en:"Hello, this is a test of the selected voice.",es:"Hola, esta es una prueba de la voz seleccionada.",de:"Hallo, dies ist ein Test der ausgew\xE4hlten Stimme.",it:"Ciao, questo \xE8 un test della voce selezionata.",pt:"Ol\xE1, este \xE9 um teste da voz selecionada.",ja:"\u3053\u3093\u306B\u3061\u306F\u3001\u3053\u308C\u306F\u9078\u629E\u3055\u308C\u305F\u97F3\u58F0\u306E\u30C6\u30B9\u30C8\u3067\u3059\u3002",ko:"\uC548\uB155\uD558\uC138\uC694, \uC774\uAC83\uC740 \uC120\uD0DD\uB41C \uC74C\uC131\uC758 \uD14C\uC2A4\uD2B8\uC785\uB2C8\uB2E4.",zh:"\u4F60\u597D\uFF0C\u8FD9\u662F\u6240\u9009\u8BED\u97F3\u7684\u6D4B\u8BD5\u3002",ru:"\u041F\u0440\u0438\u0432\u0435\u0442, \u044D\u0442\u043E \u0442\u0435\u0441\u0442 \u0432\u044B\u0431\u0440\u0430\u043D\u043D\u043E\u0433\u043E \u0433\u043E\u043B\u043E\u0441\u0430.",ar:"\u0645\u0631\u062D\u0628\u0627\u060C \u0647\u0630\u0627 \u0627\u062E\u062A\u0628\u0627\u0631 \u0644\u0644\u0635\u0648\u062A \u0627\u0644\u0645\u062D\u062F\u062F."};return t[e]||t.en||"Hello, this is a test."}extractPlainText(e){let t=e.replace(/[\u{1F600}-\u{1F64F}]|[\u{1F300}-\u{1F5FF}]|[\u{1F680}-\u{1F6FF}]|[\u{1F1E0}-\u{1F1FF}]|[\u{2600}-\u{26FF}]|[\u{2700}-\u{27BF}]|⭐/gu,"").replace(/```[\s\S]*?```/g,"code block").replace(/`([^`]+)`/g,"$1").replace(/\*\*\*(.*?)\*\*\*/g,"$1").replace(/\*\*(.*?)\*\*/g,"$1").replace(/\*(.*?)\*/g,"$1").replace(/~~(.*?)~~/g,"$1").replace(/#{1,6}\s*(.*)/g,"$1").replace(/\[([^\]]+)\]\([^)]+\)/g,"$1").replace(/https?:\/\/[^\s]+/g,"link").replace(/&nbsp;/g," ").replace(/&amp;/g,"and").replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&quot;/g,'"');return t=this.addNaturalPunctuation(t),t.replace(/\s+/g," ").trim()}addNaturalPunctuation(e){return e.replace(/\n+/g,`
4
4
  `).split(`
5
- `).map(t=>this.addPeriodIfNeeded(t.trim())).filter(t=>t.length>0).join(" ")}addPeriodIfNeeded(e){return e?/[.!?;:]$/.test(e)?e:e+".":""}static \u0275fac=function(t){return new(t||o)};static \u0275prov=ge({token:o,factory:o.\u0275fac,providedIn:"root"})};var Kt=(o,e)=>e.code,Zt=(o,e)=>e.name+e.lang;function en(o,e){o&1&&(a(0,"div",15)(1,"mat-icon",32),l(2,"warning"),s(),a(3,"span",33),l(4," Browser notifications have been blocked. To enable them, please reset the site permissions in your browser settings. "),s()())}function tn(o,e){if(o&1&&(a(0,"option",18),l(1),s()),o&2){let t=e.$implicit;b("value",t.code),c(),He("",t.flag," ",t.label)}}function nn(o,e){o&1&&(a(0,"option",25),l(1,"Loading voices..."),s())}function on(o,e){o&1&&(a(0,"option",25),l(1,"No voice available"),s())}function rn(o,e){if(o&1&&(a(0,"option",18),l(1),s()),o&2){let t=e.$implicit;b("value",t.name+"|"+t.lang),c(),I(" ",t.displayName," ")}}var pe=class o{destroy$=new F;selectedTheme="light";selectedVoiceLanguage="en-US";useEnterToSend=!1;printTechnicalMessages=!1;showTechnicalMessages=!0;showWarningMessages=!0;voiceAnnounceEnabled=!1;voiceMode="speech";voiceReadFullText=!1;voiceVolume=80;voiceRate=120;agentNotificationEnabled=!1;notificationSoundEnabled=!0;browserNotificationEnabled=!1;browserNotificationDenied=!1;availableVoices=[];selectedVoiceId=null;loadingVoices=!1;voiceLanguageOptions=[{code:"fr-FR",label:"Fran\xE7ais",flag:"\u{1F1EB}\u{1F1F7}"},{code:"en-US",label:"English (US)",flag:"\u{1F1FA}\u{1F1F8}"},{code:"en-GB",label:"English (UK)",flag:"\u{1F1EC}\u{1F1E7}"},{code:"es-ES",label:"Espa\xF1ol",flag:"\u{1F1EA}\u{1F1F8}"},{code:"de-DE",label:"Deutsch",flag:"\u{1F1E9}\u{1F1EA}"},{code:"it-IT",label:"Italiano",flag:"\u{1F1EE}\u{1F1F9}"},{code:"pt-BR",label:"Portugu\xEAs",flag:"\u{1F1E7}\u{1F1F7}"},{code:"ja-JP",label:"\u65E5\u672C\u8A9E",flag:"\u{1F1EF}\u{1F1F5}"},{code:"ko-KR",label:"\uD55C\uAD6D\uC5B4",flag:"\u{1F1F0}\u{1F1F7}"},{code:"zh-CN",label:"\u4E2D\u6587 (\u7B80\u4F53)",flag:"\u{1F1E8}\u{1F1F3}"},{code:"ru-RU",label:"\u0420\u0443\u0441\u0441\u043A\u0438\u0439",flag:"\u{1F1F7}\u{1F1FA}"},{code:"ar-SA",label:"\u0627\u0644\u0639\u0631\u0628\u064A\u0629",flag:"\u{1F1F8}\u{1F1E6}"}];preferencesService=v(ie);voiceSynthesisService=v(Ee);themeService=v(Bt);ngOnInit(){this.selectedTheme=this.themeService.getCurrentTheme(),this.selectedVoiceLanguage=this.preferencesService.getVoiceLanguage(),this.useEnterToSend=this.preferencesService.getEnterToSend(),this.printTechnicalMessages=this.preferencesService.getPrintTechnicalMessages(),this.showTechnicalMessages=!this.preferencesService.getHideTechnicalMessages(),this.showWarningMessages=!this.preferencesService.getHideWarningMessages(),this.voiceAnnounceEnabled=this.preferencesService.getVoiceAnnounceEnabled(),this.voiceMode=this.preferencesService.getVoiceMode(),this.voiceReadFullText=this.preferencesService.getVoiceReadFullText(),this.voiceVolume=Math.round(this.preferencesService.getVoiceVolume()*100),this.voiceRate=Math.round(this.preferencesService.getVoiceRate()*100),this.selectedVoiceId=this.preferencesService.getSelectedVoice(),this.agentNotificationEnabled=this.preferencesService.getAgentNotificationEnabled(),this.notificationSoundEnabled=this.preferencesService.getNotificationSoundEnabled(),this.browserNotificationEnabled=this.preferencesService.getBrowserNotificationEnabled(),this.loadAvailableVoices(),this.themeService.currentTheme$.pipe(C(this.destroy$)).subscribe(e=>{this.selectedTheme=e}),this.preferencesService.voiceLanguage$.pipe(C(this.destroy$)).subscribe(e=>{this.selectedVoiceLanguage=e}),this.preferencesService.enterToSend$.pipe(C(this.destroy$)).subscribe(e=>{this.useEnterToSend=e}),this.preferencesService.printTechnicalMessages$.pipe(C(this.destroy$)).subscribe(e=>{this.printTechnicalMessages=e}),this.preferencesService.hideTechnicalMessages$.pipe(C(this.destroy$)).subscribe(e=>{this.showTechnicalMessages=!e}),this.preferencesService.hideWarningMessages$.pipe(C(this.destroy$)).subscribe(e=>{this.showWarningMessages=!e}),this.preferencesService.voiceAnnounceEnabled$.pipe(C(this.destroy$)).subscribe(e=>{this.voiceAnnounceEnabled=e}),this.preferencesService.voiceMode$.pipe(C(this.destroy$)).subscribe(e=>{this.voiceMode=e}),this.preferencesService.voiceReadFullText$.pipe(C(this.destroy$)).subscribe(e=>{this.voiceReadFullText=e}),this.preferencesService.voiceVolume$.pipe(C(this.destroy$)).subscribe(e=>{this.voiceVolume=Math.round(e*100)}),this.preferencesService.voiceRate$.pipe(C(this.destroy$)).subscribe(e=>{this.voiceRate=Math.round(e*100)}),this.preferencesService.selectedVoice$.pipe(C(this.destroy$)).subscribe(e=>{this.selectedVoiceId=e}),this.preferencesService.voiceLanguage$.pipe(C(this.destroy$)).subscribe(()=>{this.loadAvailableVoices()}),this.preferencesService.agentNotificationEnabled$.pipe(C(this.destroy$)).subscribe(e=>{this.agentNotificationEnabled=e}),this.preferencesService.notificationSoundEnabled$.pipe(C(this.destroy$)).subscribe(e=>{this.notificationSoundEnabled=e}),this.preferencesService.browserNotificationEnabled$.pipe(C(this.destroy$)).subscribe(e=>{this.browserNotificationEnabled=e,this.checkNotificationPermission()})}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete()}onThemeChange(){console.log("[OPTIONS] Theme changed to:",this.selectedTheme),this.themeService.setTheme(this.selectedTheme)}onVoiceLanguageChange(){console.log("[OPTIONS] Voice language changed to:",this.selectedVoiceLanguage),this.preferencesService.setVoiceLanguage(this.selectedVoiceLanguage)}onEnterToSendChange(){console.log("[OPTIONS] Enter to send changed to:",this.useEnterToSend),this.preferencesService.setEnterToSend(this.useEnterToSend)}onPrintTechnicalMessagesChange(){console.log("[OPTIONS] Print technical messages changed to:",this.printTechnicalMessages),this.preferencesService.setPrintTechnicalMessages(this.printTechnicalMessages)}onShowTechnicalMessagesChange(){let e=!this.showTechnicalMessages;console.log("[OPTIONS] Show technical messages changed to:",this.showTechnicalMessages,"(hide:",e,")"),this.preferencesService.setHideTechnicalMessages(e)}onShowWarningMessagesChange(){let e=!this.showWarningMessages;console.log("[OPTIONS] Show warning messages changed to:",this.showWarningMessages,"(hide:",e,")"),this.preferencesService.setHideWarningMessages(e)}onVoiceAnnounceEnabledChange(){console.log("[OPTIONS] Voice announce enabled changed to:",this.voiceAnnounceEnabled),this.preferencesService.setVoiceAnnounceEnabled(this.voiceAnnounceEnabled)}onVoiceModeChange(){console.log("[OPTIONS] Voice mode changed to:",this.voiceMode),this.preferencesService.setVoiceMode(this.voiceMode)}onVoiceReadFullTextChange(){console.log("[OPTIONS] Voice read full text changed to:",this.voiceReadFullText),this.preferencesService.setVoiceReadFullText(this.voiceReadFullText)}onVoiceVolumeChange(){let e=this.voiceVolume/100;console.log("[OPTIONS] Voice volume changed to:",e),this.preferencesService.setVoiceVolume(e)}onVoiceRateChange(){let e=this.voiceRate/100;console.log("[OPTIONS] Voice rate changed to:",e),this.preferencesService.setVoiceRate(e)}loadAvailableVoices(){return q(this,null,function*(){this.loadingVoices=!0;try{this.availableVoices=yield this.voiceSynthesisService.getVoicesForLanguage(),console.log("[OPTIONS] Loaded",this.availableVoices.length,"voices for current language")}catch(e){console.error("[OPTIONS] Error loading voices:",e),this.availableVoices=[]}finally{this.loadingVoices=!1}})}onSelectedVoiceChange(){console.log("[OPTIONS] Selected voice changed to:",this.selectedVoiceId),this.preferencesService.setSelectedVoice(this.selectedVoiceId)}testVoice(){console.log("[OPTIONS] Testing voice with current settings"),this.voiceSynthesisService.testSelectedVoice()}onAgentNotificationEnabledChange(){console.log("[OPTIONS] Agent notification enabled changed to:",this.agentNotificationEnabled),this.preferencesService.setAgentNotificationEnabled(this.agentNotificationEnabled)}onNotificationSoundEnabledChange(){console.log("[OPTIONS] Notification sound enabled changed to:",this.notificationSoundEnabled),this.preferencesService.setNotificationSoundEnabled(this.notificationSoundEnabled)}onBrowserNotificationEnabledChange(){console.log("[OPTIONS] Browser notification enabled changed to:",this.browserNotificationEnabled),this.preferencesService.setBrowserNotificationEnabled(this.browserNotificationEnabled)}checkNotificationPermission(){"Notification"in window&&(this.browserNotificationDenied=Notification.permission==="denied",console.log("[OPTIONS] Notification permission status:",Notification.permission))}static \u0275fac=function(t){return new(t||o)};static \u0275cmp=V({type:o,selectors:[["app-options-panel"]],decls:144,vars:35,consts:[[1,"options-content"],[1,"option-section"],[1,"section-title"],[1,"option-group"],[1,"radio-group"],[1,"option-radio"],["type","radio","name","theme","value","light",3,"ngModelChange","change","ngModel"],[1,"radio-mark"],["type","radio","name","theme","value","dark",3,"ngModelChange","change","ngModel"],["type","radio","name","theme","value","system",3,"ngModelChange","change","ngModel"],[1,"option-label"],["type","radio","name","enterBehavior",3,"ngModelChange","change","value","ngModel"],[1,"toggle-option"],["color","primary",3,"ngModelChange","change","ngModel"],["color","primary",3,"ngModelChange","change","ngModel","disabled"],[1,"notification-error"],["for","voice-language-select",1,"option-label"],["id","voice-language-select",1,"option-select",3,"ngModelChange","change","ngModel"],[3,"value"],["type","radio","name","voiceAnnounce",3,"ngModelChange","change","value","ngModel"],["type","radio","name","voiceMode","value","speech",3,"ngModelChange","change","ngModel"],["type","radio","name","voiceMode","value","notification",3,"ngModelChange","change","ngModel"],["type","radio","name","voiceReadFull",3,"ngModelChange","change","value","ngModel"],["for","voice-select",1,"option-label"],["id","voice-select",1,"option-select",3,"ngModelChange","change","ngModel","disabled"],["value",""],["role","button","tabindex","0","title","Test voice with current settings",1,"test-voice-link",3,"click"],[1,"thread-name"],["for","voice-volume-slider",1,"option-label"],["id","voice-volume-slider","type","range","min","0","max","100","step","5",1,"option-slider",3,"ngModelChange","input","ngModel"],["for","voice-rate-slider",1,"option-label"],["id","voice-rate-slider","type","range","min","50","max","200","step","10",1,"option-slider",3,"ngModelChange","input","ngModel"],[1,"error-icon"],[1,"error-message"]],template:function(t,n){t&1&&(a(0,"div",0)(1,"div",1)(2,"div",2)(3,"mat-icon"),l(4,"palette"),s(),a(5,"span"),l(6,"Appearance"),s()(),a(7,"div",3)(8,"div",4)(9,"label",5)(10,"input",6),S("ngModelChange",function(r){return y(n.selectedTheme,r)||(n.selectedTheme=r),r}),p("change",function(){return n.onThemeChange()}),s(),P(11,"span",7),l(12," Light "),s(),a(13,"label",5)(14,"input",8),S("ngModelChange",function(r){return y(n.selectedTheme,r)||(n.selectedTheme=r),r}),p("change",function(){return n.onThemeChange()}),s(),P(15,"span",7),l(16," Dark "),s(),a(17,"label",5)(18,"input",9),S("ngModelChange",function(r){return y(n.selectedTheme,r)||(n.selectedTheme=r),r}),p("change",function(){return n.onThemeChange()}),s(),P(19,"span",7),l(20," System "),s()()()(),a(21,"div",1)(22,"div",2)(23,"mat-icon"),l(24,"chat_bubble_outline"),s(),a(25,"span"),l(26,"Messaging"),s()(),a(27,"div",3)(28,"span",10),l(29,"Send message behavior:"),s(),a(30,"div",4)(31,"label",5)(32,"input",11),S("ngModelChange",function(r){return y(n.useEnterToSend,r)||(n.useEnterToSend=r),r}),p("change",function(){return n.onEnterToSendChange()}),s(),P(33,"span",7),l(34," Enter to send "),s(),a(35,"label",5)(36,"input",11),S("ngModelChange",function(r){return y(n.useEnterToSend,r)||(n.useEnterToSend=r),r}),p("change",function(){return n.onEnterToSendChange()}),s(),P(37,"span",7),l(38," Enter for new line "),s()()(),a(39,"div",3)(40,"div",12)(41,"span",10),l(42,"Show technical messages"),s(),a(43,"mat-slide-toggle",13),S("ngModelChange",function(r){return y(n.showTechnicalMessages,r)||(n.showTechnicalMessages=r),r}),p("change",function(){return n.onShowTechnicalMessagesChange()}),s()()(),a(44,"div",3)(45,"div",12)(46,"span",10),l(47,"Show warning messages"),s(),a(48,"mat-slide-toggle",13),S("ngModelChange",function(r){return y(n.showWarningMessages,r)||(n.showWarningMessages=r),r}),p("change",function(){return n.onShowWarningMessagesChange()}),s()()(),a(49,"div",3)(50,"div",12)(51,"span",10),l(52,"Include technical messages in print"),s(),a(53,"mat-slide-toggle",13),S("ngModelChange",function(r){return y(n.printTechnicalMessages,r)||(n.printTechnicalMessages=r),r}),p("change",function(){return n.onPrintTechnicalMessagesChange()}),s()()()(),a(54,"div",1)(55,"div",2)(56,"mat-icon"),l(57,"notifications"),s(),a(58,"span"),l(59,"Notifications"),s()(),a(60,"div",3)(61,"div",12)(62,"span",10),l(63,"Notify when the agent answers or requests input"),s(),a(64,"mat-slide-toggle",13),S("ngModelChange",function(r){return y(n.agentNotificationEnabled,r)||(n.agentNotificationEnabled=r),r}),p("change",function(){return n.onAgentNotificationEnabledChange()}),s()()(),a(65,"div",3)(66,"div",12)(67,"span",10),l(68,"Notification sound"),s(),a(69,"mat-slide-toggle",14),S("ngModelChange",function(r){return y(n.notificationSoundEnabled,r)||(n.notificationSoundEnabled=r),r}),p("change",function(){return n.onNotificationSoundEnabledChange()}),s()()(),a(70,"div",3)(71,"div",12)(72,"span",10),l(73,"Browser notification"),s(),a(74,"mat-slide-toggle",14),S("ngModelChange",function(r){return y(n.browserNotificationEnabled,r)||(n.browserNotificationEnabled=r),r}),p("change",function(){return n.onBrowserNotificationEnabledChange()}),s()(),m(75,en,5,0,"div",15),s()(),a(76,"div",1)(77,"div",2)(78,"mat-icon"),l(79,"record_voice_over"),s(),a(80,"span"),l(81,"Voice & Speech"),s()(),a(82,"div",3)(83,"label",16),l(84,"Voice recognition language:"),s(),a(85,"select",17),S("ngModelChange",function(r){return y(n.selectedVoiceLanguage,r)||(n.selectedVoiceLanguage=r),r}),p("change",function(){return n.onVoiceLanguageChange()}),R(86,tn,2,3,"option",18,Kt),s()(),a(88,"div",3)(89,"span",10),l(90,"Automatic announcement:"),s(),a(91,"div",4)(92,"label",5)(93,"input",19),S("ngModelChange",function(r){return y(n.voiceAnnounceEnabled,r)||(n.voiceAnnounceEnabled=r),r}),p("change",function(){return n.onVoiceAnnounceEnabledChange()}),s(),P(94,"span",7),l(95," Enabled "),s(),a(96,"label",5)(97,"input",19),S("ngModelChange",function(r){return y(n.voiceAnnounceEnabled,r)||(n.voiceAnnounceEnabled=r),r}),p("change",function(){return n.onVoiceAnnounceEnabledChange()}),s(),P(98,"span",7),l(99," Disabled "),s()()(),a(100,"div",3)(101,"span",10),l(102,"Voice mode:"),s(),a(103,"div",4)(104,"label",5)(105,"input",20),S("ngModelChange",function(r){return y(n.voiceMode,r)||(n.voiceMode=r),r}),p("change",function(){return n.onVoiceModeChange()}),s(),P(106,"span",7),l(107," Voice synthesis "),s(),a(108,"label",5)(109,"input",21),S("ngModelChange",function(r){return y(n.voiceMode,r)||(n.voiceMode=r),r}),p("change",function(){return n.onVoiceModeChange()}),s(),P(110,"span",7),l(111," Sound notification "),s()()(),a(112,"div",3)(113,"span",10),l(114,"Message reading:"),s(),a(115,"div",4)(116,"label",5)(117,"input",22),S("ngModelChange",function(r){return y(n.voiceReadFullText,r)||(n.voiceReadFullText=r),r}),p("change",function(){return n.onVoiceReadFullTextChange()}),s(),P(118,"span",7),l(119," Full message "),s(),a(120,"label",5)(121,"input",22),S("ngModelChange",function(r){return y(n.voiceReadFullText,r)||(n.voiceReadFullText=r),r}),p("change",function(){return n.onVoiceReadFullTextChange()}),s(),P(122,"span",7),l(123," First paragraphs only "),s()()(),a(124,"div",3)(125,"label",23),l(126,"Selected voice:"),s(),a(127,"select",24),S("ngModelChange",function(r){return y(n.selectedVoiceId,r)||(n.selectedVoiceId=r),r}),p("change",function(){return n.onSelectedVoiceChange()}),m(128,nn,2,0,"option",25),m(129,on,2,0,"option",25),R(130,rn,2,2,"option",18,Zt),s(),P(132,"div",10),a(133,"a",26),p("click",function(){return n.testVoice()}),a(134,"span",27),l(135,"Test voice"),s()()(),a(136,"div",3)(137,"label",28),l(138),s(),a(139,"input",29),S("ngModelChange",function(r){return y(n.voiceVolume,r)||(n.voiceVolume=r),r}),p("input",function(){return n.onVoiceVolumeChange()}),s()(),a(140,"div",3)(141,"label",30),l(142),s(),a(143,"input",31),S("ngModelChange",function(r){return y(n.voiceRate,r)||(n.voiceRate=r),r}),p("input",function(){return n.onVoiceRateChange()}),s()()()()),t&2&&(c(10),x("ngModel",n.selectedTheme),c(4),x("ngModel",n.selectedTheme),c(4),x("ngModel",n.selectedTheme),c(14),b("value",!0),x("ngModel",n.useEnterToSend),c(4),b("value",!1),x("ngModel",n.useEnterToSend),c(7),x("ngModel",n.showTechnicalMessages),c(5),x("ngModel",n.showWarningMessages),c(5),x("ngModel",n.printTechnicalMessages),c(11),x("ngModel",n.agentNotificationEnabled),c(5),x("ngModel",n.notificationSoundEnabled),b("disabled",!n.agentNotificationEnabled),c(5),x("ngModel",n.browserNotificationEnabled),b("disabled",!n.agentNotificationEnabled||n.browserNotificationDenied),c(),g(n.browserNotificationDenied?75:-1),c(10),x("ngModel",n.selectedVoiceLanguage),c(),L(n.voiceLanguageOptions),c(7),b("value",!0),x("ngModel",n.voiceAnnounceEnabled),c(4),b("value",!1),x("ngModel",n.voiceAnnounceEnabled),c(8),x("ngModel",n.voiceMode),c(4),x("ngModel",n.voiceMode),c(8),b("value",!0),x("ngModel",n.voiceReadFullText),c(4),b("value",!1),x("ngModel",n.voiceReadFullText),c(6),x("ngModel",n.selectedVoiceId),b("disabled",n.loadingVoices||n.availableVoices.length===0),c(),g(n.loadingVoices?128:-1),c(),g(!n.loadingVoices&&n.availableVoices.length===0?129:-1),c(),L(n.availableVoices),c(8),I("Volume: ",n.voiceVolume,"%"),c(),x("ngModel",n.voiceVolume),c(3),I("Speed: ",n.voiceRate,"%"),c(),x("ngModel",n.voiceRate))},dependencies:[H,ht,ut,B,mt,gt,pt,$,U,N,$t],styles:['.options-content[_ngcontent-%COMP%]{padding:0;width:100%}.option-group[_ngcontent-%COMP%]{padding:0 1rem 1rem;margin-bottom:1rem;border-bottom:1px solid var(--color-border-light)}.option-group[_ngcontent-%COMP%]:last-child{margin-bottom:0;padding-bottom:0;border-bottom:none}.option-label[_ngcontent-%COMP%]{display:block;margin-bottom:.5rem;font-weight:500;color:var(--color-text);font-size:.875rem}.toggle-option[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;gap:1rem}.toggle-option[_ngcontent-%COMP%] .option-label[_ngcontent-%COMP%]{margin-bottom:0;flex:1}.toggle-option[_ngcontent-%COMP%] mat-slide-toggle[_ngcontent-%COMP%]{flex-shrink:0}.option-select[_ngcontent-%COMP%]{width:100%;padding:.5rem;border:1px solid var(--color-border);border-radius:4px;background:var(--color-input-bg);color:var(--color-text);font-size:.875rem;cursor:pointer}.option-select[_ngcontent-%COMP%]:focus{outline:none;border-color:var(--color-primary);box-shadow:0 0 0 3px #7064fb1a}.option-select[_ngcontent-%COMP%]:disabled{opacity:.5;cursor:not-allowed}.option-select[_ngcontent-%COMP%] option[_ngcontent-%COMP%]{padding:.5rem}.option-checkbox[_ngcontent-%COMP%]{display:flex;align-items:center;cursor:pointer;font-size:.875rem;color:var(--color-text);-webkit-user-select:none;user-select:none}.option-checkbox[_ngcontent-%COMP%] input[type=checkbox][_ngcontent-%COMP%]{display:none}.option-checkbox[_ngcontent-%COMP%] .checkmark[_ngcontent-%COMP%]{width:18px;height:18px;border:2px solid var(--color-border);border-radius:3px;margin-right:.75rem;display:flex;align-items:center;justify-content:center;transition:all .2s ease;flex-shrink:0}.option-checkbox[_ngcontent-%COMP%] .checkmark[_ngcontent-%COMP%]:after{content:"";width:10px;height:6px;border-left:2px solid transparent;border-bottom:2px solid transparent;transform:rotate(-45deg);transition:all .2s ease;opacity:0}.option-checkbox[_ngcontent-%COMP%] input[type=checkbox][_ngcontent-%COMP%]:checked + .checkmark[_ngcontent-%COMP%]{background-color:var(--color-primary);border-color:var(--color-primary)}.option-checkbox[_ngcontent-%COMP%] input[type=checkbox][_ngcontent-%COMP%]:checked + .checkmark[_ngcontent-%COMP%]:after{border-left-color:#fff;border-bottom-color:#fff;opacity:1}.option-checkbox[_ngcontent-%COMP%]:hover .checkmark[_ngcontent-%COMP%]{border-color:var(--color-primary)}.option-checkbox[_ngcontent-%COMP%]:focus-within .checkmark[_ngcontent-%COMP%]{box-shadow:0 0 0 3px #7064fb1a}.option-section[_ngcontent-%COMP%]{padding-top:1rem;margin-top:1rem;border-top:2px solid var(--color-border)}.option-section[_ngcontent-%COMP%]:first-child{border-top:none;padding-top:0;margin-top:0}.section-title[_ngcontent-%COMP%]{margin:0 0 1rem;padding:0 1rem;font-size:.9rem;font-weight:600;color:var(--color-text);display:flex;align-items:center;gap:.5rem}.section-title[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:20px;width:20px;height:20px}.radio-group[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.5rem}.option-radio[_ngcontent-%COMP%]{display:flex;align-items:center;cursor:pointer;font-size:.875rem;color:var(--color-text);-webkit-user-select:none;user-select:none}.option-radio[_ngcontent-%COMP%] input[type=radio][_ngcontent-%COMP%]{display:none}.option-radio[_ngcontent-%COMP%] .radio-mark[_ngcontent-%COMP%]{width:16px;height:16px;border:2px solid var(--color-border);border-radius:50%;margin-right:.5rem;display:flex;align-items:center;justify-content:center;transition:all .2s ease;flex-shrink:0;position:relative}.option-radio[_ngcontent-%COMP%] .radio-mark[_ngcontent-%COMP%]:after{content:"";width:8px;height:8px;border-radius:50%;background-color:var(--color-primary);transition:all .2s ease;opacity:0;transform:scale(0)}.option-radio[_ngcontent-%COMP%] input[type=radio][_ngcontent-%COMP%]:checked + .radio-mark[_ngcontent-%COMP%]{border-color:var(--color-primary)}.option-radio[_ngcontent-%COMP%] input[type=radio][_ngcontent-%COMP%]:checked + .radio-mark[_ngcontent-%COMP%]:after{opacity:1;transform:scale(1)}.option-radio[_ngcontent-%COMP%]:hover .radio-mark[_ngcontent-%COMP%]{border-color:var(--color-primary)}.option-radio[_ngcontent-%COMP%]:focus-within .radio-mark[_ngcontent-%COMP%]{box-shadow:0 0 0 3px #7064fb1a}.option-slider[_ngcontent-%COMP%]{width:100%;height:6px;border-radius:3px;background:var(--color-bg-solid);outline:none;cursor:pointer;-webkit-appearance:none;appearance:none}.option-slider[_ngcontent-%COMP%]::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:20px;height:20px;border-radius:50%;background:var(--color-primary);cursor:pointer;border:2px solid white;box-shadow:0 2px 6px #0003;transition:all .2s ease}.option-slider[_ngcontent-%COMP%]::-webkit-slider-thumb:hover{transform:scale(1.1);box-shadow:0 2px 8px #0000004d}.option-slider[_ngcontent-%COMP%]::-moz-range-thumb{width:20px;height:20px;border-radius:50%;background:var(--color-primary);cursor:pointer;border:2px solid white;box-shadow:0 2px 6px #0003;transition:all .2s ease}.option-slider[_ngcontent-%COMP%]::-moz-range-thumb:hover{transform:scale(1.1);box-shadow:0 2px 8px #0000004d}.option-slider[_ngcontent-%COMP%]::-webkit-slider-track{height:6px;border-radius:3px;background:var(--color-bg-secondary)}.option-slider[_ngcontent-%COMP%]::-moz-range-track{height:6px;border-radius:3px;background:var(--color-bg-secondary);border:none}.option-slider[_ngcontent-%COMP%]:focus{outline:none}.option-slider[_ngcontent-%COMP%]:focus::-webkit-slider-thumb{box-shadow:0 0 0 3px #7064fb4d,0 2px 6px #0003}.option-slider[_ngcontent-%COMP%]:focus::-moz-range-thumb{box-shadow:0 0 0 3px #7064fb4d,0 2px 6px #0003}.test-voice-btn[_ngcontent-%COMP%]{width:100%;padding:.75rem 1rem;background:var(--color-primary);color:#fff;border:none;border-radius:6px;font-size:.875rem;font-weight:500;cursor:pointer;transition:all .2s ease;display:flex;align-items:center;justify-content:center;gap:.5rem}.test-voice-btn[_ngcontent-%COMP%]:hover{background:var(--color-primary-hover);transform:translateY(-1px);box-shadow:0 2px 8px #7064fb4d}.test-voice-btn[_ngcontent-%COMP%]:active{transform:translateY(0);box-shadow:0 1px 4px #7064fb4d}.test-voice-btn[_ngcontent-%COMP%]:focus{outline:none;box-shadow:0 0 0 3px #7064fb4d}.test-voice-btn[_ngcontent-%COMP%]:disabled{background:var(--color-bg-secondary);color:var(--color-text-secondary);cursor:not-allowed;transform:none;box-shadow:none}.test-voice-link[_ngcontent-%COMP%]{text-decoration-thickness:1.5px;text-underline-offset:3px;background:transparent;border:none;padding:0;font-size:.775rem;font-weight:400;cursor:pointer;transition:all .2s ease;display:inline-flex;align-items:center;justify-content:center;gap:.5rem;text-decoration:underline}.test-voice-link[_ngcontent-%COMP%]:hover{color:var(--color-primary-hover, var(--color-primary));text-decoration-thickness:2px}.test-voice-link[_ngcontent-%COMP%]:active{opacity:.8}.test-voice-link[_ngcontent-%COMP%]:focus{outline:2px solid var(--color-primary);outline-offset:2px}.test-voice-link[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:20px;width:20px;height:20px}.notification-error[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:.5rem;padding:.75rem;margin-top:.75rem;background-color:#d32f2f1a;border:1px solid rgba(211,47,47,.3);border-radius:6px;font-size:.8125rem;line-height:1.5}.notification-error[_ngcontent-%COMP%] .error-icon[_ngcontent-%COMP%]{color:#d32f2f;font-size:20px;width:20px;height:20px;flex-shrink:0;margin-top:2px}.notification-error[_ngcontent-%COMP%] .error-message[_ngcontent-%COMP%]{color:var(--color-text);flex:1}.notification-error[_ngcontent-%COMP%]{margin-top:.75rem;padding:.75rem;background-color:#f443361a;border:1px solid rgba(244,67,54,.3);border-radius:6px;display:flex;align-items:flex-start;gap:.5rem}.notification-error[_ngcontent-%COMP%] .error-icon[_ngcontent-%COMP%]{color:#f44336;font-size:20px;width:20px;height:20px;flex-shrink:0;margin-top:2px}.notification-error[_ngcontent-%COMP%] .error-message[_ngcontent-%COMP%]{font-size:.8125rem;color:var(--color-text);line-height:1.5;flex:1}']})};var an=(o,e)=>({subThreads:o,depth:e}),sn=o=>({subThreads:o,depth:1}),Yt=(o,e)=>e.id,ln=(o,e)=>e.label;function cn(o,e){if(o&1){let t=M();a(0,"mat-icon",10),p("click",function(i){u(t);let r=d().$implicit,h=d(3);return _(h.toggleSubThreads(i,r.id))}),l(1),s()}if(o&2){let t=d().$implicit,n=d(3);c(),w(n.isParentExpanded(t.id)?"expand_more":"chevron_right")}}function dn(o,e){o&1&&Ne(0)}function pn(o,e){if(o&1&&fe(0,dn,1,0,"ng-container",11),o&2){let t=d().$implicit,n=d().depth;d();let i=De(1);b("ngTemplateOutlet",i)("ngTemplateOutletContext",Xe(2,an,t.subThreads,n+1))}}function mn(o,e){if(o&1){let t=M();a(0,"div",5)(1,"a",6),p("click",function(i){let r=u(t).$implicit;return d(3).selectThread(r.id),_(i.preventDefault())})("keydown.enter",function(i){let r=u(t).$implicit;return d(3).selectThread(r.id),_(i.preventDefault())})("keydown.space",function(i){let r=u(t).$implicit;return d(3).selectThread(r.id),_(i.preventDefault())}),m(2,cn,2,1,"mat-icon",7),a(3,"span",8),l(4),s(),a(5,"span",9),l(6),s()()(),m(7,pn,1,5,"ng-container")}if(o&2){let t,n=e.$implicit,i=d().depth,r=d(2);G("--sub-depth",i),T("current",n.id===((t=r.currentThread())==null?null:t.id)),c(2),g(n.subThreads!=null&&n.subThreads.length?2:-1),c(2),w(n.delegatedAgentName||"Agent"),c(2),w(n.delegatedTask||n.name),c(),g(r.isParentExpanded(n.id)&&(n.subThreads!=null&&n.subThreads.length)?7:-1)}}function gn(o,e){if(o&1&&R(0,mn,8,8,null,null,Yt),o&2){let t=e.subThreads;L(t)}}function hn(o,e){o&1&&(a(0,"div",4),P(1,"span",12),a(2,"span",13),l(3,"Loading threads..."),s()())}function un(o,e){if(o&1&&(a(0,"div",25),l(1),s()),o&2){let t=d(6);c(),w(t.renameErrorMessage)}}function _n(o,e){if(o&1){let t=M();a(0,"div",18)(1,"input",24),S("ngModelChange",function(i){u(t);let r=d(5);return y(r.editingThreadName,i)||(r.editingThreadName=i),_(i)}),p("keydown",function(i){u(t);let r=d(5);return _(r.onEditKeydown(i))})("blur",function(){u(t);let i=d(5);return _(i.onEditBlur())})("click",function(i){return i.stopPropagation()}),s(),m(2,un,2,1,"div",25),s()}if(o&2){let t=d(5);c(),x("ngModel",t.editingThreadName),b("disabled",t.isRenamingThread),c(),g(t.renameErrorMessage?2:-1)}}function fn(o,e){if(o&1){let t=M();a(0,"mat-icon",10),p("click",function(i){u(t);let r=d(2).$implicit,h=d(4);return _(h.toggleSubThreads(i,r.id))}),l(1),s()}if(o&2){let t=d(2).$implicit,n=d(4);c(),w(n.isParentExpanded(t.id)?"expand_more":"chevron_right")}}function vn(o,e){if(o&1&&(a(0,"span",27),l(1),s()),o&2){let t=d(2).$implicit;c(),w(t.name)}}function bn(o,e){o&1&&(P(0,"mat-spinner",29),a(1,"span",30),l(2,"Generating name..."),s()),o&2&&b("diameter",16)}function Cn(o,e){o&1&&(a(0,"mat-icon",28),l(1,"group"),s())}function xn(o,e){if(o&1){let t=M();a(0,"a",26),p("click",function(i){u(t);let r=d().$implicit;return d(4).selectThread(r.id),_(i.preventDefault())})("keydown.enter",function(i){u(t);let r=d().$implicit;return d(4).selectThread(r.id),_(i.preventDefault())})("keydown.space",function(i){u(t);let r=d().$implicit;return d(4).selectThread(r.id),_(i.preventDefault())}),m(1,fn,2,1,"mat-icon",7),m(2,vn,2,1,"span",27)(3,bn,3,1),m(4,Cn,2,0,"mat-icon",28),s()}if(o&2){let t=d().$implicit,n=d(4);b("matTooltip",t.name?t.name+`
5
+ `).map(t=>this.addPeriodIfNeeded(t.trim())).filter(t=>t.length>0).join(" ")}addPeriodIfNeeded(e){return e?/[.!?;:]$/.test(e)?e:e+".":""}static \u0275fac=function(t){return new(t||o)};static \u0275prov=ge({token:o,factory:o.\u0275fac,providedIn:"root"})};var Kt=(o,e)=>e.code,Zt=(o,e)=>e.name+e.lang;function en(o,e){o&1&&(a(0,"div",15)(1,"mat-icon",32),l(2,"warning"),s(),a(3,"span",33),l(4," Browser notifications have been blocked. To enable them, please reset the site permissions in your browser settings. "),s()())}function tn(o,e){if(o&1&&(a(0,"option",18),l(1),s()),o&2){let t=e.$implicit;C("value",t.code),c(),He("",t.flag," ",t.label)}}function nn(o,e){o&1&&(a(0,"option",25),l(1,"Loading voices..."),s())}function on(o,e){o&1&&(a(0,"option",25),l(1,"No voice available"),s())}function rn(o,e){if(o&1&&(a(0,"option",18),l(1),s()),o&2){let t=e.$implicit;C("value",t.name+"|"+t.lang),c(),I(" ",t.displayName," ")}}var pe=class o{destroy$=new F;selectedTheme="light";selectedVoiceLanguage="en-US";useEnterToSend=!1;printTechnicalMessages=!1;showTechnicalMessages=!0;showWarningMessages=!0;voiceAnnounceEnabled=!1;voiceMode="speech";voiceReadFullText=!1;voiceVolume=80;voiceRate=120;agentNotificationEnabled=!1;notificationSoundEnabled=!0;browserNotificationEnabled=!1;browserNotificationDenied=!1;availableVoices=[];selectedVoiceId=null;loadingVoices=!1;voiceLanguageOptions=[{code:"fr-FR",label:"Fran\xE7ais",flag:"\u{1F1EB}\u{1F1F7}"},{code:"en-US",label:"English (US)",flag:"\u{1F1FA}\u{1F1F8}"},{code:"en-GB",label:"English (UK)",flag:"\u{1F1EC}\u{1F1E7}"},{code:"es-ES",label:"Espa\xF1ol",flag:"\u{1F1EA}\u{1F1F8}"},{code:"de-DE",label:"Deutsch",flag:"\u{1F1E9}\u{1F1EA}"},{code:"it-IT",label:"Italiano",flag:"\u{1F1EE}\u{1F1F9}"},{code:"pt-BR",label:"Portugu\xEAs",flag:"\u{1F1E7}\u{1F1F7}"},{code:"ja-JP",label:"\u65E5\u672C\u8A9E",flag:"\u{1F1EF}\u{1F1F5}"},{code:"ko-KR",label:"\uD55C\uAD6D\uC5B4",flag:"\u{1F1F0}\u{1F1F7}"},{code:"zh-CN",label:"\u4E2D\u6587 (\u7B80\u4F53)",flag:"\u{1F1E8}\u{1F1F3}"},{code:"ru-RU",label:"\u0420\u0443\u0441\u0441\u043A\u0438\u0439",flag:"\u{1F1F7}\u{1F1FA}"},{code:"ar-SA",label:"\u0627\u0644\u0639\u0631\u0628\u064A\u0629",flag:"\u{1F1F8}\u{1F1E6}"}];preferencesService=v(ie);voiceSynthesisService=v(Ee);themeService=v(Bt);ngOnInit(){this.selectedTheme=this.themeService.getCurrentTheme(),this.selectedVoiceLanguage=this.preferencesService.getVoiceLanguage(),this.useEnterToSend=this.preferencesService.getEnterToSend(),this.printTechnicalMessages=this.preferencesService.getPrintTechnicalMessages(),this.showTechnicalMessages=!this.preferencesService.getHideTechnicalMessages(),this.showWarningMessages=!this.preferencesService.getHideWarningMessages(),this.voiceAnnounceEnabled=this.preferencesService.getVoiceAnnounceEnabled(),this.voiceMode=this.preferencesService.getVoiceMode(),this.voiceReadFullText=this.preferencesService.getVoiceReadFullText(),this.voiceVolume=Math.round(this.preferencesService.getVoiceVolume()*100),this.voiceRate=Math.round(this.preferencesService.getVoiceRate()*100),this.selectedVoiceId=this.preferencesService.getSelectedVoice(),this.agentNotificationEnabled=this.preferencesService.getAgentNotificationEnabled(),this.notificationSoundEnabled=this.preferencesService.getNotificationSoundEnabled(),this.browserNotificationEnabled=this.preferencesService.getBrowserNotificationEnabled(),this.loadAvailableVoices(),this.themeService.currentTheme$.pipe(b(this.destroy$)).subscribe(e=>{this.selectedTheme=e}),this.preferencesService.voiceLanguage$.pipe(b(this.destroy$)).subscribe(e=>{this.selectedVoiceLanguage=e}),this.preferencesService.enterToSend$.pipe(b(this.destroy$)).subscribe(e=>{this.useEnterToSend=e}),this.preferencesService.printTechnicalMessages$.pipe(b(this.destroy$)).subscribe(e=>{this.printTechnicalMessages=e}),this.preferencesService.hideTechnicalMessages$.pipe(b(this.destroy$)).subscribe(e=>{this.showTechnicalMessages=!e}),this.preferencesService.hideWarningMessages$.pipe(b(this.destroy$)).subscribe(e=>{this.showWarningMessages=!e}),this.preferencesService.voiceAnnounceEnabled$.pipe(b(this.destroy$)).subscribe(e=>{this.voiceAnnounceEnabled=e}),this.preferencesService.voiceMode$.pipe(b(this.destroy$)).subscribe(e=>{this.voiceMode=e}),this.preferencesService.voiceReadFullText$.pipe(b(this.destroy$)).subscribe(e=>{this.voiceReadFullText=e}),this.preferencesService.voiceVolume$.pipe(b(this.destroy$)).subscribe(e=>{this.voiceVolume=Math.round(e*100)}),this.preferencesService.voiceRate$.pipe(b(this.destroy$)).subscribe(e=>{this.voiceRate=Math.round(e*100)}),this.preferencesService.selectedVoice$.pipe(b(this.destroy$)).subscribe(e=>{this.selectedVoiceId=e}),this.preferencesService.voiceLanguage$.pipe(b(this.destroy$)).subscribe(()=>{this.loadAvailableVoices()}),this.preferencesService.agentNotificationEnabled$.pipe(b(this.destroy$)).subscribe(e=>{this.agentNotificationEnabled=e}),this.preferencesService.notificationSoundEnabled$.pipe(b(this.destroy$)).subscribe(e=>{this.notificationSoundEnabled=e}),this.preferencesService.browserNotificationEnabled$.pipe(b(this.destroy$)).subscribe(e=>{this.browserNotificationEnabled=e,this.checkNotificationPermission()})}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete()}onThemeChange(){console.log("[OPTIONS] Theme changed to:",this.selectedTheme),this.themeService.setTheme(this.selectedTheme)}onVoiceLanguageChange(){console.log("[OPTIONS] Voice language changed to:",this.selectedVoiceLanguage),this.preferencesService.setVoiceLanguage(this.selectedVoiceLanguage)}onEnterToSendChange(){console.log("[OPTIONS] Enter to send changed to:",this.useEnterToSend),this.preferencesService.setEnterToSend(this.useEnterToSend)}onPrintTechnicalMessagesChange(){console.log("[OPTIONS] Print technical messages changed to:",this.printTechnicalMessages),this.preferencesService.setPrintTechnicalMessages(this.printTechnicalMessages)}onShowTechnicalMessagesChange(){let e=!this.showTechnicalMessages;console.log("[OPTIONS] Show technical messages changed to:",this.showTechnicalMessages,"(hide:",e,")"),this.preferencesService.setHideTechnicalMessages(e)}onShowWarningMessagesChange(){let e=!this.showWarningMessages;console.log("[OPTIONS] Show warning messages changed to:",this.showWarningMessages,"(hide:",e,")"),this.preferencesService.setHideWarningMessages(e)}onVoiceAnnounceEnabledChange(){console.log("[OPTIONS] Voice announce enabled changed to:",this.voiceAnnounceEnabled),this.preferencesService.setVoiceAnnounceEnabled(this.voiceAnnounceEnabled)}onVoiceModeChange(){console.log("[OPTIONS] Voice mode changed to:",this.voiceMode),this.preferencesService.setVoiceMode(this.voiceMode)}onVoiceReadFullTextChange(){console.log("[OPTIONS] Voice read full text changed to:",this.voiceReadFullText),this.preferencesService.setVoiceReadFullText(this.voiceReadFullText)}onVoiceVolumeChange(){let e=this.voiceVolume/100;console.log("[OPTIONS] Voice volume changed to:",e),this.preferencesService.setVoiceVolume(e)}onVoiceRateChange(){let e=this.voiceRate/100;console.log("[OPTIONS] Voice rate changed to:",e),this.preferencesService.setVoiceRate(e)}loadAvailableVoices(){return q(this,null,function*(){this.loadingVoices=!0;try{this.availableVoices=yield this.voiceSynthesisService.getVoicesForLanguage(),console.log("[OPTIONS] Loaded",this.availableVoices.length,"voices for current language")}catch(e){console.error("[OPTIONS] Error loading voices:",e),this.availableVoices=[]}finally{this.loadingVoices=!1}})}onSelectedVoiceChange(){console.log("[OPTIONS] Selected voice changed to:",this.selectedVoiceId),this.preferencesService.setSelectedVoice(this.selectedVoiceId)}testVoice(){console.log("[OPTIONS] Testing voice with current settings"),this.voiceSynthesisService.testSelectedVoice()}onAgentNotificationEnabledChange(){console.log("[OPTIONS] Agent notification enabled changed to:",this.agentNotificationEnabled),this.preferencesService.setAgentNotificationEnabled(this.agentNotificationEnabled)}onNotificationSoundEnabledChange(){console.log("[OPTIONS] Notification sound enabled changed to:",this.notificationSoundEnabled),this.preferencesService.setNotificationSoundEnabled(this.notificationSoundEnabled)}onBrowserNotificationEnabledChange(){console.log("[OPTIONS] Browser notification enabled changed to:",this.browserNotificationEnabled),this.preferencesService.setBrowserNotificationEnabled(this.browserNotificationEnabled)}checkNotificationPermission(){"Notification"in window&&(this.browserNotificationDenied=Notification.permission==="denied",console.log("[OPTIONS] Notification permission status:",Notification.permission))}static \u0275fac=function(t){return new(t||o)};static \u0275cmp=V({type:o,selectors:[["app-options-panel"]],decls:144,vars:35,consts:[[1,"options-content"],[1,"option-section"],[1,"section-title"],[1,"option-group"],[1,"radio-group"],[1,"option-radio"],["type","radio","name","theme","value","light",3,"ngModelChange","change","ngModel"],[1,"radio-mark"],["type","radio","name","theme","value","dark",3,"ngModelChange","change","ngModel"],["type","radio","name","theme","value","system",3,"ngModelChange","change","ngModel"],[1,"option-label"],["type","radio","name","enterBehavior",3,"ngModelChange","change","value","ngModel"],[1,"toggle-option"],["color","primary",3,"ngModelChange","change","ngModel"],["color","primary",3,"ngModelChange","change","ngModel","disabled"],[1,"notification-error"],["for","voice-language-select",1,"option-label"],["id","voice-language-select",1,"option-select",3,"ngModelChange","change","ngModel"],[3,"value"],["type","radio","name","voiceAnnounce",3,"ngModelChange","change","value","ngModel"],["type","radio","name","voiceMode","value","speech",3,"ngModelChange","change","ngModel"],["type","radio","name","voiceMode","value","notification",3,"ngModelChange","change","ngModel"],["type","radio","name","voiceReadFull",3,"ngModelChange","change","value","ngModel"],["for","voice-select",1,"option-label"],["id","voice-select",1,"option-select",3,"ngModelChange","change","ngModel","disabled"],["value",""],["role","button","tabindex","0","title","Test voice with current settings",1,"test-voice-link",3,"click"],[1,"thread-name"],["for","voice-volume-slider",1,"option-label"],["id","voice-volume-slider","type","range","min","0","max","100","step","5",1,"option-slider",3,"ngModelChange","input","ngModel"],["for","voice-rate-slider",1,"option-label"],["id","voice-rate-slider","type","range","min","50","max","200","step","10",1,"option-slider",3,"ngModelChange","input","ngModel"],[1,"error-icon"],[1,"error-message"]],template:function(t,n){t&1&&(a(0,"div",0)(1,"div",1)(2,"div",2)(3,"mat-icon"),l(4,"palette"),s(),a(5,"span"),l(6,"Appearance"),s()(),a(7,"div",3)(8,"div",4)(9,"label",5)(10,"input",6),S("ngModelChange",function(r){return y(n.selectedTheme,r)||(n.selectedTheme=r),r}),p("change",function(){return n.onThemeChange()}),s(),T(11,"span",7),l(12," Light "),s(),a(13,"label",5)(14,"input",8),S("ngModelChange",function(r){return y(n.selectedTheme,r)||(n.selectedTheme=r),r}),p("change",function(){return n.onThemeChange()}),s(),T(15,"span",7),l(16," Dark "),s(),a(17,"label",5)(18,"input",9),S("ngModelChange",function(r){return y(n.selectedTheme,r)||(n.selectedTheme=r),r}),p("change",function(){return n.onThemeChange()}),s(),T(19,"span",7),l(20," System "),s()()()(),a(21,"div",1)(22,"div",2)(23,"mat-icon"),l(24,"chat_bubble_outline"),s(),a(25,"span"),l(26,"Messaging"),s()(),a(27,"div",3)(28,"span",10),l(29,"Send message behavior:"),s(),a(30,"div",4)(31,"label",5)(32,"input",11),S("ngModelChange",function(r){return y(n.useEnterToSend,r)||(n.useEnterToSend=r),r}),p("change",function(){return n.onEnterToSendChange()}),s(),T(33,"span",7),l(34," Enter to send "),s(),a(35,"label",5)(36,"input",11),S("ngModelChange",function(r){return y(n.useEnterToSend,r)||(n.useEnterToSend=r),r}),p("change",function(){return n.onEnterToSendChange()}),s(),T(37,"span",7),l(38," Enter for new line "),s()()(),a(39,"div",3)(40,"div",12)(41,"span",10),l(42,"Show technical messages"),s(),a(43,"mat-slide-toggle",13),S("ngModelChange",function(r){return y(n.showTechnicalMessages,r)||(n.showTechnicalMessages=r),r}),p("change",function(){return n.onShowTechnicalMessagesChange()}),s()()(),a(44,"div",3)(45,"div",12)(46,"span",10),l(47,"Show warning messages"),s(),a(48,"mat-slide-toggle",13),S("ngModelChange",function(r){return y(n.showWarningMessages,r)||(n.showWarningMessages=r),r}),p("change",function(){return n.onShowWarningMessagesChange()}),s()()(),a(49,"div",3)(50,"div",12)(51,"span",10),l(52,"Include technical messages in print"),s(),a(53,"mat-slide-toggle",13),S("ngModelChange",function(r){return y(n.printTechnicalMessages,r)||(n.printTechnicalMessages=r),r}),p("change",function(){return n.onPrintTechnicalMessagesChange()}),s()()()(),a(54,"div",1)(55,"div",2)(56,"mat-icon"),l(57,"notifications"),s(),a(58,"span"),l(59,"Notifications"),s()(),a(60,"div",3)(61,"div",12)(62,"span",10),l(63,"Notify when the agent answers or requests input"),s(),a(64,"mat-slide-toggle",13),S("ngModelChange",function(r){return y(n.agentNotificationEnabled,r)||(n.agentNotificationEnabled=r),r}),p("change",function(){return n.onAgentNotificationEnabledChange()}),s()()(),a(65,"div",3)(66,"div",12)(67,"span",10),l(68,"Notification sound"),s(),a(69,"mat-slide-toggle",14),S("ngModelChange",function(r){return y(n.notificationSoundEnabled,r)||(n.notificationSoundEnabled=r),r}),p("change",function(){return n.onNotificationSoundEnabledChange()}),s()()(),a(70,"div",3)(71,"div",12)(72,"span",10),l(73,"Browser notification"),s(),a(74,"mat-slide-toggle",14),S("ngModelChange",function(r){return y(n.browserNotificationEnabled,r)||(n.browserNotificationEnabled=r),r}),p("change",function(){return n.onBrowserNotificationEnabledChange()}),s()(),m(75,en,5,0,"div",15),s()(),a(76,"div",1)(77,"div",2)(78,"mat-icon"),l(79,"record_voice_over"),s(),a(80,"span"),l(81,"Voice & Speech"),s()(),a(82,"div",3)(83,"label",16),l(84,"Voice recognition language:"),s(),a(85,"select",17),S("ngModelChange",function(r){return y(n.selectedVoiceLanguage,r)||(n.selectedVoiceLanguage=r),r}),p("change",function(){return n.onVoiceLanguageChange()}),R(86,tn,2,3,"option",18,Kt),s()(),a(88,"div",3)(89,"span",10),l(90,"Automatic announcement:"),s(),a(91,"div",4)(92,"label",5)(93,"input",19),S("ngModelChange",function(r){return y(n.voiceAnnounceEnabled,r)||(n.voiceAnnounceEnabled=r),r}),p("change",function(){return n.onVoiceAnnounceEnabledChange()}),s(),T(94,"span",7),l(95," Enabled "),s(),a(96,"label",5)(97,"input",19),S("ngModelChange",function(r){return y(n.voiceAnnounceEnabled,r)||(n.voiceAnnounceEnabled=r),r}),p("change",function(){return n.onVoiceAnnounceEnabledChange()}),s(),T(98,"span",7),l(99," Disabled "),s()()(),a(100,"div",3)(101,"span",10),l(102,"Voice mode:"),s(),a(103,"div",4)(104,"label",5)(105,"input",20),S("ngModelChange",function(r){return y(n.voiceMode,r)||(n.voiceMode=r),r}),p("change",function(){return n.onVoiceModeChange()}),s(),T(106,"span",7),l(107," Voice synthesis "),s(),a(108,"label",5)(109,"input",21),S("ngModelChange",function(r){return y(n.voiceMode,r)||(n.voiceMode=r),r}),p("change",function(){return n.onVoiceModeChange()}),s(),T(110,"span",7),l(111," Sound notification "),s()()(),a(112,"div",3)(113,"span",10),l(114,"Message reading:"),s(),a(115,"div",4)(116,"label",5)(117,"input",22),S("ngModelChange",function(r){return y(n.voiceReadFullText,r)||(n.voiceReadFullText=r),r}),p("change",function(){return n.onVoiceReadFullTextChange()}),s(),T(118,"span",7),l(119," Full message "),s(),a(120,"label",5)(121,"input",22),S("ngModelChange",function(r){return y(n.voiceReadFullText,r)||(n.voiceReadFullText=r),r}),p("change",function(){return n.onVoiceReadFullTextChange()}),s(),T(122,"span",7),l(123," First paragraphs only "),s()()(),a(124,"div",3)(125,"label",23),l(126,"Selected voice:"),s(),a(127,"select",24),S("ngModelChange",function(r){return y(n.selectedVoiceId,r)||(n.selectedVoiceId=r),r}),p("change",function(){return n.onSelectedVoiceChange()}),m(128,nn,2,0,"option",25),m(129,on,2,0,"option",25),R(130,rn,2,2,"option",18,Zt),s(),T(132,"div",10),a(133,"a",26),p("click",function(){return n.testVoice()}),a(134,"span",27),l(135,"Test voice"),s()()(),a(136,"div",3)(137,"label",28),l(138),s(),a(139,"input",29),S("ngModelChange",function(r){return y(n.voiceVolume,r)||(n.voiceVolume=r),r}),p("input",function(){return n.onVoiceVolumeChange()}),s()(),a(140,"div",3)(141,"label",30),l(142),s(),a(143,"input",31),S("ngModelChange",function(r){return y(n.voiceRate,r)||(n.voiceRate=r),r}),p("input",function(){return n.onVoiceRateChange()}),s()()()()),t&2&&(c(10),x("ngModel",n.selectedTheme),c(4),x("ngModel",n.selectedTheme),c(4),x("ngModel",n.selectedTheme),c(14),C("value",!0),x("ngModel",n.useEnterToSend),c(4),C("value",!1),x("ngModel",n.useEnterToSend),c(7),x("ngModel",n.showTechnicalMessages),c(5),x("ngModel",n.showWarningMessages),c(5),x("ngModel",n.printTechnicalMessages),c(11),x("ngModel",n.agentNotificationEnabled),c(5),x("ngModel",n.notificationSoundEnabled),C("disabled",!n.agentNotificationEnabled),c(5),x("ngModel",n.browserNotificationEnabled),C("disabled",!n.agentNotificationEnabled||n.browserNotificationDenied),c(),g(n.browserNotificationDenied?75:-1),c(10),x("ngModel",n.selectedVoiceLanguage),c(),L(n.voiceLanguageOptions),c(7),C("value",!0),x("ngModel",n.voiceAnnounceEnabled),c(4),C("value",!1),x("ngModel",n.voiceAnnounceEnabled),c(8),x("ngModel",n.voiceMode),c(4),x("ngModel",n.voiceMode),c(8),C("value",!0),x("ngModel",n.voiceReadFullText),c(4),C("value",!1),x("ngModel",n.voiceReadFullText),c(6),x("ngModel",n.selectedVoiceId),C("disabled",n.loadingVoices||n.availableVoices.length===0),c(),g(n.loadingVoices?128:-1),c(),g(!n.loadingVoices&&n.availableVoices.length===0?129:-1),c(),L(n.availableVoices),c(8),I("Volume: ",n.voiceVolume,"%"),c(),x("ngModel",n.voiceVolume),c(3),I("Speed: ",n.voiceRate,"%"),c(),x("ngModel",n.voiceRate))},dependencies:[H,ht,ut,B,mt,gt,pt,$,U,N,$t],styles:['.options-content[_ngcontent-%COMP%]{padding:0;width:100%}.option-group[_ngcontent-%COMP%]{padding:0 1rem 1rem;margin-bottom:1rem;border-bottom:1px solid var(--color-border-light)}.option-group[_ngcontent-%COMP%]:last-child{margin-bottom:0;padding-bottom:0;border-bottom:none}.option-label[_ngcontent-%COMP%]{display:block;margin-bottom:.5rem;font-weight:500;color:var(--color-text);font-size:.875rem}.toggle-option[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;gap:1rem}.toggle-option[_ngcontent-%COMP%] .option-label[_ngcontent-%COMP%]{margin-bottom:0;flex:1}.toggle-option[_ngcontent-%COMP%] mat-slide-toggle[_ngcontent-%COMP%]{flex-shrink:0}.option-select[_ngcontent-%COMP%]{width:100%;padding:.5rem;border:1px solid var(--color-border);border-radius:4px;background:var(--color-input-bg);color:var(--color-text);font-size:.875rem;cursor:pointer}.option-select[_ngcontent-%COMP%]:focus{outline:none;border-color:var(--color-primary);box-shadow:0 0 0 3px #7064fb1a}.option-select[_ngcontent-%COMP%]:disabled{opacity:.5;cursor:not-allowed}.option-select[_ngcontent-%COMP%] option[_ngcontent-%COMP%]{padding:.5rem}.option-checkbox[_ngcontent-%COMP%]{display:flex;align-items:center;cursor:pointer;font-size:.875rem;color:var(--color-text);-webkit-user-select:none;user-select:none}.option-checkbox[_ngcontent-%COMP%] input[type=checkbox][_ngcontent-%COMP%]{display:none}.option-checkbox[_ngcontent-%COMP%] .checkmark[_ngcontent-%COMP%]{width:18px;height:18px;border:2px solid var(--color-border);border-radius:3px;margin-right:.75rem;display:flex;align-items:center;justify-content:center;transition:all .2s ease;flex-shrink:0}.option-checkbox[_ngcontent-%COMP%] .checkmark[_ngcontent-%COMP%]:after{content:"";width:10px;height:6px;border-left:2px solid transparent;border-bottom:2px solid transparent;transform:rotate(-45deg);transition:all .2s ease;opacity:0}.option-checkbox[_ngcontent-%COMP%] input[type=checkbox][_ngcontent-%COMP%]:checked + .checkmark[_ngcontent-%COMP%]{background-color:var(--color-primary);border-color:var(--color-primary)}.option-checkbox[_ngcontent-%COMP%] input[type=checkbox][_ngcontent-%COMP%]:checked + .checkmark[_ngcontent-%COMP%]:after{border-left-color:#fff;border-bottom-color:#fff;opacity:1}.option-checkbox[_ngcontent-%COMP%]:hover .checkmark[_ngcontent-%COMP%]{border-color:var(--color-primary)}.option-checkbox[_ngcontent-%COMP%]:focus-within .checkmark[_ngcontent-%COMP%]{box-shadow:0 0 0 3px #7064fb1a}.option-section[_ngcontent-%COMP%]{padding-top:1rem;margin-top:1rem;border-top:2px solid var(--color-border)}.option-section[_ngcontent-%COMP%]:first-child{border-top:none;padding-top:0;margin-top:0}.section-title[_ngcontent-%COMP%]{margin:0 0 1rem;padding:0 1rem;font-size:.9rem;font-weight:600;color:var(--color-text);display:flex;align-items:center;gap:.5rem}.section-title[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:20px;width:20px;height:20px}.radio-group[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.5rem}.option-radio[_ngcontent-%COMP%]{display:flex;align-items:center;cursor:pointer;font-size:.875rem;color:var(--color-text);-webkit-user-select:none;user-select:none}.option-radio[_ngcontent-%COMP%] input[type=radio][_ngcontent-%COMP%]{display:none}.option-radio[_ngcontent-%COMP%] .radio-mark[_ngcontent-%COMP%]{width:16px;height:16px;border:2px solid var(--color-border);border-radius:50%;margin-right:.5rem;display:flex;align-items:center;justify-content:center;transition:all .2s ease;flex-shrink:0;position:relative}.option-radio[_ngcontent-%COMP%] .radio-mark[_ngcontent-%COMP%]:after{content:"";width:8px;height:8px;border-radius:50%;background-color:var(--color-primary);transition:all .2s ease;opacity:0;transform:scale(0)}.option-radio[_ngcontent-%COMP%] input[type=radio][_ngcontent-%COMP%]:checked + .radio-mark[_ngcontent-%COMP%]{border-color:var(--color-primary)}.option-radio[_ngcontent-%COMP%] input[type=radio][_ngcontent-%COMP%]:checked + .radio-mark[_ngcontent-%COMP%]:after{opacity:1;transform:scale(1)}.option-radio[_ngcontent-%COMP%]:hover .radio-mark[_ngcontent-%COMP%]{border-color:var(--color-primary)}.option-radio[_ngcontent-%COMP%]:focus-within .radio-mark[_ngcontent-%COMP%]{box-shadow:0 0 0 3px #7064fb1a}.option-slider[_ngcontent-%COMP%]{width:100%;height:6px;border-radius:3px;background:var(--color-bg-solid);outline:none;cursor:pointer;-webkit-appearance:none;appearance:none}.option-slider[_ngcontent-%COMP%]::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:20px;height:20px;border-radius:50%;background:var(--color-primary);cursor:pointer;border:2px solid white;box-shadow:0 2px 6px #0003;transition:all .2s ease}.option-slider[_ngcontent-%COMP%]::-webkit-slider-thumb:hover{transform:scale(1.1);box-shadow:0 2px 8px #0000004d}.option-slider[_ngcontent-%COMP%]::-moz-range-thumb{width:20px;height:20px;border-radius:50%;background:var(--color-primary);cursor:pointer;border:2px solid white;box-shadow:0 2px 6px #0003;transition:all .2s ease}.option-slider[_ngcontent-%COMP%]::-moz-range-thumb:hover{transform:scale(1.1);box-shadow:0 2px 8px #0000004d}.option-slider[_ngcontent-%COMP%]::-webkit-slider-track{height:6px;border-radius:3px;background:var(--color-bg-secondary)}.option-slider[_ngcontent-%COMP%]::-moz-range-track{height:6px;border-radius:3px;background:var(--color-bg-secondary);border:none}.option-slider[_ngcontent-%COMP%]:focus{outline:none}.option-slider[_ngcontent-%COMP%]:focus::-webkit-slider-thumb{box-shadow:0 0 0 3px #7064fb4d,0 2px 6px #0003}.option-slider[_ngcontent-%COMP%]:focus::-moz-range-thumb{box-shadow:0 0 0 3px #7064fb4d,0 2px 6px #0003}.test-voice-btn[_ngcontent-%COMP%]{width:100%;padding:.75rem 1rem;background:var(--color-primary);color:#fff;border:none;border-radius:6px;font-size:.875rem;font-weight:500;cursor:pointer;transition:all .2s ease;display:flex;align-items:center;justify-content:center;gap:.5rem}.test-voice-btn[_ngcontent-%COMP%]:hover{background:var(--color-primary-hover);transform:translateY(-1px);box-shadow:0 2px 8px #7064fb4d}.test-voice-btn[_ngcontent-%COMP%]:active{transform:translateY(0);box-shadow:0 1px 4px #7064fb4d}.test-voice-btn[_ngcontent-%COMP%]:focus{outline:none;box-shadow:0 0 0 3px #7064fb4d}.test-voice-btn[_ngcontent-%COMP%]:disabled{background:var(--color-bg-secondary);color:var(--color-text-secondary);cursor:not-allowed;transform:none;box-shadow:none}.test-voice-link[_ngcontent-%COMP%]{text-decoration-thickness:1.5px;text-underline-offset:3px;background:transparent;border:none;padding:0;font-size:.775rem;font-weight:400;cursor:pointer;transition:all .2s ease;display:inline-flex;align-items:center;justify-content:center;gap:.5rem;text-decoration:underline}.test-voice-link[_ngcontent-%COMP%]:hover{color:var(--color-primary-hover, var(--color-primary));text-decoration-thickness:2px}.test-voice-link[_ngcontent-%COMP%]:active{opacity:.8}.test-voice-link[_ngcontent-%COMP%]:focus{outline:2px solid var(--color-primary);outline-offset:2px}.test-voice-link[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:20px;width:20px;height:20px}.notification-error[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:.5rem;padding:.75rem;margin-top:.75rem;background-color:#d32f2f1a;border:1px solid rgba(211,47,47,.3);border-radius:6px;font-size:.8125rem;line-height:1.5}.notification-error[_ngcontent-%COMP%] .error-icon[_ngcontent-%COMP%]{color:#d32f2f;font-size:20px;width:20px;height:20px;flex-shrink:0;margin-top:2px}.notification-error[_ngcontent-%COMP%] .error-message[_ngcontent-%COMP%]{color:var(--color-text);flex:1}.notification-error[_ngcontent-%COMP%]{margin-top:.75rem;padding:.75rem;background-color:#f443361a;border:1px solid rgba(244,67,54,.3);border-radius:6px;display:flex;align-items:flex-start;gap:.5rem}.notification-error[_ngcontent-%COMP%] .error-icon[_ngcontent-%COMP%]{color:#f44336;font-size:20px;width:20px;height:20px;flex-shrink:0;margin-top:2px}.notification-error[_ngcontent-%COMP%] .error-message[_ngcontent-%COMP%]{font-size:.8125rem;color:var(--color-text);line-height:1.5;flex:1}']})};var an=(o,e)=>({subThreads:o,depth:e}),sn=o=>({subThreads:o,depth:1}),Yt=(o,e)=>e.id,ln=(o,e)=>e.label;function cn(o,e){if(o&1){let t=M();a(0,"mat-icon",10),p("click",function(i){u(t);let r=d().$implicit,h=d(3);return _(h.toggleSubThreads(i,r.id))}),l(1),s()}if(o&2){let t=d().$implicit,n=d(3);c(),w(n.isParentExpanded(t.id)?"expand_more":"chevron_right")}}function dn(o,e){o&1&&Ne(0)}function pn(o,e){if(o&1&&fe(0,dn,1,0,"ng-container",11),o&2){let t=d().$implicit,n=d().depth;d();let i=De(1);C("ngTemplateOutlet",i)("ngTemplateOutletContext",Xe(2,an,t.subThreads,n+1))}}function mn(o,e){if(o&1){let t=M();a(0,"div",5)(1,"a",6),p("click",function(i){let r=u(t).$implicit;return d(3).selectThread(r.id),_(i.preventDefault())})("keydown.enter",function(i){let r=u(t).$implicit;return d(3).selectThread(r.id),_(i.preventDefault())})("keydown.space",function(i){let r=u(t).$implicit;return d(3).selectThread(r.id),_(i.preventDefault())}),m(2,cn,2,1,"mat-icon",7),a(3,"span",8),l(4),s(),a(5,"span",9),l(6),s()()(),m(7,pn,1,5,"ng-container")}if(o&2){let t,n=e.$implicit,i=d().depth,r=d(2);G("--sub-depth",i),P("current",n.id===((t=r.currentThread())==null?null:t.id)),c(2),g(n.subThreads!=null&&n.subThreads.length?2:-1),c(2),w(n.delegatedAgentName||"Agent"),c(2),w(n.delegatedTask||n.name),c(),g(r.isParentExpanded(n.id)&&(n.subThreads!=null&&n.subThreads.length)?7:-1)}}function gn(o,e){if(o&1&&R(0,mn,8,8,null,null,Yt),o&2){let t=e.subThreads;L(t)}}function hn(o,e){o&1&&(a(0,"div",4),T(1,"span",12),a(2,"span",13),l(3,"Loading threads..."),s()())}function un(o,e){if(o&1&&(a(0,"div",25),l(1),s()),o&2){let t=d(6);c(),w(t.renameErrorMessage)}}function _n(o,e){if(o&1){let t=M();a(0,"div",18)(1,"input",24),S("ngModelChange",function(i){u(t);let r=d(5);return y(r.editingThreadName,i)||(r.editingThreadName=i),_(i)}),p("keydown",function(i){u(t);let r=d(5);return _(r.onEditKeydown(i))})("blur",function(){u(t);let i=d(5);return _(i.onEditBlur())})("click",function(i){return i.stopPropagation()}),s(),m(2,un,2,1,"div",25),s()}if(o&2){let t=d(5);c(),x("ngModel",t.editingThreadName),C("disabled",t.isRenamingThread),c(),g(t.renameErrorMessage?2:-1)}}function fn(o,e){if(o&1){let t=M();a(0,"mat-icon",10),p("click",function(i){u(t);let r=d(2).$implicit,h=d(4);return _(h.toggleSubThreads(i,r.id))}),l(1),s()}if(o&2){let t=d(2).$implicit,n=d(4);c(),w(n.isParentExpanded(t.id)?"expand_more":"chevron_right")}}function vn(o,e){if(o&1&&(a(0,"span",27),l(1),s()),o&2){let t=d(2).$implicit;c(),w(t.name)}}function bn(o,e){o&1&&(T(0,"mat-spinner",29),a(1,"span",30),l(2,"Generating name..."),s()),o&2&&C("diameter",16)}function Cn(o,e){o&1&&(a(0,"mat-icon",28),l(1,"group"),s())}function xn(o,e){if(o&1){let t=M();a(0,"a",26),p("click",function(i){u(t);let r=d().$implicit;return d(4).selectThread(r.id),_(i.preventDefault())})("keydown.enter",function(i){u(t);let r=d().$implicit;return d(4).selectThread(r.id),_(i.preventDefault())})("keydown.space",function(i){u(t);let r=d().$implicit;return d(4).selectThread(r.id),_(i.preventDefault())}),m(1,fn,2,1,"mat-icon",7),m(2,vn,2,1,"span",27)(3,bn,3,1),m(4,Cn,2,0,"mat-icon",28),s()}if(o&2){let t=d().$implicit,n=d(4);C("matTooltip",t.name?t.name+`
6
6
 
7
- `+(t.summary||""):t.summary||"")("matTooltipDisabled",!t.summary),c(),g(t.subThreads!=null&&t.subThreads.length?1:-1),c(),g(t.name?2:3),c(2),g(n.isSharedThread(t)?4:-1)}}function yn(o,e){if(o&1){let t=M();a(0,"button",31),p("click",function(i){u(t);let r=d().$implicit,h=d(4);return _(h.startEditingThreadName(i,r))}),a(1,"mat-icon"),l(2,"edit"),s()()}}function Sn(o,e){o&1&&Ne(0)}function Mn(o,e){if(o&1&&fe(0,Sn,1,0,"ng-container",11),o&2){let t=d().$implicit;d(3);let n=De(1);b("ngTemplateOutlet",n)("ngTemplateOutletContext",Qe(2,sn,t.subThreads))}}function Pn(o,e){if(o&1){let t=M();a(0,"div",17),m(1,_n,3,3,"div",18)(2,xn,5,5,"a",19),a(3,"div",20),m(4,yn,3,0,"button",21),a(5,"button",22),p("click",function(i){let r=u(t).$implicit,h=d(4);return _(h.toggleStar(i,r))}),a(6,"mat-icon"),l(7),s()(),a(8,"button",23),p("click",function(i){let r=u(t).$implicit,h=d(4);return _(h.deleteThread(i,r))}),a(9,"mat-icon"),l(10,"delete"),s()()()(),m(11,Mn,1,4,"ng-container")}if(o&2){let t,n=e.$implicit,i=d(4);T("current",n.id===((t=i.currentThread())==null?null:t.id)),c(),g(i.editingThreadId===n.id?1:2),c(3),g(i.editingThreadId!==n.id&&n.name?4:-1),c(),T("starred",i.isStarred(n)),b("title",i.isStarred(n)?"Unstar thread":"Star thread"),c(2),w(i.isStarred(n)?"star":"star_outline"),c(4),g(i.isParentExpanded(n.id)&&(n.subThreads!=null&&n.subThreads.length)?11:-1)}}function Tn(o,e){if(o&1&&(a(0,"div",14)(1,"div",16),l(2),s(),R(3,Pn,12,9,null,null,Yt),s()),o&2){let t=e.$implicit;c(2),w(t.label),c(),L(t.threads)}}function wn(o,e){o&1&&(a(0,"div",15),l(1,"No existing threads"),s())}function On(o,e){if(o&1&&(a(0,"div",15),l(1),s()),o&2){let t=d(3);c(),I('No threads matching "',t.searchQuery(),'"')}}function En(o,e){if(o&1&&(R(0,Tn,5,1,"div",14,ln),m(2,wn,2,0,"div",15)(3,On,2,1,"div",15)),o&2){let t,n=d(2);L(n.getGroupedThreads()),c(2),g(!((t=n.threads())!=null&&t.length)&&!n.searchQuery()?2:n.searchQuery()&&n.getGroupedThreads().length===0?3:-1)}}function kn(o,e){if(o&1&&(fe(0,gn,2,0,"ng-template",null,0,Je),a(2,"div",3),m(3,hn,4,0,"div",4)(4,En,4,1),s()),o&2){let t=d();c(3),g(t.isLoadingThreadList()?3:4)}}function Vn(o,e){o&1&&(a(0,"span",32),l(1,"No project selected"),s())}function In(o,e){o&1&&(a(0,"span",32),l(1,"Loading..."),s())}function jn(o,e){if(o&1&&(a(0,"div",2),m(1,Vn,2,0,"span",32)(2,In,2,0,"span",32),s()),o&2){let t,n=d();c(),g((t=n.currentProject())!=null&&t.name?2:1)}}var Ve=class o{projects=null;searchMode=!1;searchQuery=ye("");searchModeChange=new se;threadSelected=new se;projectStateService=v(Te);threadStateService=v(we);threadApiService=v(rt);userService=v(Oe);router=v(Se);destroyRef=v(ue);currentThread=O(this.threadStateService.selectedThread$);currentProject=O(this.projectStateService.selectedProject$);threads=O(this.threadStateService.threadList$);isLoadingThreadList=O(this.threadStateService.isLoadingThreadList$);username=O(this.userService.username$);isTouchDevice="ontouchstart"in window||navigator.maxTouchPoints>0;editingThreadId=null;editingThreadName="";isRenamingThread=!1;renameErrorMessage="";expandedParents=new Set;constructor(){le(()=>{let e=this.currentThread()?.id,t=this.threads();if(!e||!t?.length)return;let n=new Map;for(let r of t)r.parentThreadId&&n.set(r.id,r.parentThreadId);let i=e;for(;i;){let r=n.get(i);r&&this.expandedParents.add(r),i=r}})}ngOnInit(){this.userService.fetchCurrentUser().subscribe({error:e=>{console.error("[THREAD-SELECTOR] Failed to load current user:",e)}})}selectThread(e){this.threadStateService.selectThread(e),this.threadSelected.emit(),this.router.navigate(["project",this.currentProject()?.name,"thread",e])}getGroupedThreads(){let e=this.threads();if(!e?.length)return[];let t=new Set(e.map(f=>f.id)),n=e.filter(f=>!f.parentThreadId),i=e.filter(f=>!!f.parentThreadId),r=i.filter(f=>!t.has(f.parentThreadId)),h=i.filter(f=>t.has(f.parentThreadId)),k=new Map;for(let f of h){let E=f.parentThreadId;k.has(E)||k.set(E,[]),k.get(E).push(f)}let K=f=>(k.get(f)||[]).sort((z,J)=>z.modifiedDate>J.modifiedDate?-1:1).map(z=>re(Y({},z),{subThreads:K(z.id)})),D=[...n,...r];if(this.searchQuery()&&this.searchQuery().trim()){let f=this.searchQuery().toLowerCase().trim();D=D.filter(E=>E.name.toLowerCase().includes(f)||E.summary&&E.summary.toLowerCase().includes(f))}if(!D.length)return[];let Z=this.username();if(!Z)return[];let Re=D.map(f=>re(Y({},f),{subThreads:K(f.id)})),Le=Re.filter(f=>f.starring&&f.starring.includes(Z)),Gt=Re.filter(f=>!f.starring||!f.starring.includes(Z)),oe=new Map,ze=new Date;ze.setHours(0,0,0,0);for(let f of Gt){let E=new Date(f.modifiedDate);E.setHours(0,0,0,0);let z=ze.getTime()-E.getTime(),J=Math.floor(z/(1e3*60*60*24)),A;J===0?A="Today":J===1?A="Yesterday":J<7?A="This Week":J<30?A="This Month":J<90?A="Last 3 Months":A="Older",oe.has(A)||oe.set(A,[]),oe.get(A).push(f)}let je=[];if(Le.length>0){let f=[...Le].sort((E,z)=>E.modifiedDate>z.modifiedDate?-1:1);je.push({label:"Starred",threads:f})}return["Today","Yesterday","This Week","This Month","Last 3 Months","Older"].filter(f=>oe.has(f)).forEach(f=>{je.push({label:f,threads:oe.get(f)})}),je}isParentExpanded(e){return this.expandedParents.has(e)}toggleSubThreads(e,t){e.stopPropagation(),this.expandedParents.has(t)?this.expandedParents.delete(t):this.expandedParents.add(t)}isSubThread(e){return!!e.parentThreadId}isSharedThread(e){return e.users&&e.users.length>1}isStarred(e){let t=this.username();return!!t&&e.starring&&e.starring.includes(t)}toggleStar(e,t){e.stopPropagation();let n=this.username();if(!n)return;let i=t.starring&&t.starring.includes(n),r=i?this.threadApiService.unstarThread(t.id):this.threadApiService.starThread(t.id);this.threadStateService.updateStarLocal(t.id,!i,n),r.pipe(Q(this.destroyRef)).subscribe({next:()=>{},error:h=>{console.error("Error toggling star:",h),this.threadStateService.refreshThreadList()}})}deleteThread(e,t){e.stopPropagation();let n=this.currentProject()?.name;!n||!confirm(`Are you sure you want to delete the thread "${t.name}"?`)||this.threadApiService.deleteThread(t.id).subscribe({next:()=>{this.currentThread()?.id===t.id&&(this.threadStateService.clearSelection(),this.router.navigate(["project",n])),this.threadStateService.refreshThreadList()},error:r=>{console.error("Error deleting thread:",r),alert("Failed to delete thread. Please try again.")}})}formatDate(e){try{let t=new Date(e),i=new Date().getTime()-t.getTime(),r=Math.floor(i/(1e3*60*60*24));return r===0?"Today":r===1?"Yesterday":r<7?`${r} days ago`:t.toLocaleDateString("en-EN",{day:"numeric",month:"short"})}catch(t){return"No date"}}startEditingThreadName(e,t){e.stopPropagation(),this.editingThreadId=t.id,this.editingThreadName=t.name||"",this.renameErrorMessage="",setTimeout(()=>{let n=document.querySelector(".thread-name-input");n&&(n.focus(),n.select())},0)}cancelEditingThreadName(){this.editingThreadId=null,this.editingThreadName="",this.renameErrorMessage=""}saveThreadName(e){if(e&&e.stopPropagation(),!this.editingThreadId)return;let t=this.editingThreadName.trim();if(!t){this.renameErrorMessage="Thread name cannot be empty";return}if(t.length>200){this.renameErrorMessage="Thread name is too long (max 200 characters)";return}let n=this.editingThreadId;this.isRenamingThread=!0,this.renameErrorMessage="",this.threadStateService.renameThread(n,t).subscribe({next:()=>{console.log("[THREAD-SELECTOR] Thread renamed successfully"),this.cancelEditingThreadName(),this.isRenamingThread=!1},error:i=>{console.error("[THREAD-SELECTOR] Error renaming thread:",i),this.renameErrorMessage=i.message||"Failed to rename thread",this.isRenamingThread=!1}})}onEditKeydown(e){e.key==="Enter"?(e.preventDefault(),e.stopPropagation(),this.saveThreadName()):e.key==="Escape"&&(e.preventDefault(),e.stopPropagation(),this.cancelEditingThreadName())}onEditBlur(){setTimeout(()=>{this.editingThreadId&&!this.isRenamingThread&&this.saveThreadName()},200)}static \u0275fac=function(t){return new(t||o)};static \u0275cmp=V({type:o,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","","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"],[1,"disabled-text"]],template:function(t,n){if(t&1&&(a(0,"div",1),p("click",function(r){return r.stopPropagation()})("keydown",function(r){return r.stopPropagation()}),m(1,kn,5,1)(2,jn,3,1,"div",2),s()),t&2){let i;c(),g((i=n.currentProject())!=null&&i.name?1:2)}},dependencies:[Ye,H,B,$,_t,U,ne,N,te,W,ft,dt,ct,lt,st,at],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}.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 Nn=["logsContent"],Dn=(o,e)=>e.name;function An(o,e){if(o&1){let t=M();a(0,"button",12),p("click",function(){u(t);let i=d().$implicit,r=d();return _(r.start(i.name))}),a(1,"mat-icon"),l(2,"play_arrow"),s()()}if(o&2){let t=d().$implicit;b("disabled",t.isLoading)}}function Fn(o,e){if(o&1){let t=M();a(0,"button",13),p("click",function(){u(t);let i=d().$implicit,r=d();return _(r.stop(i.name))}),a(1,"mat-icon"),l(2,"stop"),s()()}if(o&2){let t=d().$implicit;b("disabled",t.isLoading)}}function Rn(o,e){if(o&1&&(a(0,"a",8)(1,"mat-icon",14),l(2,"open_in_new"),s()()),o&2){let t=d().$implicit;b("href",t.url,ce)("title",t.url)}}function Ln(o,e){if(o&1&&(a(0,"div",15),l(1),s()),o&2){let t=d(),n=t.$implicit,i=t.$index;G("order",i*2),c(),w(n.errorMessage)}}function zn(o,e){if(o&1){let t=M();a(0,"button",21),p("click",function(){u(t);let i=d(3);return _(i.onManualRefresh())}),a(1,"mat-icon"),l(2,"refresh"),s()()}}function Wn(o,e){if(o&1&&(a(0,"div",16)(1,"div",17)(2,"span",18),l(3),s(),m(4,zn,3,0,"button",19),s(),a(5,"pre",20,0),l(7),s()()),o&2){let t=d(),n=t.$implicit,i=t.$index,r=d();G("order",i*2+1),c(3),I("",n.name," logs"),c(),g(n.status==="running"?4:-1),c(3),w(r.logs()||"(empty)")}}function Bn(o,e){if(o&1){let t=M();a(0,"div",2)(1,"span",3),l(2),s(),a(3,"div",4),m(4,An,3,1,"button",5)(5,Fn,3,1,"button",6),a(6,"span",7),l(7),s(),m(8,Rn,3,2,"a",8),a(9,"button",9),p("click",function(){let i=u(t).$implicit,r=d();return _(r.toggleLogs(i.name))}),a(10,"mat-icon"),l(11),s()()()(),m(12,Ln,2,3,"div",10),m(13,Wn,8,5,"div",11)}if(o&2){let t=e.$implicit,n=e.$index,i=d();G("order",n*2),c(2),w(t.name),c(2),g(t.status==="stopped"?4:5),c(2),T("running",t.status==="running"),c(),I(" ",t.status==="running"?"Running":"Stopped"," "),c(),g(t.url?8:-1),c(),b("title",i.logsOpenFor()===t.name?"Hide logs":"Show logs"),c(2),w(i.logsOpenFor()===t.name?"expand_less":"terminal"),c(),g(t.errorMessage?12:-1),c(),g(i.logsOpenFor()===t.name?13:-1)}}var Ie=class o{destroyRef=v(ue);projectApi=v(Pe);projectName=ye.required();entryStates=ee([]);hasPreview=xe(()=>this.entryStates().length>0);logsOpenFor=ee(null);logs=ee("");logsContent;logsPollTimer=null;logsTimeoutTimer=null;static LOGS_POLL_MS=5e3;static LOGS_TIMEOUT_MS=1200*1e3;constructor(){le(()=>{let e=this.projectName();e&&this.onProjectChanged(e)},{allowSignalWrites:!0}),le(()=>{console.log("entry states",this.entryStates())})}ngOnDestroy(){this.stopLogPolling()}onProjectChanged(e){this.stopLogPolling(),this.entryStates.set([]),this.logsOpenFor.set(null),this.logs.set(""),this.projectApi.getPreviewEntries(e).pipe(Q(this.destroyRef)).subscribe({next:t=>{let n=t.entries;if(n.length===0)return;let i=n.map(h=>({name:h.name,command:h.command,url:h.url,status:"stopped",isLoading:!1,errorMessage:""}));this.entryStates.set(i);let r=n.map(h=>this.projectApi.getPreviewStatus(e,h.name));We(r).pipe(Q(this.destroyRef)).subscribe({next:h=>{this.entryStates.update(k=>k.map((K,D)=>{let Z=h[D];return Z?re(Y({},K),{status:Z.status}):K}))},error:()=>{}})},error:()=>{}})}start(e){this.updateEntry(e,{isLoading:!0,errorMessage:""}),this.projectApi.startPreview(this.projectName(),e).pipe(Q(this.destroyRef)).subscribe({next:t=>{this.updateEntry(e,{status:t.status,isLoading:!1})},error:t=>{this.updateEntry(e,{errorMessage:t?.error?.error??"Failed to start preview",isLoading:!1})}})}stop(e){this.updateEntry(e,{isLoading:!0,errorMessage:""}),this.projectApi.stopPreview(this.projectName(),e).pipe(Q(this.destroyRef)).subscribe({next:()=>{this.updateEntry(e,{status:"stopped",isLoading:!1}),this.logsOpenFor()===e&&this.stopLogPolling()},error:t=>{this.updateEntry(e,{errorMessage:t?.error?.error??"Failed to stop preview",isLoading:!1})}})}toggleLogs(e){this.logsOpenFor()===e?(this.logsOpenFor.set(null),this.logs.set(""),this.stopLogPolling()):(this.logsOpenFor.set(e),this.refreshLogs(),this.startLogPolling())}onManualRefresh(){this.refreshLogs(),this.logsPollTimer&&this.resetLogsTimeout()}refreshLogs(){let e=this.logsOpenFor();e&&this.projectApi.getPreviewLogs(this.projectName(),e).pipe(Q(this.destroyRef)).subscribe({next:t=>{this.logs.set(t.logs),this.scrollLogsToBottom()},error:()=>this.logs.set("(failed to load logs)")})}updateEntry(e,t){this.entryStates.update(n=>n.map(i=>i.name===e?Y(Y({},i),t):i))}startLogPolling(){this.stopLogPolling(),this.logsPollTimer=setInterval(()=>{this.logsOpenFor()?this.refreshLogs():this.stopLogPolling()},o.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()},o.LOGS_TIMEOUT_MS)}scrollLogsToBottom(){setTimeout(()=>{let e=this.logsContent?.nativeElement;e&&(e.scrollTop=e.scrollHeight)})}static \u0275fac=function(t){return new(t||o)};static \u0275cmp=V({type:o,selectors:[["app-preview-panel"]],viewQuery:function(t,n){if(t&1&&ve(Nn,5),t&2){let i;be(i=Ce())&&(n.logsContent=i.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(t,n){t&1&&(a(0,"div",1),R(1,Bn,14,12,null,null,Dn),s()),t&2&&(c(),L(n.entryStates()))},dependencies:[te,W,ne,N],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}"]})};function $n(o,e){if(o&1&&(a(0,"div",3),l(1),s()),o&2){let t=d();c(),I("\u274C ",t.errorMessage)}}var me=class o{dialogRef=v(Ke);data=v(Ze);jsonContent;errorMessage="";title;constructor(){this.jsonContent=this.data.initialContent,this.title=this.data.title||this.getDefaultTitle(this.data.configType,this.data.projectName)}getDefaultTitle(e,t){return e==="user"?"User Configuration":`Project Configuration: ${t||"Unknown"}`}onSave(){this.errorMessage="";let e;try{e=JSON.parse(this.jsonContent)}catch(t){this.errorMessage=`Invalid JSON syntax: ${t instanceof Error?t.message:"Unknown error"}`;return}this.dialogRef.close(e)}onCancel(){this.dialogRef.close()}static \u0275fac=function(t){return new(t||o)};static \u0275cmp=V({type:o,selectors:[["app-json-editor"]],decls:13,vars:3,consts:[["mat-dialog-title",""],["mat-icon-button","","title","Close",1,"close-button",3,"click"],["spellcheck","false","placeholder","Enter JSON configuration...",1,"json-textarea",3,"ngModelChange","ngModel"],[1,"error-message"],["align","end"],["matButton","",3,"click"],["matButton","filled","color","primary",3,"click"]],template:function(t,n){t&1&&(a(0,"div",0),l(1),a(2,"button",1),p("click",function(){return n.onCancel()}),a(3,"mat-icon"),l(4,"close"),s()()(),a(5,"mat-dialog-content")(6,"textarea",2),S("ngModelChange",function(r){return y(n.jsonContent,r)||(n.jsonContent=r),r}),s(),m(7,$n,2,1,"div",3),s(),a(8,"mat-dialog-actions",4)(9,"button",5),p("click",function(){return n.onCancel()}),l(10,"Cancel"),s(),a(11,"button",6),p("click",function(){return n.onSave()}),l(12,"Save"),s()()),t&2&&(c(),I(" ",n.title," "),c(5),x("ngModel",n.jsonContent),c(),g(n.errorMessage?7:-1))},dependencies:[qe,H,B,$,U,N,W,ot,tt,nt,it],styles:["[mat-dialog-title][_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center}[mat-dialog-title][_ngcontent-%COMP%] .close-button[_ngcontent-%COMP%]{margin-left:auto}mat-dialog-content[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:1rem;min-height:400px}.json-textarea[_ngcontent-%COMP%]{flex:1;min-height:300px;max-height:80vh;padding:1rem;font-family:Monaco,Menlo,Ubuntu Mono,Consolas,monospace;font-size:.875rem;line-height:1.5;background:var(--color-code-bg);color:var(--color-text);border:1px solid var(--color-border);border-radius:4px;resize:vertical;outline:none;transition:border-color .2s}.json-textarea[_ngcontent-%COMP%]:focus{border-color:var(--color-primary)}.json-textarea[_ngcontent-%COMP%]::placeholder{color:var(--color-text-secondary);opacity:.6}.error-message[_ngcontent-%COMP%]{padding:.75rem 1rem;border-radius:4px;font-size:.875rem;line-height:1.4;background:#dc26261a;color:#dc2626;border:1px solid rgba(220,38,38,.3)}"]})};var Un=["threadSearchInput"],Hn=["*"];function Qn(o,e){if(o&1){let t=M();a(0,"button",27),p("click",function(){u(t);let i=d();return _(i.toggle())}),a(1,"mat-icon"),l(2,"menu"),s()(),a(3,"button",28),p("click",function(){u(t);let i=d();return _(i.createNewThread())}),a(4,"mat-icon",10),l(5,"play_circle"),s()()}if(o&2){let t=d();c(3),b("disabled",!t.selectedProjectName())}}function Xn(o,e){if(o&1){let t=M();a(0,"div",12)(1,"a",29),p("click",function(i){return u(t),d().openMissionControl(),_(i.preventDefault())}),a(2,"mat-icon"),l(3,"rocket_launch"),s(),a(4,"span",30),l(5,"Task Control"),s()()()}}function Jn(o,e){if(o&1){let t=M();a(0,"div",15)(1,"mat-icon",31),l(2,"search"),s(),a(3,"input",32,0),S("ngModelChange",function(i){u(t);let r=d();return y(r.threadSearchQuery,i)||(r.threadSearchQuery=i),_(i)}),p("input",function(){u(t);let i=d();return _(i.onThreadSearchInput())}),s(),a(5,"button",33),p("click",function(){u(t);let i=d();return _(i.closeThreadSearch())}),a(6,"mat-icon"),l(7,"close"),s()()()}if(o&2){let t=d();c(3),x("ngModel",t.threadSearchQuery)}}function Yn(o,e){if(o&1){let t=M();a(0,"div",16)(1,"mat-icon",23),l(2,"forum"),s(),a(3,"span",24),l(4,"Threads"),s(),a(5,"button",34),p("click",function(i){u(t);let r=d();return _(r.toggleThreadSearch(i))}),a(6,"mat-icon"),l(7,"search"),s()()()}}function qn(o,e){o&1&&(a(0,"mat-icon",22),l(1,"keyboard_arrow_up"),s())}function Gn(o,e){o&1&&(a(0,"mat-icon",23),l(1,"hub"),s())}function Kn(o,e){o&1&&(a(0,"mat-icon",22),l(1,"keyboard_arrow_up"),s())}function Zn(o,e){o&1&&(a(0,"mat-icon",23),l(1,"tune"),s())}function ei(o,e){o&1&&(a(0,"div",36)(1,"div",40),P(2,"app-options-panel",41),s()())}function ti(o,e){if(o&1){let t=M();a(0,"div",35)(1,"a",21),p("click",function(i){return u(t),d(3).openProjectConfig(),i.preventDefault(),_(i.stopPropagation())}),a(2,"mat-icon",23),l(3,"settings_applications"),s(),a(4,"span",24),l(5,"Project Configuration"),s()()()}}function ni(o,e){o&1&&(a(0,"div",35)(1,"a",42)(2,"mat-icon",23),l(3,"settings_applications"),s(),a(4,"span",24),l(5,"Project config (No project)"),s()()())}function ii(o,e){if(o&1&&m(0,ti,6,0,"div",35)(1,ni,6,0,"div",35),o&2){let t=d(2);g(t.selectedProjectName()?0:1)}}function oi(o,e){if(o&1){let t=M();a(0,"div",35)(1,"a",21),p("click",function(i){return u(t),d(2).openAgents(),i.preventDefault(),_(i.stopPropagation())}),a(2,"mat-icon",23),l(3,"smart_toy"),s(),a(4,"span",24),l(5,"Agents"),s()()()}}function ri(o,e){o&1&&(a(0,"div",35)(1,"a",42)(2,"mat-icon",23),l(3,"smart_toy"),s(),a(4,"span",24),l(5,"Agents (No project)"),s()()())}function ai(o,e){if(o&1){let t=M();a(0,"div",35)(1,"a",21),p("click",function(i){return u(t),d(2).openPrompts(),i.preventDefault(),_(i.stopPropagation())}),a(2,"mat-icon",23),l(3,"description"),s(),a(4,"span",24),l(5,"Prompts"),s()()()}}function si(o,e){o&1&&(a(0,"div",35)(1,"a",42)(2,"mat-icon",23),l(3,"description"),s(),a(4,"span",24),l(5,"Prompts (No project)"),s()()())}function li(o,e){if(o&1){let t=M();a(0,"div",35)(1,"a",21),p("click",function(i){return u(t),d(2).openSchedulers(),i.preventDefault(),_(i.stopPropagation())}),a(2,"mat-icon",23),l(3,"schedule"),s(),a(4,"span",24),l(5,"Schedulers"),s()()()}}function ci(o,e){o&1&&(a(0,"div",35)(1,"a",42)(2,"mat-icon",23),l(3,"schedule"),s(),a(4,"span",24),l(5,"Schedulers (No project)"),s()()())}function di(o,e){o&1&&(a(0,"mat-icon",22),l(1,"keyboard_arrow_up"),s())}function pi(o,e){o&1&&(a(0,"mat-icon",23),l(1,"rocket_launch"),s())}function mi(o,e){if(o&1&&(a(0,"div",36),P(1,"app-preview-panel",43),s()),o&2){let t=d(3);c(),b("projectName",t.selectedProjectName())}}function gi(o,e){if(o&1){let t=M();a(0,"div",35)(1,"a",21),p("click",function(i){return u(t),d(2).toggleSection("preview"),i.preventDefault(),_(i.stopPropagation())}),m(2,di,2,0,"mat-icon",22)(3,pi,2,0,"mat-icon",23),a(4,"span",24),l(5,"Preview Server"),s()(),m(6,mi,2,1,"div",36),s()}if(o&2){let t=d(2);T("expanded",t.expandedSections.preview),c(),T("active",t.expandedSections.preview),c(),g(t.expandedSections.preview?2:3),c(4),g(t.expandedSections.preview?6:-1)}}function hi(o,e){if(o&1){let t=M();a(0,"div",25)(1,"div",35)(2,"a",21),p("click",function(i){return u(t),d().toggleSection("config"),_(i.preventDefault())}),m(3,Kn,2,0,"mat-icon",22)(4,Zn,2,0,"mat-icon",23),a(5,"span",24),l(6,"Preferences"),s()(),m(7,ei,3,0,"div",36),s(),a(8,"div",35)(9,"a",21),p("click",function(i){return u(t),d().openTokenUsage(),i.preventDefault(),_(i.stopPropagation())}),a(10,"mat-icon",23),l(11,"data_usage"),s(),a(12,"span",24),l(13,"Token Usage"),s()()(),a(14,"div",35)(15,"a",21),p("click",function(i){return u(t),d().openUserConfig(),i.preventDefault(),_(i.stopPropagation())}),a(16,"mat-icon",23),l(17,"manage_accounts"),s(),a(18,"span",24),l(19,"User Configuration"),s()()(),m(20,ii,2,1),m(21,oi,6,0,"div",35)(22,ri,6,0,"div",35),m(23,ai,6,0,"div",35)(24,si,6,0,"div",35),m(25,li,6,0,"div",35)(26,ci,6,0,"div",35),m(27,gi,7,6,"div",37),a(28,"div",35)(29,"a",38),P(30,"img",39),a(31,"span",24),l(32,"Contribute on GitHub"),s()()()()}if(o&2){let t=d();c(),T("expanded",t.expandedSections.config),c(),T("active",t.expandedSections.config),c(),g(t.expandedSections.config?3:4),c(4),g(t.expandedSections.config?7:-1),c(13),g(t.isAdmin?20:-1),c(),g(t.selectedProjectName()?21:22),c(2),g(t.selectedProjectName()?23:24),c(2),g(t.selectedProjectName()?25:26),c(2),g(t.hasPreviewConfig()?27:-1),c(3),de("src","CODAY-Logo.png",ce)}}function ui(o,e){if(o&1){let t=M();a(0,"div",26)(1,"mat-icon",44),l(2,"warning"),s(),a(3,"span",45),l(4),s(),a(5,"button",46),p("click",function(){u(t);let i=d();return _(i.configErrorMessage="")}),a(6,"mat-icon"),l(7,"close"),s()()()}if(o&2){let t=d();c(4),w(t.configErrorMessage)}}var qt=class o{destroy$=new F;sidenavStateChange=new se;drawerOpen=!1;breakpointObserver=v(Ge);isDesktop=O(this.breakpointObserver.observe("(min-width: 1400px)").pipe(ae(e=>e.matches)),{initialValue:!1});userOpenPreference=ee(!0);isOpen=xe(()=>this.userOpenPreference());isAdmin=!1;configErrorMessage="";expandedSections={config:!1,preview:!1,settings:!1};isThreadSearchActive=!1;threadSearchQuery="";threadSearchInput;dialog=v(et);configApi=v(Wt);projectStateService=v(Te);projectApi=v(Pe);router=v(Se);preferences=v(ie);threadStateService=v(we);projects=O(this.projectStateService.projectList$);selectedProject=O(this.projectStateService.selectedProject$);selectedProjectName=O(this.projectStateService.selectedProject$.pipe(ae(e=>e?.name)));isProjectVolatile=O(this.projectStateService.selectedProject$.pipe(ae(e=>e?.config?.volatile||!1)));forcedProject=O(this.projectStateService.forcedProject$);hasPreviewConfig=O(this.projectStateService.selectedProject$.pipe(ae(e=>{let t=e?.config?.preview;return Array.isArray(t)&&!!t.length})),{initialValue:!1});ngOnInit(){let e=window.innerWidth>=1024,t=this.preferences.getPreference("sidenavOpen",e);this.userOpenPreference.set(t??e),this.configApi.getUserConfig().pipe(C(this.destroy$)).subscribe({next:n=>{this.isAdmin=n.groups?.includes("CODAY_ADMIN")??!1,console.log("[SIDENAV] User admin status:",this.isAdmin)},error:n=>{console.error("[SIDENAV] Error loading user config for roles:",n),this.isAdmin=!1}})}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete()}toggle(){let e=!this.userOpenPreference();this.userOpenPreference.set(e),this.saveSidenavState(e),this.sidenavStateChange.emit(e)}close(){this.userOpenPreference()&&(this.userOpenPreference.set(!1),this.saveSidenavState(!1),this.sidenavStateChange.emit(!1))}saveSidenavState(e){this.preferences.setPreference("sidenavOpen",e)}openTokenUsage(){this.configErrorMessage="",this.router.navigate(["/token-usage"])}openUserConfig(){console.log("[SIDENAV] openUserConfig called"),this.configErrorMessage="",this.configApi.getUserConfig().pipe(C(this.destroy$)).subscribe({next:e=>{console.log("[SIDENAV] User config loaded, opening dialog"),this.dialog.open(me,{data:{configType:"user",initialContent:JSON.stringify(e,null,2)}}).afterClosed().subscribe(n=>{n&&this.saveUserConfig(n)})},error:e=>{console.error("[SIDENAV] Error loading user config:",e),this.configErrorMessage=e?.error?.error||"Failed to load user configuration"}})}saveUserConfig(e){this.configApi.updateUserConfig(e).pipe(C(this.destroy$)).subscribe({next:t=>{console.log("[SIDENAV] User config saved successfully")},error:t=>{console.error("[SIDENAV] Error saving user config:",t),this.configErrorMessage=t?.error?.error||"Failed to save user configuration"}})}openProjectConfig(){let e=this.selectedProjectName();if(!e){console.error("[SIDENAV] No project selected"),this.configErrorMessage="No project selected. Please select a project first.";return}this.configErrorMessage="",this.projectApi.getProjectConfig(e).pipe(C(this.destroy$)).subscribe({next:t=>{console.log("[SIDENAV] Project config loaded, opening dialog"),this.dialog.open(me,{data:{configType:"project",projectName:e,initialContent:JSON.stringify(t,null,2)}}).afterClosed().subscribe(i=>{i&&this.saveProjectConfig(e,i)})},error:t=>{console.error("[SIDENAV] Error loading project config:",t),this.configErrorMessage=t?.error?.error||"Failed to load project configuration"}})}saveProjectConfig(e,t){this.projectApi.updateProjectConfig(e,t).pipe(C(this.destroy$)).subscribe({next:n=>{console.log("[SIDENAV] Project config saved successfully")},error:n=>{console.error("[SIDENAV] Error saving project config:",n),this.configErrorMessage=n?.error?.error||"Failed to save project configuration"}})}requireProjectSelection(e){return this.selectedProjectName()?!0:(console.error(`[SIDENAV] No project selected, cannot ${e}`),this.configErrorMessage="Please select a project first",!1)}openAgents(){if(!this.requireProjectSelection("open agents"))return;let e=this.selectedProjectName();this.router.navigate(["project",e,"agents"])}openPrompts(){if(!this.requireProjectSelection("open prompts"))return;let e=this.selectedProjectName();this.router.navigate(["project",e,"prompts"])}openSchedulers(){if(!this.requireProjectSelection("open schedulers"))return;let e=this.selectedProjectName();this.router.navigate(["project",e,"schedulers"])}toggleSection(e){let t=this.expandedSections[e];e==="settings"?this.expandedSections[e]=!t:(["config","preview"].forEach(i=>{this.expandedSections[i]=!1}),this.expandedSections[e]=!t)}navigateToHome(){if(this.forcedProject()){console.log("[SIDENAV] Cannot navigate to home - forced project active");return}console.log("[SIDENAV] Navigating to home (project selection)"),this.projectStateService.clearSelection(),this.router.navigate(["/"])}openMissionControl(){let e=this.selectedProjectName();e&&(this.router.navigate(["project",e,"tasks"]),this.close())}createNewThread(){let e=this.selectedProjectName();if(!e){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",e])}onThreadSelectedOnMobile(){this.isDesktop()||this.close()}toggleThreadSearch(e){e.stopPropagation(),this.isThreadSearchActive=!0,this.threadSearchQuery="",setTimeout(()=>{this.threadSearchInput?.nativeElement.focus()},0)}closeThreadSearch(){this.isThreadSearchActive=!1,this.threadSearchQuery=""}onThreadSearchInput(){}onThreadSearchModeChange(e){e||this.closeThreadSearch()}static \u0275fac=function(t){return new(t||o)};static \u0275cmp=V({type:o,selectors:[["app-sidenav"]],viewQuery:function(t,n){if(t&1&&ve(Un,5),t&2){let i;be(i=Ce())&&(n.threadSearchInput=i.first)}},inputs:{drawerOpen:"drawerOpen"},outputs:{sidenavStateChange:"sidenavStateChange"},ngContentSelectors:Hn,decls:35,vars:32,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",3,"click","keydown.enter","keydown.space","title"],[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(t,n){t&1&&($e(),m(0,Qn,6,1),a(1,"mat-sidenav-container",1)(2,"mat-sidenav",2),p("closed",function(){return n.close()}),a(3,"div",3)(4,"button",4),p("click",function(){return n.close()}),a(5,"mat-icon"),l(6,"chevron_left"),s()(),a(7,"img",5),p("click",function(r){return n.navigateToHome(),r.stopPropagation()})("keydown.enter",function(r){return n.navigateToHome(),r.preventDefault(),r.stopPropagation()})("keydown.space",function(r){return n.navigateToHome(),r.preventDefault(),r.stopPropagation()}),s(),a(8,"div",6)(9,"h2",7),l(10),s()()(),a(11,"div",8)(12,"a",9),p("click",function(r){return n.createNewThread(),r.preventDefault()}),a(13,"mat-icon",10),l(14,"play_circle"),s(),a(15,"span",11),l(16,"Start a new thread"),s()()(),m(17,Xn,6,0,"div",12),a(18,"div",13)(19,"div",14),m(20,Jn,8,1,"div",15)(21,Yn,8,0,"div",16),a(22,"div",17)(23,"app-thread-selector",18),p("searchModeChange",function(r){return n.onThreadSearchModeChange(r)})("threadSelected",function(){return n.onThreadSelectedOnMobile()}),s()()()(),a(24,"div",19)(25,"div",20)(26,"a",21),p("click",function(r){return n.toggleSection("settings"),r.preventDefault()}),m(27,qn,2,0,"mat-icon",22)(28,Gn,2,0,"mat-icon",23),a(29,"span",24),l(30,"Control Center"),s()(),m(31,hi,33,12,"div",25),s()()(),a(32,"mat-sidenav-content"),Ue(33),s()(),m(34,ui,8,1,"div",26)),t&2&&(g(!n.isOpen()&&!n.drawerOpen?0:-1),c(),T("sidenav-open",n.isOpen()),b("hasBackdrop",!1),c(),b("opened",n.isOpen())("disableClose",!0),c(5),T("sidenav-logo",!0)("clickable",!n.forcedProject())("disabled",n.forcedProject()),b("title",n.forcedProject()?"Project selection disabled":"Go to project selection"),de("src","CODAY-Logo.png",ce)("role",n.forcedProject()?null:"button")("tabindex",n.forcedProject()?null:"0"),c(3),w(n.selectedProjectName()),c(7),g(n.selectedProjectName()?17:-1),c(3),g(n.isThreadSearchActive?20:21),c(3),b("searchMode",n.isThreadSearchActive)("searchQuery",n.threadSearchQuery),c(),T("is-admin",n.isAdmin),c(),T("expanded",n.expandedSections.settings),c(),T("active",n.expandedSections.settings),c(),g(n.expandedSections.settings?27:28),c(4),g(n.expandedSections.settings?31:-1),c(),T("sidenav-closed-offset",!n.isOpen()),c(2),g(n.configErrorMessage?34:-1))},dependencies:[H,B,$,U,Rt,At,Ft,Dt,ne,N,te,W,Ht,Qt,pe,Ve,Ie],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%] .sidenav-logo.disabled[_ngcontent-%COMP%]{opacity:.5;cursor:not-allowed;pointer-events:none}.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{Ut as a,Ee as b,qt as c};
7
+ `+(t.summary||""):t.summary||"")("matTooltipDisabled",!t.summary),c(),g(t.subThreads!=null&&t.subThreads.length?1:-1),c(),g(t.name?2:3),c(2),g(n.isSharedThread(t)?4:-1)}}function yn(o,e){if(o&1){let t=M();a(0,"button",31),p("click",function(i){u(t);let r=d().$implicit,h=d(4);return _(h.startEditingThreadName(i,r))}),a(1,"mat-icon"),l(2,"edit"),s()()}}function Sn(o,e){o&1&&Ne(0)}function Mn(o,e){if(o&1&&fe(0,Sn,1,0,"ng-container",11),o&2){let t=d().$implicit;d(3);let n=De(1);C("ngTemplateOutlet",n)("ngTemplateOutletContext",Qe(2,sn,t.subThreads))}}function Tn(o,e){if(o&1){let t=M();a(0,"div",17),m(1,_n,3,3,"div",18)(2,xn,5,5,"a",19),a(3,"div",20),m(4,yn,3,0,"button",21),a(5,"button",22),p("click",function(i){let r=u(t).$implicit,h=d(4);return _(h.toggleStar(i,r))}),a(6,"mat-icon"),l(7),s()(),a(8,"button",23),p("click",function(i){let r=u(t).$implicit,h=d(4);return _(h.deleteThread(i,r))}),a(9,"mat-icon"),l(10,"delete"),s()()()(),m(11,Mn,1,4,"ng-container")}if(o&2){let t,n=e.$implicit,i=d(4);P("current",n.id===((t=i.currentThread())==null?null:t.id)),c(),g(i.editingThreadId===n.id?1:2),c(3),g(i.editingThreadId!==n.id&&n.name?4:-1),c(),P("starred",i.isStarred(n)),C("title",i.isStarred(n)?"Unstar thread":"Star thread"),c(2),w(i.isStarred(n)?"star":"star_outline"),c(4),g(i.isParentExpanded(n.id)&&(n.subThreads!=null&&n.subThreads.length)?11:-1)}}function Pn(o,e){if(o&1&&(a(0,"div",14)(1,"div",16),l(2),s(),R(3,Tn,12,9,null,null,Yt),s()),o&2){let t=e.$implicit;c(2),w(t.label),c(),L(t.threads)}}function wn(o,e){o&1&&(a(0,"div",15),l(1,"No existing threads"),s())}function On(o,e){if(o&1&&(a(0,"div",15),l(1),s()),o&2){let t=d(3);c(),I('No threads matching "',t.searchQuery(),'"')}}function En(o,e){if(o&1&&(R(0,Pn,5,1,"div",14,ln),m(2,wn,2,0,"div",15)(3,On,2,1,"div",15)),o&2){let t,n=d(2);L(n.getGroupedThreads()),c(2),g(!((t=n.threads())!=null&&t.length)&&!n.searchQuery()?2:n.searchQuery()&&n.getGroupedThreads().length===0?3:-1)}}function kn(o,e){if(o&1&&(fe(0,gn,2,0,"ng-template",null,0,Je),a(2,"div",3),m(3,hn,4,0,"div",4)(4,En,4,1),s()),o&2){let t=d();c(3),g(t.isLoadingThreadList()?3:4)}}function Vn(o,e){o&1&&(a(0,"span",32),l(1,"No project selected"),s())}function In(o,e){o&1&&(a(0,"span",32),l(1,"Loading..."),s())}function jn(o,e){if(o&1&&(a(0,"div",2),m(1,Vn,2,0,"span",32)(2,In,2,0,"span",32),s()),o&2){let t,n=d();c(),g((t=n.currentProject())!=null&&t.name?2:1)}}var Ve=class o{projects=null;searchMode=!1;searchQuery=ye("");searchModeChange=new se;threadSelected=new se;projectStateService=v(Pe);threadStateService=v(we);threadApiService=v(rt);userService=v(Oe);router=v(Se);destroyRef=v(ue);currentThread=O(this.threadStateService.selectedThread$);currentProject=O(this.projectStateService.selectedProject$);threads=O(this.threadStateService.threadList$);isLoadingThreadList=O(this.threadStateService.isLoadingThreadList$);username=O(this.userService.username$);isTouchDevice="ontouchstart"in window||navigator.maxTouchPoints>0;editingThreadId=null;editingThreadName="";isRenamingThread=!1;renameErrorMessage="";expandedParents=new Set;constructor(){le(()=>{let e=this.currentThread()?.id,t=this.threads();if(!e||!t?.length)return;let n=new Map;for(let r of t)r.parentThreadId&&n.set(r.id,r.parentThreadId);let i=e;for(;i;){let r=n.get(i);r&&this.expandedParents.add(r),i=r}})}ngOnInit(){this.userService.fetchCurrentUser().subscribe({error:e=>{console.error("[THREAD-SELECTOR] Failed to load current user:",e)}})}selectThread(e){this.threadStateService.selectThread(e),this.threadSelected.emit(),this.router.navigate(["project",this.currentProject()?.name,"thread",e])}getGroupedThreads(){let e=this.threads();if(!e?.length)return[];let t=new Set(e.map(f=>f.id)),n=e.filter(f=>!f.parentThreadId),i=e.filter(f=>!!f.parentThreadId),r=i.filter(f=>!t.has(f.parentThreadId)),h=i.filter(f=>t.has(f.parentThreadId)),k=new Map;for(let f of h){let E=f.parentThreadId;k.has(E)||k.set(E,[]),k.get(E).push(f)}let K=f=>(k.get(f)||[]).sort((z,J)=>z.modifiedDate>J.modifiedDate?-1:1).map(z=>re(Y({},z),{subThreads:K(z.id)})),D=[...n,...r];if(this.searchQuery()&&this.searchQuery().trim()){let f=this.searchQuery().toLowerCase().trim();D=D.filter(E=>E.name.toLowerCase().includes(f)||E.summary&&E.summary.toLowerCase().includes(f))}if(!D.length)return[];let Z=this.username();if(!Z)return[];let Re=D.map(f=>re(Y({},f),{subThreads:K(f.id)})),Le=Re.filter(f=>f.starring&&f.starring.includes(Z)),Gt=Re.filter(f=>!f.starring||!f.starring.includes(Z)),oe=new Map,ze=new Date;ze.setHours(0,0,0,0);for(let f of Gt){let E=new Date(f.modifiedDate);E.setHours(0,0,0,0);let z=ze.getTime()-E.getTime(),J=Math.floor(z/(1e3*60*60*24)),A;J===0?A="Today":J===1?A="Yesterday":J<7?A="This Week":J<30?A="This Month":J<90?A="Last 3 Months":A="Older",oe.has(A)||oe.set(A,[]),oe.get(A).push(f)}let je=[];if(Le.length>0){let f=[...Le].sort((E,z)=>E.modifiedDate>z.modifiedDate?-1:1);je.push({label:"Starred",threads:f})}return["Today","Yesterday","This Week","This Month","Last 3 Months","Older"].filter(f=>oe.has(f)).forEach(f=>{je.push({label:f,threads:oe.get(f)})}),je}isParentExpanded(e){return this.expandedParents.has(e)}toggleSubThreads(e,t){e.stopPropagation(),this.expandedParents.has(t)?this.expandedParents.delete(t):this.expandedParents.add(t)}isSubThread(e){return!!e.parentThreadId}isSharedThread(e){return e.users&&e.users.length>1}isStarred(e){let t=this.username();return!!t&&e.starring&&e.starring.includes(t)}toggleStar(e,t){e.stopPropagation();let n=this.username();if(!n)return;let i=t.starring&&t.starring.includes(n),r=i?this.threadApiService.unstarThread(t.id):this.threadApiService.starThread(t.id);this.threadStateService.updateStarLocal(t.id,!i,n),r.pipe(Q(this.destroyRef)).subscribe({next:()=>{},error:h=>{console.error("Error toggling star:",h),this.threadStateService.refreshThreadList()}})}deleteThread(e,t){e.stopPropagation();let n=this.currentProject()?.name;!n||!confirm(`Are you sure you want to delete the thread "${t.name}"?`)||this.threadApiService.deleteThread(t.id).subscribe({next:()=>{this.currentThread()?.id===t.id&&(this.threadStateService.clearSelection(),this.router.navigate(["project",n])),this.threadStateService.refreshThreadList()},error:r=>{console.error("Error deleting thread:",r),alert("Failed to delete thread. Please try again.")}})}formatDate(e){try{let t=new Date(e),i=new Date().getTime()-t.getTime(),r=Math.floor(i/(1e3*60*60*24));return r===0?"Today":r===1?"Yesterday":r<7?`${r} days ago`:t.toLocaleDateString("en-EN",{day:"numeric",month:"short"})}catch(t){return"No date"}}startEditingThreadName(e,t){e.stopPropagation(),this.editingThreadId=t.id,this.editingThreadName=t.name||"",this.renameErrorMessage="",setTimeout(()=>{let n=document.querySelector(".thread-name-input");n&&(n.focus(),n.select())},0)}cancelEditingThreadName(){this.editingThreadId=null,this.editingThreadName="",this.renameErrorMessage=""}saveThreadName(e){if(e&&e.stopPropagation(),!this.editingThreadId)return;let t=this.editingThreadName.trim();if(!t){this.renameErrorMessage="Thread name cannot be empty";return}if(t.length>200){this.renameErrorMessage="Thread name is too long (max 200 characters)";return}let n=this.editingThreadId;this.isRenamingThread=!0,this.renameErrorMessage="",this.threadStateService.renameThread(n,t).subscribe({next:()=>{console.log("[THREAD-SELECTOR] Thread renamed successfully"),this.cancelEditingThreadName(),this.isRenamingThread=!1},error:i=>{console.error("[THREAD-SELECTOR] Error renaming thread:",i),this.renameErrorMessage=i.message||"Failed to rename thread",this.isRenamingThread=!1}})}onEditKeydown(e){e.key==="Enter"?(e.preventDefault(),e.stopPropagation(),this.saveThreadName()):e.key==="Escape"&&(e.preventDefault(),e.stopPropagation(),this.cancelEditingThreadName())}onEditBlur(){setTimeout(()=>{this.editingThreadId&&!this.isRenamingThread&&this.saveThreadName()},200)}static \u0275fac=function(t){return new(t||o)};static \u0275cmp=V({type:o,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","","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"],[1,"disabled-text"]],template:function(t,n){if(t&1&&(a(0,"div",1),p("click",function(r){return r.stopPropagation()})("keydown",function(r){return r.stopPropagation()}),m(1,kn,5,1)(2,jn,3,1,"div",2),s()),t&2){let i;c(),g((i=n.currentProject())!=null&&i.name?1:2)}},dependencies:[Ye,H,B,$,_t,U,ne,N,te,W,ft,dt,ct,lt,st,at],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}.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 Nn=["logsContent"],Dn=(o,e)=>e.name;function An(o,e){if(o&1){let t=M();a(0,"button",12),p("click",function(){u(t);let i=d().$implicit,r=d();return _(r.start(i.name))}),a(1,"mat-icon"),l(2,"play_arrow"),s()()}if(o&2){let t=d().$implicit;C("disabled",t.isLoading)}}function Fn(o,e){if(o&1){let t=M();a(0,"button",13),p("click",function(){u(t);let i=d().$implicit,r=d();return _(r.stop(i.name))}),a(1,"mat-icon"),l(2,"stop"),s()()}if(o&2){let t=d().$implicit;C("disabled",t.isLoading)}}function Rn(o,e){if(o&1&&(a(0,"a",8)(1,"mat-icon",14),l(2,"open_in_new"),s()()),o&2){let t=d().$implicit;C("href",t.url,ce)("title",t.url)}}function Ln(o,e){if(o&1&&(a(0,"div",15),l(1),s()),o&2){let t=d(),n=t.$implicit,i=t.$index;G("order",i*2),c(),w(n.errorMessage)}}function zn(o,e){if(o&1){let t=M();a(0,"button",21),p("click",function(){u(t);let i=d(3);return _(i.onManualRefresh())}),a(1,"mat-icon"),l(2,"refresh"),s()()}}function Wn(o,e){if(o&1&&(a(0,"div",16)(1,"div",17)(2,"span",18),l(3),s(),m(4,zn,3,0,"button",19),s(),a(5,"pre",20,0),l(7),s()()),o&2){let t=d(),n=t.$implicit,i=t.$index,r=d();G("order",i*2+1),c(3),I("",n.name," logs"),c(),g(n.status==="running"?4:-1),c(3),w(r.logs()||"(empty)")}}function Bn(o,e){if(o&1){let t=M();a(0,"div",2)(1,"span",3),l(2),s(),a(3,"div",4),m(4,An,3,1,"button",5)(5,Fn,3,1,"button",6),a(6,"span",7),l(7),s(),m(8,Rn,3,2,"a",8),a(9,"button",9),p("click",function(){let i=u(t).$implicit,r=d();return _(r.toggleLogs(i.name))}),a(10,"mat-icon"),l(11),s()()()(),m(12,Ln,2,3,"div",10),m(13,Wn,8,5,"div",11)}if(o&2){let t=e.$implicit,n=e.$index,i=d();G("order",n*2),c(2),w(t.name),c(2),g(t.status==="stopped"?4:5),c(2),P("running",t.status==="running"),c(),I(" ",t.status==="running"?"Running":"Stopped"," "),c(),g(t.url?8:-1),c(),C("title",i.logsOpenFor()===t.name?"Hide logs":"Show logs"),c(2),w(i.logsOpenFor()===t.name?"expand_less":"terminal"),c(),g(t.errorMessage?12:-1),c(),g(i.logsOpenFor()===t.name?13:-1)}}var Ie=class o{destroyRef=v(ue);projectApi=v(Te);projectName=ye.required();entryStates=ee([]);hasPreview=xe(()=>this.entryStates().length>0);logsOpenFor=ee(null);logs=ee("");logsContent;logsPollTimer=null;logsTimeoutTimer=null;static LOGS_POLL_MS=5e3;static LOGS_TIMEOUT_MS=1200*1e3;constructor(){le(()=>{let e=this.projectName();e&&this.onProjectChanged(e)},{allowSignalWrites:!0}),le(()=>{console.log("entry states",this.entryStates())})}ngOnDestroy(){this.stopLogPolling()}onProjectChanged(e){this.stopLogPolling(),this.entryStates.set([]),this.logsOpenFor.set(null),this.logs.set(""),this.projectApi.getPreviewEntries(e).pipe(Q(this.destroyRef)).subscribe({next:t=>{let n=t.entries;if(n.length===0)return;let i=n.map(h=>({name:h.name,command:h.command,url:h.url,status:"stopped",isLoading:!1,errorMessage:""}));this.entryStates.set(i);let r=n.map(h=>this.projectApi.getPreviewStatus(e,h.name));We(r).pipe(Q(this.destroyRef)).subscribe({next:h=>{this.entryStates.update(k=>k.map((K,D)=>{let Z=h[D];return Z?re(Y({},K),{status:Z.status}):K}))},error:()=>{}})},error:()=>{}})}start(e){this.updateEntry(e,{isLoading:!0,errorMessage:""}),this.projectApi.startPreview(this.projectName(),e).pipe(Q(this.destroyRef)).subscribe({next:t=>{this.updateEntry(e,{status:t.status,isLoading:!1})},error:t=>{this.updateEntry(e,{errorMessage:t?.error?.error??"Failed to start preview",isLoading:!1})}})}stop(e){this.updateEntry(e,{isLoading:!0,errorMessage:""}),this.projectApi.stopPreview(this.projectName(),e).pipe(Q(this.destroyRef)).subscribe({next:()=>{this.updateEntry(e,{status:"stopped",isLoading:!1}),this.logsOpenFor()===e&&this.stopLogPolling()},error:t=>{this.updateEntry(e,{errorMessage:t?.error?.error??"Failed to stop preview",isLoading:!1})}})}toggleLogs(e){this.logsOpenFor()===e?(this.logsOpenFor.set(null),this.logs.set(""),this.stopLogPolling()):(this.logsOpenFor.set(e),this.refreshLogs(),this.startLogPolling())}onManualRefresh(){this.refreshLogs(),this.logsPollTimer&&this.resetLogsTimeout()}refreshLogs(){let e=this.logsOpenFor();e&&this.projectApi.getPreviewLogs(this.projectName(),e).pipe(Q(this.destroyRef)).subscribe({next:t=>{this.logs.set(t.logs),this.scrollLogsToBottom()},error:()=>this.logs.set("(failed to load logs)")})}updateEntry(e,t){this.entryStates.update(n=>n.map(i=>i.name===e?Y(Y({},i),t):i))}startLogPolling(){this.stopLogPolling(),this.logsPollTimer=setInterval(()=>{this.logsOpenFor()?this.refreshLogs():this.stopLogPolling()},o.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()},o.LOGS_TIMEOUT_MS)}scrollLogsToBottom(){setTimeout(()=>{let e=this.logsContent?.nativeElement;e&&(e.scrollTop=e.scrollHeight)})}static \u0275fac=function(t){return new(t||o)};static \u0275cmp=V({type:o,selectors:[["app-preview-panel"]],viewQuery:function(t,n){if(t&1&&ve(Nn,5),t&2){let i;be(i=Ce())&&(n.logsContent=i.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(t,n){t&1&&(a(0,"div",1),R(1,Bn,14,12,null,null,Dn),s()),t&2&&(c(),L(n.entryStates()))},dependencies:[te,W,ne,N],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}"]})};function $n(o,e){if(o&1&&(a(0,"div",3),l(1),s()),o&2){let t=d();c(),I("\u274C ",t.errorMessage)}}var me=class o{dialogRef=v(Ke);data=v(Ze);jsonContent;errorMessage="";title;constructor(){this.jsonContent=this.data.initialContent,this.title=this.data.title||this.getDefaultTitle(this.data.configType,this.data.projectName)}getDefaultTitle(e,t){return e==="user"?"User Configuration":`Project Configuration: ${t||"Unknown"}`}onSave(){this.errorMessage="";let e;try{e=JSON.parse(this.jsonContent)}catch(t){this.errorMessage=`Invalid JSON syntax: ${t instanceof Error?t.message:"Unknown error"}`;return}this.dialogRef.close(e)}onCancel(){this.dialogRef.close()}static \u0275fac=function(t){return new(t||o)};static \u0275cmp=V({type:o,selectors:[["app-json-editor"]],decls:13,vars:3,consts:[["mat-dialog-title",""],["mat-icon-button","","title","Close",1,"close-button",3,"click"],["spellcheck","false","placeholder","Enter JSON configuration...",1,"json-textarea",3,"ngModelChange","ngModel"],[1,"error-message"],["align","end"],["matButton","",3,"click"],["matButton","filled","color","primary",3,"click"]],template:function(t,n){t&1&&(a(0,"div",0),l(1),a(2,"button",1),p("click",function(){return n.onCancel()}),a(3,"mat-icon"),l(4,"close"),s()()(),a(5,"mat-dialog-content")(6,"textarea",2),S("ngModelChange",function(r){return y(n.jsonContent,r)||(n.jsonContent=r),r}),s(),m(7,$n,2,1,"div",3),s(),a(8,"mat-dialog-actions",4)(9,"button",5),p("click",function(){return n.onCancel()}),l(10,"Cancel"),s(),a(11,"button",6),p("click",function(){return n.onSave()}),l(12,"Save"),s()()),t&2&&(c(),I(" ",n.title," "),c(5),x("ngModel",n.jsonContent),c(),g(n.errorMessage?7:-1))},dependencies:[qe,H,B,$,U,N,W,ot,tt,nt,it],styles:["[mat-dialog-title][_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center}[mat-dialog-title][_ngcontent-%COMP%] .close-button[_ngcontent-%COMP%]{margin-left:auto}mat-dialog-content[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:1rem;min-height:400px}.json-textarea[_ngcontent-%COMP%]{flex:1;min-height:300px;max-height:80vh;padding:1rem;font-family:Monaco,Menlo,Ubuntu Mono,Consolas,monospace;font-size:.875rem;line-height:1.5;background:var(--color-code-bg);color:var(--color-text);border:1px solid var(--color-border);border-radius:4px;resize:vertical;outline:none;transition:border-color .2s}.json-textarea[_ngcontent-%COMP%]:focus{border-color:var(--color-primary)}.json-textarea[_ngcontent-%COMP%]::placeholder{color:var(--color-text-secondary);opacity:.6}.error-message[_ngcontent-%COMP%]{padding:.75rem 1rem;border-radius:4px;font-size:.875rem;line-height:1.4;background:#dc26261a;color:#dc2626;border:1px solid rgba(220,38,38,.3)}"]})};var Un=["threadSearchInput"],Hn=["*"];function Qn(o,e){if(o&1){let t=M();a(0,"button",27),p("click",function(){u(t);let i=d();return _(i.toggle())}),a(1,"mat-icon"),l(2,"menu"),s()(),a(3,"button",28),p("click",function(){u(t);let i=d();return _(i.createNewThread())}),a(4,"mat-icon",10),l(5,"play_circle"),s()()}if(o&2){let t=d();c(3),C("disabled",!t.selectedProjectName())}}function Xn(o,e){if(o&1){let t=M();a(0,"div",12)(1,"a",29),p("click",function(i){return u(t),d().openMissionControl(),_(i.preventDefault())}),a(2,"mat-icon"),l(3,"rocket_launch"),s(),a(4,"span",30),l(5,"Task Control"),s()()()}}function Jn(o,e){if(o&1){let t=M();a(0,"div",15)(1,"mat-icon",31),l(2,"search"),s(),a(3,"input",32,0),S("ngModelChange",function(i){u(t);let r=d();return y(r.threadSearchQuery,i)||(r.threadSearchQuery=i),_(i)}),p("input",function(){u(t);let i=d();return _(i.onThreadSearchInput())}),s(),a(5,"button",33),p("click",function(){u(t);let i=d();return _(i.closeThreadSearch())}),a(6,"mat-icon"),l(7,"close"),s()()()}if(o&2){let t=d();c(3),x("ngModel",t.threadSearchQuery)}}function Yn(o,e){if(o&1){let t=M();a(0,"div",16)(1,"mat-icon",23),l(2,"forum"),s(),a(3,"span",24),l(4,"Threads"),s(),a(5,"button",34),p("click",function(i){u(t);let r=d();return _(r.toggleThreadSearch(i))}),a(6,"mat-icon"),l(7,"search"),s()()()}}function qn(o,e){o&1&&(a(0,"mat-icon",22),l(1,"keyboard_arrow_up"),s())}function Gn(o,e){o&1&&(a(0,"mat-icon",23),l(1,"hub"),s())}function Kn(o,e){o&1&&(a(0,"mat-icon",22),l(1,"keyboard_arrow_up"),s())}function Zn(o,e){o&1&&(a(0,"mat-icon",23),l(1,"tune"),s())}function ei(o,e){o&1&&(a(0,"div",36)(1,"div",40),T(2,"app-options-panel",41),s()())}function ti(o,e){if(o&1){let t=M();a(0,"div",35)(1,"a",21),p("click",function(i){return u(t),d(3).openProjectConfig(),i.preventDefault(),_(i.stopPropagation())}),a(2,"mat-icon",23),l(3,"settings_applications"),s(),a(4,"span",24),l(5,"Project Configuration"),s()()()}}function ni(o,e){o&1&&(a(0,"div",35)(1,"a",42)(2,"mat-icon",23),l(3,"settings_applications"),s(),a(4,"span",24),l(5,"Project config (No project)"),s()()())}function ii(o,e){if(o&1&&m(0,ti,6,0,"div",35)(1,ni,6,0,"div",35),o&2){let t=d(2);g(t.selectedProjectName()?0:1)}}function oi(o,e){if(o&1){let t=M();a(0,"div",35)(1,"a",21),p("click",function(i){return u(t),d(2).openAgents(),i.preventDefault(),_(i.stopPropagation())}),a(2,"mat-icon",23),l(3,"smart_toy"),s(),a(4,"span",24),l(5,"Agents"),s()()()}}function ri(o,e){o&1&&(a(0,"div",35)(1,"a",42)(2,"mat-icon",23),l(3,"smart_toy"),s(),a(4,"span",24),l(5,"Agents (No project)"),s()()())}function ai(o,e){if(o&1){let t=M();a(0,"div",35)(1,"a",21),p("click",function(i){return u(t),d(2).openPrompts(),i.preventDefault(),_(i.stopPropagation())}),a(2,"mat-icon",23),l(3,"description"),s(),a(4,"span",24),l(5,"Prompts"),s()()()}}function si(o,e){o&1&&(a(0,"div",35)(1,"a",42)(2,"mat-icon",23),l(3,"description"),s(),a(4,"span",24),l(5,"Prompts (No project)"),s()()())}function li(o,e){if(o&1){let t=M();a(0,"div",35)(1,"a",21),p("click",function(i){return u(t),d(2).openSchedulers(),i.preventDefault(),_(i.stopPropagation())}),a(2,"mat-icon",23),l(3,"schedule"),s(),a(4,"span",24),l(5,"Schedulers"),s()()()}}function ci(o,e){o&1&&(a(0,"div",35)(1,"a",42)(2,"mat-icon",23),l(3,"schedule"),s(),a(4,"span",24),l(5,"Schedulers (No project)"),s()()())}function di(o,e){o&1&&(a(0,"mat-icon",22),l(1,"keyboard_arrow_up"),s())}function pi(o,e){o&1&&(a(0,"mat-icon",23),l(1,"rocket_launch"),s())}function mi(o,e){if(o&1&&(a(0,"div",36),T(1,"app-preview-panel",43),s()),o&2){let t=d(3);c(),C("projectName",t.selectedProjectName())}}function gi(o,e){if(o&1){let t=M();a(0,"div",35)(1,"a",21),p("click",function(i){return u(t),d(2).toggleSection("preview"),i.preventDefault(),_(i.stopPropagation())}),m(2,di,2,0,"mat-icon",22)(3,pi,2,0,"mat-icon",23),a(4,"span",24),l(5,"Preview Server"),s()(),m(6,mi,2,1,"div",36),s()}if(o&2){let t=d(2);P("expanded",t.expandedSections.preview),c(),P("active",t.expandedSections.preview),c(),g(t.expandedSections.preview?2:3),c(4),g(t.expandedSections.preview?6:-1)}}function hi(o,e){if(o&1){let t=M();a(0,"div",25)(1,"div",35)(2,"a",21),p("click",function(i){return u(t),d().toggleSection("config"),_(i.preventDefault())}),m(3,Kn,2,0,"mat-icon",22)(4,Zn,2,0,"mat-icon",23),a(5,"span",24),l(6,"Preferences"),s()(),m(7,ei,3,0,"div",36),s(),a(8,"div",35)(9,"a",21),p("click",function(i){return u(t),d().openTokenUsage(),i.preventDefault(),_(i.stopPropagation())}),a(10,"mat-icon",23),l(11,"data_usage"),s(),a(12,"span",24),l(13,"Token Usage"),s()()(),a(14,"div",35)(15,"a",21),p("click",function(i){return u(t),d().openUserConfig(),i.preventDefault(),_(i.stopPropagation())}),a(16,"mat-icon",23),l(17,"manage_accounts"),s(),a(18,"span",24),l(19,"User Configuration"),s()()(),m(20,ii,2,1),m(21,oi,6,0,"div",35)(22,ri,6,0,"div",35),m(23,ai,6,0,"div",35)(24,si,6,0,"div",35),m(25,li,6,0,"div",35)(26,ci,6,0,"div",35),m(27,gi,7,6,"div",37),a(28,"div",35)(29,"a",38),T(30,"img",39),a(31,"span",24),l(32,"Contribute on GitHub"),s()()()()}if(o&2){let t=d();c(),P("expanded",t.expandedSections.config),c(),P("active",t.expandedSections.config),c(),g(t.expandedSections.config?3:4),c(4),g(t.expandedSections.config?7:-1),c(13),g(t.isAdmin?20:-1),c(),g(t.selectedProjectName()?21:22),c(2),g(t.selectedProjectName()?23:24),c(2),g(t.selectedProjectName()?25:26),c(2),g(t.hasPreviewConfig()?27:-1),c(3),de("src","CODAY-Logo.png",ce)}}function ui(o,e){if(o&1){let t=M();a(0,"div",26)(1,"mat-icon",44),l(2,"warning"),s(),a(3,"span",45),l(4),s(),a(5,"button",46),p("click",function(){u(t);let i=d();return _(i.configErrorMessage="")}),a(6,"mat-icon"),l(7,"close"),s()()()}if(o&2){let t=d();c(4),w(t.configErrorMessage)}}var qt=class o{destroy$=new F;sidenavStateChange=new se;drawerOpen=!1;breakpointObserver=v(Ge);isDesktop=O(this.breakpointObserver.observe("(min-width: 1400px)").pipe(ae(e=>e.matches)),{initialValue:!1});userOpenPreference=ee(!0);isOpen=xe(()=>this.userOpenPreference());isAdmin=!1;configErrorMessage="";expandedSections={config:!1,preview:!1,settings:!1};isThreadSearchActive=!1;threadSearchQuery="";threadSearchInput;dialog=v(et);configApi=v(Wt);projectStateService=v(Pe);projectApi=v(Te);router=v(Se);preferences=v(ie);threadStateService=v(we);projects=O(this.projectStateService.projectList$);selectedProject=O(this.projectStateService.selectedProject$);selectedProjectName=O(this.projectStateService.selectedProject$.pipe(ae(e=>e?.name)));isProjectVolatile=O(this.projectStateService.selectedProject$.pipe(ae(e=>e?.config?.volatile||!1)));forcedProject=O(this.projectStateService.forcedProject$);hasPreviewConfig=O(this.projectStateService.selectedProject$.pipe(ae(e=>{let t=e?.config?.preview;return Array.isArray(t)&&!!t.length})),{initialValue:!1});ngOnInit(){let e=window.innerWidth>=1024,t=this.preferences.getPreference("sidenavOpen",e);this.userOpenPreference.set(t??e),this.configApi.getUserConfig().pipe(b(this.destroy$)).subscribe({next:n=>{this.isAdmin=n.groups?.includes("CODAY_ADMIN")??!1,console.log("[SIDENAV] User admin status:",this.isAdmin)},error:n=>{console.error("[SIDENAV] Error loading user config for roles:",n),this.isAdmin=!1}})}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete()}toggle(){let e=!this.userOpenPreference();this.userOpenPreference.set(e),this.saveSidenavState(e),this.sidenavStateChange.emit(e)}close(){this.userOpenPreference()&&(this.userOpenPreference.set(!1),this.saveSidenavState(!1),this.sidenavStateChange.emit(!1))}saveSidenavState(e){this.preferences.setPreference("sidenavOpen",e)}openTokenUsage(){this.configErrorMessage="",this.router.navigate(["/token-usage"])}openUserConfig(){console.log("[SIDENAV] openUserConfig called"),this.configErrorMessage="",this.configApi.getUserConfig().pipe(b(this.destroy$)).subscribe({next:e=>{console.log("[SIDENAV] User config loaded, opening dialog"),this.dialog.open(me,{data:{configType:"user",initialContent:JSON.stringify(e,null,2)}}).afterClosed().subscribe(n=>{n&&this.saveUserConfig(n)})},error:e=>{console.error("[SIDENAV] Error loading user config:",e),this.configErrorMessage=e?.error?.error||"Failed to load user configuration"}})}saveUserConfig(e){this.configApi.updateUserConfig(e).pipe(b(this.destroy$)).subscribe({next:t=>{console.log("[SIDENAV] User config saved successfully")},error:t=>{console.error("[SIDENAV] Error saving user config:",t),this.configErrorMessage=t?.error?.error||"Failed to save user configuration"}})}openProjectConfig(){let e=this.selectedProjectName();if(!e){console.error("[SIDENAV] No project selected"),this.configErrorMessage="No project selected. Please select a project first.";return}this.configErrorMessage="",this.projectApi.getProjectConfig(e).pipe(b(this.destroy$)).subscribe({next:t=>{console.log("[SIDENAV] Project config loaded, opening dialog"),this.dialog.open(me,{data:{configType:"project",projectName:e,initialContent:JSON.stringify(t,null,2)}}).afterClosed().subscribe(i=>{i&&this.saveProjectConfig(e,i)})},error:t=>{console.error("[SIDENAV] Error loading project config:",t),this.configErrorMessage=t?.error?.error||"Failed to load project configuration"}})}saveProjectConfig(e,t){this.projectApi.updateProjectConfig(e,t).pipe(b(this.destroy$)).subscribe({next:n=>{console.log("[SIDENAV] Project config saved successfully")},error:n=>{console.error("[SIDENAV] Error saving project config:",n),this.configErrorMessage=n?.error?.error||"Failed to save project configuration"}})}requireProjectSelection(e){return this.selectedProjectName()?!0:(console.error(`[SIDENAV] No project selected, cannot ${e}`),this.configErrorMessage="Please select a project first",!1)}openAgents(){if(!this.requireProjectSelection("open agents"))return;let e=this.selectedProjectName();this.router.navigate(["project",e,"agents"])}openPrompts(){if(!this.requireProjectSelection("open prompts"))return;let e=this.selectedProjectName();this.router.navigate(["project",e,"prompts"])}openSchedulers(){if(!this.requireProjectSelection("open schedulers"))return;let e=this.selectedProjectName();this.router.navigate(["project",e,"schedulers"])}toggleSection(e){let t=this.expandedSections[e];e==="settings"?this.expandedSections[e]=!t:(["config","preview"].forEach(i=>{this.expandedSections[i]=!1}),this.expandedSections[e]=!t)}navigateToHome(){console.log("[SIDENAV] Navigating to home (project selection)"),this.projectStateService.clearSelection(),this.router.navigate(["/"])}openMissionControl(){let e=this.selectedProjectName();e&&(this.router.navigate(["project",e,"tasks"]),this.close())}createNewThread(){let e=this.selectedProjectName();if(!e){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",e])}onThreadSelectedOnMobile(){this.isDesktop()||this.close()}toggleThreadSearch(e){e.stopPropagation(),this.isThreadSearchActive=!0,this.threadSearchQuery="",setTimeout(()=>{this.threadSearchInput?.nativeElement.focus()},0)}closeThreadSearch(){this.isThreadSearchActive=!1,this.threadSearchQuery=""}onThreadSearchInput(){}onThreadSearchModeChange(e){e||this.closeThreadSearch()}static \u0275fac=function(t){return new(t||o)};static \u0275cmp=V({type:o,selectors:[["app-sidenav"]],viewQuery:function(t,n){if(t&1&&ve(Un,5),t&2){let i;be(i=Ce())&&(n.threadSearchInput=i.first)}},inputs:{drawerOpen:"drawerOpen"},outputs:{sidenavStateChange:"sidenavStateChange"},ngContentSelectors:Hn,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(t,n){t&1&&($e(),m(0,Qn,6,1),a(1,"mat-sidenav-container",1)(2,"mat-sidenav",2),p("closed",function(){return n.close()}),a(3,"div",3)(4,"button",4),p("click",function(){return n.close()}),a(5,"mat-icon"),l(6,"chevron_left"),s()(),a(7,"img",5),p("click",function(r){return n.navigateToHome(),r.stopPropagation()})("keydown.enter",function(r){return n.navigateToHome(),r.preventDefault(),r.stopPropagation()})("keydown.space",function(r){return n.navigateToHome(),r.preventDefault(),r.stopPropagation()}),s(),a(8,"div",6)(9,"h2",7),l(10),s()()(),a(11,"div",8)(12,"a",9),p("click",function(r){return n.createNewThread(),r.preventDefault()}),a(13,"mat-icon",10),l(14,"play_circle"),s(),a(15,"span",11),l(16,"Start a new thread"),s()()(),m(17,Xn,6,0,"div",12),a(18,"div",13)(19,"div",14),m(20,Jn,8,1,"div",15)(21,Yn,8,0,"div",16),a(22,"div",17)(23,"app-thread-selector",18),p("searchModeChange",function(r){return n.onThreadSearchModeChange(r)})("threadSelected",function(){return n.onThreadSelectedOnMobile()}),s()()()(),a(24,"div",19)(25,"div",20)(26,"a",21),p("click",function(r){return n.toggleSection("settings"),r.preventDefault()}),m(27,qn,2,0,"mat-icon",22)(28,Gn,2,0,"mat-icon",23),a(29,"span",24),l(30,"Control Center"),s()(),m(31,hi,33,12,"div",25),s()()(),a(32,"mat-sidenav-content"),Ue(33),s()(),m(34,ui,8,1,"div",26)),t&2&&(g(!n.isOpen()&&!n.drawerOpen?0:-1),c(),P("sidenav-open",n.isOpen()),C("hasBackdrop",!1),c(),C("opened",n.isOpen())("disableClose",!0),c(5),de("src","CODAY-Logo.png",ce),c(3),w(n.selectedProjectName()),c(7),g(n.selectedProjectName()?17:-1),c(3),g(n.isThreadSearchActive?20:21),c(3),C("searchMode",n.isThreadSearchActive)("searchQuery",n.threadSearchQuery),c(),P("is-admin",n.isAdmin),c(),P("expanded",n.expandedSections.settings),c(),P("active",n.expandedSections.settings),c(),g(n.expandedSections.settings?27:28),c(4),g(n.expandedSections.settings?31:-1),c(),P("sidenav-closed-offset",!n.isOpen()),c(2),g(n.configErrorMessage?34:-1))},dependencies:[H,B,$,U,Rt,At,Ft,Dt,ne,N,te,W,Ht,Qt,pe,Ve,Ie],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{Ut as a,Ee as b,qt as c};