1import{a as Xe,b as Ye,c as Je,d as Qe,e as Ze,f as $e}from"./chunk-MPONCZGH.js";import{a as H,b as B}from"./chunk-OGESGR4U.js";import{a as Ge,b as je,c as qe,d as Ke,e as J,g as I}from"./chunk-UFEFIWTH.js";import{L as Le,M as He,Ud as oe}from"./chunk-3PM6G3TW.js";import"./chunk-6LR3B7HN.js";import"./chunk-4YB7LY55.js";import"./chunk-6NBP4ZDP.js";import"./chunk-GXW4OGTD.js";import{c as ye,d as we,m as Be,n as Fe,o as Re,p as We,q as De,r as Ne,s as ze,t as Ue}from"./chunk-RAG2CEQK.js";import"./chunk-CAVJRJZX.js";import"./chunk-M47CG5FA.js";import"./chunk-CSUQ6PJA.js";import"./chunk-7ZCIYDQV.js";import"./chunk-M7JPDXRI.js";import{d as Me,e as Ee,f as Pe,g as Oe}from"./chunk-GAZJMQ7F.js";import"./chunk-H7IEKB7N.js";import{j as Te,k as Ve}from"./chunk-APPOFQGR.js";import{b as Ie,c as Ae}from"./chunk-CS4IKC7W.js";import"./chunk-FWA3XDSO.js";import"./chunk-JU5V5AVW.js";import{n as X,o as Y}from"./chunk-ZLRIBLNQ.js";import{fa as Se}from"./chunk-I6MEJVUF.js";import{$ as xe,Fa as Ce,Ha as T,I as G,La as M,T as _e,X as j,Y as be,ca as q,cc as V,da as ke,m as he,q as fe,ra as ve,x as O,xa as K}from"./chunk-WDHQHLJ4.js";import{Cb as E,Ha as te,Ib as k,Jc as s,K as re,Kc as w,Lc as P,Mc as N,Nc as ue,Pc as g,Qc as h,Rc as f,Sc as me,Tb as F,Vb as m,Wb as R,Xb as A,Xc as ne,Yb as ie,aa as ee,ac as ce,ba as se,bc as b,ec as W,f as ae,fc as D,fd as L,gb as pe,gc as o,gd as z,ha as le,hc as a,hd as ge,ic as S,m as $,mb as l,mc as y,na as x,qd as U,uc as _,va as de,wa as c,wc as d,xa as u}from"./chunk-DBVUB5GB.js";import"./chunk-7L42B6SB.js";import"./chunk-2AVGQ2MQ.js";function at(r,p){if(r&1){let i=y();o(0,"button",10),_("click",function(){c(i);let e=d();return u(e.openSettings())}),s(1,"Settings"),a()}}var et=(()=>{let p=class p{constructor(){this.title=je,this.toolCount=qe.length,this.router=x(T),this.currentUser=x(V)}get showSettings(){return!!this.currentUser?.isAdmin}selectFeature(t){this.router.navigate(["/platform/ekoai",t])}openSettings(){this.router.navigate(["/platform/ekoai/settings"])}};p.\u0275fac=function(e){return new(e||p)},p.\u0275cmp=E({type:p,selectors:[["eko-hub-page"]],hostAttrs:[1,"cms-page-padded","ekoai-host"],decls:13,vars:3,consts:[[1,"ekoai-page"],[1,"ekoai-page-card"],[1,"ekoai-page-header"],[1,"ekoai-brand"],[1,"ekoai-logo"],[1,"ekoai-title"],[1,"ekoai-header-right"],["type","button",1,"ekoai-back"],[1,"ekoai-tools"],[3,"featureSelected"],["type","button",1,"ekoai-back",3,"click"]],template:function(e,n){e&1&&(o(0,"div",0)(1,"div",1)(2,"div",2)(3,"div",3)(4,"span",4),s(5,"E"),a(),o(6,"span",5),s(7),a()(),o(8,"div",6),k(9,at,2,0,"button",7),o(10,"span",8),s(11),a()()(),o(12,"eko-hub-home",9),_("featureSelected",function(C){return n.selectFeature(C)}),a()()()),e&2&&(l(7),w(n.title),l(2),b(n.showSettings?9:-1),l(2),P("",n.toolCount," tools"))},dependencies:[O,Ye],styles:['@charset "UTF-8";[_ngcontent-%COMP%]:root{--ekoaiAccent: var(--primaryColor, #0468ba);--ekoaiAccentStrong: #035a98;--ekoaiAccentSoft: #eaf4fb;--ekoaiAccentSofter: #f5fafd;--ekoaiGradientStart: var(--primaryColor, #0468ba);--ekoaiGradientEnd: var(--accentColor, #00c8a9);--ekoaiInk: #0f172a;--ekoaiInkSoft: #475569;--ekoaiMuted: #94a3b8;--ekoaiLine: var(--borderColor, #eaeaec);--ekoaiSurface: #ffffff;--ekoaiSurfaceAlt: var(--lightGreyColor, #f8f8fa);--ekoaiRadius: 14px;--ekoaiRadiusSm: 10px;--ekoaiRadiusXs: 8px;--ekoaiShadowXs: 0 1px 2px rgba(15, 23, 42, .06);--ekoaiShadowSm: 0 2px 8px rgba(15, 23, 42, .06);--ekoaiShadowMd: 0 8px 24px rgba(4, 104, 186, .12);--ekoaiShadowLg: 0 18px 40px rgba(4, 104, 186, .16);--ekoaiFont: "Satoshi", "Inter", "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif}.ekoai-host[_nghost-%COMP%]{display:block;width:100%;height:100%;min-height:0;padding:0!important;overflow:hidden;background:var(--ekoaiSurfaceAlt)}.ekoai-page[_ngcontent-%COMP%]{padding:0;height:100%;min-height:0;box-sizing:border-box;display:flex;flex-direction:column;background:radial-gradient(1200px 360px at 100% -8%,rgba(0,200,169,.1),transparent 62%),radial-gradient(900px 300px at 0% -12%,rgba(4,104,186,.1),transparent 62%),var(--ekoaiSurfaceAlt);font-family:var(--ekoaiFont)}.ekoai-page-card[_ngcontent-%COMP%]{display:flex;flex-direction:column;flex:1 1 auto;width:100%;max-width:100%;margin:0;background:var(--ekoaiSurface);border:1px solid var(--ekoaiLine);border-left:0;border-right:0;border-radius:0;overflow:hidden;box-shadow:var(--ekoaiShadowSm)}eko-hub-home[_ngcontent-%COMP%]{display:flex;flex-direction:column;flex:1 1 auto;min-height:0}.ekoai-page-header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;padding:18px 24px;border-bottom:1px solid var(--ekoaiLine);flex:none;background:var(--ekoaiSurface)}.ekoai-brand[_ngcontent-%COMP%]{display:flex;align-items:center;gap:12px;min-width:0}.ekoai-logo[_ngcontent-%COMP%]{width:36px;height:36px;border-radius:10px;display:flex;align-items:center;justify-content:center;color:#fff;font-weight:700;font-size:16px;background:linear-gradient(135deg,var(--ekoaiGradientStart),var(--ekoaiGradientEnd));box-shadow:0 4px 12px #0468ba47}.ekoai-title[_ngcontent-%COMP%]{font-size:19px;font-weight:700;color:var(--ekoaiInk);letter-spacing:-.01em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}.ekoai-page-header[_ngcontent-%COMP%]{-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);background:#ffffffeb}.ekoai-header-right[_ngcontent-%COMP%]{display:flex;align-items:center;gap:10px}.ekoai-tools[_ngcontent-%COMP%]{font-size:12px;color:var(--ekoaiMuted);font-weight:500;padding:5px 12px;background:var(--ekoaiSurfaceAlt);border-radius:999px}
1.ekoai-back[_ngcontent-%COMP%]{border:1px solid var(--ekoaiLine);border-radius:8px;background:var(--ekoaiSurface);color:var(--ekoaiInkSoft);cursor:pointer;font-size:13px;padding:6px 12px;font-weight:600;transition:background .15s ease,color .15s ease,border-color .15s ease}.ekoai-back[_ngcontent-%COMP%]:hover{background:var(--ekoaiAccentSoft);color:var(--ekoaiAccent);border-color:var(--ekoaiAccent)}'],changeDetection:0});let r=p;return r})();function rt(r,p){r&1&&(o(0,"div",1),S(1,"span",2),o(2,"span"),s(3,"Loading sessions\u2026"),a()())}function st(r,p){r&1&&(o(0,"span",9),S(1,"i",16),s(2),a()),r&2&&(l(2),P(" ",p,""))}function lt(r,p){r&1&&(o(0,"span",10),S(1,"i",17),s(2),a()),r&2&&(l(2),P(" ",p,""))}function dt(r,p){if(r&1&&(me(0),o(1,"div",11)(2,"div",18)(3,"span"),s(4,"Lesson progress"),a(),o(5,"strong"),s(6),a()(),o(7,"div",19),S(8,"span"),a()()),r&2){let i,t=d().$implicit,e=d(4),n=e.progressPercent(t);l(6),ue("",n,"% \xB7 ",e.masteredCount(t),"/",(i=e.plan(t))==null||i.steps==null?null:i.steps.length," steps"),l(),F("aria-valuenow",n),l(),R("width",n,"%")}}function pt(r,p){if(r&1){let i=y();o(0,"li",6),_("click",function(){let e=c(i).$implicit,n=d(4);return u(n.onOpen(e))}),o(1,"div",7)(2,"span",8),s(3),a(),k(4,st,3,1,"span",9)(5,lt,3,1,"span",10)(6,dt,9,6,"div",11),o(7,"span",12),s(8),L(9,"date"),a()(),o(10,"div",13)(11,"span",14),s(12),a(),o(13,"span",15),s(14),a()()()}if(r&2){let i,t,e=p.$implicit,n=d(4);l(3),w(e.title),l(),b((i=n.topic(e))?4:-1,i),l(),b((t=n.stageLabel(e))?5:-1,t),l(),b(n.progressPercent(e)!==null?6:-1),l(2),N(" ",(e.messages==null?null:e.messages.length)||0," messages \xB7 ",ge(9,12,e.updatedAt,"MMM d, h:mm a")," "),l(3),A("done",e.status==="completed")("active",e.status==="in_progress"),l(),P(" ",e.status==="completed"?"Completed":"In progress"," "),l(2),P(" ",e.status==="completed"?"View":"Continue"," \u2192 ")}}function ct(r,p){if(r&1&&(o(0,"ul",3),W(1,pt,15,15,"li",5,ce().trackById,!0),a()),r&2){let i=d(2);l(),D(i)}}function ut(r,p){if(r&1){let i=y();o(0,"div",4)(1,"span",20),s(2,"\u2726"),a(),o(3,"p",21),s(4,"No sessions yet"),a(),o(5,"p",22),s(6,"Start a new session and it will show up here so you can pick it back up later."),a(),o(7,"button",23),_("click",function(){c(i);let e=d(3);return u(e.onStartNew())}),s(8,"Start a new session"),a()()}}function mt(r,p){if(r&1&&k(0,ct,3,0,"ul",3)(1,ut,9,0,"div",4),r&2){let i=d();b(i.length?0:1)}}function gt(r,p){if(r&1&&k(0,mt,2,1),r&2){let i=d();b(i.loading?-1:0)}}var tt=(()=>{let p=class p{constructor(){this.featureId="",this.open=new te,this.startNew=new te,this.loading=!1,this.sessions$=$(null),this.sessions=x(J)}ngOnChanges(){this.featureId&&(this.loading=!0,this.sessions$=this.sessions.list(this.featureId).pipe(se(()=>this.loading=!1),re(()=>(this.loading=!1,$([])))))}onOpen(t){this.open.emit(t)}onStartNew(){this.startNew.emit()}trackById(t,e){return e.id}plan(t){let e=t.meta?.plan;return e&&typeof e=="object"&&Array.isArray(e.steps)?e:null}progress(t){let e=t.meta?.planProgress??t.meta?.plan_progress;return e&&typeof e=="object"?e:null}topic(t){return String(t.meta?.topic??"").trim()||null}progressPercent(t){let e=this.plan(t)?.steps?.length||0,n=this.progress(t);return!e||!n?null:Math.round(Math.min(e,n.mastered?.length||0)/e*100)}masteredCount(t){let e=this.plan(t)?.steps?.length||0;return Math.min(e,this.progress(t)?.mastered?.length||0)}stageLabel(t){let e=String(t.meta?.stage??"").trim();if(!e)return null;switch(e){case"topic_gathering":return"Clarifying your topic";case"plan_preparation":return"Preparing your lesson plan";case"plan_explanation":return"Reviewing your lesson plan";case"tutoring":return"Working through the lesson";default:return e.replace(/_/g," ")}}};p.\u0275fac=function(e){return new(e||p)},p.\u0275cmp=E({type:p,selectors:[["eko-session-history"]],inputs:{featureId:"featureId"},outputs:{open:"open",startNew:"startNew"},features:[de],decls:4,vars:4,consts:[[1,"eko-history"],["role","status","aria-label","Loading sessions",1,"eko-history-loading"],["aria-hidden","true",1,"eko-history-spinner"],[1,"eko-history-list"],[1,"eko-history-empty"],[1,"eko-history-row"],[1,"eko-history-row",3,"click"],[1,"eko-history-main"],[1,"eko-history-title"],[1,"eko-history-topic"],[1,"eko-history-stage"],[1,"eko-history-progress"],[1,"eko-history-meta"],[1,"eko-history-side"],[1,"eko-history-status"],[1,"eko-history-action"],["aria-hidden","true",1,"pi","pi-book"],["aria-hidden","true",1,"pi","pi-sitemap"],[1,"eko-history-progress__topline"],["role","progressbar","aria-label","Lesson progress","aria-valuemin","0","aria-valuemax","100",1,"eko-history-progress__meter"],[1,"eko-history-empty-icon"],[1,"eko-history-empty-title"],[1,"eko-history-empty-sub"],["type","button",1,"eko-history-new",3,"click"]],template:function(e,n){if(e&1&&(o(0,"div",0),k(1,rt,4,0,"div",1)(2,gt,1,1),L(3,"async"),a()),e&2){let v;l(),b(n.loading?1:-1),l(),b((v=z(3,2,n.sessions$))?2:-1,v)}},dependencies:[O,he,fe],styles:['@charset "UTF-8";[_ngcontent-%COMP%]:root{--ekoaiAccent: var(--primaryColor, #0468ba);--ekoaiAccentStrong: #035a98;--ekoaiAccentSoft: #eaf4fb;--ekoaiAccentSofter: #f5fafd;--ekoaiGradientStart: var(--primaryColor, #0468ba);--ekoaiGradientEnd: var(--accentColor, #00c8a9);--ekoaiInk: #0f172a;--ekoaiInkSoft: #475569;--ekoaiMuted: #94a3b8;--ekoaiLine: var(--borderColor, #eaeaec);--ekoaiSurface: #ffffff;--ekoaiSurfaceAlt: var(--lightGreyColor, #f8f8fa);--ekoaiRadius: 14px;--ekoaiRadiusSm: 10px;--ekoaiRadiusXs: 8px;--ekoaiShadowXs: 0 1px 2px rgba(15, 23, 42, .06);--ekoaiShadowSm: 0 2px 8px rgba(15, 23, 42, .06);--ekoaiShadowMd: 0 8px 24px rgba(4, 104, 186, .12);--ekoaiShadowLg: 0 18px 40px rgba(4, 104, 186, .16);--ekoaiFont: "Satoshi", "Inter", "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif}[_nghost-%COMP%]{display:block;flex:1 1 auto;min-height:0;overflow-y:auto;font-family:var(--ekoaiFont);background:var(--ekoaiSurfaceAlt)}.eko-history[_ngcontent-%COMP%]{padding:20px 22px 24px}.eko-history-list[_ngcontent-%COMP%]{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:10px}.eko-history-row[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;gap:14px;background:var(--ekoaiSurface);border:1px solid var(--ekoaiLine);border-radius:12px;padding:14px 16px;cursor:pointer;transition:border-color .15s ease,box-shadow .15s ease,transform .15s ease}.eko-history-row[_ngcontent-%COMP%]:hover{border-color:var(--ekoaiAccent);box-shadow:var(--ekoaiShadowSm);transform:translateY(-1px)}.eko-history-main[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:4px;min-width:0}.eko-history-title[_ngcontent-%COMP%]{font-size:15px;font-weight:600;color:var(--ekoaiInk);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.eko-history-topic[_ngcontent-%COMP%], .eko-history-stage[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:5px;max-width:100%;overflow:hidden;color:var(--ekoaiInkSoft);font-size:12px;text-overflow:ellipsis;white-space:nowrap}.eko-history-topic[_ngcontent-%COMP%] i[_ngcontent-%COMP%], .eko-history-stage[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{color:var(--ekoaiAccent);font-size:11px}.eko-history-stage[_ngcontent-%COMP%]{color:var(--ekoaiMuted)}.eko-history-progress[_ngcontent-%COMP%]{max-width:360px;margin-top:4px}
1.eko-history-progress__topline[_ngcontent-%COMP%]{display:flex;justify-content:space-between;gap:10px;color:var(--ekoaiMuted);font-size:11px}.eko-history-progress__topline[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{color:var(--ekoaiAccent);font-weight:700}.eko-history-progress__meter[_ngcontent-%COMP%]{height:5px;margin-top:5px;overflow:hidden;border-radius:999px;background:#e2e8f0}.eko-history-progress__meter[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{display:block;height:100%;border-radius:inherit;background:var(--ekoaiAccent);transition:width .2s ease}.eko-history-meta[_ngcontent-%COMP%]{font-size:12.5px;color:var(--ekoaiMuted)}.eko-history-side[_ngcontent-%COMP%]{display:flex;align-items:center;gap:12px;flex:none}.eko-history-status[_ngcontent-%COMP%]{font-size:11.5px;font-weight:600;padding:4px 11px;border-radius:999px;letter-spacing:.01em}.eko-history-status.active[_ngcontent-%COMP%]{background:var(--ekoaiAccentSoft);color:var(--ekoaiAccent)}.eko-history-status.done[_ngcontent-%COMP%]{background:#f0fdf4;color:#15803d}.eko-history-action[_ngcontent-%COMP%]{font-size:13.5px;font-weight:600;color:var(--ekoaiAccent);white-space:nowrap;display:inline-flex;align-items:center;gap:4px}.eko-history-loading[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:center;gap:10px;padding:48px 20px;color:var(--ekoaiMuted);font-size:14px;font-weight:500}.eko-history-spinner[_ngcontent-%COMP%]{width:18px;height:18px;border:2.5px solid #e2e8f0;border-top-color:var(--ekoaiAccent);border-radius:50%;animation:_ngcontent-%COMP%_eko-history-spin .8s linear infinite}@keyframes _ngcontent-%COMP%_eko-history-spin{to{transform:rotate(360deg)}}.eko-history-empty[_ngcontent-%COMP%]{text-align:center;padding:56px 20px;display:flex;flex-direction:column;align-items:center}.eko-history-empty-icon[_ngcontent-%COMP%]{width:56px;height:56px;border-radius:16px;background:var(--ekoaiAccentSoft);color:var(--ekoaiAccent);display:flex;align-items:center;justify-content:center;font-size:26px;margin-bottom:16px}.eko-history-empty-title[_ngcontent-%COMP%]{font-size:17px;font-weight:700;color:var(--ekoaiInk);margin:0 0 6px}.eko-history-empty-sub[_ngcontent-%COMP%]{font-size:14px;color:var(--ekoaiInkSoft);margin:0 auto 20px;max-width:360px;line-height:1.5}.eko-history-new[_ngcontent-%COMP%]{background:linear-gradient(135deg,var(--ekoaiGradientStart),var(--ekoaiGradientEnd));color:#fff;border:none;border-radius:10px;padding:11px 20px;font-size:14px;font-weight:600;cursor:pointer;box-shadow:0 4px 14px #0468ba40;transition:transform .15s ease,filter .15s ease}.eko-history-new[_ngcontent-%COMP%]:hover{transform:translateY(-1px);filter:brightness(1.05)}@media (max-width: 640px){.eko-history-row[_ngcontent-%COMP%]{align-items:flex-start;flex-direction:column}.eko-history-side[_ngcontent-%COMP%]{width:100%;justify-content:space-between}.eko-history-progress[_ngcontent-%COMP%]{max-width:none}}'],changeDetection:0});let r=p;return r})();var it=(()=>{let p=class p{constructor(){this.http=x(G),this.user=x(V),this.base=`${M.apiUrl}/api/storehouse/learning-consultation`}kbStatus(){return this.http.get(`${this.base}/kb-status`,I(this.user))}};p.\u0275fac=function(e){return new(e||p)},p.\u0275prov=le({token:p,factory:p.\u0275fac,providedIn:"root"});let r=p;return r})();var _t=()=>({width:"min(92vw, 30rem)"}),bt=()=>({width:"min(72vw, 64rem)"}),xt=(r,p)=>p.id;function kt(r,p){r&1&&(o(0,"span",14),s(1,"Guides with questions first \u2014 next-step actions appear only when the tutor recommends them."),a())}function vt(r,p){r&1&&(o(0,"span",14),s(1,"AI uses your enrollment, progress and quiz scores."),a())}function Ct(r,p){r&1&&(o(0,"span",14),s(1,"Grounded answers from your course library with sources."),a())}function St(r,p){r&1&&(o(0,"span",14),s(1,"Talk naturally \u2014 grounded in your course library when needed."),a())}function yt(r,p){r&1&&(o(0,"span",14),s(1,"Practise realistic conversations with a role-based AI counterpart."),a())}function wt(r,p){if(r&1&&(S(0,"span",11),L(1,"ekoSafeHtml"),o(2,"div",12)(3,"span",13),s(4),a(),k(5,kt,2,0,"span",14)(6,vt,2,0,"span",14)(7,Ct,2,0,"span",14)(8,St,2,0,"span",14)(9,yt,2,0,"span",14),a()),r&2){let i=d();R("background",i.feature.iconBg),m("innerHTML",z(1,5,i.feature.iconSvg),pe),l(4),w(i.feature.name),l(),b(i.feature.id==="socratic-tutor"?5:i.feature.id==="learning-consultation"?6:i.feature.id==="ask-discover"?7:i.feature.id==="voice-tutor"?8:i.feature.id==="roleplay"?9:-1)}}function Mt(r,p){if(r&1){let i=y();o(0,"button",15),_("click",function(){c(i);let e=d();return u(e.markDone())}),s(1,"Mark as done"),a()}}function Et(r,p){if(r&1){let i=y();o(0,"button",16),_("click",function(){c(i);let e=d();return u(e.historyDrawerVisible=!0)}),S(1,"i",17),a(),o(2,"button",18),_("click",function(){c(i);let e=d();return u(e.startNew())}),S(3,"i",19),s(4," New session "),a()}}function Pt(r,p){if(r&1){let i=y();o(0,"button",16),_("click",function(){c(i);let e=d();return u(e.openVoiceHistory())}),S(1,"i",17),a(),o(2,"button",18),_("click",function(){c(i);let e=d();return u(e.openVoiceNewSession())}),S(3,"i",19),s(4," New session "),a()}}function Ot(r,p){if(r&1&&(o(0,"span",21),s(1),a()),r&2){let i=d(2);l(),N(" (",i.kbStatus.readyCount," ready, ",i.kbStatus.pendingCount," indexing) ")}}function Tt(r,p){if(r&1&&(o(0,"div",7)(1,"div",20)(2,"span"),s(3),a(),k(4,Ot,2,2,"span",21),a()()),r&2){let i,t=d();l(3),w((i=t.kbStatus==null?null:t.kbStatus.message)!==null&&i!==void 0?i:"Course materials are still being indexed. Please try again shortly."),l(),b(t.kbStatus&&t.kbStatus.pendingCount>0?4:-1)}}function Vt(r,p){if(r&1){let i=y();o(0,"eko-feature-outlet",22),_("startNew",function(){c(i);let e=d();return u(e.startNew())})("openHistory",function(){c(i);let e=d();return u(e.historyDrawerVisible=!0)}),a()}if(r&2){let i=d();m("activeFeature",i.featureId)}}function It(r,p){r&1&&S(0,"span")}function At(r,p){if(r&1){let i=y();o(0,"button",32),_("click",function(){let e=c(i).$implicit,n=d(2);return u(n.tutorMode=e.id)}),o(1,"span",33),k(2,It,1,0,"span"),a(),o(3,"span",34)(4,"strong"),s(5),a(),o(6,"small"),s(7),a()()()}if(r&2){let i=p.$implicit,t=d(2);A("is-selected",t.tutorMode===i.id),F("aria-checked",t.tutorMode===i.id),l(2),b(t.tutorMode===i.id?2:-1),l(3),w(i.label),l(2),w(i.description)}}function Lt(r,p){if(r&1){let i=y();o(0,"p-button",35),_("onClick",function(){c(i);let e=d(2);return u(e.tutorNewSessionVisible=!1)}),a(),o(1,"p-button",36),_("onClick",function(){c(i);let e=d(2);return u(e.confirmTutorNewSession())}),a()}if(r&2){let i=d(2);m("text",!0),l(),m("disabled",!i.tutorTopic.trim())}}function Ht(r,p){if(r&1){let i=y();o(0,"p-dialog",23),f("visibleChange",function(e){c(i);let n=d();return h(n.tutorNewSessionVisible,e)||(n.tutorNewSessionVisible=e),u(e)}
1),o(1,"div",24)(2,"label",25)(3,"span"),s(4,"Topic "),o(5,"small"),s(6,"(required)"),a()(),o(7,"input",26),f("ngModelChange",function(e){c(i);let n=d();return h(n.tutorTopic,e)||(n.tutorTopic=e),u(e)}),_("keydown.enter",function(){c(i);let e=d();return u(e.confirmTutorNewSession())}),a()(),o(8,"label",25)(9,"span"),s(10,"Description "),o(11,"small"),s(12,"(optional)"),a()(),o(13,"textarea",27),f("ngModelChange",function(e){c(i);let n=d();return h(n.tutorDescription,e)||(n.tutorDescription=e),u(e)}),a()(),o(14,"fieldset",28)(15,"legend"),s(16,"How would you like to learn?"),a(),o(17,"div",29),W(18,At,8,6,"button",30,xt),a()()(),k(20,Lt,2,2,"ng-template",31),a()}if(r&2){let i=d();ie(ne(8,_t)),g("visible",i.tutorNewSessionVisible),m("modal",!0)("draggable",!1)("resizable",!1),l(7),g("ngModel",i.tutorTopic),l(6),g("ngModel",i.tutorDescription),l(5),D(i.tutorModeOptions)}}function Bt(r,p){if(r&1){let i=y();o(0,"div",41)(1,"div",42)(2,"p-button",43),_("onClick",function(){c(i);let e=d(2);return u(e.historyDrawerVisible=!1)}),a(),o(3,"div",44)(4,"p",45),s(5,"Session history"),a(),o(6,"h2",46),s(7),a(),o(8,"p",47),s(9,"View and continue past conversations"),a()()(),o(10,"p-button",48),_("onClick",function(){c(i);let e=d(2);return u(e.onHistoryStartNew())}),a()()}if(r&2){let i=d(2);l(2),m("text",!0),l(5),w((i.feature==null?null:i.feature.name)||"History")}}function Ft(r,p){if(r&1){let i=y();o(0,"p-drawer",37),_("visibleChange",function(e){c(i);let n=d();return u(n.historyDrawerVisible=e)}),k(1,Bt,11,2,"ng-template",38),o(2,"div",39)(3,"eko-session-history",40),_("open",function(e){c(i);let n=d();return u(n.onHistoryOpen(e))})("startNew",function(){c(i);let e=d();return u(e.onHistoryStartNew())}),a()()()}if(r&2){let i=d();ie(ne(7,bt)),m("visible",i.historyDrawerVisible)("modal",!0)("dismissible",!0)("showCloseIcon",!1),l(3),m("featureId",i.featureId)}}var Z=(()=>{let p=class p{constructor(){this.featureId="",this.historyDrawerVisible=!1,this.activeSession=null,this.kbStatus=null,this.tutorNewSessionVisible=!1,this.tutorTopic="",this.tutorDescription="",this.tutorMode="guided",this.tutorModeOptions=Je,this.route=x(Ce),this.lcKb=x(it),this.router=x(T),this.state=x(Qe),this.sessions=x(J),this.voiceBridge=x(Ze),this.cdr=x(U),this.destroy$=new ae}ngOnInit(){this.state.activeSession$.pipe(ee(this.destroy$)).subscribe(t=>{this.usesSessions&&t&&t.featureId===this.featureId&&(this.activeSession=t,this.cdr.detectChanges())}),this.route.paramMap.pipe(ee(this.destroy$)).subscribe(t=>{let e=this.resolveFeatureId(t.get("featureId")),n=Ke[e];if(!n){this.router.navigate(["/platform/ekoai"]);return}if(this.featureId=e,this.feature=n,this.historyDrawerVisible=!1,this.tutorNewSessionVisible=!1,this.activeSession=null,this.kbStatus=null,e==="learning-consultation"&&this.lcKb.kbStatus().subscribe({next:C=>{this.kbStatus=C,this.cdr.detectChanges()},error:()=>{this.kbStatus={enrolledCount:0,readyCount:0,pendingCount:0,readyKbIds:[],canChat:!1,message:"Could not check course indexing status."},this.cdr.detectChanges()}}),!this.usesSessions){this.state.navigateTo(e),this.cdr.detectChanges();return}let v=this.route.snapshot.queryParamMap.get("session");v?this.sessions.get(v).subscribe(C=>{C?e==="socratic-tutor"?this.state.setPendingSession(C):this.state.resumeSession(C):this.state.navigateTo(e),this.cdr.detectChanges()}):this.state.navigateTo(e),this.cdr.detectChanges()})}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete()}get usesSessions(){return Ge(this.featureId)}get isVoiceTutor(){return this.featureId==="voice-tutor"}get isAiTutor(){return this.featureId==="socratic-tutor"}get isRoleplay(){return this.featureId==="roleplay"}get showVoiceHeaderActions(){return this.isVoiceTutor||this.isRoleplay}get isInProgress(){return this.usesSessions&&this.activeSession?.status==="in_progress"}get lcIndexingBlocked(){return this.featureId==="learning-consultation"&&this.kbStatus!=null&&!this.kbStatus.canChat}startNew(){if(this.isAiTutor){this.tutorTopic="",this.tutorDescription="",this.tutorMode="guided",this.historyDrawerVisible=!1,this.tutorNewSessionVisible=!0,this.cdr.detectChanges();return}this.state.startNewSession(this.featureId),this.historyDrawerVisible=!1}confirmTutorNewSession(){let t=this.tutorTopic.trim();t&&(this.state.startNewSession(this.featureId,{topic:t,description:this.tutorDescription.trim()||void 0,tutorMode:this.tutorMode,autoStart:!0}),this.tutorNewSessionVisible=!1,this.historyDrawerVisible=!1,this.cdr.detectChanges())}openVoiceHistory(){this.isVoiceTutor?this.voiceBridge.openVoiceHistory$.next():this.isRoleplay&&this.voiceBridge.openRoleplayHistory$.next()}openVoiceNewSession(){this.isVoiceTutor?this.voiceBridge.openVoiceNewSession$.next():this.isRoleplay&&this.voiceBridge.openRoleplayNewSession$.next()}markDone(){this.state.completeActiveSession();let t=this.state.activeSession$.value;t&&(this.sessions.complete(t.id),this.sessions.save(t))}onResume(t){this.sessions.get(t.id).subscribe({next:e=>{this.state.resumeSession(e?.messages?.length?e:t),this.historyDrawerVisible=!1,this.cdr.detectChanges()},error:()=>{this.state.resumeSession(t),this.historyDrawerVisible=!1,this.cdr.detectChanges()}})}onHistoryOpen(t){if(this.isAiTutor){this.state.setPendingSession(t),this.historyDrawerVisible=!1,this.cdr.detectChanges();return}this.onResume(t)}onHistoryStartNew(){this.startNew()}goHome(){this.router.navigate(["/platform/ekoai"])}resolveFeatureId(t){if(t)return t;
1let e=this.route.snapshot.url;return e.length?e[e.length-1].path:""}};p.\u0275fac=function(e){return new(e||p)},p.\u0275cmp=E({type:p,selectors:[["eko-feature-page"]],hostAttrs:[1,"cms-page-padded","ekoai-host"],decls:15,vars:9,consts:[[1,"ekoai-page"],[1,"ekoai-page-card"],[1,"ekoai-page-header"],[1,"ekoai-brand"],["type","button","aria-label","Back to hub",1,"ekoai-back-btn",3,"click"],[1,"ekoai-header-actions"],["type","button",1,"ekoai-done-btn"],["role","status",1,"ekoai-kb-banner"],[3,"activeFeature"],["header","Start AI Tutor session","styleClass","ekoai-tutor-dialog",3,"visible","modal","draggable","resizable","style"],["position","right","styleClass","contribution-edit-drawer",3,"visible","modal","dismissible","showCloseIcon","style"],[1,"ekoai-feature-icon",3,"innerHTML"],[1,"ekoai-title-group"],[1,"ekoai-title"],[1,"ekoai-subtitle"],["type","button",1,"ekoai-done-btn",3,"click"],["type","button","aria-label","Session history","title","Session history",1,"ekoai-history-icon",3,"click"],["aria-hidden","true",1,"pi","pi-clock"],["type","button",1,"ekoai-tab-new",3,"click"],["aria-hidden","true",1,"pi","pi-plus"],[1,"ekoai-kb-banner-content"],[1,"ekoai-kb-banner-meta"],[3,"startNew","openHistory","activeFeature"],["header","Start AI Tutor session","styleClass","ekoai-tutor-dialog",3,"visibleChange","visible","modal","draggable","resizable"],[1,"ekoai-tutor-dialog__body"],[1,"ekoai-tutor-dialog__field"],["type","text","placeholder","What would you like to learn?","required","",3,"ngModelChange","keydown.enter","ngModel"],["rows","3","placeholder","Add goals, level, or what you want to focus on",3,"ngModelChange","ngModel"],[1,"ekoai-tutor-dialog__field","ekoai-tutor-dialog__mode-field"],["role","radiogroup","aria-label","Tutor teaching style",1,"ekoai-tutor-mode-options"],["type","button","role","radio",1,"ekoai-tutor-mode-option",3,"is-selected"],["pTemplate","footer"],["type","button","role","radio",1,"ekoai-tutor-mode-option",3,"click"],["aria-hidden","true",1,"ekoai-tutor-mode-option__radio"],[1,"ekoai-tutor-mode-option__copy"],["label","Cancel","severity","secondary",3,"onClick","text"],["label","Start session","icon","pi pi-arrow-right",3,"onClick","disabled"],["position","right","styleClass","contribution-edit-drawer",3,"visibleChange","visible","modal","dismissible","showCloseIcon"],["pTemplate","header"],[1,"contribution-edit-drawer__body"],[3,"open","startNew","featureId"],[1,"flex","w-full","min-w-0","items-center","justify-between","gap-3"],[1,"flex","min-w-0","items-center","gap-3"],["icon","pi pi-arrow-left","severity","secondary","aria-label","Back","styleClass","!w-9 !h-9 !p-0 !text-slate-600 hover:!text-slate-900 shrink-0",3,"onClick","text"],[1,"min-w-0"],[1,"m-0","text-[11px]","font-semibold","uppercase","tracking-[0.12em]","text-accent"],[1,"m-0","mt-0.5","truncate","text-base","font-semibold","text-slate-900"],[1,"m-0","mt-0.5","text-[11px]","text-slate-400"],["label","New session","icon","pi pi-plus","styleClass","!text-sm",3,"onClick"]],template:function(e,n){e&1&&(o(0,"div",0)(1,"div",1)(2,"div",2)(3,"div",3)(4,"button",4),_("click",function(){return n.goHome()}),s(5,"\u2190"),a(),k(6,wt,10,7),a(),o(7,"div",5),k(8,Mt,2,0,"button",6)(9,Et,5,0)(10,Pt,5,0),a()(),k(11,Tt,5,2,"div",7)(12,Vt,1,1,"eko-feature-outlet",8)(13,Ht,21,9,"p-dialog",9)(14,Ft,4,8,"p-drawer",10),a()()),e&2&&(l(2),A("ekoai-page-header--with-tabs",n.usesSessions),l(4),b(n.feature?6:-1),l(2),b(n.usesSessions&&!n.isAiTutor&&n.isInProgress&&(!(n.activeSession==null||n.activeSession.messages==null)&&n.activeSession.messages.length)?8:-1),l(),b(n.usesSessions?9:n.showVoiceHeaderActions?10:-1),l(2),b(n.lcIndexingBlocked?11:-1),l(),b(n.lcIndexingBlocked?-1:12),l(),b(n.isAiTutor?13:-1),l(),b(n.usesSessions?14:-1))},dependencies:[O,K,_e,j,ve,q,$e,tt,Xe,Ue,ze,Se,Y,X,we,ye],styles:['@charset "UTF-8";[_ngcontent-%COMP%]:root{--ekoaiAccent: var(--primaryColor, #0468ba);--ekoaiAccentStrong: #035a98;--ekoaiAccentSoft: #eaf4fb;--ekoaiAccentSofter: #f5fafd;--ekoaiGradientStart: var(--primaryColor, #0468ba);--ekoaiGradientEnd: var(--accentColor, #00c8a9);--ekoaiInk: #0f172a;--ekoaiInkSoft: #475569;--ekoaiMuted: #94a3b8;--ekoaiLine: var(--borderColor, #eaeaec);--ekoaiSurface: #ffffff;--ekoaiSurfaceAlt: var(--lightGreyColor, #f8f8fa);--ekoaiRadius: 14px;--ekoaiRadiusSm: 10px;--ekoaiRadiusXs: 8px;--ekoaiShadowXs: 0 1px 2px rgba(15, 23, 42, .06);--ekoaiShadowSm: 0 2px 8px rgba(15, 23, 42, .06);--ekoaiShadowMd: 0 8px 24px rgba(4, 104, 186, .12);--ekoaiShadowLg: 0 18px 40px rgba(4, 104, 186, .16);--ekoaiFont: "Satoshi", "Inter", "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif}.ekoai-host[_nghost-%COMP%]{display:block;width:100%;height:100%;min-height:0;padding:0!important;overflow:hidden;background:var(--ekoaiSurfaceAlt)}.ekoai-page[_ngcontent-%COMP%]{padding:0;height:100%;min-height:0;box-sizing:border-box;display:flex;flex-direction:column;
1background:radial-gradient(1200px 360px at 100% -8%,rgba(0,200,169,.1),transparent 62%),radial-gradient(900px 300px at 0% -12%,rgba(4,104,186,.1),transparent 62%),var(--ekoaiSurfaceAlt);font-family:var(--ekoaiFont)}.ekoai-page-card[_ngcontent-%COMP%]{display:flex;flex-direction:column;flex:1 1 auto;width:100%;max-width:100%;margin:0;background:var(--ekoaiSurface);border:1px solid var(--ekoaiLine);border-left:0;border-right:0;border-radius:0;overflow:hidden;box-shadow:var(--ekoaiShadowSm)}.ekoai-kb-banner[_ngcontent-%COMP%]{margin:14px 24px 0;padding:12px 16px;border-radius:var(--ekoaiRadiusSm);background:linear-gradient(135deg,#fff7ed,#fef3c7);border:1px solid #fcd34d;color:#92400e;font-size:14px;line-height:1.5;display:flex;align-items:flex-start;gap:10px}.ekoai-kb-banner[_ngcontent-%COMP%]:before{content:"\\23f3";font-size:16px;flex:none;margin-top:1px}.ekoai-kb-banner-content[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:2px}.ekoai-kb-banner-meta[_ngcontent-%COMP%]{font-size:12px;opacity:.85}.ekoai-page-header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;padding:14px 20px;border-bottom:1px solid var(--ekoaiLine);flex:none;background:#fffffff5;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);gap:16px;min-height:56px}.ekoai-page-header--with-tabs[_ngcontent-%COMP%]{padding-top:12px;padding-bottom:12px}.ekoai-brand[_ngcontent-%COMP%]{display:flex;align-items:center;gap:14px;min-width:0;flex:1 1 auto}.ekoai-back-btn[_ngcontent-%COMP%]{width:36px;height:36px;border-radius:10px;border:1px solid var(--ekoaiLine);background:var(--ekoaiSurface);color:var(--ekoaiInkSoft);font-size:18px;line-height:1;cursor:pointer;display:flex;align-items:center;justify-content:center;flex:none;transition:background .15s ease,color .15s ease,border-color .15s ease}.ekoai-back-btn[_ngcontent-%COMP%]:hover{background:var(--ekoaiAccentSoft);color:var(--ekoaiAccent);border-color:var(--ekoaiAccent)}.ekoai-feature-icon[_ngcontent-%COMP%]{width:38px;height:38px;border-radius:10px;display:flex;align-items:center;justify-content:center;color:var(--ekoaiInk);flex:none}.ekoai-feature-icon[_ngcontent-%COMP%] svg{width:20px;height:20px}.ekoai-title-group[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:1px;min-width:0}.ekoai-title[_ngcontent-%COMP%]{font-size:18px;font-weight:700;color:var(--ekoaiInk);letter-spacing:-.01em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;line-height:1.2}.ekoai-subtitle[_ngcontent-%COMP%]{font-size:12px;color:var(--ekoaiMuted);font-weight:400;line-height:1.3;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:520px}@media (max-width: 900px){.ekoai-subtitle[_ngcontent-%COMP%]{display:none}}.ekoai-done-btn[_ngcontent-%COMP%]{border:1px solid #bbf7d0;background:linear-gradient(135deg,#f0fdf4,#dcfce7);color:#15803d;border-radius:10px;padding:9px 16px;font-size:14px;font-weight:600;cursor:pointer;transition:filter .15s ease,transform .15s ease}.ekoai-done-btn[_ngcontent-%COMP%]:hover{filter:brightness(.97);transform:translateY(-1px)}.ekoai-tutor-dialog__body[_ngcontent-%COMP%]{display:grid;gap:16px;padding-top:4px}.ekoai-tutor-dialog__mode-field[_ngcontent-%COMP%]{border:0;margin:0;padding:0}.ekoai-tutor-dialog__mode-field[_ngcontent-%COMP%] legend[_ngcontent-%COMP%]{padding:0;color:var(--ekoaiInkSoft);font-size:13px;font-weight:600}.ekoai-tutor-mode-options[_ngcontent-%COMP%]{display:grid;gap:8px;margin-top:7px}.ekoai-tutor-mode-option[_ngcontent-%COMP%]{display:flex;width:100%;gap:10px;align-items:flex-start;border:1px solid var(--ekoaiLine);border-radius:10px;padding:10px 11px;background:var(--ekoaiSurface);color:var(--ekoaiInk);text-align:left;cursor:pointer;font:inherit;transition:border-color .15s ease,box-shadow .15s ease,background .15s ease}.ekoai-tutor-mode-option[_ngcontent-%COMP%]:hover, .ekoai-tutor-mode-option.is-selected[_ngcontent-%COMP%]{border-color:var(--ekoaiAccent);box-shadow:0 0 0 2px var(--ekoaiAccentSoft)}.ekoai-tutor-mode-option.is-selected[_ngcontent-%COMP%]{background:color-mix(in srgb,var(--ekoaiAccentSoft) 35%,var(--ekoaiSurface))}.ekoai-tutor-mode-option__radio[_ngcontent-%COMP%]{display:grid;width:16px;height:16px;flex:0 0 16px;place-items:center;margin-top:2px;border:1px solid var(--ekoaiMuted);border-radius:50%}.ekoai-tutor-mode-option__radio[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{width:8px;height:8px;border-radius:50%;background:var(--ekoaiAccent)}.ekoai-tutor-mode-option__copy[_ngcontent-%COMP%]{display:grid;gap:3px}.ekoai-tutor-mode-option__copy[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{font-size:13px;line-height:1.3}.ekoai-tutor-mode-option__copy[_ngcontent-%COMP%] small[_ngcontent-%COMP%]{color:var(--ekoaiMuted);font-size:11px;font-weight:400;line-height:1.45}.ekoai-tutor-dialog__field[_ngcontent-%COMP%]{display:grid;gap:7px;color:var(--ekoaiInkSoft);font-size:13px;font-weight:600}.ekoai-tutor-dialog__field[_ngcontent-%COMP%] small[_ngcontent-%COMP%]{color:var(--ekoaiMuted);font-size:11px;font-weight:500}.ekoai-tutor-dialog__field[_ngcontent-%COMP%] input[_ngcontent-%COMP%], .ekoai-tutor-dialog__field[_ngcontent-%COMP%] textarea[_ngcontent-%COMP%]{width:100%;box-sizing:border-box;border:1px solid var(--ekoaiLine);border-radius:10px;padding:10px 12px;background:var(--ekoaiSurface);color:var(--ekoaiInk);font:inherit;font-weight:400;outline:none;transition:border-color .15s ease,box-shadow .15s ease}.ekoai-tutor-dialog__field[_ngcontent-%COMP%] input[_ngcontent-%COMP%]:focus, .ekoai-tutor-dialog__field[_ngcontent-%COMP%] textarea[_ngcontent-%COMP%]:focus{border-color:var(--ekoaiAccent);box-shadow:0 0 0 3px var(--ekoaiAccentSoft)}.ekoai-tutor-dialog__field[_ngcontent-%COMP%] textarea[_ngcontent-%COMP%]{resize:vertical;line-height:1.45}.ekoai-header-actions[_ngcontent-%COMP%]{display:flex;align-items:center;gap:10px;flex:none}.ekoai-tab-new[_ngcontent-%COMP%]{border:1px solid transparent;background:linear-gradient(135deg,var(--ekoaiGradientStart),var(--ekoaiGradientEnd));color:#fff;border-radius:999px;padding:8px 16px;font-size:13px;font-weight:600;cursor:pointer;display:inline-flex;align-items:center;gap:6px;transition:filter .15s ease,transform .15s ease;white-space:nowrap;box-shadow:0 2px 8px #0468ba2e}.ekoai-tab-new[_ngcontent-%COMP%]:hover{filter:brightness(1.05);transform:translateY(-1px)}.ekoai-tab-new[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:11px}.ekoai-history-icon[_ngcontent-%COMP%]{width:36px;height:36px;border-radius:10px;border:1px solid var(--ekoaiLine);background:var(--ekoaiSurface);color:var(--ekoaiInkSoft);display:inline-flex;align-items:center;justify-content:center;cursor:pointer;flex:none;transition:background .15s ease,color .15s ease,border-color .15s ease,transform .15s ease}.ekoai-history-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:14px}.ekoai-history-icon[_ngcontent-%COMP%]:hover{background:var(--ekoaiSurfaceAlt);color:var(--ekoaiInk);border-color:var(--ekoaiAccent);transform:translateY(-1px)}.ekoai-history-icon[_ngcontent-%COMP%]:active{transform:translateY(0)}@media (max-width: 720px){.ekoai-page-header[_ngcontent-%COMP%]{flex-wrap:wrap;gap:10px}.ekoai-header-actions[_ngcontent-%COMP%]{width:100%;justify-content:flex-start;flex-wrap:wrap}.ekoai-subtitle[_ngcontent-%COMP%]{display:none}}'],changeDetection:0});let r=p;return r})();function Rt(r,p){r&1&&(o(0,"p",15),s(1,"Loading\u2026"),a())}function Wt(r,p){r&1&&(o(0,"p",36),s(1,"Select a voice model first."),a())}function Dt(r,p){if(r&1&&S(0,"p-message",81),r&2){let i=d(2);m("text",i.errorMsg)}}function Nt(r,p){if(r&1&&S(0,"p-message",82),r&2){let i=d(2);m("text",i.successMsg)}}function zt(r,p){if(r&1){let i=y();o(0,"form",17),_("ngSubmit",function(){c(i);let e=d();return u(e.save())}),o(1,"div",18)(2,"label",19),s(3,"Language"),a(),o(4,"p-select",20),f("ngModelChange",function(e){c(i);let n=d();return h(n.form.language,e)||(n.form.language=e),u(e)}
1),a(),o(5,"p",21),s(6,"Default: Auto. The tutor mirrors the learner's detected language."),a()(),o(7,"div",22)(8,"div",18)(9,"label",23),s(10,"LLM"),a(),o(11,"p-select",24),f("ngModelChange",function(e){c(i);let n=d();return h(n.form.llmProvider,e)||(n.form.llmProvider=e),u(e)}),a(),o(12,"p",21),s(13,"Default: platform default. Select the model used for tutor reasoning."),a()(),o(14,"div",18)(15,"label",25),s(16,"STT"),a(),o(17,"p-select",26),f("ngModelChange",function(e){c(i);let n=d();return h(n.form.sttProvider,e)||(n.form.sttProvider=e),u(e)}),a(),o(18,"p",21),s(19,"Default: platform default. Sarvam is recommended for Indian-language recognition."),a()(),o(20,"div",18)(21,"label",27),s(22,"STT model"),a(),o(23,"p-select",28),f("ngModelChange",function(e){c(i);let n=d();return h(n.form.sttModel,e)||(n.form.sttModel=e),u(e)}),a(),o(24,"p",21),s(25,"Default: provider default. Saaras v3 is recommended for code-mixed Indian speech."),a()(),o(26,"div",18)(27,"label",29),s(28,"TTS"),a(),o(29,"p-select",30),f("ngModelChange",function(e){c(i);let n=d();return h(n.form.ttsProvider,e)||(n.form.ttsProvider=e),u(e)}),_("ngModelChange",function(){c(i);let e=d();return u(e.onTtsProviderChanged())}),a(),o(30,"p",21),s(31,"Default: auto. Hindi/auto uses Sarvam with language mirroring."),a()()(),o(32,"div",31)(33,"div",18)(34,"label",32),s(35,"Voice model"),a(),o(36,"p-select",33),f("ngModelChange",function(e){c(i);let n=d();return h(n.form.ttsModel,e)||(n.form.ttsModel=e),u(e)}),_("ngModelChange",function(){c(i);let e=d();return u(e.onTtsModelChanged())}),a(),o(37,"p",21),s(38,"Default: provider default. The voice preset below is filtered by this model."),a()(),o(39,"div",18)(40,"label",34),s(41,"Voice preset"),a(),o(42,"p-select",35),f("ngModelChange",function(e){c(i);let n=d();return h(n.form.ttsVoiceId,e)||(n.form.ttsVoiceId=e),u(e)}),a(),k(43,Wt,2,0,"p",36),o(44,"p",21),s(45,"Default: provider default. The voice must belong to the selected model."),a()(),o(46,"div",18)(47,"label",37),s(48,"Speech rate"),a(),o(49,"p-select",38),f("ngModelChange",function(e){c(i);let n=d();return h(n.form.ttsSpeed,e)||(n.form.ttsSpeed=e),u(e)}),a(),o(50,"p",21),s(51,"Default: 1.0\xD7. Lower values sound slower; higher values sound faster."),a()()(),o(52,"div",31)(53,"div",18)(54,"label",39),s(55,"Minimum TTS buffer (characters)"),a(),o(56,"p-inputNumber",40),f("ngModelChange",function(e){c(i);let n=d();return h(n.form.ttsMinBufferSize,e)||(n.form.ttsMinBufferSize=e),u(e)}),a(),o(57,"p",21),s(58,"Default: 50. Lower values reduce delay; higher values usually sound smoother."),a()(),o(59,"div",18)(60,"label",41),s(61,"Pitch adjustment"),a(),o(62,"p-inputNumber",42),f("ngModelChange",function(e){c(i);let n=d();return h(n.form.ttsPitch,e)||(n.form.ttsPitch=e),u(e)}),a(),o(63,"p",21),s(64,"Default: 0.00. Sarvam Bulbul v2 only; Bulbul v3 ignores this value."),a()(),o(65,"div",18)(66,"label",43),s(67,"Loudness multiplier"),a(),o(68,"p-inputNumber",44),f("ngModelChange",function(e){c(i);let n=d();return h(n.form.ttsLoudness,e)||(n.form.ttsLoudness=e),u(e)}),a(),o(69,"p",21),s(70,"Default: 1.0\xD7. Sarvam Bulbul v2 only; Bulbul v3 ignores this value."),a()()(),o(71,"div",18)(72,"label",45),s(73,"Primary MCP tool"),a(),o(74,"p-select",46),f("ngModelChange",function(e){c(i);let n=d();return h(n.form.mcpTool,e)||(n.form.mcpTool=e),u(e)}),a(),o(75,"p",21),s(76,"Default: kb_lookup. Supplies relevant knowledge-base excerpts to the tutor."),a()(),o(77,"div",47)(78,"div",48)(79,"p-checkbox",49),f("ngModelChange",function(e){c(i);let n=d();return h(n.form.vadEnableInterruptions,e)||(n.form.vadEnableInterruptions=e),u(e)}),a(),o(80,"label",50),s(81,"Allow interrupting the tutor while speaking"),a(),o(82,"p",21),s(83,"On: intentional learner speech can interrupt playback. Off: automatic half-duplex pauses the microphone during tutor playback and resumes listening after it drains."),a()(),o(84,"div",48)(85,"p-checkbox",51),f("ngModelChange",function(e){c(i);let n=d();return h(n.form.processingHoldToneEnabled,e)||(n.form.processingHoldToneEnabled=e),u(e)}),a(),o(86,"label",52),s(87,"Thinking hold-tone beep"),a()(),o(88,"div",48)(89,"p-checkbox",53),f("ngModelChange",function(e){c(i);let n=d();return h(n.form.ttsAudioRewriteLlmEnabled,e)||(n.form.ttsAudioRewriteLlmEnabled=e),u(e)}
1),a(),o(90,"label",54),s(91,"AI polish for spoken TTS"),a(),o(92,"p",21),s(93," Off by default. When on, an LLM rewrites remaining unspeakable formulas for audio only (captions stay raw). Deterministic math rewrite still runs first; processor order is unchanged. "),a()()(),o(94,"div",22)(95,"div",18)(96,"label",55),s(97,"Backchannel mode"),a(),o(98,"p-select",56),f("ngModelChange",function(e){c(i);let n=d();return h(n.form.backchannelMode,e)||(n.form.backchannelMode=e),u(e)}),a(),o(99,"p",21),s(100,"Default: Off. Relaxed or strict modes may use short listener acknowledgements."),a()(),o(101,"div",18)(102,"label",57),s(103,"Idle re-engage (seconds, 0 = off)"),a(),o(104,"p-inputNumber",58),f("ngModelChange",function(e){c(i);let n=d();return h(n.form.userIdleReengageSecs,e)||(n.form.userIdleReengageSecs=e),u(e)}),a(),o(105,"p",21),s(106,"Default: 10 seconds. Set to 0 to disable re-engagement after silence."),a()(),o(107,"div",18)(108,"label",59),s(109,"Language mirror"),a(),o(110,"p-select",60),f("ngModelChange",function(e){c(i);let n=d();return h(n.form.languageMirrorEnabled,e)||(n.form.languageMirrorEnabled=e),u(e)}),a(),o(111,"p",21),s(112,"Default: Auto. Enables mirroring for Sarvam and Hindi/auto calls."),a()()(),o(113,"div",22)(114,"div",18)(115,"label",61),s(116,"STT coalesce window (ms)"),a(),o(117,"p-inputNumber",62),f("ngModelChange",function(e){c(i);let n=d();return h(n.form.sttCoalesceMs,e)||(n.form.sttCoalesceMs=e),u(e)}),a(),o(118,"p",21),s(119,"Default: 1200 ms. Waits this long after each transcript final to merge follow-on words into one turn. Higher values tolerate longer mid-sentence pauses; lower values answer faster."),a()(),o(120,"div",18)(121,"label",63),s(122,"VAD stop (seconds of silence)"),a(),o(123,"p-inputNumber",64),f("ngModelChange",function(e){c(i);let n=d();return h(n.form.vadStopSecs,e)||(n.form.vadStopSecs=e),u(e)}),a(),o(124,"p",21),s(125,"Default: 0.35 s. Silence duration before the learner is treated as finished speaking. Higher values avoid cutting off hesitant speech; lower values respond sooner."),a()()(),S(126,"p-divider"),o(127,"header",65)(128,"h3"),s(129,"Tutor teaching behavior"),a(),o(130,"p"),s(131,"These controls apply to both AI Tutor chat and Voice Tutor. Actions are generated per response."),a()(),o(132,"div",22)(133,"div",18)(134,"label",66),s(135,"Teaching mode"),a(),o(136,"p-select",67),f("ngModelChange",function(e){c(i);let n=d();return h(n.form.tutorMode,e)||(n.form.tutorMode=e),u(e)}),a(),o(137,"p",21),s(138,"Default: Guided. Uses questions and hints before direct explanations."),a()(),o(139,"div",18)(140,"label",68),s(141,"Reveal after hint level"),a(),o(142,"p-select",69),f("ngModelChange",function(e){c(i);let n=d();return h(n.form.revealAfterHintLevel,e)||(n.form.revealAfterHintLevel=e),u(e)}),a(),o(143,"p",21),s(144,"Default: Level 4. Controls when the tutor may reveal an answer."),a()()(),o(145,"div",47)(146,"div",48)(147,"p-checkbox",70),f("ngModelChange",function(e){c(i);let n=d();return h(n.form.dynamicActionsEnabled,e)||(n.form.dynamicActionsEnabled=e),u(e)}),a(),o(148,"label",71),s(149,"Show dynamic next-step actions"),a()(),o(150,"div",48)(151,"p-checkbox",72),f("ngModelChange",function(e){c(i);let n=d();return h(n.form.revealAnswerEnabled,e)||(n.form.revealAnswerEnabled=e),u(e)}),a(),o(152,"label",73),s(153,"Allow answer reveal when policy permits"),a()(),o(154,"div",48)(155,"p-checkbox",74),f("ngModelChange",function(e){c(i);let n=d();return h(n.form.askBeforeExplain,e)||(n.form.askBeforeExplain=e),u(e)}),a(),o(156,"label",75),s(157,"Ask for learner thinking first"),a()(),o(158,"div",48)(159,"p-checkbox",76),f("ngModelChange",function(e){c(i);let n=d();return h(n.form.requireReattemptAfterReveal,e)||(n.form.requireReattemptAfterReveal=e),u(e)}),a(),o(160,"label",77),s(161,"Require teach-back after reveal"),a()()(),o(162,"p",21),s(163," Defaults: barge-in On; hold tone Off; dynamic actions On; answer reveal On; ask-before-explain On; teach-back On. "),a(),o(164,"div",78)(165,"label",79),s(166,"Maximum response sentences"),a(),o(167,"p-inputNumber",80),f("ngModelChange",function(e){c(i);let n=d();return h(n.form.maxResponseSentences,e)||(n.form.maxResponseSentences=e),u(e)}
1),a(),o(168,"p",21),s(169,"Default: 4 sentences. Limits response length for focused spoken answers."),a()(),k(170,Dt,1,1,"p-message",81)(171,Nt,1,1,"p-message",82),o(172,"div",83)(173,"p-button",84),_("onClick",function(){c(i);let e=d();return u(e.load())}),a(),S(174,"p-button",85),a()()}if(r&2){let i=d();l(4),g("ngModel",i.form.language),m("options",i.languageOptions)("fluid",!0)("disabled",i.saving),l(7),g("ngModel",i.form.llmProvider),m("options",i.llmOptions)("fluid",!0)("disabled",i.saving),l(6),g("ngModel",i.form.sttProvider),m("options",i.sttOptions)("fluid",!0)("disabled",i.saving),l(6),g("ngModel",i.form.sttModel),m("options",i.sttModelOptions)("fluid",!0)("disabled",i.saving),l(6),g("ngModel",i.form.ttsProvider),m("options",i.ttsOptions)("fluid",!0)("disabled",i.saving),l(7),g("ngModel",i.form.ttsModel),m("options",i.modelSelectOptions())("fluid",!0)("disabled",i.saving),l(6),g("ngModel",i.form.ttsVoiceId),m("options",i.voiceSelectOptions())("fluid",!0)("disabled",i.saving||i.voiceSelectionRequiresModel()&&!i.form.ttsModel),l(),b(i.voiceSelectionRequiresModel()&&!i.form.ttsModel?43:-1),l(6),g("ngModel",i.form.ttsSpeed),m("options",i.speedOptions)("fluid",!0)("disabled",i.saving||!i.audioSupportsSpeed()),l(7),g("ngModel",i.form.ttsMinBufferSize),m("min",30)("max",80)("step",5)("showButtons",!0)("fluid",!0)("disabled",i.saving||!i.isSarvamTts()),l(6),g("ngModel",i.form.ttsPitch),m("min",-.75)("max",.75)("step",.05)("minFractionDigits",2)("maxFractionDigits",2)("showButtons",!0)("fluid",!0)("disabled",i.saving||!i.isSarvamV2()),l(6),g("ngModel",i.form.ttsLoudness),m("min",.3)("max",3)("step",.1)("minFractionDigits",1)("maxFractionDigits",1)("showButtons",!0)("fluid",!0)("disabled",i.saving||!i.isSarvamV2()),l(6),g("ngModel",i.form.mcpTool),m("options",i.mcpToolOptions)("fluid",!0)("disabled",i.saving),l(5),g("ngModel",i.form.vadEnableInterruptions),m("binary",!0)("disabled",i.saving),l(6),g("ngModel",i.form.processingHoldToneEnabled),m("binary",!0)("disabled",i.saving),l(4),g("ngModel",i.form.ttsAudioRewriteLlmEnabled),m("binary",!0)("disabled",i.saving),l(9),g("ngModel",i.form.backchannelMode),m("options",i.backchannelOptions)("fluid",!0)("disabled",i.saving),l(6),g("ngModel",i.form.userIdleReengageSecs),m("min",0)("showButtons",!1)("fluid",!0)("disabled",i.saving),l(6),g("ngModel",i.form.languageMirrorEnabled),m("options",i.languageMirrorOptions)("fluid",!0)("disabled",i.saving),l(7),g("ngModel",i.form.sttCoalesceMs),m("min",0)("max",3e3)("step",50)("showButtons",!0)("fluid",!0)("disabled",i.saving),l(6),g("ngModel",i.form.vadStopSecs),m("min",.2)("max",2)("step",.05)("minFractionDigits",1)("maxFractionDigits",2)("showButtons",!0)("fluid",!0)("disabled",i.saving),l(13),g("ngModel",i.form.tutorMode),m("options",i.tutorModeOptions)("fluid",!0)("disabled",i.saving),l(6),g("ngModel",i.form.revealAfterHintLevel),m("options",i.revealLevelOptions)("fluid",!0)("disabled",i.saving),l(5),g("ngModel",i.form.dynamicActionsEnabled),m("binary",!0)("disabled",i.saving),l(4),g("ngModel",i.form.revealAnswerEnabled),m("binary",!0)("disabled",i.saving),l(4),g("ngModel",i.form.askBeforeExplain),m("binary",!0)("disabled",i.saving),l(4),g("ngModel",i.form.requireReattemptAfterReveal),m("binary",!0)("disabled",i.saving),l(8),g("ngModel",i.form.maxResponseSentences),m("min",1)("max",12)("showButtons",!1)("fluid",!0)("disabled",i.saving),l(3),b(i.errorMsg?170:-1),l(),b(i.successMsg?171:-1),l(2),m("outlined",!0)("disabled",i.saving||i.loading),l(),m("label",i.saving?"Saving\u2026":"Save settings")("loading",i.saving)("disabled",i.saving||i.loading)}}var nt=(()=>{let p=class p{constructor(){this.http=x(G),this.user=x(V),this.router=x(T),this.cdr=x(U),this.activeTab="voice-tutor",this.loading=!0,this.saving=!1,this.errorMsg="",this.successMsg="",this.audioOptions=[],this.languageOptions=[{label:"Auto (mirror how they speak)",value:"auto"},{label:"Hindi",value:"hi-IN"},{label:"English (India)",value:"en-IN"},{label:"English (US)",value:"en-US"}],this.llmOptions=[{label:"Platform default",value:""},{label:"OpenAI",value:"openai"},{label:"Sarvam",value:"sarvam"},{label:"Groq",value:"groq"},{label:"xAI",value:"xai"}],this.sttOptions=[{label:"Platform default",value:""},{label:"Sarvam",value:"sarvam"},{label:"Deepgram",value:"deepgram"},{label:"xAI",value:"xai"}],this.sttModelOptions=[{label:"Provider default",value:""},{label:"Sarvam Saaras v3 (code-mixed)",value:"saaras:v3"},{label:"Sarvam Saarika v2.5",value:"saarika:v2.5"}],this.ttsOptions=[{label:"Auto (Hindi/auto \u2192 Sarvam)",value:""},{label:"Sarvam",value:"sarvam"},{label:"Deepgram",value:"deepgram"},{label:"OpenAI",value:"openai"},{label:"ElevenLabs",value:"elevenlabs"},{label:"xAI",value:"xai"}],this.speedOptions=[{label:"Provider default",value:null},{label:"Slower",value:.85},{label:"Normal",value:1},{label:"Faster",value:1.15}],this.mcpToolOptions=[{label:"kb_lookup (snippets)",value:"kb_lookup"},{label:"kb_answer (composed answer)",value:"kb_answer"}],this.backchannelOptions=[{label:"Off",value:"off"},{label:"Relaxed",value:"relaxed"}
1,{label:"Strict",value:"strict"}],this.languageMirrorOptions=[{label:"Auto from language / TTS",value:""},{label:"On",value:"true"},{label:"Off",value:"false"}],this.tutorModeOptions=[{label:"Guided \u2014 questions and hints first",value:"guided"},{label:"Balanced \u2014 explain sooner when useful",value:"balanced"},{label:"Direct \u2014 prioritize clear explanations",value:"direct"}],this.revealLevelOptions=[{label:"1 \u2014 immediately",value:1},{label:"2 \u2014 after a clue",value:2},{label:"3 \u2014 after a worked structure",value:3},{label:"4 \u2014 after effort (recommended)",value:4}],this.form={language:"auto",llmProvider:"",sttProvider:"",sttModel:"",ttsProvider:"",ttsVoiceId:"",ttsModel:"",ttsSpeed:1,ttsMinBufferSize:50,ttsPitch:0,ttsLoudness:1,mcpTool:"kb_lookup",vadEnableInterruptions:!0,backchannelMode:"off",processingHoldToneEnabled:!1,ttsAudioRewriteLlmEnabled:!1,userIdleReengageSecs:0,sttCoalesceMs:600,vadStopSecs:.5,languageMirrorEnabled:"",tutorMode:"guided",revealAnswerEnabled:!0,revealAfterHintLevel:4,askBeforeExplain:!0,requireReattemptAfterReveal:!0,maxResponseSentences:4,dynamicActionsEnabled:!0}}ngOnInit(){if(!this.user?.isAdmin){this.router.navigate(["/platform/ekoai"]);return}this.load()}goBack(){this.router.navigate(["/platform/ekoai"])}load(){this.loading=!0,this.errorMsg="",this.cdr.markForCheck(),this.http.get(`${M.apiUrl}/api/storehouse/ai/tutor/settings`,I(this.user)).subscribe({next:t=>{this.form=this.fromApi(t),this.loadAudioOptions(),this.loading=!1,this.cdr.markForCheck()},error:t=>{this.loading=!1,this.errorMsg=t?.error?.errorMessage||t?.message||"Failed to load settings",this.cdr.markForCheck()}})}loadAudioOptions(){this.http.get(`${M.apiUrl}/api/storehouse/ai/tutor/voice-audio-options`,I(this.user)).subscribe({next:t=>{this.audioOptions=this.normalizeAudioOptions(t||[]),this.dropInvalidAudioSelections(),this.cdr.markForCheck()},error:()=>{this.audioOptions=[],this.dropInvalidAudioSelections(),this.errorMsg=this.errorMsg||"Voice/model catalog unavailable \u2014 refresh or try again.",this.cdr.markForCheck()}})}dropInvalidAudioSelections(){let t=this.modelSelectOptions().map(n=>n.value);this.form.ttsModel&&!t.includes(this.form.ttsModel)&&(this.form.ttsModel="");let e=this.voiceSelectOptions().map(n=>n.value);this.form.ttsVoiceId&&!e.includes(this.form.ttsVoiceId)&&(this.form.ttsVoiceId="")}normalizeAudioOptions(t){return(t||[]).map(e=>({provider:String(e?.provider||"").trim().toLowerCase(),voice_id:e?.voice_id??e?.voiceId??void 0,voice_label:e?.voice_label??e?.voiceLabel??void 0,model:e?.model??void 0,model_label:e?.model_label??e?.modelLabel??void 0,supports_speed:!!(e?.supports_speed??e?.supportsSpeed),default_speed:e?.default_speed??e?.defaultSpeed})).filter(e=>!!e.provider)}providerKey(){return(this.form.ttsProvider||"sarvam").trim().toLowerCase()}availableAudioOptions(){let t=this.providerKey();return this.audioOptions.filter(e=>e.provider===t)}voiceSelectOptions(){let t=[{label:"Provider default",value:""}],e=(this.form.ttsModel||"").trim();if(!e)return t;let n=new Set;for(let v of this.availableAudioOptions()){let C=(v.voice_id||"").trim(),ot=(v.model||"").trim();!C||n.has(C)||ot===e&&(n.add(C),t.push({label:v.voice_label||C,value:C}))}return t}modelSelectOptions(){let t=[{label:"Provider default",value:""}],e=new Set;for(let n of this.availableAudioOptions()){let v=(n.model||"").trim();!v||e.has(v)||(e.add(v),t.push({label:n.model_label||v,value:v}))}return t}voiceSelectionRequiresModel(){return this.modelSelectOptions().length>1}audioSupportsSpeed(){return this.availableAudioOptions().some(t=>t.supports_speed)}isSarvamTts(){return this.providerKey()==="sarvam"}isSarvamV2(){return this.isSarvamTts()&&this.form.ttsModel.trim().toLowerCase()==="bulbul:v2"}onTtsProviderChanged(){this.form.ttsVoiceId="",this.form.ttsModel="",this.form.ttsSpeed=1,this.form.ttsMinBufferSize=50,this.form.ttsPitch=0,this.form.ttsLoudness=1,this.cdr.markForCheck()}onTtsModelChanged(){let t=this.voiceSelectOptions().map(e=>e.value);this.form.ttsVoiceId&&!t.includes(this.form.ttsVoiceId)&&(this.form.ttsVoiceId=""),this.cdr.markForCheck()}save(){if(this.saving)return;this.saving=!0,this.errorMsg="",this.successMsg="",this.cdr.markForCheck();let t=this.toApi(this.form);this.http.put(`${M.apiUrl}/api/storehouse/ai/tutor/settings`,t,I(this.user)).subscribe({next:e=>{this.form=this.fromApi(e),this.saving=!1,this.successMsg="Voice Tutor settings saved.",this.cdr.markForCheck()},error:e=>{this.saving=!1,this.errorMsg=e?.error?.errorMessage||e?.message||"Failed to save settings",this.cdr.markForCheck()}})}fromApi(t){let e=t.languageMirrorEnabled??t.language_mirror_enabled,n="";return e===!0||e==="true"?n="true":(e===!1||e==="false")&&(n="false"),{language:String(t.language??"auto"),llmProvider:String(t.llmProvider??t.llm_provider??""),sttProvider:String(t.sttProvider??t.stt_provider??""),sttModel:String(t.sttModel??t.stt_model??""),ttsProvider:String(t.ttsProvider??t.tts_provider??""),ttsVoiceId:String(t.ttsVoiceId??t.tts_voice_id??""),ttsModel:String(t.ttsModel??t.tts_model??""),ttsSpeed:t.ttsSpeed==null&&t.tts_speed==null?1:Number(t.ttsSpeed??t.tts_speed),ttsMinBufferSize:t.ttsMinBufferSize==null&&t.tts_min_buffer_size==null?50:Number(t.ttsMinBufferSize??t.tts_min_buffer_size),ttsPitch:t.ttsPitch==null&&t.tts_pitch==null?0:Number(t.ttsPitch??t.tts_pitch),ttsLoudness:t.ttsLoudness==null&&t.tts_loudness==null?1:Number(t.ttsLoudness??t.tts_loudness),mcpTool:String(t.mcpTool??t.mcp_tool??"kb_lookup"),vadEnableInterruptions:!!(t.vadEnableInterruptions??t.vad_enable_interruptions??!0),backchannelMode:String(t.backchannelMode??t.backchannel_mode??"off"),processingHoldToneEnabled:!!(t.processingHoldToneEnabled??t.processing_hold_tone_enabled??!1),ttsAudioRewriteLlmEnabled:!!(t.ttsAudioRewriteLlmEnabled??t.tts_audio_rewrite_llm_enabled??!1),userIdleReengageSecs:Number(t.userIdleReengageSecs??t.user_idle_reengage_secs??0),sttCoalesceMs:Number(t.sttCoalesceMs??t.stt_coalesce_ms??1200),vadStopSecs:Number(t.vadStopSecs??t.vad_stop_secs??.35),languageMirrorEnabled:n,tutorMode:String(t.tutorMode??t.tutor_mode??"guided"),revealAnswerEnabled:!!(t.revealAnswerEnabled??t.reveal_answer_enabled??!0),revealAfterHintLevel:Number(t.revealAfterHintLevel??t.reveal_after_hint_level??4),askBeforeExplain:!!(t.askBeforeExplain??t.ask_before_explain??!0),requireReattemptAfterReveal:!!(t.requireReattemptAfterReveal??t.require_reattempt_after_reveal??!0),maxResponseSentences:Number(t.maxResponseSentences??t.max_response_sentences??4),dynamicActionsEnabled:!!(t.dynamicActionsEnabled??t.dynamic_actions_enabled??!0)}}toApi(t){let e={language:t.language,llmProvider:t.llmProvider||"",llm_provider:t.llmProvider||"",sttProvider:t.sttProvider||"",stt_provider:t.sttProvider||"",sttModel:t.sttModel||"",stt_model:t.sttModel||"",ttsProvider:t.ttsProvider||"",tts_provider:t.ttsProvider||"",ttsVoiceId:t.ttsVoiceId||"",tts_voice_id:t.ttsVoiceId||"",ttsModel:t.ttsModel||"",tts_model:t.ttsModel||"",ttsSpeed:t.ttsSpeed,tts_speed:t.ttsSpeed,ttsMinBufferSize:this.isSarvamTts()?t.ttsMinBufferSize:null,tts_min_buffer_size:this.isSarvamTts()?t.ttsMinBufferSize:null,ttsPitch:this.isSarvamV2()?t.ttsPitch:null,tts_pitch:this.isSarvamV2()?t.ttsPitch:null,ttsLoudness:this.isSarvamV2()?t.ttsLoudness:null,tts_loudness:this.isSarvamV2()?t.ttsLoudness:null,mcpTool:t.mcpTool,mcp_tool:t.mcpTool,vadEnableInterruptions:t.vadEnableInterruptions,vad_enable_interruptions:t.vadEnableInterruptions,backchannelMode:t.backchannelMode,backchannel_mode:t.backchannelMode,processingHoldToneEnabled:t.processingHoldToneEnabled,processing_hold_tone_enabled:t.processingHoldToneEnabled,ttsAudioRewriteLlmEnabled:t.ttsAudioRewriteLlmEnabled,tts_audio_rewrite_llm_enabled:t.ttsAudioRewriteLlmEnabled,userIdleReengageSecs:t.userIdleReengageSecs,user_idle_reengage_secs:t.userIdleReengageSecs,sttCoalesceMs:t.sttCoalesceMs,stt_coalesce_ms:t.sttCoalesceMs,vadStopSecs:t.vadStopSecs,vad_stop_secs:t.vadStopSecs,tutorMode:t.tutorMode,tutor_mode:t.tutorMode,revealAnswerEnabled:t.revealAnswerEnabled,reveal_answer_enabled:t.revealAnswerEnabled,revealAfterHintLevel:t.revealAfterHintLevel,reveal_after_hint_level:t.revealAfterHintLevel,askBeforeExplain:t.askBeforeExplain,ask_before_explain:t.askBeforeExplain,requireReattemptAfterReveal:t.requireReattemptAfterReveal,require_reattempt_after_reveal:t.requireReattemptAfterReveal,maxResponseSentences:t.maxResponseSentences,max_response_sentences:t.maxResponseSentences,dynamicActionsEnabled:t.dynamicActionsEnabled,dynamic_actions_enabled:t.dynamicActionsEnabled};if(t.languageMirrorEnabled==="")e.languageMirrorEnabled=null,e.language_mirror_enabled=null;else{let n=t.languageMirrorEnabled==="true";e.languageMirrorEnabled=n,e.language_mirror_enabled=n}return e}};p.\u0275fac=function(e){return new(e||p)},p.\u0275cmp=E({type:p,selectors:[["eko-hub-settings"]],decls:29,vars:5,consts:[[1,"ekoai-page"],[1,"ekoai-page-card"],[1,"ekoai-page-header"],[1,"ekoai-brand"],[1,"ekoai-logo"],[1,"ekoai-title"],[1,"ekoai-header-right"],["label","Back to Hub","icon","pi pi-arrow-left","severity","secondary",3,"onClick","outlined"],[1,"hs"],[1,"hs-tabs","custom-tab",3,"valueChange","value"],["value","voice-tutor"],["value","ask-discover",3,"disabled"],["value","learning-consultation",3,"disabled"],[1,"hs-panel"],[1,"hs-panel-header"],[1,"hs-status"],[1,"hs-form"],[1,"hs-form",3,"ngSubmit"],[1,"hs-field"],["for","hs-language",1,"hs-label"],["inputId","hs-language","name","language","optionLabel","label","optionValue","value","appendTo","body",3,"ngModelChange","ngModel","options","fluid","disabled"],[1,"hs-help"],[1,"hs-row"],["for","hs-llm",1,"hs-label"],["inputId","hs-llm","name","llmProvider","optionLabel","label","optionValue","value","appendTo","body",3,"ngModelChange","ngModel","options","fluid","disabled"],["for","hs-stt",1,"hs-label"],["inputId","hs-stt","name","sttProvider","optionLabel","label","optionValue","value","appendTo","body",3,"ngModelChange","ngModel","options","fluid","disabled"],["for","hs-stt-model",1,"hs-label"],["inputId","hs-stt-model","name","sttModel","optionLabel","label","optionValue","value","appendTo","body",3,"ngModelChange","ngModel","options","fluid","disabled"],["for","hs-tts",1,"hs-label"],["inputId","hs-tts","name","ttsProvider","optionLabel","label","optionValue","value","appendTo","body",3,"ngModelChange","ngModel","options","fluid","disabled"],[1,"hs-row","hs-audio-row"],["for","hs-model",1,"hs-label"],["inputId","hs-model","name","ttsModel","optionLabel","label","optionValue","value","appendTo","body",3,"ngModelChange","ngModel","options","fluid","disabled"],["for","hs-voice",1,"hs-label"],["inputId","hs-voice","name","ttsVoiceId","optionLabel","label","optionValue","value","appendTo","body",3,"ngModelChange","ngModel","options","fluid","disabled"],[1,"hint"],["for","hs-speed",1,"hs-label"],["inputId","hs-speed","name","ttsSpeed","optionLabel","label","optionValue","value","appendTo","body",3,"ngModelChange","ngModel","options","fluid","disabled"],["for","hs-buffer",1,"hs-label"],["inputId","hs-buffer","name","ttsMinBufferSize",3,"ngModelChange","ngModel","min","max","step","showButtons","fluid","disabled"],["for","hs-pitch",1,"hs-label"],["inputId","hs-pitch","name","ttsPitch",3,"ngModelChange","ngModel","min","max","step","minFractionDigits","maxFractionDigits","showButtons","fluid","disabled"],["for","hs-loudness",1,"hs-label"],["inputId","hs-loudness","name","ttsLoudness",3,"ngModelChange","ngModel","min","max","step","minFractionDigits","maxFractionDigits","showButtons","fluid","disabled"],["for","hs-mcp",1,"hs-label"],["inputId","hs-mcp","name","mcpTool","optionLabel","label","optionValue","value","appendTo","body",3,"ngModelChange","ngModel","options","fluid","disabled"],[1,"hs-checks"],[1,"hs-check"],["
1inputId","hs-vad","name","vadEnableInterruptions",3,"ngModelChange","ngModel","binary","disabled"],["for","hs-vad"],["inputId","hs-hold","name","processingHoldToneEnabled",3,"ngModelChange","ngModel","binary","disabled"],["for","hs-hold"],["inputId","hs-tts-rewrite-llm","name","ttsAudioRewriteLlmEnabled",3,"ngModelChange","ngModel","binary","disabled"],["for","hs-tts-rewrite-llm"],["for","hs-backchannel",1,"hs-label"],["inputId","hs-backchannel","name","backchannelMode","optionLabel","label","optionValue","value","appendTo","body",3,"ngModelChange","ngModel","options","fluid","disabled"],["for","hs-idle",1,"hs-label"],["inputId","hs-idle","name","userIdleReengageSecs",3,"ngModelChange","ngModel","min","showButtons","fluid","disabled"],["for","hs-mirror",1,"hs-label"],["inputId","hs-mirror","name","languageMirrorEnabled","optionLabel","label","optionValue","value","appendTo","body",3,"ngModelChange","ngModel","options","fluid","disabled"],["for","hs-stt-coalesce",1,"hs-label"],["inputId","hs-stt-coalesce","name","sttCoalesceMs",3,"ngModelChange","ngModel","min","max","step","showButtons","fluid","disabled"],["for","hs-vad-stop",1,"hs-label"],["inputId","hs-vad-stop","name","vadStopSecs",3,"ngModelChange","ngModel","min","max","step","minFractionDigits","maxFractionDigits","showButtons","fluid","disabled"],[1,"hs-panel-header","hs-panel-header--sub"],["for","hs-tutor-mode",1,"hs-label"],["inputId","hs-tutor-mode","name","tutorMode","optionLabel","label","optionValue","value","appendTo","body",3,"ngModelChange","ngModel","options","fluid","disabled"],["for","hs-reveal-level",1,"hs-label"],["inputId","hs-reveal-level","name","revealAfterHintLevel","optionLabel","label","optionValue","value","appendTo","body",3,"ngModelChange","ngModel","options","fluid","disabled"],["inputId","hs-dyn","name","dynamicActionsEnabled",3,"ngModelChange","ngModel","binary","disabled"],["for","hs-dyn"],["inputId","hs-reveal","name","revealAnswerEnabled",3,"ngModelChange","ngModel","binary","disabled"],["for","hs-reveal"],["inputId","hs-ask","name","askBeforeExplain",3,"ngModelChange","ngModel","binary","disabled"],["for","hs-ask"],["inputId","hs-reattempt","name","requireReattemptAfterReveal",3,"ngModelChange","ngModel","binary","disabled"],["for","hs-reattempt"],[1,"hs-field","hs-field--narrow"],["for","hs-max-sent",1,"hs-label"],["inputId","hs-max-sent","name","maxResponseSentences",3,"ngModelChange","ngModel","min","max","showButtons","fluid","disabled"],["severity","error","styleClass","w-full",3,"text"],["severity","success","styleClass","w-full",3,"text"],[1,"hs-actions"],["type","button","label","Reload","severity","secondary",3,"onClick","outlined","disabled"],["type","submit",3,"label","loading","disabled"]],template:function(e,n){e&1&&(o(0,"div",0)(1,"div",1)(2,"div",2)(3,"div",3)(4,"span",4),s(5,"E"),a(),o(6,"span",5),s(7,"Hub Settings"),a()(),o(8,"div",6)(9,"p-button",7),_("onClick",function(){return n.goBack()}),a()()(),o(10,"div",8)(11,"p-tabs",9),f("valueChange",function(C){return h(n.activeTab,C)||(n.activeTab=C),C}),o(12,"p-tablist")(13,"p-tab",10),s(14,"Voice Tutor"),a(),o(15,"p-tab",11),s(16,"Ask & Discover"),a(),o(17,"p-tab",12),s(18,"Learning Consultation"),a()(),o(19,"p-tabpanels")(20,"p-tabpanel",10)(21,"section",13)(22,"header",14)(23,"h2"),s(24,"Tutor defaults"),a(),o(25,"p"),s(26,"Voice settings apply to calls; teaching behavior applies to both AI Tutor chat and Voice Tutor."),a()(),k(27,Rt,2,0,"p",15)(28,zt,175,133,"form",16),a()()()()()()()),e&2&&(l(9),m("outlined",!0),l(2),g("value",n.activeTab),l(4),m("disabled",!0),l(2),m("disabled",!0),l(10),b(n.loading?27:28))},dependencies:[K,ke,j,be,q,xe,Y,X,Ee,Me,Ae,Ie,Oe,Pe,He,Le,Ve,Te,Ne,De,We,Re,Be,Fe],styles:['@charset "UTF-8";[_ngcontent-%COMP%]:root{--ekoaiAccent: var(--primaryColor, #0468ba);--ekoaiAccentStrong: #035a98;--ekoaiAccentSoft: #eaf4fb;--ekoaiAccentSofter: #f5fafd;--ekoaiGradientStart: var(--primaryColor, #0468ba);--ekoaiGradientEnd: var(--accentColor, #00c8a9);--ekoaiInk: #0f172a;--ekoaiInkSoft: #475569;--ekoaiMuted: #94a3b8;--ekoaiLine: var(--borderColor, #eaeaec);--ekoaiSurface: #ffffff;--ekoaiSurfaceAlt: var(--lightGreyColor, #f8f8fa);--ekoaiRadius: 14px;--ekoaiRadiusSm: 10px;--ekoaiRadiusXs: 8px;--ekoaiShadowXs: 0 1px 2px rgba(15, 23, 42, .06);--ekoaiShadowSm: 0 2px 8px rgba(15, 23, 42, .06);--ekoaiShadowMd: 0 8px 24px rgba(4, 104, 186, .12);--ekoaiShadowLg: 0 18px 40px rgba(4, 104, 186, .16);--ekoaiFont: "Satoshi", "Inter", "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif}.ekoai-page[_ngcontent-%COMP%]{padding:0;height:calc(100vh - 80px);min-height:0;box-sizing:border-box;display:flex;flex-direction:column;background:radial-gradient(1000px 280px at 100% -10%,rgba(0,200,169,.08),transparent 60%),radial-gradient(800px 260px at 0% -20%,rgba(4,104,186,.08),transparent 60%),var(--ekoaiSurfaceAlt);font-family:var(--ekoaiFont)}.ekoai-page-card[_ngcontent-%COMP%]{display:flex;flex-direction:column;flex:1 1 auto;width:100%;max-width:100%;margin:0;background:var(--ekoaiSurface);border:1px solid var(--ekoaiLine);border-radius:18px;overflow:hidden;box-shadow:var(--ekoaiShadowSm)}.ekoai-page-header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;padding:18px 24px;border-bottom:1px solid var(--ekoaiLine);flex:none;background:var(--ekoaiSurface)}.ekoai-brand[_ngcontent-%COMP%]{display:flex;align-items:center;gap:12px}.ekoai-logo[_ngcontent-%COMP%]{width:36px;height:36px;border-radius:10px;display:flex;align-items:center;justify-content:center;color:#fff;font-weight:700;font-size:16px;background:linear-gradient(135deg,var(--ekoaiGradientStart),var(--ekoaiGradientEnd));box-shadow:0 4px 12px #0468ba47}.ekoai-title[_ngcontent-%COMP%]{font-size:19px;font-weight:700;color:var(--ekoaiInk);letter-spacing:-.01em}.ekoai-header-right[_ngcontent-%COMP%]{display:flex;align-items:center;gap:10px}.hs[_ngcontent-%COMP%]{flex:1 1 auto;min-height:0;overflow:auto;padding:20px 24px 32px}.hs-tabs[_ngcontent-%COMP%]{display:block}.hs-tabs[_ngcontent-%COMP%] .p-tabpanels{padding:16px 0 0;background:transparent}.hs-tabs[_ngcontent-%COMP%] .p-tablist{border-bottom:1px solid var(--ekoaiLine)}.hs-panel-header[_ngcontent-%COMP%]{margin-bottom:16px}.hs-panel-header[_ngcontent-%COMP%] h2[_ngcontent-%COMP%], .hs-panel-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:0 0 6px;font-size:18px;font-weight:700;color:var(--ekoaiInk)}.hs-panel-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{font-size:16px}.hs-panel-header[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:0;font-size:13px;color:var(--ekoaiMuted)}.hs-panel-header--sub[_ngcontent-%COMP%]{margin-top:4px}.hs-form[_ngcontent-%COMP%]{display:grid;gap:16px;max-width:860px}.hs-row[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}@media (max-width: 720px){.hs-row[_ngcontent-%COMP%]{grid-template-columns:1fr}}.hs-field[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:6px;min-width:0}.hs-field--narrow[_ngcontent-%COMP%]{max-width:280px}.hs-label[_ngcontent-%COMP%]{font-size:13px;font-weight:600;color:var(--ekoaiInkSoft)}.hs-help[_ngcontent-%COMP%]{margin:0;font-size:11px;line-height:1.35;color:var(--ekoaiMuted)}.hint[_ngcontent-%COMP%]{margin:0;font-size:11px;line-height:1.35;color:#b45309}.hs-checks[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px 16px}@media (max-width: 720px){.hs-checks[_ngcontent-%COMP%]{grid-template-columns:1fr}}.hs-check[_ngcontent-%COMP%]{display:flex;align-items:center;gap:10px;font-size:13px;color:var(--ekoaiInkSoft)}.hs-check[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{cursor:pointer}.hs-actions[_ngcontent-%COMP%]{display:flex;gap:10px;justify-content:flex-end;margin-top:8px}.hs-status[_ngcontent-%COMP%]{font-size:13px;margin:0;color:var(--ekoaiMuted)}'],changeDetection:0});let r=p;return r})();var Ut={apiBaseUrl:`${M.apiUrl}/api/storehouse/learning-consultation`,useMock:!1,includeThinking:!0,thinkingDisplay:"timeline"},Gt={apiBaseUrl:`${M.apiUrl}/api/storehouse/ai/tutor`,useMock:!1,includeThinking:!1,thinkingDisplay:"off"},_n=[{path:"",component:et,providers:[...H,...B],data:{meta:{title:"EkoAI Hub"}}},{path:"settings",component:nt,data:{meta:{title:"EkoAI Hub Settings"}}},{path:"learning-consultation",component:Z,providers:[{provide:oe,useValue:Ut},...H,...B],data:{meta:{title:"Learning Consultation"}}},{path:"socratic-tutor",component:Z,providers:[{provide:oe,useValue:Gt},...H,...B],data:{meta:{title:"AI Tutor"}}},{path:":featureId",component:Z,providers:[...H,...B],data:{meta:{title:"EkoAI Hub"}}}];export{_n as EKOAI_ROUTES};
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.