1"use strict";(self.webpackChunkquickmail=self.webpackChunkquickmail||[]).push([["app_javascript_angular-engine_projects_quickmail_app_workspace_dashboard_workspace-dashboard_-6e52cd"],{71546:(ye,O,s)=>{s.d(O,{WorkspaceDashboardModule:()=>Pe});var _=s(72200),v=s(38132),e=s(73664),C=s(37589);let T=(()=>{class n{constructor(){}static \u0275fac=function(a){return new(a||n)};static \u0275cmp=e.VBU({type:n,selectors:[["workspace-dashboard-layout"]],standalone:!1,decls:1,vars:0,template:function(a,o){1&a&&e.nrm(0,"router-outlet")},dependencies:[C.n3],encapsulation:2,changeDetection:0})}return n})();var R=s(21413),k=s(7673),E=s(5964),D=s(88141),p=s(96354),u=s(99172),j=s(25558),x=s(99437),M=s(66295),$=s(31320),I=s(21698);const F=s.p+"jeremy_ceo.6a95010a9aa4c52f.jpg",G=s.p+"jeremy.b1bc5a33d0333256.png";var P=s(10566),S=s(61990);let Y=(()=>{class n extends I.h{data;jeremy=F;jeremySignature=G;constructor(t,a){super(t,a),this.data=a}static \u0275fac=function(a){return new(a||n)(e.rXU(P.B),e.rXU("data",8))};static \u0275cmp=e.VBU({type:n,selectors:[["modal-welcome"]],standalone:!1,features:[e.Vt3],decls:29,vars:4,consts:[[3,"hideCancelAction"],["header",""],[1,"header"],["alt","Jeremy Chatelaine",1,"header__avatar",3,"src"],[1,"header__text"],["body",""],[1,"flex","flex-col","gap-2"],[1,"text-md"],["href","mailto:[email protected]",1,"link"],["href","https://tidycal.com/1gdnwj1/quickmail-trial-onboarding","target","_blank",1,"link"],["alt","Jeremy Chatelaine signature",1,"w-40",3,"src"],["actions",""],[3,"click","title"]],template:function(a,o){1&a&&(e.j41(0,"ui-modal-child",0)(1,"div",1)(2,"div",2),e.nrm(3,"img",3),e.j41(4,"span"),e.EFF(5,"Welcome from Jeremy"),e.k0s(),e.j41(6,"p",4),e.EFF(7,"Founder, QuickMail"),e.k0s()()(),e.j41(8,"div",5)(9,"div",6)(10,"div",7),e.EFF(11,"Thanks for signing up."),e.k0s(),e.j41(12,"div",7),e.EFF(13,"Now you have one simple place to run your outreach, manage your inboxes, track replies, and keep your campaigns moving. Whether you're doing cold email, follow-ups, or LinkedIn outreach, QuickMail fits right into your workflow. Do explore!"),e.k0s(),e.j41(14,"div",7),e.EFF(15,"If you ever need a hand, please contact us directly at\n"),e.j41(16,"a",8),e.EFF(17,"[email protected]"),e.k0s(),e.EFF(18,"\nor\n"),e.j41(19,"a",9),e.EFF(20,"book a demo with the team"),e.k0s(),e.EFF(21,". We're here for you."),e.k0s(),e.j41(22,"div",7),e.EFF(23,"Thanks again and all the best,"),e.k0s(),e.nrm(24,"img",10),e.j41(25,"div",7),e.EFF(26,"Founder, QuickMail"),e.k0s()()(),e.j41(27,"div",11)(28,"ui-button",12),e.bIt("click",function(){return o.close()}),e.k0s()()()),2&a&&(e.Y8G("hideCancelAction",!0),e.R7$(3),e.Y8G("src",o.jeremy,e.B4B),e.R7$(21),e.Y8G("src",o.jeremySignature,e.B4B),e.R7$(4),e.Y8G("title","Ok, let me see my dashboard"))},dependencies:[S.Q,I.h],styles:[".header[_ngcontent-%COMP%]{display:flex;width:100%;flex-direction:column;align-items:center;row-gap:.25rem;line-height:1.25}.header__avatar[_ngcontent-%COMP%]{height:5rem;width:5rem;border-radius:9999px}.header__text[_ngcontent-%COMP%]{font-size:.8125rem;font-weight:400;--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.link[_ngcontent-%COMP%]{cursor:pointer;font-size:.8125rem;--tw-text-opacity: 1;color:hsl(var(--twc-blue-500) / var(--twc-blue-500-opacity, var(--tw-text-opacity)))}.link[_ngcontent-%COMP%]:hover{--tw-text-opacity: 1;color:hsl(var(--twc-blue-600) / var(--twc-blue-600-opacity, var(--tw-text-opacity)))}[_nghost-%COMP%] .modal-child__actions-buttons{width:100%;justify-content:center!important}[_nghost-%COMP%] .modal-child__actions-buttons ui-button{margin-left:auto;margin-right:auto}"]})}return n})();var y=s(25553);y.Ay` 2 query dashboardViewConfig($accountId: ID!) { 3 account(accountId: $accountId) { 4 id 5 dashboardViewConfig 6 calculatorViewConfig 7 } 8 } 9`;const W=y.Ay` 10 query dashboardStats($accountId: ID!) { 11 account(accountId: $accountId) { 12 id 13 dashboardStats 14 } 15 } 16`;var d=s(2615),N=s(17705),A=s(14816),U=s(44260),H=s(30450),X=s(48578),B=s(28256),z=s(57167),g=s(84341);const L=["agentInput"],Q=["messagesContainer"],V=n=>({"agent-dashboard__status-pill--active":n}),J=n=>({"agent-dashboard__recent-chevron--open":n});function q(n,r){1&n&&e.nrm(0,"span",25)}function K(n,r){if(1&n&&(e.qex(0),e.j41(1,"div",21)(2,"span",22),e.EFF(3),e.k0s(),e.j41(4,"span",23),e.EFF(5),e.nI1(6,"number"),e.k0s()(),e.DNE(7,q,1,0,"span",24),e.bVm()),2&n){const t=r.$implicit,a=r.last;e.R7$(),e.Y8G("tooltip","Last 30 days stats"),e.R7$(2),e.JRh(t.label),e.R7$(2),e.JRh(e.bMT(6,4,t.value)),e.R7$(2),e.Y8G("ngIf",!a)}}function Z(n,r){if(1&n&&(e.j41(0,"div",19),e.DNE(1,K,8,6,"ng-container",20),e.k0s()),2&n){const t=r.ngIf;e.R7$(),e.Y8G("ngForOf",t)}}function ee(n,r){1&n&&(e.j41(0,"div",31),e.nrm(1,"ui-icon",32),e.j41(2,"span"),e.EFF(3,"Loading conversation..."),e.k0s()()),2&n&&(e.R7$(),e.Y8G("name","spinner")("spin","true"))}function te(n,r){1&n&&(e.j41(0,"div",43),e.nrm(1,"img",44),e.k0s())}function ne(n,r){if(1&n&&(e.j41(0,"div",45),e.EFF(1),e.k0s()),2&n){const t=e.XpG().$implicit,a=e.XpG(3);e.R7$(),e.JRh(a.messageDateTime(t))}}function ae(n,r){if(1&n&&e.nrm(0,"ui-avatar",46),2&n){const t=e.XpG(4);e.Y8G("src",null==t.profile?null:t.profile.avatarUrl)("name",(null==t.profile?null:t.profile.name)||(null==t.profile?null:t.profile.email))("size","md")}}function oe(n,r){if(1&n&&(e.j41(0,"div",36),e.DNE(1,te,2,0,"div",37),e.j41(2,"div",38)(3,"div",39),e.nrm(4,"div",40),e.k0s(),e.DNE(5,ne,2,1,"div",41),e.k0s(),e.DNE(6,ae,1,3,"ui-avatar",42),e.k0s()),2&n){const t=r.$implicit,a=e.XpG(3);e.Y8G("ngClass","agent-dashboard__message--"+t.role),e.R7$(),e.Y8G("ngIf","assistant"===t.role),e.R7$(3),e.Y8G("innerHTML",a.formatMessage(t.text),e.npT),e.R7$(),e.Y8G("ngIf","user"===t.role&&a.messageDateTime(t)),e.R7$(),e.Y8G("ngIf","user"===t.role)}}function se(n,r){1&n&&e.nrm(0,"ui-icon",52),2&n&&e.Y8G("name","spinner")("spin","true")("size","xs")}function re(n,r){if(1&n&&(e.j41(0,"div",50)(1,"span"),e.EFF(2),e.k0s(),e.DNE(3,se,1,3,"ui-icon",51),e.k0s()),2&n){const t=r.$implicit,a=r.last;e.Y8G("ngClass",e.eq3(3,V,a)),e.R7$(2),e.JRh(t),e.R7$(),e.Y8G("ngIf",a)}}function ie(n,r){1&n&&(e.j41(0,"div",53)(1,"span"),e.EFF(2,"Thinking..."),e.k0s(),e.nrm(3,"ui-icon",52),e.k0s()),2&n&&(e.R7$(3),e.Y8G("name","spinner")("spin","true")("size","xs"))}function de(n,r){if(1&n&&(e.j41(0,"div",47),e.DNE(1,re,4,5,"div",48)(2,ie,4,3,"div",49),e.k0s()),2&n){const t=e.XpG(3);e.R7$(),e.Y8G("ngForOf",t.progressMessages),e.R7$(),e.Y8G("ngIf",!t.progressMessages.length)}}function ce(n,r){if(1&n&&(e.j41(0,"div",33,2),e.DNE(2,oe,7,5,"div",34)(3,de,3,2,"div",35),e.k0s()),2&n){const t=e.XpG(2);e.R7$(2),e.Y8G("ngForOf",t.messages),e.R7$(),e.Y8G("ngIf",t.loading)}}function le(n,r){1&n&&e.nrm(0,"ui-icon",15),2&n&&e.Y8G("name","user-headset")}function ge(n,r){1&n&&e.nrm(0,"ui-icon",32),2&n&&e.Y8G("name","spinner")("spin","true")}function he(n,r){if(1&n){const t=e.RV6();e.j41(0,"button",57),e.bIt("click",function(){d.eBV(t);const o=e.XpG(3);return d.Njj(o.escalateToHuman())}),e.DNE(1,le,1,1,"ui-icon",58)(2,ge,1,2,"ui-icon",59),e.j41(3,"span"),e.EFF(4),e.k0s()()}if(2&n){const t=e.XpG(3);e.Y8G("disabled",t.escalatingToHuman||t.loading),e.R7$(),e.Y8G("ngIf",!t.escalatingToHuman),e.R7$(),e.Y8G("ngIf",t.escalatingToHuman),e.R7$(2),e.JRh(t.escalatingToHuman?"Contacting support...":"Don't like the answer? Escalate to a human")}}function me(n,r){if(1&n&&(e.j41(0,"div",60),e.nrm(1,"ui-icon",15),e.j41(2,"span"),e.EFF(3),e.k0s()()),2&n){const t=e.XpG(3);e.R7$(),e.Aen("regular"),e.Y8G("name","check-circle"),e.R7$(2),e.JRh(t.humanEscalationStatus)}}function _e(n,r){if(1&n&&(e.j41(0,"div",54),e.DNE(1,he,5,4,"button",55)(2,me,4,4,"div",56),e.k0s()),2&n){const t=e.XpG(2);e.R7$(),e.Y8G("ngIf",!t.humanEscalationStatus),e.R7$(),e.Y8G("ngIf",t.humanEscalationStatus)}}function pe(n,r){if(1&n&&(e.j41(0,"div",61),e.EFF(1),e.k0s()),2&n){const t=e.XpG(2);e.R7$(),e.JRh(t.error)}}function ue(n,r){if(1&n&&(e.j41(0,"div",26),e.DNE(1,ee,4,2,"div",27)(2,ce,4,2,"div",28)(3,_e,3,2,"div",29)(4,pe,2,1,"div",30),e.k0s()),2&n){const t=e.XpG();e.R7$(),e.Y8G("ngIf",t.loadingConversation),e.R7$(),e.Y8G("ngIf",!t.loadingConversation),e.R7$(),e.Y8G("ngIf",!t.loadingConversation&&(t.canEscalateToHuman||t.escalatingToHuman||t.humanEscalationStatus)),e.R7$(),e.Y8G("ngIf",t.error)}}function fe(n,r){if(1&n&&(e.j41(0,"div",62)(1,"div",63),e.nrm(2,"ui-icon",15),e.k0s(),e.j41(3,"h1"),e.EFF(4),e.nI1(5,"async"),e.k0s()()),2&n){const t=e.XpG();e.R7$(2),e.Y8G("name","sparkles"),e.R7$(2),e.JRh(e.bMT(5,2,t.headerText$))}}function be(n,r){if(1&n){const t=e.RV6();e.j41(0,"button",70),e.bIt("click",function(){const o=d.eBV(t).$implicit,i=e.XpG(3);return d.Njj(i.openRecentAgentQuery(o))}),e.j41(1,"span",71),e.EFF(2),e.k0s(),e.j41(3,"span",72),e.EFF(4),e.k0s()()}if(2&n){const t=r.$implicit,a=e.XpG(3);e.R7$(2),e.JRh(t.lastQuery),e.R7$(2),e.JRh(a.recentAgentQueryTime(t))}}function ve(n,r){if(1&n&&(e.j41(0,"div",68),e.DNE(1,be,5,2,"button",69),e.k0s()),2&n){const t=e.XpG().ngIf;e.R7$(),e.Y8G("ngForOf",t)}}function Ce(n,r){if(1&n){const t=e.RV6();e.j41(0,"div",64)(1,"button",65),e.bIt("click",function(){d.eBV(t);const o=e.XpG();return d.Njj(o.toggleRecent())}),e.j41(2,"span",66),e.nrm(3,"ui-icon",15),e.k0s(),e.j41(4,"span"),e.EFF(5,"RECENT"),e.k0s()(),e.DNE(6,ve,2,1,"div",67),e.k0s()}if(2&n){const t=r.ngIf,a=e.XpG();e.R7$(),e.BMQ("aria-expanded",a.recentExpanded),e.R7$(),e.Y8G("ngClass",e.eq3(4,J,a.recentExpanded)),e.R7$(),e.Y8G("name","chevron-right"),e.R7$(3),e.Y8G("ngIf",a.recentExpanded&&t.length)}}const xe=v.iI.forChild([{path:"",component:T,children:[{path:"",component:(()=>{class n{helpAgentService;modalService;pusherService;route;apollo;cdRef;zone;workspaceService;agentInput;messagesContainer;workspaceId;headerText$;profile;dashboardStats$;recentAgentQueries$;agentMessage="";conversationId="";error="";escalatingToHuman=!1;humanEscalationStatus="";humanEscalationTicketUrl="";loading=!1;loadingConversation=!1;messages=[];progressMessages=[];recentExpanded=!1;requestId="";recentRefresh$=new R.B;pusherSub;constructor(t,a,o,i,l,c,w,h){this.helpAgentService=t,this.modalService=a,this.pusherService=o,this.route=i,this.apollo=l,this.cdRef=c,this.zone=w,this.workspaceService=h,this.pusherSub=this.pusherService.helpAgent$.subscribe(m=>this.zone.run(()=>this.handlePusherEvent(m)))}get conversationStarted(){return this.loading||this.loadingConversation||this.messages.length>0}get canEscalateToHuman(){return!!this.conversationId&&!this.loading&&!this.loadingConversation&&!this.escalatingToHuman&&!this.humanEscalationStatus&&this.messages.some(t=>"assistant"===t.role&&t.text)}ngOnInit(){this.workspaceId=this.workspaceService.id.getValue(),"1"===this.route.
16snapshot.queryParams.welcome&&this.modalService.show(Y),this.headerText$=this.getLogonsName().pipe((0,E.p)(t=>null!==t),(0,D.M)(t=>{this.profile=t}),(0,p.T)(t=>"Hello, "+t.firstName+"!"),(0,u.Z)("Hello!")),this.dashboardStats$=this.getDashboardStats().pipe((0,p.T)(t=>[{label:"Leads contacted",value:t.leadsContacted},{label:"LinkedIn Connections",value:t.connections},{label:"Replies",value:t.replies},{label:"Bounces",value:t.bounces}]),(0,u.Z)(this.emptyDashboardStatsItems())),this.recentAgentQueries$=this.recentRefresh$.pipe((0,u.Z)(null),(0,j.n)(()=>this.helpAgentService.conversations(this.workspaceId).pipe((0,x.W)(()=>(0,k.of)([])))),(0,p.T)(t=>(t||[]).filter(a=>!!a.lastQuery).slice(0,5)),(0,u.Z)([]))}ngOnDestroy(){this.pusherSub&&this.pusherSub.unsubscribe()}ngAfterViewInit(){setTimeout(()=>{this.agentInput?.nativeElement.focus()})}getLogonsName(){return this.apollo.watchQuery({query:M.J1` 17 query myProfile { 18 profile { 19 id 20 avatarUrl 21 email 22 firstName 23 name 24 } 25 } 26 `,fetchPolicy:"cache-and-network",notifyOnNetworkStatusChange:!1}).valueChanges.pipe((0,p.T)(({data:t})=>t.profile),(0,u.Z)(null))}getDashboardStats(){return this.apollo.watchQuery({query:W,variables:{accountId:this.workspaceId},fetchPolicy:"cache-and-network",notifyOnNetworkStatusChange:!1}).valueChanges.pipe((0,p.T)(({data:t})=>this.normalizeDashboardStats(t?.account?.dashboardStats)),(0,x.W)(()=>(0,k.of)(this.emptyDashboardStats())))}handleAgentKeydown(t){"Enter"!==t.key||t.shiftKey||(t.preventDefault(),this.sendAgentMessage())}sendAgentMessage(){const t=this.agentMessage.trim();if(!t||this.loading)return;this.agentMessage="",this.error="",this.loading=!0,this.resetHumanEscalation(),this.conversationId||(this.conversationId=this.buildRequestId()),this.requestId=this.buildRequestId(),this.progressMessages=["Queued the question."];const a=(new Date).toISOString();this.messages.push({role:"user",text:t,timestamp:a}),this.scrollToBottom(),this.helpAgentService.ask(this.workspaceId,t,this.requestId,this.currentPage(),this.conversationId).subscribe({next:o=>this.handleResponse(o),error:o=>this.handleError(o)})}openRecentAgentQuery(t){!t?.conversationId||this.loading||(this.error="",this.conversationId=t.conversationId,this.loadingConversation=!0,this.progressMessages=[],this.resetHumanEscalation(),this.recentExpanded=!1,this.helpAgentService.conversation(this.workspaceId,t.conversationId).subscribe({next:a=>{this.messages=this.messagesFromConversation(a),this.loadingConversation=!1,this.cdRef.detectChanges(),this.scrollToBottom(),this.agentInput?.nativeElement.focus()},error:a=>{this.loadingConversation=!1,this.handleError(a)}}))}formatMessage(t){const a=this.escapeHtml(t||""),o=[];return a.replace(/\[([^\]]+)\]\((https?:\/\/[^\s)]+)\)/g,(h,m,b)=>{const f=`%%HELP_AGENT_LINK_${o.length}%%`;return o.push(this.linkForUrl(b,m)),f}).replace(/https?:\/\/[^\s<*]+/g,h=>this.linkForUrl(h)).replace(/%%HELP_AGENT_LINK_(\d+)%%/g,(h,m)=>o[Number(m)]||h).replace(/\*\*([\s\S]+?)\*\*/g,"<strong>$1</strong>").replace(/^(#{1,6})[ \t]+(.+)$/gm,(h,m,b)=>{const f=m.length;return`<h${f}>${b}</h${f}>`})}linkForUrl(t,a){const o=t.match(/^(.+?)([.,;:!?)]*)$/),i=o?.[1]||t,l=o?.[2]||"";return`<a href="${i}" target="_blank" rel="noopener noreferrer">${this.helpPageName(i)||a||i}</a>${l}`}helpPageName(t){try{const a=new URL(t);if("help.quickmail.com"!==a.hostname)return"";const o=a.pathname.split("/").filter(Boolean);return o[o.length-1]||""}catch{return""}}recentAgentQueryTime(t){return this.formatDateTime(t.updatedAt||t.createdAt)}messageDateTime(t){return this.formatDateTime(t.timestamp)}toggleRecent(){this.recentExpanded=!this.recentExpanded}escalateToHuman(){!this.conversationId||this.loading||this.loadingConversation||this.escalatingToHuman||(this.error="",this.escalatingToHuman=!0,this.humanEscalationStatus="",this.humanEscalationTicketUrl="",this.helpAgentService.escalate(this.workspaceId,this.conversationId,this.currentPage()).subscribe({next:t=>{this.escalatingToHuman=!1,t?.error?this.error=t.error:(this.humanEscalationTicketUrl=t?.ticketUrl||"",this.humanEscalationStatus="A human supp
26ort agent will reply by email.")},error:t=>{this.escalatingToHuman=!1,this.handleError(t)}}))}currentPage(){return window.location.href}handleResponse(t){if(!t?.error)return t?.queued?(this.conversationId=t.conversationId||this.conversationId,void(this.requestId=t.requestId||t.request_id||this.requestId)):(this.loading=!1,this.messages.push({role:"assistant",text:t?.response||"I could not find an answer for that yet.",timestamp:(new Date).toISOString(),toolCalls:t?.toolCalls||[]}),this.recentRefresh$.next(),void this.scrollToBottom());this.handleError(t.error)}handleError(t){this.loading=!1,this.requestId="",this.progressMessages=[],this.error=t?.message||t||"QuickMail AI could not answer right now."}handlePusherEvent(t){const a=t?.request_id||t?.requestId,o=t?.data?.conversation_id||t?.data?.conversationId;if(a&&a===this.requestId||o&&o===this.conversationId||this.loading){if("result"===t.status)return this.handleResult(t),void this.cdRef.detectChanges();if("error"===t.status)return o&&(this.conversationId=o),this.recentRefresh$.next(),this.handleError(t?.message),void this.cdRef.detectChanges();t?.message&&(this.progressMessages=[...this.progressMessages,t.message],this.cdRef.detectChanges(),this.scrollToBottom())}}resetHumanEscalation(){this.escalatingToHuman=!1,this.humanEscalationStatus="",this.humanEscalationTicketUrl=""}handleResult(t){const a=t?.data?.help_agent_query_id||t?.data?.helpAgentQueryId,o=t?.data?.conversation_id||t?.data?.conversationId;if(o&&(this.conversationId=o),!a)return this.loading=!1,this.requestId="",this.progressMessages=[],this.messages.push({role:"assistant",text:t?.data?.response||t?.message||"Done.",timestamp:(new Date).toISOString(),toolCalls:t?.data?.tool_calls||t?.data?.toolCalls||[]}),this.recentRefresh$.next(),void this.scrollToBottom();this.helpAgentService.getQuery(this.workspaceId,a).subscribe({next:i=>{this.loading=!1,this.requestId="",this.progressMessages=[],i?.error?this.handleError(i.error):(this.conversationId=i?.conversationId||this.conversationId,this.messages.push({role:"assistant",text:i?.result||"I could not find an answer for that yet.",timestamp:i?.createdAt||(new Date).toISOString(),toolCalls:i?.toolCalls||t?.data?.tool_calls||t?.data?.toolCalls||[]}),this.recentRefresh$.next(),this.scrollToBottom())},error:i=>this.handleError(i)})}buildRequestId(){return window.crypto?.randomUUID?window.crypto.randomUUID():`${Date.now()}-${Math.random().toString(36).slice(2)}`}emptyDashboardStats(){return{leadsContacted:0,connections:0,replies:0,bounces:0}}emptyDashboardStatsItems(){const t=this.emptyDashboardStats();return[{label:"Loading...",value:t.leadsContacted},{label:"Loading...",value:t.connections},{label:"Loading...",value:t.replies},{label:"Loading...",value:t.bounces}]}normalizeDashboardStats(t){return{leadsContacted:Number(t?.leads_contacted||t?.leadsContacted||0),connections:Number(t?.connections||0),replies:Number(t?.replies||0),bounces:Number(t?.bounces||0)}}messagesFromConversation(t){const a=[];return(t?.queries||[]).forEach(o=>{o.query&&a.push({role:"user",text:o.query,timestamp:o.createdAt}),(o.result||o.error)&&a.push({role:"assistant",text:o.result||o.error,timestamp:o.createdAt,toolCalls:o.toolCalls||[]})}),a}formatDateTime(t){return t?new Intl.DateTimeFormat(void 0,{day:"numeric",hour:"numeric",minute:"2-digit",month:"short",year:"numeric"}).format(new Date(t)):""}escapeHtml(t){const a={"&":"&","<":"<",">":">",'"':""","'":"'"};return t.replace(/[&<>"']/g,o=>a[o])}scrollToBottom(){setTimeout(()=>{const t=this.messagesContainer?.nativeElement;t&&(t.scrollTop=t.scrollHeight)})}static \u0275fac=function(a){return new(a||n)(e.rXU(A._),e.rXU(P.B),e.rXU($.r),e.rXU(C.nX),e.rXU(M.Ic),e.rXU(N.gRc),e.rXU(e.SKi),e.rXU(U.j))};static \u0275cmp=e.VBU({type:n,selectors:[["workspace-dashboard-page"]],viewQuery:function(a,o){if(1&a&&(e.GBs(L,5),e.GBs(Q,5)),2&a){let i;e.mGM(i=e.lsd())&&(o.agentInput=i.first),e.mGM(i=e.lsd())&&(o.messagesContainer=i.first)}},standalone:!1,decls:24,vars:15,consts:[["greeting",""],["agentInput",""],["messagesContainer",""],[3,"title"],[1,"agent-dashboard"],[1,"agent-dashboard__shell"],["class","agent-dashboard__stats",4,"ngIf"],["class","agent-dashboard__conversation",4,"ngIf","ngIfElse"],[1,"agent-dashboard__bottom"],[1,"agent-dashboard__composer-area"],[1,"agent-dashboard__composer",3,"ngSubmit"],["name","agentMessage","placeholder","How can I help you today?","rows","3",1,"agent-dashboard__input",3,"ngModelChange","keydown","ngModel","disabled"],[1,"agent-dashboard__toolbar"],[1,"agent-dashboard__label"],["type","submit","title","Send to AI Agent",1,"agent-dashboard__send",3,"disabled"],[3,"name"],["href","https://api.quickmail.com/help/mcp","target","_blank","rel","noopener noreferrer","aria-label","Connect your AI app via MCP (opens in a new tab)",1,"agent-dashboard__mcp-link"],[3,"name","size"],["class","agent-dashboard__recent",4,"ngIf"],[1,"agent-dashboard__stats"],[4,"ngFor","ngForOf"],[1,"agent-dashboard__stat",3,"tooltip"],[1,"agent-dashboard__stat-label"],[1,"agent-dashboard__stat-value"],["class","agent-dashboard__stat-separator",4,"ngIf"],[1,"agent-dashboard__stat-separator"],[1,"agent-dashboard__conversation"],["class","agent-dashboard__conversation-loading",4,"ngIf"],["class","agent-dashboard__messages",4,"ngIf"],["class","agent-dashboard__human-support",4,"ngIf"],["class","agent-dashboard__error",4,"ngIf"],[1,"agent-dashboard__conversation-loading"],[3,"name","spin"],[1,"agent-dashboard__messages"],["class","agent-dashboard__message",3,"ngClass",4,"ngFor","ngForOf"],["class","agent-dashboard__status",4,"ngIf"],[1,"agent-dashboard__message",3,"ngClass"],["class","agent-dashboard__logo",4,"ngIf"],[1,"agent-dashboard__message-content"],[1,"agent-dashboard__bubble"],[1,"agent-dashboard__formatted",3,"innerHTML"],["class","agent-dashboard__message-time",4,"ngIf"],["class","agent-dashboard__avatar",3,"src","name","size",4,"ngIf"],[1,"agent-dashboard__logo"],["src","/quickmail.svg","alt","QuickMail"],[1,"agent-dashboard__message-time"],[1,"agent-dashboard__avatar",3,"src","name","size"],[1,"agent-dashboard__status"],["class","agent-dashboard__status-pill",3,"ngClass",4,"ngFor","ngForOf"],["class","agent-dashboard__status-pill agent-dashboard__status-pill--active",4,"ngIf"],[1,"agent-dashboard__status-pill",3,"ngClass"],[3,"name","spin","size",4,"ngIf"],[3,"name","spin","size"],[1,"agent-dashboard__status-pill","agent-dashboard__status-pill--active"],[1,"agent-dashboard__human-support"],["class","agent-dashboard__human-support-button","type","button",3,"disabled","click",4,"ngIf"],["class","agent-dashboard__human-support-status",4,"ngIf"],["type","button",1,"agent-dashboard__human-support-button",3,"click","disabled"],[3,"name",4,"ngIf"],[3,"name","spin",4,"ngIf"],[1,"agent-dashboard__human-support-status"],[1,"agent-dashboard__error"],[1,"agent-dashboard__greeting"],["aria-hidden","true",1,"agent-dashboard__spark"],[1,"agent-dashboard__recent"],["type","button",1,"agent-dashboard__recent-heading",3,"click"],[1,"agent-dashboard__recent-chevron",3,"ngClass"],["class","agent-dashboard__recent-list",4,"ngIf"],[1,"agent-dashboard__recent-list"],["class","agent-dashboard__recent-item","type","button",3,"click",4,"ngFor","ngForOf"],["type","button",1,"agent-dashboard__recent-item",3,"click"],[1,"agent-dashboard__recent-text"],[1,"agent-dashboard__recent-time"]],template:function(a,o){if(1&a){const i=e.RV6();e.nrm(0,"ui-page-header",3),e.j41(1,"div",4)(2,"div",5),e.DNE(3,Z,2,1,"div",6),e.nI1(4,"async"),e.DNE(
265,ue,5,4,"div",7)(6,fe,6,4,"ng-template",null,0,e.C5r),e.j41(8,"div",8)(9,"div",9)(10,"form",10),e.bIt("ngSubmit",function(){return d.eBV(i),d.Njj(o.sendAgentMessage())}),e.j41(11,"textarea",11,1),e.mxI("ngModelChange",function(c){return d.eBV(i),e.DH7(o.agentMessage,c)||(o.agentMessage=c),d.Njj(c)}),e.bIt("keydown",function(c){return d.eBV(i),d.Njj(o.handleAgentKeydown(c))}),e.k0s(),e.j41(13,"div",12)(14,"span",13),e.EFF(15,"Ask QuickMail AI"),e.k0s(),e.j41(16,"button",14),e.nrm(17,"ui-icon",15),e.k0s()()(),e.j41(18,"a",16)(19,"span"),e.EFF(20,"Connect your AI app via MCP"),e.k0s(),e.nrm(21,"ui-icon",17),e.k0s()(),e.DNE(22,Ce,7,6,"div",18),e.nI1(23,"async"),e.k0s()()()}if(2&a){const i=e.sdS(7);e.Y8G("title","Dashboard"),e.R7$(3),e.Y8G("ngIf",e.bMT(4,11,o.dashboardStats$)),e.R7$(2),e.Y8G("ngIf",o.conversationStarted)("ngIfElse",i),e.R7$(6),e.R50("ngModel",o.agentMessage),e.Y8G("disabled",o.loading),e.R7$(5),e.Y8G("disabled",o.loading||!o.agentMessage.trim()),e.R7$(),e.Y8G("name","paper-plane"),e.R7$(4),e.Y8G("name","external-link")("size","xs"),e.R7$(),e.Y8G("ngIf",e.bMT(23,13,o.recentAgentQueries$))}},dependencies:[_.YU,_.Sq,_.bT,H.f,X.R,B.y,z.d,g.qT,g.me,g.BC,g.cb,g.vS,g.cV,_.Jj,_.QX],styles:['[_nghost-%COMP%]{display:grid;grid-template-rows:auto minmax(0,1fr);inset:0 1.25rem 2rem;min-height:0;overflow:hidden;position:absolute}.agent-dashboard[_ngcontent-%COMP%]{align-items:stretch;box-sizing:border-box;display:grid;grid-template-columns:minmax(0,48rem);height:100%;justify-content:center;min-height:0;overflow:hidden}.agent-dashboard__shell[_ngcontent-%COMP%]{align-items:stretch;display:grid;grid-template-rows:auto minmax(0,1fr) auto;height:100%;min-height:0;overflow:hidden;width:100%}.agent-dashboard__stats[_ngcontent-%COMP%]{align-items:center;color:#9a9a9a;font-size:small;display:flex;flex-wrap:wrap;gap:.75rem;justify-content:center;line-height:1.25;margin:0 auto;padding:1.05rem 1.6rem;width:fit-content}.agent-dashboard__stat[_ngcontent-%COMP%]{align-items:baseline;display:inline-flex;gap:.45rem;white-space:nowrap}.agent-dashboard__stat-label[_ngcontent-%COMP%]{color:#9a9a9a;font-weight:400}.agent-dashboard__stat-value[_ngcontent-%COMP%]{color:#3f3f3f;font-weight:700}
26.agent-dashboard__stat-separator[_ngcontent-%COMP%]{color:#9a9a9a}.agent-dashboard__stat-separator[_ngcontent-%COMP%]:before{content:"\\b7"}.agent-dashboard__greeting[_ngcontent-%COMP%]{align-items:center;color:#23262f;display:flex;flex:1 1 auto;flex-wrap:wrap;gap:1rem;padding-bottom:20px;justify-content:center;min-height:0;text-align:center;width:100%}.agent-dashboard__spark[_ngcontent-%COMP%]{line-height:1}.agent-dashboard__greeting[_ngcontent-%COMP%] h1[_ngcontent-%COMP%]{line-height:1.05;margin:0}.agent-dashboard__conversation[_ngcontent-%COMP%]{display:grid;gap:.5rem;grid-template-rows:auto minmax(0,1fr) auto;min-height:0;overflow:hidden;width:100%}.agent-dashboard__conversation-loading[_ngcontent-%COMP%]{align-items:center;color:#737782;display:flex;gap:.5rem}.agent-dashboard__messages[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.75rem;min-height:0;overscroll-behavior:contain;overflow-y:auto;padding-right:.25rem}.agent-dashboard__bottom[_ngcontent-%COMP%]{display:grid;gap:1.75rem;grid-template-rows:auto auto;min-height:0;width:100%}.agent-dashboard__message[_ngcontent-%COMP%]{align-items:flex-start;display:flex;gap:.75rem}.agent-dashboard__message--user[_ngcontent-%COMP%]{justify-content:flex-end}.agent-dashboard__message-content[_ngcontent-%COMP%]{align-items:flex-start;display:flex;flex-direction:column;max-width:calc(82% - 3rem)}.agent-dashboard__message--user[_ngcontent-%COMP%] .agent-dashboard__message-content[_ngcontent-%COMP%]{align-items:flex-end}.agent-dashboard__message-time[_ngcontent-%COMP%]{color:#737782;font-size:.75rem;line-height:1;margin-top:.35rem;padding:0 .25rem}.agent-dashboard__avatar[_ngcontent-%COMP%], .agent-dashboard__logo[_ngcontent-%COMP%]{flex:0 0 auto}.agent-dashboard__logo[_ngcontent-%COMP%]{align-items:center;background:#fff;border:1px solid #d7d9df;border-radius:999px;display:flex;height:2.25rem;justify-content:center;overflow:hidden;width:2.25rem}.agent-dashboard__logo[_ngcontent-%COMP%] img[_ngcontent-%COMP%]{display:block;height:1.25rem;width:1.625rem}.agent-dashboard__bubble[_ngcontent-%COMP%]{border-radius:.75rem;padding:.75rem 1rem;white-space:pre-wrap}.agent-dashboard__message--assistant[_ngcontent-%COMP%] .agent-dashboard__bubble[_ngcontent-%COMP%]{background:#fff;border:1px solid #e0e2e7;color:#23262f}.agent-dashboard__message--user[_ngcontent-%COMP%] .agent-dashboard__bubble[_ngcontent-%COMP%]{background:#23262f;color:#fff}.agent-dashboard__formatted[_ngcontent-%COMP%] a{text-decoration:underline;text-underline-offset:.125rem}.agent-dashboard__formatted[_ngcontent-%COMP%] h1, .agent-dashboard__formatted[_ngcontent-%COMP%] h2, .agent-dashboard__formatted[_ngcontent-%COMP%] h3, .agent-dashboard__formatted[_ngcontent-%COMP%] h4, .agent-dashboard__formatted[_ngcontent-%COMP%] h5, .agent-dashboard__formatted[_ngcontent-%COMP%] h6{color:#23262f;font-weight:700;line-height:1.3;margin:.7rem 0 .35rem}.agent-dashboard__formatted[_ngcontent-%COMP%] h1:first-child, .agent-dashboard__formatted[_ngcontent-%COMP%] h2:first-child, .agent-dashboard__formatted[_ngcontent-%COMP%] h3:first-child, .agent-dashboard__formatted[_ngcontent-%COMP%] h4:first-child, .agent-dashboard__formatted[_ngcontent-%COMP%] h5:first-child, .agent-dashboard__formatted[_ngcontent-%COMP%] h6:first-child{margin-top:0}.agent-dashboard__formatted[_ngcontent-%COMP%] h1, .agent-dashboard__formatted[_ngcontent-%COMP%] h2{font-size:1.05rem}.agent-dashboard__formatted[_ngcontent-%COMP%] h3{font-size:1rem}.agent-dashboard__formatted[_ngcontent-%COMP%] h4, .agent-dashboard__formatted[_ngcontent-%COMP%] h5, .agent-dashboard__formatted[_ngcontent-%COMP%] h6{font-size:.95rem}.agent-dashboard__status[_ngcontent-%COMP%]{align-items:center;display:flex;flex-wrap:wrap;gap:.5rem}.agent-dashboard__status-pill[_ngcontent-%COMP%]{align-items:center;background:#d7dbe2;border-radius:999px;color:#4b4f5c;display:inline-flex;font-size:.75rem;gap:.35rem;line-height:1;padding:.2rem .4rem;white-space:nowrap}.agent-dashboard__status-pill--active[_ngcontent-%COMP%]{background:#c7ccd6;color:#383d49}.agent-dashboard__error[_ngcontent-%COMP%]{background:#fff1f1;border:1px solid #ffc9c9;border-radius:.75rem;color:#b42318;padding:.75rem 1rem}.agent-dashboard__human-support[_ngcontent-%COMP%]{align-items:center;display:flex;justify-content:flex-start}.agent-dashboard__human-support-button[_ngcontent-%COMP%], .agent-dashboard__human-support-status[_ngcontent-%COMP%]{align-items:center;border-radius:.6rem;display:inline-flex;font-size:.8125rem;font-weight:600;gap:.45rem;line-height:1;min-height:2.25rem;padding:.6rem .8rem;white-space:nowrap}.agent-dashboard__human-support-button[_ngcontent-%COMP%]{background:#fff;border:1px solid #d7d9df;color:#383d49;transition:border-color .15s ease,color .15s ease,opacity .15s ease}.agent-dashboard__human-support-button[_ngcontent-%COMP%]:hover:not(:disabled){border-color:#13b5c8;color:#0b8798}.agent-dashboard__human-support-button[_ngcontent-%COMP%]:disabled{cursor:not-allowed;opacity:.55}.agent-dashboard__human-support-status[_ngcontent-%COMP%]{background:#ecfdf3;border:1px solid #abefc6;color:#067647}.agent-dashboard__composer-area[_ngcontent-%COMP%]{display:grid;gap:.5rem;min-width:0}.agent-dashboard__mcp-link[_ngcontent-%COMP%]{align-items:center;color:#737782;display:inline-flex;font-size:.75rem;gap:.35rem;justify-self:end;line-height:1.4}.agent-dashboard__mcp-link[_ngcontent-%COMP%]:hover{color:#23262f;text-decoration:underline}.agent-dashboard__mcp-link[_ngcontent-%COMP%]:focus-visible{outline:2px solid #5254f7;outline-offset:3px}.agent-dashboard__composer[_ngcontent-%COMP%]{background:#fff;border:1px solid #d7d9df;border-radius:1.25rem;box-shadow:0 .5rem .5rem #23262f14;display:flex;flex-direction:column;flex:0 0 auto;min-height:9.5rem;overflow:hidden;padding:1.25rem;width:100%}.agent-dashboard__input[_ngcontent-%COMP%]{appearance:none;border:0;color:#23262f;flex:1;line-height:1.6;min-height:5.25rem;outline:0;resize:none;width:100%}.agent-dashboard__input[_ngcontent-%COMP%]:focus, .agent-dashboard__input[_ngcontent-%COMP%]:focus-visible{border-color:transparent!important;box-shadow:none!important;outline:none!important;--tw-ring-color: transparent;--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000}.agent-dashboard__input[_ngcontent-%COMP%]::placeholder{color:#737782}.agent-dashboard__toolbar[_ngcontent-%COMP%]{align-items:center;display:flex;gap:1rem;justify-content:flex-end}.agent-dashboard__label[_ngcontent-%COMP%]{color:#4b4f5c}
26.agent-dashboard__send[_ngcontent-%COMP%]{align-items:center;background:#23262f;border:0;border-radius:999px;color:#fff;display:flex;height:2.5rem;justify-content:center;transition:background .15s ease,opacity .15s ease,transform .15s ease;width:2.5rem}.agent-dashboard__send[_ngcontent-%COMP%]:hover:not(:disabled){background:#0f1117;transform:translateY(-1px)}.agent-dashboard__send[_ngcontent-%COMP%]:disabled{cursor:not-allowed;opacity:.35}.agent-dashboard__recent[_ngcontent-%COMP%]{display:flex;flex:0 0 auto;flex-direction:column;gap:.75rem;width:100%;font-size:12px}.agent-dashboard__recent-heading[_ngcontent-%COMP%]{align-items:center;background:transparent;border:0;color:#737782;display:flex;gap:.3rem;padding:0;text-align:left;width:fit-content}.agent-dashboard__recent-chevron[_ngcontent-%COMP%]{align-items:center;display:inline-flex;transform-origin:center;transition:transform .18s ease}.agent-dashboard__recent-chevron--open[_ngcontent-%COMP%]{transform:rotate(90deg)}.agent-dashboard__recent-list[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.25rem}.agent-dashboard__recent-item[_ngcontent-%COMP%]{background:transparent;border:0;border-radius:.5rem;color:#23262f;display:grid;gap:1rem;grid-template-columns:minmax(0,1fr) auto;padding:.3rem .5rem;text-align:left;transition:background .15s ease,color .15s ease;width:100%}.agent-dashboard__recent-item[_ngcontent-%COMP%]:hover{background:#e7e7e7;color:#0f1117}.agent-dashboard__recent-text[_ngcontent-%COMP%]{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.agent-dashboard__recent-time[_ngcontent-%COMP%]{align-self:center;color:#737782;white-space:nowrap}@media (max-width: 640px){.agent-dashboard[_ngcontent-%COMP%]{padding:2rem 1rem}.agent-dashboard__stats[_ngcontent-%COMP%]{justify-content:flex-start;padding:.85rem 1rem;width:100%}.agent-dashboard__greeting[_ngcontent-%COMP%]{gap:.75rem}.agent-dashboard__composer[_ngcontent-%COMP%]{border-radius:1rem}}']})}return n})()}]}]);var Me=s(89347),Ie=s(71036);let Pe=(()=>{class n{static \u0275fac=function(a){return new(a||n)};static \u0275mod=e.$C({type:n});static \u0275inj=d.G2t({imports:[_.MD,v.iI,Me.F,g.YN,Ie.Q,xe]})}return n})()}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.