@whoz-oss/coday-client 0.126.0 → 0.128.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/browser/{chunk-PWDBCAQS.js → chunk-3TO5PQRD.js} +1 -1
  2. package/browser/{chunk-WGDWYJII.js → chunk-3YSNMKXU.js} +1 -1
  3. package/browser/{chunk-KC2EKCAS.js → chunk-5B6P72NR.js} +1 -1
  4. package/browser/chunk-7A54VTP2.js +3 -0
  5. package/browser/{chunk-CH66E3U2.js → chunk-7CFO7WWZ.js} +1 -1
  6. package/browser/chunk-7T6Q4MDL.js +2 -0
  7. package/browser/{chunk-V6CWNYSW.js → chunk-7XSGZTN3.js} +1 -1
  8. package/browser/{chunk-OSNI7IJI.js → chunk-ADWJAQMQ.js} +1 -1
  9. package/browser/chunk-D6WU5O4X.js +1 -0
  10. package/browser/{chunk-POHHXEMY.js → chunk-DVO44NIX.js} +6 -6
  11. package/browser/{chunk-G2OAJDIX.js → chunk-EU3J4G2Y.js} +1 -1
  12. package/browser/chunk-FFMGEAGW.js +1 -0
  13. package/browser/{chunk-KUVTFZWT.js → chunk-FPNKDL3E.js} +1 -1
  14. package/browser/chunk-GEUVTKHG.js +2 -0
  15. package/browser/{chunk-H76RJSSA.js → chunk-GG2XORTA.js} +1 -1
  16. package/browser/chunk-GVX63TKQ.js +1 -0
  17. package/browser/{chunk-NCBEPUYQ.js → chunk-H6Q42HHV.js} +1 -1
  18. package/browser/chunk-IJ2YZMNS.js +1 -0
  19. package/browser/chunk-JWEUUCFC.js +1 -0
  20. package/browser/{chunk-O2IJMHBE.js → chunk-LLDKKRUC.js} +1 -1
  21. package/browser/{chunk-UKTBOEDG.js → chunk-MVATXMLV.js} +1 -1
  22. package/browser/{chunk-K3XBOMJY.js → chunk-NZDKKDRG.js} +1 -1
  23. package/browser/{chunk-TVFEAMIC.js → chunk-ONXSTLRN.js} +1 -1
  24. package/browser/{chunk-R47KFHEX.js → chunk-QU37OGFO.js} +1 -1
  25. package/browser/{chunk-H5SXHH6A.js → chunk-RHFQ7GO2.js} +1 -1
  26. package/browser/chunk-RQLQ22PM.js +4 -0
  27. package/browser/chunk-SDNXWYG5.js +5 -0
  28. package/browser/{chunk-ECBXPEAC.js → chunk-TSDYLM5L.js} +2 -2
  29. package/browser/{chunk-OR62LCJX.js → chunk-VGRGY2U3.js} +1 -1
  30. package/browser/chunk-WQUBEVZN.js +5 -0
  31. package/browser/chunk-YCJZTFYJ.js +270 -0
  32. package/browser/{chunk-H7YMYOPC.js → chunk-YXFL2FTT.js} +1 -1
  33. package/browser/{chunk-CYLHTE22.js → chunk-Z26H5ES2.js} +1 -1
  34. package/browser/index.html +1 -1
  35. package/browser/main-YSLZYJ4P.js +1 -0
  36. package/package.json +1 -1
  37. package/browser/chunk-53STPEYQ.js +0 -3
  38. package/browser/chunk-7MXZXY4I.js +0 -1
  39. package/browser/chunk-EKBLXJOJ.js +0 -1
  40. package/browser/chunk-EZOSEC5V.js +0 -7
  41. package/browser/chunk-HCG45H7O.js +0 -2
  42. package/browser/chunk-JG37UR26.js +0 -270
  43. package/browser/chunk-KVR4NGLT.js +0 -1
  44. package/browser/chunk-LPN5AG4A.js +0 -1
  45. package/browser/chunk-LR7LOR4R.js +0 -4
  46. package/browser/chunk-PWF6LYR2.js +0 -1
  47. package/browser/chunk-TLVTUJPE.js +0 -2
  48. package/browser/chunk-UKAN3Y3I.js +0 -2
  49. package/browser/main-DARYETMO.js +0 -1
