@mbubela/oaa-assistant 0.0.5 → 0.0.6

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.
@@ -20,8 +20,8 @@ ${t.map((n,r)=>`${r+1}) ${n.toString()}`).join(`
20
20
  <path d="M21 21l-4.35-4.35" stroke="currentColor" stroke-width="2" stroke-linecap="round"/>`},edit:{viewBox:"0 0 24 24",path:`<path d="M11 4H4a2 2 0 00-2 2v14a2 2 0 002 2h14a2 2 0 002-2v-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" fill="none"/>
21
21
  <path d="M18.5 2.5a2.121 2.121 0 013 3L12 15l-4 1 1-4 9.5-9.5z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" fill="none"/>`},check:{viewBox:"0 0 24 24",path:'<polyline points="20 6 9 17 4 12" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" fill="none"/>'},"chevron-left":{viewBox:"0 0 24 24",path:'<polyline points="15 18 9 12 15 6" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" fill="none"/>'},"more-horizontal":{viewBox:"0 0 24 24",path:`<circle cx="12" cy="12" r="1.5" fill="currentColor"/>
22
22
  <circle cx="19" cy="12" r="1.5" fill="currentColor"/>
23
- <circle cx="5" cy="12" r="1.5" fill="currentColor"/>`}},ln=class Hs{constructor(t){this.sanitizer=t}name="";width="24";height="24";fill="none";dropShadow="";get viewBox(){return Nl[this.name]?.viewBox||"0 0 24 24"}get svgContent(){let t=Nl[this.name];if(!t)return"";let n=t.path+(t.defs||"");return this.sanitizer.bypassSecurityTrustHtml(n)}static \u0275fac=function(t){return new(t||Hs)(j(Gh))};static \u0275cmp=Me({type:Hs,selectors:[["app-icon"]],inputs:{name:"name",width:"width",height:"height",fill:"fill",dropShadow:"dropShadow"},decls:1,vars:7,consts:[["xmlns","http://www.w3.org/2000/svg",3,"innerHTML"]],template:function(t,n){t&1&&(Gg(),oh(0,"svg",0)),t&2&&(fh("filter",n.dropShadow),ch("innerHTML",n.svgContent,fd),Ko("width",n.width)("height",n.height)("viewBox",n.viewBox)("fill",n.fill))},dependencies:[Ce],styles:["[_nghost-%COMP%]{display:inline-block;line-height:0}"]})},Be={TITLE:"App Agent",WELCOME:{GREETING:"Hi!",TEXT:"Welcome to Open as App!",DESCRIPTION:"I'm your AI assistant, and I'm here to help you get started.",PERSONALIZATION:"To personalize my guidance, could you tell me what you're hoping to do?"},INPUT:{PLACEHOLDER:"Ask me anything..."},SUGGESTIONS:["Summarize data","What are the key columns","What is this app about"]},_w=class zs{title=Be.TITLE;menuClick=new R;closeClick=new R;onMenuClick(){this.menuClick.emit()}onCloseClick(){this.closeClick.emit()}static \u0275fac=function(t){return new(t||zs)};static \u0275cmp=Me({type:zs,selectors:[["app-header"]],inputs:{title:"title"},outputs:{menuClick:"menuClick",closeClick:"closeClick"},decls:9,vars:1,consts:[[1,"header"],["aria-label","Menu",1,"icon-button","menu-button",3,"click"],["name","menu","width","24","height","24"],[1,"header-title"],["name","sparkle","width","24","height","24",1,"title-icon"],["aria-label","Close",1,"icon-button","close-button",3,"click"],["name","close","width","24","height","24"]],template:function(t,n){t&1&&(g(0,"div",0)(1,"button",1),T("click",function(){return n.onMenuClick()}),U(2,"app-icon",2),y(),g(3,"div",3),U(4,"app-icon",4),g(5,"span"),F(6),y()(),g(7,"button",5),T("click",function(){return n.onCloseClick()}),U(8,"app-icon",6),y()()),t&2&&(S(6),Oe(n.title))},dependencies:[Ce,ln],styles:[".header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;background:#fff;border-bottom:1px solid #f0f0f0;height:64px;box-sizing:border-box}.icon-button[_ngcontent-%COMP%]{background:none;border:none;cursor:pointer;padding:8px;display:flex;align-items:center;justify-content:center;border-radius:8px;transition:background-color .2s;color:#333}.icon-button[_ngcontent-%COMP%]:hover{background-color:#f5f5f5}.icon-button[_ngcontent-%COMP%]:active{background-color:#e0e0e0}.header-title[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;font-size:20px;font-weight:600;color:#ff6b6b;flex:1;justify-content:center}.title-icon[_ngcontent-%COMP%]{width:24px;height:24px}.menu-button[_ngcontent-%COMP%], .close-button[_ngcontent-%COMP%]{width:40px;height:40px}.close-button[_ngcontent-%COMP%]{background-color:#f5f5f5;border-radius:50%}.close-button[_ngcontent-%COMP%]:hover{background-color:#e8e8e8}"]})},xw=class Bs{text="";disabled=!1;buttonClick=new R;onClick(){this.disabled||this.buttonClick.emit(this.text)}static \u0275fac=function(t){return new(t||Bs)};static \u0275cmp=Me({type:Bs,selectors:[["app-suggestion-button"]],inputs:{text:"text",disabled:"disabled"},outputs:{buttonClick:"buttonClick"},decls:2,vars:3,consts:[[1,"suggestion-button",3,"click"]],template:function(t,n){t&1&&(Xo(0,"button",0),dh("click",function(){return n.onClick()}),F(1),ea()),t&2&&(Ee("disabled",n.disabled),S(),Vn(" ",n.text," "))},dependencies:[Ce],styles:[".suggestion-button[_ngcontent-%COMP%]{background:#fff;border:1.5px solid #FF6B6B;border-radius:8px;padding:14px 24px;font-size:15px;font-weight:500;color:#ff6b6b;cursor:pointer;transition:all .2s ease;white-space:nowrap;box-shadow:0 2px 4px #0000000d;display:inline-block;width:auto;text-align:center}.suggestion-button[_ngcontent-%COMP%]:hover:not(.disabled){background:#fff5f5;border-color:#ff5252;transform:translateY(-1px);box-shadow:0 4px 8px #ff6b6b26}.suggestion-button[_ngcontent-%COMP%]:active:not(.disabled){transform:translateY(0);box-shadow:0 2px 4px #0000000d}.suggestion-button.disabled[_ngcontent-%COMP%]{opacity:.5;cursor:not-allowed}"]})},Qh=(()=>{class e{_renderer;_elementRef;onChange=n=>{};onTouched=()=>{};constructor(n,r){this._renderer=n,this._elementRef=r}setProperty(n,r){this._renderer.setProperty(this._elementRef.nativeElement,n,r)}registerOnTouched(n){this.onTouched=n}registerOnChange(n){this.onChange=n}setDisabledState(n){this.setProperty("disabled",n)}static \u0275fac=function(n){return new(n||e)(j(zd),j(tn))};static \u0275dir=Ie({type:e})}return e})(),kw=(()=>{class e extends Qh{static \u0275fac=(()=>{let n;return function(r){return(n||(n=zc(e)))(r||e)}})();static \u0275dir=Ie({type:e,features:[sn]})}return e})(),Yh=new k(""),Sw={provide:Yh,useExisting:Nn(()=>Zn),multi:!0};function Ow(){let e=Kr()?Kr().getUserAgent():"";return/android (\d+)/.test(e.toLowerCase())}var Ew=new k(""),Zn=(()=>{class e extends Qh{_compositionMode;_composing=!1;constructor(n,r,i){super(n,r),this._compositionMode=i,this._compositionMode==null&&(this._compositionMode=!Ow())}writeValue(n){let r=n??"";this.setProperty("value",r)}_handleInput(n){(!this._compositionMode||this._compositionMode&&!this._composing)&&this.onChange(n)}_compositionStart(){this._composing=!0}_compositionEnd(n){this._composing=!1,this._compositionMode&&this.onChange(n)}static \u0275fac=function(n){return new(n||e)(j(zd),j(tn),j(Ew,8))};static \u0275dir=Ie({type:e,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(n,r){n&1&&T("input",function(i){return r._handleInput(i.target.value)})("blur",function(){return r.onTouched()})("compositionstart",function(){return r._compositionStart()})("compositionend",function(i){return r._compositionEnd(i.target.value)})},standalone:!1,features:[ra([Sw]),sn]})}return e})();function Tw(e){return e==null?null:Array.isArray(e)||typeof e=="string"?e.length:e instanceof Set?e.size:null}var Jh=new k(""),Mw=new k("");function Iw(e){return t=>{let n=t.value?.length??Tw(t.value);return n!==null&&n>e?{maxlength:{requiredLength:e,actualLength:n}}:null}}function Rl(e){return null}function Kh(e){return e!=null}function Xh(e){return Jo(e)?ao(e):e}function ef(e){let t={};return e.forEach(n=>{t=n!=null?M(M({},t),n):t}),Object.keys(t).length===0?null:t}function tf(e,t){return t.map(n=>n(e))}function Pw(e){return!e.validate}function nf(e){return e.map(t=>Pw(t)?t:n=>t.validate(n))}function Dw(e){if(!e)return null;let t=e.filter(Kh);return t.length==0?null:function(n){return ef(tf(n,t))}}function rf(e){return e!=null?Dw(nf(e)):null}function Aw(e){if(!e)return null;let t=e.filter(Kh);return t.length==0?null:function(n){let r=tf(n,t).map(Xh);return Hp(r).pipe(ke(ef))}}function sf(e){return e!=null?Aw(nf(e)):null}function Fl(e,t){return e===null?[t]:Array.isArray(e)?[...e,t]:[e,t]}function Vw(e){return e._rawValidators}function Nw(e){return e._rawAsyncValidators}function Us(e){return e?Array.isArray(e)?e:[e]:[]}function ei(e,t){return Array.isArray(e)?e.includes(t):e===t}function Ll(e,t){let n=Us(t);return Us(e).forEach(r=>{ei(n,r)||n.push(r)}),n}function jl(e,t){return Us(t).filter(n=>!ei(e,n))}var of=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(e){this._rawValidators=e||[],this._composedValidatorFn=rf(this._rawValidators)}_setAsyncValidators(e){this._rawAsyncValidators=e||[],this._composedAsyncValidatorFn=sf(this._rawAsyncValidators)}get validator(){return this._composedValidatorFn||null}get asyncValidator(){return this._composedAsyncValidatorFn||null}_onDestroyCallbacks=[];_registerOnDestroy(e){this._onDestroyCallbacks.push(e)}_invokeOnDestroyCallbacks(){this._onDestroyCallbacks.forEach(e=>e()),this._onDestroyCallbacks=[]}reset(e=void 0){this.control&&this.control.reset(e)}hasError(e,t){return this.control?this.control.hasError(e,t):!1}getError(e,t){return this.control?this.control.getError(e,t):null}},Rw=class extends of{name;get formDirective(){return null}get path(){return null}},da=class extends of{_parent=null;name=null;valueAccessor=null},Fw=class{_cd;constructor(e){this._cd=e}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}},Lw={"[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"},q_=N(M({},Lw),{"[class.ng-submitted]":"isSubmitted"}),ha=(()=>{class e extends Fw{constructor(n){super(n)}static \u0275fac=function(n){return new(n||e)(j(da,2))};static \u0275dir=Ie({type:e,selectors:[["","formControlName",""],["","ngModel",""],["","formControl",""]],hostVars:14,hostBindings:function(n,r){n&2&&Ee("ng-untouched",r.isUntouched)("ng-touched",r.isTouched)("ng-pristine",r.isPristine)("ng-dirty",r.isDirty)("ng-valid",r.isValid)("ng-invalid",r.isInvalid)("ng-pending",r.isPending)},standalone:!1,features:[sn]})}return e})(),hn="VALID",ar="INVALID",Mt="PENDING",fn="DISABLED",qn=class{},Hl=class extends qn{value;source;constructor(e,t){super(),this.value=e,this.source=t}},ns=class extends qn{pristine;source;constructor(e,t){super(),this.pristine=e,this.source=t}},rs=class extends qn{touched;source;constructor(e,t){super(),this.touched=e,this.source=t}},lr=class extends qn{status;source;constructor(e,t){super(),this.status=e,this.source=t}},jw=class extends qn{source;constructor(e){super(),this.source=e}};function Hw(e){return(ki(e)?e.validators:e)||null}function zw(e){return Array.isArray(e)?rf(e):e||null}function Bw(e,t){return(ki(t)?t.asyncValidators:e)||null}function Uw(e){return Array.isArray(e)?sf(e):e||null}function ki(e){return e!=null&&!Array.isArray(e)&&typeof e=="object"}var $w=class{_pendingDirty=!1;_hasOwnPendingAsyncValidator=null;_pendingTouched=!1;_onCollectionChange=()=>{};_updateOn;_parent=null;_asyncValidationSubscription;_composedValidatorFn;_composedAsyncValidatorFn;_rawValidators;_rawAsyncValidators;value;constructor(e,t){this._assignValidators(e),this._assignAsyncValidators(t)}get validator(){return this._composedValidatorFn}set validator(e){this._rawValidators=this._composedValidatorFn=e}get asyncValidator(){return this._composedAsyncValidatorFn}set asyncValidator(e){this._rawAsyncValidators=this._composedAsyncValidatorFn=e}get parent(){return this._parent}get status(){return Tt(this.statusReactive)}set status(e){Tt(()=>this.statusReactive.set(e))}_status=Rt(()=>this.statusReactive());statusReactive=ue(void 0);get valid(){return this.status===hn}get invalid(){return this.status===ar}get pending(){return this.status==Mt}get disabled(){return this.status===fn}get enabled(){return this.status!==fn}errors;get pristine(){return Tt(this.pristineReactive)}set pristine(e){Tt(()=>this.pristineReactive.set(e))}_pristine=Rt(()=>this.pristineReactive());pristineReactive=ue(!0);get dirty(){return!this.pristine}get touched(){return Tt(this.touchedReactive)}set touched(e){Tt(()=>this.touchedReactive.set(e))}_touched=Rt(()=>this.touchedReactive());touchedReactive=ue(!1);get untouched(){return!this.touched}_events=new st;events=this._events.asObservable();valueChanges;statusChanges;get updateOn(){return this._updateOn?this._updateOn:this.parent?this.parent.updateOn:"change"}setValidators(e){this._assignValidators(e)}setAsyncValidators(e){this._assignAsyncValidators(e)}addValidators(e){this.setValidators(Ll(e,this._rawValidators))}addAsyncValidators(e){this.setAsyncValidators(Ll(e,this._rawAsyncValidators))}removeValidators(e){this.setValidators(jl(e,this._rawValidators))}removeAsyncValidators(e){this.setAsyncValidators(jl(e,this._rawAsyncValidators))}hasValidator(e){return ei(this._rawValidators,e)}hasAsyncValidator(e){return ei(this._rawAsyncValidators,e)}clearValidators(){this.validator=null}clearAsyncValidators(){this.asyncValidator=null}markAsTouched(e={}){let t=this.touched===!1;this.touched=!0;let n=e.sourceControl??this;this._parent&&!e.onlySelf&&this._parent.markAsTouched(N(M({},e),{sourceControl:n})),t&&e.emitEvent!==!1&&this._events.next(new rs(!0,n))}markAllAsDirty(e={}){this.markAsDirty({onlySelf:!0,emitEvent:e.emitEvent,sourceControl:this}),this._forEachChild(t=>t.markAllAsDirty(e))}markAllAsTouched(e={}){this.markAsTouched({onlySelf:!0,emitEvent:e.emitEvent,sourceControl:this}),this._forEachChild(t=>t.markAllAsTouched(e))}markAsUntouched(e={}){let t=this.touched===!0;this.touched=!1,this._pendingTouched=!1;let n=e.sourceControl??this;this._forEachChild(r=>{r.markAsUntouched({onlySelf:!0,emitEvent:e.emitEvent,sourceControl:n})}),this._parent&&!e.onlySelf&&this._parent._updateTouched(e,n),t&&e.emitEvent!==!1&&this._events.next(new rs(!1,n))}markAsDirty(e={}){let t=this.pristine===!0;this.pristine=!1;let n=e.sourceControl??this;this._parent&&!e.onlySelf&&this._parent.markAsDirty(N(M({},e),{sourceControl:n})),t&&e.emitEvent!==!1&&this._events.next(new ns(!1,n))}markAsPristine(e={}){let t=this.pristine===!1;this.pristine=!0,this._pendingDirty=!1;let n=e.sourceControl??this;this._forEachChild(r=>{r.markAsPristine({onlySelf:!0,emitEvent:e.emitEvent})}),this._parent&&!e.onlySelf&&this._parent._updatePristine(e,n),t&&e.emitEvent!==!1&&this._events.next(new ns(!0,n))}markAsPending(e={}){this.status=Mt;let t=e.sourceControl??this;e.emitEvent!==!1&&(this._events.next(new lr(this.status,t)),this.statusChanges.emit(this.status)),this._parent&&!e.onlySelf&&this._parent.markAsPending(N(M({},e),{sourceControl:t}))}disable(e={}){let t=this._parentMarkedDirty(e.onlySelf);this.status=fn,this.errors=null,this._forEachChild(r=>{r.disable(N(M({},e),{onlySelf:!0}))}),this._updateValue();let n=e.sourceControl??this;e.emitEvent!==!1&&(this._events.next(new Hl(this.value,n)),this._events.next(new lr(this.status,n)),this.valueChanges.emit(this.value),this.statusChanges.emit(this.status)),this._updateAncestors(N(M({},e),{skipPristineCheck:t}),this),this._onDisabledChange.forEach(r=>r(!0))}enable(e={}){let t=this._parentMarkedDirty(e.onlySelf);this.status=hn,this._forEachChild(n=>{n.enable(N(M({},e),{onlySelf:!0}))}),this.updateValueAndValidity({onlySelf:!0,emitEvent:e.emitEvent}),this._updateAncestors(N(M({},e),{skipPristineCheck:t}),this),this._onDisabledChange.forEach(n=>n(!1))}_updateAncestors(e,t){this._parent&&!e.onlySelf&&(this._parent.updateValueAndValidity(e),e.skipPristineCheck||this._parent._updatePristine({},t),this._parent._updateTouched({},t))}setParent(e){this._parent=e}getRawValue(){return this.value}updateValueAndValidity(e={}){if(this._setInitialStatus(),this._updateValue(),this.enabled){let n=this._cancelExistingSubscription();this.errors=this._runValidator(),this.status=this._calculateStatus(),(this.status===hn||this.status===Mt)&&this._runAsyncValidator(n,e.emitEvent)}let t=e.sourceControl??this;e.emitEvent!==!1&&(this._events.next(new Hl(this.value,t)),this._events.next(new lr(this.status,t)),this.valueChanges.emit(this.value),this.statusChanges.emit(this.status)),this._parent&&!e.onlySelf&&this._parent.updateValueAndValidity(N(M({},e),{sourceControl:t}))}_updateTreeValidity(e={emitEvent:!0}){this._forEachChild(t=>t._updateTreeValidity(e)),this.updateValueAndValidity({onlySelf:!0,emitEvent:e.emitEvent})}_setInitialStatus(){this.status=this._allControlsDisabled()?fn:hn}_runValidator(){return this.validator?this.validator(this):null}_runAsyncValidator(e,t){if(this.asyncValidator){this.status=Mt,this._hasOwnPendingAsyncValidator={emitEvent:t!==!1,shouldHaveEmitted:e!==!1};let n=Xh(this.asyncValidator(this));this._asyncValidationSubscription=n.subscribe(r=>{this._hasOwnPendingAsyncValidator=null,this.setErrors(r,{emitEvent:t,shouldHaveEmitted:e})})}}_cancelExistingSubscription(){if(this._asyncValidationSubscription){this._asyncValidationSubscription.unsubscribe();let e=(this._hasOwnPendingAsyncValidator?.emitEvent||this._hasOwnPendingAsyncValidator?.shouldHaveEmitted)??!1;return this._hasOwnPendingAsyncValidator=null,e}return!1}setErrors(e,t={}){this.errors=e,this._updateControlsErrors(t.emitEvent!==!1,this,t.shouldHaveEmitted)}get(e){let t=e;return t==null||(Array.isArray(t)||(t=t.split(".")),t.length===0)?null:t.reduce((n,r)=>n&&n._find(r),this)}getError(e,t){let n=t?this.get(t):this;return n&&n.errors?n.errors[e]:null}hasError(e,t){return!!this.getError(e,t)}get root(){let e=this;for(;e._parent;)e=e._parent;return e}_updateControlsErrors(e,t,n){this.status=this._calculateStatus(),e&&this.statusChanges.emit(this.status),(e||n)&&this._events.next(new lr(this.status,t)),this._parent&&this._parent._updateControlsErrors(e,t,n)}_initObservables(){this.valueChanges=new R,this.statusChanges=new R}_calculateStatus(){return this._allControlsDisabled()?fn:this.errors?ar:this._hasOwnPendingAsyncValidator||this._anyControlsHaveStatus(Mt)?Mt:this._anyControlsHaveStatus(ar)?ar:hn}_anyControlsHaveStatus(e){return this._anyControls(t=>t.status===e)}_anyControlsDirty(){return this._anyControls(e=>e.dirty)}_anyControlsTouched(){return this._anyControls(e=>e.touched)}_updatePristine(e,t){let n=!this._anyControlsDirty(),r=this.pristine!==n;this.pristine=n,this._parent&&!e.onlySelf&&this._parent._updatePristine(e,t),r&&this._events.next(new ns(this.pristine,t))}_updateTouched(e={},t){this.touched=this._anyControlsTouched(),this._events.next(new rs(this.touched,t)),this._parent&&!e.onlySelf&&this._parent._updateTouched(e,t)}_onDisabledChange=[];_registerOnCollectionChange(e){this._onCollectionChange=e}_setUpdateStrategy(e){ki(e)&&e.updateOn!=null&&(this._updateOn=e.updateOn)}_parentMarkedDirty(e){let t=this._parent&&this._parent.dirty;return!e&&!!t&&!this._parent._anyControlsDirty()}_find(e){return null}_assignValidators(e){this._rawValidators=Array.isArray(e)?e.slice():e,this._composedValidatorFn=zw(this._rawValidators)}_assignAsyncValidators(e){this._rawAsyncValidators=Array.isArray(e)?e.slice():e,this._composedAsyncValidatorFn=Uw(this._rawAsyncValidators)}},af=new k("",{providedIn:"root",factory:()=>fa}),fa="always";function Zw(e,t){return[...t.path,e]}function qw(e,t,n=fa){Ww(e,t),t.valueAccessor.writeValue(e.value),(e.disabled||n==="always")&&t.valueAccessor.setDisabledState?.(e.disabled),Qw(e,t),Jw(e,t),Yw(e,t),Gw(e,t)}function zl(e,t){e.forEach(n=>{n.registerOnValidatorChange&&n.registerOnValidatorChange(t)})}function Gw(e,t){if(t.valueAccessor.setDisabledState){let n=r=>{t.valueAccessor.setDisabledState(r)};e.registerOnDisabledChange(n),t._registerOnDestroy(()=>{e._unregisterOnDisabledChange(n)})}}function Ww(e,t){let n=Vw(e);t.validator!==null?e.setValidators(Fl(n,t.validator)):typeof n=="function"&&e.setValidators([n]);let r=Nw(e);t.asyncValidator!==null?e.setAsyncValidators(Fl(r,t.asyncValidator)):typeof r=="function"&&e.setAsyncValidators([r]);let i=()=>e.updateValueAndValidity();zl(t._rawValidators,i),zl(t._rawAsyncValidators,i)}function Qw(e,t){t.valueAccessor.registerOnChange(n=>{e._pendingValue=n,e._pendingChange=!0,e._pendingDirty=!0,e.updateOn==="change"&&lf(e,t)})}function Yw(e,t){t.valueAccessor.registerOnTouched(()=>{e._pendingTouched=!0,e.updateOn==="blur"&&e._pendingChange&&lf(e,t),e.updateOn!=="submit"&&e.markAsTouched()})}function lf(e,t){e._pendingDirty&&e.markAsDirty(),e.setValue(e._pendingValue,{emitModelToViewChange:!1}),t.viewToModelUpdate(e._pendingValue),e._pendingChange=!1}function Jw(e,t){let n=(r,i)=>{t.valueAccessor.writeValue(r),i&&t.viewToModelUpdate(r)};e.registerOnChange(n),t._registerOnDestroy(()=>{e._unregisterOnChange(n)})}function Kw(e,t){if(!e.hasOwnProperty("model"))return!1;let n=e.model;return n.isFirstChange()?!0:!Object.is(t,n.currentValue)}function Xw(e){return Object.getPrototypeOf(e.constructor)===kw}function e_(e,t){if(!t)return null;Array.isArray(t);let n,r,i;return t.forEach(s=>{s.constructor===Zn?n=s:Xw(s)?r=s:i=s}),i||r||n||null}function Bl(e,t){let n=e.indexOf(t);n>-1&&e.splice(n,1)}function Ul(e){return typeof e=="object"&&e!==null&&Object.keys(e).length===2&&"value"in e&&"disabled"in e}var t_=class extends $w{defaultValue=null;_onChange=[];_pendingValue;_pendingChange=!1;constructor(e=null,t,n){super(Hw(t),Bw(n,t)),this._applyFormState(e),this._setUpdateStrategy(t),this._initObservables(),this.updateValueAndValidity({onlySelf:!0,emitEvent:!!this.asyncValidator}),ki(t)&&(t.nonNullable||t.initialValueIsDefault)&&(Ul(e)?this.defaultValue=e.value:this.defaultValue=e)}setValue(e,t={}){this.value=this._pendingValue=e,this._onChange.length&&t.emitModelToViewChange!==!1&&this._onChange.forEach(n=>n(this.value,t.emitViewToModelChange!==!1)),this.updateValueAndValidity(t)}patchValue(e,t={}){this.setValue(e,t)}reset(e=this.defaultValue,t={}){this._applyFormState(e),this.markAsPristine(t),this.markAsUntouched(t),this.setValue(this.value,t),this._pendingChange=!1,t?.emitEvent!==!1&&this._events.next(new jw(this))}_updateValue(){}_anyControls(e){return!1}_allControlsDisabled(){return this.disabled}registerOnChange(e){this._onChange.push(e)}_unregisterOnChange(e){Bl(this._onChange,e)}registerOnDisabledChange(e){this._onDisabledChange.push(e)}_unregisterOnDisabledChange(e){Bl(this._onDisabledChange,e)}_forEachChild(e){}_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(e){Ul(e)?(this.value=this._pendingValue=e.value,e.disabled?this.disable({onlySelf:!0,emitEvent:!1}):this.enable({onlySelf:!0,emitEvent:!1})):this.value=this._pendingValue=e}},n_={provide:da,useExisting:Nn(()=>Si)},$l=Promise.resolve(),Si=(()=>{class e extends da{_changeDetectorRef;callSetDisabledState;control=new t_;static ngAcceptInputType_isDisabled;_registered=!1;viewModel;name="";isDisabled;model;options;update=new R;constructor(n,r,i,s,o,a){super(),this._changeDetectorRef=o,this.callSetDisabledState=a,this._parent=n,this._setValidators(r),this._setAsyncValidators(i),this.valueAccessor=e_(this,s)}ngOnChanges(n){if(this._checkForErrors(),!this._registered||"name"in n){if(this._registered&&(this._checkName(),this.formDirective)){let r=n.name.previousValue;this.formDirective.removeControl({name:r,path:this._getPath(r)})}this._setUpControl()}"isDisabled"in n&&this._updateDisabled(n),Kw(n,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(n){this.viewModel=n,this.update.emit(n)}_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(){qw(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(n){$l.then(()=>{this.control.setValue(n,{emitViewToModelChange:!1}),this._changeDetectorRef?.markForCheck()})}_updateDisabled(n){let r=n.isDisabled.currentValue,i=r!==0&&Cb(r);$l.then(()=>{i&&!this.control.disabled?this.control.disable():!i&&this.control.disabled&&this.control.enable(),this._changeDetectorRef?.markForCheck()})}_getPath(n){return this._parent?Zw(n,this._parent):[n]}static \u0275fac=function(n){return new(n||e)(j(Rw,9),j(Jh,10),j(Mw,10),j(Yh,10),j(db,8),j(af,8))};static \u0275dir=Ie({type:e,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:[ra([n_]),sn,hi]})}return e})();function r_(e){return typeof e=="number"?e:parseInt(e,10)}var i_=(()=>{class e{_validator=Rl;_onChange;_enabled;ngOnChanges(n){if(this.inputName in n){let r=this.normalizeInput(n[this.inputName].currentValue);this._enabled=this.enabled(r),this._validator=this._enabled?this.createValidator(r):Rl,this._onChange&&this._onChange()}}validate(n){return this._validator(n)}registerOnValidatorChange(n){this._onChange=n}enabled(n){return n!=null}static \u0275fac=function(n){return new(n||e)};static \u0275dir=Ie({type:e,features:[hi]})}return e})(),s_={provide:Jh,useExisting:Nn(()=>uf),multi:!0},uf=(()=>{class e extends i_{maxlength;inputName="maxlength";normalizeInput=n=>r_(n);createValidator=n=>Iw(n);static \u0275fac=(()=>{let n;return function(r){return(n||(n=zc(e)))(r||e)}})();static \u0275dir=Ie({type:e,selectors:[["","maxlength","","formControlName",""],["","maxlength","","formControl",""],["","maxlength","","ngModel",""]],hostVars:1,hostBindings:function(n,r){n&2&&Ko("maxlength",r._enabled?r.maxlength:null)},inputs:{maxlength:"maxlength"},standalone:!1,features:[ra([s_]),sn]})}return e})(),o_=(()=>{class e{static \u0275fac=function(n){return new(n||e)};static \u0275mod=bi({type:e});static \u0275inj=ri({})}return e})(),pa=(()=>{class e{static withConfig(n){return{ngModule:e,providers:[{provide:af,useValue:n.callSetDisabledState??fa}]}}static \u0275fac=function(n){return new(n||e)};static \u0275mod=bi({type:e});static \u0275inj=ri({imports:[o_]})}return e})(),a_=class $s{placeholder=Be.INPUT.PLACEHOLDER;disabled=!1;value="";voiceStatus={state:"idle",transcript:"",interimTranscript:""};valueChange=new R;submitMessage=new R;voiceClick=new R;addClick=new R;get isListening(){return this.voiceStatus.state==="listening"}get displayValue(){if(this.isListening){let t=this.voiceStatus.transcript||"",n=this.voiceStatus.interimTranscript||"";return t+(t&&n?" ":"")+n}return this.value}get displayPlaceholder(){return this.isListening?"Listening... Speak now":this.placeholder}onInputChange(t){!this.isListening&&t!==void 0&&(this.value=t,this.valueChange.emit(this.value))}onSubmit(){if(this.value.trim()&&!this.isListening){let t=this.value;this.value="",this.valueChange.emit(this.value),this.submitMessage.emit(t)}}onVoiceClick(){this.voiceClick.emit()}onAddClick(){this.addClick.emit()}static \u0275fac=function(t){return new(t||$s)};static \u0275cmp=Me({type:$s,selectors:[["app-input-field"]],inputs:{placeholder:"placeholder",disabled:"disabled",value:"value",voiceStatus:"voiceStatus"},outputs:{valueChange:"valueChange",submitMessage:"submitMessage",voiceClick:"voiceClick",addClick:"addClick"},decls:7,vars:8,consts:[[1,"input-container"],[1,"input-wrapper"],["aria-label","Add",1,"icon-button","add-button",3,"click"],["name","add","width","24","height","24"],["type","text",1,"input-field",3,"ngModelChange","keyup.enter","ngModel","placeholder","disabled","readonly"],["aria-label","Voice input",1,"icon-button","voice-button",3,"click"],["name","microphone","width","24","height","24","fill","currentColor"]],template:function(t,n){t&1&&(g(0,"div",0)(1,"div",1)(2,"button",2),T("click",function(){return n.onAddClick()}),U(3,"app-icon",3),y(),g(4,"input",4),T("ngModelChange",function(r){return n.onInputChange(r)})("keyup.enter",function(){return n.onSubmit()}),y(),g(5,"button",5),T("click",function(){return n.onVoiceClick()}),U(6,"app-icon",6),y()()()),t&2&&(S(4),Ee("listening",n.isListening),P("ngModel",n.displayValue)("placeholder",n.displayPlaceholder)("disabled",n.disabled||n.isListening)("readonly",n.isListening),S(),Ee("active",n.isListening))},dependencies:[Ce,pa,Zn,ha,Si,ln],styles:[".input-container[_ngcontent-%COMP%]{padding:16px 20px;background:#fff;border-top:1px solid #f0f0f0}.input-wrapper[_ngcontent-%COMP%]{display:flex;align-items:center;gap:12px;background:#f8f8f8;border-radius:12px;padding:8px 16px;transition:background-color .2s}.input-wrapper[_ngcontent-%COMP%]:focus-within{background:#f0f0f0}.input-field[_ngcontent-%COMP%]{flex:1;border:none;background:transparent;font-size:15px;color:#333;outline:none;padding:8px 0}.input-field[_ngcontent-%COMP%]::placeholder{color:#999}.input-field[_ngcontent-%COMP%]:disabled{opacity:.5;cursor:not-allowed}.input-field.listening[_ngcontent-%COMP%]{color:#ff6b6b;font-style:italic}.icon-button[_ngcontent-%COMP%]{background:none;border:none;cursor:pointer;padding:8px;display:flex;align-items:center;justify-content:center;border-radius:50%;transition:background-color .2s;color:#666;min-width:40px;min-height:40px}.icon-button[_ngcontent-%COMP%]:hover{background-color:#0000000d;color:#333}.icon-button[_ngcontent-%COMP%]:active{background-color:#0000001a}.voice-button.active[_ngcontent-%COMP%]{color:#ff6b6b;animation:_ngcontent-%COMP%_pulse 1.5s ease-in-out infinite}@keyframes _ngcontent-%COMP%_pulse{0%,to{opacity:1}50%{opacity:.6}}"]})};function l_(e,t){e&1&&(g(0,"div",6),U(1,"span")(2,"span")(3,"span"),y())}function u_(e,t){if(e&1&&U(0,"div",7),e&2){let n=A();P("innerHTML",n.message.text,fd)}}var c_=class Zs{message;get isUser(){return this.message.sender==="user"}get isAssistant(){return this.message.sender==="assistant"}static \u0275fac=function(t){return new(t||Zs)};static \u0275cmp=Me({type:Zs,selectors:[["app-message"]],inputs:{message:"message"},decls:6,vars:8,consts:[[1,"message"],[1,"message-container"],[1,"message-content"],[1,"message-bubble"],["class","typing-indicator",4,"ngIf"],["class","message-text",3,"innerHTML",4,"ngIf"],[1,"typing-indicator"],[1,"message-text",3,"innerHTML"]],template:function(t,n){t&1&&(g(0,"div",0)(1,"div",1)(2,"div",2)(3,"div",3),pe(4,l_,4,0,"div",4)(5,u_,1,1,"div",5),y()()()()),t&2&&(Ee("user",n.isUser)("assistant",n.isAssistant),S(3),Ee("typing",n.message.isTyping),S(),P("ngIf",n.message.isTyping),S(),P("ngIf",!n.message.isTyping))},dependencies:[Ce,an],styles:[".message[_ngcontent-%COMP%]{display:flex;margin-bottom:16px;animation:_ngcontent-%COMP%_fadeIn .3s ease-in}@keyframes _ngcontent-%COMP%_fadeIn{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.message-container[_ngcontent-%COMP%]{display:flex;align-items:flex-start;max-width:100%;width:100%}.message.user[_ngcontent-%COMP%] .message-container[_ngcontent-%COMP%]{justify-content:flex-end}.message-content[_ngcontent-%COMP%]{display:flex;flex-direction:column;max-width:85%}.message.user[_ngcontent-%COMP%] .message-content[_ngcontent-%COMP%]{align-items:flex-end}.message-bubble[_ngcontent-%COMP%]{padding:12px 16px;border-radius:10px;word-wrap:break-word;width:fit-content}.message.user[_ngcontent-%COMP%] .message-bubble[_ngcontent-%COMP%]{background:#ff6b4a;color:#fff;border-radius:10px;box-shadow:0 1px 2px #0000001a}.message.assistant[_ngcontent-%COMP%] .message-bubble[_ngcontent-%COMP%]{background:transparent;color:#2c3e50;border:none;box-shadow:none;padding:0}.message-bubble.typing[_ngcontent-%COMP%]{padding:16px;min-width:60px}.message-text[_ngcontent-%COMP%]{margin:0;line-height:1.5;font-size:14px;white-space:normal}.message-text[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:0 0 8px}.message-text[_ngcontent-%COMP%] p[_ngcontent-%COMP%]:last-child{margin-bottom:0}.message-text[_ngcontent-%COMP%] h1[_ngcontent-%COMP%], .message-text[_ngcontent-%COMP%] h2[_ngcontent-%COMP%], .message-text[_ngcontent-%COMP%] h3[_ngcontent-%COMP%], .message-text[_ngcontent-%COMP%] h4[_ngcontent-%COMP%], .message-text[_ngcontent-%COMP%] h5[_ngcontent-%COMP%], .message-text[_ngcontent-%COMP%] h6[_ngcontent-%COMP%]{margin:12px 0 8px;font-weight:600}.message-text[_ngcontent-%COMP%] h1[_ngcontent-%COMP%]:first-child, .message-text[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]:first-child, .message-text[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]:first-child, .message-text[_ngcontent-%COMP%] h4[_ngcontent-%COMP%]:first-child, .message-text[_ngcontent-%COMP%] h5[_ngcontent-%COMP%]:first-child, .message-text[_ngcontent-%COMP%] h6[_ngcontent-%COMP%]:first-child{margin-top:0}.message-text[_ngcontent-%COMP%] ul[_ngcontent-%COMP%], .message-text[_ngcontent-%COMP%] ol[_ngcontent-%COMP%]{margin:8px 0;padding-left:24px}.message-text[_ngcontent-%COMP%] li[_ngcontent-%COMP%]{margin:4px 0}.message-text[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{font-weight:600}.message-text[_ngcontent-%COMP%] em[_ngcontent-%COMP%]{font-style:italic}.message-text[_ngcontent-%COMP%] code[_ngcontent-%COMP%]{background:#0000000d;padding:2px 4px;border-radius:3px;font-family:Courier New,monospace;font-size:13px}.message-text[_ngcontent-%COMP%] pre[_ngcontent-%COMP%]{background:#0000000d;padding:12px;border-radius:6px;overflow-x:auto;margin:8px 0}.message-text[_ngcontent-%COMP%] pre[_ngcontent-%COMP%] code[_ngcontent-%COMP%]{background:none;padding:0}.typing-indicator[_ngcontent-%COMP%]{display:flex;align-items:center;gap:4px;height:16px}.typing-indicator[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{width:8px;height:8px;border-radius:50%;background-color:#95a5a6;animation:_ngcontent-%COMP%_typing 1.4s infinite}.typing-indicator[_ngcontent-%COMP%] span[_ngcontent-%COMP%]:nth-child(2){animation-delay:.2s}.typing-indicator[_ngcontent-%COMP%] span[_ngcontent-%COMP%]:nth-child(3){animation-delay:.4s}@keyframes _ngcontent-%COMP%_typing{0%,60%,to{transform:translateY(0);opacity:.5}30%{transform:translateY(-10px);opacity:1}}@media (max-width: 768px){.message-bubble[_ngcontent-%COMP%]{max-width:90%}}"]})},d_=["messagesContainer"];function h_(e,t){if(e&1&&U(0,"app-message",7),e&2){let n=t.$implicit;P("message",n)}}function f_(e,t){if(e&1&&(g(0,"div",5),pe(1,h_,1,1,"app-message",6),y()),e&2){let n=A();S(),P("ngForOf",n.messages)("ngForTrackBy",n.trackByMessageId)}}function p_(e,t){e&1&&(g(0,"div",8)(1,"p",9),F(2,"Start a conversation by typing a message or selecting a suggestion below."),y()())}var g_=class qs{messages=[];messagesContainer;shouldScroll=!1;ngAfterViewChecked(){this.shouldScroll&&(this.scrollToBottom(),this.shouldScroll=!1)}ngOnChanges(t){t.messages&&(this.shouldScroll=!0)}trackByMessageId(t,n){return n.id}scrollToBottom(){try{this.messagesContainer&&(this.messagesContainer.nativeElement.scrollTop=this.messagesContainer.nativeElement.scrollHeight)}catch(t){console.error("Error scrolling to bottom:",t)}}static \u0275fac=function(t){return new(t||qs)};static \u0275cmp=Me({type:qs,selectors:[["app-chat-history"]],viewQuery:function(t,n){if(t&1&&O1(d_,5),t&2){let r;E1(r=T1())&&(n.messagesContainer=r.first)}},inputs:{messages:"messages"},features:[hi],decls:5,vars:2,consts:[["messagesContainer",""],[1,"chat-history"],[1,"messages-container"],["class","messages-list",4,"ngIf"],["class","empty-state",4,"ngIf"],[1,"messages-list"],[3,"message",4,"ngFor","ngForOf","ngForTrackBy"],[3,"message"],[1,"empty-state"],[1,"empty-text"]],template:function(t,n){t&1&&(g(0,"div",1)(1,"div",2,0),pe(3,f_,2,2,"div",3)(4,p_,3,0,"div",4),y()()),t&2&&(S(3),P("ngIf",n.messages.length>0),S(),P("ngIf",n.messages.length===0))},dependencies:[Ce,wi,an,c_],styles:[".chat-history[_ngcontent-%COMP%]{flex:1;display:flex;flex-direction:column;overflow:hidden;width:100%;min-height:0;max-height:100%}.messages-container[_ngcontent-%COMP%]{flex:1;overflow-y:auto;overflow-x:hidden;padding:16px;scroll-behavior:smooth;min-height:0;-webkit-overflow-scrolling:touch}.messages-container[_ngcontent-%COMP%]::-webkit-scrollbar{width:6px}.messages-container[_ngcontent-%COMP%]::-webkit-scrollbar-track{background:transparent}.messages-container[_ngcontent-%COMP%]::-webkit-scrollbar-thumb{background:#0003;border-radius:3px}.messages-container[_ngcontent-%COMP%]::-webkit-scrollbar-thumb:hover{background:#0000004d}.messages-list[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:8px}.empty-state[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:center;height:100%;padding:32px}.empty-text[_ngcontent-%COMP%]{color:#95a5a6;font-size:14px;text-align:center;line-height:1.6;max-width:400px}"]})};function m_(e,t){if(e&1){let n=on();g(0,"div",1),T("click",function(){W(n);let r=A();return Q(r.onOverlayClick())}),g(1,"div",2),T("click",function(r){W(n);let i=A();return Q(i.onModalClick(r))}),g(2,"div",3)(3,"button",4),T("click",function(){W(n);let r=A();return Q(r.onBackClick())}),U(4,"app-icon",5),y(),g(5,"h2",6),F(6,"Rename Chat"),y(),g(7,"button",7),T("click",function(){W(n);let r=A();return Q(r.onCloseClick())}),U(8,"app-icon",8),y()(),g(9,"div",9)(10,"input",10),na("ngModelChange",function(r){W(n);let i=A();return gh(i.editedTitle,r)||(i.editedTitle=r),Q(r)}),T("keydown",function(r){W(n);let i=A();return Q(i.onInputKeydown(r))}),y()(),g(11,"div",11)(12,"button",12),T("click",function(){W(n);let r=A();return Q(r.onCancel())}),F(13," Cancel "),y(),g(14,"button",13),T("click",function(){W(n);let r=A();return Q(r.onSave())}),F(15," Save "),y()()()()}if(e&2){let n=A();S(10),ta("ngModel",n.editedTitle),P("maxlength",500)}}var v_=class Gs{isOpen=!1;currentTitle="";close=new R;save=new R;editedTitle="";ngOnChanges(t){t.isOpen&&this.isOpen&&(this.editedTitle=this.currentTitle),t.currentTitle&&(this.editedTitle=this.currentTitle)}onBackClick(){this.close.emit()}onCloseClick(){this.close.emit()}onCancel(){this.close.emit()}onSave(){let t=this.editedTitle.trim();t&&t!==this.currentTitle&&this.save.emit(t),this.close.emit()}onOverlayClick(){this.close.emit()}onModalClick(t){t.stopPropagation()}onInputKeydown(t){t.key==="Enter"?(t.preventDefault(),this.onSave()):t.key==="Escape"&&(t.preventDefault(),this.onCancel())}static \u0275fac=function(t){return new(t||Gs)};static \u0275cmp=Me({type:Gs,selectors:[["app-rename-modal"]],inputs:{isOpen:"isOpen",currentTitle:"currentTitle"},outputs:{close:"close",save:"save"},features:[hi],decls:1,vars:1,consts:[["class","modal-overlay",3,"click",4,"ngIf"],[1,"modal-overlay",3,"click"],[1,"modal-container",3,"click"],[1,"modal-header"],["aria-label","Back",1,"icon-button","back-button",3,"click"],["name","chevron-left","width","24","height","24"],[1,"modal-title"],["aria-label","Close",1,"icon-button","close-button",3,"click"],["name","close","width","24","height","24"],[1,"modal-body"],["type","text","placeholder","Enter chat name","autofocus","",1,"rename-input",3,"ngModelChange","keydown","ngModel","maxlength"],[1,"modal-footer"],[1,"btn","btn-cancel",3,"click"],[1,"btn","btn-save",3,"click"]],template:function(t,n){t&1&&pe(0,m_,16,2,"div",0),t&2&&P("ngIf",n.isOpen)},dependencies:[Ce,an,pa,Zn,ha,uf,Si,ln],styles:[".modal-overlay[_ngcontent-%COMP%]{position:fixed;inset:0;background-color:#00000080;display:flex;align-items:flex-end;justify-content:center;z-index:1000;animation:_ngcontent-%COMP%_fadeIn .2s ease-out}@keyframes _ngcontent-%COMP%_fadeIn{0%{opacity:0}to{opacity:1}}.modal-container[_ngcontent-%COMP%]{background-color:#fff;border-radius:16px 16px 0 0;width:100%;max-width:600px;max-height:90vh;display:flex;flex-direction:column;box-shadow:0 -2px 24px #00000026;animation:_ngcontent-%COMP%_slideUp .3s ease-out}@keyframes _ngcontent-%COMP%_slideUp{0%{transform:translateY(100%)}to{transform:translateY(0)}}.modal-header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid #e5e7eb;gap:12px}.modal-title[_ngcontent-%COMP%]{flex:1;text-align:center;font-size:18px;font-weight:600;color:#111827;margin:0}.icon-button[_ngcontent-%COMP%]{background:none;border:none;padding:8px;cursor:pointer;display:flex;align-items:center;justify-content:center;border-radius:8px;color:#6b7280;transition:all .2s ease}.icon-button[_ngcontent-%COMP%]:hover{background-color:#f3f4f6;color:#111827}.icon-button[_ngcontent-%COMP%]:active{transform:scale(.95)}.back-button[_ngcontent-%COMP%], .close-button[_ngcontent-%COMP%]{flex-shrink:0}.modal-body[_ngcontent-%COMP%]{padding:24px 20px;flex:1;overflow-y:auto}.rename-input[_ngcontent-%COMP%]{width:100%;padding:12px 16px;font-size:16px;border:1px solid #d1d5db;border-radius:8px;outline:none;transition:all .2s ease;font-family:inherit;color:#111827}.rename-input[_ngcontent-%COMP%]:focus{border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61a}.rename-input[_ngcontent-%COMP%]::placeholder{color:#9ca3af}.modal-footer[_ngcontent-%COMP%]{display:flex;gap:12px;padding:16px 20px;border-top:1px solid #e5e7eb}.btn[_ngcontent-%COMP%]{flex:1;padding:12px 24px;font-size:16px;font-weight:500;border-radius:8px;border:none;cursor:pointer;transition:all .2s ease;font-family:inherit}.btn[_ngcontent-%COMP%]:active{transform:scale(.98)}.btn-cancel[_ngcontent-%COMP%]{background-color:#fff;color:#374151;border:1px solid #d1d5db}.btn-cancel[_ngcontent-%COMP%]:hover{background-color:#f9fafb;border-color:#9ca3af}.btn-save[_ngcontent-%COMP%]{background-color:#ef4444;color:#fff}.btn-save[_ngcontent-%COMP%]:hover{background-color:#dc2626}.btn-save[_ngcontent-%COMP%]:disabled{background-color:#fca5a5;cursor:not-allowed}@media (min-width: 768px){.modal-overlay[_ngcontent-%COMP%]{align-items:center}.modal-container[_ngcontent-%COMP%]{border-radius:16px;max-height:400px}}"]})};function y_(e,t){e&1&&(g(0,"div",22),U(1,"div",23),g(2,"p",24),F(3,"Loading conversations..."),y()())}function b_(e,t){if(e&1){let n=on();g(0,"div",36)(1,"button",37),T("click",function(r){W(n);let i=A().$implicit,s=A(2);return Q(s.onEditClick(i.id,i.title,r))}),U(2,"app-icon",38),g(3,"span"),F(4,"Rename"),y()(),g(5,"button",39),T("click",function(r){W(n);let i=A().$implicit,s=A(2);return Q(s.onDeleteClick(i.id,r))}),U(6,"app-icon",40),g(7,"span"),F(8,"Delete"),y()()()}}function C_(e,t){if(e&1){let n=on();g(0,"div",27),T("click",function(){let r=W(n).$implicit,i=A(2);return Q(i.onConversationClick(r.id))}),g(1,"div",28)(2,"div",29)(3,"span",30),F(4),y()(),g(5,"span",31),F(6),y()(),g(7,"div",32)(8,"button",33),T("click",function(r){let i=W(n).$implicit,s=A(2);return Q(s.toggleMenu(i.id,r))}),U(9,"app-icon",34),y(),pe(10,b_,9,0,"div",35),y()()}if(e&2){let n=t.$implicit,r=A(2);S(4),Oe(n.title),S(2),Oe(n.date),S(4),P("ngIf",r.isMenuOpen(n.id))}}function w_(e,t){if(e&1&&(g(0,"div",25),pe(1,C_,11,3,"div",26),y()),e&2){let n=A();S(),P("ngForOf",n.conversations)}}function __(e,t){e&1&&(g(0,"div",41)(1,"p"),F(2,"No conversations yet"),y()())}var x_=class Ws{isOpen=!1;conversations=[];isLoading=!1;backClick=new R;settingsClick=new R;closeClick=new R;conversationClick=new R;deleteClick=new R;newChatClick=new R;searchChange=new R;titleUpdate=new R;searchQuery="";isRenameModalOpen=!1;renamingConversationId=null;renamingConversationTitle="";activeMenuId=null;onBackClick(){this.backClick.emit()}onSettingsClick(){this.settingsClick.emit()}onCloseClick(){this.closeClick.emit()}onOverlayClick(){this.closeClick.emit(),this.closeMenu()}onConversationClick(t){this.conversationClick.emit(t)}onDeleteClick(t,n){n.stopPropagation(),this.deleteClick.emit(t),this.closeMenu()}onNewChatClick(){this.newChatClick.emit()}onSearchChange(){this.searchChange.emit(this.searchQuery)}onEditClick(t,n,r){r.stopPropagation(),this.renamingConversationId=t,this.renamingConversationTitle=n,this.isRenameModalOpen=!0,this.closeMenu()}onRenameModalClose(){this.isRenameModalOpen=!1,this.renamingConversationId=null,this.renamingConversationTitle=""}onRenameModalSave(t){this.renamingConversationId&&t.trim()&&this.titleUpdate.emit({id:this.renamingConversationId,title:t.trim()})}toggleMenu(t,n){n.stopPropagation(),this.activeMenuId===t?this.activeMenuId=null:this.activeMenuId=t}closeMenu(){this.activeMenuId=null}isMenuOpen(t){return this.activeMenuId===t}onSidebarClick(){this.closeMenu()}static \u0275fac=function(t){return new(t||Ws)};static \u0275cmp=Me({type:Ws,selectors:[["app-sidebar"]],inputs:{isOpen:"isOpen",conversations:"conversations",isLoading:"isLoading"},outputs:{backClick:"backClick",settingsClick:"settingsClick",closeClick:"closeClick",conversationClick:"conversationClick",deleteClick:"deleteClick",newChatClick:"newChatClick",searchChange:"searchChange",titleUpdate:"titleUpdate"},decls:25,vars:10,consts:[[1,"sidebar-overlay",3,"click"],[1,"sidebar",3,"click"],[1,"sidebar-header"],[1,"back-text-button",3,"click"],["name","chevron-left","width","16","height","16"],[1,"header-actions"],["aria-label","Settings",1,"icon-button","settings-button",3,"click"],["name","settings","width","20","height","20"],["aria-label","Close",1,"icon-button","close-button",3,"click"],["name","close","width","20","height","20"],[1,"sidebar-content"],[1,"conversations-title"],["class","loading-container",4,"ngIf"],["class","conversations-list",4,"ngIf"],["class","empty-conversations",4,"ngIf"],[1,"sidebar-footer"],[1,"search-container"],["name","search","width","18","height","18",1,"search-icon"],["type","text","placeholder","Search",1,"search-input",3,"ngModelChange","input","ngModel"],["aria-label","New Chat",1,"icon-button","new-chat-button",3,"click"],["name","edit","width","20","height","20"],[3,"close","save","isOpen","currentTitle"],[1,"loading-container"],[1,"spinner"],[1,"loading-text"],[1,"conversations-list"],["class","conversation-item",3,"click",4,"ngFor","ngForOf"],[1,"conversation-item",3,"click"],[1,"conversation-info"],[1,"conversation-title-container"],[1,"conversation-title"],[1,"conversation-date"],[1,"menu-container"],["aria-label","More options",1,"icon-button","menu-button",3,"click"],["name","more-horizontal","width","20","height","20"],["class","context-menu",4,"ngIf"],[1,"context-menu"],[1,"menu-item",3,"click"],["name","edit","width","16","height","16"],[1,"menu-item","delete-item",3,"click"],["name","trash","width","16","height","16"],[1,"empty-conversations"]],template:function(t,n){t&1&&(g(0,"div",0),T("click",function(){return n.onOverlayClick()}),y(),g(1,"div",1),T("click",function(){return n.onSidebarClick()}),g(2,"div",2)(3,"button",3),T("click",function(){return n.onBackClick()}),U(4,"app-icon",4),g(5,"span"),F(6,"Back to Chat"),y()(),g(7,"div",5)(8,"button",6),T("click",function(){return n.onSettingsClick()}),U(9,"app-icon",7),y(),g(10,"button",8),T("click",function(){return n.onCloseClick()}),U(11,"app-icon",9),y()()(),g(12,"div",10)(13,"h3",11),F(14,"Conversations"),y(),pe(15,y_,4,0,"div",12)(16,w_,2,1,"div",13)(17,__,3,0,"div",14),y(),g(18,"div",15)(19,"div",16),U(20,"app-icon",17),g(21,"input",18),na("ngModelChange",function(r){return gh(n.searchQuery,r)||(n.searchQuery=r),r}),T("input",function(){return n.onSearchChange()}),y()(),g(22,"button",19),T("click",function(){return n.onNewChatClick()}),U(23,"app-icon",20),y()()(),g(24,"app-rename-modal",21),T("close",function(){return n.onRenameModalClose()})("save",function(r){return n.onRenameModalSave(r)}),y()),t&2&&(Ee("visible",n.isOpen),S(),Ee("open",n.isOpen),S(14),P("ngIf",n.isLoading),S(),P("ngIf",!n.isLoading&&n.conversations.length>0),S(),P("ngIf",!n.isLoading&&n.conversations.length===0),S(4),ta("ngModel",n.searchQuery),S(3),P("isOpen",n.isRenameModalOpen)("currentTitle",n.renamingConversationTitle))},dependencies:[Ce,wi,an,pa,Zn,ha,Si,ln,v_],styles:[".sidebar-overlay[_ngcontent-%COMP%]{position:fixed;top:0;left:0;width:100%;height:100%;background:#0006;z-index:998;opacity:0;visibility:hidden;transition:opacity .3s ease,visibility .3s ease}.sidebar-overlay.visible[_ngcontent-%COMP%]{opacity:1;visibility:visible}.sidebar[_ngcontent-%COMP%]{position:fixed;top:0;left:0;width:85%;max-width:400px;height:100%;background:#fff;z-index:999;transform:translate(-100%);transition:transform .3s ease;display:flex;flex-direction:column;box-shadow:2px 0 8px #0000001a}.sidebar.open[_ngcontent-%COMP%]{transform:translate(0)}.sidebar-header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;padding:16px;border-bottom:1px solid #e8ecf1}.back-text-button[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;background:none;border:none;cursor:pointer;font-size:16px;font-weight:500;color:#1a1a1a;padding:8px;border-radius:8px;transition:background .2s ease}.back-text-button[_ngcontent-%COMP%]:hover{background:#f5f7fa}.header-actions[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px}.icon-button[_ngcontent-%COMP%]{background:none;border:none;cursor:pointer;padding:8px;display:flex;align-items:center;justify-content:center;border-radius:8px;transition:background .2s ease;color:#5f6368}.icon-button[_ngcontent-%COMP%]:hover{background:#f5f7fa;color:#1a1a1a}.icon-button[_ngcontent-%COMP%]:active{background:#e8ecf1}.sidebar-content[_ngcontent-%COMP%]{flex:1;overflow-y:auto;padding:16px}.conversations-title[_ngcontent-%COMP%]{font-size:13px;font-weight:500;color:#95a5a6;text-transform:uppercase;letter-spacing:.5px;margin:0 0 16px}.conversations-list[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:8px}.conversation-item[_ngcontent-%COMP%]{display:flex;align-items:center;padding:12px;background:#fff;border-radius:8px;cursor:pointer;transition:background .2s ease;gap:12px;position:relative}.conversation-item[_ngcontent-%COMP%]:hover{background:#f5f7fa}.conversation-info[_ngcontent-%COMP%]{flex:1;display:flex;flex-direction:column;gap:4px;min-width:0}.conversation-title-container[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;min-width:0}.conversation-title[_ngcontent-%COMP%]{flex:1;font-size:14px;font-weight:500;color:#1a1a1a;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.conversation-date[_ngcontent-%COMP%]{font-size:12px;color:#95a5a6}.menu-container[_ngcontent-%COMP%]{position:relative}.menu-button[_ngcontent-%COMP%]{opacity:0;transition:opacity .2s ease}.conversation-item[_ngcontent-%COMP%]:hover .menu-button[_ngcontent-%COMP%], .menu-button[_ngcontent-%COMP%]:focus, .menu-container[_ngcontent-%COMP%]:focus-within .menu-button[_ngcontent-%COMP%]{opacity:1}.context-menu[_ngcontent-%COMP%]{position:absolute;top:100%;right:0;background:#fff;border-radius:8px;box-shadow:0 4px 12px #00000026;border:1px solid #e8ecf1;padding:4px;min-width:140px;z-index:1000;display:flex;flex-direction:column;gap:2px}.menu-item[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;padding:8px 12px;border:none;background:none;width:100%;text-align:left;cursor:pointer;border-radius:6px;font-size:14px;color:#1a1a1a;transition:background .2s ease}.menu-item[_ngcontent-%COMP%]:hover{background:#f5f7fa}.menu-item[_ngcontent-%COMP%] app-icon[_ngcontent-%COMP%]{color:#5f6368}.delete-item[_ngcontent-%COMP%]{color:#dc3545}.delete-item[_ngcontent-%COMP%]:hover{background:#fee}.delete-item[_ngcontent-%COMP%] app-icon[_ngcontent-%COMP%]{color:#dc3545}.loading-container[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:40px 20px;gap:16px}.spinner[_ngcontent-%COMP%]{width:40px;height:40px;border:3px solid #f5f7fa;border-top-color:#ff5337;border-radius:50%;animation:_ngcontent-%COMP%_spin .8s linear infinite}@keyframes _ngcontent-%COMP%_spin{to{transform:rotate(360deg)}}.loading-text[_ngcontent-%COMP%]{color:#95a5a6;font-size:14px;margin:0}.empty-conversations[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:center;padding:40px 20px;text-align:center}.empty-conversations[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{color:#95a5a6;font-size:14px;margin:0}.sidebar-footer[_ngcontent-%COMP%]{padding:16px;border-top:1px solid #e8ecf1;display:flex;align-items:center;gap:12px}.search-container[_ngcontent-%COMP%]{flex:1;position:relative;display:flex;align-items:center;background:#f5f7fa;border-radius:8px;padding:8px 12px;gap:8px}.search-icon[_ngcontent-%COMP%]{flex-shrink:0;color:#95a5a6}.search-input[_ngcontent-%COMP%]{flex:1;border:none;background:none;font-size:14px;color:#1a1a1a;outline:none;padding:0}.search-input[_ngcontent-%COMP%]::placeholder{color:#95a5a6}.new-chat-button[_ngcontent-%COMP%]{flex-shrink:0;background:#fff;border:1px solid #e8ecf1;border-radius:8px;width:40px;height:40px;display:flex;align-items:center;justify-content:center;transition:all .2s ease}.new-chat-button[_ngcontent-%COMP%]:hover{background:#f5f7fa;border-color:#d0d7de}@media (max-width: 480px){.sidebar[_ngcontent-%COMP%]{width:100%;max-width:none}}"]})},cf=class _r{toasts=ue([]);toasts$=this.toasts.asReadonly();show(t,n="info",r=3e3){let i=Math.random().toString(36).substring(7),s={id:i,message:t,type:n,duration:r};this.toasts.update(o=>[...o,s]),r>0&&setTimeout(()=>this.remove(i),r)}success(t,n){this.show(t,"success",n)}error(t,n){this.show(t,"error",n)}warning(t,n){this.show(t,"warning",n)}info(t,n){this.show(t,"info",n)}remove(t){this.toasts.update(n=>n.filter(r=>r.id!==t))}static \u0275fac=function(t){return new(t||_r)};static \u0275prov=O({token:_r,factory:_r.\u0275fac,providedIn:"root"})};function k_(e,t){e&1&&(g(0,"span"),F(1,"\u2713"),y())}function S_(e,t){e&1&&(g(0,"span"),F(1,"\u2715"),y())}function O_(e,t){e&1&&(g(0,"span"),F(1,"\u26A0"),y())}function E_(e,t){e&1&&(g(0,"span"),F(1,"\u2139"),y())}function T_(e,t){if(e&1){let n=on();g(0,"div",2)(1,"div",3)(2,"span",4),lh(3,5),pe(4,k_,2,0,"span",6)(5,S_,2,0,"span",6)(6,O_,2,0,"span",6)(7,E_,2,0,"span",6),uh(),y(),g(8,"span",7),F(9),y()(),g(10,"button",8),T("click",function(){let r=W(n).$implicit,i=A();return Q(i.onClose(r.id))}),F(11,"\u2715"),y()()}if(e&2){let n=t.$implicit;Ee("success",n.type==="success")("error",n.type==="error")("warning",n.type==="warning")("info",n.type==="info"),S(3),P("ngSwitch",n.type),S(),P("ngSwitchCase","success"),S(),P("ngSwitchCase","error"),S(),P("ngSwitchCase","warning"),S(),P("ngSwitchCase","info"),S(2),Oe(n.message)}}var M_=class Qs{toastService=v(cf);toasts=this.toastService.toasts$;onClose(t){this.toastService.remove(t)}static \u0275fac=function(t){return new(t||Qs)};static \u0275cmp=Me({type:Qs,selectors:[["app-toast-container"]],decls:2,vars:1,consts:[[1,"toast-container"],["class","toast",3,"success","error","warning","info",4,"ngFor","ngForOf"],[1,"toast"],[1,"toast-content"],[1,"toast-icon"],[3,"ngSwitch"],[4,"ngSwitchCase"],[1,"toast-message"],[1,"toast-close",3,"click"]],template:function(t,n){t&1&&(g(0,"div",0),pe(1,T_,12,14,"div",1),y()),t&2&&(S(),P("ngForOf",n.toasts()))},dependencies:[Ce,wi,kh,sC],styles:[".toast-container[_ngcontent-%COMP%]{position:fixed;top:20px;right:20px;z-index:9999;display:flex;flex-direction:column;gap:12px;max-width:400px}.toast[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;border-radius:8px;box-shadow:0 4px 12px #00000026;background:#fff;min-width:300px;animation:_ngcontent-%COMP%_slideIn .3s ease-out}@keyframes _ngcontent-%COMP%_slideIn{0%{transform:translate(400px);opacity:0}to{transform:translate(0);opacity:1}}.toast-content[_ngcontent-%COMP%]{display:flex;align-items:center;gap:12px;flex:1}.toast-icon[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:center;width:24px;height:24px;border-radius:50%;font-size:14px;font-weight:700}.toast.success[_ngcontent-%COMP%]{border-left:4px solid #10b981}.toast.success[_ngcontent-%COMP%] .toast-icon[_ngcontent-%COMP%]{background:#10b981;color:#fff}.toast.error[_ngcontent-%COMP%]{border-left:4px solid #ef4444}.toast.error[_ngcontent-%COMP%] .toast-icon[_ngcontent-%COMP%]{background:#ef4444;color:#fff}.toast.warning[_ngcontent-%COMP%]{border-left:4px solid #f59e0b}.toast.warning[_ngcontent-%COMP%] .toast-icon[_ngcontent-%COMP%]{background:#f59e0b;color:#fff}.toast.info[_ngcontent-%COMP%]{border-left:4px solid #3b82f6}.toast.info[_ngcontent-%COMP%] .toast-icon[_ngcontent-%COMP%]{background:#3b82f6;color:#fff}.toast-message[_ngcontent-%COMP%]{flex:1;font-size:14px;color:#2c3e50;line-height:1.4}.toast-close[_ngcontent-%COMP%]{background:none;border:none;color:#95a5a6;cursor:pointer;font-size:18px;padding:4px 8px;display:flex;align-items:center;justify-content:center;transition:color .2s}.toast-close[_ngcontent-%COMP%]:hover{color:#2c3e50}@media (max-width: 768px){.toast-container[_ngcontent-%COMP%]{top:10px;right:10px;left:10px;max-width:none}.toast[_ngcontent-%COMP%]{min-width:auto}}"]})},df=class xr{isOpenSignal=ue(!1);configSignal=ue(null);resolveCallback=null;isOpen$=this.isOpenSignal.asReadonly();config$=this.configSignal.asReadonly();confirm(t){return this.configSignal.set(M({confirmText:"Confirm",cancelText:"Cancel",confirmColor:"primary"},t)),this.isOpenSignal.set(!0),new Promise(n=>{this.resolveCallback=n})}close(t){this.isOpenSignal.set(!1),this.resolveCallback&&(this.resolveCallback(t),this.resolveCallback=null)}static \u0275fac=function(t){return new(t||xr)};static \u0275prov=O({token:xr,factory:xr.\u0275fac,providedIn:"root"})};function I_(e,t){if(e&1){let n=on();g(0,"div",1),T("click",function(){W(n);let r=A();return Q(r.onOverlayClick())}),g(1,"div",2),T("click",function(r){W(n);let i=A();return Q(i.onModalClick(r))}),g(2,"div",3)(3,"button",4),T("click",function(){W(n);let r=A();return Q(r.onBackClick())}),U(4,"app-icon",5),y(),g(5,"h2",6),F(6),y(),g(7,"button",7),T("click",function(){W(n);let r=A();return Q(r.onCloseClick())}),U(8,"app-icon",8),y()(),g(9,"div",9)(10,"p",10),F(11),y()(),g(12,"div",11)(13,"button",12),T("click",function(){W(n);let r=A();return Q(r.onCancel())}),F(14),y(),g(15,"button",13),T("click",function(){W(n);let r=A();return Q(r.onConfirm())}),F(16),y()()()()}if(e&2){let n,r,i,s,o,a,l=A();S(6),Oe(((n=l.config())==null?null:n.title)||"Back"),S(5),Oe((r=l.config())==null?null:r.message),S(3),Vn(" ",((i=l.config())==null?null:i.cancelText)||"Cancel"," "),S(),Ee("btn-danger",((s=l.config())==null?null:s.confirmColor)==="danger")("btn-primary",((o=l.config())==null?null:o.confirmColor)==="primary"),S(),Vn(" ",((a=l.config())==null?null:a.confirmText)||"Confirm"," ")}}var P_=class Ys{confirmationService=v(df);isOpen=this.confirmationService.isOpen$;config=this.confirmationService.config$;onConfirm(){this.confirmationService.close(!0)}onCancel(){this.confirmationService.close(!1)}onBackClick(){this.confirmationService.close(!1)}onCloseClick(){this.confirmationService.close(!1)}onOverlayClick(){this.confirmationService.close(!1)}onModalClick(t){t.stopPropagation()}static \u0275fac=function(t){return new(t||Ys)};static \u0275cmp=Me({type:Ys,selectors:[["app-confirmation-modal"]],decls:1,vars:1,consts:[["class","modal-overlay",3,"click",4,"ngIf"],[1,"modal-overlay",3,"click"],[1,"modal-container",3,"click"],[1,"modal-header"],["aria-label","Back",1,"icon-button","back-button",3,"click"],["name","chevron-left","width","24","height","24"],[1,"modal-title"],["aria-label","Close",1,"icon-button","close-button",3,"click"],["name","close","width","24","height","24"],[1,"modal-body"],[1,"modal-message"],[1,"modal-footer"],[1,"btn","btn-cancel",3,"click"],[1,"btn","btn-confirm",3,"click"]],template:function(t,n){t&1&&pe(0,I_,17,8,"div",0),t&2&&P("ngIf",n.isOpen())},dependencies:[Ce,an,ln],styles:[".modal-overlay[_ngcontent-%COMP%]{position:fixed;inset:0;background-color:#00000080;display:flex;align-items:flex-end;justify-content:center;z-index:10000;animation:_ngcontent-%COMP%_fadeIn .2s ease-out}@keyframes _ngcontent-%COMP%_fadeIn{0%{opacity:0}to{opacity:1}}.modal-container[_ngcontent-%COMP%]{background-color:#fff;border-radius:16px 16px 0 0;width:100%;max-width:600px;max-height:90vh;display:flex;flex-direction:column;box-shadow:0 -2px 24px #00000026;animation:_ngcontent-%COMP%_slideUp .3s ease-out}@keyframes _ngcontent-%COMP%_slideUp{0%{transform:translateY(100%)}to{transform:translateY(0)}}.modal-header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid #e5e7eb;gap:12px}.modal-title[_ngcontent-%COMP%]{flex:1;text-align:center;font-size:18px;font-weight:600;color:#111827;margin:0}.icon-button[_ngcontent-%COMP%]{background:none;border:none;padding:8px;cursor:pointer;display:flex;align-items:center;justify-content:center;border-radius:8px;color:#6b7280;transition:all .2s ease}.icon-button[_ngcontent-%COMP%]:hover{background-color:#f3f4f6;color:#111827}.icon-button[_ngcontent-%COMP%]:active{transform:scale(.95)}.back-button[_ngcontent-%COMP%], .close-button[_ngcontent-%COMP%]{flex-shrink:0}.modal-body[_ngcontent-%COMP%]{padding:32px 20px;flex:1;overflow-y:auto}.modal-message[_ngcontent-%COMP%]{margin:0;font-size:16px;line-height:1.5;color:#111827;text-align:left}.modal-footer[_ngcontent-%COMP%]{display:flex;gap:12px;padding:16px 20px;border-top:1px solid #e5e7eb}.btn[_ngcontent-%COMP%]{flex:1;padding:12px 24px;font-size:16px;font-weight:500;border-radius:8px;border:none;cursor:pointer;transition:all .2s ease;font-family:inherit}.btn[_ngcontent-%COMP%]:active{transform:scale(.98)}.btn-cancel[_ngcontent-%COMP%]{background-color:#fff;color:#374151;border:1px solid #d1d5db}.btn-cancel[_ngcontent-%COMP%]:hover{background-color:#f9fafb;border-color:#9ca3af}.btn-confirm[_ngcontent-%COMP%]{color:#fff}.btn-primary[_ngcontent-%COMP%]{background-color:#3b82f6}.btn-primary[_ngcontent-%COMP%]:hover{background-color:#2563eb}.btn-danger[_ngcontent-%COMP%]{background-color:#ef4444}.btn-danger[_ngcontent-%COMP%]:hover{background-color:#dc2626}.btn-danger[_ngcontent-%COMP%]:disabled, .btn-primary[_ngcontent-%COMP%]:disabled{opacity:.5;cursor:not-allowed}@media (min-width: 768px){.modal-overlay[_ngcontent-%COMP%]{align-items:center}.modal-container[_ngcontent-%COMP%]{border-radius:16px;max-height:500px}}"]})},ga=class kr{constructor(t){this.http=t}config=null;loadConfig(){return X(this,null,function*(){try{this.config=yield ut(this.http.get("/config.json")),console.log("Configuration loaded:",this.config?.environmentName)}catch(t){console.error("Failed to load configuration, using defaults",t),this.config={apiUrl:"https://localhost:7592",apiTimeout:3e4,environmentName:"local"}}})}get apiUrl(){return this.config?.apiUrl||"https://localhost:7592"}get apiTimeout(){return this.config?.apiTimeout||3e4}get environmentName(){return this.config?.environmentName||"local"}getConfig(){return this.config||{apiUrl:"https://localhost:7592",apiTimeout:3e4,environmentName:"local"}}setConfig(t){this.config=t,console.log("Configuration updated:",this.config.environmentName)}static \u0275fac=function(t){return new(t||kr)(C(ua))};static \u0275prov=O({token:kr,factory:kr.\u0275fac,providedIn:"root"})},D_=class Sr{http=v(ua);logger=v(kt);config=v(ga);get apiUrl(){return this.config.apiUrl}get timeout(){return this.config.apiTimeout}mockToken="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1c2VyMTIzIiwibmFtZSI6IlRlc3QgVXNlciIsImlhdCI6MTUxNjIzOTAyMn0.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c";getHeaders(){return new xt({"Content-Type":"application/json",Authorization:`Bearer ${this.mockToken}`})}createConversation(t){return this.http.post(`${this.apiUrl}/conversations`,t,{headers:this.getHeaders()}).pipe(lt(this.timeout),De(this.handleError))}getConversations(t,n,r=0,i=50){let s=new Ze().set("offset",r.toString()).set("limit",i.toString());return t&&(s=s.set("status",t)),n&&(s=s.set("search",n)),this.http.get(`${this.apiUrl}/conversations`,{headers:this.getHeaders(),params:s}).pipe(lt(this.timeout),De(this.handleError))}getConversation(t){return this.http.get(`${this.apiUrl}/conversations/${t}`,{headers:this.getHeaders()}).pipe(lt(this.timeout),De(this.handleError))}deleteConversation(t){return this.http.delete(`${this.apiUrl}/conversations/${t}`,{headers:this.getHeaders()}).pipe(lt(this.timeout),De(this.handleError))}updateConversationTitle(t,n){return this.http.patch(`${this.apiUrl}/conversations/${t}/title`,n,{headers:this.getHeaders()}).pipe(lt(this.timeout),De(this.handleError))}sendMessage(t,n){return this.http.post(`${this.apiUrl}/conversations/${t}/messages`,n,{headers:this.getHeaders()}).pipe(lt(this.timeout),De(this.handleError))}getMessages(t,n=0,r=100){let i=new Ze().set("offset",n.toString()).set("limit",r.toString());return this.http.get(`${this.apiUrl}/conversations/${t}/messages`,{headers:this.getHeaders(),params:i}).pipe(lt(this.timeout),De(this.handleError))}handleError=t=>{this.logger.error("API Error:",t);let n="An error occurred";return t.error instanceof ErrorEvent?n=`Error: ${t.error.message}`:n=`Error Code: ${t.status}
24
- Message: ${t.message}`,Tu(()=>new Error(n))};static \u0275fac=function(t){return new(t||Sr)};static \u0275prov=O({token:Sr,factory:Sr.\u0275fac,providedIn:"root"})},A_=class Or{apiService=v(D_);logger=v(kt);chatState=ue({messages:[],isLoading:!1,currentInput:""});currentConversationId=null;mockAppId="00000000-0000-0000-0000-000000000001";typingSimulationDelay=500;getState(){return this.chatState.asReadonly()}addMessage(t,n){let r={id:this.generateId(),text:t,sender:n,timestamp:new Date,isTyping:!1};this.chatState.update(i=>N(M({},i),{messages:[...i.messages,r]}))}sendMessage(t){return X(this,null,function*(){try{this.addMessage(t,"user"),this.chatState.update(i=>N(M({},i),{isLoading:!0})),this.currentConversationId||(yield this.createConversation());let n={id:"typing-"+Date.now(),text:"",sender:"assistant",timestamp:new Date,isTyping:!0};this.chatState.update(i=>N(M({},i),{messages:[...i.messages,n]})),yield this.delay(this.typingSimulationDelay);let r=yield ut(this.apiService.sendMessage(this.currentConversationId,{message:t}));this.chatState.update(i=>N(M({},i),{messages:i.messages.filter(s=>s.id!==n.id),isLoading:!1})),this.addMessage(r.assistantMessage,"assistant")}catch(n){this.logger.error("Error sending message:",n),this.chatState.update(r=>N(M({},r),{messages:r.messages.filter(i=>!i.isTyping),isLoading:!1})),this.addMessage("Sorry, I encountered an error. Please try again.","assistant")}})}createConversation(){return X(this,null,function*(){try{let t=yield ut(this.apiService.createConversation({appId:this.mockAppId,title:"New Chat"}));this.currentConversationId=t.id}catch(t){throw this.logger.error("Error creating conversation:",t),t}})}loadConversation(t){return X(this,null,function*(){try{this.chatState.update(r=>N(M({},r),{isLoading:!0}));let n=(yield ut(this.apiService.getMessages(t))).messages.map(r=>({id:r.id,text:r.content,sender:r.role==="user"?"user":"assistant",timestamp:new Date(r.createdAt),isTyping:!1}));this.currentConversationId=t,this.chatState.update(r=>N(M({},r),{messages:n,isLoading:!1}))}catch(n){this.logger.error("Error loading conversation:",n),this.chatState.update(r=>N(M({},r),{isLoading:!1}))}})}clearChat(){this.chatState.update(t=>N(M({},t),{messages:[]})),this.currentConversationId=null}getCurrentConversationId(){return this.currentConversationId}getConversations(t,n,r=0,i=50){return X(this,null,function*(){try{return yield ut(this.apiService.getConversations(t,n,r,i))}catch(s){throw this.logger.error("Error loading conversations:",s),s}})}deleteConversation(t){return X(this,null,function*(){try{yield ut(this.apiService.deleteConversation(t)),this.currentConversationId===t&&this.clearChat()}catch(n){throw this.logger.error("Error deleting conversation:",n),n}})}updateConversationTitle(t,n){return X(this,null,function*(){try{yield ut(this.apiService.updateConversationTitle(t,{title:n}))}catch(r){throw this.logger.error("Error updating conversation title:",r),r}})}generateId(){return`msg-${Date.now()}-${Math.random().toString(36).substr(2,9)}`}delay(t){return new Promise(n=>setTimeout(n,t))}static \u0275fac=function(t){return new(t||Or)};static \u0275prov=O({token:Or,factory:Or.\u0275fac,providedIn:"root"})},V_=class Er{constructor(t){this.logger=t,this.initializeRecognition()}recognition=null;isSupported=!1;resolveStop=null;statusSignal=ue({state:"idle",transcript:"",interimTranscript:""});getStatus(){return this.statusSignal.asReadonly()}isVoiceRecognitionSupported(){return this.isSupported}getCurrentTranscript(){return this.statusSignal().transcript}initializeRecognition(){let t=window.SpeechRecognition||window.webkitSpeechRecognition;if(!t){this.logger.warn("Speech Recognition API is not supported in this browser"),this.isSupported=!1;return}this.isSupported=!0,this.recognition=new t,this.recognition.continuous=!0,this.recognition.interimResults=!0,this.recognition.lang="en-US",this.recognition.maxAlternatives=1,this.recognition.onstart=()=>{this.logger.debug("Voice recognition started"),this.statusSignal.update(n=>N(M({},n),{state:"listening",errorMessage:void 0}))},this.recognition.onresult=n=>{let r="",i=this.statusSignal().transcript;this.logger.debug("Voice recognition onresult event",{resultIndex:n.resultIndex,resultsLength:n.results.length});for(let s=n.resultIndex;s<n.results.length;s++){let o=n.results[s][0].transcript,a=n.results[s].isFinal;this.logger.debug(`Result ${s}:`,{transcript:o,isFinal:a}),a?i+=o+" ":r+=o}this.statusSignal.update(s=>N(M({},s),{transcript:i.trim(),interimTranscript:r.trim()})),this.logger.debug("Updated status:",{transcript:i.trim(),interimTranscript:r.trim()})},this.recognition.onerror=n=>{this.logger.error("Voice recognition error:",n.error);let r="Voice recognition error";switch(n.error){case"no-speech":r="No speech detected. Please try again.";break;case"audio-capture":r="No microphone found. Please check your microphone.";break;case"not-allowed":r="Microphone access denied. Please allow microphone access.";break;case"network":r="Network error occurred. Please check your connection.";break;default:r=`Voice recognition error: ${n.error}`}this.statusSignal.update(i=>N(M({},i),{state:"error",errorMessage:r}))},this.recognition.onend=()=>{this.logger.debug("Voice recognition ended");let n=this.statusSignal().transcript;this.logger.debug("Final transcript:",n),this.resolveStop&&(this.resolveStop({transcript:n.trim(),success:n.trim().length>0}),this.resolveStop=null),this.statusSignal.set({state:"idle",transcript:"",interimTranscript:"",errorMessage:void 0})}}startListening(t="en-US"){if(!this.isSupported){this.statusSignal.set({state:"error",transcript:"",interimTranscript:"",errorMessage:"Voice recognition is not supported in this browser"});return}if(this.statusSignal().state==="listening"){this.logger.warn("Voice recognition is already active");return}this.statusSignal.set({state:"listening",transcript:"",interimTranscript:"",errorMessage:void 0});try{this.recognition.lang=t,this.recognition.start()}catch(n){this.logger.error("Failed to start voice recognition:",n),this.statusSignal.update(r=>N(M({},r),{state:"error",errorMessage:"Failed to start voice recognition"}))}}stopListening(){return X(this,null,function*(){return this.isSupported?this.statusSignal().state!=="listening"?{transcript:"",success:!1}:new Promise(t=>{this.resolveStop=t,this.statusSignal.update(n=>N(M({},n),{state:"processing"}));try{this.recognition.stop()}catch(n){this.logger.error("Failed to stop voice recognition:",n),this.resolveStop=null,this.statusSignal.set({state:"idle",transcript:"",interimTranscript:"",errorMessage:void 0}),t({transcript:"",success:!1})}}):{transcript:"",success:!1}})}cancelListening(){if(this.isSupported){if(this.statusSignal().state==="listening")try{this.recognition.abort()}catch(t){this.logger.error("Failed to cancel voice recognition:",t)}this.resolveStop&&(this.resolveStop({transcript:"",success:!1}),this.resolveStop=null),this.statusSignal.set({state:"idle",transcript:"",interimTranscript:"",errorMessage:void 0})}}static \u0275fac=function(t){return new(t||Er)(C(kt))};static \u0275prov=O({token:Er,factory:Er.\u0275fac,providedIn:"root"})};function N_(e,t){if(e&1&&(g(0,"div",8)(1,"div",9),U(2,"app-icon",10),y(),g(3,"h1",11),F(4),y(),g(5,"p",12),F(6),y(),g(7,"p",13),F(8),y()()),e&2){let n=A();S(4),Oe(n.greeting),S(2),Oe(n.welcomeText),S(2),Oe(n.description)}}function R_(e,t){if(e&1&&U(0,"app-chat-history",14),e&2){let n=A();P("messages",n.messages())}}function F_(e,t){if(e&1){let n=on();g(0,"app-suggestion-button",19),T("buttonClick",function(r){W(n);let i=A(2);return Q(i.onSuggestionClick(r))}),y()}if(e&2){let n=t.$implicit,r=A(2);P("text",n)("disabled",r.isLoading())}}function L_(e,t){if(e&1&&(g(0,"div",15)(1,"p",16),F(2),y(),g(3,"div",17),pe(4,F_,1,2,"app-suggestion-button",18),y()()),e&2){let n=A();S(2),Oe(n.personalizationText),S(2),P("ngForOf",n.suggestions)}}var j_=class Js{config;apiUrl;apiTimeout;title=Be.TITLE;greeting=Be.WELCOME.GREETING;welcomeText=Be.WELCOME.TEXT;description=Be.WELCOME.DESCRIPTION;personalizationText=Be.WELCOME.PERSONALIZATION;inputPlaceholder=Be.INPUT.PLACEHOLDER;suggestions=[...Be.SUGGESTIONS];chatService=v(A_);toastService=v(cf);confirmationService=v(df);voiceRecognition=v(V_);configService=v(ga);logger=v(kt);chatState=this.chatService.getState();messages=Rt(()=>this.chatState().messages);isLoading=Rt(()=>this.chatState().isLoading);hasMessages=Rt(()=>this.messages().length>0);voiceStatus=this.voiceRecognition.getStatus();sidebarOpenSignal=ue(!1);isSidebarOpen=this.sidebarOpenSignal.asReadonly();conversationsSignal=ue([]);conversations=this.conversationsSignal.asReadonly();isLoadingConversationsSignal=ue(!1);isLoadingConversations=this.isLoadingConversationsSignal.asReadonly();searchQuerySignal=ue("");inputValueSignal=ue("");inputValue=this.inputValueSignal.asReadonly();ngOnInit(){if(this.config)this.configService.setConfig(this.config);else if(this.apiUrl||this.apiTimeout){let t=this.configService.getConfig();this.configService.setConfig({apiUrl:this.apiUrl||t.apiUrl,apiTimeout:this.apiTimeout||t.apiTimeout,environmentName:t.environmentName})}}onMenuClick(){return X(this,null,function*(){this.sidebarOpenSignal.set(!0),this.searchQuerySignal.set(""),yield this.loadConversations()})}onCloseClick(){this.chatService.clearChat()}onSuggestionClick(t){return X(this,null,function*(){yield this.chatService.sendMessage(t)})}onMessageSubmit(t){return X(this,null,function*(){t.trim()&&(this.inputValueSignal.set(""),yield this.chatService.sendMessage(t))})}onInputValueChange(t){this.inputValueSignal.set(t)}onVoiceClick(){return X(this,null,function*(){let t=this.voiceStatus();if(!this.voiceRecognition.isVoiceRecognitionSupported()){this.toastService.error("Voice recognition is not supported in your browser. Please try Chrome, Edge, or Safari.");return}if(t.state==="listening"){let n=yield this.voiceRecognition.stopListening();this.logger.debug("Voice recognition result:",n),n.success&&n.transcript?(this.inputValueSignal.set(n.transcript),this.toastService.success("Voice input captured. Click send when ready.")):this.toastService.warning("No speech detected. Please try again.")}else t.state==="idle"?(this.voiceRecognition.startListening(),this.toastService.info("Listening... Click the microphone button again when done.")):t.state==="error"&&this.toastService.error(t.errorMessage||"Voice recognition error")})}onAddClick(){this.toastService.info("Attachment feature coming soon!")}onSidebarBackClick(){this.sidebarOpenSignal.set(!1)}onSidebarSettingsClick(){this.toastService.info("Settings feature coming soon!")}onSidebarCloseClick(){this.sidebarOpenSignal.set(!1)}onConversationClick(t){return X(this,null,function*(){this.sidebarOpenSignal.set(!1);try{yield this.chatService.loadConversation(t)}catch(n){this.logger.error("Failed to load conversation:",n),this.toastService.error("Failed to load conversation. Please try again.")}})}onConversationDeleteClick(t){return X(this,null,function*(){if(this.logger.debug("Delete conversation:",t),!!(yield this.confirmationService.confirm({title:"Delete Conversation",message:"Are you sure you want to delete this conversation? This action cannot be undone.",confirmText:"Delete",cancelText:"Cancel",confirmColor:"danger"})))try{yield this.chatService.deleteConversation(t);let n=this.conversationsSignal();this.conversationsSignal.set(n.filter(r=>r.id!==t)),this.toastService.success("Conversation deleted successfully")}catch(n){this.logger.error("Failed to delete conversation:",n),this.toastService.error("Failed to delete conversation. Please try again.")}})}onNewChatClick(){this.chatService.clearChat(),this.sidebarOpenSignal.set(!1)}onSearchChange(t){return X(this,null,function*(){this.searchQuerySignal.set(t),yield this.loadConversations()})}onConversationTitleUpdate(t){return X(this,null,function*(){try{yield this.chatService.updateConversationTitle(t.id,t.title);let n=this.conversationsSignal();this.conversationsSignal.set(n.map(r=>r.id===t.id?N(M({},r),{title:t.title}):r)),this.toastService.success("Conversation title updated")}catch(n){this.logger.error("Failed to update conversation title:",n),this.toastService.error("Failed to update conversation title. Please try again.")}})}loadConversations(){return X(this,null,function*(){if(!this.isLoadingConversationsSignal()){this.isLoadingConversationsSignal.set(!0);try{let t=this.searchQuerySignal(),n=(yield this.chatService.getConversations(void 0,t||void 0)).conversations.map(r=>({id:r.id,title:r.title||"Untitled Conversation",date:new Date(r.createdAt).toLocaleDateString("ru-RU",{day:"2-digit",month:"2-digit",year:"numeric"})}));this.conversationsSignal.set(n)}catch(t){this.logger.error("Failed to load conversations:",t)}finally{this.isLoadingConversationsSignal.set(!1)}}})}static \u0275fac=function(t){return new(t||Js)};static \u0275cmp=Me({type:Js,selectors:[["app-assistant"]],inputs:{config:"config",apiUrl:"apiUrl",apiTimeout:"apiTimeout",title:"title",greeting:"greeting",welcomeText:"welcomeText",description:"description",personalizationText:"personalizationText",inputPlaceholder:"inputPlaceholder",suggestions:"suggestions"},decls:10,vars:11,consts:[[3,"backClick","settingsClick","closeClick","conversationClick","deleteClick","newChatClick","searchChange","titleUpdate","isOpen","conversations","isLoading"],[1,"assistant-page"],[3,"menuClick","closeClick","title"],[1,"content"],["class","welcome-container",4,"ngIf"],[3,"messages",4,"ngIf"],["class","personalization-section",4,"ngIf"],[3,"valueChange","submitMessage","voiceClick","addClick","placeholder","disabled","voiceStatus","value"],[1,"welcome-container"],[1,"icon-wrapper"],["name","sparkle","width","64","height","64","dropShadow","drop-shadow(0 4px 8px rgba(255, 107, 107, 0.2))",1,"sparkle-icon"],[1,"greeting"],[1,"welcome-text"],[1,"description"],[3,"messages"],[1,"personalization-section"],[1,"personalization-text"],[1,"suggestions"],[3,"text","disabled","buttonClick",4,"ngFor","ngForOf"],[3,"buttonClick","text","disabled"]],template:function(t,n){t&1&&(g(0,"app-sidebar",0),T("backClick",function(){return n.onSidebarBackClick()})("settingsClick",function(){return n.onSidebarSettingsClick()})("closeClick",function(){return n.onSidebarCloseClick()})("conversationClick",function(r){return n.onConversationClick(r)})("deleteClick",function(r){return n.onConversationDeleteClick(r)})("newChatClick",function(){return n.onNewChatClick()})("searchChange",function(r){return n.onSearchChange(r)})("titleUpdate",function(r){return n.onConversationTitleUpdate(r)}),y(),g(1,"div",1)(2,"app-header",2),T("menuClick",function(){return n.onMenuClick()})("closeClick",function(){return n.onCloseClick()}),y(),g(3,"div",3),pe(4,N_,9,3,"div",4)(5,R_,1,1,"app-chat-history",5)(6,L_,5,2,"div",6),y(),g(7,"app-input-field",7),T("valueChange",function(r){return n.onInputValueChange(r)})("submitMessage",function(r){return n.onMessageSubmit(r)})("voiceClick",function(){return n.onVoiceClick()})("addClick",function(){return n.onAddClick()}),y()(),U(8,"app-toast-container")(9,"app-confirmation-modal")),t&2&&(P("isOpen",n.isSidebarOpen())("conversations",n.conversations())("isLoading",n.isLoadingConversations()),S(2),P("title",n.title),S(2),P("ngIf",!n.hasMessages()),S(),P("ngIf",n.hasMessages()),S(),P("ngIf",!n.hasMessages()),S(),P("placeholder",n.inputPlaceholder)("disabled",n.isLoading())("voiceStatus",n.voiceStatus())("value",n.inputValue()))},dependencies:[Ce,wi,an,_w,xw,a_,ln,g_,x_,M_,P_],styles:[".assistant-page[_ngcontent-%COMP%]{display:flex;flex-direction:column;height:100vh;max-height:100vh;background:#fff;font-family:Roboto,-apple-system,BlinkMacSystemFont,Segoe UI,Arial,sans-serif;overflow:hidden}.content[_ngcontent-%COMP%]{flex:1;display:flex;flex-direction:column;overflow:hidden;min-height:0;position:relative}app-chat-history[_ngcontent-%COMP%]{flex:1;display:flex;flex-direction:column;min-height:0;overflow:hidden}.welcome-container[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;justify-content:flex-end;padding:20px 24px 30px;text-align:center;flex:1}.icon-wrapper[_ngcontent-%COMP%]{margin-bottom:16px}.greeting[_ngcontent-%COMP%]{font-size:28px;font-weight:700;margin:0 0 12px;color:#1a1a1a}.welcome-text[_ngcontent-%COMP%]{font-size:18px;font-weight:500;margin:0 0 12px;color:#333}.description[_ngcontent-%COMP%]{font-size:15px;font-weight:400;margin:0 0 20px;color:#666;max-width:400px;line-height:1.4}.personalization-section[_ngcontent-%COMP%]{padding:0 24px 24px;display:flex;flex-direction:column;align-items:center;gap:16px;flex-shrink:0}.personalization-text[_ngcontent-%COMP%]{font-size:15px;color:#666;margin:0;text-align:center;max-width:400px;line-height:1.4}.suggestions[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;gap:10px;width:100%;max-width:400px}@media (max-width: 768px){.suggestions[_ngcontent-%COMP%]{max-width:100%}}"]})},H_={production:!0};function hf(e){return()=>e.loadConfig()}X(null,null,function*(){if(customElements.get("app-assistant")){console.log("\u26A0\uFE0F Web Component already registered, skipping...");return}let e=yield OC({providers:[em(),X1({eventCoalescing:!0}),aw(lw()),{provide:ih,useFactory:hf,deps:[ga],multi:!0},Sh,ww.forRoot({level:H_.production?q.WARN:q.DEBUG,serverLogLevel:q.ERROR,disableConsoleLogging:!1,enableSourceMaps:!0,timestampFormat:"short"}).providers||[]]}),t=Ab(j_,{injector:e.injector});customElements.define("app-assistant",t),console.log("\u2705 Web Component registered: app-assistant")});return yf(z_);})();
23
+ <circle cx="5" cy="12" r="1.5" fill="currentColor"/>`}},ln=class Hs{constructor(t){this.sanitizer=t}name="";width="24";height="24";fill="none";dropShadow="";get viewBox(){return Nl[this.name]?.viewBox||"0 0 24 24"}get svgContent(){let t=Nl[this.name];if(!t)return"";let n=t.path+(t.defs||"");return this.sanitizer.bypassSecurityTrustHtml(n)}static \u0275fac=function(t){return new(t||Hs)(j(Gh))};static \u0275cmp=Me({type:Hs,selectors:[["app-icon"]],inputs:{name:"name",width:"width",height:"height",fill:"fill",dropShadow:"dropShadow"},decls:1,vars:7,consts:[["xmlns","http://www.w3.org/2000/svg",3,"innerHTML"]],template:function(t,n){t&1&&(Gg(),oh(0,"svg",0)),t&2&&(fh("filter",n.dropShadow),ch("innerHTML",n.svgContent,fd),Ko("width",n.width)("height",n.height)("viewBox",n.viewBox)("fill",n.fill))},dependencies:[Ce],styles:["[_nghost-%COMP%]{display:inline-block;line-height:0}"]})},Be={TITLE:"App Agent",WELCOME:{GREETING:"Hi!",TEXT:"Welcome to Open as App!",DESCRIPTION:"I'm your AI assistant, and I'm here to help you get started.",PERSONALIZATION:"To personalize my guidance, could you tell me what you're hoping to do?"},INPUT:{PLACEHOLDER:"Ask me anything..."},SUGGESTIONS:["Summarize data","What are the key columns","What is this app about"]},_w=class zs{title=Be.TITLE;menuClick=new R;closeClick=new R;onMenuClick(){this.menuClick.emit()}onCloseClick(){this.closeClick.emit()}static \u0275fac=function(t){return new(t||zs)};static \u0275cmp=Me({type:zs,selectors:[["app-header"]],inputs:{title:"title"},outputs:{menuClick:"menuClick",closeClick:"closeClick"},decls:9,vars:1,consts:[[1,"header"],["aria-label","Menu",1,"icon-button","menu-button",3,"click"],["name","menu","width","24","height","24"],[1,"header-title"],["name","sparkle","width","24","height","24",1,"title-icon"],["aria-label","Close",1,"icon-button","close-button",3,"click"],["name","close","width","24","height","24"]],template:function(t,n){t&1&&(g(0,"div",0)(1,"button",1),T("click",function(){return n.onMenuClick()}),U(2,"app-icon",2),y(),g(3,"div",3),U(4,"app-icon",4),g(5,"span"),F(6),y()(),g(7,"button",5),T("click",function(){return n.onCloseClick()}),U(8,"app-icon",6),y()()),t&2&&(S(6),Oe(n.title))},dependencies:[Ce,ln],styles:[".header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;background:#fff;border-bottom:1px solid #f0f0f0;height:64px;box-sizing:border-box}.icon-button[_ngcontent-%COMP%]{background:none;border:none;cursor:pointer;padding:8px;display:flex;align-items:center;justify-content:center;border-radius:8px;transition:background-color .2s;color:#333}.icon-button[_ngcontent-%COMP%]:hover{background-color:#f5f5f5}.icon-button[_ngcontent-%COMP%]:active{background-color:#e0e0e0}.header-title[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;font-size:20px;font-weight:600;color:#ff6b6b;flex:1;justify-content:center}.title-icon[_ngcontent-%COMP%]{width:24px;height:24px}.menu-button[_ngcontent-%COMP%], .close-button[_ngcontent-%COMP%]{width:40px;height:40px}.close-button[_ngcontent-%COMP%]{background-color:#f5f5f5;border-radius:50%}.close-button[_ngcontent-%COMP%]:hover{background-color:#e8e8e8}"]})},xw=class Bs{text="";disabled=!1;buttonClick=new R;onClick(){this.disabled||this.buttonClick.emit(this.text)}static \u0275fac=function(t){return new(t||Bs)};static \u0275cmp=Me({type:Bs,selectors:[["app-suggestion-button"]],inputs:{text:"text",disabled:"disabled"},outputs:{buttonClick:"buttonClick"},decls:2,vars:3,consts:[[1,"suggestion-button",3,"click"]],template:function(t,n){t&1&&(Xo(0,"button",0),dh("click",function(){return n.onClick()}),F(1),ea()),t&2&&(Ee("disabled",n.disabled),S(),Vn(" ",n.text," "))},dependencies:[Ce],styles:[".suggestion-button[_ngcontent-%COMP%]{background:#fff;border:1.5px solid #FF6B6B;border-radius:8px;padding:14px 24px;font-size:15px;font-weight:500;color:#ff6b6b;cursor:pointer;transition:all .2s ease;white-space:nowrap;box-shadow:0 2px 4px #0000000d;display:inline-block;width:auto;text-align:center}.suggestion-button[_ngcontent-%COMP%]:hover:not(.disabled){background:#fff5f5;border-color:#ff5252;transform:translateY(-1px);box-shadow:0 4px 8px #ff6b6b26}.suggestion-button[_ngcontent-%COMP%]:active:not(.disabled){transform:translateY(0);box-shadow:0 2px 4px #0000000d}.suggestion-button.disabled[_ngcontent-%COMP%]{opacity:.5;cursor:not-allowed}"]})},Qh=(()=>{class e{_renderer;_elementRef;onChange=n=>{};onTouched=()=>{};constructor(n,r){this._renderer=n,this._elementRef=r}setProperty(n,r){this._renderer.setProperty(this._elementRef.nativeElement,n,r)}registerOnTouched(n){this.onTouched=n}registerOnChange(n){this.onChange=n}setDisabledState(n){this.setProperty("disabled",n)}static \u0275fac=function(n){return new(n||e)(j(zd),j(tn))};static \u0275dir=Ie({type:e})}return e})(),kw=(()=>{class e extends Qh{static \u0275fac=(()=>{let n;return function(r){return(n||(n=zc(e)))(r||e)}})();static \u0275dir=Ie({type:e,features:[sn]})}return e})(),Yh=new k(""),Sw={provide:Yh,useExisting:Nn(()=>Zn),multi:!0};function Ow(){let e=Kr()?Kr().getUserAgent():"";return/android (\d+)/.test(e.toLowerCase())}var Ew=new k(""),Zn=(()=>{class e extends Qh{_compositionMode;_composing=!1;constructor(n,r,i){super(n,r),this._compositionMode=i,this._compositionMode==null&&(this._compositionMode=!Ow())}writeValue(n){let r=n??"";this.setProperty("value",r)}_handleInput(n){(!this._compositionMode||this._compositionMode&&!this._composing)&&this.onChange(n)}_compositionStart(){this._composing=!0}_compositionEnd(n){this._composing=!1,this._compositionMode&&this.onChange(n)}static \u0275fac=function(n){return new(n||e)(j(zd),j(tn),j(Ew,8))};static \u0275dir=Ie({type:e,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(n,r){n&1&&T("input",function(i){return r._handleInput(i.target.value)})("blur",function(){return r.onTouched()})("compositionstart",function(){return r._compositionStart()})("compositionend",function(i){return r._compositionEnd(i.target.value)})},standalone:!1,features:[ra([Sw]),sn]})}return e})();function Tw(e){return e==null?null:Array.isArray(e)||typeof e=="string"?e.length:e instanceof Set?e.size:null}var Jh=new k(""),Mw=new k("");function Iw(e){return t=>{let n=t.value?.length??Tw(t.value);return n!==null&&n>e?{maxlength:{requiredLength:e,actualLength:n}}:null}}function Rl(e){return null}function Kh(e){return e!=null}function Xh(e){return Jo(e)?ao(e):e}function ef(e){let t={};return e.forEach(n=>{t=n!=null?M(M({},t),n):t}),Object.keys(t).length===0?null:t}function tf(e,t){return t.map(n=>n(e))}function Pw(e){return!e.validate}function nf(e){return e.map(t=>Pw(t)?t:n=>t.validate(n))}function Dw(e){if(!e)return null;let t=e.filter(Kh);return t.length==0?null:function(n){return ef(tf(n,t))}}function rf(e){return e!=null?Dw(nf(e)):null}function Aw(e){if(!e)return null;let t=e.filter(Kh);return t.length==0?null:function(n){let r=tf(n,t).map(Xh);return Hp(r).pipe(ke(ef))}}function sf(e){return e!=null?Aw(nf(e)):null}function Fl(e,t){return e===null?[t]:Array.isArray(e)?[...e,t]:[e,t]}function Vw(e){return e._rawValidators}function Nw(e){return e._rawAsyncValidators}function Us(e){return e?Array.isArray(e)?e:[e]:[]}function ei(e,t){return Array.isArray(e)?e.includes(t):e===t}function Ll(e,t){let n=Us(t);return Us(e).forEach(r=>{ei(n,r)||n.push(r)}),n}function jl(e,t){return Us(t).filter(n=>!ei(e,n))}var of=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(e){this._rawValidators=e||[],this._composedValidatorFn=rf(this._rawValidators)}_setAsyncValidators(e){this._rawAsyncValidators=e||[],this._composedAsyncValidatorFn=sf(this._rawAsyncValidators)}get validator(){return this._composedValidatorFn||null}get asyncValidator(){return this._composedAsyncValidatorFn||null}_onDestroyCallbacks=[];_registerOnDestroy(e){this._onDestroyCallbacks.push(e)}_invokeOnDestroyCallbacks(){this._onDestroyCallbacks.forEach(e=>e()),this._onDestroyCallbacks=[]}reset(e=void 0){this.control&&this.control.reset(e)}hasError(e,t){return this.control?this.control.hasError(e,t):!1}getError(e,t){return this.control?this.control.getError(e,t):null}},Rw=class extends of{name;get formDirective(){return null}get path(){return null}},da=class extends of{_parent=null;name=null;valueAccessor=null},Fw=class{_cd;constructor(e){this._cd=e}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}},Lw={"[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"},q_=N(M({},Lw),{"[class.ng-submitted]":"isSubmitted"}),ha=(()=>{class e extends Fw{constructor(n){super(n)}static \u0275fac=function(n){return new(n||e)(j(da,2))};static \u0275dir=Ie({type:e,selectors:[["","formControlName",""],["","ngModel",""],["","formControl",""]],hostVars:14,hostBindings:function(n,r){n&2&&Ee("ng-untouched",r.isUntouched)("ng-touched",r.isTouched)("ng-pristine",r.isPristine)("ng-dirty",r.isDirty)("ng-valid",r.isValid)("ng-invalid",r.isInvalid)("ng-pending",r.isPending)},standalone:!1,features:[sn]})}return e})(),hn="VALID",ar="INVALID",Mt="PENDING",fn="DISABLED",qn=class{},Hl=class extends qn{value;source;constructor(e,t){super(),this.value=e,this.source=t}},ns=class extends qn{pristine;source;constructor(e,t){super(),this.pristine=e,this.source=t}},rs=class extends qn{touched;source;constructor(e,t){super(),this.touched=e,this.source=t}},lr=class extends qn{status;source;constructor(e,t){super(),this.status=e,this.source=t}},jw=class extends qn{source;constructor(e){super(),this.source=e}};function Hw(e){return(ki(e)?e.validators:e)||null}function zw(e){return Array.isArray(e)?rf(e):e||null}function Bw(e,t){return(ki(t)?t.asyncValidators:e)||null}function Uw(e){return Array.isArray(e)?sf(e):e||null}function ki(e){return e!=null&&!Array.isArray(e)&&typeof e=="object"}var $w=class{_pendingDirty=!1;_hasOwnPendingAsyncValidator=null;_pendingTouched=!1;_onCollectionChange=()=>{};_updateOn;_parent=null;_asyncValidationSubscription;_composedValidatorFn;_composedAsyncValidatorFn;_rawValidators;_rawAsyncValidators;value;constructor(e,t){this._assignValidators(e),this._assignAsyncValidators(t)}get validator(){return this._composedValidatorFn}set validator(e){this._rawValidators=this._composedValidatorFn=e}get asyncValidator(){return this._composedAsyncValidatorFn}set asyncValidator(e){this._rawAsyncValidators=this._composedAsyncValidatorFn=e}get parent(){return this._parent}get status(){return Tt(this.statusReactive)}set status(e){Tt(()=>this.statusReactive.set(e))}_status=Rt(()=>this.statusReactive());statusReactive=ue(void 0);get valid(){return this.status===hn}get invalid(){return this.status===ar}get pending(){return this.status==Mt}get disabled(){return this.status===fn}get enabled(){return this.status!==fn}errors;get pristine(){return Tt(this.pristineReactive)}set pristine(e){Tt(()=>this.pristineReactive.set(e))}_pristine=Rt(()=>this.pristineReactive());pristineReactive=ue(!0);get dirty(){return!this.pristine}get touched(){return Tt(this.touchedReactive)}set touched(e){Tt(()=>this.touchedReactive.set(e))}_touched=Rt(()=>this.touchedReactive());touchedReactive=ue(!1);get untouched(){return!this.touched}_events=new st;events=this._events.asObservable();valueChanges;statusChanges;get updateOn(){return this._updateOn?this._updateOn:this.parent?this.parent.updateOn:"change"}setValidators(e){this._assignValidators(e)}setAsyncValidators(e){this._assignAsyncValidators(e)}addValidators(e){this.setValidators(Ll(e,this._rawValidators))}addAsyncValidators(e){this.setAsyncValidators(Ll(e,this._rawAsyncValidators))}removeValidators(e){this.setValidators(jl(e,this._rawValidators))}removeAsyncValidators(e){this.setAsyncValidators(jl(e,this._rawAsyncValidators))}hasValidator(e){return ei(this._rawValidators,e)}hasAsyncValidator(e){return ei(this._rawAsyncValidators,e)}clearValidators(){this.validator=null}clearAsyncValidators(){this.asyncValidator=null}markAsTouched(e={}){let t=this.touched===!1;this.touched=!0;let n=e.sourceControl??this;this._parent&&!e.onlySelf&&this._parent.markAsTouched(N(M({},e),{sourceControl:n})),t&&e.emitEvent!==!1&&this._events.next(new rs(!0,n))}markAllAsDirty(e={}){this.markAsDirty({onlySelf:!0,emitEvent:e.emitEvent,sourceControl:this}),this._forEachChild(t=>t.markAllAsDirty(e))}markAllAsTouched(e={}){this.markAsTouched({onlySelf:!0,emitEvent:e.emitEvent,sourceControl:this}),this._forEachChild(t=>t.markAllAsTouched(e))}markAsUntouched(e={}){let t=this.touched===!0;this.touched=!1,this._pendingTouched=!1;let n=e.sourceControl??this;this._forEachChild(r=>{r.markAsUntouched({onlySelf:!0,emitEvent:e.emitEvent,sourceControl:n})}),this._parent&&!e.onlySelf&&this._parent._updateTouched(e,n),t&&e.emitEvent!==!1&&this._events.next(new rs(!1,n))}markAsDirty(e={}){let t=this.pristine===!0;this.pristine=!1;let n=e.sourceControl??this;this._parent&&!e.onlySelf&&this._parent.markAsDirty(N(M({},e),{sourceControl:n})),t&&e.emitEvent!==!1&&this._events.next(new ns(!1,n))}markAsPristine(e={}){let t=this.pristine===!1;this.pristine=!0,this._pendingDirty=!1;let n=e.sourceControl??this;this._forEachChild(r=>{r.markAsPristine({onlySelf:!0,emitEvent:e.emitEvent})}),this._parent&&!e.onlySelf&&this._parent._updatePristine(e,n),t&&e.emitEvent!==!1&&this._events.next(new ns(!0,n))}markAsPending(e={}){this.status=Mt;let t=e.sourceControl??this;e.emitEvent!==!1&&(this._events.next(new lr(this.status,t)),this.statusChanges.emit(this.status)),this._parent&&!e.onlySelf&&this._parent.markAsPending(N(M({},e),{sourceControl:t}))}disable(e={}){let t=this._parentMarkedDirty(e.onlySelf);this.status=fn,this.errors=null,this._forEachChild(r=>{r.disable(N(M({},e),{onlySelf:!0}))}),this._updateValue();let n=e.sourceControl??this;e.emitEvent!==!1&&(this._events.next(new Hl(this.value,n)),this._events.next(new lr(this.status,n)),this.valueChanges.emit(this.value),this.statusChanges.emit(this.status)),this._updateAncestors(N(M({},e),{skipPristineCheck:t}),this),this._onDisabledChange.forEach(r=>r(!0))}enable(e={}){let t=this._parentMarkedDirty(e.onlySelf);this.status=hn,this._forEachChild(n=>{n.enable(N(M({},e),{onlySelf:!0}))}),this.updateValueAndValidity({onlySelf:!0,emitEvent:e.emitEvent}),this._updateAncestors(N(M({},e),{skipPristineCheck:t}),this),this._onDisabledChange.forEach(n=>n(!1))}_updateAncestors(e,t){this._parent&&!e.onlySelf&&(this._parent.updateValueAndValidity(e),e.skipPristineCheck||this._parent._updatePristine({},t),this._parent._updateTouched({},t))}setParent(e){this._parent=e}getRawValue(){return this.value}updateValueAndValidity(e={}){if(this._setInitialStatus(),this._updateValue(),this.enabled){let n=this._cancelExistingSubscription();this.errors=this._runValidator(),this.status=this._calculateStatus(),(this.status===hn||this.status===Mt)&&this._runAsyncValidator(n,e.emitEvent)}let t=e.sourceControl??this;e.emitEvent!==!1&&(this._events.next(new Hl(this.value,t)),this._events.next(new lr(this.status,t)),this.valueChanges.emit(this.value),this.statusChanges.emit(this.status)),this._parent&&!e.onlySelf&&this._parent.updateValueAndValidity(N(M({},e),{sourceControl:t}))}_updateTreeValidity(e={emitEvent:!0}){this._forEachChild(t=>t._updateTreeValidity(e)),this.updateValueAndValidity({onlySelf:!0,emitEvent:e.emitEvent})}_setInitialStatus(){this.status=this._allControlsDisabled()?fn:hn}_runValidator(){return this.validator?this.validator(this):null}_runAsyncValidator(e,t){if(this.asyncValidator){this.status=Mt,this._hasOwnPendingAsyncValidator={emitEvent:t!==!1,shouldHaveEmitted:e!==!1};let n=Xh(this.asyncValidator(this));this._asyncValidationSubscription=n.subscribe(r=>{this._hasOwnPendingAsyncValidator=null,this.setErrors(r,{emitEvent:t,shouldHaveEmitted:e})})}}_cancelExistingSubscription(){if(this._asyncValidationSubscription){this._asyncValidationSubscription.unsubscribe();let e=(this._hasOwnPendingAsyncValidator?.emitEvent||this._hasOwnPendingAsyncValidator?.shouldHaveEmitted)??!1;return this._hasOwnPendingAsyncValidator=null,e}return!1}setErrors(e,t={}){this.errors=e,this._updateControlsErrors(t.emitEvent!==!1,this,t.shouldHaveEmitted)}get(e){let t=e;return t==null||(Array.isArray(t)||(t=t.split(".")),t.length===0)?null:t.reduce((n,r)=>n&&n._find(r),this)}getError(e,t){let n=t?this.get(t):this;return n&&n.errors?n.errors[e]:null}hasError(e,t){return!!this.getError(e,t)}get root(){let e=this;for(;e._parent;)e=e._parent;return e}_updateControlsErrors(e,t,n){this.status=this._calculateStatus(),e&&this.statusChanges.emit(this.status),(e||n)&&this._events.next(new lr(this.status,t)),this._parent&&this._parent._updateControlsErrors(e,t,n)}_initObservables(){this.valueChanges=new R,this.statusChanges=new R}_calculateStatus(){return this._allControlsDisabled()?fn:this.errors?ar:this._hasOwnPendingAsyncValidator||this._anyControlsHaveStatus(Mt)?Mt:this._anyControlsHaveStatus(ar)?ar:hn}_anyControlsHaveStatus(e){return this._anyControls(t=>t.status===e)}_anyControlsDirty(){return this._anyControls(e=>e.dirty)}_anyControlsTouched(){return this._anyControls(e=>e.touched)}_updatePristine(e,t){let n=!this._anyControlsDirty(),r=this.pristine!==n;this.pristine=n,this._parent&&!e.onlySelf&&this._parent._updatePristine(e,t),r&&this._events.next(new ns(this.pristine,t))}_updateTouched(e={},t){this.touched=this._anyControlsTouched(),this._events.next(new rs(this.touched,t)),this._parent&&!e.onlySelf&&this._parent._updateTouched(e,t)}_onDisabledChange=[];_registerOnCollectionChange(e){this._onCollectionChange=e}_setUpdateStrategy(e){ki(e)&&e.updateOn!=null&&(this._updateOn=e.updateOn)}_parentMarkedDirty(e){let t=this._parent&&this._parent.dirty;return!e&&!!t&&!this._parent._anyControlsDirty()}_find(e){return null}_assignValidators(e){this._rawValidators=Array.isArray(e)?e.slice():e,this._composedValidatorFn=zw(this._rawValidators)}_assignAsyncValidators(e){this._rawAsyncValidators=Array.isArray(e)?e.slice():e,this._composedAsyncValidatorFn=Uw(this._rawAsyncValidators)}},af=new k("",{providedIn:"root",factory:()=>fa}),fa="always";function Zw(e,t){return[...t.path,e]}function qw(e,t,n=fa){Ww(e,t),t.valueAccessor.writeValue(e.value),(e.disabled||n==="always")&&t.valueAccessor.setDisabledState?.(e.disabled),Qw(e,t),Jw(e,t),Yw(e,t),Gw(e,t)}function zl(e,t){e.forEach(n=>{n.registerOnValidatorChange&&n.registerOnValidatorChange(t)})}function Gw(e,t){if(t.valueAccessor.setDisabledState){let n=r=>{t.valueAccessor.setDisabledState(r)};e.registerOnDisabledChange(n),t._registerOnDestroy(()=>{e._unregisterOnDisabledChange(n)})}}function Ww(e,t){let n=Vw(e);t.validator!==null?e.setValidators(Fl(n,t.validator)):typeof n=="function"&&e.setValidators([n]);let r=Nw(e);t.asyncValidator!==null?e.setAsyncValidators(Fl(r,t.asyncValidator)):typeof r=="function"&&e.setAsyncValidators([r]);let i=()=>e.updateValueAndValidity();zl(t._rawValidators,i),zl(t._rawAsyncValidators,i)}function Qw(e,t){t.valueAccessor.registerOnChange(n=>{e._pendingValue=n,e._pendingChange=!0,e._pendingDirty=!0,e.updateOn==="change"&&lf(e,t)})}function Yw(e,t){t.valueAccessor.registerOnTouched(()=>{e._pendingTouched=!0,e.updateOn==="blur"&&e._pendingChange&&lf(e,t),e.updateOn!=="submit"&&e.markAsTouched()})}function lf(e,t){e._pendingDirty&&e.markAsDirty(),e.setValue(e._pendingValue,{emitModelToViewChange:!1}),t.viewToModelUpdate(e._pendingValue),e._pendingChange=!1}function Jw(e,t){let n=(r,i)=>{t.valueAccessor.writeValue(r),i&&t.viewToModelUpdate(r)};e.registerOnChange(n),t._registerOnDestroy(()=>{e._unregisterOnChange(n)})}function Kw(e,t){if(!e.hasOwnProperty("model"))return!1;let n=e.model;return n.isFirstChange()?!0:!Object.is(t,n.currentValue)}function Xw(e){return Object.getPrototypeOf(e.constructor)===kw}function e_(e,t){if(!t)return null;Array.isArray(t);let n,r,i;return t.forEach(s=>{s.constructor===Zn?n=s:Xw(s)?r=s:i=s}),i||r||n||null}function Bl(e,t){let n=e.indexOf(t);n>-1&&e.splice(n,1)}function Ul(e){return typeof e=="object"&&e!==null&&Object.keys(e).length===2&&"value"in e&&"disabled"in e}var t_=class extends $w{defaultValue=null;_onChange=[];_pendingValue;_pendingChange=!1;constructor(e=null,t,n){super(Hw(t),Bw(n,t)),this._applyFormState(e),this._setUpdateStrategy(t),this._initObservables(),this.updateValueAndValidity({onlySelf:!0,emitEvent:!!this.asyncValidator}),ki(t)&&(t.nonNullable||t.initialValueIsDefault)&&(Ul(e)?this.defaultValue=e.value:this.defaultValue=e)}setValue(e,t={}){this.value=this._pendingValue=e,this._onChange.length&&t.emitModelToViewChange!==!1&&this._onChange.forEach(n=>n(this.value,t.emitViewToModelChange!==!1)),this.updateValueAndValidity(t)}patchValue(e,t={}){this.setValue(e,t)}reset(e=this.defaultValue,t={}){this._applyFormState(e),this.markAsPristine(t),this.markAsUntouched(t),this.setValue(this.value,t),this._pendingChange=!1,t?.emitEvent!==!1&&this._events.next(new jw(this))}_updateValue(){}_anyControls(e){return!1}_allControlsDisabled(){return this.disabled}registerOnChange(e){this._onChange.push(e)}_unregisterOnChange(e){Bl(this._onChange,e)}registerOnDisabledChange(e){this._onDisabledChange.push(e)}_unregisterOnDisabledChange(e){Bl(this._onDisabledChange,e)}_forEachChild(e){}_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(e){Ul(e)?(this.value=this._pendingValue=e.value,e.disabled?this.disable({onlySelf:!0,emitEvent:!1}):this.enable({onlySelf:!0,emitEvent:!1})):this.value=this._pendingValue=e}},n_={provide:da,useExisting:Nn(()=>Si)},$l=Promise.resolve(),Si=(()=>{class e extends da{_changeDetectorRef;callSetDisabledState;control=new t_;static ngAcceptInputType_isDisabled;_registered=!1;viewModel;name="";isDisabled;model;options;update=new R;constructor(n,r,i,s,o,a){super(),this._changeDetectorRef=o,this.callSetDisabledState=a,this._parent=n,this._setValidators(r),this._setAsyncValidators(i),this.valueAccessor=e_(this,s)}ngOnChanges(n){if(this._checkForErrors(),!this._registered||"name"in n){if(this._registered&&(this._checkName(),this.formDirective)){let r=n.name.previousValue;this.formDirective.removeControl({name:r,path:this._getPath(r)})}this._setUpControl()}"isDisabled"in n&&this._updateDisabled(n),Kw(n,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(n){this.viewModel=n,this.update.emit(n)}_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(){qw(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(n){$l.then(()=>{this.control.setValue(n,{emitViewToModelChange:!1}),this._changeDetectorRef?.markForCheck()})}_updateDisabled(n){let r=n.isDisabled.currentValue,i=r!==0&&Cb(r);$l.then(()=>{i&&!this.control.disabled?this.control.disable():!i&&this.control.disabled&&this.control.enable(),this._changeDetectorRef?.markForCheck()})}_getPath(n){return this._parent?Zw(n,this._parent):[n]}static \u0275fac=function(n){return new(n||e)(j(Rw,9),j(Jh,10),j(Mw,10),j(Yh,10),j(db,8),j(af,8))};static \u0275dir=Ie({type:e,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:[ra([n_]),sn,hi]})}return e})();function r_(e){return typeof e=="number"?e:parseInt(e,10)}var i_=(()=>{class e{_validator=Rl;_onChange;_enabled;ngOnChanges(n){if(this.inputName in n){let r=this.normalizeInput(n[this.inputName].currentValue);this._enabled=this.enabled(r),this._validator=this._enabled?this.createValidator(r):Rl,this._onChange&&this._onChange()}}validate(n){return this._validator(n)}registerOnValidatorChange(n){this._onChange=n}enabled(n){return n!=null}static \u0275fac=function(n){return new(n||e)};static \u0275dir=Ie({type:e,features:[hi]})}return e})(),s_={provide:Jh,useExisting:Nn(()=>uf),multi:!0},uf=(()=>{class e extends i_{maxlength;inputName="maxlength";normalizeInput=n=>r_(n);createValidator=n=>Iw(n);static \u0275fac=(()=>{let n;return function(r){return(n||(n=zc(e)))(r||e)}})();static \u0275dir=Ie({type:e,selectors:[["","maxlength","","formControlName",""],["","maxlength","","formControl",""],["","maxlength","","ngModel",""]],hostVars:1,hostBindings:function(n,r){n&2&&Ko("maxlength",r._enabled?r.maxlength:null)},inputs:{maxlength:"maxlength"},standalone:!1,features:[ra([s_]),sn]})}return e})(),o_=(()=>{class e{static \u0275fac=function(n){return new(n||e)};static \u0275mod=bi({type:e});static \u0275inj=ri({})}return e})(),pa=(()=>{class e{static withConfig(n){return{ngModule:e,providers:[{provide:af,useValue:n.callSetDisabledState??fa}]}}static \u0275fac=function(n){return new(n||e)};static \u0275mod=bi({type:e});static \u0275inj=ri({imports:[o_]})}return e})(),a_=class $s{placeholder=Be.INPUT.PLACEHOLDER;disabled=!1;value="";voiceStatus={state:"idle",transcript:"",interimTranscript:""};valueChange=new R;submitMessage=new R;voiceClick=new R;addClick=new R;get isListening(){return this.voiceStatus.state==="listening"}get displayValue(){if(this.isListening){let t=this.voiceStatus.transcript||"",n=this.voiceStatus.interimTranscript||"";return t+(t&&n?" ":"")+n}return this.value}get displayPlaceholder(){return this.isListening?"Listening... Speak now":this.placeholder}onInputChange(t){!this.isListening&&t!==void 0&&(this.value=t,this.valueChange.emit(this.value))}onSubmit(){if(this.value.trim()&&!this.isListening){let t=this.value;this.value="",this.valueChange.emit(this.value),this.submitMessage.emit(t)}}onVoiceClick(){this.voiceClick.emit()}onAddClick(){this.addClick.emit()}static \u0275fac=function(t){return new(t||$s)};static \u0275cmp=Me({type:$s,selectors:[["app-input-field"]],inputs:{placeholder:"placeholder",disabled:"disabled",value:"value",voiceStatus:"voiceStatus"},outputs:{valueChange:"valueChange",submitMessage:"submitMessage",voiceClick:"voiceClick",addClick:"addClick"},decls:7,vars:8,consts:[[1,"input-container"],[1,"input-wrapper"],["aria-label","Add",1,"icon-button","add-button",3,"click"],["name","add","width","24","height","24"],["type","text",1,"input-field",3,"ngModelChange","keyup.enter","ngModel","placeholder","disabled","readonly"],["aria-label","Voice input",1,"icon-button","voice-button",3,"click"],["name","microphone","width","24","height","24","fill","currentColor"]],template:function(t,n){t&1&&(g(0,"div",0)(1,"div",1)(2,"button",2),T("click",function(){return n.onAddClick()}),U(3,"app-icon",3),y(),g(4,"input",4),T("ngModelChange",function(r){return n.onInputChange(r)})("keyup.enter",function(){return n.onSubmit()}),y(),g(5,"button",5),T("click",function(){return n.onVoiceClick()}),U(6,"app-icon",6),y()()()),t&2&&(S(4),Ee("listening",n.isListening),P("ngModel",n.displayValue)("placeholder",n.displayPlaceholder)("disabled",n.disabled||n.isListening)("readonly",n.isListening),S(),Ee("active",n.isListening))},dependencies:[Ce,pa,Zn,ha,Si,ln],styles:[".input-container[_ngcontent-%COMP%]{padding:16px 20px;background:#fff;border-top:1px solid #f0f0f0}.input-wrapper[_ngcontent-%COMP%]{display:flex;align-items:center;gap:12px;background:#f8f8f8;border-radius:12px;padding:8px 16px;transition:background-color .2s}.input-wrapper[_ngcontent-%COMP%]:focus-within{background:#f0f0f0}.input-field[_ngcontent-%COMP%]{flex:1;border:none;background:transparent;font-size:15px;color:#333;outline:none;padding:8px 0}.input-field[_ngcontent-%COMP%]::placeholder{color:#999}.input-field[_ngcontent-%COMP%]:disabled{opacity:.5;cursor:not-allowed}.input-field.listening[_ngcontent-%COMP%]{color:#ff6b6b;font-style:italic}.icon-button[_ngcontent-%COMP%]{background:none;border:none;cursor:pointer;padding:8px;display:flex;align-items:center;justify-content:center;border-radius:50%;transition:background-color .2s;color:#666;min-width:40px;min-height:40px}.icon-button[_ngcontent-%COMP%]:hover{background-color:#0000000d;color:#333}.icon-button[_ngcontent-%COMP%]:active{background-color:#0000001a}.voice-button.active[_ngcontent-%COMP%]{color:#ff6b6b;animation:_ngcontent-%COMP%_pulse 1.5s ease-in-out infinite}@keyframes _ngcontent-%COMP%_pulse{0%,to{opacity:1}50%{opacity:.6}}"]})};function l_(e,t){e&1&&(g(0,"div",6),U(1,"span")(2,"span")(3,"span"),y())}function u_(e,t){if(e&1&&U(0,"div",7),e&2){let n=A();P("innerHTML",n.message.text,fd)}}var c_=class Zs{message;get isUser(){return this.message.sender==="user"}get isAssistant(){return this.message.sender==="assistant"}static \u0275fac=function(t){return new(t||Zs)};static \u0275cmp=Me({type:Zs,selectors:[["app-message"]],inputs:{message:"message"},decls:6,vars:8,consts:[[1,"message"],[1,"message-container"],[1,"message-content"],[1,"message-bubble"],["class","typing-indicator",4,"ngIf"],["class","message-text",3,"innerHTML",4,"ngIf"],[1,"typing-indicator"],[1,"message-text",3,"innerHTML"]],template:function(t,n){t&1&&(g(0,"div",0)(1,"div",1)(2,"div",2)(3,"div",3),pe(4,l_,4,0,"div",4)(5,u_,1,1,"div",5),y()()()()),t&2&&(Ee("user",n.isUser)("assistant",n.isAssistant),S(3),Ee("typing",n.message.isTyping),S(),P("ngIf",n.message.isTyping),S(),P("ngIf",!n.message.isTyping))},dependencies:[Ce,an],styles:[".message[_ngcontent-%COMP%]{display:flex;margin-bottom:16px;animation:_ngcontent-%COMP%_fadeIn .3s ease-in}@keyframes _ngcontent-%COMP%_fadeIn{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.message-container[_ngcontent-%COMP%]{display:flex;align-items:flex-start;max-width:100%;width:100%}.message.user[_ngcontent-%COMP%] .message-container[_ngcontent-%COMP%]{justify-content:flex-end}.message-content[_ngcontent-%COMP%]{display:flex;flex-direction:column;max-width:85%}.message.user[_ngcontent-%COMP%] .message-content[_ngcontent-%COMP%]{align-items:flex-end}.message-bubble[_ngcontent-%COMP%]{padding:12px 16px;border-radius:10px;word-wrap:break-word;width:fit-content}.message.user[_ngcontent-%COMP%] .message-bubble[_ngcontent-%COMP%]{background:#ff6b4a;color:#fff;border-radius:10px;box-shadow:0 1px 2px #0000001a}.message.assistant[_ngcontent-%COMP%] .message-bubble[_ngcontent-%COMP%]{background:transparent;color:#2c3e50;border:none;box-shadow:none;padding:0}.message-bubble.typing[_ngcontent-%COMP%]{padding:16px;min-width:60px}.message-text[_ngcontent-%COMP%]{margin:0;line-height:1.5;font-size:14px;white-space:normal}.message-text[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:0 0 8px}.message-text[_ngcontent-%COMP%] p[_ngcontent-%COMP%]:last-child{margin-bottom:0}.message-text[_ngcontent-%COMP%] h1[_ngcontent-%COMP%], .message-text[_ngcontent-%COMP%] h2[_ngcontent-%COMP%], .message-text[_ngcontent-%COMP%] h3[_ngcontent-%COMP%], .message-text[_ngcontent-%COMP%] h4[_ngcontent-%COMP%], .message-text[_ngcontent-%COMP%] h5[_ngcontent-%COMP%], .message-text[_ngcontent-%COMP%] h6[_ngcontent-%COMP%]{margin:12px 0 8px;font-weight:600}.message-text[_ngcontent-%COMP%] h1[_ngcontent-%COMP%]:first-child, .message-text[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]:first-child, .message-text[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]:first-child, .message-text[_ngcontent-%COMP%] h4[_ngcontent-%COMP%]:first-child, .message-text[_ngcontent-%COMP%] h5[_ngcontent-%COMP%]:first-child, .message-text[_ngcontent-%COMP%] h6[_ngcontent-%COMP%]:first-child{margin-top:0}.message-text[_ngcontent-%COMP%] ul[_ngcontent-%COMP%], .message-text[_ngcontent-%COMP%] ol[_ngcontent-%COMP%]{margin:8px 0;padding-left:24px}.message-text[_ngcontent-%COMP%] li[_ngcontent-%COMP%]{margin:4px 0}.message-text[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{font-weight:600}.message-text[_ngcontent-%COMP%] em[_ngcontent-%COMP%]{font-style:italic}.message-text[_ngcontent-%COMP%] code[_ngcontent-%COMP%]{background:#0000000d;padding:2px 4px;border-radius:3px;font-family:Courier New,monospace;font-size:13px}.message-text[_ngcontent-%COMP%] pre[_ngcontent-%COMP%]{background:#0000000d;padding:12px;border-radius:6px;overflow-x:auto;margin:8px 0}.message-text[_ngcontent-%COMP%] pre[_ngcontent-%COMP%] code[_ngcontent-%COMP%]{background:none;padding:0}.typing-indicator[_ngcontent-%COMP%]{display:flex;align-items:center;gap:4px;height:16px}.typing-indicator[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{width:8px;height:8px;border-radius:50%;background-color:#95a5a6;animation:_ngcontent-%COMP%_typing 1.4s infinite}.typing-indicator[_ngcontent-%COMP%] span[_ngcontent-%COMP%]:nth-child(2){animation-delay:.2s}.typing-indicator[_ngcontent-%COMP%] span[_ngcontent-%COMP%]:nth-child(3){animation-delay:.4s}@keyframes _ngcontent-%COMP%_typing{0%,60%,to{transform:translateY(0);opacity:.5}30%{transform:translateY(-10px);opacity:1}}@media (max-width: 768px){.message-bubble[_ngcontent-%COMP%]{max-width:90%}}"]})},d_=["messagesContainer"];function h_(e,t){if(e&1&&U(0,"app-message",7),e&2){let n=t.$implicit;P("message",n)}}function f_(e,t){if(e&1&&(g(0,"div",5),pe(1,h_,1,1,"app-message",6),y()),e&2){let n=A();S(),P("ngForOf",n.messages)("ngForTrackBy",n.trackByMessageId)}}function p_(e,t){e&1&&(g(0,"div",8)(1,"p",9),F(2,"Start a conversation by typing a message or selecting a suggestion below."),y()())}var g_=class qs{messages=[];messagesContainer;shouldScroll=!1;ngAfterViewChecked(){this.shouldScroll&&(this.scrollToBottom(),this.shouldScroll=!1)}ngOnChanges(t){t.messages&&(this.shouldScroll=!0)}trackByMessageId(t,n){return n.id}scrollToBottom(){try{this.messagesContainer&&(this.messagesContainer.nativeElement.scrollTop=this.messagesContainer.nativeElement.scrollHeight)}catch(t){console.error("Error scrolling to bottom:",t)}}static \u0275fac=function(t){return new(t||qs)};static \u0275cmp=Me({type:qs,selectors:[["app-chat-history"]],viewQuery:function(t,n){if(t&1&&O1(d_,5),t&2){let r;E1(r=T1())&&(n.messagesContainer=r.first)}},inputs:{messages:"messages"},features:[hi],decls:5,vars:2,consts:[["messagesContainer",""],[1,"chat-history"],[1,"messages-container"],["class","messages-list",4,"ngIf"],["class","empty-state",4,"ngIf"],[1,"messages-list"],[3,"message",4,"ngFor","ngForOf","ngForTrackBy"],[3,"message"],[1,"empty-state"],[1,"empty-text"]],template:function(t,n){t&1&&(g(0,"div",1)(1,"div",2,0),pe(3,f_,2,2,"div",3)(4,p_,3,0,"div",4),y()()),t&2&&(S(3),P("ngIf",n.messages.length>0),S(),P("ngIf",n.messages.length===0))},dependencies:[Ce,wi,an,c_],styles:[".chat-history[_ngcontent-%COMP%]{flex:1;display:flex;flex-direction:column;overflow:hidden;width:100%;min-height:0;max-height:100%}.messages-container[_ngcontent-%COMP%]{flex:1;overflow-y:auto;overflow-x:hidden;padding:16px;scroll-behavior:smooth;min-height:0;-webkit-overflow-scrolling:touch}.messages-container[_ngcontent-%COMP%]::-webkit-scrollbar{width:6px}.messages-container[_ngcontent-%COMP%]::-webkit-scrollbar-track{background:transparent}.messages-container[_ngcontent-%COMP%]::-webkit-scrollbar-thumb{background:#0003;border-radius:3px}.messages-container[_ngcontent-%COMP%]::-webkit-scrollbar-thumb:hover{background:#0000004d}.messages-list[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:8px}.empty-state[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:center;height:100%;padding:32px}.empty-text[_ngcontent-%COMP%]{color:#95a5a6;font-size:14px;text-align:center;line-height:1.6;max-width:400px}"]})};function m_(e,t){if(e&1){let n=on();g(0,"div",1),T("click",function(){W(n);let r=A();return Q(r.onOverlayClick())}),g(1,"div",2),T("click",function(r){W(n);let i=A();return Q(i.onModalClick(r))}),g(2,"div",3)(3,"button",4),T("click",function(){W(n);let r=A();return Q(r.onBackClick())}),U(4,"app-icon",5),y(),g(5,"h2",6),F(6,"Rename Chat"),y(),g(7,"button",7),T("click",function(){W(n);let r=A();return Q(r.onCloseClick())}),U(8,"app-icon",8),y()(),g(9,"div",9)(10,"input",10),na("ngModelChange",function(r){W(n);let i=A();return gh(i.editedTitle,r)||(i.editedTitle=r),Q(r)}),T("keydown",function(r){W(n);let i=A();return Q(i.onInputKeydown(r))}),y()(),g(11,"div",11)(12,"button",12),T("click",function(){W(n);let r=A();return Q(r.onCancel())}),F(13," Cancel "),y(),g(14,"button",13),T("click",function(){W(n);let r=A();return Q(r.onSave())}),F(15," Save "),y()()()()}if(e&2){let n=A();S(10),ta("ngModel",n.editedTitle),P("maxlength",500)}}var v_=class Gs{isOpen=!1;currentTitle="";close=new R;save=new R;editedTitle="";ngOnChanges(t){t.isOpen&&this.isOpen&&(this.editedTitle=this.currentTitle),t.currentTitle&&(this.editedTitle=this.currentTitle)}onBackClick(){this.close.emit()}onCloseClick(){this.close.emit()}onCancel(){this.close.emit()}onSave(){let t=this.editedTitle.trim();t&&t!==this.currentTitle&&this.save.emit(t),this.close.emit()}onOverlayClick(){this.close.emit()}onModalClick(t){t.stopPropagation()}onInputKeydown(t){t.key==="Enter"?(t.preventDefault(),this.onSave()):t.key==="Escape"&&(t.preventDefault(),this.onCancel())}static \u0275fac=function(t){return new(t||Gs)};static \u0275cmp=Me({type:Gs,selectors:[["app-rename-modal"]],inputs:{isOpen:"isOpen",currentTitle:"currentTitle"},outputs:{close:"close",save:"save"},features:[hi],decls:1,vars:1,consts:[["class","modal-overlay",3,"click",4,"ngIf"],[1,"modal-overlay",3,"click"],[1,"modal-container",3,"click"],[1,"modal-header"],["aria-label","Back",1,"icon-button","back-button",3,"click"],["name","chevron-left","width","24","height","24"],[1,"modal-title"],["aria-label","Close",1,"icon-button","close-button",3,"click"],["name","close","width","24","height","24"],[1,"modal-body"],["type","text","placeholder","Enter chat name","autofocus","",1,"rename-input",3,"ngModelChange","keydown","ngModel","maxlength"],[1,"modal-footer"],[1,"btn","btn-cancel",3,"click"],[1,"btn","btn-save",3,"click"]],template:function(t,n){t&1&&pe(0,m_,16,2,"div",0),t&2&&P("ngIf",n.isOpen)},dependencies:[Ce,an,pa,Zn,ha,uf,Si,ln],styles:[".modal-overlay[_ngcontent-%COMP%]{position:fixed;inset:0;background-color:#00000080;display:flex;align-items:flex-end;justify-content:center;z-index:1000;animation:_ngcontent-%COMP%_fadeIn .2s ease-out}@keyframes _ngcontent-%COMP%_fadeIn{0%{opacity:0}to{opacity:1}}.modal-container[_ngcontent-%COMP%]{background-color:#fff;border-radius:16px 16px 0 0;width:100%;max-width:600px;max-height:90vh;display:flex;flex-direction:column;box-shadow:0 -2px 24px #00000026;animation:_ngcontent-%COMP%_slideUp .3s ease-out}@keyframes _ngcontent-%COMP%_slideUp{0%{transform:translateY(100%)}to{transform:translateY(0)}}.modal-header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid #e5e7eb;gap:12px}.modal-title[_ngcontent-%COMP%]{flex:1;text-align:center;font-size:18px;font-weight:600;color:#111827;margin:0}.icon-button[_ngcontent-%COMP%]{background:none;border:none;padding:8px;cursor:pointer;display:flex;align-items:center;justify-content:center;border-radius:8px;color:#6b7280;transition:all .2s ease}.icon-button[_ngcontent-%COMP%]:hover{background-color:#f3f4f6;color:#111827}.icon-button[_ngcontent-%COMP%]:active{transform:scale(.95)}.back-button[_ngcontent-%COMP%], .close-button[_ngcontent-%COMP%]{flex-shrink:0}.modal-body[_ngcontent-%COMP%]{padding:24px 20px;flex:1;overflow-y:auto}.rename-input[_ngcontent-%COMP%]{width:100%;padding:12px 16px;font-size:16px;border:1px solid #d1d5db;border-radius:8px;outline:none;transition:all .2s ease;font-family:inherit;color:#111827}.rename-input[_ngcontent-%COMP%]:focus{border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61a}.rename-input[_ngcontent-%COMP%]::placeholder{color:#9ca3af}.modal-footer[_ngcontent-%COMP%]{display:flex;gap:12px;padding:16px 20px;border-top:1px solid #e5e7eb}.btn[_ngcontent-%COMP%]{flex:1;padding:12px 24px;font-size:16px;font-weight:500;border-radius:8px;border:none;cursor:pointer;transition:all .2s ease;font-family:inherit}.btn[_ngcontent-%COMP%]:active{transform:scale(.98)}.btn-cancel[_ngcontent-%COMP%]{background-color:#fff;color:#374151;border:1px solid #d1d5db}.btn-cancel[_ngcontent-%COMP%]:hover{background-color:#f9fafb;border-color:#9ca3af}.btn-save[_ngcontent-%COMP%]{background-color:#ef4444;color:#fff}.btn-save[_ngcontent-%COMP%]:hover{background-color:#dc2626}.btn-save[_ngcontent-%COMP%]:disabled{background-color:#fca5a5;cursor:not-allowed}@media (min-width: 768px){.modal-overlay[_ngcontent-%COMP%]{align-items:center}.modal-container[_ngcontent-%COMP%]{border-radius:16px;max-height:400px}}"]})};function y_(e,t){e&1&&(g(0,"div",22),U(1,"div",23),g(2,"p",24),F(3,"Loading conversations..."),y()())}function b_(e,t){if(e&1){let n=on();g(0,"div",36)(1,"button",37),T("click",function(r){W(n);let i=A().$implicit,s=A(2);return Q(s.onEditClick(i.id,i.title,r))}),U(2,"app-icon",38),g(3,"span"),F(4,"Rename"),y()(),g(5,"button",39),T("click",function(r){W(n);let i=A().$implicit,s=A(2);return Q(s.onDeleteClick(i.id,r))}),U(6,"app-icon",40),g(7,"span"),F(8,"Delete"),y()()()}}function C_(e,t){if(e&1){let n=on();g(0,"div",27),T("click",function(){let r=W(n).$implicit,i=A(2);return Q(i.onConversationClick(r.id))}),g(1,"div",28)(2,"div",29)(3,"span",30),F(4),y()(),g(5,"span",31),F(6),y()(),g(7,"div",32)(8,"button",33),T("click",function(r){let i=W(n).$implicit,s=A(2);return Q(s.toggleMenu(i.id,r))}),U(9,"app-icon",34),y(),pe(10,b_,9,0,"div",35),y()()}if(e&2){let n=t.$implicit,r=A(2);S(4),Oe(n.title),S(2),Oe(n.date),S(4),P("ngIf",r.isMenuOpen(n.id))}}function w_(e,t){if(e&1&&(g(0,"div",25),pe(1,C_,11,3,"div",26),y()),e&2){let n=A();S(),P("ngForOf",n.conversations)}}function __(e,t){e&1&&(g(0,"div",41)(1,"p"),F(2,"No conversations yet"),y()())}var x_=class Ws{isOpen=!1;conversations=[];isLoading=!1;backClick=new R;settingsClick=new R;closeClick=new R;conversationClick=new R;deleteClick=new R;newChatClick=new R;searchChange=new R;titleUpdate=new R;searchQuery="";isRenameModalOpen=!1;renamingConversationId=null;renamingConversationTitle="";activeMenuId=null;onBackClick(){this.backClick.emit()}onSettingsClick(){this.settingsClick.emit()}onCloseClick(){this.closeClick.emit()}onOverlayClick(){this.closeClick.emit(),this.closeMenu()}onConversationClick(t){this.conversationClick.emit(t)}onDeleteClick(t,n){n.stopPropagation(),this.deleteClick.emit(t),this.closeMenu()}onNewChatClick(){this.newChatClick.emit()}onSearchChange(){this.searchChange.emit(this.searchQuery)}onEditClick(t,n,r){r.stopPropagation(),this.renamingConversationId=t,this.renamingConversationTitle=n,this.isRenameModalOpen=!0,this.closeMenu()}onRenameModalClose(){this.isRenameModalOpen=!1,this.renamingConversationId=null,this.renamingConversationTitle=""}onRenameModalSave(t){this.renamingConversationId&&t.trim()&&this.titleUpdate.emit({id:this.renamingConversationId,title:t.trim()})}toggleMenu(t,n){n.stopPropagation(),this.activeMenuId===t?this.activeMenuId=null:this.activeMenuId=t}closeMenu(){this.activeMenuId=null}isMenuOpen(t){return this.activeMenuId===t}onSidebarClick(){this.closeMenu()}static \u0275fac=function(t){return new(t||Ws)};static \u0275cmp=Me({type:Ws,selectors:[["app-sidebar"]],inputs:{isOpen:"isOpen",conversations:"conversations",isLoading:"isLoading"},outputs:{backClick:"backClick",settingsClick:"settingsClick",closeClick:"closeClick",conversationClick:"conversationClick",deleteClick:"deleteClick",newChatClick:"newChatClick",searchChange:"searchChange",titleUpdate:"titleUpdate"},decls:25,vars:10,consts:[[1,"sidebar-overlay",3,"click"],[1,"sidebar",3,"click"],[1,"sidebar-header"],[1,"back-text-button",3,"click"],["name","chevron-left","width","16","height","16"],[1,"header-actions"],["aria-label","Settings",1,"icon-button","settings-button",3,"click"],["name","settings","width","20","height","20"],["aria-label","Close",1,"icon-button","close-button",3,"click"],["name","close","width","20","height","20"],[1,"sidebar-content"],[1,"conversations-title"],["class","loading-container",4,"ngIf"],["class","conversations-list",4,"ngIf"],["class","empty-conversations",4,"ngIf"],[1,"sidebar-footer"],[1,"search-container"],["name","search","width","18","height","18",1,"search-icon"],["type","text","placeholder","Search",1,"search-input",3,"ngModelChange","input","ngModel"],["aria-label","New Chat",1,"icon-button","new-chat-button",3,"click"],["name","edit","width","20","height","20"],[3,"close","save","isOpen","currentTitle"],[1,"loading-container"],[1,"spinner"],[1,"loading-text"],[1,"conversations-list"],["class","conversation-item",3,"click",4,"ngFor","ngForOf"],[1,"conversation-item",3,"click"],[1,"conversation-info"],[1,"conversation-title-container"],[1,"conversation-title"],[1,"conversation-date"],[1,"menu-container"],["aria-label","More options",1,"icon-button","menu-button",3,"click"],["name","more-horizontal","width","20","height","20"],["class","context-menu",4,"ngIf"],[1,"context-menu"],[1,"menu-item",3,"click"],["name","edit","width","16","height","16"],[1,"menu-item","delete-item",3,"click"],["name","trash","width","16","height","16"],[1,"empty-conversations"]],template:function(t,n){t&1&&(g(0,"div",0),T("click",function(){return n.onOverlayClick()}),y(),g(1,"div",1),T("click",function(){return n.onSidebarClick()}),g(2,"div",2)(3,"button",3),T("click",function(){return n.onBackClick()}),U(4,"app-icon",4),g(5,"span"),F(6,"Back to Chat"),y()(),g(7,"div",5)(8,"button",6),T("click",function(){return n.onSettingsClick()}),U(9,"app-icon",7),y(),g(10,"button",8),T("click",function(){return n.onCloseClick()}),U(11,"app-icon",9),y()()(),g(12,"div",10)(13,"h3",11),F(14,"Conversations"),y(),pe(15,y_,4,0,"div",12)(16,w_,2,1,"div",13)(17,__,3,0,"div",14),y(),g(18,"div",15)(19,"div",16),U(20,"app-icon",17),g(21,"input",18),na("ngModelChange",function(r){return gh(n.searchQuery,r)||(n.searchQuery=r),r}),T("input",function(){return n.onSearchChange()}),y()(),g(22,"button",19),T("click",function(){return n.onNewChatClick()}),U(23,"app-icon",20),y()()(),g(24,"app-rename-modal",21),T("close",function(){return n.onRenameModalClose()})("save",function(r){return n.onRenameModalSave(r)}),y()),t&2&&(Ee("visible",n.isOpen),S(),Ee("open",n.isOpen),S(14),P("ngIf",n.isLoading),S(),P("ngIf",!n.isLoading&&n.conversations.length>0),S(),P("ngIf",!n.isLoading&&n.conversations.length===0),S(4),ta("ngModel",n.searchQuery),S(3),P("isOpen",n.isRenameModalOpen)("currentTitle",n.renamingConversationTitle))},dependencies:[Ce,wi,an,pa,Zn,ha,Si,ln,v_],styles:[".sidebar-overlay[_ngcontent-%COMP%]{position:fixed;top:0;left:0;width:100%;height:100%;background:#0006;z-index:998;opacity:0;visibility:hidden;transition:opacity .3s ease,visibility .3s ease}.sidebar-overlay.visible[_ngcontent-%COMP%]{opacity:1;visibility:visible}.sidebar[_ngcontent-%COMP%]{position:fixed;top:0;left:0;width:85%;max-width:400px;height:100%;background:#fff;z-index:999;transform:translate(-100%);transition:transform .3s ease;display:flex;flex-direction:column;box-shadow:2px 0 8px #0000001a}.sidebar.open[_ngcontent-%COMP%]{transform:translate(0)}.sidebar-header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;padding:16px;border-bottom:1px solid #e8ecf1}.back-text-button[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;background:none;border:none;cursor:pointer;font-size:16px;font-weight:500;color:#1a1a1a;padding:8px;border-radius:8px;transition:background .2s ease}.back-text-button[_ngcontent-%COMP%]:hover{background:#f5f7fa}.header-actions[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px}.icon-button[_ngcontent-%COMP%]{background:none;border:none;cursor:pointer;padding:8px;display:flex;align-items:center;justify-content:center;border-radius:8px;transition:background .2s ease;color:#5f6368}.icon-button[_ngcontent-%COMP%]:hover{background:#f5f7fa;color:#1a1a1a}.icon-button[_ngcontent-%COMP%]:active{background:#e8ecf1}.sidebar-content[_ngcontent-%COMP%]{flex:1;overflow-y:auto;padding:16px}.conversations-title[_ngcontent-%COMP%]{font-size:13px;font-weight:500;color:#95a5a6;text-transform:uppercase;letter-spacing:.5px;margin:0 0 16px}.conversations-list[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:8px}.conversation-item[_ngcontent-%COMP%]{display:flex;align-items:center;padding:12px;background:#fff;border-radius:8px;cursor:pointer;transition:background .2s ease;gap:12px;position:relative}.conversation-item[_ngcontent-%COMP%]:hover{background:#f5f7fa}.conversation-info[_ngcontent-%COMP%]{flex:1;display:flex;flex-direction:column;gap:4px;min-width:0}.conversation-title-container[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;min-width:0}.conversation-title[_ngcontent-%COMP%]{flex:1;font-size:14px;font-weight:500;color:#1a1a1a;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.conversation-date[_ngcontent-%COMP%]{font-size:12px;color:#95a5a6}.menu-container[_ngcontent-%COMP%]{position:relative}.menu-button[_ngcontent-%COMP%]{opacity:0;transition:opacity .2s ease}.conversation-item[_ngcontent-%COMP%]:hover .menu-button[_ngcontent-%COMP%], .menu-button[_ngcontent-%COMP%]:focus, .menu-container[_ngcontent-%COMP%]:focus-within .menu-button[_ngcontent-%COMP%]{opacity:1}.context-menu[_ngcontent-%COMP%]{position:absolute;top:100%;right:0;background:#fff;border-radius:8px;box-shadow:0 4px 12px #00000026;border:1px solid #e8ecf1;padding:4px;min-width:140px;z-index:1000;display:flex;flex-direction:column;gap:2px}.menu-item[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;padding:8px 12px;border:none;background:none;width:100%;text-align:left;cursor:pointer;border-radius:6px;font-size:14px;color:#1a1a1a;transition:background .2s ease}.menu-item[_ngcontent-%COMP%]:hover{background:#f5f7fa}.menu-item[_ngcontent-%COMP%] app-icon[_ngcontent-%COMP%]{color:#5f6368}.delete-item[_ngcontent-%COMP%]{color:#dc3545}.delete-item[_ngcontent-%COMP%]:hover{background:#fee}.delete-item[_ngcontent-%COMP%] app-icon[_ngcontent-%COMP%]{color:#dc3545}.loading-container[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:40px 20px;gap:16px}.spinner[_ngcontent-%COMP%]{width:40px;height:40px;border:3px solid #f5f7fa;border-top-color:#ff5337;border-radius:50%;animation:_ngcontent-%COMP%_spin .8s linear infinite}@keyframes _ngcontent-%COMP%_spin{to{transform:rotate(360deg)}}.loading-text[_ngcontent-%COMP%]{color:#95a5a6;font-size:14px;margin:0}.empty-conversations[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:center;padding:40px 20px;text-align:center}.empty-conversations[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{color:#95a5a6;font-size:14px;margin:0}.sidebar-footer[_ngcontent-%COMP%]{padding:16px;border-top:1px solid #e8ecf1;display:flex;align-items:center;gap:12px}.search-container[_ngcontent-%COMP%]{flex:1;position:relative;display:flex;align-items:center;background:#f5f7fa;border-radius:8px;padding:8px 12px;gap:8px}.search-icon[_ngcontent-%COMP%]{flex-shrink:0;color:#95a5a6}.search-input[_ngcontent-%COMP%]{flex:1;border:none;background:none;font-size:14px;color:#1a1a1a;outline:none;padding:0}.search-input[_ngcontent-%COMP%]::placeholder{color:#95a5a6}.new-chat-button[_ngcontent-%COMP%]{flex-shrink:0;background:#fff;border:1px solid #e8ecf1;border-radius:8px;width:40px;height:40px;display:flex;align-items:center;justify-content:center;transition:all .2s ease}.new-chat-button[_ngcontent-%COMP%]:hover{background:#f5f7fa;border-color:#d0d7de}@media (max-width: 480px){.sidebar[_ngcontent-%COMP%]{width:100%;max-width:none}}"]})},cf=class _r{toasts=ue([]);toasts$=this.toasts.asReadonly();show(t,n="info",r=3e3){let i=Math.random().toString(36).substring(7),s={id:i,message:t,type:n,duration:r};this.toasts.update(o=>[...o,s]),r>0&&setTimeout(()=>this.remove(i),r)}success(t,n){this.show(t,"success",n)}error(t,n){this.show(t,"error",n)}warning(t,n){this.show(t,"warning",n)}info(t,n){this.show(t,"info",n)}remove(t){this.toasts.update(n=>n.filter(r=>r.id!==t))}static \u0275fac=function(t){return new(t||_r)};static \u0275prov=O({token:_r,factory:_r.\u0275fac,providedIn:"root"})};function k_(e,t){e&1&&(g(0,"span"),F(1,"\u2713"),y())}function S_(e,t){e&1&&(g(0,"span"),F(1,"\u2715"),y())}function O_(e,t){e&1&&(g(0,"span"),F(1,"\u26A0"),y())}function E_(e,t){e&1&&(g(0,"span"),F(1,"\u2139"),y())}function T_(e,t){if(e&1){let n=on();g(0,"div",2)(1,"div",3)(2,"span",4),lh(3,5),pe(4,k_,2,0,"span",6)(5,S_,2,0,"span",6)(6,O_,2,0,"span",6)(7,E_,2,0,"span",6),uh(),y(),g(8,"span",7),F(9),y()(),g(10,"button",8),T("click",function(){let r=W(n).$implicit,i=A();return Q(i.onClose(r.id))}),F(11,"\u2715"),y()()}if(e&2){let n=t.$implicit;Ee("success",n.type==="success")("error",n.type==="error")("warning",n.type==="warning")("info",n.type==="info"),S(3),P("ngSwitch",n.type),S(),P("ngSwitchCase","success"),S(),P("ngSwitchCase","error"),S(),P("ngSwitchCase","warning"),S(),P("ngSwitchCase","info"),S(2),Oe(n.message)}}var M_=class Qs{toastService=v(cf);toasts=this.toastService.toasts$;onClose(t){this.toastService.remove(t)}static \u0275fac=function(t){return new(t||Qs)};static \u0275cmp=Me({type:Qs,selectors:[["app-toast-container"]],decls:2,vars:1,consts:[[1,"toast-container"],["class","toast",3,"success","error","warning","info",4,"ngFor","ngForOf"],[1,"toast"],[1,"toast-content"],[1,"toast-icon"],[3,"ngSwitch"],[4,"ngSwitchCase"],[1,"toast-message"],[1,"toast-close",3,"click"]],template:function(t,n){t&1&&(g(0,"div",0),pe(1,T_,12,14,"div",1),y()),t&2&&(S(),P("ngForOf",n.toasts()))},dependencies:[Ce,wi,kh,sC],styles:[".toast-container[_ngcontent-%COMP%]{position:fixed;top:20px;right:20px;z-index:9999;display:flex;flex-direction:column;gap:12px;max-width:400px}.toast[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;border-radius:8px;box-shadow:0 4px 12px #00000026;background:#fff;min-width:300px;animation:_ngcontent-%COMP%_slideIn .3s ease-out}@keyframes _ngcontent-%COMP%_slideIn{0%{transform:translate(400px);opacity:0}to{transform:translate(0);opacity:1}}.toast-content[_ngcontent-%COMP%]{display:flex;align-items:center;gap:12px;flex:1}.toast-icon[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:center;width:24px;height:24px;border-radius:50%;font-size:14px;font-weight:700}.toast.success[_ngcontent-%COMP%]{border-left:4px solid #10b981}.toast.success[_ngcontent-%COMP%] .toast-icon[_ngcontent-%COMP%]{background:#10b981;color:#fff}.toast.error[_ngcontent-%COMP%]{border-left:4px solid #ef4444}.toast.error[_ngcontent-%COMP%] .toast-icon[_ngcontent-%COMP%]{background:#ef4444;color:#fff}.toast.warning[_ngcontent-%COMP%]{border-left:4px solid #f59e0b}.toast.warning[_ngcontent-%COMP%] .toast-icon[_ngcontent-%COMP%]{background:#f59e0b;color:#fff}.toast.info[_ngcontent-%COMP%]{border-left:4px solid #3b82f6}.toast.info[_ngcontent-%COMP%] .toast-icon[_ngcontent-%COMP%]{background:#3b82f6;color:#fff}.toast-message[_ngcontent-%COMP%]{flex:1;font-size:14px;color:#2c3e50;line-height:1.4}.toast-close[_ngcontent-%COMP%]{background:none;border:none;color:#95a5a6;cursor:pointer;font-size:18px;padding:4px 8px;display:flex;align-items:center;justify-content:center;transition:color .2s}.toast-close[_ngcontent-%COMP%]:hover{color:#2c3e50}@media (max-width: 768px){.toast-container[_ngcontent-%COMP%]{top:10px;right:10px;left:10px;max-width:none}.toast[_ngcontent-%COMP%]{min-width:auto}}"]})},df=class xr{isOpenSignal=ue(!1);configSignal=ue(null);resolveCallback=null;isOpen$=this.isOpenSignal.asReadonly();config$=this.configSignal.asReadonly();confirm(t){return this.configSignal.set(M({confirmText:"Confirm",cancelText:"Cancel",confirmColor:"primary"},t)),this.isOpenSignal.set(!0),new Promise(n=>{this.resolveCallback=n})}close(t){this.isOpenSignal.set(!1),this.resolveCallback&&(this.resolveCallback(t),this.resolveCallback=null)}static \u0275fac=function(t){return new(t||xr)};static \u0275prov=O({token:xr,factory:xr.\u0275fac,providedIn:"root"})};function I_(e,t){if(e&1){let n=on();g(0,"div",1),T("click",function(){W(n);let r=A();return Q(r.onOverlayClick())}),g(1,"div",2),T("click",function(r){W(n);let i=A();return Q(i.onModalClick(r))}),g(2,"div",3)(3,"button",4),T("click",function(){W(n);let r=A();return Q(r.onBackClick())}),U(4,"app-icon",5),y(),g(5,"h2",6),F(6),y(),g(7,"button",7),T("click",function(){W(n);let r=A();return Q(r.onCloseClick())}),U(8,"app-icon",8),y()(),g(9,"div",9)(10,"p",10),F(11),y()(),g(12,"div",11)(13,"button",12),T("click",function(){W(n);let r=A();return Q(r.onCancel())}),F(14),y(),g(15,"button",13),T("click",function(){W(n);let r=A();return Q(r.onConfirm())}),F(16),y()()()()}if(e&2){let n,r,i,s,o,a,l=A();S(6),Oe(((n=l.config())==null?null:n.title)||"Back"),S(5),Oe((r=l.config())==null?null:r.message),S(3),Vn(" ",((i=l.config())==null?null:i.cancelText)||"Cancel"," "),S(),Ee("btn-danger",((s=l.config())==null?null:s.confirmColor)==="danger")("btn-primary",((o=l.config())==null?null:o.confirmColor)==="primary"),S(),Vn(" ",((a=l.config())==null?null:a.confirmText)||"Confirm"," ")}}var P_=class Ys{confirmationService=v(df);isOpen=this.confirmationService.isOpen$;config=this.confirmationService.config$;onConfirm(){this.confirmationService.close(!0)}onCancel(){this.confirmationService.close(!1)}onBackClick(){this.confirmationService.close(!1)}onCloseClick(){this.confirmationService.close(!1)}onOverlayClick(){this.confirmationService.close(!1)}onModalClick(t){t.stopPropagation()}static \u0275fac=function(t){return new(t||Ys)};static \u0275cmp=Me({type:Ys,selectors:[["app-confirmation-modal"]],decls:1,vars:1,consts:[["class","modal-overlay",3,"click",4,"ngIf"],[1,"modal-overlay",3,"click"],[1,"modal-container",3,"click"],[1,"modal-header"],["aria-label","Back",1,"icon-button","back-button",3,"click"],["name","chevron-left","width","24","height","24"],[1,"modal-title"],["aria-label","Close",1,"icon-button","close-button",3,"click"],["name","close","width","24","height","24"],[1,"modal-body"],[1,"modal-message"],[1,"modal-footer"],[1,"btn","btn-cancel",3,"click"],[1,"btn","btn-confirm",3,"click"]],template:function(t,n){t&1&&pe(0,I_,17,8,"div",0),t&2&&P("ngIf",n.isOpen())},dependencies:[Ce,an,ln],styles:[".modal-overlay[_ngcontent-%COMP%]{position:fixed;inset:0;background-color:#00000080;display:flex;align-items:flex-end;justify-content:center;z-index:10000;animation:_ngcontent-%COMP%_fadeIn .2s ease-out}@keyframes _ngcontent-%COMP%_fadeIn{0%{opacity:0}to{opacity:1}}.modal-container[_ngcontent-%COMP%]{background-color:#fff;border-radius:16px 16px 0 0;width:100%;max-width:600px;max-height:90vh;display:flex;flex-direction:column;box-shadow:0 -2px 24px #00000026;animation:_ngcontent-%COMP%_slideUp .3s ease-out}@keyframes _ngcontent-%COMP%_slideUp{0%{transform:translateY(100%)}to{transform:translateY(0)}}.modal-header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid #e5e7eb;gap:12px}.modal-title[_ngcontent-%COMP%]{flex:1;text-align:center;font-size:18px;font-weight:600;color:#111827;margin:0}.icon-button[_ngcontent-%COMP%]{background:none;border:none;padding:8px;cursor:pointer;display:flex;align-items:center;justify-content:center;border-radius:8px;color:#6b7280;transition:all .2s ease}.icon-button[_ngcontent-%COMP%]:hover{background-color:#f3f4f6;color:#111827}.icon-button[_ngcontent-%COMP%]:active{transform:scale(.95)}.back-button[_ngcontent-%COMP%], .close-button[_ngcontent-%COMP%]{flex-shrink:0}.modal-body[_ngcontent-%COMP%]{padding:32px 20px;flex:1;overflow-y:auto}.modal-message[_ngcontent-%COMP%]{margin:0;font-size:16px;line-height:1.5;color:#111827;text-align:left}.modal-footer[_ngcontent-%COMP%]{display:flex;gap:12px;padding:16px 20px;border-top:1px solid #e5e7eb}.btn[_ngcontent-%COMP%]{flex:1;padding:12px 24px;font-size:16px;font-weight:500;border-radius:8px;border:none;cursor:pointer;transition:all .2s ease;font-family:inherit}.btn[_ngcontent-%COMP%]:active{transform:scale(.98)}.btn-cancel[_ngcontent-%COMP%]{background-color:#fff;color:#374151;border:1px solid #d1d5db}.btn-cancel[_ngcontent-%COMP%]:hover{background-color:#f9fafb;border-color:#9ca3af}.btn-confirm[_ngcontent-%COMP%]{color:#fff}.btn-primary[_ngcontent-%COMP%]{background-color:#3b82f6}.btn-primary[_ngcontent-%COMP%]:hover{background-color:#2563eb}.btn-danger[_ngcontent-%COMP%]{background-color:#ef4444}.btn-danger[_ngcontent-%COMP%]:hover{background-color:#dc2626}.btn-danger[_ngcontent-%COMP%]:disabled, .btn-primary[_ngcontent-%COMP%]:disabled{opacity:.5;cursor:not-allowed}@media (min-width: 768px){.modal-overlay[_ngcontent-%COMP%]{align-items:center}.modal-container[_ngcontent-%COMP%]{border-radius:16px;max-height:500px}}"]})},ga=class kr{constructor(t){this.http=t}config=null;loadConfig(){return X(this,null,function*(){try{this.config=yield ut(this.http.get("/config.json")),console.log("Configuration loaded:",this.config?.environmentName)}catch(t){console.error("Failed to load configuration, using defaults",t),this.config={apiUrl:"https://ca-oaa-ai-dev-we-api.proudforest-87e29140.westeurope.azurecontainerapps.io",apiTimeout:3e4,environmentName:"dev"}}})}get apiUrl(){return this.config?.apiUrl||"https://ca-oaa-ai-dev-we-api.proudforest-87e29140.westeurope.azurecontainerapps.io"}get apiTimeout(){return this.config?.apiTimeout||3e4}get environmentName(){return this.config?.environmentName||"dev"}getConfig(){return this.config||{apiUrl:"https://ca-oaa-ai-dev-we-api.proudforest-87e29140.westeurope.azurecontainerapps.io",apiTimeout:3e4,environmentName:"dev"}}setConfig(t){this.config=t,console.log("Configuration updated:",this.config.environmentName)}static \u0275fac=function(t){return new(t||kr)(C(ua))};static \u0275prov=O({token:kr,factory:kr.\u0275fac,providedIn:"root"})},D_=class Sr{http=v(ua);logger=v(kt);config=v(ga);get apiUrl(){return this.config.apiUrl}get timeout(){return this.config.apiTimeout}mockToken="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1c2VyMTIzIiwibmFtZSI6IlRlc3QgVXNlciIsImlhdCI6MTUxNjIzOTAyMn0.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c";getHeaders(){return new xt({"Content-Type":"application/json",Authorization:`Bearer ${this.mockToken}`})}createConversation(t){return this.http.post(`${this.apiUrl}/conversations`,t,{headers:this.getHeaders()}).pipe(lt(this.timeout),De(this.handleError))}getConversations(t,n,r=0,i=50){let s=new Ze().set("offset",r.toString()).set("limit",i.toString());return t&&(s=s.set("status",t)),n&&(s=s.set("search",n)),this.http.get(`${this.apiUrl}/conversations`,{headers:this.getHeaders(),params:s}).pipe(lt(this.timeout),De(this.handleError))}getConversation(t){return this.http.get(`${this.apiUrl}/conversations/${t}`,{headers:this.getHeaders()}).pipe(lt(this.timeout),De(this.handleError))}deleteConversation(t){return this.http.delete(`${this.apiUrl}/conversations/${t}`,{headers:this.getHeaders()}).pipe(lt(this.timeout),De(this.handleError))}updateConversationTitle(t,n){return this.http.patch(`${this.apiUrl}/conversations/${t}/title`,n,{headers:this.getHeaders()}).pipe(lt(this.timeout),De(this.handleError))}sendMessage(t,n){return this.http.post(`${this.apiUrl}/conversations/${t}/messages`,n,{headers:this.getHeaders()}).pipe(lt(this.timeout),De(this.handleError))}getMessages(t,n=0,r=100){let i=new Ze().set("offset",n.toString()).set("limit",r.toString());return this.http.get(`${this.apiUrl}/conversations/${t}/messages`,{headers:this.getHeaders(),params:i}).pipe(lt(this.timeout),De(this.handleError))}handleError=t=>{this.logger.error("API Error:",t);let n="An error occurred";return t.error instanceof ErrorEvent?n=`Error: ${t.error.message}`:n=`Error Code: ${t.status}
24
+ Message: ${t.message}`,Tu(()=>new Error(n))};static \u0275fac=function(t){return new(t||Sr)};static \u0275prov=O({token:Sr,factory:Sr.\u0275fac,providedIn:"root"})},A_=class Or{apiService=v(D_);logger=v(kt);chatState=ue({messages:[],isLoading:!1,currentInput:""});currentConversationId=null;mockAppId="00000000-0000-0000-0000-000000000001";typingSimulationDelay=500;getState(){return this.chatState.asReadonly()}addMessage(t,n){let r={id:this.generateId(),text:t,sender:n,timestamp:new Date,isTyping:!1};this.chatState.update(i=>N(M({},i),{messages:[...i.messages,r]}))}sendMessage(t){return X(this,null,function*(){try{this.addMessage(t,"user"),this.chatState.update(i=>N(M({},i),{isLoading:!0})),this.currentConversationId||(yield this.createConversation());let n={id:"typing-"+Date.now(),text:"",sender:"assistant",timestamp:new Date,isTyping:!0};this.chatState.update(i=>N(M({},i),{messages:[...i.messages,n]})),yield this.delay(this.typingSimulationDelay);let r=yield ut(this.apiService.sendMessage(this.currentConversationId,{message:t}));this.chatState.update(i=>N(M({},i),{messages:i.messages.filter(s=>s.id!==n.id),isLoading:!1})),this.addMessage(r.assistantMessage,"assistant")}catch(n){this.logger.error("Error sending message:",n),this.chatState.update(r=>N(M({},r),{messages:r.messages.filter(i=>!i.isTyping),isLoading:!1})),this.addMessage("Sorry, I encountered an error. Please try again.","assistant")}})}createConversation(){return X(this,null,function*(){try{let t=yield ut(this.apiService.createConversation({appId:this.mockAppId,title:"New Chat"}));this.currentConversationId=t.id}catch(t){throw this.logger.error("Error creating conversation:",t),t}})}loadConversation(t){return X(this,null,function*(){try{this.chatState.update(r=>N(M({},r),{isLoading:!0}));let n=(yield ut(this.apiService.getMessages(t))).messages.map(r=>({id:r.id,text:r.content,sender:r.role==="user"?"user":"assistant",timestamp:new Date(r.createdAt),isTyping:!1}));this.currentConversationId=t,this.chatState.update(r=>N(M({},r),{messages:n,isLoading:!1}))}catch(n){this.logger.error("Error loading conversation:",n),this.chatState.update(r=>N(M({},r),{isLoading:!1}))}})}clearChat(){this.chatState.update(t=>N(M({},t),{messages:[]})),this.currentConversationId=null}getCurrentConversationId(){return this.currentConversationId}getConversations(t,n,r=0,i=50){return X(this,null,function*(){try{return yield ut(this.apiService.getConversations(t,n,r,i))}catch(s){throw this.logger.error("Error loading conversations:",s),s}})}deleteConversation(t){return X(this,null,function*(){try{yield ut(this.apiService.deleteConversation(t)),this.currentConversationId===t&&this.clearChat()}catch(n){throw this.logger.error("Error deleting conversation:",n),n}})}updateConversationTitle(t,n){return X(this,null,function*(){try{yield ut(this.apiService.updateConversationTitle(t,{title:n}))}catch(r){throw this.logger.error("Error updating conversation title:",r),r}})}generateId(){return`msg-${Date.now()}-${Math.random().toString(36).substr(2,9)}`}delay(t){return new Promise(n=>setTimeout(n,t))}static \u0275fac=function(t){return new(t||Or)};static \u0275prov=O({token:Or,factory:Or.\u0275fac,providedIn:"root"})},V_=class Er{constructor(t){this.logger=t,this.initializeRecognition()}recognition=null;isSupported=!1;resolveStop=null;statusSignal=ue({state:"idle",transcript:"",interimTranscript:""});getStatus(){return this.statusSignal.asReadonly()}isVoiceRecognitionSupported(){return this.isSupported}getCurrentTranscript(){return this.statusSignal().transcript}initializeRecognition(){let t=window.SpeechRecognition||window.webkitSpeechRecognition;if(!t){this.logger.warn("Speech Recognition API is not supported in this browser"),this.isSupported=!1;return}this.isSupported=!0,this.recognition=new t,this.recognition.continuous=!0,this.recognition.interimResults=!0,this.recognition.lang="en-US",this.recognition.maxAlternatives=1,this.recognition.onstart=()=>{this.logger.debug("Voice recognition started"),this.statusSignal.update(n=>N(M({},n),{state:"listening",errorMessage:void 0}))},this.recognition.onresult=n=>{let r="",i=this.statusSignal().transcript;this.logger.debug("Voice recognition onresult event",{resultIndex:n.resultIndex,resultsLength:n.results.length});for(let s=n.resultIndex;s<n.results.length;s++){let o=n.results[s][0].transcript,a=n.results[s].isFinal;this.logger.debug(`Result ${s}:`,{transcript:o,isFinal:a}),a?i+=o+" ":r+=o}this.statusSignal.update(s=>N(M({},s),{transcript:i.trim(),interimTranscript:r.trim()})),this.logger.debug("Updated status:",{transcript:i.trim(),interimTranscript:r.trim()})},this.recognition.onerror=n=>{this.logger.error("Voice recognition error:",n.error);let r="Voice recognition error";switch(n.error){case"no-speech":r="No speech detected. Please try again.";break;case"audio-capture":r="No microphone found. Please check your microphone.";break;case"not-allowed":r="Microphone access denied. Please allow microphone access.";break;case"network":r="Network error occurred. Please check your connection.";break;default:r=`Voice recognition error: ${n.error}`}this.statusSignal.update(i=>N(M({},i),{state:"error",errorMessage:r}))},this.recognition.onend=()=>{this.logger.debug("Voice recognition ended");let n=this.statusSignal().transcript;this.logger.debug("Final transcript:",n),this.resolveStop&&(this.resolveStop({transcript:n.trim(),success:n.trim().length>0}),this.resolveStop=null),this.statusSignal.set({state:"idle",transcript:"",interimTranscript:"",errorMessage:void 0})}}startListening(t="en-US"){if(!this.isSupported){this.statusSignal.set({state:"error",transcript:"",interimTranscript:"",errorMessage:"Voice recognition is not supported in this browser"});return}if(this.statusSignal().state==="listening"){this.logger.warn("Voice recognition is already active");return}this.statusSignal.set({state:"listening",transcript:"",interimTranscript:"",errorMessage:void 0});try{this.recognition.lang=t,this.recognition.start()}catch(n){this.logger.error("Failed to start voice recognition:",n),this.statusSignal.update(r=>N(M({},r),{state:"error",errorMessage:"Failed to start voice recognition"}))}}stopListening(){return X(this,null,function*(){return this.isSupported?this.statusSignal().state!=="listening"?{transcript:"",success:!1}:new Promise(t=>{this.resolveStop=t,this.statusSignal.update(n=>N(M({},n),{state:"processing"}));try{this.recognition.stop()}catch(n){this.logger.error("Failed to stop voice recognition:",n),this.resolveStop=null,this.statusSignal.set({state:"idle",transcript:"",interimTranscript:"",errorMessage:void 0}),t({transcript:"",success:!1})}}):{transcript:"",success:!1}})}cancelListening(){if(this.isSupported){if(this.statusSignal().state==="listening")try{this.recognition.abort()}catch(t){this.logger.error("Failed to cancel voice recognition:",t)}this.resolveStop&&(this.resolveStop({transcript:"",success:!1}),this.resolveStop=null),this.statusSignal.set({state:"idle",transcript:"",interimTranscript:"",errorMessage:void 0})}}static \u0275fac=function(t){return new(t||Er)(C(kt))};static \u0275prov=O({token:Er,factory:Er.\u0275fac,providedIn:"root"})};function N_(e,t){if(e&1&&(g(0,"div",8)(1,"div",9),U(2,"app-icon",10),y(),g(3,"h1",11),F(4),y(),g(5,"p",12),F(6),y(),g(7,"p",13),F(8),y()()),e&2){let n=A();S(4),Oe(n.greeting),S(2),Oe(n.welcomeText),S(2),Oe(n.description)}}function R_(e,t){if(e&1&&U(0,"app-chat-history",14),e&2){let n=A();P("messages",n.messages())}}function F_(e,t){if(e&1){let n=on();g(0,"app-suggestion-button",19),T("buttonClick",function(r){W(n);let i=A(2);return Q(i.onSuggestionClick(r))}),y()}if(e&2){let n=t.$implicit,r=A(2);P("text",n)("disabled",r.isLoading())}}function L_(e,t){if(e&1&&(g(0,"div",15)(1,"p",16),F(2),y(),g(3,"div",17),pe(4,F_,1,2,"app-suggestion-button",18),y()()),e&2){let n=A();S(2),Oe(n.personalizationText),S(2),P("ngForOf",n.suggestions)}}var j_=class Js{chatService=v(A_);toastService=v(cf);confirmationService=v(df);voiceRecognition=v(V_);configService=v(ga);logger=v(kt);_apiUrl;_apiTimeout;set apiUrl(t){this._apiUrl=t,t&&this.updateConfig()}get apiUrl(){return this._apiUrl}set apiTimeout(t){this._apiTimeout=t,t&&this.updateConfig()}get apiTimeout(){return this._apiTimeout}set config(t){t&&(this.configService.setConfig(t),console.log("Config updated via Input:",t))}title=Be.TITLE;greeting=Be.WELCOME.GREETING;welcomeText=Be.WELCOME.TEXT;description=Be.WELCOME.DESCRIPTION;personalizationText=Be.WELCOME.PERSONALIZATION;inputPlaceholder=Be.INPUT.PLACEHOLDER;suggestions=[...Be.SUGGESTIONS];chatState=this.chatService.getState();messages=Rt(()=>this.chatState().messages);isLoading=Rt(()=>this.chatState().isLoading);hasMessages=Rt(()=>this.messages().length>0);voiceStatus=this.voiceRecognition.getStatus();sidebarOpenSignal=ue(!1);isSidebarOpen=this.sidebarOpenSignal.asReadonly();conversationsSignal=ue([]);conversations=this.conversationsSignal.asReadonly();isLoadingConversationsSignal=ue(!1);isLoadingConversations=this.isLoadingConversationsSignal.asReadonly();searchQuerySignal=ue("");inputValueSignal=ue("");inputValue=this.inputValueSignal.asReadonly();ngOnInit(){console.log("AssistantPage initialized with config:",this.configService.getConfig())}updateConfig(){let t=this.configService.getConfig();this.configService.setConfig({apiUrl:this._apiUrl||t.apiUrl,apiTimeout:this._apiTimeout||t.apiTimeout,environmentName:t.environmentName}),console.log("Config updated:",this.configService.getConfig())}onMenuClick(){return X(this,null,function*(){this.sidebarOpenSignal.set(!0),this.searchQuerySignal.set(""),yield this.loadConversations()})}onCloseClick(){this.chatService.clearChat()}onSuggestionClick(t){return X(this,null,function*(){yield this.chatService.sendMessage(t)})}onMessageSubmit(t){return X(this,null,function*(){t.trim()&&(this.inputValueSignal.set(""),yield this.chatService.sendMessage(t))})}onInputValueChange(t){this.inputValueSignal.set(t)}onVoiceClick(){return X(this,null,function*(){let t=this.voiceStatus();if(!this.voiceRecognition.isVoiceRecognitionSupported()){this.toastService.error("Voice recognition is not supported in your browser. Please try Chrome, Edge, or Safari.");return}if(t.state==="listening"){let n=yield this.voiceRecognition.stopListening();this.logger.debug("Voice recognition result:",n),n.success&&n.transcript?(this.inputValueSignal.set(n.transcript),this.toastService.success("Voice input captured. Click send when ready.")):this.toastService.warning("No speech detected. Please try again.")}else t.state==="idle"?(this.voiceRecognition.startListening(),this.toastService.info("Listening... Click the microphone button again when done.")):t.state==="error"&&this.toastService.error(t.errorMessage||"Voice recognition error")})}onAddClick(){this.toastService.info("Attachment feature coming soon!")}onSidebarBackClick(){this.sidebarOpenSignal.set(!1)}onSidebarSettingsClick(){this.toastService.info("Settings feature coming soon!")}onSidebarCloseClick(){this.sidebarOpenSignal.set(!1)}onConversationClick(t){return X(this,null,function*(){this.sidebarOpenSignal.set(!1);try{yield this.chatService.loadConversation(t)}catch(n){this.logger.error("Failed to load conversation:",n),this.toastService.error("Failed to load conversation. Please try again.")}})}onConversationDeleteClick(t){return X(this,null,function*(){if(this.logger.debug("Delete conversation:",t),!!(yield this.confirmationService.confirm({title:"Delete Conversation",message:"Are you sure you want to delete this conversation? This action cannot be undone.",confirmText:"Delete",cancelText:"Cancel",confirmColor:"danger"})))try{yield this.chatService.deleteConversation(t);let n=this.conversationsSignal();this.conversationsSignal.set(n.filter(r=>r.id!==t)),this.toastService.success("Conversation deleted successfully")}catch(n){this.logger.error("Failed to delete conversation:",n),this.toastService.error("Failed to delete conversation. Please try again.")}})}onNewChatClick(){this.chatService.clearChat(),this.sidebarOpenSignal.set(!1)}onSearchChange(t){return X(this,null,function*(){this.searchQuerySignal.set(t),yield this.loadConversations()})}onConversationTitleUpdate(t){return X(this,null,function*(){try{yield this.chatService.updateConversationTitle(t.id,t.title);let n=this.conversationsSignal();this.conversationsSignal.set(n.map(r=>r.id===t.id?N(M({},r),{title:t.title}):r)),this.toastService.success("Conversation title updated")}catch(n){this.logger.error("Failed to update conversation title:",n),this.toastService.error("Failed to update conversation title. Please try again.")}})}loadConversations(){return X(this,null,function*(){if(!this.isLoadingConversationsSignal()){this.isLoadingConversationsSignal.set(!0);try{let t=this.searchQuerySignal(),n=(yield this.chatService.getConversations(void 0,t||void 0)).conversations.map(r=>({id:r.id,title:r.title||"Untitled Conversation",date:new Date(r.createdAt).toLocaleDateString("ru-RU",{day:"2-digit",month:"2-digit",year:"numeric"})}));this.conversationsSignal.set(n)}catch(t){this.logger.error("Failed to load conversations:",t)}finally{this.isLoadingConversationsSignal.set(!1)}}})}static \u0275fac=function(t){return new(t||Js)};static \u0275cmp=Me({type:Js,selectors:[["app-assistant"]],inputs:{apiUrl:"apiUrl",apiTimeout:"apiTimeout",config:"config",title:"title",greeting:"greeting",welcomeText:"welcomeText",description:"description",personalizationText:"personalizationText",inputPlaceholder:"inputPlaceholder",suggestions:"suggestions"},decls:10,vars:11,consts:[[3,"backClick","settingsClick","closeClick","conversationClick","deleteClick","newChatClick","searchChange","titleUpdate","isOpen","conversations","isLoading"],[1,"assistant-page"],[3,"menuClick","closeClick","title"],[1,"content"],["class","welcome-container",4,"ngIf"],[3,"messages",4,"ngIf"],["class","personalization-section",4,"ngIf"],[3,"valueChange","submitMessage","voiceClick","addClick","placeholder","disabled","voiceStatus","value"],[1,"welcome-container"],[1,"icon-wrapper"],["name","sparkle","width","64","height","64","dropShadow","drop-shadow(0 4px 8px rgba(255, 107, 107, 0.2))",1,"sparkle-icon"],[1,"greeting"],[1,"welcome-text"],[1,"description"],[3,"messages"],[1,"personalization-section"],[1,"personalization-text"],[1,"suggestions"],[3,"text","disabled","buttonClick",4,"ngFor","ngForOf"],[3,"buttonClick","text","disabled"]],template:function(t,n){t&1&&(g(0,"app-sidebar",0),T("backClick",function(){return n.onSidebarBackClick()})("settingsClick",function(){return n.onSidebarSettingsClick()})("closeClick",function(){return n.onSidebarCloseClick()})("conversationClick",function(r){return n.onConversationClick(r)})("deleteClick",function(r){return n.onConversationDeleteClick(r)})("newChatClick",function(){return n.onNewChatClick()})("searchChange",function(r){return n.onSearchChange(r)})("titleUpdate",function(r){return n.onConversationTitleUpdate(r)}),y(),g(1,"div",1)(2,"app-header",2),T("menuClick",function(){return n.onMenuClick()})("closeClick",function(){return n.onCloseClick()}),y(),g(3,"div",3),pe(4,N_,9,3,"div",4)(5,R_,1,1,"app-chat-history",5)(6,L_,5,2,"div",6),y(),g(7,"app-input-field",7),T("valueChange",function(r){return n.onInputValueChange(r)})("submitMessage",function(r){return n.onMessageSubmit(r)})("voiceClick",function(){return n.onVoiceClick()})("addClick",function(){return n.onAddClick()}),y()(),U(8,"app-toast-container")(9,"app-confirmation-modal")),t&2&&(P("isOpen",n.isSidebarOpen())("conversations",n.conversations())("isLoading",n.isLoadingConversations()),S(2),P("title",n.title),S(2),P("ngIf",!n.hasMessages()),S(),P("ngIf",n.hasMessages()),S(),P("ngIf",!n.hasMessages()),S(),P("placeholder",n.inputPlaceholder)("disabled",n.isLoading())("voiceStatus",n.voiceStatus())("value",n.inputValue()))},dependencies:[Ce,wi,an,_w,xw,a_,ln,g_,x_,M_,P_],styles:[".assistant-page[_ngcontent-%COMP%]{display:flex;flex-direction:column;height:100vh;max-height:100vh;background:#fff;font-family:Roboto,-apple-system,BlinkMacSystemFont,Segoe UI,Arial,sans-serif;overflow:hidden}.content[_ngcontent-%COMP%]{flex:1;display:flex;flex-direction:column;overflow:hidden;min-height:0;position:relative}app-chat-history[_ngcontent-%COMP%]{flex:1;display:flex;flex-direction:column;min-height:0;overflow:hidden}.welcome-container[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;justify-content:flex-end;padding:20px 24px 30px;text-align:center;flex:1}.icon-wrapper[_ngcontent-%COMP%]{margin-bottom:16px}.greeting[_ngcontent-%COMP%]{font-size:28px;font-weight:700;margin:0 0 12px;color:#1a1a1a}.welcome-text[_ngcontent-%COMP%]{font-size:18px;font-weight:500;margin:0 0 12px;color:#333}.description[_ngcontent-%COMP%]{font-size:15px;font-weight:400;margin:0 0 20px;color:#666;max-width:400px;line-height:1.4}.personalization-section[_ngcontent-%COMP%]{padding:0 24px 24px;display:flex;flex-direction:column;align-items:center;gap:16px;flex-shrink:0}.personalization-text[_ngcontent-%COMP%]{font-size:15px;color:#666;margin:0;text-align:center;max-width:400px;line-height:1.4}.suggestions[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;gap:10px;width:100%;max-width:400px}@media (max-width: 768px){.suggestions[_ngcontent-%COMP%]{max-width:100%}}"]})},H_={production:!0};function hf(e){return()=>e.loadConfig()}X(null,null,function*(){if(customElements.get("app-assistant")){console.log("\u26A0\uFE0F Web Component already registered, skipping...");return}let e=yield OC({providers:[em(),X1({eventCoalescing:!0}),aw(lw()),{provide:ih,useFactory:hf,deps:[ga],multi:!0},Sh,ww.forRoot({level:H_.production?q.WARN:q.DEBUG,serverLogLevel:q.ERROR,disableConsoleLogging:!1,enableSourceMaps:!0,timestampFormat:"short"}).providers||[]]}),t=Ab(j_,{injector:e.injector});customElements.define("app-assistant",t),console.log("\u2705 Web Component registered: app-assistant")});return yf(z_);})();
25
25
  /*! Bundled license information:
26
26
 
27
27
  @angular/core/fesm2022/not_found.mjs:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mbubela/oaa-assistant",
3
- "version": "0.0.5",
3
+ "version": "0.0.6",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^20.3.0",
6
6
  "@angular/core": "^20.3.0"
@@ -20,4 +20,4 @@
20
20
  "default": "./fesm2022/web-components.mjs"
21
21
  }
22
22
  }
23
- }
23
+ }