1import"../chunks/DnY9TMNy.js";import{c as Ft,o as ht,a as As}from"../chunks/DSV_V_NG.js";import{k as We,o as _,aF as a,aG as s,w as n,q as Te,x as B,a as i,n as Be,aN as L,W as lt,f as se,r as e,b0 as ie,v as M,X as l,c as Ie,b1 as Rt,aB as rt,aI as Ms,e as Ps,$ as Ts}from"../chunks/DLXXwZBa.js";import{d as Ye,s as I,e as st}from"../chunks/C1ruDaPY.js";import{i as S}from"../chunks/BDD4p8oc.js";import{h as Is}from"../chunks/B5rbA1Nh.js";import{b as zt}from"../chunks/Cy1kKSw4.js";import{s as yt,a as Ue}from"../chunks/XW-A7JTg.js";import{l as ke}from"../chunks/Bi-4DNVK.js";import{a as os,b as Ls}from"../chunks/CVmlbamB.js";import{u as Ds}from"../chunks/DLNlni6D.js";import{u as mt}from"../chunks/DnYV1DGY.js";import{s as qe}from"../chunks/DKrJCatk.js";import{s as Kt}from"../chunks/CZUtiSxO.js";import{l as ft,I as Rs,M as Xt}from"../chunks/DZZDaghS.js";import{b as cs,c as Es,l as Ve}from"../chunks/DyqGsEC5.js";import{u as Zt}from"../chunks/CVuI83SO.js";import{d as _t,w as Us,g as at}from"../chunks/-oG8fn9Y.js";import{f as nt,d as Je,C as je,s as pt,g as Et,e as Ns}from"../chunks/CUBQL0Xx.js";import{s as Ke,u as Xe,w as Fs,h as zs,n as js}from"../chunks/NkipqQ0d.js";import{c as Os,a as Gs,P as Vs}from"../chunks/Cn6AX6eW.js";import{u as jt}from"../chunks/BpBW5kTR.js";import{m as us,u as Ws}from"../chunks/Cg1wM3G7.js";import{M as Bs,U as qs,D as $t,L as ds}from"../chunks/CKhunV5h.js";import{s as vs,u as Js,L as es}from"../chunks/BnRzshws.js";import{b as It,M as Ys,a as ts,s as ss,u as gs}from"../chunks/BofThiJM.js";import{g as Qs}from"../chunks/gPSZdihE.js";import{P as Hs}from"../chunks/BcI80Imw.js";import{D as Ks}from"../chunks/CHn1w9wu.js";import{e as Ot,i as Xs}from"../chunks/B9WYbfL0.js";import{r as ms,s as Ut,a as Zs}from"../chunks/EIc1C6RT.js";import{C as Gt}from"../chunks/BJ0WJtT1.js";import{P as it}from"../chunks/BT0tfBRH.js";import{S as Ze}from"../chunks/Bl_oq0N9.js";import{a as $s,U as ea,i as ta}from"../chunks/BsKmEwx4.js";import{k as sa}from"../chunks/BXJ2XTDa.js";import{t as as}from"../chunks/8JEhUTF1.js";import{a as aa}from"../chunks/u2Zd6_Zu.js";import{p as Lt}from"../chunks/RxvYINNP.js";import{d as ra}from"../chunks/HwZ2t-bl.js";import{c as rs,a as na}from"../chunks/B21mmU_G.js";import{T as ia}from"../chunks/BEF9Fuwo.js";import{F as la}from"../chunks/vtMkLFNf.js";import{s as oa}from"../chunks/B-QrfdWg.js";import{s as Nt}from"../chunks/YI27Me1o.js";import{M as ca}from"../chunks/NN8c2lWH.js";import{I as ua}from"../chunks/KQM9N4sE.js";import{C as da}from"../chunks/B7dGrJ9E.js";import{p as va,P as ga}from"../chunks/bZhCnzoA.js";import{P as gt}from"../chunks/C2V3rybV.js";import{L as ma}from"../chunks/BnwDx9fU.js";import{L as ns}from"../chunks/CsyPrcag.js";import{s as fa}from"../chunks/rvDTeOiX.js";import{s as is}from"../chunks/BQXogkDO.js";import{g as pa}from"../chunks/CFNSjhN2.js";import{c as ha,m as ya}from"../chunks/BgB2DGg1.js";import{L as _a}from"../chunks/Cic4QrKM.js";import{i as ba}from"../chunks/CXhvLHwL.js";(function(){try{var R=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{};R.SENTRY_RELEASE={id:"65390db65abd68b131a5fe3bae2400f05018c4ec"};var t=new R.Error().stack;t&&(R._sentryDebugIds=R._sentryDebugIds||{},R._sentryDebugIds[t]="b3e0893e-ae35-4c6f-bf52-27acb6271971",R._sentryDebugIdIdentifier="sentry-dbid-b3e0893e-ae35-4c6f-bf52-27acb6271971")}catch{}})();const Dt={isInitialized:!1,isLoading:!1,assignmentsProgressWrapper:null,classMastery:null,error:null};function Ca(){const{subscribe:R,set:t,update:v}=Us(Dt);return{subscribe:R,setInitialized(o){v(m=>({...m,isInitialized:o}))},setLoading(o){v(m=>({...m,isLoading:o}))},setAssignmentsProgressWrapper(o){v(m=>({...m,assignmentsProgressWrapper:o}))},setClassMastery(o){v(m=>({...m,classMastery:o}))},setError(o){v(m=>({...m,error:o}))},getAssignmentProgress(o){const m=at({subscribe:R});return m.assignmentsProgressWrapper?.studentAssignmentProgresses?m.assignmentsProgressWrapper.studentAssignmentProgresses.find(b=>b.assignmentNumber===o)??null:null},wasAssignmentComplete(o){return this.getAssignmentProgress(o)?.assignmentC
1ompletionRatio===1},reset(){t(Dt)},clearCachedData(){t({...Dt,isInitialized:!1})}}}const ge=Ca();_t(ge,R=>R.isInitialized);_t(ge,R=>R.isLoading);_t(ge,R=>R.assignmentsProgressWrapper);_t(ge,R=>R.classMastery);class wa{currentClass=null;currentUserId=null;isUpdating=!1;updateQueue=[];initialized=!1;unsubscribeStudySessionEnded=null;unsubscribeLessonStatusChanged=null;unsubscribeReviewFilterChanged=null;getCurrentCurriculum(){return at(ft).curriculum}async initialize(t,v){if(!(this.initialized&&this.currentUserId===t&&this.currentClass?.classId===v.classId)){this.currentUserId=t,this.currentClass=v,ge.setLoading(!0);try{await this.loadFromFirestore(t,v.classId),this.subscribeToStudySessionEvents(),this.subscribeToLessonStatusEvents(),this.subscribeToReviewFilterEvents(),this.initialized=!0,ge.setInitialized(!0),ge.setError(null),await this.updateAllAncillaryData()}catch(o){ke("[StudentAncillaryDataUpdater] Initialization error:",o),ge.setError(o instanceof Error?o.message:"Failed to initialize")}finally{ge.setLoading(!1)}}}subscribeToStudySessionEvents(){this.unsubscribeStudySessionEnded&&this.unsubscribeStudySessionEnded(),this.unsubscribeStudySessionEnded=vs.onSessionEnded(t=>{t.isCompleted&&this.onStudySessionEnded()})}async onStudySessionEnded(){!this.currentClass||!this.currentUserId||await this.queueUpdate(()=>this.updateAllAncillaryData())}subscribeToLessonStatusEvents(){this.unsubscribeLessonStatusChanged&&this.unsubscribeLessonStatusChanged(),this.unsubscribeLessonStatusChanged=jt.onChange(()=>{!this.currentClass||!this.currentUserId||this.queueUpdate(()=>this.updateAllAncillaryData())})}subscribeToReviewFilterEvents(){this.unsubscribeReviewFilterChanged&&this.unsubscribeReviewFilterChanged();let t=null;this.unsubscribeReviewFilterChanged=cs.subscribe(v=>{const o=Es(v),m=t!==null&&t!==o;t=o,!(!m||!this.currentClass||!this.currentUserId)&&this.queueUpdate(()=>this.updateAllAncillaryData())})}async forceUpdate(){if(!this.currentClass||!this.currentUserId){console.warn("[StudentAncillaryDataUpdater] Cannot force update - not initialized");return}await this.updateAllAncillaryData()}async updateAllAncillaryData(){if(!this.currentClass||!this.currentUserId)return;const t=mt.currentUserProfile;if(!t){console.warn("[StudentAncillaryDataUpdater] Cannot update - no user profile");return}const v=this.getCurrentCurriculum();if(!v){console.warn("[StudentAncillaryDataUpdater] Cannot update - no curriculum");return}try{ge.setLoading(!0);const o=v.assignments??[],m=this.calculateAssignmentProgresses(o),b=Os(t,this.currentClass.classId,v.id,m),p=at(ge).assignmentsProgressWrapper;this.checkForNewCompletions(p,b),await this.uploadAssignmentsProgress(b),await this.uploadClassMastery()}catch(o){ke("[StudentAncillaryDataUpdater] Error updating ancillary data:",o),ge.setError(o instanceof Error?o.message:"Update failed")}finally{ge.setLoading(!1)}}async uploadAssignmentsProgress(t){if(!this.currentUserId||!this.currentClass)return;const v=nt.getFirestore();if(!v)throw new Error("Firestore not available");try{const o=Je(v,je.STUDENT_ASSIGNMENTS_PROGRESS_DATA,this.currentClass.classId,je.STUDENT_ASSIGNMENTS_PROGRESS_WRAPPERS,this.currentUserId),m=t.userProfile.toObject(),b={classId:t.classId,curriculumId:t.curriculumId,timeUpdatedString:t.timeUpdatedString,userProfile:m,studentAssignmentProgresses:t.studentAssignmentProgresses.map(p=>({assignmentNumber:p.assignmentNumber,assignmentCompletionRatio:p.assignmentCompletionRatio,...p.timeCompletedString?{timeCompletedString:p.timeCompletedString}:{}}))};await pt(o,b),ge.setAssignmentsProgressWrapper(t)}catch(o){throw ke("[StudentAncillaryDataUpdater] Failed to upload assignments progress:",o),o}}calculateAssignmentProgresses(t){const v=[],o=at(ge).assignmentsProgressWrapper;for(const m of t){const b=Ke.calculateAssignmentCompletion(m),p=o?.studentAssignmentProgresses?.find(g=>g.assignmentNumber===m.assignmentNumber),h={assignmentNumber:m.assignmentNumber,assignmentCompletionRatio:b,timeCompletedString:p?.timeCompletedString};b===1&&!h.timeCompletedString&&(h.timeCompletedString=new Date().toISOString()),v.push(h)}return v}async uploadClassMastery(){if(!this.currentClass||!this.currentUserId)return;const t=mt.currentUserProfile;if(!t){console.warn("[StudentAncillaryDataUpdater] Cannot update class mastery - no user profile");return}const v=this.getCurrentCurriculum();if(!v){console.warn("[StudentAncillaryDataUpdater] Cannot update class mastery - no curriculum");return}const o=await Ve.getAllQLDsForCurrentCurriculum(),m=o.length>0?Bs.getMasteryRatioForLearnerData(o):0,b=await us.calculateCurrentMasteryReviews(),h=at(Js).stats?.getTotalMasteryReviewsCompleted()??0,g=Math.floor(m*100),y=Gs(t,this.currentClass.classId,v.id,m,b,h,g),q=nt.getFirestore();if(!q)throw new Error("Firestore not available");try{const J=Je(q,je.STUDENT_CLASS_MASTERY_DATA,this.currentClass.classId),C=y.userProfile.toObject(),E={classId:y.classId,curriculumId:y.curriculumId,curriculumMastery:y.curriculumMastery,masteryReviewsRemaining:y.masteryReviewsRemaining,masteryReviewsCompleted:y.masteryReviewsCompleted,highestFullPercentageReached:y.highestFullPercentageReached,timeUpdatedString:y.timeUpdatedString,userProfile:C};await pt(J,{allStudentsMasteryData:{[this.currentUserId]:E}},{merge:!0}),ge.setClassMastery(y)}catch(J){throw ke("[StudentAncillaryDataUpdater] Failed to upload class mastery:",J),J}}checkForNewCompletions(t,v){if(t){for(const o of v.studentAssignmentProgresses)if(o.assignmentC
1ompletionRatio===1){const m=t.studentAssignmentProgresses.find(b=>b.assignmentNumber===o.assignmentNumber);!m||m.assignmentCompletionRatio<1}}}async queueUpdate(t){if(this.updateQueue.push(t),!this.isUpdating){for(this.isUpdating=!0;this.updateQueue.length>0;){const v=this.updateQueue.shift();if(v)try{await v()}catch(o){ke("[StudentAncillaryDataUpdater] Queued update failed:",o)}}this.isUpdating=!1}}async loadFromFirestore(t,v){const o=nt.getFirestore();if(!o){console.warn("[StudentAncillaryDataUpdater] Firestore not available");return}try{const m=Je(o,je.STUDENT_ASSIGNMENTS_PROGRESS_DATA,v,je.STUDENT_ASSIGNMENTS_PROGRESS_WRAPPERS,t),b=await Et(m);if(b.exists()){const g=b.data();ge.setAssignmentsProgressWrapper(g)}const p=Je(o,je.STUDENT_CLASS_MASTERY_DATA,v),h=await Et(p);if(h.exists()){const y=h.data().allStudentsMasteryData?.[t];y&&ge.setClassMastery(y)}}catch(m){ke("[StudentAncillaryDataUpdater] Failed to load from Firestore:",m)}}reset(){this.unsubscribeStudySessionEnded&&(this.unsubscribeStudySessionEnded(),this.unsubscribeStudySessionEnded=null),this.unsubscribeLessonStatusChanged&&(this.unsubscribeLessonStatusChanged(),this.unsubscribeLessonStatusChanged=null),this.unsubscribeReviewFilterChanged&&(this.unsubscribeReviewFilterChanged(),this.unsubscribeReviewFilterChanged=null),this.currentClass=null,this.currentUserId=null,this.initialized=!1,this.updateQueue=[],ge.reset()}}const ls=new wa;var Sa=_('<button class="class-info-chip svelte-9xn5bu"><span class="chip-name svelte-9xn5bu"> </span> <span class="chip-mastery svelte-9xn5bu"> </span> <svg class="chip-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="12" cy="12" r="10"></circle><path d="M12 16v-4"></path><path d="M12 8h.01"></path></svg></button>');function xa(R,t){We(t,!0);var v=Sa();v.__click=function(...h){t.onclick?.apply(this,h)};var o=a(v),m=a(o,!0);s(o);var b=n(o,2),p=a(b);s(b),Te(2),s(v),B(h=>{I(m,t.className),I(p,`${h??""}%`)},[()=>t.masteryPercentage.toFixed(0)]),i(R,v),Be()}Ye(["click"]);var ka=_('<input type="text" maxlength="1" class="code-input svelte-wrzyvx"/>'),Aa=_('<button class="switch-mode svelte-wrzyvx">Not in a class?</button>'),Ma=_(`<p class="help-text switch-confirm-text svelte-wrzyvx">If you're not in a class, you can switch to independent learner mode.</p> <div class="switch-btn-wrap svelte-wrzyvx"><!></div>`,1),Pa=_(`<p class="help-text svelte-wrzyvx">If you're a student in a class, ask your teacher or one of your classmates for the class code.</p> <!>`,1),Ta=_('<div class="loading-state svelte-wrzyvx"><div class="spinner svelte-wrzyvx"></div> <p class="svelte-wrzyvx"><!></p></div>'),Ia=_('<div class="info-row svelte-wrzyvx"><span class="info-label svelte-wrzyvx">Teacher:</span> <span class="info-value svelte-wrzyvx"> </span></div>'),La=_('<div class="info-row svelte-wrzyvx"><span class="info-label svelte-wrzyvx">Language:</span> <span class="info-value svelte-wrzyvx"> </span></div>'),Da=_('<div class="class-info svelte-wrzyvx"><div class="info-row svelte-wrzyvx"><span class="info-label svelte-wrzyvx">Class Name:</span> <span class="info-value svelte-wrzyvx"> </span></div> <!> <!></div> <div class="modal-actions svelte-wrzyvx"><div class="action-btn-wrap svelte-wrzyvx"><!></div> <div class="action-btn-wrap svelte-wrzyvx"><!></div></div>',1),Ra=_('<div class="error-state svelte-wrzyvx"><p class="error-message svelte-wrzyvx"> </p> <div class="retry-btn-wrap svelte-wrzyvx"><!></div></div>'),Ea=_('<div class="modal-overlay svelte-wrzyvx" role="presentation"><div class="modal-content svelte-wrzyvx" role="dialog" aria-modal="true" tabindex="-1"><div class="modal-header svelte-wrzyvx"><h3 class="svelte-wrzyvx"><!></h3> <!></div> <div class="modal-body svelte-wrzyvx"><!></div></div></div>'),Ua=_(`<div class="class-joiner-card svelte-wrzyvx"><h2 class="svelte-wrzyvx">Enter your class code to join your class.</h2> <div class="code-inputs svelte-wrzyvx"></div> <div class="find-btn-wrap svelte-wrzyvx"><!></div> <button class="help-toggle svelte-wrzyvx">Don't have a class code?</button> <!></div> <!>`,1);function Na(R,t){We(t,!0);const v=()=>Ue(os,"$authStore",o),[o,m]=yt(),b=Ft();let p=L(lt(["","","","","",""])),h=[],g=L("hidden"),y=L(null),q=L(""),J=L(!1),C=L(!1),E=L(!1),G=M(()=>e(p).every(c=>c.length>0)),j=M(()=>e(p).join(""));
1function Y(){l(p,["","","","","",""],!0),h[0]?.focus()}function Q(c,w){const u=w.target,r=u.value.toUpperCase();if(r&&!/^[A-Z0-9]$/.test(r)){u.value="";return}e(p)[c]=r,r&&c<5&&h[c+1]?.focus()}function V(c,w){w.key==="Backspace"&&!e(p)[c]&&c>0||w.key==="ArrowLeft"&&c>0?h[c-1]?.focus():w.key==="ArrowRight"&&c<5&&h[c+1]?.focus()}function P(c){c.preventDefault();const w=c.clipboardData?.getData("text").toUpperCase().replace(/[^A-Z0-9]/g,"");if(!w)return;w.split("").slice(0,6).forEach((d,k)=>{e(p)[k]=d,h[k]?.focus()});const r=e(p).findIndex(d=>!d);r!==-1?h[r]?.focus():h[5]?.focus()}async function T(){if(!e(G))return;const c=e(j),w=nt.getFirestore();if(!w){l(q,"Unable to connect to database"),l(g,"error");return}l(g,"searching"),l(y,null),l(q,"");try{const u=Je(w,je.INSTRUCTOR_CLASSES,e(j)),r=await Et(u);if(!r.exists()){l(q,`A class with code ${c} could not be found. Please check the code and try again.`),l(g,"error");return}const d=r.data();l(y,new Rs(d),!0),l(g,"found")}catch(u){ke("[ClassJoinerCard] Error finding class:",u),l(q,"An error occurred while searching for the class."),l(g,"error")}}async function H(){if(!e(y))return;const c=nt.getFirestore(),w=v()?.userId;if(!c||!w){l(q,"Unable to join class. Please try again."),l(g,"error");return}l(g,"joining");try{const u=e(y).classId,r=Je(c,je.CLASS_STUDENT_IDS,u);await pt(r,{studentIds:Ns(w)},{merge:!0});const d=Je(c,je.STUDENT_CLASSES,w);await pt(d,{classId:u},{merge:!0}),l(g,"hidden"),b("joinClassSucceeded",u),Y()}catch(u){ke("[ClassJoinerCard] Error joining class:",u),l(q,"Failed to join class. Please try again."),l(g,"error")}}function F(){const c=e(g)==="error";l(g,"hidden"),l(y,null),l(q,""),c&&Y()}var O=Ua(),U=se(O),re=n(a(U),2);Ot(re,21,()=>e(p),Xs,(c,w,u)=>{var r=ka();ms(r),r.__input=d=>Q(u,d),r.__keydown=d=>V(u,d),Ut(r,"aria-label",`Code digit ${u+1}`),zt(r,(d,k)=>h[k]=d,d=>h?.[d],()=>[u]),B(()=>Zs(r,e(w))),st("paste",r,function(...d){(u===0?P:void 0)?.apply(this,d)}),i(c,r)}),s(re);var K=n(re,2),ue=a(K);{let c=M(()=>!e(G));it(ue,{onclick:T,get disabled(){return e(c)},pill:!0,children:(w,u)=>{Te();var r=ie("FIND CLASS");i(w,r)},$$slots:{default:!0}})}s(K);var de=n(K,2);de.__click=()=>l(J,!e(J));var we=n(de,2);{var Ae=c=>{var w=Pa(),u=n(se(w),2);{var r=k=>{var x=Aa();x.__click=()=>l(C,!0),i(k,x)},d=k=>{var x=Ma(),D=n(se(x),2),Z=a(D);Ze(Z,{onclick:async()=>{l(E,!0);try{await $s.setUserRole(ea.IndependentLearner),window.location.reload()}catch(X){ke("[ClassJoinerCard] Failed to switch role:",X),l(E,!1)}},get disabled(){return e(E)},pill:!0,children:(X,ve)=>{Te();var ae=ie();B(()=>I(ae,e(E)?"Switching...":"Switch to Independent Learner")),i(X,ae)},$$slots:{default:!0}}),s(D),i(k,x)};S(u,k=>{e(C)?k(d,!1):k(r)})}i(c,w)};S(we,c=>{e(J)&&c(Ae)})}s(U);var he=n(U,2);{var f=c=>{var w=Ea();w.__click=F;var u=a(w);u.__click=$=>$.stopPropagation();var r=a(u),d=a(r),k=a(d);{var x=$=>{var W=ie("Searching...");i($,W)},D=$=>{var W=Ie(),ee=se(W);{var ye=le=>{var te=ie();B(()=>I(te,`Found Class: ${e(y).classId??""}`)),i(le,te)},Se=le=>{var te=Ie(),oe=se(te);{var Me=fe=>{var _e=ie("Joining Class...");i(fe,_e)},xe=fe=>{var _e=Ie(),be=se(_e);{var Ee=Le=>{var Ne=ie("Error");i(Le,Ne)};S(be,Le=>{e(g)==="error"&&Le(Ee)},!0)}i(fe,_e)};S(oe,fe=>{e(g)==="joining"?fe(Me):fe(xe,!1)},!0)}i(le,te)};S(ee,le=>{e(g)==="found"&&e(y)?le(ye):le(Se,!1)},!0)}i($,W)};S(k,$=>{e(g)==="searching"?$(x):$(D,!1)})}s(d);var Z=n(d,2);Gt(Z,{onclick:F}),s(r);var X=n(r,2),ve=a(X);{var ae=$=>{var W=Ta(),ee=n(a(W),2),ye=a(ee);{var Se=te=>{var oe=ie("Searching for class, one moment please...");i(te,oe)},le=te=>{var oe=ie("Joining class, please wait...");i(te,oe)};S(ye,te=>{e(g)==="searching"?te(Se):te(le,!1)})}s(ee),s(W),i($,W)},Re=$=>{var W=Ie(),ee=se(W);{var ye=le=>{var te=Da(),oe=se(te),Me=a(oe),xe=n(a(Me),2),fe=a(xe,!0);s(xe),s(Me);var _e=n(Me,2);{var be=N=>{var ne=Ia(),ce=n(a(ne),2),me=a(ce,!0);s(ce),s(ne),B(()=>I(me,e(y).instructorUserProfile.userFullName)),i(N,ne)};S(_e,N=>{e(y).instructorUserProfile.userFullName&&N(be)})}var Ee=n(_e,2);{var Le=N=>{var ne=La(),ce=n(a(ne),2),me=a(ce,!0);s(ce),s(ne),B(Fe=>I(me,Fe),[()=>e(y).language.charAt(0).toUpperCase()+e(y).language.slice(1)]),i(N,ne)};S(Ee,N=>{e(y).language&&N(Le)})}s(oe);var Ne=n(oe,2),Oe=a(Ne),De=a(Oe);Ze(De,{onclick:F,children:(N,ne)=>{Te();var ce=ie("Cancel");i(N,ce)},$$slots:{default:!0}}),s(Oe);var A=n(Oe,2),z=a(A);it(z,{onclick:H,children:(N,ne)=>{Te();var ce=ie("Join Class");i(N,ce)},$$slots:{default:!0}}),s(A),s(Ne),B(N=>I(fe,N),[()=>e(y).getClassNameWithSection()]),i(le,te)},Se=le=>{var te=Ie(),oe=se(te);{var Me=xe=>{var fe=Ra(),_e=a(fe),be=a(_e,!0);s(_e);var Ee=n(_e,2),Le=a(Ee);it(Le,{onclick:F,children:(Ne,Oe)=>{Te();var De=ie("Try Again");i(Ne,De)},$$slots:{default:!0}}),s(Ee),s(fe),B(()=>I(be,e(q))),i(xe,fe)};S(oe,xe=>{e(g)==="error"&&xe(Me)},!0)}i(le,te)};S(ee,le=>
1{e(g)==="found"&&e(y)?le(ye):le(Se,!1)},!0)}i($,W)};S(ve,$=>{e(g)==="searching"||e(g)==="joining"?$(ae):$(Re,!1)})}s(X),s(u),s(w),i(c,w)};S(he,c=>{e(g)!=="hidden"&&c(f)})}i(R,O),Be(),m()}Ye(["input","keydown","click"]);var Fa=_('<span class="all-learned-badge svelte-by43ku">ALL LEARNED</span>'),za=_('<div><div class="tense-icon svelte-by43ku"><!></div> <div class="tense-info svelte-by43ku"><span class="tense-title svelte-by43ku"> </span> <span class="tense-description svelte-by43ku"><!></span></div> <div class="tense-action svelte-by43ku"><!></div></div>'),ja=_('<div class="test-out-all-section svelte-by43ku"><!></div>'),Oa=_('<div class="modal-overlay svelte-by43ku"><div class="modal-card svelte-by43ku" role="dialog" aria-modal="true" aria-labelledby="test-out-tenses-title" tabindex="-1"><!> <div class="modal-body svelte-by43ku"><div class="tense-rows-wrapper svelte-by43ku"><div class="tense-rows-scroller svelte-by43ku"></div> <!></div> <!></div></div></div>');function Ga(R,t){We(t,!0);let v=L(0);ht(()=>{const C=Ve.onChange(()=>{Rt(v)}
1);return()=>{C()}});let o=M(()=>{e(v);const C=new Map;for(const G of t.assignment.verbConjugations){const j=C.get(G.conjugationType);j?j.push(G):C.set(G.conjugationType,[G])}const E=[];for(const[G,j]of C){let Y=0;const Q=[];for(const V of j)Ve.isVerbConjugationLearned(V.infinitive,V.conjugationType)?Y++:Q.push(V);E.push({conjugationType:G,displayName:qs(G),verbConjugations:j,learnedCount:Y,totalCount:j.length,isAllLearned:Y===j.length,unlearnedVCs:Q})}return E.sort((G,j)=>$t(G.conjugationType)-$t(j.conjugationType)),E}),m=M(()=>e(o).every(C=>C.isAllLearned)),b=M(()=>e(o).flatMap(C=>C.unlearnedVCs));function p(C){Nt.tryStartShuffledStudySession(C,es.StudentAssignmentPanel),t.onClose()}function h(){Nt.tryStartShuffledStudySession(e(b),es.StudentAssignmentPanel),t.onClose()}function g(C){C.key==="Escape"&&t.onClose()}var y=Ie(),q=se(y);{var J=C=>{var E=Oa();E.__click=function(...F){t.onClose?.apply(this,F)},E.__keydown=g;var G=a(E);G.__click=F=>F.stopPropagation(),G.__keydown=F=>F.stopPropagation();var j=a(G);ca(j,{title:"TEST OUT OF ASSIGNMENT TENSES",get onClose(){return t.onClose},id:"test-out-tenses-title"});var Y=n(j,2),Q=a(Y),V=a(Q);Ot(V,21,()=>e(o),F=>F.conjugationType,(F,O)=>{var U=za();let re;var K=a(U),ue=a(K);da(ue,{get conjugationType(){return e(O).conjugationType},size:"md"}),s(K);var de=n(K,2),we=a(de),Ae=a(we);s(we);var he=n(we,2),f=a(he);{var c=x=>{var D=ie();B(()=>I(D,`All ${e(O).displayName??""} verbs learned.`)),i(x,D)},w=x=>{var D=ie();B(()=>I(D,`Test out of remaining ${e(O).displayName??""} verbs.`)),i(x,D)};S(f,x=>{e(O).isAllLearned?x(c):x(w,!1)})}s(he),s(de);var u=n(de,2),r=a(u);{var d=x=>{var D=Fa();i(x,D)},k=x=>{Ze(x,{onclick:()=>p(e(O).unlearnedVCs),pill:!0,children:(D,Z)=>{Te();var X=ie("TEST OUT");i(D,X)},$$slots:{default:!0}})};S(r,x=>
1{e(O).isAllLearned?x(d):x(k,!1)})}s(u),s(U),B(()=>{re=oa(U,1,"tense-row svelte-by43ku",null,re,{"all-learned":e(O).isAllLearned}),I(Ae,`All ${e(O).displayName??""} Tense Verbs`)}),i(F,U)}),s(V);var P=n(V,2);ua(P,{borderRadius:"8px",intensity:"medium"}),s(Q);var T=n(Q,2);{var H=F=>{var O=ja(),U=a(O);Ze(U,{onclick:h,pill:!0,children:(re,K)=>{Te();var ue=ie("TEST OUT OF ALL ASSIGNMENT VERBS");i(re,ue)},$$slots:{default:!0}}),s(O),i(F,O)};S(T,F=>{e(m)||F(H)})}s(Y),s(G),s(E),i(C,E)};S(q,C=>{t.isOpen&&C(J)})}i(R,y),Be()}Ye(["click","keydown"]);var Va=_('<p class="due-date svelte-ypgicr"> </p>'),Wa=_('<div class="test-out-section svelte-ypgicr"><!></div>'),Ba=_('<div class="assignment-header svelte-ypgicr"><div class="assignment-nav svelte-ypgicr"><button class="nav-btn svelte-ypgicr">â</button> <h3 class="assignment-title svelte-ypgicr"> </h3> <button class="nav-btn svelte-ypgicr">â</button></div> <!></div> <div class="tasks-section svelte-ypgicr"><!></div> <!> <!>',1),qa=_('<p class="no-assignments svelte-ypgicr">No assignments available.</p>'),Ja=_(`<div class="celebration-overlay svelte-ypgicr"><!> <div class="celebration-page svelte-ypgicr"><div class="celebration-icon svelte-ypgicr"><svg width="64" height="64" viewBox="0 0 64 64" fill="none"><circle cx="32" cy="32" r="30" stroke="var(--vm-dark-seafoam)" stroke-width="4"></circle><path d="M20 32l8 8 16-16" stroke="var(--vm-dark-seafoam)" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"></path></svg></div> <h3 class="celebration-title svelte-ypgicr">All Assignments Complete!</h3> <p class="celebration-text svelte-ypgicr">Amazing work â you've finished every assignment. Keep your verbs sharp by switching to <strong>Review</strong> and completing your mastery questions.</p> <div class="celebration-review-hint svelte-ypgicr"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="svelte-ypgicr"><path d="M12 2v4M12 18v4M4.93 4.93l2.83 2.83M16.24 16.24l2.83 2.83M2 12h4M18 12h4M4.93 19.07l2.83-2.83M16.24 7.76l2.83-2.83"></path></svg> <span>Head to the <strong>Review</strong> tab to keep your mastery streak going!</span></div></div> <div class="browse-completed svelte-ypgicr"><button class="browse-btn svelte-ypgicr">Browse completed assignments</button></div></div>`),Ya=_('<div class="student-assignments-card svelte-ypgicr"><!> <!></div>');function Qa(R,t){We(t,!0);const v=()=>Ue(ta,"$isSubscribed",o),[o,m]=yt();let b=L(0),p=L(null);function h(){return`vm_stickyAssignment_${t.instructorClass.classId}`}function g(){try{const f=sessionStorage.getItem(h());if(f==null)return null;const c=parseInt(f,10);return Number.isFinite(c)?c:null}catch{return null}}function y(f){try{const c=h();f==null?sessionStorage.removeItem(c):sessionStorage.setItem(c,String(f))}catch{}}ht(()=>{l(p,g(),!0);const f=Ve.onChange(()=>{Rt(b)}),c=jt.onChange(()=>{Rt(b)});return()=>{f(),c()}});let q=M(()=>{if(e(b),!t.curriculum.assignments||t.curriculum.assignments.length===0)return-1;for(let f=0;f<t.curriculum.assignments.length;f++)if(!Ke.isAssignmentCompleted(t.curriculum.assignments[f]))return f;return-1}),J=M(()=>t.curriculum.assignments&&t.curriculum.assignments.length>0&&e(q)===-1),C=L(!0),E=L(!1),G=M(()=>(e(b),e(T)&&!Ke.isAssignmentCompleted(e(T))));function j(){if(!v()){va.open(ga.Other);return}l(E,!0)}let Y=L(void 0);rt(()=>{if(e(J)&&e(C)&&e(Y)){let c=function(){if(f||!e(Y))return;const w=.15+Math.random()*.7,u=.1+Math.random()*.5;e(Y).trigger(w,u);const r=400+Math.random()*600;setTimeout(c,r)},f=!1;return c(),setTimeout(()=>{f||e(Y)?.trigger(.7,.2)},150),setTimeout(()=>{f||e(Y)?.trigger(.3,.3)},300),()=>{f=!0}}});let Q=M(()=>e(p)==null?-1:(t.curriculum.assignments??[]).findIndex(c=>c.assignmentNumber===e(p))),V=M(()=>{e(b);const f=t.curriculum.assignments??[];return e(Q)>=0&&(!Ke.isAssignmentCompleted(f[e(Q)])||e(q)===-1)?e(Q):e(q)>=0?e(q):0});rt(()=>{if(e(b),e(p)==null)return;if(e(Q)<0){l(p,null),y(null);return}const f=t.curriculum.assignments??[];Ke.isAssignmentCompleted(f[e(Q)])&&e(q)!==-1&&(l(p,null),y(null))});function P(f){const c=t.curriculum.assignments?.[f];c&&(l(p,c.assignmentNumber,!0),y(c.assignmentNumber))}let T=M(()=>!t.curriculum.assignments||t.curriculum.assignments.length===0?null:t.curriculum.assignments[e(V)]),H=M(()=>e(T)?e(T).getTasks():[]),F=M(()=>!e(T)||!t.instructorClass.assignmentDueDates?null:t.instructorClass.assignmentDueDates.find(f=>f.assignmentNumber===e(T).assignmentNumber));function O(f){return new Date(f).toLocaleDateString("en-US",{weekday:"short",month:"short",day:"numeric",hour:"numeric",minute:"2-digit"})}function U(){e(V)>0&&P(e(V)-1)}function re(){t.curriculum.assignments&&e(V)<t.curriculum.assignments.length-1&&P(e(V)+1)}var K=Ya(),ue=a(K);{var de=f=>{var c=Ba(),w=se(c),u=a(w),r=a(u);r.__click=U;var d=n(r,2),k=a(d,!0);s(d);var x=n(d,2);x.__click=re,s(u);var D=n(u,2);{var Z=W=>{var ee=Va(),ye=a(ee);s(ee),B(Se=>I(ye,`Due: ${Se??""}`),[()=>O(e(F).dateTimeString)]),i(W,ee)};S(D,W=>{e(F)&&W(Z)})}s(w);var X=n(w,2),ve=a(X);ia(ve,{get tasks(){return e(H)},showHeader:!0,get onViewLesson(){return t.onViewLesson},progressTextSuffix:"of assignment completed."}),s(X);var ae=n(X,2);{var Re=W=>{var ee=Wa(),ye=a(ee);Ze(ye,{onclick:j,pill:!0,children:(Se,le)=>{Te();var te=ie("TEST OUT OF ASSIGNMENT");i(Se,te)},$$slots:{default:!0}}),s(ee),i(W,ee)};S(ae,W=>{e(G)&&W(Re)})}var $=n(ae,2);Ga($,{get isOpen(){return e(E)},onClose:()=>l(E,!1),get assignment(){return e(T)}}),B(()=>{r.disabled=e(V)===0,I(k,e(T).assignmentName),x.disabled=!t.curriculum.assignments||e(V)===t.curriculum.assignments.length-1}),i(f,c)},we=f=>{var c=qa();i(f,c)};S(ue,f=>{e(T)?f(de):f(we,!1)})}var Ae=n(ue,2);{var he=f=>{var c=Ja(),w=a(c);zt(la(w,{id:"assignments-complete-fireworks",quantity:30}),d=>l(Y,d,!0),()=>e(Y));var u=n(w,4),r=a(u);r.__click=()=>{l(C,!1),P(0)},s(u),s(c),i(f,c)};S(Ae,f=>{e(J)&&e(C)&&f(he)})}s(K),i(R,K),Be(),m()}Ye(["click"]);var Ha=_('<div class="panel-slide svelte-1cdrpp8"><!></div>'),Ka=_('<p class="leave-error svelte-1cdrpp8"> </p>
1'),Xa=_('<div class="modal-overlay svelte-1cdrpp8" role="presentation"><div class="modal-card svelte-1cdrpp8" role="dialog" aria-modal="true" aria-labelledby="leave-modal-title" tabindex="-1"><h3 id="leave-modal-title" class="svelte-1cdrpp8">Leave Class?</h3> <p class="modal-warning svelte-1cdrpp8">Are you sure you want to leave <strong> </strong>?</p> <p class="modal-instruction svelte-1cdrpp8">To confirm, enter the class code: <strong> </strong></p> <input type="text" class="confirm-input svelte-1cdrpp8" placeholder="Enter class code"/> <!> <div class="modal-actions svelte-1cdrpp8"><div class="modal-btn-wrap svelte-1cdrpp8"><!></div> <div class="modal-btn-wrap svelte-1cdrpp8"><!></div></div></div></div>'),Za=_('<span class="detail svelte-1cdrpp8"><svg class="icon svelte-1cdrpp8" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="3" y="4" width="18" height="18" rx="2" ry="2"></rect><line x1="16" y1="2" x2="16" y2="6"></line><line x1="8" y1="2" x2="8" y2="6"></line><line x1="3" y1="10" x2="21" y2="10"></line></svg> </span>'),$a=_('<p class="curriculum-description svelte-1cdrpp8"> </p>'),er=_('<div class="mastery-tooltip svelte-1cdrpp8" role="tooltip"><div class="tooltip-content svelte-1cdrpp8">Each verb form has a mastery level from 1-5. Your percentage is calculated by dividing your total mastery points by the maximum possible (5 points à number of verb forms).</div></div>'),tr=_('<div class="stats-overlay svelte-1cdrpp8" role="presentation"><div class="stats-overlay-card svelte-1cdrpp8" role="dialog" aria-modal="true" aria-label="Class Stats" tabindex="-1"><!> <div class="class-header svelte-1cdrpp8"><div class="class-info"><h2 class="class-name svelte-1cdrpp8"> </h2> <div class="class-details svelte-1cdrpp8"><span class="detail svelte-1cdrpp8"><svg class="icon svelte-1cdrpp8" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M12 14l9-5-9-5-9 5 9 5z"></path><path d="M12 14l6.16-3.422a12.083 12.083 0 01.665 6.479A11.952 11.952 0 0012 20.055a11.952 11.952 0 00-6.824-2.998 12.078 12.078 0 01.665-6.479L12 14z"></path></svg> </span> <!></div></div> <div class="class-code-container svelte-1cdrpp8"><div class="class-code svelte-1cdrpp8"><span class="code-label svelte-1cdrpp8">Class Code</span> <span class="code-value svelte-1cdrpp8"> </span></div></div></div> <div class="divider svelte-1cdrpp8"></div> <div class="curriculum-section svelte-1cdrpp8"><h3 class="svelte-1cdrpp8"> </h3> <!> <div class="progress-bars svelte-1cdrpp8"><div class="progress-item svelte-1cdrpp8"><div class="progress-label svelte-1cdrpp8"><span>Assignments</span> <span class="progress-count svelte-1cdrpp8"> </span></div> <!></div> <div class="progress-item svelte-1cdrpp8"><div class="progress-label svelte-1cdrpp8"><span>Verb Conjugations Learned</span> <span class="progress-count svelte-1cdrpp8"> </span></div> <!></div> <div class="progress-item svelte-1cdrpp8"><div class="progress-label svelte-1cdrpp8"><span>Lessons Read</span> <span class="progress-count svelte-1cdrpp8"> </span></div> <!></div> <div class="progress-item mastery-item svelte-1cdrpp8"><div class="progress-label svelte-1cdrpp8"><span class="mastery-label-with-tooltip svelte-1cdrpp8" role="button" tabindex="0" aria-label="Curriculum Mastery - hover for explanation">Curriculum Mastery <svg class="info-icon svelte-1cdrpp8" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="12" cy="12" r="10"></circle><path d="M12 16v-4"></path><path d="M12 8h.01"></path></svg></span> <span class="progress-count svelte-1cdrpp8"> </span></div> <!> <!></div></div></div> <div class="stats-footer svelte-1cdrpp8"><button class="leave-class-btn svelte-1cdrpp8">Leave Class</button></div></div></div>'),sr=_('<div class="student-in-class-dashboard svelte-1cdrpp8"><div class="panel-viewport svelte-1cdrpp8"><!></div></div> <!> <!> <!>',1);function ar(R,t){We(t,!0);const v=()=>Ue(Ws,"$userInventoryStore",b),o=()=>Ue(cs,"$activeReviewFilter",b),m=()=>Ue(ft,"$learnerDataStore",b),[b,p]=yt(),h=Ft();let g=Lt(t,"activePanel",15,"learn"),y=Lt(t,"availableReviews",15,0),q=Lt(t,"masteryPercentage",15,0),J=L(lt(It()));rt(()=>{v()?.inventory?.enabledGrottoItemIds,l(J,It(y()),!0)});let C=L(1);function E(A,{direction:z=1,duration:N=300,delay:ne=0,easing:ce=rs}){return{duration:N,delay:ne,easing:ce,css:me=>`transform: translateX(${(1-me)*105*z}%)`}}function G(){g()==="learn"?(l(C,1),g("review")):(l(C,-1),g("learn")),Y(g()==="review")}function j(){return`vm_lastTappedMastery_${t.instructorClass.classId}`}function Y(A){try{localStorage.setItem(j(),A?"1":"0")}catch{}}function Q(){try{return localStorage.getItem(j())==="1"}catch{return!1}}function V(){if(y()>0){const z=(t.instructorClass.masteryReviewsRequirement||Xt.Default)!==Xt.Optional,N=Q();if(z||N)return l(C,1),g("review"),!0}else g()==="review"&&(l(C,-1),g("learn"));return!1}async function P(){try{y(await us.calculateCurrentMasteryReviews()),l(J,It(y()),!0)}catch(A){ke("[StudentInClassDashboard] Failed to calculate available reviews:",A)}}rt(()=>{o(),m().initialized&&P().then(()=>V())}),ht(()=>{P().then(()=>{V()});const A=vs.onSessionEnded(async()=>{await P(),V()});return()=>{A()}});let T=L(!1);function H(){l(T,!0)}function F(){l(T,!1)}let O=L(!1),U=L(!1),re,K=L(""),ue=L(!1),de=L("");function we(A){return A.toLocaleDateString("en-US",{month:"short",day:"numeric",year:"numeric"})}let Ae=M(()=>
1{if(!t.instructorClass.term)return"";const A=we(new Date(t.instructorClass.term.startDate)),z=we(new Date(t.instructorClass.term.endDate));return`${A} - ${z}`}),he=M(()=>t.curriculum.assignments?.length??0),f=M(()=>e(K).toUpperCase()===t.instructorClass.classId.toUpperCase()),c=M(()=>t.curriculum.applicableVerbConjugations?.length??0),w=M(()=>t.curriculum.applicableVerbConjugations?t.curriculum.applicableVerbConjugations.filter(A=>Ve.isVerbConjugationLearned(A.infinitive,A.conjugationType)).length:0),u=M(()=>t.curriculum.assignments?t.curriculum.assignments.filter(A=>Ke.isAssignmentCompleted(A)).length:0),r=M(()=>{if(!t.curriculum.assignments)return[];const A=new Set;for(const z of t.curriculum.assignments)for(const N of z.lessonIds)A.add(N);return Array.from(A)}),d=M(()=>e(r).length),k=M(()=>{let A=0;for(const z of e(r)){const N=jt.getLessonStatus(z);N&&N.writtenLessonCompletion>=1&&A++}return A}),x=M(()=>Ve.getMasteryRatioForCurrentCurriculum()),D=M(()=>e(x)*100);rt(()=>{q(e(D))});function Z(){l(O,!0),l(K,""),l(de,"")}function X(){l(O,!1),l(K,""),l(de,""),l(ue,!1)}function ve(){if(!e(f)){l(de,"Code does not match. Please enter the correct class code.");return}l(ue,!0),l(de,""),h("leaveClass")}async function ae(){await Nt.tryStartMasteryReview()}function Re(){clearTimeout(re),re=setTimeout(()=>{l(U,!0)},200)}function $(){clearTimeout(re),re=setTimeout(()=>{l(U,!1)},100)}let W=L(!1),ee=L(""),ye=L(""),Se=L("");function le(A,z){l(ee,z,!0),l(ye,A,!0),l(Se,ra(ds.targetLang),!0),l(W,!0)}function te(){l(W,!1)}var oe={switchPanel:G,openClassStats:H},Me=sr(),xe=se(Me),fe=a(xe),_e=a(fe);sa(_e,g,A=>{var z=Ha(),N=a(z);{var ne=me=>{Qa(me,{get instructorClass(){return t.instructorClass},get curriculum(){return t.curriculum},onViewLesson:le})},ce=me=>{Ys(me,{get boxes(){return e(J)},get availableReviews(){return y()},onStartReview:ae,onMasteryReviewsDue:P})};S(N,me=>{g()==="learn"?me(ne):me(ce,!1)})}s(z),as(1,z,()=>E,()=>({direction:e(C),duration:350,delay:50,easing:rs})),as(2,z,()=>E,()=>({direction:-e(C),duration:300,easing:na})),i(A,z)}),s(fe),s(xe);var be=n(xe,2);{var Ee=A=>{var z=Xa();z.__click=X;var N=a(z);N.__click=pe=>pe.stopPropagation();var ne=n(a(N),2),ce=n(a(ne)),me=a(ce,!0);s(ce),Te(),s(ne);var Fe=n(ne,2),ot=n(a(Fe)),ct=a(ot,!0);s(ot),s(Fe);var Ge=n(Fe,2);ms(Ge);var ut=n(Ge,2);{var bt=pe=>{var ze=Ka(),He=a(ze,!0);s(ze),B(()=>I(He,e(de))),i(pe,ze)};S(ut,pe=>{e(de)&&pe(bt)})}var dt=n(ut,2),Qe=a(dt),vt=a(Qe);Ze(vt,{onclick:X,get disabled(){return e(ue)},children:(pe,ze)=>{Te();var He=ie("Cancel");i(pe,He)},$$slots:{default:!0}}),s(Qe);var $e=n(Qe,2),Ct=a($e);{let pe=M(()=>!e(f)||e(ue));it(Ct,{onclick:ve,get disabled(){return e(pe)},children:(ze,He)=>{Te();var et=ie();B(()=>I(et,e(ue)?"Leaving...":"Leave Class")),i(ze,et)},$$slots:{default:!0}})}s($e),s(dt),s(N),s(z),B(pe=>{I(me,pe),I(ct,t.instructorClass.classId),Ge.disabled=e(ue)},[()=>t.instructorClass.getClassNameWithSection()]),aa(Ge,()=>e(K),pe=>l(K,pe)),i(A,z)};S(be,A=>{e(O)&&A(Ee)})}var Le=n(be,2);{var Ne=A=>{var z=tr();z.__click=F;var N=a(z);N.__click=Ce=>Ce.stopPropagation();var ne=a(N);Gt(ne,{onclick:F,class:"modal-close-btn"});var ce=n(ne,2),me=a(ce),Fe=a(me),ot=a(Fe,!0);s(Fe);var ct=n(Fe,2),Ge=a(ct),ut=n(a(Ge));s(Ge);var bt=n(Ge,2);{var dt=Ce=>{var Pe=Za(),tt=n(a(Pe));s(Pe),B(()=>I(tt,` ${e(Ae)??""}`)),i(Ce,Pe)};S(bt,Ce=>{e(Ae)&&Ce(dt)})}s(ct),s(me);
1var Qe=n(me,2),vt=a(Qe),$e=n(a(vt),2),Ct=a($e,!0);s($e),s(vt),s(Qe),s(ce);var pe=n(ce,4),ze=a(pe),He=a(ze);s(ze);var et=n(ze,2);{var fs=Ce=>{var Pe=$a(),tt=a(Pe,!0);s(Pe),B(()=>I(tt,t.curriculum.description)),i(Ce,Pe)};S(et,Ce=>{t.curriculum.description&&Ce(fs)})}var Vt=n(et,2),wt=a(Vt),St=a(wt),Wt=n(a(St),2),ps=a(Wt);s(Wt),s(St);var hs=n(St,2);gt(hs,{get currentValue(){return e(u)},get maxValue(){return e(he)},height:"8px",showText:!1}),s(wt);var xt=n(wt,2),kt=a(xt),Bt=n(a(kt),2),ys=a(Bt);s(Bt),s(kt);var _s=n(kt,2);gt(_s,{get currentValue(){return e(w)},get maxValue(){return e(c)},height:"8px",showText:!1}),s(xt);var At=n(xt,2),Mt=a(At),qt=n(a(Mt),2),bs=a(qt);s(qt),s(Mt);var Cs=n(Mt,2);gt(Cs,{get currentValue(){return e(k)},get maxValue(){return e(d)},height:"8px",showText:!1}),s(At);var Jt=n(At,2),Pt=a(Jt),Tt=a(Pt),Yt=n(Tt,2),ws=a(Yt);s(Yt),s(Pt);var Qt=n(Pt,2);gt(Qt,{get percentage(){return e(D)},height:"8px",showText:!1});var Ss=n(Qt,2);{var xs=Ce=>{var Pe=er();st("mouseenter",Pe,Re),st("mouseleave",Pe,$),i(Ce,Pe)};S(Ss,Ce=>{e(U)&&Ce(xs)})}s(Jt),s(Vt),s(pe);var Ht=n(pe,2),ks=a(Ht);ks.__click=()=>{F(),Z()},s(Ht),s(N),s(z),B((Ce,Pe,tt)=>{I(ot,Ce),I(ut,` ${Pe??""}`),I(Ct,t.instructorClass.classId),I(He,`Curriculum: ${(t.curriculum.title||"Unnamed Curriculum")??""}`),I(ps,`${e(u)??""}/${e(he)??""}`),I(ys,`${e(w)??""}/${e(c)??""}`),I(bs,`${e(k)??""}/${e(d)??""}`),I(ws,`${tt??""}%`)},[()=>t.instructorClass.getClassNameWithSection(),()=>t.instructorClass.language?t.instructorClass.language.charAt(0).toUpperCase()+t.instructorClass.language.slice(1):"Language",()=>e(D).toFixed(1)]),st("mouseenter",Tt,Re),st("mouseleave",Tt,$),i(A,z)};S(Le,A=>{e(T)&&A(Ne)})}var Oe=n(Le,2);ma(Oe,{get isOpen(){return e(W)},get title(){return e(ee)},get lessonSlug(){return e(ye)},get coursePrefix(){return e(Se)},onClose:te}),i(R,Me);var De=Be(oe);return p(),De}Ye(["click"]);var rr=_('<div class="spinner svelte-11wpuln"></div>'),nr=Ms('<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><polyline points="20 6 9 17 4 12"></polyline></svg>'),ir=_('<div class="modal-overlay svelte-11wpuln"><div class="card svelte-11wpuln" role="dialog" aria-modal="true" aria-labelledby="message-title"><div class="card-content svelte-11wpuln"><div class="message-icon svelte-11wpuln"><svg width="48" height="48" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5"><path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"></path></svg></div> <h2 id="message-title" class="message-title svelte-11wpuln"> </h2> <div class="message-body svelte-11wpuln"> </div></div> <footer class="card-footer svelte-11wpuln"><!></footer></div></div>');function lr(R,t){We(t,!0);const v=Ft();let o=L(!1);async function m(){l(o,!0),await Xe.markAsRead(t.message),Xe.getNextUnreadMessage()||v("allMessagesRead"),l(o,!1)}var b=ir(),p=a(b),h=a(p),g=n(a(h),2),y=a(g,!0);s(g);var q=n(g,2),J=a(q,!0);s(q),s(h);var C=n(h,2),E=a(C);it(E,{onclick:m,get disabled(){return e(o)},icon:j=>{var Y=Ie(),Q=se(Y);{var V=T=>{var H=rr();i(T,H)},P=T=>{var H=nr();i(T,H)};S(Q,T=>{e(o)?T(V):T(P,!1)})}i(j,Y)},children:(j,Y)=>{Te();var Q=ie("Got it!");i(j,Q)},$$slots:{icon:!0,default:!0}}),s(C),s(p),s(b),B(()=>{I(y,t.message.title),I(J,t.message.body)}),i(R,b),Be()}var or=_('<div class="state-container svelte-1d68jao"><div class="thank-you-icon svelte-1d68jao"><!></div> <p class="thank-you-text svelte-1d68jao"> </p></div>'),cr=_('<div class="particle svelte-1d68jao"></div>'),ur=_('<div class="particle-anchor svelte-1d68jao"></div>'),dr=_('<img class="revealed-item-image svelte-1d68jao"/> <p class="item-name svelte-1d68jao"> </p>',1),vr=_('<p class="tap-hint svelte-1d68jao">Tap to open!</p>'),gr=_('<button class="gift-box-btn svelte-1d68jao" aria-label="Tap to open gift"><!></button> <!>',1),mr=_('<div class="error-banner svelte-1d68jao"> </div>'),fr=_('<button class="gracias-btn svelte-1d68jao"> </button> <button class="close-btn-text svelte-1d68jao">Close</button>',1),pr=_('<div class="state-container svelte-1d68jao"><h3 class="heading svelte-1d68jao"><!></h3> <div class="center-area svelte-1d68jao"><!> <!></div> <!> <!></div>
1'),hr=_('<div class="claim-overlay svelte-1d68jao"><div class="claim-card svelte-1d68jao"><!> <!></div></div>');function yr(R,t){We(t,!0);const v=ds.targetLang===_a.FRENCH?"Merci":"Gracias";let o=L("unopened"),m=L(null),b=L(!1),p=L(lt([]));const h=M(()=>pa(t.gift.shopItemId)),g=M(()=>`${t.gift.senderUserProfile.userFirstName} ${t.gift.senderUserProfile.userLastName}`.trim()),y=["var(--vm-azure-skies)","var(--vm-bright-seafoam)","var(--vm-castaway)","var(--vm-coral)","var(--vm-oro)"];function q(){l(p,Array.from({length:30},(T,H)=>({id:H,angle:Math.PI*2*H/30+(Math.random()-.5)*.5,distance:60+Math.random()*80,size:4+Math.random()*6,color:y[Math.floor(Math.random()*y.length)]})),!0)}async function J(){if(!(e(o)!=="unopened"||!e(h))){l(m,null),l(o,"revealed"),is.playSfx("party_popper.mp3"),setTimeout(()=>is.playSfx("gift_open.mp3"),400),q();try{await gs.claimGift(t.gift,e(h)),t.onClaimed?.()}catch(P){ke("[ClaimShopGiftCard] Claim failed:",P),l(m,P instanceof Error?P.message:"Failed to claim gift.",!0)}}}async function C(){if(e(h)){l(b,!0);try{const P=ha(t.gift.recipientUserProfile.userId,t.gift.senderUserProfile.userId,t.gift.recipientUserProfile.userFirstName,t.gift.senderUserProfile.userFirstName,e(h).displayName);await ya.sendMessage(P),l(o,"thank-you"),setTimeout(t.onClose,1200)}catch(P){ke("[ClaimShopGiftCard] Thank you failed:",P),t.onClose()}finally{l(b,!1)}}}var E=hr();E.__click=function(...P){t.onClose?.apply(this,P)},E.__keydown=P=>P.key==="Escape"&&t.onClose();var G=a(E);G.__click=P=>P.stopPropagation();var j=a(G);Gt(j,{get onclick(){return t.onClose}});var Y=n(j,2);{var Q=P=>{var T=or(),H=a(T),F=a(H);ts(F,{get svg(){return ss},class:"thank-you-gift-svg"}),s(H);var O=n(H,2),U=a(O,!0);s(O),s(T),B(()=>I(U,v==="Gracias"?"¡Gracias sent!":"Merci sent!")),i(P,T)},V=P=>{var T=pr(),H=a(T),F=a(H);{var O=u=>{var r=ie();B(()=>I(r,`${e(g)??""} sent you a ${e(h)?.displayName??"gift"??""}!`)),i(u,r)},U=u=>{var r=ie();B(()=>I(r,`${e(g)??""} sent you a gift!`)),i(u,r)};S(F,u=>{e(o)==="revealed"?u(O):u(U,!1)})}s(H);var re=n(H,2),K=a(re);{var ue=u=>{var r=ur();Ot(r,21,()=>e(p),d=>d.id,(d,k)=>{var x=cr();B((D,Z)=>fa(x,` 2 --px: ${D??""}px; 3 --py: ${Z??""}px; 4 --size: ${e(k).size??""}px; 5 --color: ${e(k).color??""}; 6 `),[()=>Math.cos(e(k).angle)*e(k).distance,()=>Math.sin(e(k).angle)*e(k).distance]),i(d,x)}),s(r),i(u,r)};S(K,u=>{e(p).length>0&&u(ue)})}var de=n(K,2);{var we=u=>{var r=Ie(),d=se(r);{var k=x=>{var D=dr(),Z=se(D),X=n(Z,2),ve=a(X,!0);s(X),B(()=>{Ut(Z,"src",e(h).shopSpriteUrl),Ut(Z,"alt",e(h).displayName),I(ve,e(h).displayName)}),i(x,D)};S(d,x=>{e(h)&&x(k)})}i(u,r)},Ae=u=>{var r=gr(),d=se(r);d.__click=J;var k=a(d);ts(k,{get svg(){return ss},class:"gift-box-icon"}),s(d);var x=n(d,2);{var D=Z=>{var X=vr();i(Z,X)};S(x,Z=>{e(o)==="unopened"&&Z(D)})}B(()=>d.disabled=!e(h)),i(u,r)};S(de,u=>{e(o)==="revealed"?u(we):u(Ae,!1)})}s(re);var he=n(re,2);{var f=u=>{var r=mr(),d=a(r,!0);s(r),B(()=>I(d,e(m))),i(u,r)};S(he,u=>{e(m)&&u(f)})}var c=n(he,2);{var w=u=>{var r=fr(),d=se(r);d.__click=C;var k=a(d,!0);s(d);var x=n(d,2);x.__click=function(...D){t.onClose?.apply(this,D)},B(D=>{d.disabled=e(b),I(k,D)},[()=>e(b)?"Sending...":`SAY ${v.toUpperCase()}`]),i(u,r)};S(c,u=>{e(o)==="revealed"&&u(w)})}s(T),i(P,T)};S(Y,P=>{e(o)==="thank-you"?P(Q):P(V,!1)})}s(G),s(E),i(R,E),Be()}Ye(["click","keydown"]);var _r=_('<div class="header-class-chip svelte-teumr0"><!></div> <div class="header-toggle-slot svelte-teumr0"><!></div>',1),br=_('<div class="error-state svelte-teumr0"><p class="error-message svelte-teumr0"> </p> <button class="retry-btn svelte-teumr0">Try Again</button></div>'),Cr=_('<div class="content svelte-teumr0"><!></div>'),wr=_("<!> <!> <!>",1);function Pn(R,t){We(t,!0);const v=()=>Ue(Ds,"$userProfileStore",g),o=()=>Ue(qe,"$studentDashboardStore",g),m=()=>Ue(js,"$nextUnreadMessage",g),b=()=>Ue(zs,"$hasUnreadMessages",g),p=()=>Ue(os,"$authStore",g),h=()=>Ue(Xe,"$userMessagesStore",g),[g,y]=yt();let q=M(()=>v().initialized&&v().profile?.hasValidUserEditableFields()),J=M(()=>o().state),C=M(()=>o().currentClass),E=M(()=>o().curriculum),G=M(()=>o().error),j=M(m),Y=M(()=>b()&&e(J)==="has-class"),Q=L(lt([])),V=M(()=>e(Q).length>0?e(Q)[0]:null),P=M(()=>e(V)!==null&&e(J)==="has-class"&&!e(Y)),T=L(void 0),H=L("learn"),F=L(0),O=L(0),U=L(lt([{label:"Finding your class",completed:!1},{label:"Loading curriculum",completed:!1},{label:"Loading your progress",completed:!1}]));ht(async()=>
6{if(!p()){Qs("/");return}Fs.setOnMessageReceivedCallback(()=>{Xe.refresh()}),window.addEventListener("focus",re),mt.isInitialized||await mt.initialize(p().userId),await K()}),As(()=>{typeof window<"u"&&window.removeEventListener("focus",re)});function re(){h().initialized&&Xe.refresh()}async function K(){if(p()?.userId){l(U,[{label:"Finding your class",completed:!1},{label:"Loading curriculum",completed:!1},{label:"Loading your progress",completed:!1}],!0),qe.setLoading();try{const r=await Kt.loadStudentClassData(p().userId);if(e(U)[0].completed=!0,l(U,[...e(U)],!0),r){if(r.curriculum.language!==Zt.selectedLanguage){await Zt.setSelectedLanguage(r.curriculum.language),window.location.reload();return}e(U)[1].completed=!0,l(U,[...e(U)],!0),await Ve.setCurrentCurriculum(r.curriculum),ft.setLearnerClass(r.instructorClass),e(U)[2].completed=!0,l(U,[...e(U)],!0),await ls.initialize(p().userId,r.instructorClass),await Xe.initialize(),gs.getUnclaimedGifts(p().userId).then(k=>{l(Q,k,!0)}).catch(k=>{console.warn("[StudentDashboard] Failed to fetch unclaimed gifts:",k)}),qe.setClassData(r.instructorClass,r.curriculum);const d=r.instructorClass.instructorUserProfile.userEmail;d&&ba.onStudentDashboardInited(d)}else l(U,e(U).map(d=>({...d,completed:!0})),!0),qe.setNoClass()}catch(r){ke("[StudentDashboard] Error loading student class:",r),qe.setError("Failed to load class data. Please try again.")}finally{Ls.markStageCompleted("page")}}}function ue(){K()}async function de(r){r.detail,await K()}async function we(){if(!(!p()?.userId||!e(C)))try{await Kt.leaveClass(p().userId,e(C).classId),ls.reset(),qe.clearClassData(),await Ve.setCurrentCurriculum(null),ft.setLearnerClass(null)}catch(r){ke("[StudentDashboard] Error leaving class:",r),qe.setError("Failed to leave class. Please try again.")}}var Ae=wr();Is("teumr0",r=>{Ps(()=>{Ts.title="Student Dashboard - VerbMaster"})});var he=se(Ae);Ks(he,{title:"Student Dashboard",subtitle:"Track your progress and complete assignments",headerExtra:d=>{var k=Ie(),x=se(k);{var D=Z=>{var X=_r(),ve=se(X),ae=a(ve);{let W=M(()=>e(C).getClassNameWithSection());xa(ae,{get className(){return e(W)},get masteryPercentage(){return e(O)},onclick:()=>e(T)?.openClassStats()})}s(ve);var Re=n(ve,2),$=a(Re);{let W=M(()=>e(H)==="review");Hs($,{leftLabel:"LEARN",rightLabel:"REVIEW",get isRight(){return e(W)},onclick:()=>e(T)?.switchPanel(),get rightBadgeCount(){return e(F)}})}s(Re),i(Z,X)};S(x,Z=>{e(J)==="has-class"&&e(C)&&Z(D)})}i(d,k)},children:(d,k)=>{var x=Ie(),D=se(x);{var Z=ve=>{zt(ar(ve,{get instructorClass(){return e(C)},get curriculum(){return e(E)},get activePanel(){return e(H)},set activePanel(ae){l(H,ae,!0)},get availableReviews(){return e(F)},set availableReviews(ae){l(F,ae,!0)},get masteryPercentage(){return e(O)},set masteryPercentage(ae){l(O,ae,!0)},$$events:{leaveClass:we}}),ae=>l(T,ae,!0),()=>e(T))},X=ve=>{var ae=Cr(),Re=a(ae);{var $=ee=>{ns(ee,{title:"Loading your data...",steps:[{label:"Loading profile",completed:!1}]})},W=ee=>{var ye=Ie(),Se=se(ye);{var le=oe=>{Vs(oe,{message:"To join an instructor's class, you'll need to create a user profile so they can see who you are.",mode:"inline",$$events:{profileSaved:ue}})},te=oe=>{var Me=Ie(),xe=se(Me);{var fe=be=>{ns(be,{title:"Loading your class...",get steps(){return e(U)}})},_e=be=>{var Ee=Ie(),Le=se(Ee);{var Ne=De=>{var A=br(),z=a(A),N=a(z,!0);s(z);var ne=n(z,2);ne.__click=K,s(A),B(()=>I(N,e(G))),i(De,A)},Oe=De=>{Na(De,{$$events:{joinClassSucceeded:de}})};S(Le,De=>{e(J)==="error"?De(Ne):De(Oe,!1)},!0)}i(be,Ee)};S(xe,be=>{e(J)==="loading"?be(fe):be(_e,!1)},!0)}i(oe,Me)};S(Se,oe=>{e(q)?oe(te,!1):oe(le)},!0)}i(ee,ye)};S(Re,ee=>{v().initialized?ee(W,!1):ee($)})}s(ae),i(ve,ae)};S(D,ve=>{e(J)==="has-class"&&e(C)&&e(E)?ve(Z):ve(X,!1)})}i(d,x)}});var f=n(he,2);{var c=r=>{lr(r,{get message(){return e(j)},$$events:{allMessagesRead:()=>{}}})};S(f,r=>{e(Y)&&e(j)&&r(c)})}var w=n(f,2);{var u=r=>{yr(r,{get gift(){return e(V)},onClose:()=>{l(Q,e(Q).slice(1),!0)}})};S(w,r=>{e(P)&&e(V)&&r(u)})}i(R,Ae),Be(),y()}Ye(["click"]);export{Pn as component};
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.