@@ -1,3 +0,0 @@
1
- import{E as x,K,M as q,N as Y,P as J,i as L,j as U,t as W,u as G}from"./chunk-B2QA6UZX.js";import{Cb as O,Db as A,Fb as b,Gb as P,Hb as w,Jb as j,Ka as c,Kb as z,Lb as N,Rb as _,Tb as F,Vb as B,Wa as m,Xa as p,Z as E,_ as d,aa as v,ca as s,db as T,h as l,jb as I,lb as h,mb as u,oa as D,rb as f,sb as y,sc as H,ta as V,tb as C,tc as Q,ub as g,ya as R}from"./chunk-3JGMGRXW.js";var X=(()=>{class o{_animationsDisabled=K();state="unchecked";disabled=!1;appearance="full";constructor(){}static \u0275fac=function(i){return new(i||o)};static \u0275cmp=m({type:o,selectors:[["mat-pseudo-checkbox"]],hostAttrs:[1,"mat-pseudo-checkbox"],hostVars:12,hostBindings:function(i,a){i&2&&_("mat-pseudo-checkbox-indeterminate",a.state==="indeterminate")("mat-pseudo-checkbox-checked",a.state==="checked")("mat-pseudo-checkbox-disabled",a.disabled)("mat-pseudo-checkbox-minimal",a.appearance==="minimal")("mat-pseudo-checkbox-full",a.appearance==="full")("_mat-animation-noopable",a._animationsDisabled)},inputs:{state:"state",disabled:"disabled",appearance:"appearance"},decls:0,vars:0,template:function(i,a){},styles:[`.mat-pseudo-checkbox{border-radius:2px;cursor:pointer;display:inline-block;vertical-align:middle;box-sizing:border-box;position:relative;flex-shrink:0;transition:border-color 90ms cubic-bezier(0, 0, 0.2, 0.1),background-color 90ms cubic-bezier(0, 0, 0.2, 0.1)}.mat-pseudo-checkbox::after{position:absolute;opacity:0;content:"";border-bottom:2px solid currentColor;transition:opacity 90ms cubic-bezier(0, 0, 0.2, 0.1)}.mat-pseudo-checkbox._mat-animation-noopable{transition:none !important;animation:none !important}.mat-pseudo-checkbox._mat-animation-noopable::after{transition:none}.mat-pseudo-checkbox-disabled{cursor:default}.mat-pseudo-checkbox-indeterminate::after{left:1px;opacity:1;border-radius:2px}.mat-pseudo-checkbox-checked::after{left:1px;border-left:2px solid currentColor;transform:rotate(-45deg);opacity:1;box-sizing:content-box}.mat-pseudo-checkbox-minimal.mat-pseudo-checkbox-checked::after,.mat-pseudo-checkbox-minimal.mat-pseudo-checkbox-indeterminate::after{color:var(--mat-pseudo-checkbox-minimal-selected-checkmark-color, var(--mat-sys-primary))}.mat-pseudo-checkbox-minimal.mat-pseudo-checkbox-checked.mat-pseudo-checkbox-disabled::after,.mat-pseudo-checkbox-minimal.mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-disabled::after{color:var(--mat-pseudo-checkbox-minimal-disabled-selected-checkmark-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-pseudo-checkbox-full{border-color:var(--mat-pseudo-checkbox-full-unselected-icon-color, var(--mat-sys-on-surface-variant));border-width:2px;border-style:solid}.mat-pseudo-checkbox-full.mat-pseudo-checkbox-disabled{border-color:var(--mat-pseudo-checkbox-full-disabled-unselected-icon-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-pseudo-checkbox-full.mat-pseudo-checkbox-checked,.mat-pseudo-checkbox-full.mat-pseudo-checkbox-indeterminate{background-color:var(--mat-pseudo-checkbox-full-selected-icon-color, var(--mat-sys-primary));border-color:rgba(0,0,0,0)}.mat-pseudo-checkbox-full.mat-pseudo-checkbox-checked::after,.mat-pseudo-checkbox-full.mat-pseudo-checkbox-indeterminate::after{color:var(--mat-pseudo-checkbox-full-selected-checkmark-color, var(--mat-sys-on-primary))}.mat-pseudo-checkbox-full.mat-pseudo-checkbox-checked.mat-pseudo-checkbox-disabled,.mat-pseudo-checkbox-full.mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-disabled{background-color:var(--mat-pseudo-checkbox-full-disabled-selected-icon-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-pseudo-checkbox-full.mat-pseudo-checkbox-checked.mat-pseudo-checkbox-disabled::after,.mat-pseudo-checkbox-full.mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-disabled::after{color:var(--mat-pseudo-checkbox-full-disabled-selected-checkmark-color, var(--mat-sys-surface))}.mat-pseudo-checkbox{width:18px;height:18px}.mat-pseudo-checkbox-minimal.mat-pseudo-checkbox-checked::after{width:14px;height:6px;transform-origin:center;top:-4.2426406871px;left:0;bottom:0;right:0;margin:auto}.mat-pseudo-checkbox-minimal.mat-pseudo-checkbox-indeterminate::after{top:8px;width:16px}.mat-pseudo-checkbox-full.mat-pseudo-checkbox-checked::after{width:10px;height:4px;transform-origin:center;top:-2.8284271247px;left:0;bottom:0;right:0;margin:auto}.mat-pseudo-checkbox-full.mat-pseudo-checkbox-indeterminate::after{top:6px;width:12px}
2
- `],encapsulation:2,changeDetection:0})}return o})();var ie=["text"],oe=[[["mat-icon"]],"*"],ae=["mat-icon","*"];function ne(o,t){if(o&1&&g(0,"mat-pseudo-checkbox",1),o&2){let e=b();f("disabled",e.disabled)("state",e.selected?"checked":"unchecked")}}function se(o,t){if(o&1&&g(0,"mat-pseudo-checkbox",3),o&2){let e=b();f("disabled",e.disabled)}}function re(o,t){if(o&1&&(y(0,"span",4),F(1),C()),o&2){let e=b();c(),B("(",e.group.label,")")}}var ce=new v("MAT_OPTION_PARENT_COMPONENT"),le=new v("MatOptgroup");var M=class{source;isUserInput;constructor(t,e=!1){this.source=t,this.isUserInput=e}},Z=(()=>{class o{_element=s(R);_changeDetectorRef=s(H);_parent=s(ce,{optional:!0});group=s(le,{optional:!0});_signalDisableRipple=!1;_selected=!1;_active=!1;_mostRecentViewValue="";get multiple(){return this._parent&&this._parent.multiple}get selected(){return this._selected}value;id=s(W).getId("mat-option-");get disabled(){return this.group&&this.group.disabled||this._disabled()}set disabled(e){this._disabled.set(e)}_disabled=V(!1);get disableRipple(){return this._signalDisableRipple?this._parent.disableRipple():!!this._parent?.disableRipple}get hideSingleSelectionIndicator(){return!!(this._parent&&this._parent.hideSingleSelectionIndicator)}onSelectionChange=new D;_text;_stateChanges=new l;constructor(){let e=s(L);e.load(Y),e.load(U),this._signalDisableRipple=!!this._parent&&T(this._parent.disableRipple)}get active(){return this._active}get viewValue(){return(this._text?.nativeElement.textContent||"").trim()}select(e=!0){this._selected||(this._selected=!0,this._changeDetectorRef.markForCheck(),e&&this._emitSelectionChangeEvent())}deselect(e=!0){this._selected&&(this._selected=!1,this._changeDetectorRef.markForCheck(),e&&this._emitSelectionChangeEvent())}focus(e,i){let a=this._getHostElement();typeof a.focus=="function"&&a.focus(i)}setActiveStyles(){this._active||(this._active=!0,this._changeDetectorRef.markForCheck())}setInactiveStyles(){this._active&&(this._active=!1,this._changeDetectorRef.markForCheck())}getLabel(){return this.viewValue}_handleKeydown(e){(e.keyCode===13||e.keyCode===32)&&!G(e)&&(this._selectViaInteraction(),e.preventDefault())}_selectViaInteraction(){this.disabled||(this._selected=this.multiple?!this._selected:!0,this._changeDetectorRef.markForCheck(),this._emitSelectionChangeEvent(!0))}_getTabIndex(){return this.disabled?"-1":"0"}_getHostElement(){return this._element.nativeElement}ngAfterViewChecked(){if(this._selected){let e=this.viewValue;e!==this._mostRecentViewValue&&(this._mostRecentViewValue&&this._stateChanges.next(),this._mostRecentViewValue=e)}}ngOnDestroy(){this._stateChanges.complete()}_emitSelectionChangeEvent(e=!1){this.onSelectionChange.emit(new M(this,e))}static \u0275fac=function(i){return new(i||o)};static \u0275cmp=m({type:o,selectors:[["mat-option"]],viewQuery:function(i,a){if(i&1&&j(ie,7),i&2){let n;z(n=N())&&(a._text=n.first)}},hostAttrs:["role","option",1,"mat-mdc-option","mdc-list-item"],hostVars:11,hostBindings:function(i,a){i&1&&A("click",function(){return a._selectViaInteraction()})("keydown",function(r){return a._handleKeydown(r)}),i&2&&(O("id",a.id),I("aria-selected",a.selected)("aria-disabled",a.disabled.toString()),_("mdc-list-item--selected",a.selected)("mat-mdc-option-multiple",a.multiple)("mat-mdc-option-active",a.active)("mdc-list-item--disabled",a.disabled))},inputs:{value:"value",id:"id",disabled:[2,"disabled","disabled",Q]},outputs:{onSelectionChange:"onSelectionChange"},exportAs:["matOption"],ngContentSelectors:ae,decls:8,vars:5,consts:[["text",""],["aria-hidden","true",1,"mat-mdc-option-pseudo-checkbox",3,"disabled","state"],[1,"mdc-list-item__primary-text"],["state","checked","aria-hidden","true","appearance","minimal",1,"mat-mdc-option-pseudo-checkbox",3,"disabled"],[1,"cdk-visually-hidden"],["aria-hidden","true","mat-ripple","",1,"mat-mdc-option-ripple","mat-focus-indicator",3,"matRippleTrigger","matRippleDisabled"]],template:function(i,a){i&1&&(P(oe),h(0,ne,1,2,"mat-pseudo-checkbox",1),w(1),y(2,"span",2,0),w(4,1),C(),h(5,se,1,1,"mat-pseudo-checkbox",3),h(6,re,2,1,"span",4),g(7,"div",5)),i&2&&(u(a.multiple?0:-1),c(5),u(!a.multiple&&a.selected&&!a.hideSingleSelectionIndicator?5:-1),c(),u(a.group&&a.group._inert?6:-1),c(),f("matRippleTrigger",a._getHostElement())("matRippleDisabled",a.disabled||a.disableRipple))},dependencies:[X,q],styles:[`.mat-mdc-option{-webkit-user-select:none;user-select:none;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:flex;position:relative;align-items:center;justify-content:flex-start;overflow:hidden;min-height:48px;padding:0 16px;cursor:pointer;-webkit-tap-highlight-color:rgba(0,0,0,0);color:var(--mat-option-label-text-color, var(--mat-sys-on-surface));font-family:var(--mat-option-label-text-font, var(--mat-sys-label-large-font));line-height:var(--mat-option-label-text-line-height, var(--mat-sys-label-large-line-height));font-size:var(--mat-option-label-text-size, var(--mat-sys-body-large-size));letter-spacing:var(--mat-option-label-text-tracking, var(--mat-sys-label-large-tracking));font-weight:var(--mat-option-label-text-weight, var(--mat-sys-body-large-weight))}.mat-mdc-option:hover:not(.mdc-list-item--disabled){background-color:var(--mat-option-hover-state-layer-color, color-mix(in srgb, var(--mat-sys-on-surface) calc(var(--mat-sys-hover-state-layer-opacity) * 100%), transparent))}.mat-mdc-option:focus.mdc-list-item,.mat-mdc-option.mat-mdc-option-active.mdc-list-item{background-color:var(--mat-option-focus-state-layer-color, color-mix(in srgb, var(--mat-sys-on-surface) calc(var(--mat-sys-focus-state-layer-opacity) * 100%), transparent));outline:0}.mat-mdc-option.mdc-list-item--selected:not(.mdc-list-item--disabled):not(.mat-mdc-option-active,.mat-mdc-option-multiple,:focus,:hover){background-color:var(--mat-option-selected-state-layer-color, var(--mat-sys-secondary-container))}.mat-mdc-option.mdc-list-item--selected:not(.mdc-list-item--disabled):not(.mat-mdc-option-active,.mat-mdc-option-multiple,:focus,:hover) .mdc-list-item__primary-text{color:var(--mat-option-selected-state-label-text-color, var(--mat-sys-on-secondary-container))}.mat-mdc-option .mat-pseudo-checkbox{--mat-pseudo-checkbox-minimal-selected-checkmark-color: var(--mat-option-selected-state-label-text-color, var(--mat-sys-on-secondary-container))}.mat-mdc-option.mdc-list-item{align-items:center;background:rgba(0,0,0,0)}.mat-mdc-option.mdc-list-item--disabled{cursor:default;pointer-events:none}.mat-mdc-option.mdc-list-item--disabled .mat-mdc-option-pseudo-checkbox,.mat-mdc-option.mdc-list-item--disabled .mdc-list-item__primary-text,.mat-mdc-option.mdc-list-item--disabled>mat-icon{opacity:.38}.mat-mdc-optgroup .mat-mdc-option:not(.mat-mdc-option-multiple){padding-left:32px}[dir=rtl] .mat-mdc-optgroup .mat-mdc-option:not(.mat-mdc-option-multiple){padding-left:16px;padding-right:32px}.mat-mdc-option .mat-icon,.mat-mdc-option .mat-pseudo-checkbox-full{margin-right:16px;flex-shrink:0}[dir=rtl] .mat-mdc-option .mat-icon,[dir=rtl] .mat-mdc-option .mat-pseudo-checkbox-full{margin-right:0;margin-left:16px}.mat-mdc-option .mat-pseudo-checkbox-minimal{margin-left:16px;flex-shrink:0}[dir=rtl] .mat-mdc-option .mat-pseudo-checkbox-minimal{margin-right:16px;margin-left:0}.mat-mdc-option .mat-mdc-option-ripple{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none}.mat-mdc-option .mdc-list-item__primary-text{white-space:normal;font-size:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;font-family:inherit;text-decoration:inherit;text-transform:inherit;margin-right:auto}[dir=rtl] .mat-mdc-option .mdc-list-item__primary-text{margin-right:0;margin-left:auto}@media(forced-colors: active){.mat-mdc-option.mdc-list-item--selected:not(:has(.mat-mdc-option-pseudo-checkbox))::after{content:"";position:absolute;top:50%;right:16px;transform:translateY(-50%);width:10px;height:0;border-bottom:solid 10px;border-radius:10px}[dir=rtl] .mat-mdc-option.mdc-list-item--selected:not(:has(.mat-mdc-option-pseudo-checkbox))::after{right:auto;left:16px}}.mat-mdc-option-multiple{--mat-list-list-item-selected-container-color: var(--mat-list-list-item-container-color, transparent)}.mat-mdc-option-active .mat-focus-indicator::before{content:""}
3
- `],encapsulation:2,changeDetection:0})}return o})();function Re(o,t,e){if(e.length){let i=t.toArray(),a=e.toArray(),n=0;for(let r=0;r<o+1;r++)i[r].group&&i[r].group===a[n]&&n++;return n}return 0}function Te(o,t,e,i){return o<e?o:o+t>e+i?Math.max(0,o-i+t):e}var $=(()=>{class o{static \u0275fac=function(i){return new(i||o)};static \u0275mod=p({type:o});static \u0275inj=d({imports:[x]})}return o})();var Be=(()=>{class o{static \u0275fac=function(i){return new(i||o)};static \u0275mod=p({type:o});static \u0275inj=d({imports:[J,$,Z,x]})}return o})();var de=(()=>{class o{_listeners=[];notify(e,i){for(let a of this._listeners)a(e,i)}listen(e){return this._listeners.push(e),()=>{this._listeners=this._listeners.filter(i=>e!==i)}}ngOnDestroy(){this._listeners=[]}static \u0275fac=function(i){return new(i||o)};static \u0275prov=E({token:o,factory:o.\u0275fac,providedIn:"root"})}return o})();var S=class{_multiple;_emitChanges;compareWith;_selection=new Set;_deselectedToEmit=[];_selectedToEmit=[];_selected=null;get selected(){return this._selected||(this._selected=Array.from(this._selection.values())),this._selected}changed=new l;constructor(t=!1,e,i=!0,a){this._multiple=t,this._emitChanges=i,this.compareWith=a,e&&e.length&&(t?e.forEach(n=>this._markSelected(n)):this._markSelected(e[0]),this._selectedToEmit.length=0)}select(...t){this._verifyValueAssignment(t),t.forEach(i=>this._markSelected(i));let e=this._hasQueuedChanges();return this._emitChangeEvent(),e}deselect(...t){this._verifyValueAssignment(t),t.forEach(i=>this._unmarkSelected(i));let e=this._hasQueuedChanges();return this._emitChangeEvent(),e}setSelection(...t){this._verifyValueAssignment(t);let e=this.selected,i=new Set(t.map(n=>this._getConcreteValue(n)));t.forEach(n=>this._markSelected(n)),e.filter(n=>!i.has(this._getConcreteValue(n,i))).forEach(n=>this._unmarkSelected(n));let a=this._hasQueuedChanges();return this._emitChangeEvent(),a}toggle(t){return this.isSelected(t)?this.deselect(t):this.select(t)}clear(t=!0){this._unmarkAll();let e=this._hasQueuedChanges();return t&&this._emitChangeEvent(),e}isSelected(t){return this._selection.has(this._getConcreteValue(t))}isEmpty(){return this._selection.size===0}hasValue(){return!this.isEmpty()}sort(t){this._multiple&&this.selected&&this._selected.sort(t)}isMultipleSelection(){return this._multiple}_emitChangeEvent(){this._selected=null,(this._selectedToEmit.length||this._deselectedToEmit.length)&&(this.changed.next({source:this,added:this._selectedToEmit,removed:this._deselectedToEmit}),this._deselectedToEmit=[],this._selectedToEmit=[])}_markSelected(t){t=this._getConcreteValue(t),this.isSelected(t)||(this._multiple||this._unmarkAll(),this.isSelected(t)||this._selection.add(t),this._emitChanges&&this._selectedToEmit.push(t))}_unmarkSelected(t){t=this._getConcreteValue(t),this.isSelected(t)&&(this._selection.delete(t),this._emitChanges&&this._deselectedToEmit.push(t))}_unmarkAll(){this.isEmpty()||this._selection.forEach(t=>this._unmarkSelected(t))}_verifyValueAssignment(t){t.length>1&&this._multiple}_hasQueuedChanges(){return!!(this._deselectedToEmit.length||this._selectedToEmit.length)}_getConcreteValue(t,e){if(this.compareWith){e=e??this._selection;for(let i of e)if(this.compareWith(t,i))return i;return t}else return t}};export{X as a,ce as b,le as c,M as d,Z as e,Re as f,Te as g,Be as h,de as i,S as j};
@@ -1 +0,0 @@
1
- import{d as S}from"./chunk-QWMDAFBN.js";import{a as q,b as I}from"./chunk-AK6F2DC7.js";import{a as E,b as N}from"./chunk-WPC6XC7P.js";import{b as D}from"./chunk-XIQ3L6H6.js";import{O as j,S as R}from"./chunk-B2QA6UZX.js";import{Bb as C,Db as d,Fb as u,Ka as c,Rb as y,Sb as w,Tb as l,Ub as g,Vb as O,Wa as x,ca as h,ga as b,ha as _,jb as M,kc as v,lb as p,mb as m,nc as k,oc as f,rb as P,sb as n,tb as s,ub as T}from"./chunk-3JGMGRXW.js";function V(a,e){a&1&&T(0,"span",4)}function A(a,e){if(a&1&&(n(0,"div",5)(1,"mat-icon",18),l(2,"folder"),s(),n(3,"span"),l(4),s()()),a&2){let o=u();c(4),g(o.projectName())}}function L(a,e){if(a&1&&(n(0,"p",7),l(1),s()),a&2){let o=u();c(),g(o.task().summary)}}function Y(a,e){a&1&&(n(0,"p",8),l(1,"No summary yet"),s())}function W(a,e){if(a&1){let o=C();n(0,"button",19),d("click",function(i){b(o);let r=u();return _(r.onStop(i))}),n(1,"mat-icon"),l(2,"stop_circle"),s()()}}function U(a,e){if(a&1){let o=C();n(0,"button",20),d("click",function(i){b(o);let r=u();return _(r.onMarkDone(i))}),n(1,"mat-icon"),l(2,"check_circle_outline"),s()()}}function B(a,e){if(a&1){let o=C();n(0,"button",21),d("click",function(i){b(o);let r=u();return _(r.onMarkActive(i))}),n(1,"mat-icon"),l(2,"replay"),s()()}}function $(a,e){if(a&1){let o=C();n(0,"button",22),d("click",function(i){b(o);let r=u();return _(r.onCloseTask(i))}),n(1,"mat-icon"),l(2,"close_fullscreen"),s()()}}var z=class a{task=f.required();projectNameOverride=f(null);showProject=f(!1);stopRequested=k();deleteRequested=k();starToggled=k();closeTaskRequested=k();markDoneRequested=k();markActiveRequested=k();router=h(S);projectState=h(D);projectName=v(()=>this.projectNameOverride()??this.projectState.getSelectedProjectId());statusLabel=v(()=>H[this.task().status]);statusIcon=v(()=>F[this.task().status]);isWorktree=v(()=>!!this.task().worktreeProject);navigate(){let e=this.projectName();e&&(this.projectState.selectProject(e),this.router.navigate(["project",e,"thread",this.task().id]))}onStop(e){e.stopPropagation(),this.stopRequested.emit(this.task().id)}onDelete(e){e.stopPropagation(),this.deleteRequested.emit(this.task().id)}onStarToggle(e){e.stopPropagation(),this.starToggled.emit(this.task().id)}onCloseTask(e){e.stopPropagation(),this.closeTaskRequested.emit(this.task().id)}onMarkDone(e){e.stopPropagation(),this.markDoneRequested.emit(this.task().id)}onMarkActive(e){e.stopPropagation(),this.markActiveRequested.emit(this.task().id)}formatRelativeTime(e){let o=Date.now()-new Date(e).getTime(),t=Math.floor(o/6e4);if(t<1)return"just now";if(t<60)return`${t} min ago`;let i=Math.floor(t/60);if(i<24)return`${i}h ago`;let r=Math.floor(i/24);return r===1?"yesterday":r<7?`${r} days ago`:new Date(e).toLocaleDateString("en",{day:"numeric",month:"short"})}static \u0275fac=function(o){return new(o||a)};static \u0275cmp=x({type:a,selectors:[["app-task-card"]],inputs:{task:[1,"task"],projectNameOverride:[1,"projectNameOverride"],showProject:[1,"showProject"]},outputs:{stopRequested:"stopRequested",deleteRequested:"deleteRequested",starToggled:"starToggled",closeTaskRequested:"closeTaskRequested",markDoneRequested:"markDoneRequested",markActiveRequested:"markActiveRequested"},decls:26,vars:20,consts:[["role","button","tabindex","0",1,"task-card",3,"click","keydown.enter","keydown.space"],[1,"status-badge"],[1,"status-icon"],[1,"status-label"],["aria-hidden","true",1,"pulse-ring"],[1,"task-project"],[1,"task-name"],[1,"task-summary"],[1,"task-summary","empty"],[1,"task-footer"],[1,"task-time"],[1,"task-actions"],["mat-icon-button","","matTooltip","Stop agent","aria-label","Stop agent",1,"action-btn","stop-btn"],["mat-icon-button","","matTooltip","Mark as done","aria-label","Mark as done",1,"action-btn","mark-done-btn"],["mat-icon-button","","matTooltip","Mark as active","aria-label","Mark as active",1,"action-btn","mark-active-btn"],["mat-icon-button","",1,"action-btn","star-btn",3,"click","matTooltip"],["mat-icon-button","","matTooltip","Close task (removes worktree)","aria-label","Close task",1,"action-btn","close-task-btn"],["mat-icon-button","","matTooltip","Delete task","aria-label","Delete task",1,"action-btn","delete-btn",3,"click"],[1,"project-icon"],["mat-icon-button","","matTooltip","Stop agent","aria-label","Stop agent",1,"action-btn","stop-btn",3,"click"],["mat-icon-button","","matTooltip","Mark as done","aria-label","Mark as done",1,"action-btn","mark-done-btn",3,"click"],["mat-icon-button","","matTooltip","Mark as active","aria-label","Mark as active",1,"action-btn","mark-active-btn",3,"click"],["mat-icon-button","","matTooltip","Close task (removes worktree)","aria-label","Close task",1,"action-btn","close-task-btn",3,"click"]],template:function(o,t){o&1&&(n(0,"article",0),d("click",function(){return t.navigate()})("keydown.enter",function(){return t.navigate()})("keydown.space",function(r){return t.navigate(),r.preventDefault()}),n(1,"div",1)(2,"mat-icon",2),l(3),s(),n(4,"span",3),l(5),s(),p(6,V,1,0,"span",4),s(),p(7,A,5,1,"div",5),n(8,"h3",6),l(9),s(),p(10,L,2,1,"p",7)(11,Y,2,0,"p",8),n(12,"footer",9)(13,"span",10),l(14),s(),n(15,"div",11),p(16,W,3,0,"button",12),p(17,U,3,0,"button",13)(18,B,3,0,"button",14),n(19,"button",15),d("click",function(r){return t.onStarToggle(r)}),n(20,"mat-icon"),l(21),s()(),p(22,$,3,0,"button",16),n(23,"button",17),d("click",function(r){return t.onDelete(r)}),n(24,"mat-icon"),l(25,"delete_outline"),s()()()()()),o&2&&(w("status-"+t.task().status),y("is-active",t.task().isActive),M("aria-label","Open task: "+t.task().name),c(3),g(t.statusIcon()),c(2),g(t.statusLabel()),c(),m(t.task().status==="waiting-you"?6:-1),c(),m(t.showProject()&&t.projectName()?7:-1),c(2),O(" ",t.task().name||"Unnamed task"," "),c(),m(t.task().summary?10:11),c(4),g(t.formatRelativeTime(t.task().modifiedDate)),c(2),m(t.task().status==="in-progress"?16:-1),c(),m(t.task().status!=="done"?17:18),c(2),y("starred",t.task().starring.length>0),P("matTooltip",t.task().starring.length>0?"Unstar":"Star"),M("aria-label",t.task().starring.length>0?"Unstar task":"Star task"),c(2),g(t.task().starring.length>0?"star":"star_border"),c(),m(t.isWorktree()?22:-1))},dependencies:[N,E,R,j,I,q],styles:['.glass-panel[_ngcontent-%COMP%]{background:var(--glass-bg);backdrop-filter:var(--glass-backdrop-blur);-webkit-backdrop-filter:var(--glass-backdrop-blur);border:1px solid var(--glass-border);box-shadow:var(--glass-shadow)}.glass-interactive[_ngcontent-%COMP%]{background:var(--glass-bg);backdrop-filter:var(--glass-backdrop-blur);-webkit-backdrop-filter:var(--glass-backdrop-blur);border:1px solid var(--glass-border);box-shadow:var(--glass-shadow);transition:all .3s cubic-bezier(.4,0,.2,1)}.glass-interactive[_ngcontent-%COMP%]:hover{transform:translateY(-2px);box-shadow:0 12px 40px #00000026}.glass-interactive[_ngcontent-%COMP%]:active{transform:translateY(0)}.glass-card[_ngcontent-%COMP%]{background:var(--glass-bg);backdrop-filter:var(--glass-backdrop-blur);-webkit-backdrop-filter:var(--glass-backdrop-blur);border:1px solid var(--glass-border);box-shadow:var(--glass-shadow);border-radius:20px;padding:1.5rem}.glass-button[_ngcontent-%COMP%]{background:var(--glass-bg);backdrop-filter:var(--glass-backdrop-blur);-webkit-backdrop-filter:var(--glass-backdrop-blur);border:1px solid var(--glass-border);box-shadow:var(--glass-shadow);transition:all .3s cubic-bezier(.4,0,.2,1)}.glass-button[_ngcontent-%COMP%]:hover{transform:translateY(-2px);box-shadow:0 12px 40px #00000026}.glass-button[_ngcontent-%COMP%]:active{transform:translateY(0)}.glass-button[_ngcontent-%COMP%]{border-radius:12px;padding:.75rem 1.5rem;font-weight:600;cursor:pointer}.glass-button[_ngcontent-%COMP%]:disabled{opacity:.5;cursor:not-allowed;transform:none}.glass-button[_ngcontent-%COMP%]:disabled:hover{transform:none}.smooth-theme-transition[_ngcontent-%COMP%]{transition:background .3s ease,color .3s ease,border-color .3s ease,box-shadow .3s ease}[_nghost-%COMP%]{display:block}.task-card[_ngcontent-%COMP%]{background:var(--glass-bg);backdrop-filter:var(--glass-backdrop-blur);-webkit-backdrop-filter:var(--glass-backdrop-blur);border:1px solid var(--glass-border);box-shadow:var(--glass-shadow);border-radius:16px;padding:1.25rem;cursor:pointer;position:relative;overflow:hidden;transition:transform .2s cubic-bezier(.4,0,.2,1),box-shadow .2s cubic-bezier(.4,0,.2,1),border-color .2s ease;outline:none;display:flex;flex-direction:column;gap:.5rem;min-height:160px}.task-card[_ngcontent-%COMP%]:hover, .task-card[_ngcontent-%COMP%]:focus-visible{transform:translateY(-3px);box-shadow:0 16px 48px #00000026}.task-card[_ngcontent-%COMP%]:active{transform:translateY(-1px)}.task-card[_ngcontent-%COMP%]:before{content:"";position:absolute;left:0;top:0;bottom:0;width:4px;border-radius:16px 0 0 16px;background:var(--status-color, var(--color-text-secondary))}.task-card.status-waiting-you[_ngcontent-%COMP%]{--status-color: var(--color-error);border-color:#ff3b3040}.task-card.status-in-progress[_ngcontent-%COMP%]{--status-color: var(--color-warning);border-color:#ff950033}.task-card.status-done[_ngcontent-%COMP%]{--status-color: var(--color-success)}.task-card.status-paused[_ngcontent-%COMP%]{--status-color: var(--color-text-secondary)}.task-card.status-error[_ngcontent-%COMP%]{--status-color: var(--color-error)}.task-card.is-active[_ngcontent-%COMP%]{box-shadow:var(--glass-shadow),0 0 0 2px rgba(var(--color-primary),.3)}.status-badge[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.375rem;position:relative}.status-badge[_ngcontent-%COMP%] .status-icon[_ngcontent-%COMP%]{font-size:1rem;width:1rem;height:1rem;color:var(--status-color, var(--color-text-secondary))}.status-in-progress[_ngcontent-%COMP%] .status-badge[_ngcontent-%COMP%] .status-icon[_ngcontent-%COMP%]{animation:_ngcontent-%COMP%_spin 2s linear infinite}.status-badge[_ngcontent-%COMP%] .status-label[_ngcontent-%COMP%]{font-size:.7rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--status-color, var(--color-text-secondary))}.status-badge[_ngcontent-%COMP%] .pulse-ring[_ngcontent-%COMP%]{position:absolute;left:-2px;top:-2px;width:20px;height:20px;border-radius:50%;border:2px solid var(--color-error);animation:_ngcontent-%COMP%_pulse 1.5s ease-out infinite;pointer-events:none}.task-project[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.25rem;font-size:.72rem;font-weight:600;color:var(--color-primary);opacity:.8;text-transform:uppercase;letter-spacing:.04em}.task-project[_ngcontent-%COMP%] .project-icon[_ngcontent-%COMP%]{font-size:.75rem;width:.75rem;height:.75rem}.task-name[_ngcontent-%COMP%]{margin:0;font-size:.95rem;font-weight:600;color:var(--color-text);line-height:1.3;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.task-summary[_ngcontent-%COMP%]{margin:0;font-size:.8rem;color:var(--color-text-secondary);line-height:1.4;flex:1;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}.task-summary.empty[_ngcontent-%COMP%]{font-style:italic;opacity:.6}.task-footer[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;margin-top:auto;padding-top:.25rem}.task-time[_ngcontent-%COMP%]{font-size:.72rem;color:var(--color-text-secondary);opacity:.8}.task-actions[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.125rem;opacity:0;transition:opacity .15s ease}.task-card[_ngcontent-%COMP%]:hover .task-actions[_ngcontent-%COMP%], .task-card[_ngcontent-%COMP%]:focus-within .task-actions[_ngcontent-%COMP%]{opacity:1}.task-actions[_ngcontent-%COMP%] .action-btn[_ngcontent-%COMP%]{width:28px;height:28px;display:flex!important;align-items:center!important;justify-content:center!important;padding:0!important}.task-actions[_ngcontent-%COMP%] .action-btn[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:1rem;width:1rem;height:1rem;display:flex;align-items:center;justify-content:center}.task-actions[_ngcontent-%COMP%] .stop-btn[_ngcontent-%COMP%]{color:var(--color-error)}.task-actions[_ngcontent-%COMP%] .mark-done-btn[_ngcontent-%COMP%]{color:var(--color-success)}.task-actions[_ngcontent-%COMP%] .star-btn[_ngcontent-%COMP%]{color:var(--color-text-secondary)}.task-actions[_ngcontent-%COMP%] .star-btn.starred[_ngcontent-%COMP%]{color:#f5a623}.task-actions[_ngcontent-%COMP%] .delete-btn[_ngcontent-%COMP%]{color:var(--color-text-secondary)}.task-actions[_ngcontent-%COMP%] .delete-btn[_ngcontent-%COMP%]:hover{color:var(--color-error)}@keyframes _ngcontent-%COMP%_spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes _ngcontent-%COMP%_pulse{0%{transform:scale(.8);opacity:1}to{transform:scale(2.2);opacity:0}}'],changeDetection:0})},H={"waiting-you":"Waiting for you","in-progress":"In progress\u2026",done:"Done",paused:"Paused",error:"Error"},F={"waiting-you":"mark_unread_chat_alt","in-progress":"pending",done:"check_circle",paused:"pause_circle",error:"error"};var ct=300*1e3,lt={"waiting-you":0,"in-progress":1,done:2,paused:3,error:4};export{z as a,ct as b,lt as c};
@@ -1 +0,0 @@
1
- import{a as _,i as D,t as B}from"./chunk-JG37UR26.js";import{b as m}from"./chunk-XIQ3L6H6.js";import{D as E,J as F,P as H,R as V,Rc as v,S as $,V as d,Z as a,a as O,b as C,ca as r,d as S,h as b,i as o,m as p,n as f,pa as U,t as L,u as I}from"./chunk-3JGMGRXW.js";var T=class i{selectedThreadIdSubject=new o(null);isLoadingSubject=new o(!1);isLoadingThreadListSubject=new o(!1);refreshThreadListSubject=new b;threadListSubject=new o([]);hasLoadedOncePerProject=new Map;currentProjectName=null;isLoading$=this.isLoadingSubject.asObservable();isLoadingThreadList$=this.isLoadingThreadListSubject.asObservable();threadApi=r(_);projectStateService=r(m);projectName$=this.projectStateService.selectedProject$.pipe(L(e=>e?.name),F());constructor(){I([this.projectName$,this.refreshThreadListSubject.asObservable().pipe(V(void 0))]).pipe(d(([e])=>{e!==this.currentProjectName&&(console.log("[THREAD_STATE] Project changed, clearing thread list"),this.threadListSubject.next([]),this.currentProjectName=e),e?this.hasLoadedOncePerProject.get(e)?console.log("[THREAD_STATE] Refreshing thread list for project",e,"(no spinner)"):(console.log("[THREAD_STATE] Initial load for project",e,"- showing spinner"),this.isLoadingThreadListSubject.next(!0)):(console.log("[THREAD_STATE] No project selected, hiding spinner"),this.isLoadingThreadListSubject.next(!1))}),$(([e])=>e?(console.log("[THREAD_STATE] Fetching threads for project:",e),this.threadApi.listThreads().pipe(L(t=>({threads:t,projectName:e})),E(t=>(console.error("[THREAD_STATE] Error loading thread list:",t),p({threads:[],projectName:e}))))):(console.log("[THREAD_STATE] No project selected, returning empty list"),p({threads:[],projectName:null}))),d(({threads:e,projectName:t})=>{console.log("[THREAD_STATE] Thread list loaded:",e.length,"threads for project",t),t&&this.hasLoadedOncePerProject.set(t,!0),this.isLoadingThreadListSubject.next(!1),this.threadListSubject.next(e)})).subscribe()}threadList$=this.threadListSubject.asObservable();refreshSelectedThreadSubject=new b;selectedThread$=I([this.projectName$,this.selectedThreadIdSubject.pipe(F()),this.refreshSelectedThreadSubject.pipe(V(void 0))]).pipe($(([e,t])=>!e||!t?p(null):(this.isLoadingSubject.next(!0),this.threadApi.getThread(t).pipe(H({bufferSize:1,refCount:!0})))),d(()=>{this.isLoadingSubject.next(!1)}));selectThread(e){this.selectedThreadIdSubject.next(e)}getSelectedThreadId(){return this.selectedThreadIdSubject.value}getSelectedThreadIdOrThrow(){let e=this.selectedThreadIdSubject.value;if(!e)throw new Error("[THREAD_STATE] No thread selected");return e}clearSelection(){this.selectedThreadIdSubject.next(null)}stop(){let e=this.selectedThreadIdSubject.value;if(!e){console.error("[THREAD_STATE] Cannot stop: no thread selected");return}console.log("[THREAD_STATE] Stopping thread:",e),this.threadApi.stopThread(e).subscribe({next:t=>console.log("[THREAD_STATE] Stop signal sent:",t.message),error:t=>console.error("[THREAD_STATE] Error stopping thread:",t)})}refreshThreadList(){console.log("[THREAD_STATE] Manually refreshing thread list"),this.refreshThreadListSubject.next()}updateStarLocal(e,t,n){let h=this.threadListSubject.value.map(c=>{if(c.id!==e)return c;let l=c.starring||[];return t&&!l.includes(n)?C(O({},c),{starring:[...l,n]}):!t&&l.includes(n)?C(O({},c),{starring:l.filter(u=>u!==n)}):c});this.threadListSubject.next(h)}refreshSelectedThread(){this.refreshSelectedThreadSubject.next()}updateThreadUsers(e,t){return this.threadApi.updateThreadUsers(e,t).pipe(d(()=>{this.refreshThreadList()}),E(n=>(console.error("[THREAD_STATE] Error updating thread users:",n),f(()=>n))))}renameThread(e,t){let n=t.trim();return!n||n.length===0?(console.error("[THREAD_STATE] Cannot rename thread: name is empty after trimming"),f(()=>new Error("Thread name cannot be empty"))):(console.log("[THREAD_STATE] Renaming thread:",e,"to:",n),this.threadApi.updateThread(e,n).pipe(d(s=>{console.log("[THREAD_STATE] Thread renamed successfully:",s),this.refreshThreadList()}),E(s=>(console.error("[THREAD_STATE] Error renaming thread:",s),f(()=>s)))))}static \u0275fac=function(t){return new(t||i)};static \u0275prov=a({token:i,factory:i.\u0275fac,providedIn:"root"})};var W=class i{http=r(v);usernameSubject=new o(null);authEnabledSubject=new o(!1);username$=this.usernameSubject.asObservable();authEnabled$=this.authEnabledSubject.asObservable();fetchCurrentUser(){return this.http.get("/api/user/me").pipe(d(e=>{this.usernameSubject.next(e.username),this.authEnabledSubject.next(e.authEnabled)}))}getUsername(){return this.usernameSubject.value}static \u0275fac=function(t){return new(t||i)};static \u0275prov=a({token:i,factory:i.\u0275fac,providedIn:"root"})};var j=class i{STORAGE_KEY="coday-preferences";isDesktopApp=!1;electronStorage=null;voiceLanguageSubject=new o("en-US");voiceLanguage$=this.voiceLanguageSubject.asObservable();voiceInputModeSubject=new o("browser");voiceInputMode$=this.voiceInputModeSubject.asObservable();enterToSendSubject=new o(!0);enterToSend$=this.enterToSendSubject.asObservable();voiceAnnounceEnabledSubject=new o(!1);voiceAnnounceEnabled$=this.voiceAnnounceEnabledSubject.asObservable();voiceModeSubject=new o("speech");voiceMode$=this.voiceModeSubject.asObservable();voiceReadFullTextSubject=new o(!1);voiceReadFullText$=this.voiceReadFullTextSubject.asObservable();voiceVolumeSubject=new o(.8);voiceVolume$=this.voiceVolumeSubject.asObservable();voiceRateSubject=new o(1.2);voiceRate$=this.voiceRateSubject.asObservable();selectedVoiceSubject=new o(null);selectedVoice$=this.selectedVoiceSubject.asObservable();printTechnicalMessagesSubject=new o(!1);printTechnicalMessages$=this.printTechnicalMessagesSubject.asObservable();hideTechnicalMessagesSubject=new o(!0);hideTechnicalMessages$=this.hideTechnicalMessagesSubject.asObservable();hideWarningMessagesSubject=new o(!1);hideWarningMessages$=this.hideWarningMessagesSubject.asObservable();agentNotificationEnabledSubject=new o(!1);agentNotificationEnabled$=this.agentNotificationEnabledSubject.asObservable();notificationSoundEnabledSubject=new o(!1);notificationSoundEnabled$=this.notificationSoundEnabledSubject.asObservable();browserNotificationEnabledSubject=new o(!1);browserNotificationEnabled$=this.browserNotificationEnabledSubject.asObservable();themeSubject=new o("light");theme$=this.themeSubject.asObservable();constructor(){console.log("[PREFERENCES] Initializing preferences service"),typeof window<"u"&&window.codayDesktop?.storage&&(this.isDesktopApp=!0,this.electronStorage=window.codayDesktop.storage,console.log("[PREFERENCES] Running in desktop app mode with persistent storage")),this.initializePreferences()}initializePreferences(){this.isDesktopApp?this.loadPreferencesAsync():this.loadPreferencesSync()}loadPreferencesSync(){let e=this.getPreferenceSync("voiceLanguage","en-US")??"en-US";this.voiceLanguageSubject.next(e),console.log("[PREFERENCES] Voice language initialized to:",e);let t=this.getPreferenceSync("useEnterToSend",!0)??!0;this.enterToSendSubject.next(t),console.log("[PREFERENCES] Enter to send initialized to:",t);let n=this.getPreferenceSync("voiceAnnounceEnabled",!1)??!1;this.voiceAnnounceEnabledSubject.next(n);let s=this.getPreferenceSync("voiceMode","speech")??"speech";this.voiceModeSubject.next(s);let h=this.getPreferenceSync("voiceReadFullText",!1)??!1;this.voiceReadFullTextSubject.next(h);let c=this.getPreferenceSync("voiceVolume",.8)??.8;this.voiceVolumeSubject.next(c);let l=this.getPreferenceSync("voiceRate",1.2)??1.2;this.voiceRateSubject.next(l);let u=this.getPreferenceSync("selectedVoice",null)??null;this.selectedVoiceSubject.next(u);let P=this.getPreferenceSync("printTechnicalMessages",!1)??!1;this.printTechnicalMessagesSubject.next(P);let y=this.getPreferenceSync("hideTechnicalMessages",!0)??!0;this.hideTechnicalMessagesSubject.next(y);let A=this.getPreferenceSync("hideWarningMessages",!1)??!1;this.hideWarningMessagesSubject.next(A);let w=this.getPreferenceSync("agentNotificationEnabled",!1)??!1;this.agentNotificationEnabledSubject.next(w);let R=this.getPreferenceSync("notificationSoundEnabled",!0)??!0;this.notificationSoundEnabledSubject.next(R);let M=this.getPreferenceSync("browserNotificationEnabled",!1)??!1;this.browserNotificationEnabledSubject.next(M);let x=this.getPreferenceSync("theme","light")??"light";this.themeSubject.next(x);let N=this.getPreferenceSync("voiceInputMode","browser")??"browser";this.voiceInputModeSubject.next(N),console.log("[PREFERENCES] All preferences initialized successfully")}loadPreferencesAsync(){return S(this,null,function*(){let e=(yield this.getPreferenceAsync("voiceLanguage","en-US"))??"en-US";this.voiceLanguageSubject.next(e),console.log("[PREFERENCES] Voice language initialized to:",e);let t=(yield this.getPreferenceAsync("useEnterToSend",!0))??!0;this.enterToSendSubject.next(t),console.log("[PREFERENCES] Enter to send initialized to:",t);let n=(yield this.getPreferenceAsync("voiceAnnounceEnabled",!1))??!1;this.voiceAnnounceEnabledSubject.next(n);let s=(yield this.getPreferenceAsync("voiceMode","speech"))??"speech";this.voiceModeSubject.next(s);let h=(yield this.getPreferenceAsync("voiceReadFullText",!1))??!1;this.voiceReadFullTextSubject.next(h);let c=(yield this.getPreferenceAsync("voiceVolume",.8))??.8;this.voiceVolumeSubject.next(c);let l=(yield this.getPreferenceAsync("voiceRate",1.2))??1.2;this.voiceRateSubject.next(l);let u=(yield this.getPreferenceAsync("selectedVoice",null))??null;this.selectedVoiceSubject.next(u);let P=(yield this.getPreferenceAsync("printTechnicalMessages",!1))??!1;this.printTechnicalMessagesSubject.next(P);let y=(yield this.getPreferenceAsync("hideTechnicalMessages",!0))??!0;this.hideTechnicalMessagesSubject.next(y);let A=(yield this.getPreferenceAsync("hideWarningMessages",!1))??!1;this.hideWarningMessagesSubject.next(A);let w=(yield this.getPreferenceAsync("agentNotificationEnabled",!1))??!1;this.agentNotificationEnabledSubject.next(w);let R=(yield this.getPreferenceAsync("notificationSoundEnabled",!0))??!0;this.notificationSoundEnabledSubject.next(R);let M=(yield this.getPreferenceAsync("browserNotificationEnabled",!1))??!1;this.browserNotificationEnabledSubject.next(M);let x=(yield this.getPreferenceAsync("theme","light"))??"light";this.themeSubject.next(x);let N=(yield this.getPreferenceAsync("voiceInputMode","browser"))??"browser";this.voiceInputModeSubject.next(N),console.log("[PREFERENCES] All preferences initialized successfully (async)")})}getPreference(e,t){return this.getPreferenceSync(e,t)}getPreferenceSync(e,t){try{let n=localStorage.getItem(this.STORAGE_KEY);if(!n)return t;let s=JSON.parse(n);return s[e]!==void 0?s[e]:t}catch(n){return t}}getPreferenceAsync(e,t){return S(this,null,function*(){if(!this.electronStorage)return this.getPreferenceSync(e,t);try{let n=yield this.electronStorage.get(this.STORAGE_KEY);if(!n)return t;let s=JSON.parse(n);return s[e]!==void 0?s[e]:t}catch(n){return t}})}setPreference(e,t){this.isDesktopApp?this.setPreferenceAsync(e,t):this.setPreferenceSync(e,t)}setPreferenceSync(e,t){try{let n=localStorage.getItem(this.STORAGE_KEY),s=n?JSON.parse(n):{};s[e]=t,localStorage.setItem(this.STORAGE_KEY,JSON.stringify(s)),this.updateSubject(e,t)}catch(n){console.error("Failed to set preference:",n)}}setPreferenceAsync(e,t){return S(this,null,function*(){if(!this.electronStorage){this.setPreferenceSync(e,t);return}try{let n=yield this.electronStorage.get(this.STORAGE_KEY),s=n?JSON.parse(n):{};s[e]=t,yield this.electronStorage.set(this.STORAGE_KEY,JSON.stringify(s)),this.updateSubject(e,t)}catch(n){console.error("Failed to set preference:",n)}})}updateSubject(e,t){e==="voiceLanguage"&&this.voiceLanguageSubject.next(t),e==="useEnterToSend"&&this.enterToSendSubject.next(t),e==="voiceAnnounceEnabled"&&this.voiceAnnounceEnabledSubject.next(t),e==="voiceMode"&&this.voiceModeSubject.next(t),e==="voiceReadFullText"&&this.voiceReadFullTextSubject.next(t),e==="voiceVolume"&&this.voiceVolumeSubject.next(t),e==="voiceRate"&&this.voiceRateSubject.next(t),e==="selectedVoice"&&this.selectedVoiceSubject.next(t),e==="printTechnicalMessages"&&this.printTechnicalMessagesSubject.next(t),e==="hideTechnicalMessages"&&this.hideTechnicalMessagesSubject.next(t),e==="hideWarningMessages"&&this.hideWarningMessagesSubject.next(t),e==="agentNotificationEnabled"&&this.agentNotificationEnabledSubject.next(t),e==="notificationSoundEnabled"&&this.notificationSoundEnabledSubject.next(t),e==="browserNotificationEnabled"&&this.browserNotificationEnabledSubject.next(t),e==="theme"&&this.themeSubject.next(t),e==="voiceInputMode"&&this.voiceInputModeSubject.next(t)}setVoiceLanguage(e){console.log("[PREFERENCES] Setting voice language to:",e),this.setPreference("voiceLanguage",e)}getVoiceLanguage(){return this.getPreference("voiceLanguage","en-US")??"en-US"}setVoiceInputMode(e){console.log("[PREFERENCES] Setting voice input mode to:",e),this.setPreference("voiceInputMode",e)}getVoiceInputMode(){return this.getPreference("voiceInputMode","browser")??"browser"}setEnterToSend(e){console.log("[PREFERENCES] Setting Enter to send to:",e),this.setPreference("useEnterToSend",e)}getEnterToSend(){return this.getPreference("useEnterToSend",!1)??!1}setVoiceAnnounceEnabled(e){console.log("[PREFERENCES] Setting voice announce enabled to:",e),this.setPreference("voiceAnnounceEnabled",e)}getVoiceAnnounceEnabled(){return this.getPreference("voiceAnnounceEnabled",!1)??!1}setVoiceMode(e){console.log("[PREFERENCES] Setting voice mode to:",e),this.setPreference("voiceMode",e)}getVoiceMode(){return this.getPreference("voiceMode","speech")??"speech"}setVoiceReadFullText(e){console.log("[PREFERENCES] Setting voice read full text to:",e),this.setPreference("voiceReadFullText",e)}getVoiceReadFullText(){return this.getPreference("voiceReadFullText",!1)??!1}setVoiceVolume(e){let t=Math.max(0,Math.min(1,e));console.log("[PREFERENCES] Setting voice volume to:",t),this.setPreference("voiceVolume",t)}getVoiceVolume(){return this.getPreference("voiceVolume",.8)??.8}setVoiceRate(e){let t=Math.max(.5,Math.min(2,e));console.log("[PREFERENCES] Setting voice rate to:",t),this.setPreference("voiceRate",t)}getVoiceRate(){return this.getPreference("voiceRate",1.2)??1.2}setSelectedVoice(e){console.log("[PREFERENCES] Setting selected voice to:",e),this.setPreference("selectedVoice",e)}getSelectedVoice(){return this.getPreference("selectedVoice",null)??null}setPrintTechnicalMessages(e){console.log("[PREFERENCES] Setting print technical messages to:",e),this.setPreference("printTechnicalMessages",e)}getPrintTechnicalMessages(){return this.getPreference("printTechnicalMessages",!1)??!1}setHideTechnicalMessages(e){console.log("[PREFERENCES] Setting hide technical messages to:",e),this.setPreference("hideTechnicalMessages",e)}getHideTechnicalMessages(){return this.getPreference("hideTechnicalMessages",!0)??!0}setHideWarningMessages(e){console.log("[PREFERENCES] Setting hide warning messages to:",e),this.setPreference("hideWarningMessages",e)}getHideWarningMessages(){return this.getPreference("hideWarningMessages",!1)??!1}setAgentNotificationEnabled(e){console.log("[PREFERENCES] Setting agent notification enabled to:",e),this.setPreference("agentNotificationEnabled",e)}getAgentNotificationEnabled(){return this.getPreference("agentNotificationEnabled",!1)??!1}setNotificationSoundEnabled(e){console.log("[PREFERENCES] Setting notification sound enabled to:",e),this.setPreference("notificationSoundEnabled",e)}getNotificationSoundEnabled(){return this.getPreference("notificationSoundEnabled",!0)??!0}setBrowserNotificationEnabled(e){console.log("[PREFERENCES] Setting browser notification enabled to:",e),this.setPreference("browserNotificationEnabled",e)}getBrowserNotificationEnabled(){return this.getPreference("browserNotificationEnabled",!1)??!1}static \u0275fac=function(t){return new(t||i)};static \u0275prov=a({token:i,factory:i.\u0275fac,providedIn:"root"})};var z=class i{eventSource=null;eventsSubject=new b;connectionStatusSubject=new o({connected:!1,reconnectAttempts:0,maxAttempts:3});reconnectAttempts=0;MAX_RECONNECT_ATTEMPTS=3;RECONNECT_DELAY=2e3;events$=this.eventsSubject.asObservable();connectionStatus$=this.connectionStatusSubject.asObservable();ngZone=r(U);connectToThread(e,t){console.log("[SSE] Connecting to thread event stream:",e,t),this.eventSource&&(console.log("[SSE] Closing existing EventSource"),this.eventSource.close());let n=`/api/projects/${e}/threads/${t}/event-stream`;console.log("[SSE] EventSource URL:",n),this.eventSource=new EventSource(n),this.setupEventHandlers()}setupEventHandlers(){this.eventSource&&(this.eventSource.onmessage=e=>{this.ngZone.run(()=>{console.log("[SSE] Message received:",e.data.substring(0,100)),this.reconnectAttempts=0,this.updateConnectionStatus(!0,0);try{let t=JSON.parse(e.data),n=B(t);n?(console.log("[SSE] Event:",n.type),this.eventsSubject.next(n)):console.warn("[SSE] Failed to build event:",t.type)}catch(t){console.error("[SSE] Parse error:",t.message)}})},this.eventSource.onopen=()=>{this.ngZone.run(()=>{console.log("[SSE] Connection established"),this.reconnectAttempts=0,this.updateConnectionStatus(!0,0)})},this.eventSource.onerror=e=>{this.ngZone.run(()=>{console.log("[SSE] EventSource error:",e),this.eventSource?.readyState===EventSource.CLOSED&&(console.log("[SSE] Connection closed"),this.updateConnectionStatus(!1,this.reconnectAttempts),this.reconnectAttempts<this.MAX_RECONNECT_ATTEMPTS?(console.log(`[SSE] Attempting reconnect ${this.reconnectAttempts+1}/${this.MAX_RECONNECT_ATTEMPTS}`),this.eventsSubject.next(new D({error:new Error(`Connection lost. Attempting to reconnect (${this.reconnectAttempts+1}/${this.MAX_RECONNECT_ATTEMPTS})...`)})),setTimeout(()=>{this.reconnectAttempts++,console.warn("[SSE] Reconnection may not work properly with thread-based connections")},this.RECONNECT_DELAY)):(console.log("[SSE] Max reconnection attempts reached"),this.eventsSubject.next(new D({error:new Error("Connection lost permanently. Please refresh the page.")}))))})})}disconnect(){this.eventSource&&(console.log("[SSE] Disconnecting EventSource"),this.eventSource.close(),this.eventSource=null,this.updateConnectionStatus(!1,0))}updateConnectionStatus(e,t){this.connectionStatusSubject.next({connected:e,reconnectAttempts:t,maxAttempts:this.MAX_RECONNECT_ATTEMPTS})}ngOnDestroy(){this.disconnect(),this.eventsSubject.complete(),this.connectionStatusSubject.complete()}static \u0275fac=function(t){return new(t||i)};static \u0275prov=a({token:i,factory:i.\u0275fac,providedIn:"root"})};var Y=class i{http=r(v);projectState=r(m);threadState=r(T);getBaseUrl(){return`/api/projects/${this.projectState.getSelectedProjectIdOrThrow()}/threads/${this.threadState.getSelectedThreadIdOrThrow()}/messages`}getMessages(){return this.http.get(this.getBaseUrl())}sendMessage(e){return this.http.post(this.getBaseUrl(),e,{responseType:"text"})}sendFreeMessage(e){return this.http.post(this.getBaseUrl(),{message:e})}getMessage(e){return this.http.get(`${this.getBaseUrl()}/${encodeURIComponent(e)}`)}deleteMessage(e){return this.http.delete(`${this.getBaseUrl()}/${encodeURIComponent(e)}`)}getFormattedMessage(e){return this.http.get(`${this.getBaseUrl()}/${encodeURIComponent(e)}/formatted`,{responseType:"text"})}static \u0275fac=function(t){return new(t||i)};static \u0275prov=a({token:i,factory:i.\u0275fac,providedIn:"root"})};var G=class i{currentThemeSubject=new o("light");currentTheme$=this.currentThemeSubject.asObservable();preferences=r(j);subscription=null;constructor(){console.log("[THEME] Initializing theme service"),this.initializeTheme(),this.setupSystemThemeListener()}ngOnDestroy(){this.subscription?.unsubscribe()}initializeTheme(){this.subscription=this.preferences.theme$.subscribe(e=>{console.log("[THEME] Theme preference changed to:",e),this.applyTheme(e)})}setTheme(e){this.preferences.setPreference("theme",e),this.applyTheme(e)}getCurrentTheme(){return this.currentThemeSubject.value}applyTheme(e){if(console.log("[THEME] Applying theme:",e),this.currentThemeSubject.next(e),e==="system")if(typeof window<"u"&&window.matchMedia){let n=window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light";console.log("[THEME] System theme resolved to:",n),this.setDocumentTheme(n)}else console.log("[THEME] matchMedia not available, defaulting to light theme"),this.setDocumentTheme("light");else this.setDocumentTheme(e)}setDocumentTheme(e){console.log("[THEME] Setting document theme to:",e),typeof document<"u"&&document.documentElement&&(e==="dark"?document.documentElement.setAttribute("data-theme","dark"):document.documentElement.removeAttribute("data-theme"))}setupSystemThemeListener(){typeof window<"u"&&window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change",e=>{this.getCurrentTheme()==="system"&&this.setDocumentTheme(e.matches?"dark":"light")})}static \u0275fac=function(t){return new(t||i)};static \u0275prov=a({token:i,factory:i.\u0275fac,providedIn:"root"})};export{T as a,W as b,j as c,z as d,Y as e,G as f};
@@ -1,7 +0,0 @@
1
- import{a as we,b as Oe,c as ie,d as Lt,e as zt,f as Bt}from"./chunk-EKBLXJOJ.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-JG37UR26.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 r{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,o=!e.parentKey&&e.date>=t.date;(i||o)&&this.currentInviteEventSubject.next(null)}if(e.silent)return;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(o=>o.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
-
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||r)};static \u0275prov=ge({token:r,factory:r.\u0275fac,providedIn:"root"})};var Ht=(()=>{class r{static \u0275fac=function(n){return new(n||r)};static \u0275mod=_e({type:r});static \u0275inj=he({imports:[Me]})}return r})();var Qt=(()=>{class r{static \u0275fac=function(n){return new(n||r)};static \u0275mod=_e({type:r});static \u0275inj=he({imports:[Me]})}return r})();var Ee=class r{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 o=speechSynthesis.getVoices();o.length&&(clearTimeout(i),e(o))})}}),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 o=i.onend,h=i.onerror;return i.onend=k=>{this.speakingSubject.next(!1),o&&o.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,o)=>i.localService&&!o.localService?-1:!i.localService&&o.localService?1:i.name.localeCompare(o.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(o=>o.name===t&&o.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,o]=t.split("|"),h=o?.slice(0,2),k=this.language.slice(0,2);if(h===k&&e.some(D=>D.name===i&&D.lang===o)){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
- `).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||r)};static \u0275prov=ge({token:r,factory:r.\u0275fac,providedIn:"root"})};var Kt=(r,e)=>e.code,Zt=(r,e)=>e.name+e.lang;function en(r,e){r&1&&(a(0,"div",15)(1,"mat-icon",37),l(2,"warning"),s(),a(3,"span",38),l(4," Browser notifications have been blocked. To enable them, please reset the site permissions in your browser settings. "),s()())}function tn(r,e){if(r&1&&(a(0,"option",23),l(1),s()),r&2){let t=e.$implicit;C("value",t.code),c(),He("",t.flag," ",t.label)}}function nn(r,e){r&1&&(a(0,"option",30),l(1,"Loading voices..."),s())}function on(r,e){r&1&&(a(0,"option",30),l(1,"No voice available"),s())}function rn(r,e){if(r&1&&(a(0,"option",23),l(1),s()),r&2){let t=e.$implicit;C("value",t.name+"|"+t.lang),c(),I(" ",t.displayName," ")}}var pe=class r{destroy$=new F;selectedTheme="light";selectedVoiceLanguage="en-US";useEnterToSend=!1;printTechnicalMessages=!1;showTechnicalMessages=!0;showWarningMessages=!0;voiceInputMode="browser";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.voiceInputMode=this.preferencesService.getVoiceInputMode(),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.voiceInputMode$.pipe(b(this.destroy$)).subscribe(e=>{this.voiceInputMode=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)}onVoiceInputModeChange(e){let t=e.target.value;console.log("[OPTIONS] Voice input mode changed to:",t),this.preferencesService.setVoiceInputMode(t)}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||r)};static \u0275cmp=V({type:r,selectors:[["app-options-panel"]],decls:154,vars:36,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-input-mode-select",1,"option-label"],["id","voice-input-mode-select",1,"option-select",3,"change","value"],["value","browser"],["value","whisper"],["value","voice-message"],["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(o){return y(n.selectedTheme,o)||(n.selectedTheme=o),o}),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(o){return y(n.selectedTheme,o)||(n.selectedTheme=o),o}),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(o){return y(n.selectedTheme,o)||(n.selectedTheme=o),o}),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(o){return y(n.useEnterToSend,o)||(n.useEnterToSend=o),o}),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(o){return y(n.useEnterToSend,o)||(n.useEnterToSend=o),o}),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(o){return y(n.showTechnicalMessages,o)||(n.showTechnicalMessages=o),o}),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(o){return y(n.showWarningMessages,o)||(n.showWarningMessages=o),o}),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(o){return y(n.printTechnicalMessages,o)||(n.printTechnicalMessages=o),o}),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(o){return y(n.agentNotificationEnabled,o)||(n.agentNotificationEnabled=o),o}),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(o){return y(n.notificationSoundEnabled,o)||(n.notificationSoundEnabled=o),o}),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(o){return y(n.browserNotificationEnabled,o)||(n.browserNotificationEnabled=o),o}),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 input method:"),s(),a(85,"select",17),p("change",function(o){return n.onVoiceInputModeChange(o)}),a(86,"option",18),l(87,"Browser (real-time)"),s(),a(88,"option",19),l(89,"Whisper (higher accuracy)"),s(),a(90,"option",20),l(91,"Voice message (send audio)"),s()()(),a(92,"div",3)(93,"label",21),l(94,"Voice recognition language:"),s(),a(95,"select",22),S("ngModelChange",function(o){return y(n.selectedVoiceLanguage,o)||(n.selectedVoiceLanguage=o),o}),p("change",function(){return n.onVoiceLanguageChange()}),R(96,tn,2,3,"option",23,Kt),s()(),a(98,"div",3)(99,"span",10),l(100,"Automatic announcement:"),s(),a(101,"div",4)(102,"label",5)(103,"input",24),S("ngModelChange",function(o){return y(n.voiceAnnounceEnabled,o)||(n.voiceAnnounceEnabled=o),o}),p("change",function(){return n.onVoiceAnnounceEnabledChange()}),s(),T(104,"span",7),l(105," Enabled "),s(),a(106,"label",5)(107,"input",24),S("ngModelChange",function(o){return y(n.voiceAnnounceEnabled,o)||(n.voiceAnnounceEnabled=o),o}),p("change",function(){return n.onVoiceAnnounceEnabledChange()}),s(),T(108,"span",7),l(109," Disabled "),s()()(),a(110,"div",3)(111,"span",10),l(112,"Voice mode:"),s(),a(113,"div",4)(114,"label",5)(115,"input",25),S("ngModelChange",function(o){return y(n.voiceMode,o)||(n.voiceMode=o),o}),p("change",function(){return n.onVoiceModeChange()}),s(),T(116,"span",7),l(117," Voice synthesis "),s(),a(118,"label",5)(119,"input",26),S("ngModelChange",function(o){return y(n.voiceMode,o)||(n.voiceMode=o),o}),p("change",function(){return n.onVoiceModeChange()}),s(),T(120,"span",7),l(121," Sound notification "),s()()(),a(122,"div",3)(123,"span",10),l(124,"Message reading:"),s(),a(125,"div",4)(126,"label",5)(127,"input",27),S("ngModelChange",function(o){return y(n.voiceReadFullText,o)||(n.voiceReadFullText=o),o}),p("change",function(){return n.onVoiceReadFullTextChange()}),s(),T(128,"span",7),l(129," Full message "),s(),a(130,"label",5)(131,"input",27),S("ngModelChange",function(o){return y(n.voiceReadFullText,o)||(n.voiceReadFullText=o),o}),p("change",function(){return n.onVoiceReadFullTextChange()}),s(),T(132,"span",7),l(133," First paragraphs only "),s()()(),a(134,"div",3)(135,"label",28),l(136,"Selected voice:"),s(),a(137,"select",29),S("ngModelChange",function(o){return y(n.selectedVoiceId,o)||(n.selectedVoiceId=o),o}),p("change",function(){return n.onSelectedVoiceChange()}),m(138,nn,2,0,"option",30),m(139,on,2,0,"option",30),R(140,rn,2,2,"option",23,Zt),s(),T(142,"div",10),a(143,"a",31),p("click",function(){return n.testVoice()}),a(144,"span",32),l(145,"Test voice"),s()()(),a(146,"div",3)(147,"label",33),l(148),s(),a(149,"input",34),S("ngModelChange",function(o){return y(n.voiceVolume,o)||(n.voiceVolume=o),o}),p("input",function(){return n.onVoiceVolumeChange()}),s()(),a(150,"div",3)(151,"label",35),l(152),s(),a(153,"input",36),S("ngModelChange",function(o){return y(n.voiceRate,o)||(n.voiceRate=o),o}),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),C("value",n.voiceInputMode),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?138:-1),c(),g(!n.loadingVoices&&n.availableVoices.length===0?139:-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=(r,e)=>({subThreads:r,depth:e}),sn=r=>({subThreads:r,depth:1}),Yt=(r,e)=>e.id,ln=(r,e)=>e.label;function cn(r,e){if(r&1){let t=M();a(0,"mat-icon",10),p("click",function(i){u(t);let o=d().$implicit,h=d(3);return _(h.toggleSubThreads(i,o.id))}),l(1),s()}if(r&2){let t=d().$implicit,n=d(3);c(),w(n.isParentExpanded(t.id)?"expand_more":"chevron_right")}}function dn(r,e){r&1&&Ne(0)}function pn(r,e){if(r&1&&fe(0,dn,1,0,"ng-container",11),r&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(r,e){if(r&1){let t=M();a(0,"div",5)(1,"a",6),p("click",function(i){let o=u(t).$implicit;return d(3).selectThread(o.id),_(i.preventDefault())})("keydown.enter",function(i){let o=u(t).$implicit;return d(3).selectThread(o.id),_(i.preventDefault())})("keydown.space",function(i){let o=u(t).$implicit;return d(3).selectThread(o.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(r&2){let t,n=e.$implicit,i=d().depth,o=d(2);G("--sub-depth",i),P("current",n.id===((t=o.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(o.isParentExpanded(n.id)&&(n.subThreads!=null&&n.subThreads.length)?7:-1)}}function gn(r,e){if(r&1&&R(0,mn,8,8,null,null,Yt),r&2){let t=e.subThreads;L(t)}}function hn(r,e){r&1&&(a(0,"div",4),T(1,"span",12),a(2,"span",13),l(3,"Loading threads..."),s()())}function un(r,e){if(r&1&&(a(0,"div",25),l(1),s()),r&2){let t=d(6);c(),w(t.renameErrorMessage)}}function _n(r,e){if(r&1){let t=M();a(0,"div",18)(1,"input",24),S("ngModelChange",function(i){u(t);let o=d(5);return y(o.editingThreadName,i)||(o.editingThreadName=i),_(i)}),p("keydown",function(i){u(t);let o=d(5);return _(o.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(r&2){let t=d(5);c(),x("ngModel",t.editingThreadName),C("disabled",t.isRenamingThread),c(),g(t.renameErrorMessage?2:-1)}}function fn(r,e){if(r&1){let t=M();a(0,"mat-icon",10),p("click",function(i){u(t);let o=d(2).$implicit,h=d(4);return _(h.toggleSubThreads(i,o.id))}),l(1),s()}if(r&2){let t=d(2).$implicit,n=d(4);c(),w(n.isParentExpanded(t.id)?"expand_more":"chevron_right")}}function vn(r,e){if(r&1&&(a(0,"span",27),l(1),s()),r&2){let t=d(2).$implicit;c(),w(t.name)}}function bn(r,e){r&1&&(T(0,"mat-spinner",29),a(1,"span",30),l(2,"Generating name..."),s()),r&2&&C("diameter",16)}function Cn(r,e){r&1&&(a(0,"mat-icon",28),l(1,"group"),s())}function xn(r,e){if(r&1){let t=M();a(0,"a",26),p("click",function(i){u(t);let o=d().$implicit;return d(4).selectThread(o.id),_(i.preventDefault())})("keydown.enter",function(i){u(t);let o=d().$implicit;return d(4).selectThread(o.id),_(i.preventDefault())})("keydown.space",function(i){u(t);let o=d().$implicit;return d(4).selectThread(o.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(r&2){let t=d().$implicit,n=d(4);C("matTooltip",t.name?t.name+`
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(r,e){if(r&1){let t=M();a(0,"button",31),p("click",function(i){u(t);let o=d().$implicit,h=d(4);return _(h.startEditingThreadName(i,o))}),a(1,"mat-icon"),l(2,"edit"),s()()}}function Sn(r,e){r&1&&Ne(0)}function Mn(r,e){if(r&1&&fe(0,Sn,1,0,"ng-container",11),r&2){let t=d().$implicit;d(3);let n=De(1);C("ngTemplateOutlet",n)("ngTemplateOutletContext",Qe(2,sn,t.subThreads))}}function Tn(r,e){if(r&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 o=u(t).$implicit,h=d(4);return _(h.toggleStar(i,o))}),a(6,"mat-icon"),l(7),s()(),a(8,"button",23),p("click",function(i){let o=u(t).$implicit,h=d(4);return _(h.deleteThread(i,o))}),a(9,"mat-icon"),l(10,"delete"),s()()()(),m(11,Mn,1,4,"ng-container")}if(r&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(r,e){if(r&1&&(a(0,"div",14)(1,"div",16),l(2),s(),R(3,Tn,12,9,null,null,Yt),s()),r&2){let t=e.$implicit;c(2),w(t.label),c(),L(t.threads)}}function wn(r,e){r&1&&(a(0,"div",15),l(1,"No existing threads"),s())}function On(r,e){if(r&1&&(a(0,"div",15),l(1),s()),r&2){let t=d(3);c(),I('No threads matching "',t.searchQuery(),'"')}}function En(r,e){if(r&1&&(R(0,Pn,5,1,"div",14,ln),m(2,wn,2,0,"div",15)(3,On,2,1,"div",15)),r&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(r,e){if(r&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()),r&2){let t=d();c(3),g(t.isLoadingThreadList()?3:4)}}function Vn(r,e){r&1&&(a(0,"span",32),l(1,"No project selected"),s())}function In(r,e){r&1&&(a(0,"span",32),l(1,"Loading..."),s())}function jn(r,e){if(r&1&&(a(0,"div",2),m(1,Vn,2,0,"span",32)(2,In,2,0,"span",32),s()),r&2){let t,n=d();c(),g((t=n.currentProject())!=null&&t.name?2:1)}}var Ve=class r{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 o of t)o.parentThreadId&&n.set(o.id,o.parentThreadId);let i=e;for(;i;){let o=n.get(i);o&&this.expandedParents.add(o),i=o}})}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),o=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,...o];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),o=i?this.threadApiService.unstarThread(t.id):this.threadApiService.starThread(t.id);this.threadStateService.updateStarLocal(t.id,!i,n),o.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:o=>{console.error("Error deleting thread:",o),alert("Failed to delete thread. Please try again.")}})}formatDate(e){try{let t=new Date(e),i=new Date().getTime()-t.getTime(),o=Math.floor(i/(1e3*60*60*24));return o===0?"Today":o===1?"Yesterday":o<7?`${o} 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||r)};static \u0275cmp=V({type:r,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(o){return o.stopPropagation()})("keydown",function(o){return o.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=(r,e)=>e.name;function An(r,e){if(r&1){let t=M();a(0,"button",12),p("click",function(){u(t);let i=d().$implicit,o=d();return _(o.start(i.name))}),a(1,"mat-icon"),l(2,"play_arrow"),s()()}if(r&2){let t=d().$implicit;C("disabled",t.isLoading)}}function Fn(r,e){if(r&1){let t=M();a(0,"button",13),p("click",function(){u(t);let i=d().$implicit,o=d();return _(o.stop(i.name))}),a(1,"mat-icon"),l(2,"stop"),s()()}if(r&2){let t=d().$implicit;C("disabled",t.isLoading)}}function Rn(r,e){if(r&1&&(a(0,"a",8)(1,"mat-icon",14),l(2,"open_in_new"),s()()),r&2){let t=d().$implicit;C("href",t.url,ce)("title",t.url)}}function Ln(r,e){if(r&1&&(a(0,"div",15),l(1),s()),r&2){let t=d(),n=t.$implicit,i=t.$index;G("order",i*2),c(),w(n.errorMessage)}}function zn(r,e){if(r&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(r,e){if(r&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()()),r&2){let t=d(),n=t.$implicit,i=t.$index,o=d();G("order",i*2+1),c(3),I("",n.name," logs"),c(),g(n.status==="running"?4:-1),c(3),w(o.logs()||"(empty)")}}function Bn(r,e){if(r&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,o=d();return _(o.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(r&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 r{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 o=n.map(h=>this.projectApi.getPreviewStatus(e,h.name));We(o).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()},r.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()},r.LOGS_TIMEOUT_MS)}scrollLogsToBottom(){setTimeout(()=>{let e=this.logsContent?.nativeElement;e&&(e.scrollTop=e.scrollHeight)})}static \u0275fac=function(t){return new(t||r)};static \u0275cmp=V({type:r,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(r,e){if(r&1&&(a(0,"div",3),l(1),s()),r&2){let t=d();c(),I("\u274C ",t.errorMessage)}}var me=class r{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||r)};static \u0275cmp=V({type:r,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(o){return y(n.jsonContent,o)||(n.jsonContent=o),o}),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(r,e){if(r&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(r&2){let t=d();c(3),C("disabled",!t.selectedProjectName())}}function Xn(r,e){if(r&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(r,e){if(r&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 o=d();return y(o.threadSearchQuery,i)||(o.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(r&2){let t=d();c(3),x("ngModel",t.threadSearchQuery)}}function Yn(r,e){if(r&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 o=d();return _(o.toggleThreadSearch(i))}),a(6,"mat-icon"),l(7,"search"),s()()()}}function qn(r,e){r&1&&(a(0,"mat-icon",22),l(1,"keyboard_arrow_up"),s())}function Gn(r,e){r&1&&(a(0,"mat-icon",23),l(1,"hub"),s())}function Kn(r,e){r&1&&(a(0,"mat-icon",22),l(1,"keyboard_arrow_up"),s())}function Zn(r,e){r&1&&(a(0,"mat-icon",23),l(1,"tune"),s())}function ei(r,e){r&1&&(a(0,"div",36)(1,"div",40),T(2,"app-options-panel",41),s()())}function ti(r,e){if(r&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(r,e){r&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(r,e){if(r&1&&m(0,ti,6,0,"div",35)(1,ni,6,0,"div",35),r&2){let t=d(2);g(t.selectedProjectName()?0:1)}}function oi(r,e){if(r&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(r,e){r&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(r,e){if(r&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(r,e){r&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(r,e){if(r&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(r,e){r&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(r,e){r&1&&(a(0,"mat-icon",22),l(1,"keyboard_arrow_up"),s())}function pi(r,e){r&1&&(a(0,"mat-icon",23),l(1,"rocket_launch"),s())}function mi(r,e){if(r&1&&(a(0,"div",36),T(1,"app-preview-panel",43),s()),r&2){let t=d(3);c(),C("projectName",t.selectedProjectName())}}function gi(r,e){if(r&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(r&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(r,e){if(r&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(r&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(r,e){if(r&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(r&2){let t=d();c(4),w(t.configErrorMessage)}}var qt=class r{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||r)};static \u0275cmp=V({type:r,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(o){return n.navigateToHome(),o.stopPropagation()})("keydown.enter",function(o){return n.navigateToHome(),o.preventDefault(),o.stopPropagation()})("keydown.space",function(o){return n.navigateToHome(),o.preventDefault(),o.stopPropagation()}),s(),a(8,"div",6)(9,"h2",7),l(10),s()()(),a(11,"div",8)(12,"a",9),p("click",function(o){return n.createNewThread(),o.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(o){return n.onThreadSearchModeChange(o)})("threadSelected",function(){return n.onThreadSelectedOnMobile()}),s()()()(),a(24,"div",19)(25,"div",20)(26,"a",21),p("click",function(o){return n.toggleSection("settings"),o.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};
@@ -1,2 +0,0 @@
1
- import{E as A,J as B}from"./chunk-B2QA6UZX.js";import{Ab as d,Fb as S,Fc as R,Jb as C,Ka as a,Kb as x,Lb as M,Pb as W,Qb as l,Rb as E,Sb as T,Wa as k,Xa as b,_ as h,aa as f,ab as w,ca as g,hc as P,ia as u,ja as v,jb as c,rb as m,sb as n,tb as o,ub as _,uc as p,ya as y}from"./chunk-3JGMGRXW.js";var D=["determinateSpinner"];function I(t,V){if(t&1&&(u(),n(0,"svg",11),_(1,"circle",12),o()),t&2){let e=S();c("viewBox",e._viewBox()),a(),l("stroke-dasharray",e._strokeCircumference(),"px")("stroke-dashoffset",e._strokeCircumference()/2,"px")("stroke-width",e._circleStrokeWidth(),"%"),c("r",e._circleRadius())}}var z=new f("mat-progress-spinner-default-options",{providedIn:"root",factory:()=>({diameter:O})}),O=100,N=10,J=(()=>{class t{_elementRef=g(y);_noopAnimations;get color(){return this._color||this._defaultColor}set color(e){this._color=e}_color;_defaultColor="primary";_determinateCircle;constructor(){let e=g(z),i=B(),r=this._elementRef.nativeElement;this._noopAnimations=i==="di-disabled"&&!!e&&!e._forceAnimations,this.mode=r.nodeName.toLowerCase()==="mat-spinner"?"indeterminate":"determinate",!this._noopAnimations&&i==="reduced-motion"&&r.classList.add("mat-progress-spinner-reduced-motion"),e&&(e.color&&(this.color=this._defaultColor=e.color),e.diameter&&(this.diameter=e.diameter),e.strokeWidth&&(this.strokeWidth=e.strokeWidth))}mode;get value(){return this.mode==="determinate"?this._value:0}set value(e){this._value=Math.max(0,Math.min(100,e||0))}_value=0;get diameter(){return this._diameter}set diameter(e){this._diameter=e||0}_diameter=O;get strokeWidth(){return this._strokeWidth??this.diameter/10}set strokeWidth(e){this._strokeWidth=e||0}_strokeWidth;_circleRadius(){return(this.diameter-N)/2}_viewBox(){let e=this._circleRadius()*2+this.strokeWidth;return`0 0 ${e} ${e}`}_strokeCircumference(){return 2*Math.PI*this._circleRadius()}_strokeDashOffset(){return this.mode==="determinate"?this._strokeCircumference()*(100-this._value)/100:null}_circleStrokeWidth(){return this.strokeWidth/this.diameter*100}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=k({type:t,selectors:[["mat-progress-spinner"],["mat-spinner"]],viewQuery:function(i,r){if(i&1&&C(D,5),i&2){let s;x(s=M())&&(r._determinateCircle=s.first)}},hostAttrs:["role","progressbar","tabindex","-1",1,"mat-mdc-progress-spinner","mdc-circular-progress"],hostVars:18,hostBindings:function(i,r){i&2&&(c("aria-valuemin",0)("aria-valuemax",100)("aria-valuenow",r.mode==="determinate"?r.value:null)("mode",r.mode),T("mat-"+r.color),l("width",r.diameter,"px")("height",r.diameter,"px")("--mat-progress-spinner-size",r.diameter+"px")("--mat-progress-spinner-active-indicator-width",r.diameter+"px"),E("_mat-animation-noopable",r._noopAnimations)("mdc-circular-progress--indeterminate",r.mode==="indeterminate"))},inputs:{color:"color",mode:"mode",value:[2,"value","value",p],diameter:[2,"diameter","diameter",p],strokeWidth:[2,"strokeWidth","strokeWidth",p]},exportAs:["matProgressSpinner"],decls:14,vars:11,consts:[["circle",""],["determinateSpinner",""],["aria-hidden","true",1,"mdc-circular-progress__determinate-container"],["xmlns","http://www.w3.org/2000/svg","focusable","false",1,"mdc-circular-progress__determinate-circle-graphic"],["cx","50%","cy","50%",1,"mdc-circular-progress__determinate-circle"],["aria-hidden","true",1,"mdc-circular-progress__indeterminate-container"],[1,"mdc-circular-progress__spinner-layer"],[1,"mdc-circular-progress__circle-clipper","mdc-circular-progress__circle-left"],[3,"ngTemplateOutlet"],[1,"mdc-circular-progress__gap-patch"],[1,"mdc-circular-progress__circle-clipper","mdc-circular-progress__circle-right"],["xmlns","http://www.w3.org/2000/svg","focusable","false",1,"mdc-circular-progress__indeterminate-circle-graphic"],["cx","50%","cy","50%"]],template:function(i,r){if(i&1&&(w(0,I,2,8,"ng-template",null,0,P),n(2,"div",2,1),u(),n(4,"svg",3),_(5,"circle",4),o()(),v(),n(6,"div",5)(7,"div",6)(8,"div",7),d(9,8),o(),n(10,"div",9),d(11,8),o(),n(12,"div",10),d(13,8),o()()()),i&2){let s=W(1);a(4),c("viewBox",r._viewBox()),a(),l("stroke-dasharray",r._strokeCircumference(),"px")("stroke-dashoffset",r._strokeDashOffset(),"px")("stroke-width",r._circleStrokeWidth(),"%"),c("r",r._circleRadius()),a(4),m("ngTemplateOutlet",s),a(2),m("ngTemplateOutlet",s),a(2),m("ngTemplateOutlet",s)}},dependencies:[R],styles:[`.mat-mdc-progress-spinner{--mat-progress-spinner-animation-multiplier: 1;display:block;overflow:hidden;line-height:0;position:relative;direction:ltr;transition:opacity 250ms cubic-bezier(0.4, 0, 0.6, 1)}.mat-mdc-progress-spinner circle{stroke-width:var(--mat-progress-spinner-active-indicator-width, 4px)}.mat-mdc-progress-spinner._mat-animation-noopable,.mat-mdc-progress-spinner._mat-animation-noopable .mdc-circular-progress__determinate-circle{transition:none !important}.mat-mdc-progress-spinner._mat-animation-noopable .mdc-circular-progress__indeterminate-circle-graphic,.mat-mdc-progress-spinner._mat-animation-noopable .mdc-circular-progress__spinner-layer,.mat-mdc-progress-spinner._mat-animation-noopable .mdc-circular-progress__indeterminate-container{animation:none !important}.mat-mdc-progress-spinner._mat-animation-noopable .mdc-circular-progress__indeterminate-container circle{stroke-dasharray:0 !important}@media(forced-colors: active){.mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic,.mat-mdc-progress-spinner .mdc-circular-progress__determinate-circle{stroke:currentColor;stroke:CanvasText}}.mat-progress-spinner-reduced-motion{--mat-progress-spinner-animation-multiplier: 1.25}.mdc-circular-progress__determinate-container,.mdc-circular-progress__indeterminate-circle-graphic,.mdc-circular-progress__indeterminate-container,.mdc-circular-progress__spinner-layer{position:absolute;width:100%;height:100%}.mdc-circular-progress__determinate-container{transform:rotate(-90deg)}.mdc-circular-progress--indeterminate .mdc-circular-progress__determinate-container{opacity:0}.mdc-circular-progress__indeterminate-container{font-size:0;letter-spacing:0;white-space:nowrap;opacity:0}.mdc-circular-progress--indeterminate .mdc-circular-progress__indeterminate-container{opacity:1;animation:mdc-circular-progress-container-rotate calc(1568.2352941176ms*var(--mat-progress-spinner-animation-multiplier)) linear infinite}.mdc-circular-progress__determinate-circle-graphic,.mdc-circular-progress__indeterminate-circle-graphic{fill:rgba(0,0,0,0)}.mat-mdc-progress-spinner .mdc-circular-progress__determinate-circle,.mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic{stroke:var(--mat-progress-spinner-active-indicator-color, var(--mat-sys-primary))}@media(forced-colors: active){.mat-mdc-progress-spinner .mdc-circular-progress__determinate-circle,.mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic{stroke:CanvasText}}.mdc-circular-progress__determinate-circle{transition:stroke-dashoffset 500ms cubic-bezier(0, 0, 0.2, 1)}.mdc-circular-progress__gap-patch{position:absolute;top:0;left:47.5%;box-sizing:border-box;width:5%;height:100%;overflow:hidden}.mdc-circular-progress__gap-patch .mdc-circular-progress__indeterminate-circle-graphic{left:-900%;width:2000%;transform:rotate(180deg)}.mdc-circular-progress__circle-clipper .mdc-circular-progress__indeterminate-circle-graphic{width:200%}.mdc-circular-progress__circle-right .mdc-circular-progress__indeterminate-circle-graphic{left:-100%}.mdc-circular-progress--indeterminate .mdc-circular-progress__circle-left .mdc-circular-progress__indeterminate-circle-graphic{animation:mdc-circular-progress-left-spin calc(1333ms*var(--mat-progress-spinner-animation-multiplier)) cubic-bezier(0.4, 0, 0.2, 1) infinite both}.mdc-circular-progress--indeterminate .mdc-circular-progress__circle-right .mdc-circular-progress__indeterminate-circle-graphic{animation:mdc-circular-progress-right-spin calc(1333ms*var(--mat-progress-spinner-animation-multiplier)) cubic-bezier(0.4, 0, 0.2, 1) infinite both}.mdc-circular-progress__circle-clipper{display:inline-flex;position:relative;width:50%;height:100%;overflow:hidden}.mdc-circular-progress--indeterminate .mdc-circular-progress__spinner-layer{animation:mdc-circular-progress-spinner-layer-rotate calc(5332ms*var(--mat-progress-spinner-animation-multiplier)) cubic-bezier(0.4, 0, 0.2, 1) infinite both}@keyframes mdc-circular-progress-container-rotate{to{transform:rotate(360deg)}}@keyframes mdc-circular-progress-spinner-layer-rotate{12.5%{transform:rotate(135deg)}25%{transform:rotate(270deg)}37.5%{transform:rotate(405deg)}50%{transform:rotate(540deg)}62.5%{transform:rotate(675deg)}75%{transform:rotate(810deg)}87.5%{transform:rotate(945deg)}100%{transform:rotate(1080deg)}}@keyframes mdc-circular-progress-left-spin{from{transform:rotate(265deg)}50%{transform:rotate(130deg)}to{transform:rotate(265deg)}}@keyframes mdc-circular-progress-right-spin{from{transform:rotate(-265deg)}50%{transform:rotate(-130deg)}to{transform:rotate(-265deg)}}
2
- `],encapsulation:2,changeDetection:0})}return t})();var X=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=b({type:t});static \u0275inj=h({imports:[A]})}return t})();export{J as a,X as b};