@whoz-oss/coday-web 0.29.4 → 0.29.5
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.
package/client/index.html
CHANGED
|
@@ -13,5 +13,5 @@
|
|
|
13
13
|
<style>:root{--color-bg:linear-gradient(135deg, #f0f4ff 0%, #e8ecf9 100%);--color-bg-solid:#f0f4ff;--color-bg-secondary:rgba(255, 255, 255, .7);--color-text:#1d1d1f;--color-text-secondary:#6e6e73;--color-text-inverse:#ffffff;--color-primary:#007aff;--color-primary-hover:#0051d5;--color-accent:#8b5cf6;--color-link:#007aff;--color-border:rgba(0, 0, 0, .1);--color-border-light:rgba(40, 40, 40, .08);--color-input-bg:rgba(255, 255, 255, .8);--color-success:#34c759;--color-error:#ff3b30;--color-warning:#ff9500;--color-info:#5ac8fa;--color-message-user:rgba(0, 122, 255, .1);--color-message-ai:rgba(255, 255, 255, .8);--color-code-bg:rgba(142, 142, 147, .12);--color-code-text:#ff375f;--color-bg-hover:rgba(0, 0, 0, .04);--glass-bg:rgba(255, 255, 255, .72);--glass-border:rgba(255, 255, 255, .18);--glass-shadow:0 8px 32px 0 rgba(31, 38, 135, .15);--glass-backdrop-blur:blur(20px);--color-shadow:rgba(0, 0, 0, .08);--color-overlay:rgba(0, 0, 0, .4)}@media print{html,body,app-root{height:auto!important;max-height:none!important;min-height:auto!important;overflow:visible!important;position:static!important}body{background:#fff!important;color:#000!important;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif!important;font-size:11pt;line-height:1.6;padding:1rem!important}*{animation:none!important;transition:none!important;box-shadow:none!important;text-shadow:none!important}}*{box-sizing:border-box}html{--mat-sys-background:light-dark(#fef8fc, #151316);--mat-sys-error:light-dark(#ba1a1a, #ffb4ab);--mat-sys-error-container:light-dark(#ffdad6, #93000a);--mat-sys-inverse-on-surface:light-dark(#f5eff4, #323033);--mat-sys-inverse-primary:light-dark(#d5baff, #7d00fa);--mat-sys-inverse-surface:light-dark(#323033, #e6e1e6);--mat-sys-on-background:light-dark(#1d1b1e, #e6e1e6);--mat-sys-on-error:light-dark(#ffffff, #690005);--mat-sys-on-error-container:light-dark(#93000a, #ffdad6);--mat-sys-on-primary:light-dark(#ffffff, #42008a);--mat-sys-on-primary-container:light-dark(#5f00c0, #ecdcff);--mat-sys-on-primary-fixed:light-dark(#270057, #270057);--mat-sys-on-primary-fixed-variant:light-dark(#5f00c0, #5f00c0);--mat-sys-on-secondary:light-dark(#ffffff, #352d40);--mat-sys-on-secondary-container:light-dark(#4b4357, #eadef7);--mat-sys-on-secondary-fixed:light-dark(#1f182a, #1f182a);--mat-sys-on-secondary-fixed-variant:light-dark(#4b4357, #4b4357);--mat-sys-on-surface:light-dark(#1d1b1e, #e6e1e6);--mat-sys-on-surface-variant:light-dark(#49454e, #e8e0eb);--mat-sys-on-tertiary:light-dark(#ffffff, #42008a);--mat-sys-on-tertiary-container:light-dark(#5f00c0, #ecdcff);--mat-sys-on-tertiary-fixed:light-dark(#270057, #270057);--mat-sys-on-tertiary-fixed-variant:light-dark(#5f00c0, #5f00c0);--mat-sys-outline:light-dark(#7b757f, #958e99);--mat-sys-outline-variant:light-dark(#cbc4cf, #49454e);--mat-sys-primary:light-dark(#7d00fa, #d5baff);--mat-sys-primary-container:light-dark(#ecdcff, #5f00c0);--mat-sys-primary-fixed:light-dark(#ecdcff, #ecdcff);--mat-sys-primary-fixed-dim:light-dark(#d5baff, #d5baff);--mat-sys-scrim:light-dark(#000000, #000000);--mat-sys-secondary:light-dark(#645b70, #cec2db);--mat-sys-secondary-container:light-dark(#eadef7, #4b4357);--mat-sys-secondary-fixed:light-dark(#eadef7, #eadef7);--mat-sys-secondary-fixed-dim:light-dark(#cec2db, #cec2db);--mat-sys-shadow:light-dark(#000000, #000000);--mat-sys-surface:light-dark(#fef8fc, #151316);--mat-sys-surface-bright:light-dark(#fef8fc, #3b383c);--mat-sys-surface-container:light-dark(#f2ecf1, #211f22);--mat-sys-surface-container-high:light-dark(#ede6eb, #2b292d);--mat-sys-surface-container-highest:light-dark(#e6e1e6, #363437);--mat-sys-surface-container-low:light-dark(#f8f2f6, #1d1b1e);--mat-sys-surface-container-lowest:light-dark(#ffffff, #0f0d11);--mat-sys-surface-dim:light-dark(#ded8dd, #151316);--mat-sys-surface-tint:light-dark(#7d00fa, #d5baff);--mat-sys-surface-variant:light-dark(#e8e0eb, #49454e);--mat-sys-tertiary:light-dark(#7d00fa, #d5baff);--mat-sys-tertiary-container:light-dark(#ecdcff, #5f00c0);--mat-sys-tertiary-fixed:light-dark(#ecdcff, #ecdcff);--mat-sys-tertiary-fixed-dim:light-dark(#d5baff, #d5baff);--mat-sys-neutral-variant20:#332f37;--mat-sys-neutral10:#1d1b1e;--mat-sys-level0:0px 0px 0px 0px rgba(0, 0, 0, .2), 0px 0px 0px 0px rgba(0, 0, 0, .14), 0px 0px 0px 0px rgba(0, 0, 0, .12);--mat-sys-level1:0px 2px 1px -1px rgba(0, 0, 0, .2), 0px 1px 1px 0px rgba(0, 0, 0, .14), 0px 1px 3px 0px rgba(0, 0, 0, .12);--mat-sys-level2:0px 3px 3px -2px rgba(0, 0, 0, .2), 0px 3px 4px 0px rgba(0, 0, 0, .14), 0px 1px 8px 0px rgba(0, 0, 0, .12);--mat-sys-level3:0px 3px 5px -1px rgba(0, 0, 0, .2), 0px 6px 10px 0px rgba(0, 0, 0, .14), 0px 1px 18px 0px rgba(0, 0, 0, .12);--mat-sys-level4:0px 5px 5px -3px rgba(0, 0, 0, .2), 0px 8px 10px 1px rgba(0, 0, 0, .14), 0px 3px 14px 2px rgba(0, 0, 0, .12);--mat-sys-level5:0px 7px 8px -4px rgba(0, 0, 0, .2), 0px 12px 17px 2px rgba(0, 0, 0, .14), 0px 5px 22px 4px rgba(0, 0, 0, .12);--mat-sys-body-large:400 1rem / 1.5rem -apple-system, BlinkMacSystemFont, "SF Pro Display", "Segoe UI", "Helvetica Neue", Arial, sans-serif;--mat-sys-body-large-font:-apple-system, BlinkMacSystemFont, "SF Pro Display", "Segoe UI", "Helvetica Neue", Arial, sans-serif;--mat-sys-body-large-line-height:1.5rem;--mat-sys-body-large-size:1rem;--mat-sys-body-large-tracking:.031rem;--mat-sys-body-large-weight:400;--mat-sys-body-medium:400 .875rem / 1.25rem -apple-system, BlinkMacSystemFont, "SF Pro Display", "Segoe UI", "Helvetica Neue", Arial, sans-serif;--mat-sys-body-medium-font:-apple-system, BlinkMacSystemFont, "SF Pro Display", "Segoe UI", "Helvetica Neue", Arial, sans-serif;--mat-sys-body-medium-line-height:1.25rem;--mat-sys-body-medium-size:.875rem;--mat-sys-body-medium-tracking:.016rem;--mat-sys-body-medium-weight:400;--mat-sys-body-small:400 .75rem / 1rem -apple-system, BlinkMacSystemFont, "SF Pro Display", "Segoe UI", "Helvetica Neue", Arial, sans-serif;--mat-sys-body-small-font:-apple-system, BlinkMacSystemFont, "SF Pro Display", "Segoe UI", "Helvetica Neue", Arial, sans-serif;--mat-sys-body-small-line-height:1rem;--mat-sys-body-small-size:.75rem;--mat-sys-body-small-tracking:.025rem;--mat-sys-body-small-weight:400;--mat-sys-display-large:400 3.562rem / 4rem -apple-system, BlinkMacSystemFont, "SF Pro Display", "Segoe UI", "Helvetica Neue", Arial, sans-serif;--mat-sys-display-large-font:-apple-system, BlinkMacSystemFont, "SF Pro Display", "Segoe UI", "Helvetica Neue", Arial, sans-serif;--mat-sys-display-large-line-height:4rem;--mat-sys-display-large-size:3.562rem;--mat-sys-display-large-tracking:-.016rem;--mat-sys-display-large-weight:400;--mat-sys-display-medium:400 2.812rem / 3.25rem -apple-system, BlinkMacSystemFont, "SF Pro Display", "Segoe UI", "Helvetica Neue", Arial, sans-serif;--mat-sys-display-medium-font:-apple-system, BlinkMacSystemFont, "SF Pro Display", "Segoe UI", "Helvetica Neue", Arial, sans-serif;--mat-sys-display-medium-line-height:3.25rem;--mat-sys-display-medium-size:2.812rem;--mat-sys-display-medium-tracking:0;--mat-sys-display-medium-weight:400;--mat-sys-display-small:400 2.25rem / 2.75rem -apple-system, BlinkMacSystemFont, "SF Pro Display", "Segoe UI", "Helvetica Neue", Arial, sans-serif;--mat-sys-display-small-font:-apple-system, BlinkMacSystemFont, "SF Pro Display", "Segoe UI", "Helvetica Neue", Arial, sans-serif;--mat-sys-display-small-line-height:2.75rem;--mat-sys-display-small-size:2.25rem;--mat-sys-display-small-tracking:0;--mat-sys-display-small-weight:400;--mat-sys-headline-large:400 2rem / 2.5rem -apple-system, BlinkMacSystemFont, "SF Pro Display", "Segoe UI", "Helvetica Neue", Arial, sans-serif;--mat-sys-headline-large-font:-apple-system, BlinkMacSystemFont, "SF Pro Display", "Segoe UI", "Helvetica Neue", Arial, sans-serif;--mat-sys-headline-large-line-height:2.5rem;--mat-sys-headline-large-size:2rem;--mat-sys-headline-large-tracking:0;--mat-sys-headline-large-weight:400;--mat-sys-headline-medium:400 1.75rem / 2.25rem -apple-system, BlinkMacSystemFont, "SF Pro Display", "Segoe UI", "Helvetica Neue", Arial, sans-serif;--mat-sys-headline-medium-font:-apple-system, BlinkMacSystemFont, "SF Pro Display", "Segoe UI", "Helvetica Neue", Arial, sans-serif;--mat-sys-headline-medium-line-height:2.25rem;--mat-sys-headline-medium-size:1.75rem;--mat-sys-headline-medium-tracking:0;--mat-sys-headline-medium-weight:400;--mat-sys-headline-small:400 1.5rem / 2rem -apple-system, BlinkMacSystemFont, "SF Pro Display", "Segoe UI", "Helvetica Neue", Arial, sans-serif;--mat-sys-headline-small-font:-apple-system, BlinkMacSystemFont, "SF Pro Display", "Segoe UI", "Helvetica Neue", Arial, sans-serif;--mat-sys-headline-small-line-height:2rem;--mat-sys-headline-small-size:1.5rem;--mat-sys-headline-small-tracking:0;--mat-sys-headline-small-weight:400;--mat-sys-label-large:500 .875rem / 1.25rem -apple-system, BlinkMacSystemFont, "SF Pro Display", "Segoe UI", "Helvetica Neue", Arial, sans-serif;--mat-sys-label-large-font:-apple-system, BlinkMacSystemFont, "SF Pro Display", "Segoe UI", "Helvetica Neue", Arial, sans-serif;--mat-sys-label-large-line-height:1.25rem;--mat-sys-label-large-size:.875rem;--mat-sys-label-large-tracking:.006rem;--mat-sys-label-large-weight:500;--mat-sys-label-large-weight-prominent:700;--mat-sys-label-medium:500 .75rem / 1rem -apple-system, BlinkMacSystemFont, "SF Pro Display", "Segoe UI", "Helvetica Neue", Arial, sans-serif;--mat-sys-label-medium-font:-apple-system, BlinkMacSystemFont, "SF Pro Display", "Segoe UI", "Helvetica Neue", Arial, sans-serif;--mat-sys-label-medium-line-height:1rem;--mat-sys-label-medium-size:.75rem;--mat-sys-label-medium-tracking:.031rem;--mat-sys-label-medium-weight:500;--mat-sys-label-medium-weight-prominent:700;--mat-sys-label-small:500 .688rem / 1rem -apple-system, BlinkMacSystemFont, "SF Pro Display", "Segoe UI", "Helvetica Neue", Arial, sans-serif;--mat-sys-label-small-font:-apple-system, BlinkMacSystemFont, "SF Pro Display", "Segoe UI", "Helvetica Neue", Arial, sans-serif;--mat-sys-label-small-line-height:1rem;--mat-sys-label-small-size:.688rem;--mat-sys-label-small-tracking:.031rem;--mat-sys-label-small-weight:500;--mat-sys-title-large:400 1.375rem / 1.75rem -apple-system, BlinkMacSystemFont, "SF Pro Display", "Segoe UI", "Helvetica Neue", Arial, sans-serif;--mat-sys-title-large-font:-apple-system, BlinkMacSystemFont, "SF Pro Display", "Segoe UI", "Helvetica Neue", Arial, sans-serif;--mat-sys-title-large-line-height:1.75rem;--mat-sys-title-large-size:1.375rem;--mat-sys-title-large-tracking:0;--mat-sys-title-large-weight:400;--mat-sys-title-medium:500 1rem / 1.5rem -apple-system, BlinkMacSystemFont, "SF Pro Display", "Segoe UI", "Helvetica Neue", Arial, sans-serif;--mat-sys-title-medium-font:-apple-system, BlinkMacSystemFont, "SF Pro Display", "Segoe UI", "Helvetica Neue", Arial, sans-serif;--mat-sys-title-medium-line-height:1.5rem;--mat-sys-title-medium-size:1rem;--mat-sys-title-medium-tracking:.009rem;--mat-sys-title-medium-weight:500;--mat-sys-title-small:500 .875rem / 1.25rem -apple-system, BlinkMacSystemFont, "SF Pro Display", "Segoe UI", "Helvetica Neue", Arial, sans-serif;--mat-sys-title-small-font:-apple-system, BlinkMacSystemFont, "SF Pro Display", "Segoe UI", "Helvetica Neue", Arial, sans-serif;--mat-sys-title-small-line-height:1.25rem;--mat-sys-title-small-size:.875rem;--mat-sys-title-small-tracking:.006rem;--mat-sys-title-small-weight:500;--mat-sys-corner-extra-large:28px;--mat-sys-corner-extra-large-top:28px 28px 0 0;--mat-sys-corner-extra-small:4px;--mat-sys-corner-extra-small-top:4px 4px 0 0;--mat-sys-corner-full:9999px;--mat-sys-corner-large:16px;--mat-sys-corner-large-end:0 16px 16px 0;--mat-sys-corner-large-start:16px 0 0 16px;--mat-sys-corner-large-top:16px 16px 0 0;--mat-sys-corner-medium:12px;--mat-sys-corner-none:0;--mat-sys-corner-small:8px;--mat-sys-dragged-state-layer-opacity:.16;--mat-sys-focus-state-layer-opacity:.12;--mat-sys-hover-state-layer-opacity:.08;--mat-sys-pressed-state-layer-opacity:.12;--mat-snack-bar-container-shape:transparent;--mat-snack-bar-container-color:transparent;--mat-snack-bar-supporting-text-color:var(--color-text)}html,body{margin:0;padding:0;width:100%;height:100%}body{background:var(--color-bg);color:var(--color-text);font-family:-apple-system,BlinkMacSystemFont,SF Pro Display,Segoe UI,Helvetica Neue,Arial,sans-serif;transition:background .3s ease,color .3s ease;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}</style><link rel="stylesheet" href="styles-6VROZYFU.css" media="print" onload="this.media='all'"><noscript><link rel="stylesheet" href="styles-6VROZYFU.css"></noscript></head>
|
|
14
14
|
<body>
|
|
15
15
|
<app-root></app-root>
|
|
16
|
-
<script src="polyfills-7R4CRVNH.js" type="module"></script><script src="main-
|
|
16
|
+
<script src="polyfills-7R4CRVNH.js" type="module"></script><script src="main-57QKMOJZ.js" type="module"></script></body>
|
|
17
17
|
</html>
|
|
@@ -99,7 +99,7 @@ This action cannot be undone once you post another message.`)&&(console.log("[CH
|
|
|
99
99
|
`).filter(s=>s.trim().length>0).reduce((s,a)=>{if(s.paragraphs>=3)return s;let c=a.length>80?1:0;return{paragraphs:s.paragraphs+c,text:s.text+(s.text?`
|
|
100
100
|
`:"")+a}},{paragraphs:0,text:""}).text||t}static \u0275fac=function(e){return new(e||n)};static \u0275cmp=H({type:n,selectors:[["app-chat-history"]],hostBindings:function(e,r){e&1&&x("scroll",function(){return r.onScroll()})},inputs:{messages:"messages",isThinking:"isThinking"},outputs:{copyRequested:"copyRequested",stopRequested:"stopRequested"},decls:4,vars:1,consts:[[1,"chat-history"],[3,"message","canDelete"],["title","Go to bottom",1,"go-to-bottom-btn"],[3,"copyRequested","deleteRequested","message","canDelete"],["title","Go to bottom",1,"go-to-bottom-btn",3,"click"],["fontSet","material-icons-outlined"]],template:function(e,r){e&1&&(m(0,"div",0),ot(1,VL,1,2,"app-chat-message",1,LL),O(3,jL,3,0,"button",2),g()),e&2&&(y(),st(r.messages),y(2),R(r.showGoToBottom?3:-1))},dependencies:[Jf,vn],styles:[".go-to-bottom-btn[_ngcontent-%COMP%]{position:fixed;bottom:120px;right:2rem;z-index:1000;width:48px;height:48px;border-radius:50%;border:none;background:var(--color-primary, #007acc);color:var(--color-text-inverse, #ffffff);font-size:1.2rem;font-weight:700;cursor:pointer;box-shadow:0 4px 12px #00000026;transition:all .2s ease;display:flex;align-items:center;justify-content:center}.go-to-bottom-btn[_ngcontent-%COMP%]:hover{background:var(--color-primary-hover, #005a9e);transform:scale(1.05);box-shadow:0 6px 16px #0003}.go-to-bottom-btn[_ngcontent-%COMP%]:active{transform:scale(.95)}@media (max-width: 768px){.go-to-bottom-btn[_ngcontent-%COMP%]{right:1rem;bottom:100px;width:40px;height:40px;font-size:1rem}}@media print{[_nghost-%COMP%]{display:block!important;height:auto!important;max-height:none!important;overflow:visible!important;position:static!important}.chat-history[_ngcontent-%COMP%]{display:block!important;height:auto!important;max-height:none!important;overflow:visible!important;position:static!important}.go-to-bottom-btn[_ngcontent-%COMP%]{display:none!important}}"]})};var YM=(()=>{class n{_renderer;_elementRef;onChange=e=>{};onTouched=()=>{};constructor(e,r){this._renderer=e,this._elementRef=r}setProperty(e,r){this._renderer.setProperty(this._elementRef.nativeElement,e,r)}registerOnTouched(e){this.onTouched=e}registerOnChange(e){this.onChange=e}setDisabledState(e){this.setProperty("disabled",e)}static \u0275fac=function(r){return new(r||n)(ye(it),ye(ue))};static \u0275dir=fe({type:n})}return n})(),nl=(()=>{class n extends YM{static \u0275fac=(()=>{let e;return function(i){return(e||(e=ht(n)))(i||n)}})();static \u0275dir=fe({type:n,features:[Ne]})}return n})(),ea=new T("");var BL={provide:ea,useExisting:Ht(()=>fr),multi:!0};function UL(){let n=hn()?hn().getUserAgent():"";return/android (\d+)/.test(n.toLowerCase())}var HL=new T(""),fr=(()=>{class n extends YM{_compositionMode;_composing=!1;constructor(e,r,i){super(e,r),this._compositionMode=i,this._compositionMode==null&&(this._compositionMode=!UL())}writeValue(e){let r=e??"";this.setProperty("value",r)}_handleInput(e){(!this._compositionMode||this._compositionMode&&!this._composing)&&this.onChange(e)}_compositionStart(){this._composing=!0}_compositionEnd(e){this._composing=!1,this._compositionMode&&this.onChange(e)}static \u0275fac=function(r){return new(r||n)(ye(it),ye(ue),ye(HL,8))};static \u0275dir=fe({type:n,selectors:[["input","formControlName","",3,"type","checkbox"],["textarea","formControlName",""],["input","formControl","",3,"type","checkbox"],["textarea","formControl",""],["input","ngModel","",3,"type","checkbox"],["textarea","ngModel",""],["","ngDefaultControl",""]],hostBindings:function(r,i){r&1&&x("input",function(s){return i._handleInput(s.target.value)})("blur",function(){return i.onTouched()})("compositionstart",function(){return i._compositionStart()})("compositionend",function(s){return i._compositionEnd(s.target.value)})},standalone:!1,features:[lt([BL]),Ne]})}return n})();function $L(n){return n==null||zL(n)===0}function zL(n){return n==null?null:Array.isArray(n)||typeof n=="string"?n.length:n instanceof Set?n.size:null}var cb=new T(""),ZM=new T("");function WL(n){return $L(n.value)?{required:!0}:null}function jM(n){return null}function KM(n){return n!=null}function QM(n){return Tr(n)?Ve(n):n}function XM(n){let t={};return n.forEach(e=>{t=e!=null?E(E({},t),e):t}),Object.keys(t).length===0?null:t}function JM(n,t){return t.map(e=>e(n))}function GL(n){return!n.validate}function eT(n){return n.map(t=>GL(t)?t:e=>t.validate(e))}function qL(n){if(!n)return null;let t=n.filter(KM);return t.length==0?null:function(e){return XM(JM(e,t))}}function lb(n){return n!=null?qL(eT(n)):null}function YL(n){if(!n)return null;let t=n.filter(KM);return t.length==0?null:function(e){let r=JM(e,t).map(QM);return ua(r).pipe(V(XM))}}function db(n){return n!=null?YL(eT(n)):null}function BM(n,t){return n===null?[t]:Array.isArray(n)?[...n,t]:[n,t]}function ZL(n){return n._rawValidators}function KL(n){return n._rawAsyncValidators}function sb(n){return n?Array.isArray(n)?n:[n]:[]}function rh(n,t){return Array.isArray(n)?n.includes(t):n===t}function UM(n,t){let e=sb(t);return sb(n).forEach(i=>{rh(e,i)||e.push(i)}),e}function HM(n,t){return sb(t).filter(e=>!rh(n,e))}var ih=class{get value(){return this.control?this.control.value:null}get valid(){return this.control?this.control.valid:null}get invalid(){return this.control?this.control.invalid:null}get pending(){return this.control?this.control.pending:null}get disabled(){return this.control?this.control.disabled:null}get enabled(){return this.control?this.control.enabled:null}get errors(){return this.control?this.control.errors:null}get pristine(){return this.control?this.control.pristine:null}get dirty(){return this.control?this.control.dirty:null}get touched(){return this.control?this.control.touched:null}get status(){return this.control?this.control.status:null}get untouched(){return this.control?this.control.untouched:null}get statusChanges(){return this.control?this.control.statusChanges:null}get valueChanges(){return this.control?this.control.valueChanges:null}get path(){return null}_composedValidatorFn;_composedAsyncValidatorFn;_rawValidators=[];_rawAsyncValidators=[];_setValidators(t){this._rawValidators=t||[],this._composedValidatorFn=lb(this._rawValidators)}_setAsyncValidators(t){this._rawAsyncValidators=t||[],this._composedAsyncValidatorFn=db(this._rawAsyncValidators)}get validator(){return this._composedValidatorFn||null}get asyncValidator(){return this._composedAsyncValidatorFn||null}_onDestroyCallbacks=[];_registerOnDestroy(t){this._onDestroyCallbacks.push(t)}_invokeOnDestroyCallbacks(){this._onDestroyCallbacks.forEach(t=>t()),this._onDestroyCallbacks=[]}reset(t=void 0){this.control&&this.control.reset(t)}hasError(t,e){return this.control?this.control.hasError(t,e):!1}getError(t,e){return this.control?this.control.getError(t,e):null}},Xs=class extends ih{name;get formDirective(){return null}get path(){return null}},Js=class extends ih{_parent=null;name=null;valueAccessor=null},oh=class{_cd;constructor(t){this._cd=t}get isTouched(){return this._cd?.control?._touched?.(),!!this._cd?.control?.touched}get isUntouched(){return!!this._cd?.control?.untouched}get isPristine(){return this._cd?.control?._pristine?.(),!!this._cd?.control?.pristine}get isDirty(){return!!this._cd?.control?.dirty}get isValid(){return this._cd?.control?._status?.(),!!this._cd?.control?.valid}get isInvalid(){return!!this._cd?.control?.invalid}get isPending(){return!!this._cd?.control?.pending}get isSubmitted(){return this._cd?._submitted?.(),!!this._cd?.submitted}},QL={"[class.ng-untouched]":"isUntouched","[class.ng-touched]":"isTouched","[class.ng-pristine]":"isPristine","[class.ng-dirty]":"isDirty","[class.ng-valid]":"isValid","[class.ng-invalid]":"isInvalid","[class.ng-pending]":"isPending"},xre=X(E({},QL),{"[class.ng-submitted]":"isSubmitted"}),yn=(()=>{class n extends oh{constructor(e){super(e)}static \u0275fac=function(r){return new(r||n)(ye(Js,2))};static \u0275dir=fe({type:n,selectors:[["","formControlName",""],["","ngModel",""],["","formControl",""]],hostVars:14,hostBindings:function(r,i){r&2&&le("ng-untouched",i.isUntouched)("ng-touched",i.isTouched)("ng-pristine",i.isPristine)("ng-dirty",i.isDirty)("ng-valid",i.isValid)("ng-invalid",i.isInvalid)("ng-pending",i.isPending)},standalone:!1,features:[Ne]})}return n})(),dh=(()=>{class n extends oh{constructor(e){super(e)}static \u0275fac=function(r){return new(r||n)(ye(Xs,10))};static \u0275dir=fe({type:n,selectors:[["","formGroupName",""],["","formArrayName",""],["","ngModelGroup",""],["","formGroup",""],["form",3,"ngNoForm",""],["","ngForm",""]],hostVars:16,hostBindings:function(r,i){r&2&&le("ng-untouched",i.isUntouched)("ng-touched",i.isTouched)("ng-pristine",i.isPristine)("ng-dirty",i.isDirty)("ng-valid",i.isValid)("ng-invalid",i.isInvalid)("ng-pending",i.isPending)("ng-submitted",i.isSubmitted)},standalone:!1,features:[Ne]})}return n})();var Qc="VALID",nh="INVALID",Ks="PENDING",Xc="DISABLED",gi=class{},sh=class extends gi{value;source;constructor(t,e){super(),this.value=t,this.source=e}},el=class extends gi{pristine;source;constructor(t,e){super(),this.pristine=t,this.source=e}},tl=class extends gi{touched;source;constructor(t,e){super(),this.touched=t,this.source=e}},Qs=class extends gi{status;source;constructor(t,e){super(),this.status=t,this.source=e}},ab=class extends gi{source;constructor(t){super(),this.source=t}},ah=class extends gi{source;constructor(t){super(),this.source=t}};function tT(n){return(uh(n)?n.validators:n)||null}function XL(n){return Array.isArray(n)?lb(n):n||null}function nT(n,t){return(uh(t)?t.asyncValidators:n)||null}function JL(n){return Array.isArray(n)?db(n):n||null}function uh(n){return n!=null&&!Array.isArray(n)&&typeof n=="object"}function eV(n,t,e){let r=n.controls;if(!(t?Object.keys(r):r).length)throw new S(1e3,"");if(!r[e])throw new S(1001,"")}function tV(n,t,e){n._forEachChild((r,i)=>{if(e[i]===void 0)throw new S(1002,"")})}var ch=class{_pendingDirty=!1;_hasOwnPendingAsyncValidator=null;_pendingTouched=!1;_onCollectionChange=()=>{};_updateOn;_parent=null;_asyncValidationSubscription;_composedValidatorFn;_composedAsyncValidatorFn;_rawValidators;_rawAsyncValidators;value;constructor(t,e){this._assignValidators(t),this._assignAsyncValidators(e)}get validator(){return this._composedValidatorFn}set validator(t){this._rawValidators=this._composedValidatorFn=t}get asyncValidator(){return this._composedAsyncValidatorFn}set asyncValidator(t){this._rawAsyncValidators=this._composedAsyncValidatorFn=t}get parent(){return this._parent}get status(){return tt(this.statusReactive)}set status(t){tt(()=>this.statusReactive.set(t))}_status=os(()=>this.statusReactive());statusReactive=Nt(void 0);get valid(){return this.status===Qc}get invalid(){return this.status===nh}get pending(){return this.status==Ks}get disabled(){return this.status===Xc}get enabled(){return this.status!==Xc}errors;get pristine(){return tt(this.pristineReactive)}set pristine(t){tt(()=>this.pristineReactive.set(t))}_pristine=os(()=>this.pristineReactive());pristineReactive=Nt(!0);get dirty(){return!this.pristine}get touched(){return tt(this.touchedReactive)}set touched(t){tt(()=>this.touchedReactive.set(t))}_touched=os(()=>this.touchedReactive());touchedReactive=Nt(!1);get untouched(){return!this.touched}_events=new A;events=this._events.asObservable();valueChanges;statusChanges;get updateOn(){return this._updateOn?this._updateOn:this.parent?this.parent.updateOn:"change"}setValidators(t){this._assignValidators(t)}setAsyncValidators(t){this._assignAsyncValidators(t)}addValidators(t){this.setValidators(UM(t,this._rawValidators))}addAsyncValidators(t){this.setAsyncValidators(UM(t,this._rawAsyncValidators))}removeValidators(t){this.setValidators(HM(t,this._rawValidators))}removeAsyncValidators(t){this.setAsyncValidators(HM(t,this._rawAsyncValidators))}hasValidator(t){return rh(this._rawValidators,t)}hasAsyncValidator(t){return rh(this._rawAsyncValidators,t)}clearValidators(){this.validator=null}clearAsyncValidators(){this.asyncValidator=null}markAsTouched(t={}){let e=this.touched===!1;this.touched=!0;let r=t.sourceControl??this;this._parent&&!t.onlySelf&&this._parent.markAsTouched(X(E({},t),{sourceControl:r})),e&&t.emitEvent!==!1&&this._events.next(new tl(!0,r))}markAllAsDirty(t={}){this.markAsDirty({onlySelf:!0,emitEvent:t.emitEvent,sourceControl:this}),this._forEachChild(e=>e.markAllAsDirty(t))}markAllAsTouched(t={}){this.markAsTouched({onlySelf:!0,emitEvent:t.emitEvent,sourceControl:this}),this._forEachChild(e=>e.markAllAsTouched(t))}markAsUntouched(t={}){let e=this.touched===!0;this.touched=!1,this._pendingTouched=!1;let r=t.sourceControl??this;this._forEachChild(i=>{i.markAsUntouched({onlySelf:!0,emitEvent:t.emitEvent,sourceControl:r})}),this._parent&&!t.onlySelf&&this._parent._updateTouched(t,r),e&&t.emitEvent!==!1&&this._events.next(new tl(!1,r))}markAsDirty(t={}){let e=this.pristine===!0;this.pristine=!1;let r=t.sourceControl??this;this._parent&&!t.onlySelf&&this._parent.markAsDirty(X(E({},t),{sourceControl:r})),e&&t.emitEvent!==!1&&this._events.next(new el(!1,r))}markAsPristine(t={}){let e=this.pristine===!1;this.pristine=!0,this._pendingDirty=!1;let r=t.sourceControl??this;this._forEachChild(i=>{i.markAsPristine({onlySelf:!0,emitEvent:t.emitEvent})}),this._parent&&!t.onlySelf&&this._parent._updatePristine(t,r),e&&t.emitEvent!==!1&&this._events.next(new el(!0,r))}markAsPending(t={}){this.status=Ks;let e=t.sourceControl??this;t.emitEvent!==!1&&(this._events.next(new Qs(this.status,e)),this.statusChanges.emit(this.status)),this._parent&&!t.onlySelf&&this._parent.markAsPending(X(E({},t),{sourceControl:e}))}disable(t={}){let e=this._parentMarkedDirty(t.onlySelf);this.status=Xc,this.errors=null,this._forEachChild(i=>{i.disable(X(E({},t),{onlySelf:!0}))}),this._updateValue();let r=t.sourceControl??this;t.emitEvent!==!1&&(this._events.next(new sh(this.value,r)),this._events.next(new Qs(this.status,r)),this.valueChanges.emit(this.value),this.statusChanges.emit(this.status)),this._updateAncestors(X(E({},t),{skipPristineCheck:e}),this),this._onDisabledChange.forEach(i=>i(!0))}enable(t={}){let e=this._parentMarkedDirty(t.onlySelf);this.status=Qc,this._forEachChild(r=>{r.enable(X(E({},t),{onlySelf:!0}))}),this.updateValueAndValidity({onlySelf:!0,emitEvent:t.emitEvent}),this._updateAncestors(X(E({},t),{skipPristineCheck:e}),this),this._onDisabledChange.forEach(r=>r(!1))}_updateAncestors(t,e){this._parent&&!t.onlySelf&&(this._parent.updateValueAndValidity(t),t.skipPristineCheck||this._parent._updatePristine({},e),this._parent._updateTouched({},e))}setParent(t){this._parent=t}getRawValue(){return this.value}updateValueAndValidity(t={}){if(this._setInitialStatus(),this._updateValue(),this.enabled){let r=this._cancelExistingSubscription();this.errors=this._runValidator(),this.status=this._calculateStatus(),(this.status===Qc||this.status===Ks)&&this._runAsyncValidator(r,t.emitEvent)}let e=t.sourceControl??this;t.emitEvent!==!1&&(this._events.next(new sh(this.value,e)),this._events.next(new Qs(this.status,e)),this.valueChanges.emit(this.value),this.statusChanges.emit(this.status)),this._parent&&!t.onlySelf&&this._parent.updateValueAndValidity(X(E({},t),{sourceControl:e}))}_updateTreeValidity(t={emitEvent:!0}){this._forEachChild(e=>e._updateTreeValidity(t)),this.updateValueAndValidity({onlySelf:!0,emitEvent:t.emitEvent})}_setInitialStatus(){this.status=this._allControlsDisabled()?Xc:Qc}_runValidator(){return this.validator?this.validator(this):null}_runAsyncValidator(t,e){if(this.asyncValidator){this.status=Ks,this._hasOwnPendingAsyncValidator={emitEvent:e!==!1,shouldHaveEmitted:t!==!1};let r=QM(this.asyncValidator(this));this._asyncValidationSubscription=r.subscribe(i=>{this._hasOwnPendingAsyncValidator=null,this.setErrors(i,{emitEvent:e,shouldHaveEmitted:t})})}}_cancelExistingSubscription(){if(this._asyncValidationSubscription){this._asyncValidationSubscription.unsubscribe();let t=(this._hasOwnPendingAsyncValidator?.emitEvent||this._hasOwnPendingAsyncValidator?.shouldHaveEmitted)??!1;return this._hasOwnPendingAsyncValidator=null,t}return!1}setErrors(t,e={}){this.errors=t,this._updateControlsErrors(e.emitEvent!==!1,this,e.shouldHaveEmitted)}get(t){let e=t;return e==null||(Array.isArray(e)||(e=e.split(".")),e.length===0)?null:e.reduce((r,i)=>r&&r._find(i),this)}getError(t,e){let r=e?this.get(e):this;return r&&r.errors?r.errors[t]:null}hasError(t,e){return!!this.getError(t,e)}get root(){let t=this;for(;t._parent;)t=t._parent;return t}_updateControlsErrors(t,e,r){this.status=this._calculateStatus(),t&&this.statusChanges.emit(this.status),(t||r)&&this._events.next(new Qs(this.status,e)),this._parent&&this._parent._updateControlsErrors(t,e,r)}_initObservables(){this.valueChanges=new U,this.statusChanges=new U}_calculateStatus(){return this._allControlsDisabled()?Xc:this.errors?nh:this._hasOwnPendingAsyncValidator||this._anyControlsHaveStatus(Ks)?Ks:this._anyControlsHaveStatus(nh)?nh:Qc}_anyControlsHaveStatus(t){return this._anyControls(e=>e.status===t)}_anyControlsDirty(){return this._anyControls(t=>t.dirty)}_anyControlsTouched(){return this._anyControls(t=>t.touched)}_updatePristine(t,e){let r=!this._anyControlsDirty(),i=this.pristine!==r;this.pristine=r,this._parent&&!t.onlySelf&&this._parent._updatePristine(t,e),i&&this._events.next(new el(this.pristine,e))}_updateTouched(t={},e){this.touched=this._anyControlsTouched(),this._events.next(new tl(this.touched,e)),this._parent&&!t.onlySelf&&this._parent._updateTouched(t,e)}_onDisabledChange=[];_registerOnCollectionChange(t){this._onCollectionChange=t}_setUpdateStrategy(t){uh(t)&&t.updateOn!=null&&(this._updateOn=t.updateOn)}_parentMarkedDirty(t){let e=this._parent&&this._parent.dirty;return!t&&!!e&&!this._parent._anyControlsDirty()}_find(t){return null}_assignValidators(t){this._rawValidators=Array.isArray(t)?t.slice():t,this._composedValidatorFn=XL(this._rawValidators)}_assignAsyncValidators(t){this._rawAsyncValidators=Array.isArray(t)?t.slice():t,this._composedAsyncValidatorFn=JL(this._rawAsyncValidators)}},lh=class extends ch{constructor(t,e,r){super(tT(e),nT(r,e)),this.controls=t,this._initObservables(),this._setUpdateStrategy(e),this._setUpControls(),this.updateValueAndValidity({onlySelf:!0,emitEvent:!!this.asyncValidator})}controls;registerControl(t,e){return this.controls[t]?this.controls[t]:(this.controls[t]=e,e.setParent(this),e._registerOnCollectionChange(this._onCollectionChange),e)}addControl(t,e,r={}){this.registerControl(t,e),this.updateValueAndValidity({emitEvent:r.emitEvent}),this._onCollectionChange()}removeControl(t,e={}){this.controls[t]&&this.controls[t]._registerOnCollectionChange(()=>{}),delete this.controls[t],this.updateValueAndValidity({emitEvent:e.emitEvent}),this._onCollectionChange()}setControl(t,e,r={}){this.controls[t]&&this.controls[t]._registerOnCollectionChange(()=>{}),delete this.controls[t],e&&this.registerControl(t,e),this.updateValueAndValidity({emitEvent:r.emitEvent}),this._onCollectionChange()}contains(t){return this.controls.hasOwnProperty(t)&&this.controls[t].enabled}setValue(t,e={}){tV(this,!0,t),Object.keys(t).forEach(r=>{eV(this,!0,r),this.controls[r].setValue(t[r],{onlySelf:!0,emitEvent:e.emitEvent})}),this.updateValueAndValidity(e)}patchValue(t,e={}){t!=null&&(Object.keys(t).forEach(r=>{let i=this.controls[r];i&&i.patchValue(t[r],{onlySelf:!0,emitEvent:e.emitEvent})}),this.updateValueAndValidity(e))}reset(t={},e={}){this._forEachChild((r,i)=>{r.reset(t?t[i]:null,{onlySelf:!0,emitEvent:e.emitEvent})}),this._updatePristine(e,this),this._updateTouched(e,this),this.updateValueAndValidity(e),e?.emitEvent!==!1&&this._events.next(new ah(this))}getRawValue(){return this._reduceChildren({},(t,e,r)=>(t[r]=e.getRawValue(),t))}_syncPendingControls(){let t=this._reduceChildren(!1,(e,r)=>r._syncPendingControls()?!0:e);return t&&this.updateValueAndValidity({onlySelf:!0}),t}_forEachChild(t){Object.keys(this.controls).forEach(e=>{let r=this.controls[e];r&&t(r,e)})}_setUpControls(){this._forEachChild(t=>{t.setParent(this),t._registerOnCollectionChange(this._onCollectionChange)})}_updateValue(){this.value=this._reduceValue()}_anyControls(t){for(let[e,r]of Object.entries(this.controls))if(this.contains(e)&&t(r))return!0;return!1}_reduceValue(){let t={};return this._reduceChildren(t,(e,r,i)=>((r.enabled||this.disabled)&&(e[i]=r.value),e))}_reduceChildren(t,e){let r=t;return this._forEachChild((i,o)=>{r=e(r,i,o)}),r}_allControlsDisabled(){for(let t of Object.keys(this.controls))if(this.controls[t].enabled)return!1;return Object.keys(this.controls).length>0||this.disabled}_find(t){return this.controls.hasOwnProperty(t)?this.controls[t]:null}};var fh=new T("",{providedIn:"root",factory:()=>hh}),hh="always";function nV(n,t){return[...t.path,n]}function rT(n,t,e=hh){iT(n,t),t.valueAccessor.writeValue(n.value),(n.disabled||e==="always")&&t.valueAccessor.setDisabledState?.(n.disabled),iV(n,t),sV(n,t),oV(n,t),rV(n,t)}function $M(n,t){n.forEach(e=>{e.registerOnValidatorChange&&e.registerOnValidatorChange(t)})}function rV(n,t){if(t.valueAccessor.setDisabledState){let e=r=>{t.valueAccessor.setDisabledState(r)};n.registerOnDisabledChange(e),t._registerOnDestroy(()=>{n._unregisterOnDisabledChange(e)})}}function iT(n,t){let e=ZL(n);t.validator!==null?n.setValidators(BM(e,t.validator)):typeof e=="function"&&n.setValidators([e]);let r=KL(n);t.asyncValidator!==null?n.setAsyncValidators(BM(r,t.asyncValidator)):typeof r=="function"&&n.setAsyncValidators([r]);let i=()=>n.updateValueAndValidity();$M(t._rawValidators,i),$M(t._rawAsyncValidators,i)}function iV(n,t){t.valueAccessor.registerOnChange(e=>{n._pendingValue=e,n._pendingChange=!0,n._pendingDirty=!0,n.updateOn==="change"&&oT(n,t)})}function oV(n,t){t.valueAccessor.registerOnTouched(()=>{n._pendingTouched=!0,n.updateOn==="blur"&&n._pendingChange&&oT(n,t),n.updateOn!=="submit"&&n.markAsTouched()})}function oT(n,t){n._pendingDirty&&n.markAsDirty(),n.setValue(n._pendingValue,{emitModelToViewChange:!1}),t.viewToModelUpdate(n._pendingValue),n._pendingChange=!1}function sV(n,t){let e=(r,i)=>{t.valueAccessor.writeValue(r),i&&t.viewToModelUpdate(r)};n.registerOnChange(e),t._registerOnDestroy(()=>{n._unregisterOnChange(e)})}function aV(n,t){n==null,iT(n,t)}function cV(n,t){if(!n.hasOwnProperty("model"))return!1;let e=n.model;return e.isFirstChange()?!0:!Object.is(t,e.currentValue)}function lV(n){return Object.getPrototypeOf(n.constructor)===nl}function dV(n,t){n._syncPendingControls(),t.forEach(e=>{let r=e.control;r.updateOn==="submit"&&r._pendingChange&&(e.viewToModelUpdate(r._pendingValue),r._pendingChange=!1)})}function uV(n,t){if(!t)return null;Array.isArray(t);let e,r,i;return t.forEach(o=>{o.constructor===fr?e=o:lV(o)?r=o:i=o}),i||r||e||null}var fV={provide:Xs,useExisting:Ht(()=>rl)},Jc=Promise.resolve(),rl=(()=>{class n extends Xs{callSetDisabledState;get submitted(){return tt(this.submittedReactive)}_submitted=os(()=>this.submittedReactive());submittedReactive=Nt(!1);_directives=new Set;form;ngSubmit=new U;options;constructor(e,r,i){super(),this.callSetDisabledState=i,this.form=new lh({},lb(e),db(r))}ngAfterViewInit(){this._setUpdateStrategy()}get formDirective(){return this}get control(){return this.form}get path(){return[]}get controls(){return this.form.controls}addControl(e){Jc.then(()=>{let r=this._findContainer(e.path);e.control=r.registerControl(e.name,e.control),rT(e.control,e,this.callSetDisabledState),e.control.updateValueAndValidity({emitEvent:!1}),this._directives.add(e)})}getControl(e){return this.form.get(e.path)}removeControl(e){Jc.then(()=>{let r=this._findContainer(e.path);r&&r.removeControl(e.name),this._directives.delete(e)})}addFormGroup(e){Jc.then(()=>{let r=this._findContainer(e.path),i=new lh({});aV(i,e),r.registerControl(e.name,i),i.updateValueAndValidity({emitEvent:!1})})}removeFormGroup(e){Jc.then(()=>{let r=this._findContainer(e.path);r&&r.removeControl(e.name)})}getFormGroup(e){return this.form.get(e.path)}updateModel(e,r){Jc.then(()=>{this.form.get(e.path).setValue(r)})}setValue(e){this.control.setValue(e)}onSubmit(e){return this.submittedReactive.set(!0),dV(this.form,this._directives),this.ngSubmit.emit(e),this.form._events.next(new ab(this.control)),e?.target?.method==="dialog"}onReset(){this.resetForm()}resetForm(e=void 0){this.form.reset(e),this.submittedReactive.set(!1)}_setUpdateStrategy(){this.options&&this.options.updateOn!=null&&(this.form._updateOn=this.options.updateOn)}_findContainer(e){return e.pop(),e.length?this.form.get(e):this.form}static \u0275fac=function(r){return new(r||n)(ye(cb,10),ye(ZM,10),ye(fh,8))};static \u0275dir=fe({type:n,selectors:[["form",3,"ngNoForm","",3,"formGroup",""],["ng-form"],["","ngForm",""]],hostBindings:function(r,i){r&1&&x("submit",function(s){return i.onSubmit(s)})("reset",function(){return i.onReset()})},inputs:{options:[0,"ngFormOptions","options"]},outputs:{ngSubmit:"ngSubmit"},exportAs:["ngForm"],standalone:!1,features:[lt([fV]),Ne]})}return n})();function zM(n,t){let e=n.indexOf(t);e>-1&&n.splice(e,1)}function WM(n){return typeof n=="object"&&n!==null&&Object.keys(n).length===2&&"value"in n&&"disabled"in n}var hV=class extends ch{defaultValue=null;_onChange=[];_pendingValue;_pendingChange=!1;constructor(t=null,e,r){super(tT(e),nT(r,e)),this._applyFormState(t),this._setUpdateStrategy(e),this._initObservables(),this.updateValueAndValidity({onlySelf:!0,emitEvent:!!this.asyncValidator}),uh(e)&&(e.nonNullable||e.initialValueIsDefault)&&(WM(t)?this.defaultValue=t.value:this.defaultValue=t)}setValue(t,e={}){this.value=this._pendingValue=t,this._onChange.length&&e.emitModelToViewChange!==!1&&this._onChange.forEach(r=>r(this.value,e.emitViewToModelChange!==!1)),this.updateValueAndValidity(e)}patchValue(t,e={}){this.setValue(t,e)}reset(t=this.defaultValue,e={}){this._applyFormState(t),this.markAsPristine(e),this.markAsUntouched(e),this.setValue(this.value,e),this._pendingChange=!1,e?.emitEvent!==!1&&this._events.next(new ah(this))}_updateValue(){}_anyControls(t){return!1}_allControlsDisabled(){return this.disabled}registerOnChange(t){this._onChange.push(t)}_unregisterOnChange(t){zM(this._onChange,t)}registerOnDisabledChange(t){this._onDisabledChange.push(t)}_unregisterOnDisabledChange(t){zM(this._onDisabledChange,t)}_forEachChild(t){}_syncPendingControls(){return this.updateOn==="submit"&&(this._pendingDirty&&this.markAsDirty(),this._pendingTouched&&this.markAsTouched(),this._pendingChange)?(this.setValue(this._pendingValue,{onlySelf:!0,emitModelToViewChange:!1}),!0):!1}_applyFormState(t){WM(t)?(this.value=this._pendingValue=t.value,t.disabled?this.disable({onlySelf:!0,emitEvent:!1}):this.enable({onlySelf:!0,emitEvent:!1})):this.value=this._pendingValue=t}};var pV={provide:Js,useExisting:Ht(()=>rn)},GM=Promise.resolve(),rn=(()=>{class n extends Js{_changeDetectorRef;callSetDisabledState;control=new hV;static ngAcceptInputType_isDisabled;_registered=!1;viewModel;name="";isDisabled;model;options;update=new U;constructor(e,r,i,o,s,a){super(),this._changeDetectorRef=s,this.callSetDisabledState=a,this._parent=e,this._setValidators(r),this._setAsyncValidators(i),this.valueAccessor=uV(this,o)}ngOnChanges(e){if(this._checkForErrors(),!this._registered||"name"in e){if(this._registered&&(this._checkName(),this.formDirective)){let r=e.name.previousValue;this.formDirective.removeControl({name:r,path:this._getPath(r)})}this._setUpControl()}"isDisabled"in e&&this._updateDisabled(e),cV(e,this.viewModel)&&(this._updateValue(this.model),this.viewModel=this.model)}ngOnDestroy(){this.formDirective&&this.formDirective.removeControl(this)}get path(){return this._getPath(this.name)}get formDirective(){return this._parent?this._parent.formDirective:null}viewToModelUpdate(e){this.viewModel=e,this.update.emit(e)}_setUpControl(){this._setUpdateStrategy(),this._isStandalone()?this._setUpStandalone():this.formDirective.addControl(this),this._registered=!0}_setUpdateStrategy(){this.options&&this.options.updateOn!=null&&(this.control._updateOn=this.options.updateOn)}_isStandalone(){return!this._parent||!!(this.options&&this.options.standalone)}_setUpStandalone(){rT(this.control,this,this.callSetDisabledState),this.control.updateValueAndValidity({emitEvent:!1})}_checkForErrors(){this._checkName()}_checkName(){this.options&&this.options.name&&(this.name=this.options.name),!this._isStandalone()&&this.name}_updateValue(e){GM.then(()=>{this.control.setValue(e,{emitViewToModelChange:!1}),this._changeDetectorRef?.markForCheck()})}_updateDisabled(e){let r=e.isDisabled.currentValue,i=r!==0&&Lt(r);GM.then(()=>{i&&!this.control.disabled?this.control.disable():!i&&this.control.disabled&&this.control.enable(),this._changeDetectorRef?.markForCheck()})}_getPath(e){return this._parent?nV(e,this._parent):[e]}static \u0275fac=function(r){return new(r||n)(ye(Xs,9),ye(cb,10),ye(ZM,10),ye(ea,10),ye(Dt,8),ye(fh,8))};static \u0275dir=fe({type:n,selectors:[["","ngModel","",3,"formControlName","",3,"formControl",""]],inputs:{name:"name",isDisabled:[0,"disabled","isDisabled"],model:[0,"ngModel","model"],options:[0,"ngModelOptions","options"]},outputs:{update:"ngModelChange"},exportAs:["ngModel"],standalone:!1,features:[lt([pV]),Ne,Qe]})}return n})();var ph=(()=>{class n{static \u0275fac=function(r){return new(r||n)};static \u0275dir=fe({type:n,selectors:[["form",3,"ngNoForm","",3,"ngNativeValidate",""]],hostAttrs:["novalidate",""],standalone:!1})}return n})();var mV={provide:ea,useExisting:Ht(()=>il),multi:!0};var gV=(()=>{class n{_accessors=[];add(e,r){this._accessors.push([e,r])}remove(e){for(let r=this._accessors.length-1;r>=0;--r)if(this._accessors[r][1]===e){this._accessors.splice(r,1);return}}select(e){this._accessors.forEach(r=>{this._isSameGroup(r,e)&&r[1]!==e&&r[1].fireUncheck(e.value)})}_isSameGroup(e,r){return e[0].control?e[0]._parent===r._control._parent&&e[1].name===r.name:!1}static \u0275fac=function(r){return new(r||n)};static \u0275prov=C({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})(),il=(()=>{class n extends nl{_registry;_injector;_state;_control;_fn;setDisabledStateFired=!1;onChange=()=>{};name;formControlName;value;callSetDisabledState=f(fh,{optional:!0})??hh;constructor(e,r,i,o){super(e,r),this._registry=i,this._injector=o}ngOnInit(){this._control=this._injector.get(Js),this._checkName(),this._registry.add(this._control,this)}ngOnDestroy(){this._registry.remove(this)}writeValue(e){this._state=e===this.value,this.setProperty("checked",this._state)}registerOnChange(e){this._fn=e,this.onChange=()=>{e(this.value),this._registry.select(this)}}setDisabledState(e){(this.setDisabledStateFired||e||this.callSetDisabledState==="whenDisabledForLegacyCode")&&this.setProperty("disabled",e),this.setDisabledStateFired=!0}fireUncheck(e){this.writeValue(e)}_checkName(){this.name&&this.formControlName&&(this.name,this.formControlName),!this.name&&this.formControlName&&(this.name=this.formControlName)}static \u0275fac=function(r){return new(r||n)(ye(it),ye(ue),ye(gV),ye(ce))};static \u0275dir=fe({type:n,selectors:[["input","type","radio","formControlName",""],["input","type","radio","formControl",""],["input","type","radio","ngModel",""]],hostBindings:function(r,i){r&1&&x("change",function(){return i.onChange()})("blur",function(){return i.onTouched()})},inputs:{name:"name",formControlName:"formControlName",value:"value"},standalone:!1,features:[lt([mV]),Ne]})}return n})(),vV={provide:ea,useExisting:Ht(()=>ub),multi:!0},ub=(()=>{class n extends nl{writeValue(e){this.setProperty("value",parseFloat(e))}registerOnChange(e){this.onChange=r=>{e(r==""?null:parseFloat(r))}}static \u0275fac=(()=>{let e;return function(i){return(e||(e=ht(n)))(i||n)}})();static \u0275dir=fe({type:n,selectors:[["input","type","range","formControlName",""],["input","type","range","formControl",""],["input","type","range","ngModel",""]],hostBindings:function(r,i){r&1&&x("change",function(s){return i.onChange(s.target.value)})("input",function(s){return i.onChange(s.target.value)})("blur",function(){return i.onTouched()})},standalone:!1,features:[lt([vV]),Ne]})}return n})();var yV={provide:ea,useExisting:Ht(()=>hr),multi:!0};function sT(n,t){return n==null?`${t}`:(t&&typeof t=="object"&&(t="Object"),`${n}: ${t}`.slice(0,50))}function bV(n){return n.split(":")[0]}var hr=(()=>{class n extends nl{value;_optionMap=new Map;_idCounter=0;set compareWith(e){this._compareWith=e}_compareWith=Object.is;appRefInjector=f(Ft).injector;destroyRef=f(dn);cdr=f(Dt);_queuedWrite=!1;_writeValueAfterRender(){this._queuedWrite||this.appRefInjector.destroyed||(this._queuedWrite=!0,vt({write:()=>{this.destroyRef.destroyed||(this._queuedWrite=!1,this.writeValue(this.value))}},{injector:this.appRefInjector}))}writeValue(e){this.cdr.markForCheck(),this.value=e;let r=this._getOptionId(e),i=sT(r,e);this.setProperty("value",i)}registerOnChange(e){this.onChange=r=>{this.value=this._getOptionValue(r),e(this.value)}}_registerOption(){return(this._idCounter++).toString()}_getOptionId(e){for(let r of this._optionMap.keys())if(this._compareWith(this._optionMap.get(r),e))return r;return null}_getOptionValue(e){let r=bV(e);return this._optionMap.has(r)?this._optionMap.get(r):e}static \u0275fac=(()=>{let e;return function(i){return(e||(e=ht(n)))(i||n)}})();static \u0275dir=fe({type:n,selectors:[["select","formControlName","",3,"multiple",""],["select","formControl","",3,"multiple",""],["select","ngModel","",3,"multiple",""]],hostBindings:function(r,i){r&1&&x("change",function(s){return i.onChange(s.target.value)})("blur",function(){return i.onTouched()})},inputs:{compareWith:"compareWith"},standalone:!1,features:[lt([yV]),Ne]})}return n})(),vi=(()=>{class n{_element;_renderer;_select;id;constructor(e,r,i){this._element=e,this._renderer=r,this._select=i,this._select&&(this.id=this._select._registerOption())}set ngValue(e){this._select!=null&&(this._select._optionMap.set(this.id,e),this._setElementValue(sT(this.id,e)),this._select._writeValueAfterRender())}set value(e){this._setElementValue(e),this._select&&this._select._writeValueAfterRender()}_setElementValue(e){this._renderer.setProperty(this._element.nativeElement,"value",e)}ngOnDestroy(){this._select&&(this._select._optionMap.delete(this.id),this._select._writeValueAfterRender())}static \u0275fac=function(r){return new(r||n)(ye(ue),ye(it),ye(hr,9))};static \u0275dir=fe({type:n,selectors:[["option"]],inputs:{ngValue:"ngValue",value:"value"},standalone:!1})}return n})(),_V={provide:ea,useExisting:Ht(()=>aT),multi:!0};function qM(n,t){return n==null?`${t}`:(typeof t=="string"&&(t=`'${t}'`),t&&typeof t=="object"&&(t="Object"),`${n}: ${t}`.slice(0,50))}function CV(n){return n.split(":")[0]}var aT=(()=>{class n extends nl{value;_optionMap=new Map;_idCounter=0;set compareWith(e){this._compareWith=e}_compareWith=Object.is;writeValue(e){this.value=e;let r;if(Array.isArray(e)){let i=e.map(o=>this._getOptionId(o));r=(o,s)=>{o._setSelected(i.indexOf(s.toString())>-1)}}else r=(i,o)=>{i._setSelected(!1)};this._optionMap.forEach(r)}registerOnChange(e){this.onChange=r=>{let i=[],o=r.selectedOptions;if(o!==void 0){let s=o;for(let a=0;a<s.length;a++){let c=s[a],l=this._getOptionValue(c.value);i.push(l)}}else{let s=r.options;for(let a=0;a<s.length;a++){let c=s[a];if(c.selected){let l=this._getOptionValue(c.value);i.push(l)}}}this.value=i,e(i)}}_registerOption(e){let r=(this._idCounter++).toString();return this._optionMap.set(r,e),r}_getOptionId(e){for(let r of this._optionMap.keys())if(this._compareWith(this._optionMap.get(r)._value,e))return r;return null}_getOptionValue(e){let r=CV(e);return this._optionMap.has(r)?this._optionMap.get(r)._value:e}static \u0275fac=(()=>{let e;return function(i){return(e||(e=ht(n)))(i||n)}})();static \u0275dir=fe({type:n,selectors:[["select","multiple","","formControlName",""],["select","multiple","","formControl",""],["select","multiple","","ngModel",""]],hostBindings:function(r,i){r&1&&x("change",function(s){return i.onChange(s.target)})("blur",function(){return i.onTouched()})},inputs:{compareWith:"compareWith"},standalone:!1,features:[lt([_V]),Ne]})}return n})(),yi=(()=>{class n{_element;_renderer;_select;id;_value;constructor(e,r,i){this._element=e,this._renderer=r,this._select=i,this._select&&(this.id=this._select._registerOption(this))}set ngValue(e){this._select!=null&&(this._value=e,this._setElementValue(qM(this.id,e)),this._select.writeValue(this._select.value))}set value(e){this._select?(this._value=e,this._setElementValue(qM(this.id,e)),this._select.writeValue(this._select.value)):this._setElementValue(e)}_setElementValue(e){this._renderer.setProperty(this._element.nativeElement,"value",e)}_setSelected(e){this._renderer.setProperty(this._element.nativeElement,"selected",e)}ngOnDestroy(){this._select&&(this._select._optionMap.delete(this.id),this._select.writeValue(this._select.value))}static \u0275fac=function(r){return new(r||n)(ye(ue),ye(it),ye(aT,9))};static \u0275dir=fe({type:n,selectors:[["option"]],inputs:{ngValue:"ngValue",value:"value"},standalone:!1})}return n})();var wV=(()=>{class n{_validator=jM;_onChange;_enabled;ngOnChanges(e){if(this.inputName in e){let r=this.normalizeInput(e[this.inputName].currentValue);this._enabled=this.enabled(r),this._validator=this._enabled?this.createValidator(r):jM,this._onChange&&this._onChange()}}validate(e){return this._validator(e)}registerOnValidatorChange(e){this._onChange=e}enabled(e){return e!=null}static \u0275fac=function(r){return new(r||n)};static \u0275dir=fe({type:n,features:[Qe]})}return n})();var EV={provide:cb,useExisting:Ht(()=>ol),multi:!0};var ol=(()=>{class n extends wV{required;inputName="required";normalizeInput=Lt;createValidator=e=>WL;enabled(e){return e}static \u0275fac=(()=>{let e;return function(i){return(e||(e=ht(n)))(i||n)}})();static \u0275dir=fe({type:n,selectors:[["","required","","formControlName","",3,"type","checkbox"],["","required","","formControl","",3,"type","checkbox"],["","required","","ngModel","",3,"type","checkbox"]],hostVars:1,hostBindings:function(r,i){r&2&&We("required",i._enabled?"":null)},inputs:{required:"required"},standalone:!1,features:[lt([EV]),Ne]})}return n})();var SV=(()=>{class n{static \u0275fac=function(r){return new(r||n)};static \u0275mod=Ce({type:n});static \u0275inj=ve({})}return n})();var bn=(()=>{class n{static withConfig(e){return{ngModule:n,providers:[{provide:fh,useValue:e.callSetDisabledState??hh}]}}static \u0275fac=function(r){return new(r||n)};static \u0275mod=Ce({type:n});static \u0275inj=ve({imports:[SV]})}return n})();var DV=["messageInput"];function MV(n,t){n&1&&(m(0,"div",2),ie(1,"span",5),b(2," Recording... Release to stop "),g())}function TV(n,t){if(n&1){let e=J();m(0,"button",7),x("click",function(){I(e);let i=w(2);return k(i.onStopClick())}),m(1,"mat-icon"),b(2,"stop"),g()()}}function xV(n,t){if(n&1){let e=J();m(0,"button",8),x("mousedown",function(i){I(e);let o=w(2);return k(o.onVoiceButtonMouseDown(i))})("mouseup",function(){I(e);let i=w(2);return k(i.onVoiceButtonMouseUp())})("mouseleave",function(){I(e);let i=w(2);return k(i.onVoiceButtonMouseLeave())})("touchstart",function(i){I(e);let o=w(2);return k(o.onVoiceButtonTouchStart(i))})("touchend",function(i){I(e);let o=w(2);return k(o.onVoiceButtonTouchEnd(i))})("keydown",function(i){I(e);let o=w(2);return k(o.onVoiceButtonKeyDown(i))})("keyup",function(i){I(e);let o=w(2);return k(o.onVoiceButtonKeyUp(i))}),m(1,"mat-icon"),b(2),g()(),m(3,"button",9),x("click",function(){I(e);let i=w(2);return k(i.sendMessage())}),m(4,"mat-icon"),b(5,"send"),g()()}if(n&2){let e=w(2);le("recording",e.isRecording)("hidden",e.message.trim()),y(2),Ue(e.isRecording?"fiber_manual_record":"mic"),y(),le("hidden",e.isDisabled||!e.message.trim())("active",!!e.message.trim()&&!e.isDisabled),j("disabled",e.isDisabled||!e.message.trim())("title",e.getSendButtonTooltip())}}function IV(n,t){if(n&1&&O(0,TV,3,0,"button",6)(1,xV,6,11),n&2){let e=w();R(e.isThinking?0:1)}}var mh=class n{static MIN_TEXTAREA_LINES=2;static MAX_TEXTAREA_LINES=15;isDisabled=!1;showWelcome=!1;isThinking=!1;isStarting=!1;isSessionInitializing=!1;isStopping=!1;messageSubmitted=new U;voiceRecordingToggled=new U;heightChanged=new U;stopRequested=new U;messageInput;message="";isRecording=!1;isFocused=!1;recognition=null;sessionHadTranscript=!1;pendingLineBreaksTimeout=null;useEnterToSend=!1;currentInvite="";subscriptions=[];thinkingPhrases=["Processing request...","Thinking...","Working on it..."];currentThinkingPhrase="Processing request...";thinkingPhraseIndex=0;thinkingInterval=null;preferencesService=f(Mt);codayService=f(Qt);ngOnInit(){this.initializeVoiceInput(),this.useEnterToSend=this.preferencesService.getEnterToSend(),this.subscriptions.push(this.preferencesService.voiceLanguage$.subscribe(()=>this.updateRecognitionLanguage())),this.subscriptions.push(this.preferencesService.enterToSend$.subscribe(t=>{this.useEnterToSend=t})),this.subscribeToInviteEvents(),this.subscribeToMessageRestore()}ngAfterViewInit(){this.adjustTextareaHeight(),requestAnimationFrame(()=>{setTimeout(()=>this.focusTextarea(),200)})}ngOnChanges(t){t.isThinking&&(t.isThinking.currentValue?this.startThinkingAnimation():(this.stopThinkingAnimation(),this.isStopping=!1,t.isThinking.previousValue&&(console.log("[CHAT-TEXTAREA] Thinking ended, scheduling focus"),requestAnimationFrame(()=>{setTimeout(()=>this.focusTextarea(),100)})))),t.isSessionInitializing&&!t.isSessionInitializing.currentValue&&t.isSessionInitializing.previousValue&&(console.log("[CHAT-TEXTAREA] Session initialization completed, scheduling focus"),requestAnimationFrame(()=>{setTimeout(()=>this.focusTextarea(),100)})),t.isStarting&&!t.isStarting.currentValue&&t.isStarting.previousValue&&this.isThinking&&(this.thinkingPhraseIndex===0?(console.log("[CHAT-TEXTAREA] Transitioning from Starting to Thinking at index 0 - restarting animation"),this.stopThinkingAnimation(),this.startThinkingAnimation()):console.log("[CHAT-TEXTAREA] Transitioning from Starting to Thinking at index",this.thinkingPhraseIndex,"- continuing without restart"))}ngOnDestroy(){this.subscriptions.forEach(t=>t.unsubscribe()),this.subscriptions=[],this.clearPendingLineBreaks(),this.stopThinkingAnimation()}onKeyDown(t){t.key==="Enter"&&(this.useEnterToSend?!t.shiftKey&&!t.metaKey&&!t.ctrlKey&&(t.preventDefault(),this.sendMessage()):(navigator.platform.toLowerCase().includes("mac")?t.metaKey:t.ctrlKey)&&!t.shiftKey&&(t.preventDefault(),this.sendMessage()))}onInput(){this.adjustTextareaHeight()}sendMessage(){this.isDisabled||(this.messageSubmitted.emit(this.message.trim()),this.message="",setTimeout(()=>this.adjustTextareaHeight(),0))}onStopClick(){this.isStopping=!0,this.stopRequested.emit()}toggleVoiceRecording(){console.log("Toggle voice recording called - using push-to-talk mode instead")}onVoiceButtonMouseDown(t){t.preventDefault(),this.startRecording()}onVoiceButtonMouseUp(){this.stopRecording()}onVoiceButtonMouseLeave(){this.stopRecording()}onVoiceButtonTouchStart(t){t.preventDefault(),this.startRecording()}onVoiceButtonTouchEnd(t){t.preventDefault(),this.stopRecording()}onVoiceButtonKeyDown(t){(t.code==="Space"||t.key===" "||t.keyCode===32)&&(t.preventDefault(),this.isRecording||this.startRecording())}onVoiceButtonKeyUp(t){(t.code==="Space"||t.key===" "||t.keyCode===32)&&(t.preventDefault(),this.stopRecording())}initializeVoiceInput(){let t=window.SpeechRecognition||window.webkitSpeechRecognition;if(console.log("[SPEECH] speechRecognition",t),!t){console.warn("[SPEECH] Speech Recognition API not available");return}this.recognition=new t,this.recognition.continuous=!0,this.recognition.interimResults=!0,this.recognition.maxAlternatives=1,this.recognition.lang=this.getSelectedLanguage();try{"grammars"in this.recognition&&(this.recognition.serviceURI=void 0)}catch{console.log("[SPEECH] Advanced speech recognition parameters not supported")}this.recognition.onresult=e=>{let r="";for(let i=e.resultIndex;i<e.results.length;i++){let o=e.results[i][0].transcript;e.results[i].isFinal&&(r+=o)}if(r){let i=this.improveTranscriptPunctuation(r.trim());this.sessionHadTranscript=!0,console.log("[SPEECH] onresult ending, appending to textarea",this.isRecording),this.appendToTextarea(i)}},this.recognition.onend=()=>{console.log("[SPEECH] Recognition ended. Was recording:",this.isRecording),this.isRecording=!1,this.voiceRecordingToggled.emit(this.isRecording)},this.recognition.onerror=e=>{console.error("[SPEECH] Speech recognition error:",e.error),console.log("[SPEECH] Error details:",{error:e.error,message:e.message,timeStamp:e.timeStamp}),this.isRecording=!1,this.clearPendingLineBreaks(),this.voiceRecordingToggled.emit(this.isRecording)},this.recognition.onstart=()=>{console.log("[SPEECH] Recognition started successfully")},this.recognition.onspeechstart=()=>{console.log("[SPEECH] Speech detected")},this.recognition.onspeechend=()=>{console.log("[SPEECH] Speech ended")}}startRecording(){return xe(this,null,function*(){if(!(!this.recognition||this.isRecording))try{this.isRecording=!0,this.sessionHadTranscript=!1,this.clearPendingLineBreaks(),this.voiceRecordingToggled.emit(this.isRecording),this.recognition.start(),console.log("[SPEECH] Started recording")}catch(t){console.error("[SPEECH] Failed to start recording:",t),this.isRecording=!1,this.voiceRecordingToggled.emit(this.isRecording)}})}stopRecording(){if(!this.recognition||!this.isRecording){console.log("[SPEECH] stopRecording not recording");return}try{console.log("[SPEECH] stopRecording recognition stop"),this.recognition.stop(),this.schedulePendingLineBreaks()}catch(t){console.error("[SPEECH] Failed to stop recording:",t)}}getSelectedLanguage(){return this.preferencesService.getVoiceLanguage()}updateRecognitionLanguage(){if(this.recognition){let t=this.getSelectedLanguage();this.recognition.lang=t,console.log("[SPEECH] Language changed to:",t)}}improveTranscriptPunctuation(t){let e=t;return/[.!?]$/.test(e.trim())||(e=e.trim()+"."),e=e.charAt(0).toUpperCase()+e.slice(1),e=e.replace(/\s+/g," "),e=e+" ",e}appendToTextarea(t){let e=this.message,r=e?`${e}${t}`:t;if(this.message=r,this.messageInput?.nativeElement){this.messageInput.nativeElement.focus();let i=this.message.length;this.messageInput.nativeElement.setSelectionRange(i,i)}setTimeout(()=>this.adjustTextareaHeight(),0)}schedulePendingLineBreaks(){this.clearPendingLineBreaks(),this.pendingLineBreaksTimeout=window.setTimeout(()=>{this.sessionHadTranscript&&(console.log("[SPEECH] Adding line breaks after transcript session"),this.appendToTextarea(`
|
|
101
101
|
|
|
102
|
-
`),this.sessionHadTranscript=!1),this.pendingLineBreaksTimeout=null},500)}clearPendingLineBreaks(){this.pendingLineBreaksTimeout&&(clearTimeout(this.pendingLineBreaksTimeout),this.pendingLineBreaksTimeout=null)}adjustTextareaHeight(){let t=this.messageInput?.nativeElement;if(!t)return;let e=window.getComputedStyle(t),r=parseFloat(e.fontSize),i=parseFloat(e.lineHeight)||r*1.5,o=i*n.MIN_TEXTAREA_LINES+parseFloat(e.paddingTop)+parseFloat(e.paddingBottom),s=i*n.MAX_TEXTAREA_LINES+parseFloat(e.paddingTop)+parseFloat(e.paddingBottom);t.style.height="auto";let a=t.scrollHeight;a<o?a=o:a>s&&(a=s),t.style.height=`${a}px`;let c=t.parentElement?.offsetHeight||a+32;this.heightChanged.emit(c)}getSendButtonShortcut(){return this.useEnterToSend?"Enter":navigator.platform.toLowerCase().includes("mac")?"\u2318+Enter":"Ctrl+Enter"}getSendButtonTooltip(){return this.useEnterToSend?"Send message (Enter) - Shift+Enter for new line":`Send message (${navigator.platform.toLowerCase().includes("mac")?"Cmd+Enter":"Ctrl+Enter"}) - Enter for new line`}getPlaceholder(){return this.isSessionInitializing?"Initializing session...":this.isThinking?this.isStopping?"Stopping...":this.isStarting?"Starting...":this.currentThinkingPhrase:this.showWelcome?"How can I help you today?":this.currentInvite?"Type your message here...":"Type your prompt here"}startThinkingAnimation(){this.thinkingPhraseIndex=0,this.currentThinkingPhrase=this.thinkingPhrases[0]||"Thinking...",this.thinkingInterval=window.setInterval(()=>{this.thinkingPhraseIndex<this.thinkingPhrases.length-1&&(this.thinkingPhraseIndex++,this.currentThinkingPhrase=this.thinkingPhrases[this.thinkingPhraseIndex]||"Thinking...")},2e3)}stopThinkingAnimation(){this.thinkingInterval&&(clearInterval(this.thinkingInterval),this.thinkingInterval=null),this.thinkingPhraseIndex=0,this.currentThinkingPhrase="Thinking..."}subscribeToInviteEvents(){this.subscriptions.push(this.codayService.currentInviteEvent$.subscribe(t=>{t?this.handleInviteEvent(t.invite,t.defaultValue):this.currentInvite=""}))}handleInviteEvent(t,e){this.currentInvite=t,e&&(this.message=e,setTimeout(()=>this.adjustTextareaHeight(),0)),this.messageInput?.nativeElement&&this.messageInput.nativeElement.focus()}subscribeToMessageRestore(){this.subscriptions.push(this.codayService.messageToRestore$.subscribe(t=>{t.trim()&&(console.log("[CHAT-TEXTAREA] Restoring message content:",t.substring(0,50)+"..."),this.restoreMessageContent(t))}))}restoreMessageContent(t){this.message=t,this.messageInput?.nativeElement&&(this.messageInput.nativeElement.focus(),setTimeout(()=>{let e=this.messageInput.nativeElement,r=this.message.length;e.setSelectionRange(r,r)},0)),setTimeout(()=>this.adjustTextareaHeight(),10)}focusTextarea(){let t=this.messageInput?.nativeElement;console.log("[CHAT-TEXTAREA] focusTextarea called",{hasElement:!!t,isDisabled:this.isDisabled,isThinking:this.isThinking,elementDisabled:t?.disabled,isSessionInitializing:this.isSessionInitializing}),t&&!t.disabled?(t.focus(),console.log("[CHAT-TEXTAREA] Textarea focused successfully")):console.log("[CHAT-TEXTAREA] Focus blocked - element disabled or not available")}static \u0275fac=function(e){return new(e||n)};static \u0275cmp=H({type:n,selectors:[["app-chat-textarea"]],viewQuery:function(e,r){if(e&1&&zt(DV,7),e&2){let i;at(i=ct())&&(r.messageInput=i.first)}},inputs:{isDisabled:"isDisabled",showWelcome:"showWelcome",isThinking:"isThinking",isStarting:"isStarting",isSessionInitializing:"isSessionInitializing"},outputs:{messageSubmitted:"messageSubmitted",voiceRecordingToggled:"voiceRecordingToggled",heightChanged:"heightChanged",stopRequested:"stopRequested"},features:[Qe],decls:6,vars:11,consts:[["messageInput",""],[1,"chat-input-container"],[1,"recording-indicator"],[1,"input-row","grouped-input"],[1,"message-input",3,"ngModelChange","keydown","input","focus","blur","ngModel","placeholder","disabled"],[1,"recording-dot"],["mat-icon-button","","title","Stop generation","type","button",1,"stop-btn"],["mat-icon-button","","title","Stop generation","type","button",1,"stop-btn",3,"click"],["mat-icon-button","","tabindex","0","title","Hold mouse click, touch, or spacebar to speak",1,"voice-btn",3,"mousedown","mouseup","mouseleave","touchstart","touchend","keydown","keyup"],["mat-icon-button","","type","button",1,"send-btn",3,"click","disabled","title"]],template:function(e,r){if(e&1){let i=J();m(0,"div",1),O(1,MV,3,0,"div",2),m(2,"div",3)(3,"textarea",4,0),_e("ngModelChange",function(s){return I(i),we(r.message,s)||(r.message=s),k(s)}),x("keydown",function(s){return I(i),k(r.onKeyDown(s))})("input",function(){return I(i),k(r.onInput())})("focus",function(){return I(i),k(r.isFocused=!0)})("blur",function(){return I(i),k(r.isFocused=!1)}),g(),O(5,IV,2,1),g()()}e&2&&(y(),R(r.isRecording?1:-1),y(),le("focused",r.isFocused)("welcome-mode",r.showWelcome)("is-thinking",r.isThinking),y(),be("ngModel",r.message),j("placeholder",r.getPlaceholder())("disabled",r.isDisabled||r.isThinking),y(2),R(r.isSessionInitializing?-1:5))},dependencies:[bn,fr,yn,rn,Nr,vn],styles:['@keyframes _ngcontent-%COMP%_gradientBorderShift{0%{background-position:0 0}50%{background-position:100% 0}to{background-position:0 0}}.chat-input-container[_ngcontent-%COMP%]{flex-shrink:0;width:100%;position:relative}.thinking-progress[_ngcontent-%COMP%]{position:absolute;top:0;left:0;right:0;height:3px;z-index:1}.thinking-progress[_ngcontent-%COMP%] .mdc-linear-progress__bar-inner{border-top-width:3px}.input-row.grouped-input[_ngcontent-%COMP%]{display:flex;align-items:center;background:var(--glass-bg);border-radius:16px;padding:0 .15rem 0 1.25rem;position:relative;transition:border-color .2s,box-shadow .2s,background .3s}.input-row[_ngcontent-%COMP%]{position:relative;background:var(--glass-bg, #1e1e1e)!important;background-clip:padding-box}.input-row[_ngcontent-%COMP%]:before{content:"";position:absolute;inset:-2px;border-radius:inherit;background-size:200% 100%;background:linear-gradient(90deg,var(--color-primary, #3b82f6) 0%,var(--color-accent, #8b5cf6) 50%,var(--color-primary, #3b82f6) 100%);mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);-webkit-mask-composite:xor;mask-composite:exclude;padding:1px;pointer-events:none;z-index:-1;animation:_ngcontent-%COMP%_gradientBorderShift 3s ease-in-out infinite}.input-row.is-thinking[_ngcontent-%COMP%]:before{inset:0;mask:none;padding:0;opacity:.15;z-index:0;background:linear-gradient(90deg,var(--color-primary, #3b82f6) 0%,var(--color-accent, #8b5cf6) 50%,var(--color-primary, #3b82f6) 100%);background-size:200% 100%;animation:_ngcontent-%COMP%_gradientBorderShift 3s ease-in-out infinite}.input-row.is-thinking[_ngcontent-%COMP%] .message-input[_ngcontent-%COMP%], .input-row.is-thinking[_ngcontent-%COMP%] .stop-btn[_ngcontent-%COMP%]{position:relative;z-index:1}.input-row.grouped-input.focused[_ngcontent-%COMP%]:not(.is-thinking){box-shadow:0 0 0 4px #007aff1a}.input-row.grouped-input.focused[_ngcontent-%COMP%]:not(.is-thinking):before{background:var(--color-primary);animation:none}.message-input[_ngcontent-%COMP%]{flex:1;border:none;outline:none;background:transparent!important;box-shadow:none;font-size:1rem;padding:1rem 0;color:var(--color-text);resize:none;min-height:36px;max-height:180px;border-radius:16px;overflow-y:auto;font-family:-apple-system,BlinkMacSystemFont,SF Pro Display,system-ui,sans-serif;line-height:1.5}.message-input[_ngcontent-%COMP%]:focus{outline:none;border:none;box-shadow:none}.message-input[_ngcontent-%COMP%]:disabled{background-color:var(--color-bg-secondary);color:var(--color-text-secondary);cursor:not-allowed;opacity:.6}.message-input[_ngcontent-%COMP%]::placeholder{color:var(--color-text-secondary);transition:opacity .3s ease-in-out}.message-input[_ngcontent-%COMP%]:disabled::placeholder{animation:_ngcontent-%COMP%_thinkingPulsate 2s ease-in-out infinite}@keyframes _ngcontent-%COMP%_thinkingPulsate{0%,to{opacity:.6}50%{opacity:1}}.voice-btn[_ngcontent-%COMP%], .send-btn[_ngcontent-%COMP%], .stop-btn[_ngcontent-%COMP%]{margin:0 .5rem 0 .08rem}.voice-btn[_ngcontent-%COMP%]:hover:not(.recording), .send-btn[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--color-bg-hover)}.voice-btn.recording[_ngcontent-%COMP%]{background:#ff3b3024;color:var(--color-error)}.send-btn[_ngcontent-%COMP%]{background:var(--color-primary)}.stop-btn[_ngcontent-%COMP%]{transition:background .18s,transform .12s}.stop-btn[_ngcontent-%COMP%]:hover{opacity:.85;transform:scale(1.05)}.stop-btn[_ngcontent-%COMP%]:active{transform:scale(.95)}.voice-btn[_ngcontent-%COMP%]{transition:background .18s,box-shadow .18s,transform .12s,opacity .5s;position:relative}.voice-btn.recording[_ngcontent-%COMP%]{background:#ff3b3012;color:var(--color-error);animation:_ngcontent-%COMP%_pulse 1.5s infinite}.voice-btn.recording[_ngcontent-%COMP%]:hover{background:#ff3b301c}.send-btn[_ngcontent-%COMP%]{transition:background .18s,box-shadow .18s,transform .12s,opacity .4s,margin-left .4s;position:relative}.send-btn.active[_ngcontent-%COMP%]{background:transparent;opacity:1}.send-btn[_ngcontent-%COMP%]:not(.active){color:var(--color-secondary);background:transparent;opacity:0;margin-left:calc(-.5rem - 36px)}.send-btn[_ngcontent-%COMP%]:hover:not(:disabled){color:#fff;background:linear-gradient(90deg,var(--color-primary, #3b82f6) 0%,var(--color-primary, #3b82f6) 20%,var(--color-accent, #8b5cf6) 50%,var(--color-primary, #3b82f6) 80%,var(--color-primary, #3b82f6) 100%);background-size:300% auto;animation:_ngcontent-%COMP%_sendButtonGradientShift 6s ease-in-out infinite;box-shadow:0 4px 14px #007aff30;transform:scale(1.2)}.send-btn[_ngcontent-%COMP%]:active:not(:disabled){transform:scale(1.3);box-shadow:0 4px 24px #007aff30}.recording-indicator[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem;margin-top:.2rem;margin-bottom:.2rem;color:var(--color-error, #ff5555);font-size:.9rem;position:absolute;top:-1.5rem}@keyframes _ngcontent-%COMP%_pulse{0%,to{opacity:1}50%{opacity:.5}}@keyframes _ngcontent-%COMP%_sendButtonGradientShift{0%{background-position:0% center}50%{background-position:50% 10%}to{background-position:0% center}}@media print{.thinking-progress[_ngcontent-%COMP%], .stop-btn[_ngcontent-%COMP%], .voice-btn[_ngcontent-%COMP%], .send-btn[_ngcontent-%COMP%], .recording-indicator[_ngcontent-%COMP%]{display:none!important}}']})};var kV=["choiceSelect"],AV=(n,t)=>t.value;function OV(n,t){if(n&1&&(m(0,"option",7),b(1),g()),n&2){let e=t.$implicit;j("value",e.value),y(),ke(" ",e.label," ")}}function RV(n,t){if(n&1){let e=J();m(0,"form",2),x("ngSubmit",function(){I(e);let i=w();return k(i.onSubmit())}),ie(1,"div",3),Bg(2,"async"),m(3,"div",4)(4,"select",5,0),_e("ngModelChange",function(i){I(e);let o=w();return we(o.selectedValue,i)||(o.selectedValue=i),k(i)}),x("change",function(){I(e);let i=w();return k(i.onSelectChange())})("keydown.enter",function(){I(e);let i=w();return k(i.onSubmit())})("focus",function(){I(e);let i=w();return k(i.isFocused=!0)})("blur",function(){I(e);let i=w();return k(i.isFocused=!1)}),m(6,"option",6),b(7,"-- Select an option --"),g(),ot(8,OV,2,2,"option",7,AV),g(),m(10,"button",8)(11,"mat-icon"),b(12,"send"),g()()()()}if(n&2){let e=w();y(),j("innerHTML",Ug(2,5,e.renderedLabel$),es),y(2),le("focused",e.isFocused),y(),be("ngModel",e.selectedValue),y(4),st(e.options),y(2),j("disabled",!e.selectedValue)}}var gh=class n{options=[];set labelHtml(t){typeof t=="object"?this.renderedLabelSubject.next(t):this.renderLabelMarkdown(t)}isVisible=!1;choiceSelected=new U;selectElement;selectedValue="";isFocused=!1;renderedLabelSubject=new Z("");renderedLabel$=this.renderedLabelSubject.asObservable();sanitizer=f(Yi);ngOnDestroy(){this.renderedLabelSubject.complete()}ngAfterViewInit(){this.isVisible&&this.selectElement&&setTimeout(()=>this.focusSelect(),100)}ngOnChanges(t){t.isVisible&&(console.log("[CHOICE-SELECT] isVisible changed:",t.isVisible.previousValue,"->",t.isVisible.currentValue),t.isVisible.currentValue&&!t.isVisible.previousValue&&(console.log("[CHOICE-SELECT] Component becoming visible, setting focus..."),setTimeout(()=>this.focusSelect(),150)))}focusSelect(){this.selectElement?.nativeElement&&(this.selectElement.nativeElement.focus(),console.log("[CHOICE-SELECT] Focus set on select element"))}onSubmit(){this.selectedValue?(console.log("[CHOICE-SELECT] Choice selected:",this.selectedValue),this.choiceSelected.emit(this.selectedValue),this.selectedValue=""):console.warn("[CHOICE-SELECT] No choice selected")}onSelectChange(){console.log("[CHOICE-SELECT] Selection changed to:",this.selectedValue)}renderLabelMarkdown(t){return xe(this,null,function*(){if(!t){this.renderedLabelSubject.next(this.sanitizer.bypassSecurityTrustHtml(""));return}try{let e=yield De.parse(t);this.renderedLabelSubject.next(this.sanitizer.bypassSecurityTrustHtml(e))}catch(e){console.error("[CHOICE-SELECT] Error parsing label markdown:",e),this.renderedLabelSubject.next(this.sanitizer.bypassSecurityTrustHtml(t))}})}static \u0275fac=function(e){return new(e||n)};static \u0275cmp=H({type:n,selectors:[["app-choice-select"]],viewQuery:function(e,r){if(e&1&&zt(kV,5),e&2){let i;at(i=ct())&&(r.selectElement=i.first)}},inputs:{options:"options",labelHtml:"labelHtml",isVisible:"isVisible"},outputs:{choiceSelected:"choiceSelected"},features:[Qe],decls:1,vars:1,consts:[["choiceSelect",""],[1,"choice-form"],[1,"choice-form",3,"ngSubmit"],[1,"choice-label",3,"innerHTML"],[1,"select-button-row"],["name","choice","required","",1,"choice-select-inline",3,"ngModelChange","change","keydown.enter","focus","blur","ngModel"],["value","","disabled",""],[3,"value"],["type","submit","mat-icon-button","","title","Submit selection",1,"submit-btn",3,"disabled"]],template:function(e,r){e&1&&O(0,RV,13,7,"form",1),e&2&&R(r.isVisible?0:-1)},dependencies:[bn,ph,vi,yi,hr,yn,dh,ol,rn,rl,Kf,vn,Os,Nr,rv],styles:[`@keyframes _ngcontent-%COMP%_gradientBorderShift{0%{background-position:0 0}50%{background-position:100% 0}to{background-position:0 0}}.choice-form[_ngcontent-%COMP%]{width:100%;flex-shrink:0;position:relative}.choice-label[_ngcontent-%COMP%]{display:block;margin-bottom:1rem;font-weight:500;color:var(--color-text, #374151);font-size:1rem}.select-button-row[_ngcontent-%COMP%]{display:flex;align-items:center;background:var(--glass-bg);border-radius:16px;padding:0 .15rem 0 1.25rem;position:relative;transition:border-color .2s,box-shadow .2s;--select-arrow-icon: url('data:image/svg+xml;charset=UTF-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="%23666"><path d="M7 10l5 5 5-5z"/></svg>')}.select-button-row[_ngcontent-%COMP%]{position:relative;background:var(--glass-bg, #1e1e1e)!important;background-clip:padding-box}.select-button-row[_ngcontent-%COMP%]:before{content:"";position:absolute;inset:-2px;border-radius:inherit;background-size:200% 100%;background:linear-gradient(90deg,var(--color-primary, #3b82f6) 0%,var(--color-accent, #8b5cf6) 50%,var(--color-primary, #3b82f6) 100%);mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);-webkit-mask-composite:xor;mask-composite:exclude;padding:1px;pointer-events:none;z-index:-1;animation:_ngcontent-%COMP%_gradientBorderShift 3s ease-in-out infinite}.select-button-row.focused[_ngcontent-%COMP%]{box-shadow:0 0 0 4px #007aff1a}.select-button-row.focused[_ngcontent-%COMP%]:before{background:var(--color-primary);animation:none}.choice-select-inline[_ngcontent-%COMP%]{flex:1;border:none;outline:none;background:transparent!important;box-shadow:none;font-size:1rem;padding:1rem 3rem 1rem 0;color:var(--color-text);border-radius:16px;font-family:-apple-system,BlinkMacSystemFont,SF Pro Display,system-ui,sans-serif;cursor:pointer;line-height:1.5;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-image:var(--select-arrow-icon);background-repeat:no-repeat;background-position:right 3.5rem center;background-size:36px 36px}.choice-select-inline[_ngcontent-%COMP%]:focus{outline:none;border:none;box-shadow:none}.choice-select-inline[_ngcontent-%COMP%]:disabled{background-color:var(--color-bg-secondary);color:var(--color-text-secondary);cursor:not-allowed;opacity:.6}.choice-select-inline[_ngcontent-%COMP%] option[_ngcontent-%COMP%]:disabled{color:var(--color-text-secondary, #9ca3af);font-style:italic}.submit-btn[_ngcontent-%COMP%]{margin:0 .5rem 0 .08rem;background:var(--color-primary);transition:background .18s,box-shadow .18s,transform .12s,opacity .4s;position:relative}.submit-btn[_ngcontent-%COMP%]:hover:not(:disabled){color:#fff;background:linear-gradient(90deg,var(--color-primary, #3b82f6) 0%,var(--color-primary, #3b82f6) 20%,var(--color-accent, #8b5cf6) 50%,var(--color-primary, #3b82f6) 80%,var(--color-primary, #3b82f6) 100%);background-size:300% auto;animation:_ngcontent-%COMP%_sendButtonGradientShift 6s ease-in-out infinite;box-shadow:0 4px 14px #007aff30;transform:scale(1.2)}.submit-btn[_ngcontent-%COMP%]:active:not(:disabled){transform:scale(1.3);box-shadow:0 4px 24px #007aff30}.submit-btn[_ngcontent-%COMP%]:disabled{background:var(--color-text-secondary);cursor:not-allowed;opacity:.5;box-shadow:none}@keyframes _ngcontent-%COMP%_sendButtonGradientShift{0%{background-position:0% center}50%{background-position:50% 10%}to{background-position:0% center}}@media (max-width: 480px){.choice-form[_ngcontent-%COMP%]{max-width:none}.select-button-row[_ngcontent-%COMP%]{flex-direction:row}}@media print{.submit-btn[_ngcontent-%COMP%]{display:none!important}}`]})};var vh={projects:{list:null,current:null,canCreate:!0},threads:{list:null,current:null}},bi=class n{destroy$=new A;sessionStateSubject=new Z(vh);isInitializingSubject=new Z(!0);sessionState$=this.sessionStateSubject.asObservable();isInitializing$=this.isInitializingSubject.asObservable();codayApi=f(ur);eventStream=f(Zs);constructor(){console.log("[SESSION-STATE] Service initializing"),this.setupEventListeners(),this.initializeState()}initializeState(){console.log("[SESSION-STATE] Fetching initial state with retry mechanism");let t=Date.now(),e=2e4,r=2e3,i=0,o=!1;ha(0,r).pipe(Yl(()=>{let s=Date.now()-t,a=s<e;return o?(console.log("[SESSION-STATE] Valid state found, stopping retry mechanism"),!1):a?!0:(console.log(`[SESSION-STATE] Retry timeout reached after ${s}ms`),!1)},!0),Ze(()=>{i++;let s=Date.now()-t;return console.log(`[SESSION-STATE] Attempt #${i} (${s}ms elapsed) to refresh state...`),this.codayApi.getSessionState().pipe(ge(a=>{console.log("[SESSION-STATE] State fetched successfully:",a),this.sessionStateSubject.next(a);let c=a.projects.list!==null&&a.projects.list.length>0,l=a.threads.list!==null&&a.threads.list.length>0,d=a.projects.current!==null;c||l||d?(console.log("[SESSION-STATE] Valid state detected:"),console.log("[SESSION-STATE] - Has projects:",c),console.log("[SESSION-STATE] - Has threads:",l),console.log("[SESSION-STATE] - Has current project:",d),o=!0):console.log("[SESSION-STATE] State is empty (no projects/threads/current), will retry...")}),V(()=>!0),xt(a=>(console.warn(`[SESSION-STATE] Attempt #${i} failed:`,a.message||a),P(!1))))}),F(this.destroy$)).subscribe({next:()=>{},error:s=>{console.error("[SESSION-STATE] Unexpected error in retry mechanism:",s),this.sessionStateSubject.next(vh)},complete:()=>{let s=Date.now()-t;console.log(`[SESSION-STATE] Initialization completed after ${i} attempts in ${s}ms`);let a=this.sessionStateSubject.value;!a.projects.list&&!a.threads.list&&!a.projects.current&&(console.log("[SESSION-STATE] No valid state found after retries, using default state"),this.sessionStateSubject.next(vh)),this.isInitializingSubject.next(!1),console.log("[SESSION-STATE] Initialization flag set to false - UI can now be enabled")}})}setupEventListeners(){this.eventStream.events$.pipe(F(this.destroy$)).subscribe({next:t=>this.handleEvent(t),error:t=>console.error("[SESSION-STATE] Event stream error:",t)})}handleEvent(t){console.log("[SESSION-STATE] Event received:",t.type,t);let e=!1;t instanceof pi?(console.log("[SESSION-STATE] Project selected event received"),e=!0):t instanceof mi&&(console.log("[SESSION-STATE] Thread selected event received:",t.threadName),e=!0),e&&(console.log("[SESSION-STATE] Triggering state refresh due to event:",t.type),this.refreshState().subscribe({error:r=>console.error("[SESSION-STATE] Auto-refresh failed:",r)}))}refreshState(){return console.log("[SESSION-STATE] Refreshing state via CodayApiService"),this.codayApi.getSessionState().pipe(ge(t=>{console.log("[SESSION-STATE] State refreshed:",t),this.sessionStateSubject.next(t)}),xt(t=>{console.error("[SESSION-STATE] Error fetching state:",t);let e=E({},vh);return t.status===404?console.warn("[SESSION-STATE] Client not found, using default state"):t.status===400?console.error("[SESSION-STATE] Bad request, check clientId"):console.error("[SESSION-STATE] Server error:",t.status),this.sessionStateSubject.next(e),P(e)}))}getProjects$(){return this.sessionState$.pipe(V(t=>t.projects))}getThreads$(){return this.sessionState$.pipe(V(t=>t.threads))}getCurrentProject(){return this.sessionStateSubject.value.projects.current}getCurrentThread(){return this.sessionStateSubject.value.threads.current}isProjectLocked(){return!this.sessionStateSubject.value.projects.canCreate}getCurrentState(){return this.sessionStateSubject.value}hasProjectSelected(){return this.getCurrentProject()!==null}hasThreadSelected(){return this.getCurrentThread()!==null}getAvailableProjects(){return this.sessionStateSubject.value.projects.list}getAvailableThreads(){return this.sessionStateSubject.value.threads.list}ngOnDestroy(){console.log("[SESSION-STATE] Service destroying"),this.destroy$.next(),this.destroy$.complete(),this.sessionStateSubject.complete(),this.isInitializingSubject.complete()}static \u0275fac=function(e){return new(e||n)};static \u0275prov=C({token:n,factory:n.\u0275fac,providedIn:"root"})};var yh=class n{maxFileSize=5*1024*1024;supportedTypes=["image/png","image/jpeg","image/gif","image/webp"];validateFile(t){if(!this.supportedTypes.includes(t.type))throw new Error(`Unsupported file type: ${t.type}`);if(t.size>this.maxFileSize)throw new Error(`File too large: ${(t.size/1024/1024).toFixed(1)}MB exceeds 5MB limit`)}fileToBase64(t){return xe(this,null,function*(){return new Promise((e,r)=>{let i=new FileReader;i.onload=()=>{let o=i.result;if(!o){r(new Error("Failed to read file"));return}let s=o.split(",")[1];if(!s){r(new Error("Invalid file format"));return}e(s)},i.onerror=r,i.readAsDataURL(t)})})}uploadImage(t,e){return xe(this,null,function*(){console.log("[IMAGE-UPLOAD] uploadImage - file:",t.name,t.type,t.size),console.log("[IMAGE-UPLOAD] uploadImage - clientId:",e);try{console.log("[IMAGE-UPLOAD] Validating file..."),this.validateFile(t),console.log("[IMAGE-UPLOAD] Converting to base64...");let r=yield this.fileToBase64(t);console.log("[IMAGE-UPLOAD] Base64 length:",r.length),console.log("[IMAGE-UPLOAD] Sending upload request...");let i=yield fetch("/api/files/upload",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({clientId:e,content:r,mimeType:t.type,filename:t.name})});if(console.log("[IMAGE-UPLOAD] Response status:",i.status),!i.ok){let s=yield i.json();throw console.log("[IMAGE-UPLOAD] Upload error response:",s),new Error(s.error||"Upload failed")}let o=yield i.json();return console.log("[IMAGE-UPLOAD] Upload success result:",o),{success:!0,processedSize:o.processedSize,dimensions:o.dimensions}}catch(r){return console.log("[IMAGE-UPLOAD] Upload failed:",r),{success:!1,error:r instanceof Error?r.message:"Upload failed"}}})}hasImageFiles(t){if(console.log("[IMAGE-UPLOAD] hasImageFiles - dataTransfer:",t),!t)return console.log("[IMAGE-UPLOAD] hasImageFiles - no dataTransfer"),!1;if(console.log("[IMAGE-UPLOAD] hasImageFiles - types:",Array.from(t.types)),!Array.from(t.types).includes("Files"))return console.log("[IMAGE-UPLOAD] hasImageFiles - no Files type"),!1;let e=Array.from(t.files||[]);console.log("[IMAGE-UPLOAD] hasImageFiles - files:",e.map(i=>({name:i.name,type:i.type})));let r=e.some(i=>this.supportedTypes.includes(i.type));return console.log("[IMAGE-UPLOAD] hasImageFiles - result:",r),r}filterImageFiles(t){return Array.from(t).filter(r=>this.supportedTypes.includes(r.type))}static \u0275fac=function(e){return new(e||n)};static \u0275prov=C({token:n,factory:n.\u0275fac,providedIn:"root"})};var bh=class n{ATTENTION_EMOJI="\u{1F534}";isSystemActive=!1;systemActiveTimer=null;SYSTEM_ACTIVE_TIMEOUT=4e3;unreadService=f(Bs);codayService=f(Qt);constructor(){this.initializeTitleUpdates()}initializeTitleUpdates(){gr([this.codayService.projectTitle$,this.unreadService.unreadCount$]).subscribe(([t,e])=>{this.updateTitle(t,e)})}updateTitle(t,e){let r;this.isSystemActive?r=`\u23F3${e>0?` (${e}) `:" "}${t}`:e>0?r=`${this.ATTENTION_EMOJI} (${e}) ${t}`:r=t,document.title=r,console.log("[TAB-TITLE] Updated to:",r)}setSystemActive(){console.log("[TAB-TITLE] System active - showing hourglass"),this.isSystemActive=!0,this.systemActiveTimer&&clearTimeout(this.systemActiveTimer),this.systemActiveTimer=setTimeout(()=>{console.log("[TAB-TITLE] System active timeout - hiding hourglass"),this.isSystemActive=!1,this.forceUpdateTitle()},this.SYSTEM_ACTIVE_TIMEOUT),this.forceUpdateTitle()}setSystemInactive(){console.log("[TAB-TITLE] System inactive - hiding hourglass"),this.isSystemActive=!1,this.systemActiveTimer&&(clearTimeout(this.systemActiveTimer),this.systemActiveTimer=null),this.forceUpdateTitle()}forceUpdateTitle(){let t=this.codayService.getCurrentProjectTitle(),e=this.unreadService.getCurrentCount();this.updateTitle(t,e)}static \u0275fac=function(e){return new(e||n)};static \u0275prov=C({token:n,factory:n.\u0275fac,providedIn:"root"})};var PV=["inputSection"];function NV(n,t){if(n&1&&(m(0,"div",2),b(1),g()),n&2){let e=w();y(),is(" \u26A0\uFE0F Connection lost. Reconnecting... (",e.connectionStatus.reconnectAttempts,"/",e.connectionStatus.maxAttempts,") ")}}function FV(n,t){if(n&1&&(m(0,"div",3)(1,"h1",10),b(2),g()()),n&2){let e=w();y(2),Ue(e.currentWelcomeMessage)}}function LV(n,t){if(n&1&&(m(0,"div",14),b(1),g()),n&2){let e=w(2);le("error",e.uploadStatus.isError),y(),ke(" ",e.uploadStatus.message," ")}}function VV(n,t){if(n&1){let e=J();m(0,"div",4)(1,"div",11)(2,"app-chat-history",12),x("copyRequested",function(i){I(e);let o=w();return k(o.onCopyMessage(i))})("stopRequested",function(){I(e);let i=w();return k(i.onStopRequested())}),g(),O(3,LV,2,3,"div",13),g()()}if(n&2){let e=w();y(2),j("messages",e.messages)("isThinking",e.isThinking),y(),R(e.uploadStatus.message?3:-1)}}function jV(n,t){if(n&1){let e=J();m(0,"app-chat-textarea",15),x("messageSubmitted",function(i){I(e);let o=w();return k(o.onMessageSubmitted(i))})("voiceRecordingToggled",function(i){I(e);let o=w();return k(o.onVoiceToggled(i))})("heightChanged",function(i){I(e);let o=w();return k(o.onInputHeightChanged(i))})("stopRequested",function(){I(e);let i=w();return k(i.onStopRequested())}),g()}if(n&2){let e=w();j("isDisabled",!e.isConnected||e.isSessionInitializing)("isSessionInitializing",e.isSessionInitializing)("showWelcome",!e.userHasSentMessage)("isThinking",e.isThinking)("isStarting",e.isStartingFirstMessage)}}function BV(n,t){if(n&1){let e=J();m(0,"app-choice-select",16),x("choiceSelected",function(i){I(e);let o=w();return k(o.onChoiceSelected(i))}),g()}if(n&2){let e=w();j("options",e.currentChoice.options)("labelHtml",e.currentChoice.label)("isVisible",!!e.currentChoice)}}var _h=class n{destroy$=new A;inputSection;messages=[];isThinking=!1;isStartingFirstMessage=!1;currentChoice=null;connectionStatus=null;isConnected=!1;isSessionInitializing=!0;userHasSentMessage=!1;showConnectionStatus=!1;hasEverConnected=!1;inputSectionHeight=80;uploadStatus={message:"",isError:!1};clientId;isDragOver=!1;welcomeMessages=["Welcome to Coday","Bienvenue sur Coday","Bienvenido a Coday","Willkommen bei Coday","Benvenuto su Coday","Bem-vindo ao Coday","Welkom bij Coday","\u0414\u043E\u0431\u0440\u043E \u043F\u043E\u0436\u0430\u043B\u043E\u0432\u0430\u0442\u044C \u0432 Coday","Coday \u3078\u3088\u3046\u3053\u305D","\u6B22\u8FCE\u6765\u5230 Coday","Coday \uC5D0 \uC624\uC2E0 \uAC83\uC744 \uD658\uC601\uD569\uB2C8\uB2E4","\u0645\u0631\u062D\u0628\u064B\u0627 \u0628\u0643 \u0641\u064A Coday"];currentWelcomeIndex=0;currentWelcomeMessage=this.welcomeMessages[0];welcomeRotationInterval;codayService=f(Qt);codayApiService=f(ur);sessionStateService=f(bi);imageUploadService=f(yh);titleService=f(bh);preferencesService=f(Mt);constructor(){this.clientId=this.codayApiService.getClientId(),console.log("[MAIN-APP] Constructor - clientId:",this.clientId),console.log("[MAIN-APP] SessionStateService injected and will initialize:",!!this.sessionStateService)}ngOnInit(){this.setupPrintHandlers(),this.startWelcomeRotation(),this.codayService.messages$.pipe(F(this.destroy$)).subscribe(t=>{console.log("[MAIN-APP] Messages updated:",t.length),this.messages=t,t.length>0&&t.some(e=>e.role==="user")&&!this.userHasSentMessage&&(console.log("[MAIN-APP] Messages loaded from thread, hiding welcome message"),this.userHasSentMessage=!0,this.stopWelcomeRotation()),t.length===0&&this.userHasSentMessage&&(console.log("[MAIN-APP] Messages cleared, showing welcome message again"),this.userHasSentMessage=!1,this.startWelcomeRotation())}),this.codayService.isThinking$.pipe(F(this.destroy$)).subscribe(t=>{this.isThinking=t,t&&(this.isStartingFirstMessage=!1)}),this.codayService.currentChoice$.pipe(F(this.destroy$)).subscribe(t=>{this.currentChoice=t}),this.sessionStateService.isInitializing$.pipe(F(this.destroy$)).subscribe(t=>{console.log("[MAIN-APP] Session initialization state changed:",t),this.isSessionInitializing=t}),this.codayService.connectionStatus$.pipe(F(this.destroy$)).subscribe(t=>{this.connectionStatus=t,this.isConnected=t.connected,t.connected&&!this.hasEverConnected&&(this.hasEverConnected=!0,this.showConnectionStatus=!0),!t.connected&&!this.hasEverConnected?setTimeout(()=>{!this.isConnected&&!this.hasEverConnected&&(this.showConnectionStatus=!0)},2e3):!t.connected&&this.hasEverConnected?this.showConnectionStatus=!0:t.connected&&(this.showConnectionStatus=!0)}),this.codayService.setTabTitleService(this.titleService),this.codayService.start()}ngAfterViewInit(){setTimeout(()=>this.updateInputSectionHeight(),100)}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete(),window.removeEventListener("beforeprint",this.handleBeforePrint),window.removeEventListener("afterprint",this.handleAfterPrint),this.stopWelcomeRotation()}startWelcomeRotation(){this.userHasSentMessage||(this.welcomeRotationInterval=window.setInterval(()=>{this.currentWelcomeIndex=(this.currentWelcomeIndex+1)%this.welcomeMessages.length,this.currentWelcomeMessage=this.welcomeMessages[this.currentWelcomeIndex]},3e3))}stopWelcomeRotation(){this.welcomeRotationInterval&&(clearInterval(this.welcomeRotationInterval),this.welcomeRotationInterval=void 0)}onMessageSubmitted(t){console.log("[MAIN-APP] Sending message:",t),this.userHasSentMessage||(this.userHasSentMessage=!0,this.stopWelcomeRotation(),this.isStartingFirstMessage=!0),this.isThinking=!0,this.codayService.sendMessage(t)}onVoiceToggled(t){console.log("[VOICE] Recording:",t)}onChoiceSelected(t){console.log("choosing selected",t),this.codayService.sendChoice(t)}onCopyMessage(t){console.log("[COPY] Message copied:",t.id)}onStopRequested(){this.codayService.stop()}onInputHeightChanged(t){console.log("[MAIN-APP] Input height changed:",t),this.inputSectionHeight=t}updateInputSectionHeight(){if(this.inputSection?.nativeElement){let t=this.inputSection.nativeElement.offsetHeight;t!==this.inputSectionHeight&&(console.log("[MAIN-APP] Input section height updated:",t),this.inputSectionHeight=t)}}onDragEnter(t){t.preventDefault(),this.imageUploadService.hasImageFiles(t.dataTransfer)&&(console.log("[MAIN-APP] Image files detected - showing drag overlay"),this.isDragOver=!0)}onDragOver(t){t.preventDefault(),this.imageUploadService.hasImageFiles(t.dataTransfer)&&(t.dataTransfer.dropEffect="copy")}onDragLeave(t){(t.target===document.body||!document.body.contains(t.relatedTarget))&&(console.log("[MAIN-APP] Leaving application area - hiding drag overlay"),this.isDragOver=!1)}onDrop(t){return xe(this,null,function*(){if(t.preventDefault(),this.isDragOver=!1,console.log("[MAIN-APP] Files dropped:",t.dataTransfer?.files?.length||0),!this.clientId){this.showUploadError("No client ID available for upload");return}let e=this.imageUploadService.filterImageFiles(t.dataTransfer?.files||[]);if(e.length===0){this.showUploadError("No valid image files found");return}console.log("[MAIN-APP] Uploading",e.length,"image(s)");for(let r of e)try{this.showUploadStatus(`Uploading ${r.name}...`);let i=yield this.imageUploadService.uploadImage(r,this.clientId);i.success?this.showUploadSuccess(`${r.name} uploaded successfully`):this.showUploadError(`Failed to upload ${r.name}: ${i.error}`)}catch(i){console.error("[MAIN-APP] Upload error:",i),this.showUploadError(`Failed to upload ${r.name}: ${i instanceof Error?i.message:"Unknown error"}`)}})}showUploadStatus(t){this.uploadStatus={message:t,isError:!1}}showUploadSuccess(t){this.uploadStatus={message:`\u2705 ${t}`,isError:!1},setTimeout(()=>{this.uploadStatus={message:"",isError:!1}},3e3)}showUploadError(t){this.uploadStatus={message:t,isError:!0},setTimeout(()=>{this.uploadStatus={message:"",isError:!1}},5e3)}setupPrintHandlers(){window.addEventListener("beforeprint",this.handleBeforePrint),window.addEventListener("afterprint",this.handleAfterPrint)}handleBeforePrint=()=>{console.log("[PRINT] Before print event triggered");let t=this.preferencesService.getPrintTechnicalMessages();console.log("[PRINT] Print technical messages:",t),t?document.body.classList.add("print-include-technical"):document.body.classList.remove("print-include-technical")};handleAfterPrint=()=>{console.log("[PRINT] After print event triggered"),document.body.classList.remove("print-include-technical")};static \u0275fac=function(e){return new(e||n)};static \u0275cmp=H({type:n,selectors:[["app-main"]],viewQuery:function(e,r){if(e&1&&zt(PV,5),e&2){let i;at(i=ct())&&(r.inputSection=i.first)}},hostBindings:function(e,r){e&1&&x("dragenter",function(o){return r.onDragEnter(o)})("dragover",function(o){return r.onDragOver(o)})("dragleave",function(o){return r.onDragLeave(o)})("drop",function(o){return r.onDrop(o)})},decls:10,vars:4,consts:[["inputSection",""],[1,"app"],[1,"connection-status"],[1,"welcome-section"],[1,"chat-wrapper"],[1,"input-section"],[1,"input-center"],[1,"input-glass"],[3,"isDisabled","isSessionInitializing","showWelcome","isThinking","isStarting"],[1,"choice-overlay",3,"options","labelHtml","isVisible"],[1,"welcome-title"],[1,"chat-center"],[3,"copyRequested","stopRequested","messages","isThinking"],[1,"upload-status",3,"error"],[1,"upload-status"],[3,"messageSubmitted","voiceRecordingToggled","heightChanged","stopRequested","isDisabled","isSessionInitializing","showWelcome","isThinking","isStarting"],[1,"choice-overlay",3,"choiceSelected","options","labelHtml","isVisible"]],template:function(e,r){e&1&&(m(0,"div",1),O(1,NV,2,2,"div",2),O(2,FV,3,1,"div",3)(3,VV,4,3,"div",4),m(4,"div",5,0)(6,"div",6)(7,"div",7),O(8,jV,1,5,"app-chat-textarea",8),O(9,BV,1,3,"app-choice-select",9),g()()()()),e&2&&(y(),R(r.showConnectionStatus&&r.connectionStatus&&!r.connectionStatus.connected?1:-1),y(),R(!r.userHasSentMessage||r.messages.length===2?2:3),y(6),R(r.currentChoice?-1:8),y(),R(r.currentChoice?9:-1))},dependencies:[th,mh,gh],styles:['[_nghost-%COMP%]{display:flex;height:100vh;width:100%;overflow:hidden;justify-content:center}.app[_ngcontent-%COMP%]{width:100%;max-width:100%;height:100%;display:flex;flex-direction:column;background:var(--color-bg);color:var(--color-text);transition:all .3s ease;position:relative;justify-content:center}.app.drag-over[_ngcontent-%COMP%]:before{content:"";position:absolute;inset:0;border:3px dashed var(--color-primary);border-radius:16px;background:var(--glass-bg);backdrop-filter:var(--glass-backdrop-blur);-webkit-backdrop-filter:var(--glass-backdrop-blur);pointer-events:none;z-index:100}.connection-status[_ngcontent-%COMP%]{position:fixed;top:0;left:0;right:0;z-index:1001;padding:.75rem 1rem;text-align:center;font-size:.9rem;background:var(--color-error);color:var(--color-text-inverse);border-bottom:1px solid rgba(255,255,255,.2);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);box-shadow:0 4px 16px #0000001a}.chat-wrapper[_ngcontent-%COMP%]{flex:1;min-height:0;overflow-y:auto;overflow-x:hidden;background:transparent;width:100%;padding:2.5rem 0 1.5rem;display:flex;justify-content:center}.chat-wrapper[_ngcontent-%COMP%] .chat-center[_ngcontent-%COMP%]{max-width:760px;width:100%;margin:0;padding:0 1rem}.welcome-section[_ngcontent-%COMP%]{flex-shrink:0;text-align:center;padding:2rem 1rem;animation:_ngcontent-%COMP%_fadeInUp .8s ease-out;display:flex;justify-content:center;align-items:center;width:100%}.welcome-title[_ngcontent-%COMP%]{font-size:clamp(2.5rem,6vw,4rem);font-weight:700;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;margin:0;padding:0;line-height:1.2;transition:opacity .5s ease-in-out;display:inline-block;min-height:1.2em}@keyframes _ngcontent-%COMP%_fadeInUp{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@keyframes _ngcontent-%COMP%_gradientShift{0%{background-position:0% center}50%{background-position:100% center}to{background-position:0% center}}.input-section[_ngcontent-%COMP%]{flex-shrink:0;position:relative;border-top:none;background:transparent;box-shadow:none;padding:2.5rem 0 2rem;overflow-y:visible;max-height:none;width:100%;z-index:10;pointer-events:none;display:flex;justify-content:center}.input-center[_ngcontent-%COMP%]{max-width:760px;width:100%;margin:0;padding:0 1rem;display:flex;justify-content:center;align-items:end;position:relative;pointer-events:auto}.input-glass[_ngcontent-%COMP%]{background:none;box-shadow:none;width:100%;min-height:64px;display:flex;align-items:stretch;gap:0;pointer-events:auto;position:relative;overflow:visible}.input-glass[_ngcontent-%COMP%] app-chat-textarea[_ngcontent-%COMP%]{width:100%;min-width:0;flex:1 1 auto;align-self:stretch;display:flex}body.dark[_nghost-%COMP%], body.dark [_nghost-%COMP%], [_ngcontent-%COMP%]:root[data-theme=dark] .input-glass[_ngcontent-%COMP%]{background:#24283073;border-color:#b4c8ff17;box-shadow:0 8px 32px #0000002b,0 1.5px 8px #00000012}.choice-overlay[_ngcontent-%COMP%]{z-index:10;width:100%;display:flex;justify-content:center;align-items:center}.upload-status[_ngcontent-%COMP%]{position:fixed;bottom:100px;left:50%;transform:translate(-50%);z-index:1000;display:flex;align-items:center;padding:12px 20px;background:var(--glass-bg);backdrop-filter:var(--glass-backdrop-blur);-webkit-backdrop-filter:var(--glass-backdrop-blur);border:1px solid var(--glass-border);border-radius:16px;font-size:.9em;color:var(--color-text);box-shadow:var(--glass-shadow);max-width:300px;text-align:center}.upload-status.error[_ngcontent-%COMP%]{background:#ff3b3026;color:var(--color-error);border-color:#ff3b304d}@media (max-width: 768px){.chat-wrapper[_ngcontent-%COMP%]{padding:.75rem 1rem}.input-section[_ngcontent-%COMP%]{padding:.75rem}.input-section[_ngcontent-%COMP%] > app-chat-textarea[_ngcontent-%COMP%]{max-width:none}.choice-overlay[_ngcontent-%COMP%]{padding:.75rem}}@media print{[_nghost-%COMP%]{display:block!important;height:auto!important;max-height:none!important;overflow:visible!important;position:static!important}.app[_ngcontent-%COMP%]{height:auto!important;max-height:none!important;min-height:auto!important;overflow:visible!important;display:block!important;flex-direction:column!important;position:static!important}.chat-wrapper[_ngcontent-%COMP%]{flex:none!important;height:auto!important;max-height:none!important;min-height:auto!important;overflow:visible!important;overflow-y:visible!important;overflow-x:visible!important;padding:0!important;margin:0!important;position:static!important}.input-section[_ngcontent-%COMP%], .welcome-section[_ngcontent-%COMP%], .connection-status[_ngcontent-%COMP%], .upload-status[_ngcontent-%COMP%]{display:none!important}}'],data:{animation:[qv("slideIn",[Ju(":enter",[li({transform:"translateY(100%)",opacity:0}),Xu("300ms ease-out",li({transform:"translateY(0)",opacity:1}))]),Ju(":leave",[Xu("200ms ease-in",li({transform:"translateY(100%)",opacity:0}))])])]}})};var cT=[{path:"",component:_h},{path:"**",redirectTo:""}];var lT={providers:[sm(),zg({eventCoalescing:!0}),zv(cT),gv(),dD(),od(fM)]};var Eh=["*"],HV=["content"],$V=[[["mat-drawer"]],[["mat-drawer-content"]],"*"],zV=["mat-drawer","mat-drawer-content","*"];function WV(n,t){if(n&1){let e=J();m(0,"div",1),x("click",function(){I(e);let i=w();return k(i._onBackdropClicked())}),g()}if(n&2){let e=w();le("mat-drawer-shown",e._isShowingBackdrop())}}function GV(n,t){n&1&&(m(0,"mat-drawer-content"),Ge(1,2),g())}var qV=[[["mat-sidenav"]],[["mat-sidenav-content"]],"*"],YV=["mat-sidenav","mat-sidenav-content","*"];function ZV(n,t){if(n&1){let e=J();m(0,"div",1),x("click",function(){I(e);let i=w();return k(i._onBackdropClicked())}),g()}if(n&2){let e=w();le("mat-drawer-shown",e._isShowingBackdrop())}}function KV(n,t){n&1&&(m(0,"mat-sidenav-content"),Ge(1,2),g())}var QV=`.mat-drawer-container{position:relative;z-index:1;color:var(--mat-sidenav-content-text-color, var(--mat-sys-on-background));background-color:var(--mat-sidenav-content-background-color, var(--mat-sys-background));box-sizing:border-box;display:block;overflow:hidden}.mat-drawer-container[fullscreen]{top:0;left:0;right:0;bottom:0;position:absolute}.mat-drawer-container[fullscreen].mat-drawer-container-has-open{overflow:hidden}.mat-drawer-container.mat-drawer-container-explicit-backdrop .mat-drawer-side{z-index:3}.mat-drawer-container.ng-animate-disabled .mat-drawer-backdrop,.mat-drawer-container.ng-animate-disabled .mat-drawer-content,.ng-animate-disabled .mat-drawer-container .mat-drawer-backdrop,.ng-animate-disabled .mat-drawer-container .mat-drawer-content{transition:none}.mat-drawer-backdrop{top:0;left:0;right:0;bottom:0;position:absolute;display:block;z-index:3;visibility:hidden}.mat-drawer-backdrop.mat-drawer-shown{visibility:visible;background-color:var(--mat-sidenav-scrim-color, color-mix(in srgb, var(--mat-sys-neutral-variant20) 40%, transparent))}.mat-drawer-transition .mat-drawer-backdrop{transition-duration:400ms;transition-timing-function:cubic-bezier(0.25, 0.8, 0.25, 1);transition-property:background-color,visibility}@media(forced-colors: active){.mat-drawer-backdrop{opacity:.5}}.mat-drawer-content{position:relative;z-index:1;display:block;height:100%;overflow:auto}.mat-drawer-content.mat-drawer-content-hidden{opacity:0}.mat-drawer-transition .mat-drawer-content{transition-duration:400ms;transition-timing-function:cubic-bezier(0.25, 0.8, 0.25, 1);transition-property:transform,margin-left,margin-right}.mat-drawer{position:relative;z-index:4;color:var(--mat-sidenav-container-text-color, var(--mat-sys-on-surface-variant));box-shadow:var(--mat-sidenav-container-elevation-shadow, none);background-color:var(--mat-sidenav-container-background-color, var(--mat-sys-surface));border-top-right-radius:var(--mat-sidenav-container-shape, var(--mat-sys-corner-large));border-bottom-right-radius:var(--mat-sidenav-container-shape, var(--mat-sys-corner-large));width:var(--mat-sidenav-container-width, 360px);display:block;position:absolute;top:0;bottom:0;z-index:3;outline:0;box-sizing:border-box;overflow-y:auto;transform:translate3d(-100%, 0, 0)}@media(forced-colors: active){.mat-drawer,[dir=rtl] .mat-drawer.mat-drawer-end{border-right:solid 1px currentColor}}@media(forced-colors: active){[dir=rtl] .mat-drawer,.mat-drawer.mat-drawer-end{border-left:solid 1px currentColor;border-right:none}}.mat-drawer.mat-drawer-side{z-index:2}.mat-drawer.mat-drawer-end{right:0;transform:translate3d(100%, 0, 0);border-top-left-radius:var(--mat-sidenav-container-shape, var(--mat-sys-corner-large));border-bottom-left-radius:var(--mat-sidenav-container-shape, var(--mat-sys-corner-large));border-top-right-radius:0;border-bottom-right-radius:0}[dir=rtl] .mat-drawer{border-top-left-radius:var(--mat-sidenav-container-shape, var(--mat-sys-corner-large));border-bottom-left-radius:var(--mat-sidenav-container-shape, var(--mat-sys-corner-large));border-top-right-radius:0;border-bottom-right-radius:0;transform:translate3d(100%, 0, 0)}[dir=rtl] .mat-drawer.mat-drawer-end{border-top-right-radius:var(--mat-sidenav-container-shape, var(--mat-sys-corner-large));border-bottom-right-radius:var(--mat-sidenav-container-shape, var(--mat-sys-corner-large));border-top-left-radius:0;border-bottom-left-radius:0;left:0;right:auto;transform:translate3d(-100%, 0, 0)}.mat-drawer-transition .mat-drawer{transition:transform 400ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-drawer:not(.mat-drawer-opened):not(.mat-drawer-animating){visibility:hidden;box-shadow:none}.mat-drawer:not(.mat-drawer-opened):not(.mat-drawer-animating) .mat-drawer-inner-container{display:none}.mat-drawer.mat-drawer-opened.mat-drawer-opened{transform:none}.mat-drawer-side{box-shadow:none;border-right-color:var(--mat-sidenav-container-divider-color, transparent);border-right-width:1px;border-right-style:solid}.mat-drawer-side.mat-drawer-end{border-left-color:var(--mat-sidenav-container-divider-color, transparent);border-left-width:1px;border-left-style:solid;border-right:none}[dir=rtl] .mat-drawer-side{border-left-color:var(--mat-sidenav-container-divider-color, transparent);border-left-width:1px;border-left-style:solid;border-right:none}[dir=rtl] .mat-drawer-side.mat-drawer-end{border-right-color:var(--mat-sidenav-container-divider-color, transparent);border-right-width:1px;border-right-style:solid;border-left:none}.mat-drawer-inner-container{width:100%;height:100%;overflow:auto}.mat-sidenav-fixed{position:fixed}
|
|
102
|
+
`),this.sessionHadTranscript=!1),this.pendingLineBreaksTimeout=null},500)}clearPendingLineBreaks(){this.pendingLineBreaksTimeout&&(clearTimeout(this.pendingLineBreaksTimeout),this.pendingLineBreaksTimeout=null)}adjustTextareaHeight(){let t=this.messageInput?.nativeElement;if(!t)return;let e=window.getComputedStyle(t),r=parseFloat(e.fontSize),i=parseFloat(e.lineHeight)||r*1.5,o=i*n.MIN_TEXTAREA_LINES+parseFloat(e.paddingTop)+parseFloat(e.paddingBottom),s=i*n.MAX_TEXTAREA_LINES+parseFloat(e.paddingTop)+parseFloat(e.paddingBottom);t.style.height="auto";let a=t.scrollHeight;a<o?a=o:a>s&&(a=s),t.style.height=`${a}px`;let c=t.parentElement?.offsetHeight||a+32;this.heightChanged.emit(c)}getSendButtonShortcut(){return this.useEnterToSend?"Enter":navigator.platform.toLowerCase().includes("mac")?"\u2318+Enter":"Ctrl+Enter"}getSendButtonTooltip(){return this.useEnterToSend?"Send message (Enter) - Shift+Enter for new line":`Send message (${navigator.platform.toLowerCase().includes("mac")?"Cmd+Enter":"Ctrl+Enter"}) - Enter for new line`}getPlaceholder(){return this.isSessionInitializing?"Initializing session...":this.isThinking?this.isStopping?"Stopping...":this.isStarting?"Processing request...":this.currentThinkingPhrase:this.showWelcome?"How can I help you today?":this.currentInvite?"Type your message here...":"Type your prompt here"}startThinkingAnimation(){this.thinkingPhraseIndex=0,this.currentThinkingPhrase=this.thinkingPhrases[0]||"Thinking...",this.thinkingInterval=window.setInterval(()=>{this.thinkingPhraseIndex<this.thinkingPhrases.length-1&&(this.thinkingPhraseIndex++,this.currentThinkingPhrase=this.thinkingPhrases[this.thinkingPhraseIndex]||"Thinking...")},2e3)}stopThinkingAnimation(){this.thinkingInterval&&(clearInterval(this.thinkingInterval),this.thinkingInterval=null),this.thinkingPhraseIndex=0,this.currentThinkingPhrase="Thinking..."}subscribeToInviteEvents(){this.subscriptions.push(this.codayService.currentInviteEvent$.subscribe(t=>{t?this.handleInviteEvent(t.invite,t.defaultValue):this.currentInvite=""}))}handleInviteEvent(t,e){this.currentInvite=t,e&&(this.message=e,setTimeout(()=>this.adjustTextareaHeight(),0)),this.messageInput?.nativeElement&&this.messageInput.nativeElement.focus()}subscribeToMessageRestore(){this.subscriptions.push(this.codayService.messageToRestore$.subscribe(t=>{t.trim()&&(console.log("[CHAT-TEXTAREA] Restoring message content:",t.substring(0,50)+"..."),this.restoreMessageContent(t))}))}restoreMessageContent(t){this.message=t,this.messageInput?.nativeElement&&(this.messageInput.nativeElement.focus(),setTimeout(()=>{let e=this.messageInput.nativeElement,r=this.message.length;e.setSelectionRange(r,r)},0)),setTimeout(()=>this.adjustTextareaHeight(),10)}focusTextarea(){let t=this.messageInput?.nativeElement;console.log("[CHAT-TEXTAREA] focusTextarea called",{hasElement:!!t,isDisabled:this.isDisabled,isThinking:this.isThinking,elementDisabled:t?.disabled,isSessionInitializing:this.isSessionInitializing}),t&&!t.disabled?(t.focus(),console.log("[CHAT-TEXTAREA] Textarea focused successfully")):console.log("[CHAT-TEXTAREA] Focus blocked - element disabled or not available")}static \u0275fac=function(e){return new(e||n)};static \u0275cmp=H({type:n,selectors:[["app-chat-textarea"]],viewQuery:function(e,r){if(e&1&&zt(DV,7),e&2){let i;at(i=ct())&&(r.messageInput=i.first)}},inputs:{isDisabled:"isDisabled",showWelcome:"showWelcome",isThinking:"isThinking",isStarting:"isStarting",isSessionInitializing:"isSessionInitializing"},outputs:{messageSubmitted:"messageSubmitted",voiceRecordingToggled:"voiceRecordingToggled",heightChanged:"heightChanged",stopRequested:"stopRequested"},features:[Qe],decls:6,vars:11,consts:[["messageInput",""],[1,"chat-input-container"],[1,"recording-indicator"],[1,"input-row","grouped-input"],[1,"message-input",3,"ngModelChange","keydown","input","focus","blur","ngModel","placeholder","disabled"],[1,"recording-dot"],["mat-icon-button","","title","Stop generation","type","button",1,"stop-btn"],["mat-icon-button","","title","Stop generation","type","button",1,"stop-btn",3,"click"],["mat-icon-button","","tabindex","0","title","Hold mouse click, touch, or spacebar to speak",1,"voice-btn",3,"mousedown","mouseup","mouseleave","touchstart","touchend","keydown","keyup"],["mat-icon-button","","type","button",1,"send-btn",3,"click","disabled","title"]],template:function(e,r){if(e&1){let i=J();m(0,"div",1),O(1,MV,3,0,"div",2),m(2,"div",3)(3,"textarea",4,0),_e("ngModelChange",function(s){return I(i),we(r.message,s)||(r.message=s),k(s)}),x("keydown",function(s){return I(i),k(r.onKeyDown(s))})("input",function(){return I(i),k(r.onInput())})("focus",function(){return I(i),k(r.isFocused=!0)})("blur",function(){return I(i),k(r.isFocused=!1)}),g(),O(5,IV,2,1),g()()}e&2&&(y(),R(r.isRecording?1:-1),y(),le("focused",r.isFocused)("welcome-mode",r.showWelcome)("is-thinking",r.isThinking),y(),be("ngModel",r.message),j("placeholder",r.getPlaceholder())("disabled",r.isDisabled||r.isThinking),y(2),R(r.isSessionInitializing?-1:5))},dependencies:[bn,fr,yn,rn,Nr,vn],styles:['@keyframes _ngcontent-%COMP%_gradientBorderShift{0%{background-position:0 0}50%{background-position:100% 0}to{background-position:0 0}}.chat-input-container[_ngcontent-%COMP%]{flex-shrink:0;width:100%;position:relative}.thinking-progress[_ngcontent-%COMP%]{position:absolute;top:0;left:0;right:0;height:3px;z-index:1}.thinking-progress[_ngcontent-%COMP%] .mdc-linear-progress__bar-inner{border-top-width:3px}.input-row.grouped-input[_ngcontent-%COMP%]{display:flex;align-items:center;background:var(--glass-bg);border-radius:16px;padding:0 .15rem 0 1.25rem;position:relative;transition:border-color .2s,box-shadow .2s,background .3s}.input-row[_ngcontent-%COMP%]{position:relative;background:var(--glass-bg, #1e1e1e)!important;background-clip:padding-box}.input-row[_ngcontent-%COMP%]:before{content:"";position:absolute;inset:-2px;border-radius:inherit;background-size:200% 100%;background:linear-gradient(90deg,var(--color-primary, #3b82f6) 0%,var(--color-accent, #8b5cf6) 50%,var(--color-primary, #3b82f6) 100%);mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);-webkit-mask-composite:xor;mask-composite:exclude;padding:1px;pointer-events:none;z-index:-1;animation:_ngcontent-%COMP%_gradientBorderShift 3s ease-in-out infinite}.input-row.is-thinking[_ngcontent-%COMP%]:before{inset:0;mask:none;padding:0;opacity:.15;z-index:0;background:linear-gradient(90deg,var(--color-primary, #3b82f6) 0%,var(--color-accent, #8b5cf6) 50%,var(--color-primary, #3b82f6) 100%);background-size:200% 100%;animation:_ngcontent-%COMP%_gradientBorderShift 3s ease-in-out infinite}.input-row.is-thinking[_ngcontent-%COMP%] .message-input[_ngcontent-%COMP%], .input-row.is-thinking[_ngcontent-%COMP%] .stop-btn[_ngcontent-%COMP%]{position:relative;z-index:1}.input-row.grouped-input.focused[_ngcontent-%COMP%]:not(.is-thinking){box-shadow:0 0 0 4px #007aff1a}.input-row.grouped-input.focused[_ngcontent-%COMP%]:not(.is-thinking):before{background:var(--color-primary);animation:none}.message-input[_ngcontent-%COMP%]{flex:1;border:none;outline:none;background:transparent!important;box-shadow:none;font-size:1rem;padding:1rem 0;color:var(--color-text);resize:none;min-height:36px;max-height:180px;border-radius:16px;overflow-y:auto;font-family:-apple-system,BlinkMacSystemFont,SF Pro Display,system-ui,sans-serif;line-height:1.5}.message-input[_ngcontent-%COMP%]:focus{outline:none;border:none;box-shadow:none}.message-input[_ngcontent-%COMP%]:disabled{background-color:var(--color-bg-secondary);color:var(--color-text-secondary);cursor:not-allowed;opacity:.6}.message-input[_ngcontent-%COMP%]::placeholder{color:var(--color-text-secondary);transition:opacity .3s ease-in-out}.message-input[_ngcontent-%COMP%]:disabled::placeholder{animation:_ngcontent-%COMP%_thinkingPulsate 2s ease-in-out infinite}@keyframes _ngcontent-%COMP%_thinkingPulsate{0%,to{opacity:.6}50%{opacity:1}}.voice-btn[_ngcontent-%COMP%], .send-btn[_ngcontent-%COMP%], .stop-btn[_ngcontent-%COMP%]{margin:0 .5rem 0 .08rem}.voice-btn[_ngcontent-%COMP%]:hover:not(.recording), .send-btn[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--color-bg-hover)}.voice-btn.recording[_ngcontent-%COMP%]{background:#ff3b3024;color:var(--color-error)}.send-btn[_ngcontent-%COMP%]{background:var(--color-primary)}.stop-btn[_ngcontent-%COMP%]{transition:background .18s,transform .12s}.stop-btn[_ngcontent-%COMP%]:hover{opacity:.85;transform:scale(1.05)}.stop-btn[_ngcontent-%COMP%]:active{transform:scale(.95)}.voice-btn[_ngcontent-%COMP%]{transition:background .18s,box-shadow .18s,transform .12s,opacity .5s;position:relative}.voice-btn.recording[_ngcontent-%COMP%]{background:#ff3b3012;color:var(--color-error);animation:_ngcontent-%COMP%_pulse 1.5s infinite}.voice-btn.recording[_ngcontent-%COMP%]:hover{background:#ff3b301c}.send-btn[_ngcontent-%COMP%]{transition:background .18s,box-shadow .18s,transform .12s,opacity .4s,margin-left .4s;position:relative}.send-btn.active[_ngcontent-%COMP%]{background:transparent;opacity:1}.send-btn[_ngcontent-%COMP%]:not(.active){color:var(--color-secondary);background:transparent;opacity:0;margin-left:calc(-.5rem - 36px)}.send-btn[_ngcontent-%COMP%]:hover:not(:disabled){color:#fff;background:linear-gradient(90deg,var(--color-primary, #3b82f6) 0%,var(--color-primary, #3b82f6) 20%,var(--color-accent, #8b5cf6) 50%,var(--color-primary, #3b82f6) 80%,var(--color-primary, #3b82f6) 100%);background-size:300% auto;animation:_ngcontent-%COMP%_sendButtonGradientShift 6s ease-in-out infinite;box-shadow:0 4px 14px #007aff30;transform:scale(1.2)}.send-btn[_ngcontent-%COMP%]:active:not(:disabled){transform:scale(1.3);box-shadow:0 4px 24px #007aff30}.recording-indicator[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem;margin-top:.2rem;margin-bottom:.2rem;color:var(--color-error, #ff5555);font-size:.9rem;position:absolute;top:-1.5rem}@keyframes _ngcontent-%COMP%_pulse{0%,to{opacity:1}50%{opacity:.5}}@keyframes _ngcontent-%COMP%_sendButtonGradientShift{0%{background-position:0% center}50%{background-position:50% 10%}to{background-position:0% center}}@media print{.thinking-progress[_ngcontent-%COMP%], .stop-btn[_ngcontent-%COMP%], .voice-btn[_ngcontent-%COMP%], .send-btn[_ngcontent-%COMP%], .recording-indicator[_ngcontent-%COMP%]{display:none!important}}']})};var kV=["choiceSelect"],AV=(n,t)=>t.value;function OV(n,t){if(n&1&&(m(0,"option",7),b(1),g()),n&2){let e=t.$implicit;j("value",e.value),y(),ke(" ",e.label," ")}}function RV(n,t){if(n&1){let e=J();m(0,"form",2),x("ngSubmit",function(){I(e);let i=w();return k(i.onSubmit())}),ie(1,"div",3),Bg(2,"async"),m(3,"div",4)(4,"select",5,0),_e("ngModelChange",function(i){I(e);let o=w();return we(o.selectedValue,i)||(o.selectedValue=i),k(i)}),x("change",function(){I(e);let i=w();return k(i.onSelectChange())})("keydown.enter",function(){I(e);let i=w();return k(i.onSubmit())})("focus",function(){I(e);let i=w();return k(i.isFocused=!0)})("blur",function(){I(e);let i=w();return k(i.isFocused=!1)}),m(6,"option",6),b(7,"-- Select an option --"),g(),ot(8,OV,2,2,"option",7,AV),g(),m(10,"button",8)(11,"mat-icon"),b(12,"send"),g()()()()}if(n&2){let e=w();y(),j("innerHTML",Ug(2,5,e.renderedLabel$),es),y(2),le("focused",e.isFocused),y(),be("ngModel",e.selectedValue),y(4),st(e.options),y(2),j("disabled",!e.selectedValue)}}var gh=class n{options=[];set labelHtml(t){typeof t=="object"?this.renderedLabelSubject.next(t):this.renderLabelMarkdown(t)}isVisible=!1;choiceSelected=new U;selectElement;selectedValue="";isFocused=!1;renderedLabelSubject=new Z("");renderedLabel$=this.renderedLabelSubject.asObservable();sanitizer=f(Yi);ngOnDestroy(){this.renderedLabelSubject.complete()}ngAfterViewInit(){this.isVisible&&this.selectElement&&setTimeout(()=>this.focusSelect(),100)}ngOnChanges(t){t.isVisible&&(console.log("[CHOICE-SELECT] isVisible changed:",t.isVisible.previousValue,"->",t.isVisible.currentValue),t.isVisible.currentValue&&!t.isVisible.previousValue&&(console.log("[CHOICE-SELECT] Component becoming visible, setting focus..."),setTimeout(()=>this.focusSelect(),150)))}focusSelect(){this.selectElement?.nativeElement&&(this.selectElement.nativeElement.focus(),console.log("[CHOICE-SELECT] Focus set on select element"))}onSubmit(){this.selectedValue?(console.log("[CHOICE-SELECT] Choice selected:",this.selectedValue),this.choiceSelected.emit(this.selectedValue),this.selectedValue=""):console.warn("[CHOICE-SELECT] No choice selected")}onSelectChange(){console.log("[CHOICE-SELECT] Selection changed to:",this.selectedValue)}renderLabelMarkdown(t){return xe(this,null,function*(){if(!t){this.renderedLabelSubject.next(this.sanitizer.bypassSecurityTrustHtml(""));return}try{let e=yield De.parse(t);this.renderedLabelSubject.next(this.sanitizer.bypassSecurityTrustHtml(e))}catch(e){console.error("[CHOICE-SELECT] Error parsing label markdown:",e),this.renderedLabelSubject.next(this.sanitizer.bypassSecurityTrustHtml(t))}})}static \u0275fac=function(e){return new(e||n)};static \u0275cmp=H({type:n,selectors:[["app-choice-select"]],viewQuery:function(e,r){if(e&1&&zt(kV,5),e&2){let i;at(i=ct())&&(r.selectElement=i.first)}},inputs:{options:"options",labelHtml:"labelHtml",isVisible:"isVisible"},outputs:{choiceSelected:"choiceSelected"},features:[Qe],decls:1,vars:1,consts:[["choiceSelect",""],[1,"choice-form"],[1,"choice-form",3,"ngSubmit"],[1,"choice-label",3,"innerHTML"],[1,"select-button-row"],["name","choice","required","",1,"choice-select-inline",3,"ngModelChange","change","keydown.enter","focus","blur","ngModel"],["value","","disabled",""],[3,"value"],["type","submit","mat-icon-button","","title","Submit selection",1,"submit-btn",3,"disabled"]],template:function(e,r){e&1&&O(0,RV,13,7,"form",1),e&2&&R(r.isVisible?0:-1)},dependencies:[bn,ph,vi,yi,hr,yn,dh,ol,rn,rl,Kf,vn,Os,Nr,rv],styles:[`@keyframes _ngcontent-%COMP%_gradientBorderShift{0%{background-position:0 0}50%{background-position:100% 0}to{background-position:0 0}}.choice-form[_ngcontent-%COMP%]{width:100%;flex-shrink:0;position:relative}.choice-label[_ngcontent-%COMP%]{display:block;margin-bottom:1rem;font-weight:500;color:var(--color-text, #374151);font-size:1rem}.select-button-row[_ngcontent-%COMP%]{display:flex;align-items:center;background:var(--glass-bg);border-radius:16px;padding:0 .15rem 0 1.25rem;position:relative;transition:border-color .2s,box-shadow .2s;--select-arrow-icon: url('data:image/svg+xml;charset=UTF-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="%23666"><path d="M7 10l5 5 5-5z"/></svg>')}.select-button-row[_ngcontent-%COMP%]{position:relative;background:var(--glass-bg, #1e1e1e)!important;background-clip:padding-box}.select-button-row[_ngcontent-%COMP%]:before{content:"";position:absolute;inset:-2px;border-radius:inherit;background-size:200% 100%;background:linear-gradient(90deg,var(--color-primary, #3b82f6) 0%,var(--color-accent, #8b5cf6) 50%,var(--color-primary, #3b82f6) 100%);mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);-webkit-mask-composite:xor;mask-composite:exclude;padding:1px;pointer-events:none;z-index:-1;animation:_ngcontent-%COMP%_gradientBorderShift 3s ease-in-out infinite}.select-button-row.focused[_ngcontent-%COMP%]{box-shadow:0 0 0 4px #007aff1a}.select-button-row.focused[_ngcontent-%COMP%]:before{background:var(--color-primary);animation:none}.choice-select-inline[_ngcontent-%COMP%]{flex:1;border:none;outline:none;background:transparent!important;box-shadow:none;font-size:1rem;padding:1rem 3rem 1rem 0;color:var(--color-text);border-radius:16px;font-family:-apple-system,BlinkMacSystemFont,SF Pro Display,system-ui,sans-serif;cursor:pointer;line-height:1.5;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-image:var(--select-arrow-icon);background-repeat:no-repeat;background-position:right 3.5rem center;background-size:36px 36px}.choice-select-inline[_ngcontent-%COMP%]:focus{outline:none;border:none;box-shadow:none}.choice-select-inline[_ngcontent-%COMP%]:disabled{background-color:var(--color-bg-secondary);color:var(--color-text-secondary);cursor:not-allowed;opacity:.6}.choice-select-inline[_ngcontent-%COMP%] option[_ngcontent-%COMP%]:disabled{color:var(--color-text-secondary, #9ca3af);font-style:italic}.submit-btn[_ngcontent-%COMP%]{margin:0 .5rem 0 .08rem;background:var(--color-primary);transition:background .18s,box-shadow .18s,transform .12s,opacity .4s;position:relative}.submit-btn[_ngcontent-%COMP%]:hover:not(:disabled){color:#fff;background:linear-gradient(90deg,var(--color-primary, #3b82f6) 0%,var(--color-primary, #3b82f6) 20%,var(--color-accent, #8b5cf6) 50%,var(--color-primary, #3b82f6) 80%,var(--color-primary, #3b82f6) 100%);background-size:300% auto;animation:_ngcontent-%COMP%_sendButtonGradientShift 6s ease-in-out infinite;box-shadow:0 4px 14px #007aff30;transform:scale(1.2)}.submit-btn[_ngcontent-%COMP%]:active:not(:disabled){transform:scale(1.3);box-shadow:0 4px 24px #007aff30}.submit-btn[_ngcontent-%COMP%]:disabled{background:var(--color-text-secondary);cursor:not-allowed;opacity:.5;box-shadow:none}@keyframes _ngcontent-%COMP%_sendButtonGradientShift{0%{background-position:0% center}50%{background-position:50% 10%}to{background-position:0% center}}@media (max-width: 480px){.choice-form[_ngcontent-%COMP%]{max-width:none}.select-button-row[_ngcontent-%COMP%]{flex-direction:row}}@media print{.submit-btn[_ngcontent-%COMP%]{display:none!important}}`]})};var vh={projects:{list:null,current:null,canCreate:!0},threads:{list:null,current:null}},bi=class n{destroy$=new A;sessionStateSubject=new Z(vh);isInitializingSubject=new Z(!0);sessionState$=this.sessionStateSubject.asObservable();isInitializing$=this.isInitializingSubject.asObservable();codayApi=f(ur);eventStream=f(Zs);constructor(){console.log("[SESSION-STATE] Service initializing"),this.setupEventListeners(),this.initializeState()}initializeState(){console.log("[SESSION-STATE] Fetching initial state with retry mechanism");let t=Date.now(),e=2e4,r=2e3,i=0,o=!1;ha(0,r).pipe(Yl(()=>{let s=Date.now()-t,a=s<e;return o?(console.log("[SESSION-STATE] Valid state found, stopping retry mechanism"),!1):a?!0:(console.log(`[SESSION-STATE] Retry timeout reached after ${s}ms`),!1)},!0),Ze(()=>{i++;let s=Date.now()-t;return console.log(`[SESSION-STATE] Attempt #${i} (${s}ms elapsed) to refresh state...`),this.codayApi.getSessionState().pipe(ge(a=>{console.log("[SESSION-STATE] State fetched successfully:",a),this.sessionStateSubject.next(a);let c=a.projects.list!==null&&a.projects.list.length>0,l=a.threads.list!==null&&a.threads.list.length>0,d=a.projects.current!==null;c||l||d?(console.log("[SESSION-STATE] Valid state detected:"),console.log("[SESSION-STATE] - Has projects:",c),console.log("[SESSION-STATE] - Has threads:",l),console.log("[SESSION-STATE] - Has current project:",d),o=!0):console.log("[SESSION-STATE] State is empty (no projects/threads/current), will retry...")}),V(()=>!0),xt(a=>(console.warn(`[SESSION-STATE] Attempt #${i} failed:`,a.message||a),P(!1))))}),F(this.destroy$)).subscribe({next:()=>{},error:s=>{console.error("[SESSION-STATE] Unexpected error in retry mechanism:",s),this.sessionStateSubject.next(vh)},complete:()=>{let s=Date.now()-t;console.log(`[SESSION-STATE] Initialization completed after ${i} attempts in ${s}ms`);let a=this.sessionStateSubject.value;!a.projects.list&&!a.threads.list&&!a.projects.current&&(console.log("[SESSION-STATE] No valid state found after retries, using default state"),this.sessionStateSubject.next(vh)),this.isInitializingSubject.next(!1),console.log("[SESSION-STATE] Initialization flag set to false - UI can now be enabled")}})}setupEventListeners(){this.eventStream.events$.pipe(F(this.destroy$)).subscribe({next:t=>this.handleEvent(t),error:t=>console.error("[SESSION-STATE] Event stream error:",t)})}handleEvent(t){console.log("[SESSION-STATE] Event received:",t.type,t);let e=!1;t instanceof pi?(console.log("[SESSION-STATE] Project selected event received"),e=!0):t instanceof mi&&(console.log("[SESSION-STATE] Thread selected event received:",t.threadName),e=!0),e&&(console.log("[SESSION-STATE] Triggering state refresh due to event:",t.type),this.refreshState().subscribe({error:r=>console.error("[SESSION-STATE] Auto-refresh failed:",r)}))}refreshState(){return console.log("[SESSION-STATE] Refreshing state via CodayApiService"),this.codayApi.getSessionState().pipe(ge(t=>{console.log("[SESSION-STATE] State refreshed:",t),this.sessionStateSubject.next(t)}),xt(t=>{console.error("[SESSION-STATE] Error fetching state:",t);let e=E({},vh);return t.status===404?console.warn("[SESSION-STATE] Client not found, using default state"):t.status===400?console.error("[SESSION-STATE] Bad request, check clientId"):console.error("[SESSION-STATE] Server error:",t.status),this.sessionStateSubject.next(e),P(e)}))}getProjects$(){return this.sessionState$.pipe(V(t=>t.projects))}getThreads$(){return this.sessionState$.pipe(V(t=>t.threads))}getCurrentProject(){return this.sessionStateSubject.value.projects.current}getCurrentThread(){return this.sessionStateSubject.value.threads.current}isProjectLocked(){return!this.sessionStateSubject.value.projects.canCreate}getCurrentState(){return this.sessionStateSubject.value}hasProjectSelected(){return this.getCurrentProject()!==null}hasThreadSelected(){return this.getCurrentThread()!==null}getAvailableProjects(){return this.sessionStateSubject.value.projects.list}getAvailableThreads(){return this.sessionStateSubject.value.threads.list}ngOnDestroy(){console.log("[SESSION-STATE] Service destroying"),this.destroy$.next(),this.destroy$.complete(),this.sessionStateSubject.complete(),this.isInitializingSubject.complete()}static \u0275fac=function(e){return new(e||n)};static \u0275prov=C({token:n,factory:n.\u0275fac,providedIn:"root"})};var yh=class n{maxFileSize=5*1024*1024;supportedTypes=["image/png","image/jpeg","image/gif","image/webp"];validateFile(t){if(!this.supportedTypes.includes(t.type))throw new Error(`Unsupported file type: ${t.type}`);if(t.size>this.maxFileSize)throw new Error(`File too large: ${(t.size/1024/1024).toFixed(1)}MB exceeds 5MB limit`)}fileToBase64(t){return xe(this,null,function*(){return new Promise((e,r)=>{let i=new FileReader;i.onload=()=>{let o=i.result;if(!o){r(new Error("Failed to read file"));return}let s=o.split(",")[1];if(!s){r(new Error("Invalid file format"));return}e(s)},i.onerror=r,i.readAsDataURL(t)})})}uploadImage(t,e){return xe(this,null,function*(){console.log("[IMAGE-UPLOAD] uploadImage - file:",t.name,t.type,t.size),console.log("[IMAGE-UPLOAD] uploadImage - clientId:",e);try{console.log("[IMAGE-UPLOAD] Validating file..."),this.validateFile(t),console.log("[IMAGE-UPLOAD] Converting to base64...");let r=yield this.fileToBase64(t);console.log("[IMAGE-UPLOAD] Base64 length:",r.length),console.log("[IMAGE-UPLOAD] Sending upload request...");let i=yield fetch("/api/files/upload",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({clientId:e,content:r,mimeType:t.type,filename:t.name})});if(console.log("[IMAGE-UPLOAD] Response status:",i.status),!i.ok){let s=yield i.json();throw console.log("[IMAGE-UPLOAD] Upload error response:",s),new Error(s.error||"Upload failed")}let o=yield i.json();return console.log("[IMAGE-UPLOAD] Upload success result:",o),{success:!0,processedSize:o.processedSize,dimensions:o.dimensions}}catch(r){return console.log("[IMAGE-UPLOAD] Upload failed:",r),{success:!1,error:r instanceof Error?r.message:"Upload failed"}}})}hasImageFiles(t){if(console.log("[IMAGE-UPLOAD] hasImageFiles - dataTransfer:",t),!t)return console.log("[IMAGE-UPLOAD] hasImageFiles - no dataTransfer"),!1;if(console.log("[IMAGE-UPLOAD] hasImageFiles - types:",Array.from(t.types)),!Array.from(t.types).includes("Files"))return console.log("[IMAGE-UPLOAD] hasImageFiles - no Files type"),!1;let e=Array.from(t.files||[]);console.log("[IMAGE-UPLOAD] hasImageFiles - files:",e.map(i=>({name:i.name,type:i.type})));let r=e.some(i=>this.supportedTypes.includes(i.type));return console.log("[IMAGE-UPLOAD] hasImageFiles - result:",r),r}filterImageFiles(t){return Array.from(t).filter(r=>this.supportedTypes.includes(r.type))}static \u0275fac=function(e){return new(e||n)};static \u0275prov=C({token:n,factory:n.\u0275fac,providedIn:"root"})};var bh=class n{ATTENTION_EMOJI="\u{1F534}";isSystemActive=!1;systemActiveTimer=null;SYSTEM_ACTIVE_TIMEOUT=4e3;unreadService=f(Bs);codayService=f(Qt);constructor(){this.initializeTitleUpdates()}initializeTitleUpdates(){gr([this.codayService.projectTitle$,this.unreadService.unreadCount$]).subscribe(([t,e])=>{this.updateTitle(t,e)})}updateTitle(t,e){let r;this.isSystemActive?r=`\u23F3${e>0?` (${e}) `:" "}${t}`:e>0?r=`${this.ATTENTION_EMOJI} (${e}) ${t}`:r=t,document.title=r,console.log("[TAB-TITLE] Updated to:",r)}setSystemActive(){console.log("[TAB-TITLE] System active - showing hourglass"),this.isSystemActive=!0,this.systemActiveTimer&&clearTimeout(this.systemActiveTimer),this.systemActiveTimer=setTimeout(()=>{console.log("[TAB-TITLE] System active timeout - hiding hourglass"),this.isSystemActive=!1,this.forceUpdateTitle()},this.SYSTEM_ACTIVE_TIMEOUT),this.forceUpdateTitle()}setSystemInactive(){console.log("[TAB-TITLE] System inactive - hiding hourglass"),this.isSystemActive=!1,this.systemActiveTimer&&(clearTimeout(this.systemActiveTimer),this.systemActiveTimer=null),this.forceUpdateTitle()}forceUpdateTitle(){let t=this.codayService.getCurrentProjectTitle(),e=this.unreadService.getCurrentCount();this.updateTitle(t,e)}static \u0275fac=function(e){return new(e||n)};static \u0275prov=C({token:n,factory:n.\u0275fac,providedIn:"root"})};var PV=["inputSection"];function NV(n,t){if(n&1&&(m(0,"div",2),b(1),g()),n&2){let e=w();y(),is(" \u26A0\uFE0F Connection lost. Reconnecting... (",e.connectionStatus.reconnectAttempts,"/",e.connectionStatus.maxAttempts,") ")}}function FV(n,t){if(n&1&&(m(0,"div",3)(1,"h1",10),b(2),g()()),n&2){let e=w();y(2),Ue(e.currentWelcomeMessage)}}function LV(n,t){if(n&1&&(m(0,"div",14),b(1),g()),n&2){let e=w(2);le("error",e.uploadStatus.isError),y(),ke(" ",e.uploadStatus.message," ")}}function VV(n,t){if(n&1){let e=J();m(0,"div",4)(1,"div",11)(2,"app-chat-history",12),x("copyRequested",function(i){I(e);let o=w();return k(o.onCopyMessage(i))})("stopRequested",function(){I(e);let i=w();return k(i.onStopRequested())}),g(),O(3,LV,2,3,"div",13),g()()}if(n&2){let e=w();y(2),j("messages",e.messages)("isThinking",e.isThinking),y(),R(e.uploadStatus.message?3:-1)}}function jV(n,t){if(n&1){let e=J();m(0,"app-chat-textarea",15),x("messageSubmitted",function(i){I(e);let o=w();return k(o.onMessageSubmitted(i))})("voiceRecordingToggled",function(i){I(e);let o=w();return k(o.onVoiceToggled(i))})("heightChanged",function(i){I(e);let o=w();return k(o.onInputHeightChanged(i))})("stopRequested",function(){I(e);let i=w();return k(i.onStopRequested())}),g()}if(n&2){let e=w();j("isDisabled",!e.isConnected||e.isSessionInitializing)("isSessionInitializing",e.isSessionInitializing)("showWelcome",!e.userHasSentMessage)("isThinking",e.isThinking)("isStarting",e.isStartingFirstMessage)}}function BV(n,t){if(n&1){let e=J();m(0,"app-choice-select",16),x("choiceSelected",function(i){I(e);let o=w();return k(o.onChoiceSelected(i))}),g()}if(n&2){let e=w();j("options",e.currentChoice.options)("labelHtml",e.currentChoice.label)("isVisible",!!e.currentChoice)}}var _h=class n{destroy$=new A;inputSection;messages=[];isThinking=!1;isStartingFirstMessage=!1;currentChoice=null;connectionStatus=null;isConnected=!1;isSessionInitializing=!0;userHasSentMessage=!1;showConnectionStatus=!1;hasEverConnected=!1;inputSectionHeight=80;uploadStatus={message:"",isError:!1};clientId;isDragOver=!1;welcomeMessages=["Welcome to Coday","Bienvenue sur Coday","Bienvenido a Coday","Willkommen bei Coday","Benvenuto su Coday","Bem-vindo ao Coday","Welkom bij Coday","\u0414\u043E\u0431\u0440\u043E \u043F\u043E\u0436\u0430\u043B\u043E\u0432\u0430\u0442\u044C \u0432 Coday","Coday \u3078\u3088\u3046\u3053\u305D","\u6B22\u8FCE\u6765\u5230 Coday","Coday \uC5D0 \uC624\uC2E0 \uAC83\uC744 \uD658\uC601\uD569\uB2C8\uB2E4","\u0645\u0631\u062D\u0628\u064B\u0627 \u0628\u0643 \u0641\u064A Coday"];currentWelcomeIndex=0;currentWelcomeMessage=this.welcomeMessages[0];welcomeRotationInterval;codayService=f(Qt);codayApiService=f(ur);sessionStateService=f(bi);imageUploadService=f(yh);titleService=f(bh);preferencesService=f(Mt);constructor(){this.clientId=this.codayApiService.getClientId(),console.log("[MAIN-APP] Constructor - clientId:",this.clientId),console.log("[MAIN-APP] SessionStateService injected and will initialize:",!!this.sessionStateService)}ngOnInit(){this.setupPrintHandlers(),this.startWelcomeRotation(),this.codayService.messages$.pipe(F(this.destroy$)).subscribe(t=>{console.log("[MAIN-APP] Messages updated:",t.length),this.messages=t,t.length>0&&t.some(e=>e.role==="user")&&!this.userHasSentMessage&&(console.log("[MAIN-APP] Messages loaded from thread, hiding welcome message"),this.userHasSentMessage=!0,this.stopWelcomeRotation()),t.length===0&&this.userHasSentMessage&&(console.log("[MAIN-APP] Messages cleared, showing welcome message again"),this.userHasSentMessage=!1,this.startWelcomeRotation())}),this.codayService.isThinking$.pipe(F(this.destroy$)).subscribe(t=>{this.isThinking=t,t&&(this.isStartingFirstMessage=!1)}),this.codayService.currentChoice$.pipe(F(this.destroy$)).subscribe(t=>{this.currentChoice=t}),this.sessionStateService.isInitializing$.pipe(F(this.destroy$)).subscribe(t=>{console.log("[MAIN-APP] Session initialization state changed:",t),this.isSessionInitializing=t}),this.codayService.connectionStatus$.pipe(F(this.destroy$)).subscribe(t=>{this.connectionStatus=t,this.isConnected=t.connected,t.connected&&!this.hasEverConnected&&(this.hasEverConnected=!0,this.showConnectionStatus=!0),!t.connected&&!this.hasEverConnected?setTimeout(()=>{!this.isConnected&&!this.hasEverConnected&&(this.showConnectionStatus=!0)},2e3):!t.connected&&this.hasEverConnected?this.showConnectionStatus=!0:t.connected&&(this.showConnectionStatus=!0)}),this.codayService.setTabTitleService(this.titleService),this.codayService.start()}ngAfterViewInit(){setTimeout(()=>this.updateInputSectionHeight(),100)}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete(),window.removeEventListener("beforeprint",this.handleBeforePrint),window.removeEventListener("afterprint",this.handleAfterPrint),this.stopWelcomeRotation()}startWelcomeRotation(){this.userHasSentMessage||(this.welcomeRotationInterval=window.setInterval(()=>{this.currentWelcomeIndex=(this.currentWelcomeIndex+1)%this.welcomeMessages.length,this.currentWelcomeMessage=this.welcomeMessages[this.currentWelcomeIndex]},3e3))}stopWelcomeRotation(){this.welcomeRotationInterval&&(clearInterval(this.welcomeRotationInterval),this.welcomeRotationInterval=void 0)}onMessageSubmitted(t){console.log("[MAIN-APP] Sending message:",t),this.userHasSentMessage||(this.userHasSentMessage=!0,this.stopWelcomeRotation(),this.isStartingFirstMessage=!0),this.isThinking=!0,this.codayService.sendMessage(t)}onVoiceToggled(t){console.log("[VOICE] Recording:",t)}onChoiceSelected(t){console.log("choosing selected",t),this.codayService.sendChoice(t)}onCopyMessage(t){console.log("[COPY] Message copied:",t.id)}onStopRequested(){this.codayService.stop()}onInputHeightChanged(t){console.log("[MAIN-APP] Input height changed:",t),this.inputSectionHeight=t}updateInputSectionHeight(){if(this.inputSection?.nativeElement){let t=this.inputSection.nativeElement.offsetHeight;t!==this.inputSectionHeight&&(console.log("[MAIN-APP] Input section height updated:",t),this.inputSectionHeight=t)}}onDragEnter(t){t.preventDefault(),this.imageUploadService.hasImageFiles(t.dataTransfer)&&(console.log("[MAIN-APP] Image files detected - showing drag overlay"),this.isDragOver=!0)}onDragOver(t){t.preventDefault(),this.imageUploadService.hasImageFiles(t.dataTransfer)&&(t.dataTransfer.dropEffect="copy")}onDragLeave(t){(t.target===document.body||!document.body.contains(t.relatedTarget))&&(console.log("[MAIN-APP] Leaving application area - hiding drag overlay"),this.isDragOver=!1)}onDrop(t){return xe(this,null,function*(){if(t.preventDefault(),this.isDragOver=!1,console.log("[MAIN-APP] Files dropped:",t.dataTransfer?.files?.length||0),!this.clientId){this.showUploadError("No client ID available for upload");return}let e=this.imageUploadService.filterImageFiles(t.dataTransfer?.files||[]);if(e.length===0){this.showUploadError("No valid image files found");return}console.log("[MAIN-APP] Uploading",e.length,"image(s)");for(let r of e)try{this.showUploadStatus(`Uploading ${r.name}...`);let i=yield this.imageUploadService.uploadImage(r,this.clientId);i.success?this.showUploadSuccess(`${r.name} uploaded successfully`):this.showUploadError(`Failed to upload ${r.name}: ${i.error}`)}catch(i){console.error("[MAIN-APP] Upload error:",i),this.showUploadError(`Failed to upload ${r.name}: ${i instanceof Error?i.message:"Unknown error"}`)}})}showUploadStatus(t){this.uploadStatus={message:t,isError:!1}}showUploadSuccess(t){this.uploadStatus={message:`\u2705 ${t}`,isError:!1},setTimeout(()=>{this.uploadStatus={message:"",isError:!1}},3e3)}showUploadError(t){this.uploadStatus={message:t,isError:!0},setTimeout(()=>{this.uploadStatus={message:"",isError:!1}},5e3)}setupPrintHandlers(){window.addEventListener("beforeprint",this.handleBeforePrint),window.addEventListener("afterprint",this.handleAfterPrint)}handleBeforePrint=()=>{console.log("[PRINT] Before print event triggered");let t=this.preferencesService.getPrintTechnicalMessages();console.log("[PRINT] Print technical messages:",t),t?document.body.classList.add("print-include-technical"):document.body.classList.remove("print-include-technical")};handleAfterPrint=()=>{console.log("[PRINT] After print event triggered"),document.body.classList.remove("print-include-technical")};static \u0275fac=function(e){return new(e||n)};static \u0275cmp=H({type:n,selectors:[["app-main"]],viewQuery:function(e,r){if(e&1&&zt(PV,5),e&2){let i;at(i=ct())&&(r.inputSection=i.first)}},hostBindings:function(e,r){e&1&&x("dragenter",function(o){return r.onDragEnter(o)})("dragover",function(o){return r.onDragOver(o)})("dragleave",function(o){return r.onDragLeave(o)})("drop",function(o){return r.onDrop(o)})},decls:10,vars:4,consts:[["inputSection",""],[1,"app"],[1,"connection-status"],[1,"welcome-section"],[1,"chat-wrapper"],[1,"input-section"],[1,"input-center"],[1,"input-glass"],[3,"isDisabled","isSessionInitializing","showWelcome","isThinking","isStarting"],[1,"choice-overlay",3,"options","labelHtml","isVisible"],[1,"welcome-title"],[1,"chat-center"],[3,"copyRequested","stopRequested","messages","isThinking"],[1,"upload-status",3,"error"],[1,"upload-status"],[3,"messageSubmitted","voiceRecordingToggled","heightChanged","stopRequested","isDisabled","isSessionInitializing","showWelcome","isThinking","isStarting"],[1,"choice-overlay",3,"choiceSelected","options","labelHtml","isVisible"]],template:function(e,r){e&1&&(m(0,"div",1),O(1,NV,2,2,"div",2),O(2,FV,3,1,"div",3)(3,VV,4,3,"div",4),m(4,"div",5,0)(6,"div",6)(7,"div",7),O(8,jV,1,5,"app-chat-textarea",8),O(9,BV,1,3,"app-choice-select",9),g()()()()),e&2&&(y(),R(r.showConnectionStatus&&r.connectionStatus&&!r.connectionStatus.connected?1:-1),y(),R(!r.userHasSentMessage||r.messages.length===2?2:3),y(6),R(r.currentChoice?-1:8),y(),R(r.currentChoice?9:-1))},dependencies:[th,mh,gh],styles:['[_nghost-%COMP%]{display:flex;height:100vh;width:100%;overflow:hidden;justify-content:center}.app[_ngcontent-%COMP%]{width:100%;max-width:100%;height:100%;display:flex;flex-direction:column;background:var(--color-bg);color:var(--color-text);transition:all .3s ease;position:relative;justify-content:center}.app.drag-over[_ngcontent-%COMP%]:before{content:"";position:absolute;inset:0;border:3px dashed var(--color-primary);border-radius:16px;background:var(--glass-bg);backdrop-filter:var(--glass-backdrop-blur);-webkit-backdrop-filter:var(--glass-backdrop-blur);pointer-events:none;z-index:100}.connection-status[_ngcontent-%COMP%]{position:fixed;top:0;left:0;right:0;z-index:1001;padding:.75rem 1rem;text-align:center;font-size:.9rem;background:var(--color-error);color:var(--color-text-inverse);border-bottom:1px solid rgba(255,255,255,.2);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);box-shadow:0 4px 16px #0000001a}.chat-wrapper[_ngcontent-%COMP%]{flex:1;min-height:0;overflow-y:auto;overflow-x:hidden;background:transparent;width:100%;padding:2.5rem 0 1.5rem;display:flex;justify-content:center}.chat-wrapper[_ngcontent-%COMP%] .chat-center[_ngcontent-%COMP%]{max-width:760px;width:100%;margin:0;padding:0 1rem}.welcome-section[_ngcontent-%COMP%]{flex-shrink:0;text-align:center;padding:2rem 1rem;animation:_ngcontent-%COMP%_fadeInUp .8s ease-out;display:flex;justify-content:center;align-items:center;width:100%}.welcome-title[_ngcontent-%COMP%]{font-size:clamp(2.5rem,6vw,4rem);font-weight:700;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;margin:0;padding:0;line-height:1.2;transition:opacity .5s ease-in-out;display:inline-block;min-height:1.2em}@keyframes _ngcontent-%COMP%_fadeInUp{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@keyframes _ngcontent-%COMP%_gradientShift{0%{background-position:0% center}50%{background-position:100% center}to{background-position:0% center}}.input-section[_ngcontent-%COMP%]{flex-shrink:0;position:relative;border-top:none;background:transparent;box-shadow:none;padding:2.5rem 0 2rem;overflow-y:visible;max-height:none;width:100%;z-index:10;pointer-events:none;display:flex;justify-content:center}.input-center[_ngcontent-%COMP%]{max-width:760px;width:100%;margin:0;padding:0 1rem;display:flex;justify-content:center;align-items:end;position:relative;pointer-events:auto}.input-glass[_ngcontent-%COMP%]{background:none;box-shadow:none;width:100%;min-height:64px;display:flex;align-items:stretch;gap:0;pointer-events:auto;position:relative;overflow:visible}.input-glass[_ngcontent-%COMP%] app-chat-textarea[_ngcontent-%COMP%]{width:100%;min-width:0;flex:1 1 auto;align-self:stretch;display:flex}body.dark[_nghost-%COMP%], body.dark [_nghost-%COMP%], [_ngcontent-%COMP%]:root[data-theme=dark] .input-glass[_ngcontent-%COMP%]{background:#24283073;border-color:#b4c8ff17;box-shadow:0 8px 32px #0000002b,0 1.5px 8px #00000012}.choice-overlay[_ngcontent-%COMP%]{z-index:10;width:100%;display:flex;justify-content:center;align-items:center}.upload-status[_ngcontent-%COMP%]{position:fixed;bottom:100px;left:50%;transform:translate(-50%);z-index:1000;display:flex;align-items:center;padding:12px 20px;background:var(--glass-bg);backdrop-filter:var(--glass-backdrop-blur);-webkit-backdrop-filter:var(--glass-backdrop-blur);border:1px solid var(--glass-border);border-radius:16px;font-size:.9em;color:var(--color-text);box-shadow:var(--glass-shadow);max-width:300px;text-align:center}.upload-status.error[_ngcontent-%COMP%]{background:#ff3b3026;color:var(--color-error);border-color:#ff3b304d}@media (max-width: 768px){.chat-wrapper[_ngcontent-%COMP%]{padding:.75rem 1rem}.input-section[_ngcontent-%COMP%]{padding:.75rem}.input-section[_ngcontent-%COMP%] > app-chat-textarea[_ngcontent-%COMP%]{max-width:none}.choice-overlay[_ngcontent-%COMP%]{padding:.75rem}}@media print{[_nghost-%COMP%]{display:block!important;height:auto!important;max-height:none!important;overflow:visible!important;position:static!important}.app[_ngcontent-%COMP%]{height:auto!important;max-height:none!important;min-height:auto!important;overflow:visible!important;display:block!important;flex-direction:column!important;position:static!important}.chat-wrapper[_ngcontent-%COMP%]{flex:none!important;height:auto!important;max-height:none!important;min-height:auto!important;overflow:visible!important;overflow-y:visible!important;overflow-x:visible!important;padding:0!important;margin:0!important;position:static!important}.input-section[_ngcontent-%COMP%], .welcome-section[_ngcontent-%COMP%], .connection-status[_ngcontent-%COMP%], .upload-status[_ngcontent-%COMP%]{display:none!important}}'],data:{animation:[qv("slideIn",[Ju(":enter",[li({transform:"translateY(100%)",opacity:0}),Xu("300ms ease-out",li({transform:"translateY(0)",opacity:1}))]),Ju(":leave",[Xu("200ms ease-in",li({transform:"translateY(100%)",opacity:0}))])])]}})};var cT=[{path:"",component:_h},{path:"**",redirectTo:""}];var lT={providers:[sm(),zg({eventCoalescing:!0}),zv(cT),gv(),dD(),od(fM)]};var Eh=["*"],HV=["content"],$V=[[["mat-drawer"]],[["mat-drawer-content"]],"*"],zV=["mat-drawer","mat-drawer-content","*"];function WV(n,t){if(n&1){let e=J();m(0,"div",1),x("click",function(){I(e);let i=w();return k(i._onBackdropClicked())}),g()}if(n&2){let e=w();le("mat-drawer-shown",e._isShowingBackdrop())}}function GV(n,t){n&1&&(m(0,"mat-drawer-content"),Ge(1,2),g())}var qV=[[["mat-sidenav"]],[["mat-sidenav-content"]],"*"],YV=["mat-sidenav","mat-sidenav-content","*"];function ZV(n,t){if(n&1){let e=J();m(0,"div",1),x("click",function(){I(e);let i=w();return k(i._onBackdropClicked())}),g()}if(n&2){let e=w();le("mat-drawer-shown",e._isShowingBackdrop())}}function KV(n,t){n&1&&(m(0,"mat-sidenav-content"),Ge(1,2),g())}var QV=`.mat-drawer-container{position:relative;z-index:1;color:var(--mat-sidenav-content-text-color, var(--mat-sys-on-background));background-color:var(--mat-sidenav-content-background-color, var(--mat-sys-background));box-sizing:border-box;display:block;overflow:hidden}.mat-drawer-container[fullscreen]{top:0;left:0;right:0;bottom:0;position:absolute}.mat-drawer-container[fullscreen].mat-drawer-container-has-open{overflow:hidden}.mat-drawer-container.mat-drawer-container-explicit-backdrop .mat-drawer-side{z-index:3}.mat-drawer-container.ng-animate-disabled .mat-drawer-backdrop,.mat-drawer-container.ng-animate-disabled .mat-drawer-content,.ng-animate-disabled .mat-drawer-container .mat-drawer-backdrop,.ng-animate-disabled .mat-drawer-container .mat-drawer-content{transition:none}.mat-drawer-backdrop{top:0;left:0;right:0;bottom:0;position:absolute;display:block;z-index:3;visibility:hidden}.mat-drawer-backdrop.mat-drawer-shown{visibility:visible;background-color:var(--mat-sidenav-scrim-color, color-mix(in srgb, var(--mat-sys-neutral-variant20) 40%, transparent))}.mat-drawer-transition .mat-drawer-backdrop{transition-duration:400ms;transition-timing-function:cubic-bezier(0.25, 0.8, 0.25, 1);transition-property:background-color,visibility}@media(forced-colors: active){.mat-drawer-backdrop{opacity:.5}}.mat-drawer-content{position:relative;z-index:1;display:block;height:100%;overflow:auto}.mat-drawer-content.mat-drawer-content-hidden{opacity:0}.mat-drawer-transition .mat-drawer-content{transition-duration:400ms;transition-timing-function:cubic-bezier(0.25, 0.8, 0.25, 1);transition-property:transform,margin-left,margin-right}.mat-drawer{position:relative;z-index:4;color:var(--mat-sidenav-container-text-color, var(--mat-sys-on-surface-variant));box-shadow:var(--mat-sidenav-container-elevation-shadow, none);background-color:var(--mat-sidenav-container-background-color, var(--mat-sys-surface));border-top-right-radius:var(--mat-sidenav-container-shape, var(--mat-sys-corner-large));border-bottom-right-radius:var(--mat-sidenav-container-shape, var(--mat-sys-corner-large));width:var(--mat-sidenav-container-width, 360px);display:block;position:absolute;top:0;bottom:0;z-index:3;outline:0;box-sizing:border-box;overflow-y:auto;transform:translate3d(-100%, 0, 0)}@media(forced-colors: active){.mat-drawer,[dir=rtl] .mat-drawer.mat-drawer-end{border-right:solid 1px currentColor}}@media(forced-colors: active){[dir=rtl] .mat-drawer,.mat-drawer.mat-drawer-end{border-left:solid 1px currentColor;border-right:none}}.mat-drawer.mat-drawer-side{z-index:2}.mat-drawer.mat-drawer-end{right:0;transform:translate3d(100%, 0, 0);border-top-left-radius:var(--mat-sidenav-container-shape, var(--mat-sys-corner-large));border-bottom-left-radius:var(--mat-sidenav-container-shape, var(--mat-sys-corner-large));border-top-right-radius:0;border-bottom-right-radius:0}[dir=rtl] .mat-drawer{border-top-left-radius:var(--mat-sidenav-container-shape, var(--mat-sys-corner-large));border-bottom-left-radius:var(--mat-sidenav-container-shape, var(--mat-sys-corner-large));border-top-right-radius:0;border-bottom-right-radius:0;transform:translate3d(100%, 0, 0)}[dir=rtl] .mat-drawer.mat-drawer-end{border-top-right-radius:var(--mat-sidenav-container-shape, var(--mat-sys-corner-large));border-bottom-right-radius:var(--mat-sidenav-container-shape, var(--mat-sys-corner-large));border-top-left-radius:0;border-bottom-left-radius:0;left:0;right:auto;transform:translate3d(-100%, 0, 0)}.mat-drawer-transition .mat-drawer{transition:transform 400ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-drawer:not(.mat-drawer-opened):not(.mat-drawer-animating){visibility:hidden;box-shadow:none}.mat-drawer:not(.mat-drawer-opened):not(.mat-drawer-animating) .mat-drawer-inner-container{display:none}.mat-drawer.mat-drawer-opened.mat-drawer-opened{transform:none}.mat-drawer-side{box-shadow:none;border-right-color:var(--mat-sidenav-container-divider-color, transparent);border-right-width:1px;border-right-style:solid}.mat-drawer-side.mat-drawer-end{border-left-color:var(--mat-sidenav-container-divider-color, transparent);border-left-width:1px;border-left-style:solid;border-right:none}[dir=rtl] .mat-drawer-side{border-left-color:var(--mat-sidenav-container-divider-color, transparent);border-left-width:1px;border-left-style:solid;border-right:none}[dir=rtl] .mat-drawer-side.mat-drawer-end{border-right-color:var(--mat-sidenav-container-divider-color, transparent);border-right-width:1px;border-right-style:solid;border-left:none}.mat-drawer-inner-container{width:100%;height:100%;overflow:auto}.mat-sidenav-fixed{position:fixed}
|
|
103
103
|
`;var XV=new T("MAT_DRAWER_DEFAULT_AUTOSIZE",{providedIn:"root",factory:JV}),pb=new T("MAT_DRAWER_CONTAINER");function JV(){return!1}var Ch=(()=>{class n extends Ls{_platform=f(je);_changeDetectorRef=f(Dt);_container=f(hb);constructor(){let e=f(ue),r=f(Fs),i=f($);super(e,r,i)}ngAfterContentInit(){this._container._contentMarginChanges.subscribe(()=>{this._changeDetectorRef.markForCheck()})}_shouldBeHidden(){if(this._platform.isBrowser)return!1;let{start:e,end:r}=this._container;return e!=null&&e.mode!=="over"&&e.opened||r!=null&&r.mode!=="over"&&r.opened}static \u0275fac=function(r){return new(r||n)};static \u0275cmp=H({type:n,selectors:[["mat-drawer-content"]],hostAttrs:[1,"mat-drawer-content"],hostVars:6,hostBindings:function(r,i){r&2&&(Wi("margin-left",i._container._contentMargins.left,"px")("margin-right",i._container._contentMargins.right,"px"),le("mat-drawer-content-hidden",i._shouldBeHidden()))},features:[lt([{provide:Ls,useExisting:n}]),Ne],ngContentSelectors:Eh,decls:1,vars:0,template:function(r,i){r&1&&(yt(),Ge(0))},encapsulation:2,changeDetection:0})}return n})(),fb=(()=>{class n{_elementRef=f(ue);_focusTrapFactory=f(xy);_focusMonitor=f(Lc);_platform=f(je);_ngZone=f($);_renderer=f(it);_interactivityChecker=f(Df);_doc=f(z);_container=f(pb,{optional:!0});_focusTrap=null;_elementFocusedBeforeDrawerWasOpened=null;_eventCleanups;_isAttached;_anchor;get position(){return this._position}set position(e){e=e==="end"?"end":"start",e!==this._position&&(this._isAttached&&this._updatePositionInParent(e),this._position=e,this.onPositionChanged.emit())}_position="start";get mode(){return this._mode}set mode(e){this._mode=e,this._updateFocusTrapState(),this._modeChanged.next()}_mode="over";get disableClose(){return this._disableClose}set disableClose(e){this._disableClose=lo(e)}_disableClose=!1;get autoFocus(){let e=this._autoFocus;return e??(this.mode==="side"?"dialog":"first-tabbable")}set autoFocus(e){(e==="true"||e==="false"||e==null)&&(e=lo(e)),this._autoFocus=e}_autoFocus;get opened(){return this._opened()}set opened(e){this.toggle(lo(e))}_opened=Nt(!1);_openedVia;_animationStarted=new A;_animationEnd=new A;openedChange=new U(!0);_openedStream=this.openedChange.pipe(Pe(e=>e),V(()=>{}));openedStart=this._animationStarted.pipe(Pe(()=>this.opened),Wl(void 0));_closedStream=this.openedChange.pipe(Pe(e=>!e),V(()=>{}));closedStart=this._animationStarted.pipe(Pe(()=>!this.opened),Wl(void 0));_destroyed=new A;onPositionChanged=new U;_content;_modeChanged=new A;_injector=f(ce);_changeDetectorRef=f(Dt);constructor(){this.openedChange.pipe(F(this._destroyed)).subscribe(e=>{e?(this._elementFocusedBeforeDrawerWasOpened=this._doc.activeElement,this._takeFocus()):this._isFocusWithinDrawer()&&this._restoreFocus(this._openedVia||"program")}),this._ngZone.runOutsideAngular(()=>{let e=this._elementRef.nativeElement;fa(e,"keydown").pipe(Pe(r=>r.keyCode===27&&!this.disableClose&&!ID(r)),F(this._destroyed)).subscribe(r=>this._ngZone.run(()=>{this.close(),r.stopPropagation(),r.preventDefault()})),this._eventCleanups=[this._renderer.listen(e,"transitionrun",this._handleTransitionEvent),this._renderer.listen(e,"transitionend",this._handleTransitionEvent),this._renderer.listen(e,"transitioncancel",this._handleTransitionEvent)]}),this._animationEnd.subscribe(()=>{this.openedChange.emit(this.opened)})}_forceFocus(e,r){this._interactivityChecker.isFocusable(e)||(e.tabIndex=-1,this._ngZone.runOutsideAngular(()=>{let i=()=>{o(),s(),e.removeAttribute("tabindex")},o=this._renderer.listen(e,"blur",i),s=this._renderer.listen(e,"mousedown",i)})),e.focus(r)}_focusByCssSelector(e,r){let i=this._elementRef.nativeElement.querySelector(e);i&&this._forceFocus(i,r)}_takeFocus(){if(!this._focusTrap)return;let e=this._elementRef.nativeElement;switch(this.autoFocus){case!1:case"dialog":return;case!0:case"first-tabbable":vt(()=>{!this._focusTrap.focusInitialElement()&&typeof e.focus=="function"&&e.focus()},{injector:this._injector});break;case"first-heading":this._focusByCssSelector('h1, h2, h3, h4, h5, h6, [role="heading"]');break;default:this._focusByCssSelector(this.autoFocus);break}}_restoreFocus(e){this.autoFocus!=="dialog"&&(this._elementFocusedBeforeDrawerWasOpened?this._focusMonitor.focusVia(this._elementFocusedBeforeDrawerWasOpened,e):this._elementRef.nativeElement.blur(),this._elementFocusedBeforeDrawerWasOpened=null)}_isFocusWithinDrawer(){let e=this._doc.activeElement;return!!e&&this._elementRef.nativeElement.contains(e)}ngAfterViewInit(){this._isAttached=!0,this._position==="end"&&this._updatePositionInParent("end"),this._platform.isBrowser&&(this._focusTrap=this._focusTrapFactory.create(this._elementRef.nativeElement),this._updateFocusTrapState())}ngOnDestroy(){this._eventCleanups.forEach(e=>e()),this._focusTrap?.destroy(),this._anchor?.remove(),this._anchor=null,this._animationStarted.complete(),this._animationEnd.complete(),this._modeChanged.complete(),this._destroyed.next(),this._destroyed.complete()}open(e){return this.toggle(!0,e)}close(){return this.toggle(!1)}_closeViaBackdropClick(){return this._setOpen(!1,!0,"mouse")}toggle(e=!this.opened,r){e&&r&&(this._openedVia=r);let i=this._setOpen(e,!e&&this._isFocusWithinDrawer(),this._openedVia||"program");return e||(this._openedVia=null),i}_setOpen(e,r,i){return e===this.opened?Promise.resolve(e?"open":"close"):(this._opened.set(e),this._container?._transitionsEnabled?this._setIsAnimating(!0):setTimeout(()=>{this._animationStarted.next(),this._animationEnd.next()}),this._elementRef.nativeElement.classList.toggle("mat-drawer-opened",e),!e&&r&&this._restoreFocus(i),this._changeDetectorRef.markForCheck(),this._updateFocusTrapState(),new Promise(o=>{this.openedChange.pipe(It(1)).subscribe(s=>o(s?"open":"close"))}))}_setIsAnimating(e){this._elementRef.nativeElement.classList.toggle("mat-drawer-animating",e)}_getWidth(){return this._elementRef.nativeElement.offsetWidth||0}_updateFocusTrapState(){this._focusTrap&&(this._focusTrap.enabled=!!this._container?.hasBackdrop&&this.opened)}_updatePositionInParent(e){if(!this._platform.isBrowser)return;let r=this._elementRef.nativeElement,i=r.parentNode;e==="end"?(this._anchor||(this._anchor=this._doc.createComment("mat-drawer-anchor"),i.insertBefore(this._anchor,r)),i.appendChild(r)):this._anchor&&this._anchor.parentNode.insertBefore(r,this._anchor)}_handleTransitionEvent=e=>{let r=this._elementRef.nativeElement;e.target===r&&this._ngZone.run(()=>{e.type==="transitionrun"?this._animationStarted.next(e):(e.type==="transitionend"&&this._setIsAnimating(!1),this._animationEnd.next(e))})};static \u0275fac=function(r){return new(r||n)};static \u0275cmp=H({type:n,selectors:[["mat-drawer"]],viewQuery:function(r,i){if(r&1&&zt(HV,5),r&2){let o;at(o=ct())&&(i._content=o.first)}},hostAttrs:[1,"mat-drawer"],hostVars:12,hostBindings:function(r,i){r&2&&(We("align",null)("tabIndex",i.mode!=="side"?"-1":null),Wi("visibility",!i._container&&!i.opened?"hidden":null),le("mat-drawer-end",i.position==="end")("mat-drawer-over",i.mode==="over")("mat-drawer-push",i.mode==="push")("mat-drawer-side",i.mode==="side"))},inputs:{position:"position",mode:"mode",disableClose:"disableClose",autoFocus:"autoFocus",opened:"opened"},outputs:{openedChange:"openedChange",_openedStream:"opened",openedStart:"openedStart",_closedStream:"closed",closedStart:"closedStart",onPositionChanged:"positionChanged"},exportAs:["matDrawer"],ngContentSelectors:Eh,decls:3,vars:0,consts:[["content",""],["cdkScrollable","",1,"mat-drawer-inner-container"]],template:function(r,i){r&1&&(yt(),m(0,"div",1,0),Ge(2),g())},dependencies:[Ls],encapsulation:2,changeDetection:0})}return n})(),hb=(()=>{class n{_dir=f(uo,{optional:!0});_element=f(ue);_ngZone=f($);_changeDetectorRef=f(Dt);_animationDisabled=Pr();_transitionsEnabled=!1;_allDrawers;_drawers=new qo;_content;_userContent;get start(){return this._start}get end(){return this._end}get autosize(){return this._autosize}set autosize(e){this._autosize=lo(e)}_autosize=f(XV);get hasBackdrop(){return this._drawerHasBackdrop(this._start)||this._drawerHasBackdrop(this._end)}set hasBackdrop(e){this._backdropOverride=e==null?null:lo(e)}_backdropOverride;backdropClick=new U;_start;_end;_left;_right;_destroyed=new A;_doCheckSubject=new A;_contentMargins={left:null,right:null};_contentMarginChanges=new A;get scrollable(){return this._userContent||this._content}_injector=f(ce);constructor(){let e=f(je),r=f(fo);this._dir?.change.pipe(F(this._destroyed)).subscribe(()=>{this._validateDrawers(),this.updateContentMargins()}),r.change().pipe(F(this._destroyed)).subscribe(()=>this.updateContentMargins()),!this._animationDisabled&&e.isBrowser&&this._ngZone.runOutsideAngular(()=>{setTimeout(()=>{this._element.nativeElement.classList.add("mat-drawer-transition"),this._transitionsEnabled=!0},200)})}ngAfterContentInit(){this._allDrawers.changes.pipe(br(this._allDrawers),F(this._destroyed)).subscribe(e=>{this._drawers.reset(e.filter(r=>!r._container||r._container===this)),this._drawers.notifyOnChanges()}),this._drawers.changes.pipe(br(null)).subscribe(()=>{this._validateDrawers(),this._drawers.forEach(e=>{this._watchDrawerToggle(e),this._watchDrawerPosition(e),this._watchDrawerMode(e)}),(!this._drawers.length||this._isDrawerOpen(this._start)||this._isDrawerOpen(this._end))&&this.updateContentMargins(),this._changeDetectorRef.markForCheck()}),this._ngZone.runOutsideAngular(()=>{this._doCheckSubject.pipe(pa(10),F(this._destroyed)).subscribe(()=>this.updateContentMargins())})}ngOnDestroy(){this._contentMarginChanges.complete(),this._doCheckSubject.complete(),this._drawers.destroy(),this._destroyed.next(),this._destroyed.complete()}open(){this._drawers.forEach(e=>e.open())}close(){this._drawers.forEach(e=>e.close())}updateContentMargins(){let e=0,r=0;if(this._left&&this._left.opened){if(this._left.mode=="side")e+=this._left._getWidth();else if(this._left.mode=="push"){let i=this._left._getWidth();e+=i,r-=i}}if(this._right&&this._right.opened){if(this._right.mode=="side")r+=this._right._getWidth();else if(this._right.mode=="push"){let i=this._right._getWidth();r+=i,e-=i}}e=e||null,r=r||null,(e!==this._contentMargins.left||r!==this._contentMargins.right)&&(this._contentMargins={left:e,right:r},this._ngZone.run(()=>this._contentMarginChanges.next(this._contentMargins)))}ngDoCheck(){this._autosize&&this._isPushed()&&this._ngZone.runOutsideAngular(()=>this._doCheckSubject.next())}_watchDrawerToggle(e){e._animationStarted.pipe(F(this._drawers.changes)).subscribe(()=>{this.updateContentMargins(),this._changeDetectorRef.markForCheck()}),e.mode!=="side"&&e.openedChange.pipe(F(this._drawers.changes)).subscribe(()=>this._setContainerClass(e.opened))}_watchDrawerPosition(e){e.onPositionChanged.pipe(F(this._drawers.changes)).subscribe(()=>{vt({read:()=>this._validateDrawers()},{injector:this._injector})})}_watchDrawerMode(e){e._modeChanged.pipe(F(tp(this._drawers.changes,this._destroyed))).subscribe(()=>{this.updateContentMargins(),this._changeDetectorRef.markForCheck()})}_setContainerClass(e){let r=this._element.nativeElement.classList,i="mat-drawer-container-has-open";e?r.add(i):r.remove(i)}_validateDrawers(){this._start=this._end=null,this._drawers.forEach(e=>{e.position=="end"?(this._end!=null,this._end=e):(this._start!=null,this._start=e)}),this._right=this._left=null,this._dir&&this._dir.value==="rtl"?(this._left=this._end,this._right=this._start):(this._left=this._start,this._right=this._end)}_isPushed(){return this._isDrawerOpen(this._start)&&this._start.mode!="over"||this._isDrawerOpen(this._end)&&this._end.mode!="over"}_onBackdropClicked(){this.backdropClick.emit(),this._closeModalDrawersViaBackdrop()}_closeModalDrawersViaBackdrop(){[this._start,this._end].filter(e=>e&&!e.disableClose&&this._drawerHasBackdrop(e)).forEach(e=>e._closeViaBackdropClick())}_isShowingBackdrop(){return this._isDrawerOpen(this._start)&&this._drawerHasBackdrop(this._start)||this._isDrawerOpen(this._end)&&this._drawerHasBackdrop(this._end)}_isDrawerOpen(e){return e!=null&&e.opened}_drawerHasBackdrop(e){return this._backdropOverride==null?!!e&&e.mode!=="side":this._backdropOverride}static \u0275fac=function(r){return new(r||n)};static \u0275cmp=H({type:n,selectors:[["mat-drawer-container"]],contentQueries:function(r,i,o){if(r&1&&(zi(o,Ch,5),zi(o,fb,5)),r&2){let s;at(s=ct())&&(i._content=s.first),at(s=ct())&&(i._allDrawers=s)}},viewQuery:function(r,i){if(r&1&&zt(Ch,5),r&2){let o;at(o=ct())&&(i._userContent=o.first)}},hostAttrs:[1,"mat-drawer-container"],hostVars:2,hostBindings:function(r,i){r&2&&le("mat-drawer-container-explicit-backdrop",i._backdropOverride)},inputs:{autosize:"autosize",hasBackdrop:"hasBackdrop"},outputs:{backdropClick:"backdropClick"},exportAs:["matDrawerContainer"],features:[lt([{provide:pb,useExisting:n}])],ngContentSelectors:zV,decls:4,vars:2,consts:[[1,"mat-drawer-backdrop",3,"mat-drawer-shown"],[1,"mat-drawer-backdrop",3,"click"]],template:function(r,i){r&1&&(yt($V),O(0,WV,1,2,"div",0),Ge(1),Ge(2,1),O(3,GV,2,0,"mat-drawer-content")),r&2&&(R(i.hasBackdrop?0:-1),y(3),R(i._content?-1:3))},dependencies:[Ch],styles:[`.mat-drawer-container{position:relative;z-index:1;color:var(--mat-sidenav-content-text-color, var(--mat-sys-on-background));background-color:var(--mat-sidenav-content-background-color, var(--mat-sys-background));box-sizing:border-box;display:block;overflow:hidden}.mat-drawer-container[fullscreen]{top:0;left:0;right:0;bottom:0;position:absolute}.mat-drawer-container[fullscreen].mat-drawer-container-has-open{overflow:hidden}.mat-drawer-container.mat-drawer-container-explicit-backdrop .mat-drawer-side{z-index:3}.mat-drawer-container.ng-animate-disabled .mat-drawer-backdrop,.mat-drawer-container.ng-animate-disabled .mat-drawer-content,.ng-animate-disabled .mat-drawer-container .mat-drawer-backdrop,.ng-animate-disabled .mat-drawer-container .mat-drawer-content{transition:none}.mat-drawer-backdrop{top:0;left:0;right:0;bottom:0;position:absolute;display:block;z-index:3;visibility:hidden}.mat-drawer-backdrop.mat-drawer-shown{visibility:visible;background-color:var(--mat-sidenav-scrim-color, color-mix(in srgb, var(--mat-sys-neutral-variant20) 40%, transparent))}.mat-drawer-transition .mat-drawer-backdrop{transition-duration:400ms;transition-timing-function:cubic-bezier(0.25, 0.8, 0.25, 1);transition-property:background-color,visibility}@media(forced-colors: active){.mat-drawer-backdrop{opacity:.5}}.mat-drawer-content{position:relative;z-index:1;display:block;height:100%;overflow:auto}.mat-drawer-content.mat-drawer-content-hidden{opacity:0}.mat-drawer-transition .mat-drawer-content{transition-duration:400ms;transition-timing-function:cubic-bezier(0.25, 0.8, 0.25, 1);transition-property:transform,margin-left,margin-right}.mat-drawer{position:relative;z-index:4;color:var(--mat-sidenav-container-text-color, var(--mat-sys-on-surface-variant));box-shadow:var(--mat-sidenav-container-elevation-shadow, none);background-color:var(--mat-sidenav-container-background-color, var(--mat-sys-surface));border-top-right-radius:var(--mat-sidenav-container-shape, var(--mat-sys-corner-large));border-bottom-right-radius:var(--mat-sidenav-container-shape, var(--mat-sys-corner-large));width:var(--mat-sidenav-container-width, 360px);display:block;position:absolute;top:0;bottom:0;z-index:3;outline:0;box-sizing:border-box;overflow-y:auto;transform:translate3d(-100%, 0, 0)}@media(forced-colors: active){.mat-drawer,[dir=rtl] .mat-drawer.mat-drawer-end{border-right:solid 1px currentColor}}@media(forced-colors: active){[dir=rtl] .mat-drawer,.mat-drawer.mat-drawer-end{border-left:solid 1px currentColor;border-right:none}}.mat-drawer.mat-drawer-side{z-index:2}.mat-drawer.mat-drawer-end{right:0;transform:translate3d(100%, 0, 0);border-top-left-radius:var(--mat-sidenav-container-shape, var(--mat-sys-corner-large));border-bottom-left-radius:var(--mat-sidenav-container-shape, var(--mat-sys-corner-large));border-top-right-radius:0;border-bottom-right-radius:0}[dir=rtl] .mat-drawer{border-top-left-radius:var(--mat-sidenav-container-shape, var(--mat-sys-corner-large));border-bottom-left-radius:var(--mat-sidenav-container-shape, var(--mat-sys-corner-large));border-top-right-radius:0;border-bottom-right-radius:0;transform:translate3d(100%, 0, 0)}[dir=rtl] .mat-drawer.mat-drawer-end{border-top-right-radius:var(--mat-sidenav-container-shape, var(--mat-sys-corner-large));border-bottom-right-radius:var(--mat-sidenav-container-shape, var(--mat-sys-corner-large));border-top-left-radius:0;border-bottom-left-radius:0;left:0;right:auto;transform:translate3d(-100%, 0, 0)}.mat-drawer-transition .mat-drawer{transition:transform 400ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-drawer:not(.mat-drawer-opened):not(.mat-drawer-animating){visibility:hidden;box-shadow:none}.mat-drawer:not(.mat-drawer-opened):not(.mat-drawer-animating) .mat-drawer-inner-container{display:none}.mat-drawer.mat-drawer-opened.mat-drawer-opened{transform:none}.mat-drawer-side{box-shadow:none;border-right-color:var(--mat-sidenav-container-divider-color, transparent);border-right-width:1px;border-right-style:solid}.mat-drawer-side.mat-drawer-end{border-left-color:var(--mat-sidenav-container-divider-color, transparent);border-left-width:1px;border-left-style:solid;border-right:none}[dir=rtl] .mat-drawer-side{border-left-color:var(--mat-sidenav-container-divider-color, transparent);border-left-width:1px;border-left-style:solid;border-right:none}[dir=rtl] .mat-drawer-side.mat-drawer-end{border-right-color:var(--mat-sidenav-container-divider-color, transparent);border-right-width:1px;border-right-style:solid;border-left:none}.mat-drawer-inner-container{width:100%;height:100%;overflow:auto}.mat-sidenav-fixed{position:fixed}
|
|
104
104
|
`],encapsulation:2,changeDetection:0})}return n})(),wh=(()=>{class n extends Ch{static \u0275fac=(()=>{let e;return function(i){return(e||(e=ht(n)))(i||n)}})();static \u0275cmp=H({type:n,selectors:[["mat-sidenav-content"]],hostAttrs:[1,"mat-drawer-content","mat-sidenav-content"],features:[lt([{provide:Ls,useExisting:n}]),Ne],ngContentSelectors:Eh,decls:1,vars:0,template:function(r,i){r&1&&(yt(),Ge(0))},encapsulation:2,changeDetection:0})}return n})(),mb=(()=>{class n extends fb{get fixedInViewport(){return this._fixedInViewport}set fixedInViewport(e){this._fixedInViewport=lo(e)}_fixedInViewport=!1;get fixedTopGap(){return this._fixedTopGap}set fixedTopGap(e){this._fixedTopGap=Nc(e)}_fixedTopGap=0;get fixedBottomGap(){return this._fixedBottomGap}set fixedBottomGap(e){this._fixedBottomGap=Nc(e)}_fixedBottomGap=0;static \u0275fac=(()=>{let e;return function(i){return(e||(e=ht(n)))(i||n)}})();static \u0275cmp=H({type:n,selectors:[["mat-sidenav"]],hostAttrs:[1,"mat-drawer","mat-sidenav"],hostVars:16,hostBindings:function(r,i){r&2&&(We("tabIndex",i.mode!=="side"?"-1":null)("align",null),Wi("top",i.fixedInViewport?i.fixedTopGap:null,"px")("bottom",i.fixedInViewport?i.fixedBottomGap:null,"px"),le("mat-drawer-end",i.position==="end")("mat-drawer-over",i.mode==="over")("mat-drawer-push",i.mode==="push")("mat-drawer-side",i.mode==="side")("mat-sidenav-fixed",i.fixedInViewport))},inputs:{fixedInViewport:"fixedInViewport",fixedTopGap:"fixedTopGap",fixedBottomGap:"fixedBottomGap"},exportAs:["matSidenav"],features:[lt([{provide:fb,useExisting:n}]),Ne],ngContentSelectors:Eh,decls:3,vars:0,consts:[["content",""],["cdkScrollable","",1,"mat-drawer-inner-container"]],template:function(r,i){r&1&&(yt(),m(0,"div",1,0),Ge(2),g())},dependencies:[Ls],encapsulation:2,changeDetection:0})}return n})(),dT=(()=>{class n extends hb{_allDrawers=void 0;_content=void 0;static \u0275fac=(()=>{let e;return function(i){return(e||(e=ht(n)))(i||n)}})();static \u0275cmp=H({type:n,selectors:[["mat-sidenav-container"]],contentQueries:function(r,i,o){if(r&1&&(zi(o,wh,5),zi(o,mb,5)),r&2){let s;at(s=ct())&&(i._content=s.first),at(s=ct())&&(i._allDrawers=s)}},hostAttrs:[1,"mat-drawer-container","mat-sidenav-container"],hostVars:2,hostBindings:function(r,i){r&2&&le("mat-drawer-container-explicit-backdrop",i._backdropOverride)},exportAs:["matSidenavContainer"],features:[lt([{provide:pb,useExisting:n},{provide:hb,useExisting:n}]),Ne],ngContentSelectors:YV,decls:4,vars:2,consts:[[1,"mat-drawer-backdrop",3,"mat-drawer-shown"],[1,"mat-drawer-backdrop",3,"click"]],template:function(r,i){r&1&&(yt(qV),O(0,ZV,1,2,"div",0),Ge(1),Ge(2,1),O(3,KV,2,0,"mat-sidenav-content")),r&2&&(R(i.hasBackdrop?0:-1),y(3),R(i._content?-1:3))},dependencies:[wh],styles:[QV],encapsulation:2,changeDetection:0})}return n})(),uT=(()=>{class n{static \u0275fac=function(r){return new(r||n)};static \u0275mod=Ce({type:n});static \u0275inj=ve({imports:[pt,Hc,Hc,pt]})}return n})();var fT=(()=>{class n{static \u0275fac=function(r){return new(r||n)};static \u0275mod=Ce({type:n});static \u0275inj=ve({imports:[pt,pt]})}return n})();var Sh=class n{http=f(tr);getUserConfig(){return this.http.get("/api/config/user").pipe(ge(t=>console.log("[CONFIG-API] User config retrieved:",t)))}updateUserConfig(t){return this.http.put("/api/config/user",t).pipe(ge(e=>console.log("[CONFIG-API] User config updated:",e)))}getProjectConfig(t){return this.http.get(`/api/config/project/${encodeURIComponent(t)}`).pipe(ge(e=>console.log("[CONFIG-API] Project config retrieved:",e)))}updateProjectConfig(t,e){return this.http.put(`/api/config/project/${encodeURIComponent(t)}`,e).pipe(ge(r=>console.log("[CONFIG-API] Project config updated:",r)))}static \u0275fac=function(e){return new(e||n)};static \u0275prov=C({token:n,factory:n.\u0275fac,providedIn:"root"})};var na=class n{currentThemeSubject=new Z("light");currentTheme$=this.currentThemeSubject.asObservable();preferences=f(Mt);constructor(){console.log("[THEME] Initializing theme service"),this.initializeTheme(),this.setupSystemThemeListener()}initializeTheme(){let t=this.preferences.getPreference("theme","light")??"light";console.log("[THEME] Loaded saved theme:",t),this.applyTheme(t)}setTheme(t){this.preferences.setPreference("theme",t),this.applyTheme(t)}getCurrentTheme(){return this.currentThemeSubject.value}applyTheme(t){if(console.log("[THEME] Applying theme:",t),this.currentThemeSubject.next(t),t==="system")if(typeof window<"u"&&window.matchMedia){let r=window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light";console.log("[THEME] System theme resolved to:",r),this.setDocumentTheme(r)}else console.log("[THEME] matchMedia not available, defaulting to light theme"),this.setDocumentTheme("light");else this.setDocumentTheme(t)}setDocumentTheme(t){console.log("[THEME] Setting document theme to:",t),typeof document<"u"&&document.documentElement&&(t==="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",t=>{this.getCurrentTheme()==="system"&&this.setDocumentTheme(t.matches?"dark":"light")})}static \u0275fac=function(e){return new(e||n)};static \u0275prov=C({token:n,factory:n.\u0275fac,providedIn:"root"})};var tj=(n,t)=>t.code,nj=(n,t)=>t.name+t.lang;function rj(n,t){if(n&1&&(m(0,"option",16),b(1),g()),n&2){let e=t.$implicit;j("value",e.code),y(),is("",e.flag," ",e.label)}}function ij(n,t){n&1&&(m(0,"option",23),b(1,"Loading voices..."),g())}function oj(n,t){n&1&&(m(0,"option",23),b(1,"No voice available"),g())}function sj(n,t){if(n&1&&(m(0,"option",16),b(1),g()),n&2){let e=t.$implicit;j("value",e.name+"|"+e.lang),y(),ke(" ",e.displayName," ")}}var sl=class n{destroy$=new A;selectedTheme="light";selectedVoiceLanguage="en-US";useEnterToSend=!1;printTechnicalMessages=!1;hideTechnicalMessages=!1;voiceAnnounceEnabled=!1;voiceMode="speech";voiceReadFullText=!1;voiceVolume=80;voiceRate=120;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=f(Mt);voiceSynthesisService=f(Us);themeService=f(na);ngOnInit(){this.selectedTheme=this.themeService.getCurrentTheme(),this.selectedVoiceLanguage=this.preferencesService.getVoiceLanguage(),this.useEnterToSend=this.preferencesService.getEnterToSend(),this.printTechnicalMessages=this.preferencesService.getPrintTechnicalMessages(),this.hideTechnicalMessages=this.preferencesService.getHideTechnicalMessages(),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.loadAvailableVoices(),this.themeService.currentTheme$.pipe(F(this.destroy$)).subscribe(t=>{this.selectedTheme=t}),this.preferencesService.voiceLanguage$.pipe(F(this.destroy$)).subscribe(t=>{this.selectedVoiceLanguage=t}),this.preferencesService.enterToSend$.pipe(F(this.destroy$)).subscribe(t=>{this.useEnterToSend=t}),this.preferencesService.printTechnicalMessages$.pipe(F(this.destroy$)).subscribe(t=>{this.printTechnicalMessages=t}),this.preferencesService.hideTechnicalMessages$.pipe(F(this.destroy$)).subscribe(t=>{this.hideTechnicalMessages=t}),this.preferencesService.voiceAnnounceEnabled$.pipe(F(this.destroy$)).subscribe(t=>{this.voiceAnnounceEnabled=t}),this.preferencesService.voiceMode$.pipe(F(this.destroy$)).subscribe(t=>{this.voiceMode=t}),this.preferencesService.voiceReadFullText$.pipe(F(this.destroy$)).subscribe(t=>{this.voiceReadFullText=t}),this.preferencesService.voiceVolume$.pipe(F(this.destroy$)).subscribe(t=>{this.voiceVolume=Math.round(t*100)}),this.preferencesService.voiceRate$.pipe(F(this.destroy$)).subscribe(t=>{this.voiceRate=Math.round(t*100)}),this.preferencesService.selectedVoice$.pipe(F(this.destroy$)).subscribe(t=>{this.selectedVoiceId=t}),this.preferencesService.voiceLanguage$.pipe(F(this.destroy$)).subscribe(()=>{this.loadAvailableVoices()})}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)}onHideTechnicalMessagesChange(){console.log("[OPTIONS] Hide technical messages changed to:",this.hideTechnicalMessages),this.preferencesService.setHideTechnicalMessages(this.hideTechnicalMessages)}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 t=this.voiceVolume/100;console.log("[OPTIONS] Voice volume changed to:",t),this.preferencesService.setVoiceVolume(t)}onVoiceRateChange(){let t=this.voiceRate/100;console.log("[OPTIONS] Voice rate changed to:",t),this.preferencesService.setVoiceRate(t)}loadAvailableVoices(){return xe(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(t){console.error("[OPTIONS] Error loading voices:",t),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()}static \u0275fac=function(e){return new(e||n)};static \u0275cmp=H({type:n,selectors:[["app-options-panel"]],decls:131,vars:34,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"],["type","radio","name","hideTechnical",3,"ngModelChange","change","value","ngModel"],["type","radio","name","printTechnical",3,"ngModelChange","change","value","ngModel"],["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"]],template:function(e,r){e&1&&(m(0,"div",0)(1,"div",1)(2,"div",2)(3,"mat-icon"),b(4,"palette"),g(),m(5,"span"),b(6,"Appearance"),g()(),m(7,"div",3)(8,"div",4)(9,"label",5)(10,"input",6),_e("ngModelChange",function(o){return we(r.selectedTheme,o)||(r.selectedTheme=o),o}),x("change",function(){return r.onThemeChange()}),g(),ie(11,"span",7),b(12," Light "),g(),m(13,"label",5)(14,"input",8),_e("ngModelChange",function(o){return we(r.selectedTheme,o)||(r.selectedTheme=o),o}),x("change",function(){return r.onThemeChange()}),g(),ie(15,"span",7),b(16," Dark "),g(),m(17,"label",5)(18,"input",9),_e("ngModelChange",function(o){return we(r.selectedTheme,o)||(r.selectedTheme=o),o}),x("change",function(){return r.onThemeChange()}),g(),ie(19,"span",7),b(20," System "),g()()()(),m(21,"div",1)(22,"div",2)(23,"mat-icon"),b(24,"chat_bubble_outline"),g(),m(25,"span"),b(26,"Messaging"),g()(),m(27,"div",3)(28,"span",10),b(29,"Send message behavior:"),g(),m(30,"div",4)(31,"label",5)(32,"input",11),_e("ngModelChange",function(o){return we(r.useEnterToSend,o)||(r.useEnterToSend=o),o}),x("change",function(){return r.onEnterToSendChange()}),g(),ie(33,"span",7),b(34," Enter to send "),g(),m(35,"label",5)(36,"input",11),_e("ngModelChange",function(o){return we(r.useEnterToSend,o)||(r.useEnterToSend=o),o}),x("change",function(){return r.onEnterToSendChange()}),g(),ie(37,"span",7),b(38," Enter for new line "),g()()(),m(39,"div",3)(40,"span",10),b(41,"Technical messages display:"),g(),m(42,"div",4)(43,"label",5)(44,"input",12),_e("ngModelChange",function(o){return we(r.hideTechnicalMessages,o)||(r.hideTechnicalMessages=o),o}),x("change",function(){return r.onHideTechnicalMessagesChange()}),g(),ie(45,"span",7),b(46," Show technical messages "),g(),m(47,"label",5)(48,"input",12),_e("ngModelChange",function(o){return we(r.hideTechnicalMessages,o)||(r.hideTechnicalMessages=o),o}),x("change",function(){return r.onHideTechnicalMessagesChange()}),g(),ie(49,"span",7),b(50," Hide technical messages "),g()()(),m(51,"div",3)(52,"span",10),b(53,"Technical messages in print:"),g(),m(54,"div",4)(55,"label",5)(56,"input",13),_e("ngModelChange",function(o){return we(r.printTechnicalMessages,o)||(r.printTechnicalMessages=o),o}),x("change",function(){return r.onPrintTechnicalMessagesChange()}),g(),ie(57,"span",7),b(58," Include technical messages "),g(),m(59,"label",5)(60,"input",13),_e("ngModelChange",function(o){return we(r.printTechnicalMessages,o)||(r.printTechnicalMessages=o),o}),x("change",function(){return r.onPrintTechnicalMessagesChange()}),g(),ie(61,"span",7),b(62," Exclude technical messages "),g()()()(),m(63,"div",1)(64,"div",2)(65,"mat-icon"),b(66,"record_voice_over"),g(),m(67,"span"),b(68,"Voice & Speech"),g()(),m(69,"div",3)(70,"label",14),b(71,"Voice recognition language:"),g(),m(72,"select",15),_e("ngModelChange",function(o){return we(r.selectedVoiceLanguage,o)||(r.selectedVoiceLanguage=o),o}),x("change",function(){return r.onVoiceLanguageChange()}),ot(73,rj,2,3,"option",16,tj),g()(),m(75,"div",3)(76,"span",10),b(77,"Automatic announcement:"),g(),m(78,"div",4)(79,"label",5)(80,"input",17),_e("ngModelChange",function(o){return we(r.voiceAnnounceEnabled,o)||(r.voiceAnnounceEnabled=o),o}),x("change",function(){return r.onVoiceAnnounceEnabledChange()}),g(),ie(81,"span",7),b(82," Enabled "),g(),m(83,"label",5)(84,"input",17),_e("ngModelChange",function(o){return we(r.voiceAnnounceEnabled,o)||(r.voiceAnnounceEnabled=o),o}),x("change",function(){return r.onVoiceAnnounceEnabledChange()}),g(),ie(85,"span",7),b(86," Disabled "),g()()(),m(87,"div",3)(88,"span",10),b(89,"Voice mode:"),g(),m(90,"div",4)(91,"label",5)(92,"input",18),_e("ngModelChange",function(o){return we(r.voiceMode,o)||(r.voiceMode=o),o}),x("change",function(){return r.onVoiceModeChange()}),g(),ie(93,"span",7),b(94," Voice synthesis "),g(),m(95,"label",5)(96,"input",19),_e("ngModelChange",function(o){return we(r.voiceMode,o)||(r.voiceMode=o),o}),x("change",function(){return r.onVoiceModeChange()}),g(),ie(97,"span",7),b(98," Sound notification "),g()()(),m(99,"div",3)(100,"span",10),b(101,"Message reading:"),g(),m(102,"div",4)(103,"label",5)(104,"input",20),_e("ngModelChange",function(o){return we(r.voiceReadFullText,o)||(r.voiceReadFullText=o),o}),x("change",function(){return r.onVoiceReadFullTextChange()}),g(),ie(105,"span",7),b(106," Full message "),g(),m(107,"label",5)(108,"input",20),_e("ngModelChange",function(o){return we(r.voiceReadFullText,o)||(r.voiceReadFullText=o),o}),x("change",function(){return r.onVoiceReadFullTextChange()}),g(),ie(109,"span",7),b(110," First paragraphs only "),g()()(),m(111,"div",3)(112,"label",21),b(113,"Selected voice:"),g(),m(114,"select",22),_e("ngModelChange",function(o){return we(r.selectedVoiceId,o)||(r.selectedVoiceId=o),o}),x("change",function(){return r.onSelectedVoiceChange()}),O(115,ij,2,0,"option",23),O(116,oj,2,0,"option",23),ot(117,sj,2,2,"option",16,nj),g(),ie(119,"div",10),m(120,"a",24),x("click",function(){return r.testVoice()}),m(121,"span",25),b(122,"Test voice"),g()()(),m(123,"div",3)(124,"label",26),b(125),g(),m(126,"input",27),_e("ngModelChange",function(o){return we(r.voiceVolume,o)||(r.voiceVolume=o),o}),x("input",function(){return r.onVoiceVolumeChange()}),g()(),m(127,"div",3)(128,"label",28),b(129),g(),m(130,"input",29),_e("ngModelChange",function(o){return we(r.voiceRate,o)||(r.voiceRate=o),o}),x("input",function(){return r.onVoiceRateChange()}),g()()()()),e&2&&(y(10),be("ngModel",r.selectedTheme),y(4),be("ngModel",r.selectedTheme),y(4),be("ngModel",r.selectedTheme),y(14),j("value",!0),be("ngModel",r.useEnterToSend),y(4),j("value",!1),be("ngModel",r.useEnterToSend),y(8),j("value",!1),be("ngModel",r.hideTechnicalMessages),y(4),j("value",!0),be("ngModel",r.hideTechnicalMessages),y(8),j("value",!0),be("ngModel",r.printTechnicalMessages),y(4),j("value",!1),be("ngModel",r.printTechnicalMessages),y(12),be("ngModel",r.selectedVoiceLanguage),y(),st(r.voiceLanguageOptions),y(7),j("value",!0),be("ngModel",r.voiceAnnounceEnabled),y(4),j("value",!1),be("ngModel",r.voiceAnnounceEnabled),y(8),be("ngModel",r.voiceMode),y(4),be("ngModel",r.voiceMode),y(8),j("value",!0),be("ngModel",r.voiceReadFullText),y(4),j("value",!1),be("ngModel",r.voiceReadFullText),y(6),be("ngModel",r.selectedVoiceId),j("disabled",r.loadingVoices||r.availableVoices.length===0),y(),R(r.loadingVoices?115:-1),y(),R(!r.loadingVoices&&r.availableVoices.length===0?116:-1),y(),st(r.availableVoices),y(8),ke("Volume: ",r.voiceVolume,"%"),y(),be("ngModel",r.voiceVolume),y(3),ke("Speed: ",r.voiceRate,"%"),y(),be("ngModel",r.voiceRate))},dependencies:[bn,vi,yi,fr,ub,hr,il,yn,rn,vn],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}.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}']})};var aj=(n,t)=>t.label,cj=(n,t)=>t.id;function lj(n,t){if(n&1){let e=J();he(0,"button",7),Jn("click",function(){let i=I(e).$implicit,o=w(3);return k(o.selectThread(i.id))}),he(1,"span",8),b(2),pe()()}if(n&2){let e=t.$implicit,r=w(3);le("current",e.id===(r.threads==null?null:r.threads.current)),rs("title",e.name),y(2),Ue(e.name)}}function dj(n,t){if(n&1&&(he(0,"div",3)(1,"div",5),b(2),pe(),ot(3,lj,3,4,"button",6,cj),pe()),n&2){let e=t.$implicit;y(2),Ue(e.label),y(),st(e.threads)}}function uj(n,t){n&1&&(he(0,"div",4),b(1,"No existing threads"),pe())}function fj(n,t){if(n&1&&(he(0,"div",1),ot(1,dj,5,1,"div",3,aj),O(3,uj,2,0,"div",4),pe()),n&2){let e=w();y(),st(e.getGroupedThreads()),y(2),R(e.hasThreadsAvailable()?-1:3)}}function hj(n,t){n&1&&(he(0,"span",9),b(1,"No project selected"),pe())}function pj(n,t){n&1&&(he(0,"span",9),b(1,"Loading..."),pe())}function mj(n,t){if(n&1&&(he(0,"div",2),O(1,hj,2,0,"span",9)(2,pj,2,0,"span",9),pe()),n&2){let e=w();y(),R(e.hasProjectSelected()?2:1)}}var Dh=class n{destroy$=new A;threads=null;projects=null;sessionState=f(bi);codayService=f(Qt);ngOnInit(){this.sessionState.getThreads$().pipe(F(this.destroy$)).subscribe(t=>{console.log("[THREAD-SELECTOR] Threads updated:",t),this.threads=t}),this.sessionState.getProjects$().pipe(F(this.destroy$)).subscribe(t=>{console.log("[THREAD-SELECTOR] Projects updated:",t),this.projects=t})}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete()}selectThread(t){console.log("[THREAD-SELECTOR] Selecting thread:",t),this.codayService.sendMessage(`thread select ${t}`)}createNewThread(){console.log("[THREAD-SELECTOR] Creating new thread"),this.codayService.sendMessage("thread new")}canShowDropdown(){return this.hasProjectSelected()&&this.isThreadManagementAvailable()}isThreadManagementAvailable(){return this.hasProjectSelected()}hasProjectSelected(){return!!this.projects?.current}getAvailableThreads(){return this.threads?.list?[...this.threads.list].sort((t,e)=>new Date(e.modifiedDate).getTime()-new Date(t.modifiedDate).getTime()):[]}getGroupedThreads(){let t=this.getAvailableThreads();if(t.length===0)return[];let e=new Map,r=new Date;r.setHours(0,0,0,0);for(let o of t){let s=new Date(o.modifiedDate);s.setHours(0,0,0,0);let a=r.getTime()-s.getTime(),c=Math.floor(a/(1e3*60*60*24)),l;c===0?l="Today":c===1?l="Yesterday":c<7?l="This Week":c<30?l="This Month":c<90?l="Last 3 Months":l="Older",e.has(l)||e.set(l,[]),e.get(l).push(o)}return["Today","Yesterday","This Week","This Month","Last 3 Months","Older"].filter(o=>e.has(o)).map(o=>({label:o,threads:e.get(o)}))}hasThreadsAvailable(){return!!(this.threads?.list&&this.threads.list.length>0)}getCurrentThreadName(){if(!this.threads?.current||!this.threads?.list)return null;let t=this.threads.list.find(e=>e.id===this.threads.current);return t?t.name:null}formatDate(t){try{let e=new Date(t),i=new Date().getTime()-e.getTime(),o=Math.floor(i/(1e3*60*60*24));return o===0?"Today":o===1?"Yesterday":o<7?`${o} days ago`:e.toLocaleDateString("en-EN",{day:"numeric",month:"short"})}catch{return"No date"}}static \u0275fac=function(e){return new(e||n)};static \u0275cmp=H({type:n,selectors:[["app-thread-selector"]],decls:3,vars:1,consts:[["tabindex","0","role","application","aria-label","Thread selector",1,"thread-selector",3,"click","keydown"],["role","menu","aria-label","Thread selection",1,"thread-list"],[1,"thread-disabled"],[1,"thread-group"],[1,"thread-empty"],[1,"thread-group-header"],["type","button","role","menuitem",1,"thread-item",3,"current","title"],["type","button","role","menuitem",1,"thread-item",3,"click","title"],[1,"thread-name"],[1,"disabled-text"]],template:function(e,r){e&1&&(he(0,"div",0),Jn("click",function(o){return o.stopPropagation()})("keydown",function(o){return o.stopPropagation()}),O(1,fj,4,1,"div",1)(2,mj,3,1,"div",2),pe()),e&2&&(y(),R(r.canShowDropdown()?1:2))},dependencies:[Gt],styles:[".thread-selector[_ngcontent-%COMP%]{display:flex;flex-direction:column;width:100%}.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[_ngcontent-%COMP%]{display:flex;align-items:center;width:100%;padding:.7rem 1rem;background:transparent;border:none;color:var(--color-text);text-align:left;cursor:pointer;transition:background-color .2s ease;gap:.5rem;border-radius:0}.thread-item[_ngcontent-%COMP%]:hover{background:var(--color-bg-hover)}.thread-item[_ngcontent-%COMP%]:active{transform:scale(.98)}.thread-item.current[_ngcontent-%COMP%]{background:var(--color-primary-light);color:var(--color-primary-text);font-weight:600}.thread-item.new-thread-item[_ngcontent-%COMP%]{margin-bottom:.25rem}.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}.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}.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-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}@media (max-width: 768px){.thread-item[_ngcontent-%COMP%]{padding:.6rem .8rem}.thread-name[_ngcontent-%COMP%]{font-size:.8rem}}"]})};function gj(n,t){n&1&&(m(0,"div",5),ie(1,"div",7),m(2,"p"),b(3,"Loading configuration..."),g()())}function vj(n,t){if(n&1&&(m(0,"div",10),b(1),g()),n&2){let e=w(3);y(),ke(" \u274C ",e.errorMessage," ")}}function yj(n,t){if(n&1){let e=J();m(0,"div",6)(1,"textarea",8),_e("ngModelChange",function(i){I(e);let o=w(2);return we(o.jsonContent,i)||(o.jsonContent=i),k(i)}),g(),m(2,"div",9),O(3,vj,2,1,"div",10),g(),m(4,"div",11)(5,"button",12),x("click",function(){I(e);let i=w(2);return k(i.onCancel())}),b(6," Cancel "),g(),m(7,"button",13),x("click",function(){I(e);let i=w(2);return k(i.onSave())}),b(8),g()()()}if(n&2){let e=w(2);y(),be("ngModel",e.jsonContent),y(2),R(e.errorMessage?3:-1),y(2),j("disabled",e.isSaving),y(2),j("disabled",e.isSaving),y(),ke(" ",e.isSaving?"Saving...":"Save"," ")}}function bj(n,t){if(n&1){let e=J();m(0,"div",1),x("click",function(){I(e);let i=w();return k(i.onCancel())})("keyup.escape",function(){I(e);let i=w();return k(i.onCancel())}),m(1,"div",2),x("click",function(i){return I(e),k(i.stopPropagation())})("keydown.enter",function(i){return I(e),k(i.stopPropagation())}),m(2,"div",3)(3,"h2"),b(4),g(),m(5,"button",4),x("click",function(){I(e);let i=w();return k(i.onCancel())}),b(6,"\u2715"),g()(),O(7,gj,4,0,"div",5),O(8,yj,9,5,"div",6),g()()}if(n&2){let e=w();y(4),Ue(e.getTitle()),y(3),R(e.isLoading?7:-1),y(),R(e.isLoading?-1:8)}}var Mh=class n{configType="user";projectName;isOpen=!1;initialContent="";isLoading=!1;isSaving=!1;isOpenChange=new U;save=new U;closeEditor=new U;jsonContent="";errorMessage="";ngOnChanges(){this.initialContent&&(this.jsonContent=this.initialContent)}onSave(){this.errorMessage="";let t;try{t=JSON.parse(this.jsonContent)}catch(e){this.errorMessage=`Invalid JSON syntax: ${e instanceof Error?e.message:"Unknown error"}`;return}this.save.emit(t)}onCancel(){this.errorMessage="",this.closeEditor.emit()}getTitle(){return this.configType==="user"?"User Configuration":`Project Configuration: ${this.projectName||"Unknown"}`}static \u0275fac=function(e){return new(e||n)};static \u0275cmp=H({type:n,selectors:[["app-json-editor"]],inputs:{configType:"configType",projectName:"projectName",isOpen:"isOpen",initialContent:"initialContent",isLoading:"isLoading",isSaving:"isSaving"},outputs:{isOpenChange:"isOpenChange",save:"save",closeEditor:"closeEditor"},features:[Qe],decls:1,vars:1,consts:[["tabindex","0","role","dialog","aria-modal","true","aria-label","JSON Editor",1,"json-editor-overlay"],["tabindex","0","role","dialog","aria-modal","true","aria-label","JSON Editor",1,"json-editor-overlay",3,"click","keyup.escape"],["tabindex","-1",1,"json-editor-modal",3,"click","keydown.enter"],[1,"editor-header"],["title","Close",1,"close-btn",3,"click"],[1,"loading-state"],[1,"editor-content"],[1,"spinner"],["spellcheck","false","placeholder","Enter JSON configuration...",1,"json-textarea",3,"ngModelChange","ngModel"],[1,"messages"],[1,"error-message"],[1,"editor-actions"],[1,"btn","btn-secondary",3,"click","disabled"],[1,"btn","btn-primary",3,"click","disabled"]],template:function(e,r){e&1&&O(0,bj,9,3,"div",0),e&2&&R(r.isOpen?0:-1)},dependencies:[Gt,bn,fr,yn,rn],styles:[".json-editor-overlay[_ngcontent-%COMP%]{position:fixed;inset:0;background:#00000080;display:flex;align-items:center;justify-content:center;z-index:1600;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.json-editor-modal[_ngcontent-%COMP%]{background:var(--color-bg);border-radius:8px;box-shadow:0 4px 20px #0000004d;width:90%;max-width:800px;max-height:90vh;display:flex;flex-direction:column;overflow:hidden}.editor-header[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;padding:1rem 1.5rem;border-bottom:1px solid var(--color-border);background:var(--color-bg-secondary)}.editor-header[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;font-size:1.25rem;font-weight:600;color:var(--color-text)}.editor-header[_ngcontent-%COMP%] .close-btn[_ngcontent-%COMP%]{background:none;border:none;font-size:1.5rem;cursor:pointer;color:var(--color-text-secondary);padding:.25rem .5rem;line-height:1;border-radius:4px;transition:all .2s}.editor-header[_ngcontent-%COMP%] .close-btn[_ngcontent-%COMP%]:hover{background:var(--color-bg-hover);color:var(--color-text)}.loading-state[_ngcontent-%COMP%]{padding:3rem;display:flex;flex-direction:column;align-items:center;gap:1rem;color:var(--color-text-secondary)}.loading-state[_ngcontent-%COMP%] .spinner[_ngcontent-%COMP%]{width:40px;height:40px;border:3px solid var(--color-border);border-top-color:var(--color-primary);border-radius:50%;animation:_ngcontent-%COMP%_spin .8s linear infinite}@keyframes _ngcontent-%COMP%_spin{to{transform:rotate(360deg)}}.editor-content[_ngcontent-%COMP%]{display:flex;flex-direction:column;flex:1;min-height:0;padding:1.5rem;gap:1rem}.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}.messages[_ngcontent-%COMP%]{min-height:2rem;display:flex;flex-direction:column;gap:.5rem}.error-message[_ngcontent-%COMP%], .success-message[_ngcontent-%COMP%]{padding:.75rem 1rem;border-radius:4px;font-size:.875rem;line-height:1.4}.error-message[_ngcontent-%COMP%]{background:#dc26261a;color:#dc2626;border:1px solid rgba(220,38,38,.3)}.success-message[_ngcontent-%COMP%]{background:#22c55e1a;color:#22c55e;border:1px solid rgba(34,197,94,.3)}.editor-actions[_ngcontent-%COMP%]{display:flex;justify-content:flex-end;gap:.75rem;padding-top:.5rem;border-top:1px solid var(--color-border)}.btn[_ngcontent-%COMP%]{padding:.625rem 1.25rem;border:none;border-radius:4px;font-size:.875rem;font-weight:500;cursor:pointer;transition:all .2s}.btn[_ngcontent-%COMP%]:disabled{opacity:.5;cursor:not-allowed}.btn-secondary[_ngcontent-%COMP%]{background:var(--color-bg-secondary);color:var(--color-text);border:1px solid var(--color-border)}.btn-secondary[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--color-bg-hover)}.btn-primary[_ngcontent-%COMP%]{background:var(--color-primary);color:#fff}.btn-primary[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--color-primary-hover)}@media (max-width: 768px){.json-editor-modal[_ngcontent-%COMP%]{width:95%;max-height:95vh}.editor-content[_ngcontent-%COMP%]{padding:1rem}.json-textarea[_ngcontent-%COMP%]{min-height:250px;max-height:70vh;font-size:.8125rem}}"]})};var _j=(n,t)=>t.uuid;function Cj(n,t){n&1&&(he(0,"div",3),In(1,"div",7),he(2,"p"),b(3,"Loading webhooks..."),pe()())}function wj(n,t){if(n&1&&(he(0,"div",4)(1,"p"),b(2),pe()()),n&2){let e=w();y(2),ke("\u274C ",e.errorMessage)}}function Ej(n,t){n&1&&(he(0,"div",5)(1,"p"),b(2,"No webhooks configured yet."),pe(),he(3,"p",8),b(4,"Create your first webhook to enable programmatic AI interactions."),pe()())}function Sj(n,t){if(n&1){let e=J();he(0,"tr")(1,"td",9),b(2),pe(),he(3,"td",10),b(4),pe(),he(5,"td",11)(6,"span",12),b(7),pe()(),he(8,"td",13)(9,"div",14)(10,"span",15),b(11),pe(),he(12,"span",16),b(13),pe()()(),he(14,"td",17)(15,"button",18),Jn("click",function(){let i=I(e).$implicit,o=w(2);return k(o.onCopyUrl(i))}),b(16," \u{1F4CB} "),pe(),he(17,"button",19),Jn("click",function(){let i=I(e).$implicit,o=w(2);return k(o.onEditClick(i))}),b(18," \u270F\uFE0F "),pe(),he(19,"button",20),Jn("click",function(){let i=I(e).$implicit,o=w(2);return k(o.onDeleteClick(i))}),b(20," \u{1F5D1}\uFE0F "),pe()()()}if(n&2){let e=t.$implicit,r=w(2);y(2),Ue(e.name),y(2),Ue(e.project),y(2),le("type-free",e.commandType==="free")("type-template",e.commandType==="template"),y(),ke(" ",r.getCommandTypeLabel(e.commandType)," "),y(4),Ue(r.formatDate(e.createdAt)),y(2),ke("by ",e.createdBy)}}function Dj(n,t){if(n&1&&(he(0,"div",6)(1,"table")(2,"thead")(3,"tr")(4,"th"),b(5,"Name"),pe(),he(6,"th"),b(7,"Project"),pe(),he(8,"th"),b(9,"Type"),pe(),he(10,"th"),b(11,"Created"),pe(),he(12,"th"),b(13,"Actions"),pe()()(),he(14,"tbody"),ot(15,Sj,21,9,"tr",null,_j),pe()()()),n&2){let e=w();y(15),st(e.webhooks)}}var Th=class n{set webhooks(t){console.log("[WEBHOOK-LIST] Received webhooks:",t),this._webhooks=t}get webhooks(){return this._webhooks}_webhooks=[];isLoading=!1;errorMessage="";create=new U;edit=new U;deleteWebhook=new U;copyUrl=new U;onCreateClick(){this.create.emit()}onEditClick(t){this.edit.emit(t)}onDeleteClick(t){this.deleteWebhook.emit(t)}onCopyUrl(t){let e=`${window.location.origin}/api/webhook/${t.uuid}`;navigator.clipboard.writeText(e).then(()=>{this.copyUrl.emit(e)}).catch(r=>{console.error("Failed to copy URL:",r)})}formatDate(t){let e=typeof t=="string"?new Date(t):t;return e.toLocaleDateString()+" "+e.toLocaleTimeString()}getCommandTypeLabel(t){if(!t)return console.warn("[WEBHOOK-LIST] commandType is missing!",t),"Unknown";let e=t==="free"?"Free Form":"Template";return console.log("[WEBHOOK-LIST] getCommandTypeLabel called with:",t,"\u2192",e),e}static \u0275fac=function(e){return new(e||n)};static \u0275cmp=H({type:n,selectors:[["app-webhook-list"]],inputs:{webhooks:"webhooks",isLoading:"isLoading",errorMessage:"errorMessage"},outputs:{create:"create",edit:"edit",deleteWebhook:"deleteWebhook",copyUrl:"copyUrl"},decls:10,vars:5,consts:[[1,"webhook-list-container"],[1,"list-header"],[1,"btn-create",3,"click","disabled"],[1,"loading-state"],[1,"error-state"],[1,"empty-state"],[1,"webhook-table"],[1,"spinner"],[1,"hint"],[1,"name-cell"],[1,"project-cell"],[1,"type-cell"],[1,"type-badge"],[1,"date-cell"],[1,"date-info"],[1,"date"],[1,"creator"],[1,"actions-cell"],["title","Copy webhook URL",1,"btn-action","btn-copy",3,"click"],["title","Edit webhook",1,"btn-action","btn-edit",3,"click"],["title","Delete webhook",1,"btn-action","btn-delete",3,"click"]],template:function(e,r){e&1&&(he(0,"div",0)(1,"div",1)(2,"h2"),b(3,"Webhooks"),pe(),he(4,"button",2),Jn("click",function(){return r.onCreateClick()}),b(5," \u2795 New Webhook "),pe()(),O(6,Cj,4,0,"div",3),O(7,wj,3,1,"div",4),O(8,Ej,5,0,"div",5),O(9,Dj,17,0,"div",6),pe()),e&2&&(y(4),rs("disabled",r.isLoading),y(2),R(r.isLoading?6:-1),y(),R(r.errorMessage&&!r.isLoading?7:-1),y(),R(!r.isLoading&&!r.errorMessage&&r.webhooks.length===0?8:-1),y(),R(!r.isLoading&&!r.errorMessage&&r.webhooks.length>0?9:-1))},dependencies:[Gt],styles:[".webhook-list-container[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:1rem;padding:1rem;min-height:400px}.list-header[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;margin-bottom:1rem}.list-header[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;font-size:1.5rem;color:var(--color-text)}.btn-create[_ngcontent-%COMP%]{padding:.5rem 1rem;background:var(--color-primary);color:#fff;border:none;border-radius:4px;cursor:pointer;font-size:.9rem;transition:background .2s}.btn-create[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--color-primary-hover)}.btn-create[_ngcontent-%COMP%]:disabled{opacity:.5;cursor:not-allowed}.loading-state[_ngcontent-%COMP%], .error-state[_ngcontent-%COMP%], .empty-state[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:3rem 1rem;text-align:center;color:var(--color-text-secondary)}.loading-state[_ngcontent-%COMP%] .spinner[_ngcontent-%COMP%]{width:40px;height:40px;border:4px solid var(--color-border);border-top-color:var(--color-primary);border-radius:50%;animation:_ngcontent-%COMP%_spin 1s linear infinite;margin-bottom:1rem}@keyframes _ngcontent-%COMP%_spin{to{transform:rotate(360deg)}}.error-state[_ngcontent-%COMP%]{color:var(--color-error)}.empty-state[_ngcontent-%COMP%] .hint[_ngcontent-%COMP%]{font-size:.9rem;margin-top:.5rem}.webhook-table[_ngcontent-%COMP%]{overflow-x:auto}.webhook-table[_ngcontent-%COMP%] table[_ngcontent-%COMP%]{width:100%;border-collapse:collapse;background:var(--color-bg);border:1px solid var(--color-border);border-radius:4px}.webhook-table[_ngcontent-%COMP%] thead[_ngcontent-%COMP%]{background:var(--color-bg-hover)}.webhook-table[_ngcontent-%COMP%] thead[_ngcontent-%COMP%] th[_ngcontent-%COMP%]{padding:.75rem;text-align:left;font-weight:600;color:var(--color-text);border-bottom:2px solid var(--color-border);font-size:.9rem}.webhook-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]{border-bottom:1px solid var(--color-border);transition:background .2s}.webhook-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:hover{background:var(--color-bg-hover)}.webhook-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:last-child{border-bottom:none}.webhook-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] td[_ngcontent-%COMP%]{padding:.75rem;color:var(--color-text);font-size:.9rem}.webhook-table[_ngcontent-%COMP%] .name-cell[_ngcontent-%COMP%]{font-weight:500;max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.webhook-table[_ngcontent-%COMP%] .project-cell[_ngcontent-%COMP%]{color:var(--color-text-secondary)}.webhook-table[_ngcontent-%COMP%] .type-cell[_ngcontent-%COMP%]{min-width:100px}.webhook-table[_ngcontent-%COMP%] .type-cell[_ngcontent-%COMP%] .type-badge[_ngcontent-%COMP%]{display:inline-block;padding:.25rem .5rem;border-radius:12px;font-size:.75rem;font-weight:500}.webhook-table[_ngcontent-%COMP%] .type-cell[_ngcontent-%COMP%] .type-badge.type-free[_ngcontent-%COMP%]{background:var(--color-info);color:var(--color-text)}.webhook-table[_ngcontent-%COMP%] .type-cell[_ngcontent-%COMP%] .type-badge.type-template[_ngcontent-%COMP%]{background:var(--color-primary);color:#fff}.webhook-table[_ngcontent-%COMP%] .date-cell[_ngcontent-%COMP%] .date-info[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.25rem}.webhook-table[_ngcontent-%COMP%] .date-cell[_ngcontent-%COMP%] .date-info[_ngcontent-%COMP%] .date[_ngcontent-%COMP%]{font-size:.85rem}.webhook-table[_ngcontent-%COMP%] .date-cell[_ngcontent-%COMP%] .date-info[_ngcontent-%COMP%] .creator[_ngcontent-%COMP%]{font-size:.75rem;color:var(--color-text-secondary)}.webhook-table[_ngcontent-%COMP%] .actions-cell[_ngcontent-%COMP%]{text-align:right;white-space:nowrap}.webhook-table[_ngcontent-%COMP%] .btn-action[_ngcontent-%COMP%]{display:inline-block;padding:.4rem .6rem;margin-left:.25rem;background:transparent;border:1px solid var(--color-border);border-radius:4px;cursor:pointer;font-size:1rem;transition:all .2s}.webhook-table[_ngcontent-%COMP%] .btn-action[_ngcontent-%COMP%]:hover{background:var(--color-bg-hover);transform:scale(1.1)}.webhook-table[_ngcontent-%COMP%] .btn-action.btn-copy[_ngcontent-%COMP%]:hover, .webhook-table[_ngcontent-%COMP%] .btn-action.btn-edit[_ngcontent-%COMP%]:hover{border-color:var(--color-primary)}.webhook-table[_ngcontent-%COMP%] .btn-action.btn-delete[_ngcontent-%COMP%]:hover{border-color:var(--color-error)}@media (max-width: 768px){.webhook-table[_ngcontent-%COMP%] table[_ngcontent-%COMP%]{font-size:.8rem}.webhook-table[_ngcontent-%COMP%] .name-cell[_ngcontent-%COMP%]{max-width:120px}.webhook-table[_ngcontent-%COMP%] .date-info[_ngcontent-%COMP%] .date[_ngcontent-%COMP%]{font-size:.75rem}.webhook-table[_ngcontent-%COMP%] .date-info[_ngcontent-%COMP%] .creator[_ngcontent-%COMP%]{display:none}}"]})};function Mj(n,t){if(n&1&&(m(0,"div",1),b(1),g()),n&2){let e=w();y(),ke("\u274C ",e.errorMessage)}}function Tj(n,t){if(n&1){let e=J();m(0,"input",20),_e("ngModelChange",function(i){I(e);let o=w();return we(o.project,i)||(o.project=i),k(i)}),g()}if(n&2){let e=w();be("ngModel",e.project),j("disabled",e.isSaving)}}function xj(n,t){if(n&1&&(m(0,"option",23),b(1),g()),n&2){let e=t.$implicit;j("value",e),y(),Ue(e)}}function Ij(n,t){if(n&1){let e=J();m(0,"select",21),_e("ngModelChange",function(i){I(e);let o=w();return we(o.project,i)||(o.project=i),k(i)}),m(1,"option",22),b(2,"Select a project..."),g(),ot(3,xj,2,2,"option",23,Vg),g()}if(n&2){let e=w();be("ngModel",e.project),j("disabled",e.isSaving),y(3),st(e.availableProjects)}}function kj(n,t){if(n&1){let e=J();m(0,"div",3)(1,"label",24),b(2,"Commands *"),g(),m(3,"textarea",25),_e("ngModelChange",function(i){I(e);let o=w();return we(o.commands,i)||(o.commands=i),k(i)}),g(),m(4,"small",6),b(5," One command per line. Use double braces around placeholder names for dynamic values. "),g()()}if(n&2){let e=w();y(3),be("ngModel",e.commands),j("disabled",e.isSaving)}}function Aj(n,t){n&1&&(m(0,"div",16)(1,"p")(2,"strong"),b(3,"\u2139\uFE0F Free Form Webhook"),g(),ie(4,"br"),b(5," Callers will provide prompts in the request body using the "),m(6,"code"),b(7,"prompts"),g(),b(8," array field. "),g()())}var xh=class n{webhook;isSaving=!1;availableProjects=[];save=new U;cancelForm=new U;name="";project="";commandType="template";commands="";errorMessage="";get isEditMode(){return!!this.webhook}get formTitle(){return this.isEditMode?"Edit Webhook":"Create Webhook"}ngOnChanges(t){t.webhook&&this.webhook&&(this.name=this.webhook.name,this.project=this.webhook.project,this.commandType=this.webhook.commandType,this.commands=this.webhook.commands?.join(`
|
|
105
105
|
`)??"")}onCommandTypeChange(){this.commandType==="free"&&(this.commands="")}onSave(){if(this.errorMessage="",!this.name.trim()){this.errorMessage="Webhook name is required";return}if(!this.project.trim()){this.errorMessage="Project is required";return}if(this.commandType==="template"&&this.commands.trim().split(`
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@whoz-oss/coday-web",
|
|
3
|
-
"version": "0.29.
|
|
3
|
+
"version": "0.29.5",
|
|
4
4
|
"repository": "https://github.com/whoz-oss/coday",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "server/server.js",
|
|
@@ -8,8 +8,8 @@
|
|
|
8
8
|
"coday-web": "./bin.js"
|
|
9
9
|
},
|
|
10
10
|
"dependencies": {
|
|
11
|
-
"@whoz-oss/coday-client": "0.29.
|
|
12
|
-
"@whoz-oss/coday-server": "0.29.
|
|
11
|
+
"@whoz-oss/coday-client": "0.29.5",
|
|
12
|
+
"@whoz-oss/coday-server": "0.29.5"
|
|
13
13
|
},
|
|
14
14
|
"publishConfig": {
|
|
15
15
|
"access": "public"
|