github-actions[bot] commited on
Commit
bec7a68
Β·
1 Parent(s): 9006d8b

πŸš€ Auto-deploy frontend from GitHub (b43263f)

Browse files
This view is limited to 50 files because it contains too many changes. Β  See raw diff
Files changed (50) hide show
  1. assets/{AIChatPage-C4mSd8lQ.js β†’ AIChatPage-CzCeFujm.js} +2 -2
  2. assets/{AdminDashboard-f0ufScS3.js β†’ AdminDashboard-BmyikugA.js} +1 -1
  3. assets/{AvatarShop-yzXUOLqd.js β†’ AvatarShop-BirEYu2M.js} +1 -1
  4. assets/{ChatMarkdown-DLD56_rz.js β†’ ChatMarkdown-B34PtYCE.js} +1 -1
  5. assets/{CompetencyRadarChart-CeLqkQBE.js β†’ CompetencyRadarChart-BfcP7xrw.js} +1 -1
  6. assets/{CompositeAvatar-BFyEBxkG.js β†’ CompositeAvatar-DMpjm5UY.js} +1 -1
  7. assets/{ConfirmModal-BGmRIqeR.js β†’ ConfirmModal-DGrnpObD.js} +1 -1
  8. assets/{DashboardAvatar-C3sK59xb.js β†’ DashboardAvatar-CHVNq8nF.js} +1 -1
  9. assets/{DiagnosticAssessmentModal-BMXWtGqV.js β†’ DiagnosticAssessmentModal-C541tkg_.js} +1 -1
  10. assets/{FloatingAITutor-CEXAW82N.js β†’ FloatingAITutor-DkH3KrR1.js} +3 -3
  11. assets/{GradesPage-8xU1oSB9.js β†’ GradesPage-m1qiGDtC.js} +1 -1
  12. assets/{HeroBanner-DGLaMkjC.js β†’ HeroBanner-BdiQHNd9.js} +3 -3
  13. assets/{LeaderboardPage-B2UR3owG.js β†’ LeaderboardPage-jsrBZaI7.js} +1 -1
  14. assets/{LearningPath-B_WBYNl3.js β†’ LearningPath-B_MkUEk2.js} +1 -1
  15. assets/{LoginPage-DPeZFipP.js β†’ LoginPage-mXOi2OPh.js} +1 -1
  16. assets/{LogoutActionButton-1LrBiz6V.js β†’ LogoutActionButton-FS5OGZjL.js} +1 -1
  17. assets/{MathAnswerInput-t95Hzg9C.js β†’ MathAnswerInput-DNG5LFL4.js} +1 -1
  18. assets/{ModuleFolderCard-Bja5J9kH.js β†’ ModuleFolderCard-CoKTURyN.js} +1 -1
  19. assets/{ModulesPage-BZZ-FCnY.js β†’ ModulesPage-y4YivjOd.js} +1 -1
  20. assets/{NotificationCenter-DKdxi7VY.js β†’ NotificationCenter-DGhehaGL.js} +1 -1
  21. assets/{ProfileModal-CgIiffSP.js β†’ ProfileModal-D3hk8uuj.js} +1 -1
  22. assets/QuizBattlePage-BbGkD7O9.js +21 -0
  23. assets/QuizBattlePage-eGdKu290.js +0 -21
  24. assets/{RewardsModal-Ligjd-Ky.js β†’ RewardsModal-HRePzoUo.js} +1 -1
  25. assets/{RightSidebar-uaRo-cl-.js β†’ RightSidebar-Dfek3lmU.js} +1 -1
  26. assets/{ScientificCalculator-3ZZoXfU9.js β†’ ScientificCalculator-wlhyNBDf.js} +1 -1
  27. assets/{SearchBar-BsWL3-M7.js β†’ SearchBar-ldiC0sUv.js} +1 -1
  28. assets/{SettingsModal-azrtAtw2.js β†’ SettingsModal-C-nK3nbS.js} +1 -1
  29. assets/{Sidebar-ZOTUQCrB.js β†’ Sidebar-xBQ3Qnyw.js} +1 -1
  30. assets/{SupplementalBanner-BKiLrsCL.js β†’ SupplementalBanner-dklPrubU.js} +1 -1
  31. assets/{TeacherDashboard-C_E8X2zT.js β†’ TeacherDashboard-D8avlB5m.js} +1 -1
  32. assets/{XPNotification-Bo4a14zB.js β†’ XPNotification-4si_K5GL.js} +1 -1
  33. assets/{apiService-BcE-mX0v.js β†’ apiService-axx1LHMk.js} +1 -1
  34. assets/{automationService-DCIX9fmr.js β†’ automationService-DNyauqGd.js} +1 -1
  35. assets/{award-UT1_i9UI.js β†’ award-oJTbc9W5.js} +1 -1
  36. assets/{bell-CdZB167e.js β†’ bell-CbSbac2W.js} +1 -1
  37. assets/{book-open-B5Fr9j0O.js β†’ book-open-BH50GByv.js} +1 -1
  38. assets/{brain-D2SpSiL8.js β†’ brain-CPvGdgWE.js} +1 -1
  39. assets/{calendar-DOp6N-WM.js β†’ calendar-BJ8oE6yW.js} +1 -1
  40. assets/{chart-column-BSv3Tlcd.js β†’ chart-column-D5mAWcRx.js} +1 -1
  41. assets/{chatService-D3W4VTvs.js β†’ chatService-LsXGqjoV.js} +1 -1
  42. assets/{check-DF0M9ltT.js β†’ check-BACdUlFL.js} +1 -1
  43. assets/{chevron-right-CSxxBxL8.js β†’ chevron-right-COMox1Xb.js} +1 -1
  44. assets/{chevron-up-B14f4SwA.js β†’ chevron-up-Bfmq3Clw.js} +1 -1
  45. assets/{circle-alert-3TSiLPep.js β†’ circle-alert-CBefjicJ.js} +1 -1
  46. assets/{circle-check-big-CXPh4ph_.js β†’ circle-check-big-0Gzyt_f3.js} +1 -1
  47. assets/{circle-help-DWqFJv7Z.js β†’ circle-help-BmjHdT5a.js} +1 -1
  48. assets/{clock-TIVUqSxI.js β†’ clock-DUJO-a50.js} +1 -1
  49. assets/{download-C6KU0zMt.js β†’ download-PWUf0XJa.js} +1 -1
  50. assets/{eye-kYT3TKwH.js β†’ eye-DXdRafOv.js} +1 -1
assets/{AIChatPage-C4mSd8lQ.js β†’ AIChatPage-CzCeFujm.js} RENAMED
@@ -1,2 +1,2 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/apiService-BcE-mX0v.js","assets/index-DUxNDyEU.js","assets/vendor-react-Dexh7fmo.js","assets/vendor-firebase-auth-COrkgW0P.js","assets/vendor-firebase-core-DQ-pMjxd.js","assets/vendor-firebase-firestore-BML5nJHm.js","assets/vendor-firebase-storage-BOeKE_0n.js","assets/vendor-firebase-analytics-CCo6E2f7.js","assets/index-CR2i2gnI.css"])))=>i.map(i=>d[i]);
2
- import{y as B,_ as F,e as N,m as k}from"./index-DUxNDyEU.js";import{r,j as e}from"./vendor-react-Dexh7fmo.js";import{B as $}from"./button-BpeUVhBo.js";import{I as S}from"./input-DBkKXOmF.js";import z from"./ChatMarkdown-DLD56_rz.js";import{P as O}from"./plus-CCRS5c6k.js";import{S as H}from"./search-DxT5Gvzl.js";import{T as Y}from"./trash-2-DHSV6syb.js";import{S as D}from"./send-CmgfnqX2.js";import"./vendor-firebase-auth-COrkgW0P.js";import"./vendor-firebase-core-DQ-pMjxd.js";import"./vendor-firebase-firestore-BML5nJHm.js";import"./vendor-firebase-storage-BOeKE_0n.js";import"./vendor-firebase-analytics-CCo6E2f7.js";import"./vendor-radix-BRdei-zg.js";import"./clsx-B-dksMZM.js";import"./utils-BQQgILNW.js";import"./vendor-markdown-C5ikSDMA.js";const ie=()=>{const{sessions:C,activeSessionId:a,isLoading:l,loadingSessionId:I,setActiveSessionId:i,createNewSession:u,sendMessage:A,deleteSession:L,getActiveSession:T}=B(),[d,_]=r.useState(""),[o,f]=r.useState(""),[b,y]=r.useState(!1),c=r.useRef(null),x=r.useRef(!0),m=r.useRef(!1),n=T(),h=n?.messages||[],M=h.some(t=>t.sender==="ai"&&t.id.startsWith("stream-")),g=l&&a===I&&!M,j=(t="auto")=>{const s=c.current;s&&s.scrollTo({top:s.scrollHeight,behavior:t})},P=()=>{const t=c.current;return t?t.scrollHeight-t.scrollTop-t.clientHeight<=120:!0},E=()=>{x.current=P()};r.useEffect(()=>{F(async()=>{const{warmupBackend:t}=await import("./apiService-BcE-mX0v.js");return{warmupBackend:t}},__vite__mapDeps([0,1,2,3,4,5,6,7,8])).then(({warmupBackend:t})=>{t()}).catch(t=>{console.warn("AI chat warmup skipped:",t)})},[]),r.useEffect(()=>{if(!x.current)return;const t=window.requestAnimationFrame(()=>j("auto"));return()=>window.cancelAnimationFrame(t)},[h,g]),r.useEffect(()=>{x.current=!0,j("auto")},[a]);const v=async()=>{if(!(!o.trim()||l||b||m.current)){m.current=!0,y(!0);try{let t=a;t||(t=u(),i(t));const s=o.trim();f(""),await A(t,s)}finally{m.current=!1,y(!1)}}},w=()=>{const t=u();i(t)},R=(t,s)=>{s.stopPropagation(),L(t)},p=C.filter(t=>t.title.toLowerCase().includes(d.toLowerCase())||t.preview.toLowerCase().includes(d.toLowerCase()));return e.jsxs("div",{className:"h-full min-h-0 overflow-hidden flex gap-4 px-4 sm:px-6 xl:px-10 py-6",children:[e.jsxs("div",{className:"w-80 min-h-0 flex flex-col bg-[#f7f9fc] rounded-3xl border border-[#dde3eb] overflow-hidden",children:[e.jsxs("div",{className:"p-4 border-b border-[#dde3eb] flex-shrink-0",children:[e.jsxs("div",{className:"flex items-center gap-3 mb-4",children:[e.jsx("div",{className:"w-12 h-12 bg-gradient-to-r from-sky-600 to-sky-500 rounded-2xl flex items-center justify-center",children:e.jsx("img",{src:"/avatar/avatar_icon.png",alt:"AI Tutor",className:"w-10 h-10 object-contain drop-shadow-md"})}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-base font-bold font-display text-[#0a1628]",children:"L.O.L.I."}),e.jsx("p",{className:"text-[10px] text-[#5a6578]",children:"Your AI Math Tutor"})]})]}),e.jsxs("button",{onClick:w,className:"w-full bg-gradient-to-r from-sky-600 to-sky-500 hover:from-sky-700 hover:to-sky-600 text-white px-4 py-3 rounded-xl text-sm font-bold transition-all shadow-md hover:shadow-lg flex items-center justify-center gap-2",children:[e.jsx(O,{size:18}),"New Chat"]}),e.jsxs("div",{className:"relative mt-3",children:[e.jsx(H,{className:"absolute left-3 top-1/2 -translate-y-1/2 text-slate-500",size:14}),e.jsx(S,{type:"text",placeholder:"Search conversations...",value:d,onChange:t=>_(t.target.value),className:"w-full pl-9 pr-3 py-2 text-xs rounded-xl border-[#dde3eb] focus:border-sky-600 focus:ring-2 focus:ring-sky-100"})]})]}),e.jsxs("div",{className:"flex-1 overflow-y-auto p-3 space-y-2",children:[e.jsx("div",{className:"flex items-center justify-between mb-2 px-2",children:e.jsxs("span",{className:"text-xs font-bold text-[#5a6578]",children:[p.length," Conversations"]})}),e.jsx(N,{children:p.map(t=>e.jsxs(k.div,{initial:{opacity:0,x:-20},animate:{opacity:1,x:0},exit:{opacity:0,x:-20},onClick:()=>i(t.id),className:`group p-3 rounded-2xl cursor-pointer transition-all duration-200 border relative ${a===t.id?"bg-sky-50 border-sky-200 shadow-sm":"bg-[#edf1f7] border-transparent hover:bg-[#dde3eb] hover:border-[#dde3eb]"}`,children:[e.jsxs("div",{className:"flex items-start justify-between mb-1",children:[e.jsx("h3",{className:`text-xs font-bold mb-0.5 pr-6 line-clamp-1 ${a===t.id?"text-sky-700":"text-[#0a1628]"}`,children:t.title}),e.jsx("button",{onClick:s=>R(t.id,s),className:"absolute top-2 right-2 p-1.5 rounded-lg opacity-0 group-hover:opacity-100 hover:bg-red-100 text-slate-500 hover:text-red-600 transition-all",children:e.jsx(Y,{size:12})})]}),e.jsx("p",{className:"text-[10px] text-[#5a6578] mb-2 line-clamp-2",children:t.preview}),e.jsxs("div",{className:"flex items-center justify-between text-[10px]",children:[e.jsx("span",{className:"text-slate-500",children:t.date}),e.jsxs("span",{className:`px-2 py-0.5 rounded-full ${a===t.id?"bg-sky-100 text-sky-600":"bg-[#dde3eb] text-[#5a6578]"}`,children:[t.messageCount," msgs"]})]})]},t.id))}),p.length===0&&e.jsxs("div",{className:"text-center py-8",children:[e.jsx("img",{src:"/avatar/avatar_icon.png",alt:"AI Tutor",className:"w-16 h-16 object-contain mx-auto mb-2 opacity-60 drop-shadow-sm grayscale contrast-50"}),e.jsx("p",{className:"text-sm text-slate-500",children:"No conversations found"}),e.jsx("p",{className:"text-xs text-slate-500/60 mt-1",children:"Start a new chat!"})]})]})]}),e.jsx("div",{className:"flex-1 min-h-0 flex flex-col bg-[#f7f9fc] rounded-3xl border border-[#dde3eb] overflow-hidden",children:a?e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"p-4 border-b border-[#dde3eb] flex items-center justify-between flex-shrink-0",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"font-bold font-display text-[#0a1628]",children:n?.title}),e.jsx("p",{className:"text-xs text-[#5a6578]",children:n?.date})]}),e.jsx("div",{className:"flex items-center gap-2",children:n?.topics.map((t,s)=>e.jsx("span",{className:"px-3 py-1 bg-sky-50 text-sky-600 text-xs font-bold rounded-lg",children:t},s))})]}),e.jsxs("div",{ref:c,onScroll:E,className:"flex-1 overflow-y-auto overscroll-contain p-6 space-y-4 bg-[#edf1f7] min-h-0",children:[e.jsx(N,{children:h.map(t=>e.jsx(k.div,{initial:{opacity:0,y:10},animate:{opacity:1,y:0},className:`flex ${t.sender==="user"?"justify-end":"justify-start"}`,children:e.jsxs("div",{className:`max-w-[70%] rounded-2xl px-5 py-3 ${t.sender==="user"?"bg-gradient-to-r from-sky-600 to-sky-500 text-white":"bg-white text-[#0a1628] shadow-md border border-[#dde3eb]"}`,children:[t.sender==="user"?e.jsx("p",{className:"text-sm whitespace-pre-wrap leading-relaxed",children:t.text}):e.jsx(z,{children:t.text}),e.jsx("p",{className:`text-[10px] mt-1.5 ${t.sender==="user"?"text-sky-200":"text-slate-500"}`,children:t.timestamp})]})},t.id))}),g&&e.jsx("div",{className:"flex justify-start",children:e.jsx("div",{className:"bg-white text-[#0a1628] shadow-md border border-[#dde3eb] rounded-2xl px-5 py-3 max-w-[70%]",children:e.jsxs("div",{className:"flex gap-1",children:[e.jsx("div",{className:"w-2 h-2 bg-sky-400 rounded-full animate-bounce"}),e.jsx("div",{className:"w-2 h-2 bg-sky-400 rounded-full animate-bounce [animation-delay:150ms]"}),e.jsx("div",{className:"w-2 h-2 bg-sky-400 rounded-full animate-bounce [animation-delay:300ms]"})]})})})]}),e.jsx("div",{className:"p-4 border-t border-[#dde3eb] bg-white flex-shrink-0",children:e.jsxs("div",{className:"flex gap-3",children:[e.jsx(S,{type:"text",value:o,onChange:t=>f(t.target.value),onKeyPress:t=>t.key==="Enter"&&v(),placeholder:"Ask me anything about math...",className:"flex-1 px-5 py-3 rounded-xl border-[#dde3eb] focus:border-sky-600 focus:ring-2 focus:ring-sky-100 text-sm"}),e.jsx($,{onClick:v,disabled:!o.trim()||l||b,className:"px-6 bg-gradient-to-r from-sky-600 to-sky-500 hover:from-sky-700 hover:to-sky-600 text-white rounded-xl transition-all disabled:opacity-50 disabled:cursor-not-allowed shadow-md hover:shadow-lg",children:e.jsx(D,{size:18})})]})})]}):e.jsxs("div",{className:"flex-1 flex flex-col items-center justify-center p-8 text-center",children:[e.jsx("div",{className:"w-24 h-24 bg-gradient-to-r from-sky-100 to-cyan-100 rounded-3xl flex items-center justify-center mb-6",children:e.jsx("img",{src:"/avatar/avatar_icon.png",alt:"AI Tutor",className:"w-20 h-20 object-contain drop-shadow-lg"})}),e.jsx("h2",{className:"text-2xl font-bold font-display text-[#0a1628] mb-1",children:"Welcome to L.O.L.I."}),e.jsx("p",{className:"text-sky-600 text-sm font-bold tracking-wide uppercase mb-4",children:"Logical Operations & Learning Intelligence"}),e.jsx("p",{className:"text-[#5a6578] mb-6 max-w-md",children:"Your personal AI math tutor is here to help! Start a new conversation or select one from the sidebar."}),e.jsx("button",{onClick:w,className:"px-6 py-3 bg-gradient-to-r from-sky-600 to-sky-500 hover:from-sky-700 hover:to-sky-600 text-white rounded-xl font-bold shadow-lg hover:shadow-xl transition-all",children:"Start Your First Chat"}),e.jsx("div",{className:"mt-8 grid grid-cols-3 gap-4 max-w-2xl",children:["Algebra","Geometry","Calculus"].map(t=>e.jsxs("div",{className:"p-4 bg-[#edf1f7] rounded-xl border border-[#dde3eb]",children:[e.jsx("p",{className:"text-sm font-bold text-[#0a1628]",children:t}),e.jsxs("p",{className:"text-xs text-[#5a6578] mt-1",children:["Get help with ",t.toLowerCase()]})]},t))})]})})]})};export{ie as default};
 
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/apiService-axx1LHMk.js","assets/index-D4nJsLyx.js","assets/vendor-react-Dexh7fmo.js","assets/vendor-firebase-auth-COrkgW0P.js","assets/vendor-firebase-core-DQ-pMjxd.js","assets/vendor-firebase-firestore-BML5nJHm.js","assets/vendor-firebase-storage-BOeKE_0n.js","assets/vendor-firebase-analytics-CCo6E2f7.js","assets/index-CR2i2gnI.css"])))=>i.map(i=>d[i]);
2
+ import{y as B,_ as F,e as N,m as k}from"./index-D4nJsLyx.js";import{r,j as e}from"./vendor-react-Dexh7fmo.js";import{B as $}from"./button-BpeUVhBo.js";import{I as S}from"./input-DBkKXOmF.js";import z from"./ChatMarkdown-B34PtYCE.js";import{P as O}from"./plus-BxxucBR0.js";import{S as H}from"./search-Do6u3pFt.js";import{T as Y}from"./trash-2-BoXE_mye.js";import{S as D}from"./send-NQY-QTkN.js";import"./vendor-firebase-auth-COrkgW0P.js";import"./vendor-firebase-core-DQ-pMjxd.js";import"./vendor-firebase-firestore-BML5nJHm.js";import"./vendor-firebase-storage-BOeKE_0n.js";import"./vendor-firebase-analytics-CCo6E2f7.js";import"./vendor-radix-BRdei-zg.js";import"./clsx-B-dksMZM.js";import"./utils-BQQgILNW.js";import"./vendor-markdown-C5ikSDMA.js";const ie=()=>{const{sessions:C,activeSessionId:a,isLoading:l,loadingSessionId:I,setActiveSessionId:i,createNewSession:u,sendMessage:A,deleteSession:L,getActiveSession:T}=B(),[d,_]=r.useState(""),[o,f]=r.useState(""),[b,y]=r.useState(!1),c=r.useRef(null),x=r.useRef(!0),m=r.useRef(!1),n=T(),h=n?.messages||[],M=h.some(t=>t.sender==="ai"&&t.id.startsWith("stream-")),g=l&&a===I&&!M,j=(t="auto")=>{const s=c.current;s&&s.scrollTo({top:s.scrollHeight,behavior:t})},P=()=>{const t=c.current;return t?t.scrollHeight-t.scrollTop-t.clientHeight<=120:!0},E=()=>{x.current=P()};r.useEffect(()=>{F(async()=>{const{warmupBackend:t}=await import("./apiService-axx1LHMk.js");return{warmupBackend:t}},__vite__mapDeps([0,1,2,3,4,5,6,7,8])).then(({warmupBackend:t})=>{t()}).catch(t=>{console.warn("AI chat warmup skipped:",t)})},[]),r.useEffect(()=>{if(!x.current)return;const t=window.requestAnimationFrame(()=>j("auto"));return()=>window.cancelAnimationFrame(t)},[h,g]),r.useEffect(()=>{x.current=!0,j("auto")},[a]);const v=async()=>{if(!(!o.trim()||l||b||m.current)){m.current=!0,y(!0);try{let t=a;t||(t=u(),i(t));const s=o.trim();f(""),await A(t,s)}finally{m.current=!1,y(!1)}}},w=()=>{const t=u();i(t)},R=(t,s)=>{s.stopPropagation(),L(t)},p=C.filter(t=>t.title.toLowerCase().includes(d.toLowerCase())||t.preview.toLowerCase().includes(d.toLowerCase()));return e.jsxs("div",{className:"h-full min-h-0 overflow-hidden flex gap-4 px-4 sm:px-6 xl:px-10 py-6",children:[e.jsxs("div",{className:"w-80 min-h-0 flex flex-col bg-[#f7f9fc] rounded-3xl border border-[#dde3eb] overflow-hidden",children:[e.jsxs("div",{className:"p-4 border-b border-[#dde3eb] flex-shrink-0",children:[e.jsxs("div",{className:"flex items-center gap-3 mb-4",children:[e.jsx("div",{className:"w-12 h-12 bg-gradient-to-r from-sky-600 to-sky-500 rounded-2xl flex items-center justify-center",children:e.jsx("img",{src:"/avatar/avatar_icon.png",alt:"AI Tutor",className:"w-10 h-10 object-contain drop-shadow-md"})}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-base font-bold font-display text-[#0a1628]",children:"L.O.L.I."}),e.jsx("p",{className:"text-[10px] text-[#5a6578]",children:"Your AI Math Tutor"})]})]}),e.jsxs("button",{onClick:w,className:"w-full bg-gradient-to-r from-sky-600 to-sky-500 hover:from-sky-700 hover:to-sky-600 text-white px-4 py-3 rounded-xl text-sm font-bold transition-all shadow-md hover:shadow-lg flex items-center justify-center gap-2",children:[e.jsx(O,{size:18}),"New Chat"]}),e.jsxs("div",{className:"relative mt-3",children:[e.jsx(H,{className:"absolute left-3 top-1/2 -translate-y-1/2 text-slate-500",size:14}),e.jsx(S,{type:"text",placeholder:"Search conversations...",value:d,onChange:t=>_(t.target.value),className:"w-full pl-9 pr-3 py-2 text-xs rounded-xl border-[#dde3eb] focus:border-sky-600 focus:ring-2 focus:ring-sky-100"})]})]}),e.jsxs("div",{className:"flex-1 overflow-y-auto p-3 space-y-2",children:[e.jsx("div",{className:"flex items-center justify-between mb-2 px-2",children:e.jsxs("span",{className:"text-xs font-bold text-[#5a6578]",children:[p.length," Conversations"]})}),e.jsx(N,{children:p.map(t=>e.jsxs(k.div,{initial:{opacity:0,x:-20},animate:{opacity:1,x:0},exit:{opacity:0,x:-20},onClick:()=>i(t.id),className:`group p-3 rounded-2xl cursor-pointer transition-all duration-200 border relative ${a===t.id?"bg-sky-50 border-sky-200 shadow-sm":"bg-[#edf1f7] border-transparent hover:bg-[#dde3eb] hover:border-[#dde3eb]"}`,children:[e.jsxs("div",{className:"flex items-start justify-between mb-1",children:[e.jsx("h3",{className:`text-xs font-bold mb-0.5 pr-6 line-clamp-1 ${a===t.id?"text-sky-700":"text-[#0a1628]"}`,children:t.title}),e.jsx("button",{onClick:s=>R(t.id,s),className:"absolute top-2 right-2 p-1.5 rounded-lg opacity-0 group-hover:opacity-100 hover:bg-red-100 text-slate-500 hover:text-red-600 transition-all",children:e.jsx(Y,{size:12})})]}),e.jsx("p",{className:"text-[10px] text-[#5a6578] mb-2 line-clamp-2",children:t.preview}),e.jsxs("div",{className:"flex items-center justify-between text-[10px]",children:[e.jsx("span",{className:"text-slate-500",children:t.date}),e.jsxs("span",{className:`px-2 py-0.5 rounded-full ${a===t.id?"bg-sky-100 text-sky-600":"bg-[#dde3eb] text-[#5a6578]"}`,children:[t.messageCount," msgs"]})]})]},t.id))}),p.length===0&&e.jsxs("div",{className:"text-center py-8",children:[e.jsx("img",{src:"/avatar/avatar_icon.png",alt:"AI Tutor",className:"w-16 h-16 object-contain mx-auto mb-2 opacity-60 drop-shadow-sm grayscale contrast-50"}),e.jsx("p",{className:"text-sm text-slate-500",children:"No conversations found"}),e.jsx("p",{className:"text-xs text-slate-500/60 mt-1",children:"Start a new chat!"})]})]})]}),e.jsx("div",{className:"flex-1 min-h-0 flex flex-col bg-[#f7f9fc] rounded-3xl border border-[#dde3eb] overflow-hidden",children:a?e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"p-4 border-b border-[#dde3eb] flex items-center justify-between flex-shrink-0",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"font-bold font-display text-[#0a1628]",children:n?.title}),e.jsx("p",{className:"text-xs text-[#5a6578]",children:n?.date})]}),e.jsx("div",{className:"flex items-center gap-2",children:n?.topics.map((t,s)=>e.jsx("span",{className:"px-3 py-1 bg-sky-50 text-sky-600 text-xs font-bold rounded-lg",children:t},s))})]}),e.jsxs("div",{ref:c,onScroll:E,className:"flex-1 overflow-y-auto overscroll-contain p-6 space-y-4 bg-[#edf1f7] min-h-0",children:[e.jsx(N,{children:h.map(t=>e.jsx(k.div,{initial:{opacity:0,y:10},animate:{opacity:1,y:0},className:`flex ${t.sender==="user"?"justify-end":"justify-start"}`,children:e.jsxs("div",{className:`max-w-[70%] rounded-2xl px-5 py-3 ${t.sender==="user"?"bg-gradient-to-r from-sky-600 to-sky-500 text-white":"bg-white text-[#0a1628] shadow-md border border-[#dde3eb]"}`,children:[t.sender==="user"?e.jsx("p",{className:"text-sm whitespace-pre-wrap leading-relaxed",children:t.text}):e.jsx(z,{children:t.text}),e.jsx("p",{className:`text-[10px] mt-1.5 ${t.sender==="user"?"text-sky-200":"text-slate-500"}`,children:t.timestamp})]})},t.id))}),g&&e.jsx("div",{className:"flex justify-start",children:e.jsx("div",{className:"bg-white text-[#0a1628] shadow-md border border-[#dde3eb] rounded-2xl px-5 py-3 max-w-[70%]",children:e.jsxs("div",{className:"flex gap-1",children:[e.jsx("div",{className:"w-2 h-2 bg-sky-400 rounded-full animate-bounce"}),e.jsx("div",{className:"w-2 h-2 bg-sky-400 rounded-full animate-bounce [animation-delay:150ms]"}),e.jsx("div",{className:"w-2 h-2 bg-sky-400 rounded-full animate-bounce [animation-delay:300ms]"})]})})})]}),e.jsx("div",{className:"p-4 border-t border-[#dde3eb] bg-white flex-shrink-0",children:e.jsxs("div",{className:"flex gap-3",children:[e.jsx(S,{type:"text",value:o,onChange:t=>f(t.target.value),onKeyPress:t=>t.key==="Enter"&&v(),placeholder:"Ask me anything about math...",className:"flex-1 px-5 py-3 rounded-xl border-[#dde3eb] focus:border-sky-600 focus:ring-2 focus:ring-sky-100 text-sm"}),e.jsx($,{onClick:v,disabled:!o.trim()||l||b,className:"px-6 bg-gradient-to-r from-sky-600 to-sky-500 hover:from-sky-700 hover:to-sky-600 text-white rounded-xl transition-all disabled:opacity-50 disabled:cursor-not-allowed shadow-md hover:shadow-lg",children:e.jsx(D,{size:18})})]})})]}):e.jsxs("div",{className:"flex-1 flex flex-col items-center justify-center p-8 text-center",children:[e.jsx("div",{className:"w-24 h-24 bg-gradient-to-r from-sky-100 to-cyan-100 rounded-3xl flex items-center justify-center mb-6",children:e.jsx("img",{src:"/avatar/avatar_icon.png",alt:"AI Tutor",className:"w-20 h-20 object-contain drop-shadow-lg"})}),e.jsx("h2",{className:"text-2xl font-bold font-display text-[#0a1628] mb-1",children:"Welcome to L.O.L.I."}),e.jsx("p",{className:"text-sky-600 text-sm font-bold tracking-wide uppercase mb-4",children:"Logical Operations & Learning Intelligence"}),e.jsx("p",{className:"text-[#5a6578] mb-6 max-w-md",children:"Your personal AI math tutor is here to help! Start a new conversation or select one from the sidebar."}),e.jsx("button",{onClick:w,className:"px-6 py-3 bg-gradient-to-r from-sky-600 to-sky-500 hover:from-sky-700 hover:to-sky-600 text-white rounded-xl font-bold shadow-lg hover:shadow-xl transition-all",children:"Start Your First Chat"}),e.jsx("div",{className:"mt-8 grid grid-cols-3 gap-4 max-w-2xl",children:["Algebra","Geometry","Calculus"].map(t=>e.jsxs("div",{className:"p-4 bg-[#edf1f7] rounded-xl border border-[#dde3eb]",children:[e.jsx("p",{className:"text-sm font-bold text-[#0a1628]",children:t}),e.jsxs("p",{className:"text-xs text-[#5a6578] mt-1",children:["Get help with ",t.toLowerCase()]})]},t))})]})})]})};export{ie as default};
assets/{AdminDashboard-f0ufScS3.js β†’ AdminDashboard-BmyikugA.js} RENAMED
@@ -1,4 +1,4 @@
1
- import{j as e,r as x}from"./vendor-react-Dexh7fmo.js";import Qe from"./Sidebar-ZOTUQCrB.js";import Ne from"./ConfirmModal-BGmRIqeR.js";import{B as E}from"./button-BpeUVhBo.js";import{I as R}from"./input-DBkKXOmF.js";import{R as Je,C as Ke,a as Ze,T as Ye,D as et,P as tt,O as st,b as at,I as lt,F as rt}from"./vendor-radix-BRdei-zg.js";import{c as G}from"./utils-BQQgILNW.js";import{X as nt}from"./x-DwrHgz_L.js";import{S as V,a as H,b as W,c as X,d as A}from"./select-eb8ZLkQc.js";import{f as $,e as z,q as ne,o as ie,l as Pe,w as it,u as Le,a as J,d as ce,m as we,c as Re}from"./vendor-firebase-firestore-BML5nJHm.js";import{c as B,d as M,u as Se,t as T,m as L,T as be,Z as Ie,D as ct,f as dt,h as ot,F as xt}from"./index-DUxNDyEU.js";import{R as ke,F as mt,V as ht,I as ae,D as ee}from"./video-dHir2Lp4.js";import{P as Ee}from"./plus-CCRS5c6k.js";import{L as F}from"./loader-circle-6q_nFxhJ.js";import{C as ut}from"./circle-check-big-CXPh4ph_.js";import{P as Te}from"./pen-line-C4kYg-x9.js";import{T as je}from"./trash-2-DHSV6syb.js";import{S as Ae}from"./search-DxT5Gvzl.js";import{U as de}from"./users-B8Q5DwX3.js";import{B as O}from"./book-open-B5Fr9j0O.js";import{C as pt}from"./circle-help-DWqFJv7Z.js";import{C as ve}from"./calendar-DOp6N-WM.js";import{C as le}from"./circle-alert-3TSiLPep.js";import{S as Z}from"./shield-m_A65sim.js";import{E as gt}from"./eye-kYT3TKwH.js";import{S as ft}from"./LogoutActionButton-1LrBiz6V.js";import{B as bt}from"./bell-CdZB167e.js";import{G as jt}from"./globe-ClgZF2mp.js";import{S as vt}from"./save-B-nSNwXv.js";import{G as Ce}from"./graduation-cap-BnLJcznw.js";import{T as $e}from"./target-CkzwB53m.js";import{C as yt}from"./clock-TIVUqSxI.js";import{A as re}from"./award-UT1_i9UI.js";import{B as Nt}from"./brain-D2SpSiL8.js";import{F as wt,T as St}from"./trending-down-6Zz2BWmA.js";import{D as kt}from"./download-C6KU0zMt.js";import{C as ye}from"./chart-column-BSv3Tlcd.js";import{a as At}from"./chevron-up-B14f4SwA.js";import{M as Ct}from"./minus-DlNhq6wp.js";import{T as Dt}from"./trending-up-KXZvyUp1.js";import"./chevron-right-CSxxBxL8.js";import"./message-square-Cc7MV93e.js";import"./swords-XAghltmC.js";import"./trophy-qEvM2_M2.js";import"./shirt-Gt1mteCK.js";import"./log-out-DH3jNNq7.js";import"./clsx-B-dksMZM.js";import"./check-DF0M9ltT.js";import"./vendor-firebase-core-DQ-pMjxd.js";import"./vendor-firebase-auth-COrkgW0P.js";import"./vendor-firebase-storage-BOeKE_0n.js";import"./vendor-firebase-analytics-CCo6E2f7.js";/**
2
  * @license lucide-react v0.487.0 - ISC
3
  *
4
  * This source code is licensed under the ISC license.
 
1
+ import{j as e,r as x}from"./vendor-react-Dexh7fmo.js";import Qe from"./Sidebar-xBQ3Qnyw.js";import Ne from"./ConfirmModal-DGrnpObD.js";import{B as E}from"./button-BpeUVhBo.js";import{I as R}from"./input-DBkKXOmF.js";import{R as Je,C as Ke,a as Ze,T as Ye,D as et,P as tt,O as st,b as at,I as lt,F as rt}from"./vendor-radix-BRdei-zg.js";import{c as G}from"./utils-BQQgILNW.js";import{X as nt}from"./x-BONnp2RF.js";import{S as V,a as H,b as W,c as X,d as A}from"./select-Co4o1EaI.js";import{f as $,e as z,q as ne,o as ie,l as Pe,w as it,u as Le,a as J,d as ce,m as we,c as Re}from"./vendor-firebase-firestore-BML5nJHm.js";import{c as B,d as M,u as Se,t as T,m as L,T as be,Z as Ie,D as ct,f as dt,h as ot,F as xt}from"./index-D4nJsLyx.js";import{R as ke,F as mt,V as ht,I as ae,D as ee}from"./video-CS-NQBfT.js";import{P as Ee}from"./plus-BxxucBR0.js";import{L as F}from"./loader-circle-J8Mwbkkw.js";import{C as ut}from"./circle-check-big-0Gzyt_f3.js";import{P as Te}from"./pen-line-Vok2l3fc.js";import{T as je}from"./trash-2-BoXE_mye.js";import{S as Ae}from"./search-Do6u3pFt.js";import{U as de}from"./users-HMf2sdE3.js";import{B as O}from"./book-open-BH50GByv.js";import{C as pt}from"./circle-help-BmjHdT5a.js";import{C as ve}from"./calendar-BJ8oE6yW.js";import{C as le}from"./circle-alert-CBefjicJ.js";import{S as Z}from"./shield-L33jkK5w.js";import{E as gt}from"./eye-DXdRafOv.js";import{S as ft}from"./LogoutActionButton-FS5OGZjL.js";import{B as bt}from"./bell-CbSbac2W.js";import{G as jt}from"./globe-BMa4SWkV.js";import{S as vt}from"./save-Og8yP5Yb.js";import{G as Ce}from"./graduation-cap-Df8fGPxp.js";import{T as $e}from"./target-D7SVtf3g.js";import{C as yt}from"./clock-DUJO-a50.js";import{A as re}from"./award-oJTbc9W5.js";import{B as Nt}from"./brain-CPvGdgWE.js";import{F as wt,T as St}from"./trending-down-CqEkjFA9.js";import{D as kt}from"./download-PWUf0XJa.js";import{C as ye}from"./chart-column-D5mAWcRx.js";import{a as At}from"./chevron-up-Bfmq3Clw.js";import{M as Ct}from"./minus-oFhmD2--.js";import{T as Dt}from"./trending-up-D-vj8Gbq.js";import"./chevron-right-COMox1Xb.js";import"./message-square-DSAS4TVL.js";import"./swords-8_KH18p7.js";import"./trophy-C2nVcZnb.js";import"./shirt-BMZy0pq4.js";import"./log-out-BqGKt-tT.js";import"./clsx-B-dksMZM.js";import"./check-BACdUlFL.js";import"./vendor-firebase-core-DQ-pMjxd.js";import"./vendor-firebase-auth-COrkgW0P.js";import"./vendor-firebase-storage-BOeKE_0n.js";import"./vendor-firebase-analytics-CCo6E2f7.js";/**
2
  * @license lucide-react v0.487.0 - ISC
3
  *
4
  * This source code is licensed under the ISC license.
assets/{AvatarShop-yzXUOLqd.js β†’ AvatarShop-BirEYu2M.js} RENAMED
@@ -1,4 +1,4 @@
1
- import{r as n,j as e}from"./vendor-react-Dexh7fmo.js";import{c as F,L as O,d as V,e as $}from"./vendor-radix-BRdei-zg.js";import{c as k,u as B,i as C,m as d,e as K,J as Y,t as l,K as Z,L as W}from"./index-DUxNDyEU.js";import{T as D,a as G,b as H}from"./tooltip-BV3U-RJu.js";import{C as J}from"./CompositeAvatar-BFyEBxkG.js";import{M}from"./avatarData-BW_TX0b4.js";import{S as E}from"./sparkles-BA64-_B-.js";import{L as U}from"./lock-CsjFFL-g.js";import{S as Q}from"./save-B-nSNwXv.js";import{S as ee}from"./shirt-Gt1mteCK.js";import"./vendor-firebase-auth-COrkgW0P.js";import"./vendor-firebase-core-DQ-pMjxd.js";import"./vendor-firebase-firestore-BML5nJHm.js";import"./vendor-firebase-storage-BOeKE_0n.js";import"./vendor-firebase-analytics-CCo6E2f7.js";import"./utils-BQQgILNW.js";import"./clsx-B-dksMZM.js";/**
2
  * @license lucide-react v0.487.0 - ISC
3
  *
4
  * This source code is licensed under the ISC license.
 
1
+ import{r as n,j as e}from"./vendor-react-Dexh7fmo.js";import{c as F,L as O,d as V,e as $}from"./vendor-radix-BRdei-zg.js";import{c as k,u as B,i as C,m as d,e as K,J as Y,t as l,K as Z,L as W}from"./index-D4nJsLyx.js";import{T as D,a as G,b as H}from"./tooltip-BV3U-RJu.js";import{C as J}from"./CompositeAvatar-DMpjm5UY.js";import{M}from"./avatarData-BW_TX0b4.js";import{S as E}from"./sparkles-CXUFmaBJ.js";import{L as U}from"./lock-_59co5m5.js";import{S as Q}from"./save-Og8yP5Yb.js";import{S as ee}from"./shirt-BMZy0pq4.js";import"./vendor-firebase-auth-COrkgW0P.js";import"./vendor-firebase-core-DQ-pMjxd.js";import"./vendor-firebase-firestore-BML5nJHm.js";import"./vendor-firebase-storage-BOeKE_0n.js";import"./vendor-firebase-analytics-CCo6E2f7.js";import"./utils-BQQgILNW.js";import"./clsx-B-dksMZM.js";/**
2
  * @license lucide-react v0.487.0 - ISC
3
  *
4
  * This source code is licensed under the ISC license.
assets/{ChatMarkdown-DLD56_rz.js β†’ ChatMarkdown-B34PtYCE.js} RENAMED
@@ -1,2 +1,2 @@
1
  const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/vendor-markdown-C5ikSDMA.js","assets/vendor-react-Dexh7fmo.js","assets/vendor-markdown-CBmFCdgC.css"])))=>i.map(i=>d[i]);
2
- import{Q as i,_ as c}from"./index-DUxNDyEU.js";import{r as m,j as r}from"./vendor-react-Dexh7fmo.js";import{M as h,r as x,a as y}from"./vendor-markdown-C5ikSDMA.js";import"./vendor-firebase-auth-COrkgW0P.js";import"./vendor-firebase-core-DQ-pMjxd.js";import"./vendor-firebase-firestore-BML5nJHm.js";import"./vendor-firebase-storage-BOeKE_0n.js";import"./vendor-firebase-analytics-CCo6E2f7.js";let a=null;const p=()=>(a||(a=c(()=>import("./vendor-markdown-C5ikSDMA.js").then(l=>l.k),__vite__mapDeps([0,1,2]))),a),v=({children:l})=>{if(m.useEffect(()=>{p()},[]),!l||typeof l!="string")return null;const t=i(l);return r.jsx("div",{className:"chat-markdown",children:r.jsx(h,{remarkPlugins:[y],rehypePlugins:[x],components:{a:({href:e,children:s})=>r.jsx("a",{href:e,target:"_blank",rel:"noopener noreferrer",className:"text-blue-600 hover:underline",children:s}),code:e=>{const{inline:s,className:n,children:o,...d}=e;return r.jsx("code",{className:`${s?"bg-gray-100 dark:bg-gray-800 rounded px-1 py-0.5 text-sm":"block bg-gray-100 dark:bg-gray-900 rounded p-3 overflow-x-auto my-2"} ${n||""}`,...d,children:o})},blockquote:({children:e})=>r.jsx("blockquote",{className:"border-l-4 border-gray-300 dark:border-gray-600 pl-4 italic text-gray-600 dark:text-gray-400 my-2",children:e}),h1:({children:e})=>r.jsx("h1",{className:"text-2xl font-bold my-2",children:e}),h2:({children:e})=>r.jsx("h2",{className:"text-xl font-bold my-2",children:e}),h3:({children:e})=>r.jsx("h3",{className:"text-lg font-bold my-2",children:e}),h4:({children:e})=>r.jsx("h4",{className:"text-base font-bold my-2",children:e}),h5:({children:e})=>r.jsx("h5",{className:"text-sm font-bold my-2",children:e}),h6:({children:e})=>r.jsx("h6",{className:"text-xs font-bold my-2",children:e}),ul:({children:e})=>r.jsx("ul",{className:"list-disc list-inside my-2",children:e}),ol:({children:e})=>r.jsx("ol",{className:"list-decimal list-inside my-2",children:e}),li:({children:e})=>r.jsx("li",{className:"ml-2",children:e}),hr:()=>r.jsx("hr",{className:"my-4 border-t border-gray-300 dark:border-gray-600"}),p:({children:e})=>r.jsx("p",{className:"my-1",children:e})},children:t})})};export{v as default};
 
1
  const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/vendor-markdown-C5ikSDMA.js","assets/vendor-react-Dexh7fmo.js","assets/vendor-markdown-CBmFCdgC.css"])))=>i.map(i=>d[i]);
2
+ import{Q as i,_ as c}from"./index-D4nJsLyx.js";import{r as m,j as r}from"./vendor-react-Dexh7fmo.js";import{M as h,r as x,a as y}from"./vendor-markdown-C5ikSDMA.js";import"./vendor-firebase-auth-COrkgW0P.js";import"./vendor-firebase-core-DQ-pMjxd.js";import"./vendor-firebase-firestore-BML5nJHm.js";import"./vendor-firebase-storage-BOeKE_0n.js";import"./vendor-firebase-analytics-CCo6E2f7.js";let a=null;const p=()=>(a||(a=c(()=>import("./vendor-markdown-C5ikSDMA.js").then(l=>l.k),__vite__mapDeps([0,1,2]))),a),v=({children:l})=>{if(m.useEffect(()=>{p()},[]),!l||typeof l!="string")return null;const t=i(l);return r.jsx("div",{className:"chat-markdown",children:r.jsx(h,{remarkPlugins:[y],rehypePlugins:[x],components:{a:({href:e,children:s})=>r.jsx("a",{href:e,target:"_blank",rel:"noopener noreferrer",className:"text-blue-600 hover:underline",children:s}),code:e=>{const{inline:s,className:n,children:o,...d}=e;return r.jsx("code",{className:`${s?"bg-gray-100 dark:bg-gray-800 rounded px-1 py-0.5 text-sm":"block bg-gray-100 dark:bg-gray-900 rounded p-3 overflow-x-auto my-2"} ${n||""}`,...d,children:o})},blockquote:({children:e})=>r.jsx("blockquote",{className:"border-l-4 border-gray-300 dark:border-gray-600 pl-4 italic text-gray-600 dark:text-gray-400 my-2",children:e}),h1:({children:e})=>r.jsx("h1",{className:"text-2xl font-bold my-2",children:e}),h2:({children:e})=>r.jsx("h2",{className:"text-xl font-bold my-2",children:e}),h3:({children:e})=>r.jsx("h3",{className:"text-lg font-bold my-2",children:e}),h4:({children:e})=>r.jsx("h4",{className:"text-base font-bold my-2",children:e}),h5:({children:e})=>r.jsx("h5",{className:"text-sm font-bold my-2",children:e}),h6:({children:e})=>r.jsx("h6",{className:"text-xs font-bold my-2",children:e}),ul:({children:e})=>r.jsx("ul",{className:"list-disc list-inside my-2",children:e}),ol:({children:e})=>r.jsx("ol",{className:"list-decimal list-inside my-2",children:e}),li:({children:e})=>r.jsx("li",{className:"ml-2",children:e}),hr:()=>r.jsx("hr",{className:"my-4 border-t border-gray-300 dark:border-gray-600"}),p:({children:e})=>r.jsx("p",{className:"my-1",children:e})},children:t})})};export{v as default};
assets/{CompetencyRadarChart-CeLqkQBE.js β†’ CompetencyRadarChart-BfcP7xrw.js} RENAMED
@@ -1,2 +1,2 @@
1
- import{c as u,g as he,r as A,j as p}from"./vendor-react-Dexh7fmo.js";import{u as it,p as at,m as ot}from"./index-DUxNDyEU.js";import{g as st,s as ke}from"./subjects-mtNF4Bqy.js";import{B as ct}from"./brain-D2SpSiL8.js";import{S as lt}from"./sparkles-BA64-_B-.js";import{f as b,x as w,y as qe,z as ut,A as We,D as ft,b as B,T as Ke,L as S,E as Ve,d as Ge,e as pt,F as He,H as dt,I as X,J as mt,K as yt,G as ht,M as we,N as vt,O as _e,r as gt,P as bt,R as xt,v as Pt}from"./generateCategoricalChart-CiUYzAvW.js";import{c as N}from"./clsx-B-dksMZM.js";import"./vendor-firebase-auth-COrkgW0P.js";import"./vendor-firebase-core-DQ-pMjxd.js";import"./vendor-firebase-firestore-BML5nJHm.js";import"./vendor-firebase-storage-BOeKE_0n.js";import"./vendor-firebase-analytics-CCo6E2f7.js";import"./trending-up-KXZvyUp1.js";import"./chart-column-BSv3Tlcd.js";var Ot=["points","className","baseLinePoints","connectNulls"];function F(){return F=Object.assign?Object.assign.bind():function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t},F.apply(this,arguments)}function jt(t,e){if(t==null)return{};var n=kt(t,e),r,i;if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);for(i=0;i<a.length;i++)r=a[i],!(e.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(t,r)&&(n[r]=t[r])}return n}function kt(t,e){if(t==null)return{};var n={};for(var r in t)if(Object.prototype.hasOwnProperty.call(t,r)){if(e.indexOf(r)>=0)continue;n[r]=t[r]}return n}function Ae(t){return Et(t)||At(t)||_t(t)||wt()}function wt(){throw new TypeError(`Invalid attempt to spread non-iterable instance.
2
  In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function _t(t,e){if(t){if(typeof t=="string")return pe(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);if(n==="Object"&&t.constructor&&(n=t.constructor.name),n==="Map"||n==="Set")return Array.from(t);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return pe(t,e)}}function At(t){if(typeof Symbol<"u"&&t[Symbol.iterator]!=null||t["@@iterator"]!=null)return Array.from(t)}function Et(t){if(Array.isArray(t))return pe(t)}function pe(t,e){(e==null||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n<e;n++)r[n]=t[n];return r}var Ee=function(e){return e&&e.x===+e.x&&e.y===+e.y},St=function(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[],n=[[]];return e.forEach(function(r){Ee(r)?n[n.length-1].push(r):n[n.length-1].length>0&&n.push([])}),Ee(e[0])&&n[n.length-1].push(e[0]),n[n.length-1].length<=0&&(n=n.slice(0,-1)),n},V=function(e,n){var r=St(e);n&&(r=[r.reduce(function(a,o){return[].concat(Ae(a),Ae(o))},[])]);var i=r.map(function(a){return a.reduce(function(o,s,c){return"".concat(o).concat(c===0?"M":"L").concat(s.x,",").concat(s.y)},"")}).join("");return r.length===1?"".concat(i,"Z"):i},Nt=function(e,n,r){var i=V(e,r);return"".concat(i.slice(-1)==="Z"?i.slice(0,-1):i,"L").concat(V(n.reverse(),r).slice(1))},Ze=function(e){var n=e.points,r=e.className,i=e.baseLinePoints,a=e.connectNulls,o=jt(e,Ot);if(!n||!n.length)return null;var s=N("recharts-polygon",r);if(i&&i.length){var c=o.stroke&&o.stroke!=="none",d=Nt(n,i,a);return u.createElement("g",{className:s},u.createElement("path",F({},b(o,!0),{fill:d.slice(-1)==="Z"?o.fill:"none",stroke:"none",d})),c?u.createElement("path",F({},b(o,!0),{fill:"none",d:V(n,a)})):null,c?u.createElement("path",F({},b(o,!0),{fill:"none",d:V(i,a)})):null)}var f=V(n,a);return u.createElement("path",F({},b(o,!0),{fill:f.slice(-1)==="Z"?o.fill:"none",className:s,d:f}))},Tt=["cx","cy","innerRadius","outerRadius","gridType","radialLines"];function H(t){"@babel/helpers - typeof";return H=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},H(t)}function $t(t,e){if(t==null)return{};var n=Rt(t,e),r,i;if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);for(i=0;i<a.length;i++)r=a[i],!(e.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(t,r)&&(n[r]=t[r])}return n}function Rt(t,e){if(t==null)return{};var n={};for(var r in t)if(Object.prototype.hasOwnProperty.call(t,r)){if(e.indexOf(r)>=0)continue;n[r]=t[r]}return n}function T(){return T=Object.assign?Object.assign.bind():function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t},T.apply(this,arguments)}function Se(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(i){return Object.getOwnPropertyDescriptor(t,i).enumerable})),n.push.apply(n,r)}return n}function Z(t){for(var e=1;e<arguments.length;e++){var n=arguments[e]!=null?arguments[e]:{};e%2?Se(Object(n),!0).forEach(function(r){Lt(t,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):Se(Object(n)).forEach(function(r){Object.defineProperty(t,r,Object.getOwnPropertyDescriptor(n,r))})}return t}function Lt(t,e,n){return e=Dt(e),e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function Dt(t){var e=It(t,"string");return H(e)=="symbol"?e:e+""}function It(t,e){if(H(t)!="object"||!t)return t;var n=t[Symbol.toPrimitive];if(n!==void 0){var r=n.call(t,e);if(H(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(e==="string"?String:Number)(t)}var Mt=function(e,n,r,i){var a="";return i.forEach(function(o,s){var c=w(n,r,e,o);s?a+="L ".concat(c.x,",").concat(c.y):a+="M ".concat(c.x,",").concat(c.y)}),a+="Z",a},Ct=function(e){var n=e.cx,r=e.cy,i=e.innerRadius,a=e.outerRadius,o=e.polarAngles,s=e.radialLines;if(!o||!o.length||!s)return null;var c=Z({stroke:"#ccc"},b(e,!1));return u.createElement("g",{className:"recharts-polar-grid-angle"},o.map(function(d){var f=w(n,r,i,d),m=w(n,r,a,d);return u.createElement("line",T({},c,{key:"line-".concat(d),x1:f.x,y1:f.y,x2:m.x,y2:m.y}))}))},Bt=function(e){var n=e.cx,r=e.cy,i=e.radius,a=e.index,o=Z(Z({stroke:"#ccc"},b(e,!1)),{},{fill:"none"});return u.createElement("circle",T({},o,{className:N("recharts-polar-grid-concentric-circle",e.className),key:"circle-".concat(a),cx:n,cy:r,r:i}))},Ft=function(e){var n=e.radius,r=e.index,i=Z(Z({stroke:"#ccc"},b(e,!1)),{},{fill:"none"});return u.createElement("path",T({},i,{className:N("recharts-polar-grid-concentric-polygon",e.className),key:"path-".concat(r),d:Mt(n,e.cx,e.cy,e.polarAngles)}))},zt=function(e){var n=e.polarRadius,r=e.gridType;return!n||!n.length?null:u.createElement("g",{className:"recharts-polar-grid-concentric"},n.map(function(i,a){var o=a;return r==="circle"?u.createElement(Bt,T({key:o},e,{radius:i,index:a})):u.createElement(Ft,T({key:o},e,{radius:i,index:a}))}))},Ue=function(e){var n=e.cx,r=n===void 0?0:n,i=e.cy,a=i===void 0?0:i,o=e.innerRadius,s=o===void 0?0:o,c=e.outerRadius,d=c===void 0?0:c,f=e.gridType,m=f===void 0?"polygon":f,l=e.radialLines,v=l===void 0?!0:l,y=$t(e,Tt);return d<=0?null:u.createElement("g",{className:"recharts-polar-grid"},u.createElement(Ct,T({cx:r,cy:a,innerRadius:s,outerRadius:d,gridType:m,radialLines:v},y)),u.createElement(zt,T({cx:r,cy:a,innerRadius:s,outerRadius:d,gridType:m,radialLines:v},y)))};Ue.displayName="PolarGrid";var ce,Ne;function qt(){if(Ne)return ce;Ne=1;var t=qe(),e=ut(),n=We();function r(i,a){return i&&i.length?t(i,n(a,2),e):void 0}return ce=r,ce}var Wt=qt();const Kt=he(Wt);var le,Te;function Vt(){if(Te)return le;Te=1;var t=qe(),e=We(),n=ft();function r(i,a){return i&&i.length?t(i,e(a,2),n):void 0}return le=r,le}var Gt=Vt();const Ht=he(Gt);var Zt=["cx","cy","angle","ticks","axisLine"],Ut=["ticks","tick","angle","tickFormatter","stroke"];function z(t){"@babel/helpers - typeof";return z=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},z(t)}function G(){return G=Object.assign?Object.assign.bind():function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t},G.apply(this,arguments)}function $e(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(i){return Object.getOwnPropertyDescriptor(t,i).enumerable})),n.push.apply(n,r)}return n}function R(t){for(var e=1;e<arguments.length;e++){var n=arguments[e]!=null?arguments[e]:{};e%2?$e(Object(n),!0).forEach(function(r){ne(t,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):$e(Object(n)).forEach(function(r){Object.defineProperty(t,r,Object.getOwnPropertyDescriptor(n,r))})}return t}function Re(t,e){if(t==null)return{};var n=Yt(t,e),r,i;if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);for(i=0;i<a.length;i++)r=a[i],!(e.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(t,r)&&(n[r]=t[r])}return n}function Yt(t,e){if(t==null)return{};var n={};for(var r in t)if(Object.prototype.hasOwnProperty.call(t,r)){if(e.indexOf(r)>=0)continue;n[r]=t[r]}return n}function Jt(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function Le(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,Je(r.key),r)}}function Xt(t,e,n){return e&&Le(t.prototype,e),n&&Le(t,n),Object.defineProperty(t,"prototype",{writable:!1}),t}function Qt(t,e,n){return e=Q(e),er(t,Ye()?Reflect.construct(e,n||[],Q(t).constructor):e.apply(t,n))}function er(t,e){if(e&&(z(e)==="object"||typeof e=="function"))return e;if(e!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return tr(t)}function tr(t){if(t===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}function Ye(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(Ye=function(){return!!t})()}function Q(t){return Q=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},Q(t)}function rr(t,e){if(typeof e!="function"&&e!==null)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&de(t,e)}function de(t,e){return de=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,i){return r.__proto__=i,r},de(t,e)}function ne(t,e,n){return e=Je(e),e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function Je(t){var e=nr(t,"string");return z(e)=="symbol"?e:e+""}function nr(t,e){if(z(t)!="object"||!t)return t;var n=t[Symbol.toPrimitive];if(n!==void 0){var r=n.call(t,e);if(z(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}var U=(function(t){function e(){return Jt(this,e),Qt(this,e,arguments)}return rr(e,t),Xt(e,[{key:"getTickValueCoord",value:function(r){var i=r.coordinate,a=this.props,o=a.angle,s=a.cx,c=a.cy;return w(s,c,i,o)}},{key:"getTickTextAnchor",value:function(){var r=this.props.orientation,i;switch(r){case"left":i="end";break;case"right":i="start";break;default:i="middle";break}return i}},{key:"getViewBox",value:function(){var r=this.props,i=r.cx,a=r.cy,o=r.angle,s=r.ticks,c=Kt(s,function(f){return f.coordinate||0}),d=Ht(s,function(f){return f.coordinate||0});return{cx:i,cy:a,startAngle:o,endAngle:o,innerRadius:d.coordinate||0,outerRadius:c.coordinate||0}}},{key:"renderAxisLine",value:function(){var r=this.props,i=r.cx,a=r.cy,o=r.angle,s=r.ticks,c=r.axisLine,d=Re(r,Zt),f=s.reduce(function(y,h){return[Math.min(y[0],h.coordinate),Math.max(y[1],h.coordinate)]},[1/0,-1/0]),m=w(i,a,f[0],o),l=w(i,a,f[1],o),v=R(R(R({},b(d,!1)),{},{fill:"none"},b(c,!1)),{},{x1:m.x,y1:m.y,x2:l.x,y2:l.y});return u.createElement("line",G({className:"recharts-polar-radius-axis-line"},v))}},{key:"renderTicks",value:function(){var r=this,i=this.props,a=i.ticks,o=i.tick,s=i.angle,c=i.tickFormatter,d=i.stroke,f=Re(i,Ut),m=this.getTickTextAnchor(),l=b(f,!1),v=b(o,!1),y=a.map(function(h,g){var O=r.getTickValueCoord(h),j=R(R(R(R({textAnchor:m,transform:"rotate(".concat(90-s,", ").concat(O.x,", ").concat(O.y,")")},l),{},{stroke:"none",fill:d},v),{},{index:g},O),{},{payload:h});return u.createElement(S,G({className:N("recharts-polar-radius-axis-tick",Ve(o)),key:"tick-".concat(h.coordinate)},Ge(r.props,h,g)),e.renderTickItem(o,j,c?c(h.value,g):h.value))});return u.createElement(S,{className:"recharts-polar-radius-axis-ticks"},y)}},{key:"render",value:function(){var r=this.props,i=r.ticks,a=r.axisLine,o=r.tick;return!i||!i.length?null:u.createElement(S,{className:N("recharts-polar-radius-axis",this.props.className)},a&&this.renderAxisLine(),o&&this.renderTicks(),pt.renderCallByParent(this.props,this.getViewBox()))}}],[{key:"renderTickItem",value:function(r,i,a){var o;return u.isValidElement(r)?o=u.cloneElement(r,i):B(r)?o=r(i):o=u.createElement(Ke,G({},i,{className:"recharts-polar-radius-axis-tick-value"}),a),o}}])})(A.PureComponent);ne(U,"displayName","PolarRadiusAxis");ne(U,"axisType","radiusAxis");ne(U,"defaultProps",{type:"number",radiusAxisId:0,cx:0,cy:0,angle:0,orientation:"right",stroke:"#ccc",axisLine:!0,tick:!0,tickCount:5,allowDataOverflow:!1,scale:"auto",allowDuplicatedCategory:!0});function q(t){"@babel/helpers - typeof";return q=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},q(t)}function D(){return D=Object.assign?Object.assign.bind():function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t},D.apply(this,arguments)}function De(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(i){return Object.getOwnPropertyDescriptor(t,i).enumerable})),n.push.apply(n,r)}return n}function L(t){for(var e=1;e<arguments.length;e++){var n=arguments[e]!=null?arguments[e]:{};e%2?De(Object(n),!0).forEach(function(r){ie(t,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):De(Object(n)).forEach(function(r){Object.defineProperty(t,r,Object.getOwnPropertyDescriptor(n,r))})}return t}function ir(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function Ie(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,Qe(r.key),r)}}function ar(t,e,n){return e&&Ie(t.prototype,e),n&&Ie(t,n),Object.defineProperty(t,"prototype",{writable:!1}),t}function or(t,e,n){return e=ee(e),sr(t,Xe()?Reflect.construct(e,n||[],ee(t).constructor):e.apply(t,n))}function sr(t,e){if(e&&(q(e)==="object"||typeof e=="function"))return e;if(e!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return cr(t)}function cr(t){if(t===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}function Xe(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(Xe=function(){return!!t})()}function ee(t){return ee=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},ee(t)}function lr(t,e){if(typeof e!="function"&&e!==null)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&me(t,e)}function me(t,e){return me=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,i){return r.__proto__=i,r},me(t,e)}function ie(t,e,n){return e=Qe(e),e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function Qe(t){var e=ur(t,"string");return q(e)=="symbol"?e:e+""}function ur(t,e){if(q(t)!="object"||!t)return t;var n=t[Symbol.toPrimitive];if(n!==void 0){var r=n.call(t,e);if(q(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}var fr=Math.PI/180,Me=1e-5,Y=(function(t){function e(){return ir(this,e),or(this,e,arguments)}return lr(e,t),ar(e,[{key:"getTickLineCoord",value:function(r){var i=this.props,a=i.cx,o=i.cy,s=i.radius,c=i.orientation,d=i.tickSize,f=d||8,m=w(a,o,s,r.coordinate),l=w(a,o,s+(c==="inner"?-1:1)*f,r.coordinate);return{x1:m.x,y1:m.y,x2:l.x,y2:l.y}}},{key:"getTickTextAnchor",value:function(r){var i=this.props.orientation,a=Math.cos(-r.coordinate*fr),o;return a>Me?o=i==="outer"?"start":"end":a<-Me?o=i==="outer"?"end":"start":o="middle",o}},{key:"renderAxisLine",value:function(){var r=this.props,i=r.cx,a=r.cy,o=r.radius,s=r.axisLine,c=r.axisLineType,d=L(L({},b(this.props,!1)),{},{fill:"none"},b(s,!1));if(c==="circle")return u.createElement(He,D({className:"recharts-polar-angle-axis-line"},d,{cx:i,cy:a,r:o}));var f=this.props.ticks,m=f.map(function(l){return w(i,a,o,l.coordinate)});return u.createElement(Ze,D({className:"recharts-polar-angle-axis-line"},d,{points:m}))}},{key:"renderTicks",value:function(){var r=this,i=this.props,a=i.ticks,o=i.tick,s=i.tickLine,c=i.tickFormatter,d=i.stroke,f=b(this.props,!1),m=b(o,!1),l=L(L({},f),{},{fill:"none"},b(s,!1)),v=a.map(function(y,h){var g=r.getTickLineCoord(y),O=r.getTickTextAnchor(y),j=L(L(L({textAnchor:O},f),{},{stroke:"none",fill:d},m),{},{index:h,payload:y,x:g.x2,y:g.y2});return u.createElement(S,D({className:N("recharts-polar-angle-axis-tick",Ve(o)),key:"tick-".concat(y.coordinate)},Ge(r.props,y,h)),s&&u.createElement("line",D({className:"recharts-polar-angle-axis-tick-line"},l,g)),o&&e.renderTickItem(o,j,c?c(y.value,h):y.value))});return u.createElement(S,{className:"recharts-polar-angle-axis-ticks"},v)}},{key:"render",value:function(){var r=this.props,i=r.ticks,a=r.radius,o=r.axisLine;return a<=0||!i||!i.length?null:u.createElement(S,{className:N("recharts-polar-angle-axis",this.props.className)},o&&this.renderAxisLine(),this.renderTicks())}}],[{key:"renderTickItem",value:function(r,i,a){var o;return u.isValidElement(r)?o=u.cloneElement(r,i):B(r)?o=r(i):o=u.createElement(Ke,D({},i,{className:"recharts-polar-angle-axis-tick-value"}),a),o}}])})(A.PureComponent);ie(Y,"displayName","PolarAngleAxis");ie(Y,"axisType","angleAxis");ie(Y,"defaultProps",{type:"category",angleAxisId:0,scale:"auto",cx:0,cy:0,orientation:"outer",axisLine:!0,tickLine:!0,tickSize:8,tick:!0,hide:!1,allowDuplicatedCategory:!0});var ue,Ce;function pr(){if(Ce)return ue;Ce=1;function t(e){return e&&e.length?e[0]:void 0}return ue=t,ue}var fe,Be;function dr(){return Be||(Be=1,fe=pr()),fe}var mr=dr();const yr=he(mr);var hr=["key"];function W(t){"@babel/helpers - typeof";return W=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},W(t)}function vr(t,e){if(t==null)return{};var n=gr(t,e),r,i;if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);for(i=0;i<a.length;i++)r=a[i],!(e.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(t,r)&&(n[r]=t[r])}return n}function gr(t,e){if(t==null)return{};var n={};for(var r in t)if(Object.prototype.hasOwnProperty.call(t,r)){if(e.indexOf(r)>=0)continue;n[r]=t[r]}return n}function te(){return te=Object.assign?Object.assign.bind():function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t},te.apply(this,arguments)}function Fe(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(i){return Object.getOwnPropertyDescriptor(t,i).enumerable})),n.push.apply(n,r)}return n}function P(t){for(var e=1;e<arguments.length;e++){var n=arguments[e]!=null?arguments[e]:{};e%2?Fe(Object(n),!0).forEach(function(r){E(t,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):Fe(Object(n)).forEach(function(r){Object.defineProperty(t,r,Object.getOwnPropertyDescriptor(n,r))})}return t}function br(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function ze(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,tt(r.key),r)}}function xr(t,e,n){return e&&ze(t.prototype,e),n&&ze(t,n),Object.defineProperty(t,"prototype",{writable:!1}),t}function Pr(t,e,n){return e=re(e),Or(t,et()?Reflect.construct(e,n||[],re(t).constructor):e.apply(t,n))}function Or(t,e){if(e&&(W(e)==="object"||typeof e=="function"))return e;if(e!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return jr(t)}function jr(t){if(t===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}function et(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(et=function(){return!!t})()}function re(t){return re=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},re(t)}function kr(t,e){if(typeof e!="function"&&e!==null)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&ye(t,e)}function ye(t,e){return ye=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,i){return r.__proto__=i,r},ye(t,e)}function E(t,e,n){return e=tt(e),e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function tt(t){var e=wr(t,"string");return W(e)=="symbol"?e:e+""}function wr(t,e){if(W(t)!="object"||!t)return t;var n=t[Symbol.toPrimitive];if(n!==void 0){var r=n.call(t,e);if(W(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}var J=(function(t){function e(){var n;br(this,e);for(var r=arguments.length,i=new Array(r),a=0;a<r;a++)i[a]=arguments[a];return n=Pr(this,e,[].concat(i)),E(n,"state",{isAnimationFinished:!1}),E(n,"handleAnimationEnd",function(){var o=n.props.onAnimationEnd;n.setState({isAnimationFinished:!0}),B(o)&&o()}),E(n,"handleAnimationStart",function(){var o=n.props.onAnimationStart;n.setState({isAnimationFinished:!1}),B(o)&&o()}),E(n,"handleMouseEnter",function(o){var s=n.props.onMouseEnter;s&&s(n.props,o)}),E(n,"handleMouseLeave",function(o){var s=n.props.onMouseLeave;s&&s(n.props,o)}),n}return kr(e,t),xr(e,[{key:"renderDots",value:function(r){var i=this.props,a=i.dot,o=i.dataKey,s=b(this.props,!1),c=b(a,!0),d=r.map(function(f,m){var l=P(P(P({key:"dot-".concat(m),r:3},s),c),{},{dataKey:o,cx:f.x,cy:f.y,index:m,payload:f});return e.renderDotItem(a,l)});return u.createElement(S,{className:"recharts-radar-dots"},d)}},{key:"renderPolygonStatically",value:function(r){var i=this.props,a=i.shape,o=i.dot,s=i.isRange,c=i.baseLinePoints,d=i.connectNulls,f;return u.isValidElement(a)?f=u.cloneElement(a,P(P({},this.props),{},{points:r})):B(a)?f=a(P(P({},this.props),{},{points:r})):f=u.createElement(Ze,te({},b(this.props,!0),{onMouseEnter:this.handleMouseEnter,onMouseLeave:this.handleMouseLeave,points:r,baseLinePoints:s?c:null,connectNulls:d})),u.createElement(S,{className:"recharts-radar-polygon"},f,o?this.renderDots(r):null)}},{key:"renderPolygonWithAnimation",value:function(){var r=this,i=this.props,a=i.points,o=i.isAnimationActive,s=i.animationBegin,c=i.animationDuration,d=i.animationEasing,f=i.animationId,m=this.state.prevPoints;return u.createElement(dt,{begin:s,duration:c,isActive:o,easing:d,from:{t:0},to:{t:1},key:"radar-".concat(f),onAnimationEnd:this.handleAnimationEnd,onAnimationStart:this.handleAnimationStart},function(l){var v=l.t,y=m&&m.length/a.length,h=a.map(function(g,O){var j=m&&m[Math.floor(O*y)];if(j){var ae=X(j.x,g.x),oe=X(j.y,g.y);return P(P({},g),{},{x:ae(v),y:oe(v)})}var x=X(g.cx,g.x),$=X(g.cy,g.y);return P(P({},g),{},{x:x(v),y:$(v)})});return r.renderPolygonStatically(h)})}},{key:"renderPolygon",value:function(){var r=this.props,i=r.points,a=r.isAnimationActive,o=r.isRange,s=this.state.prevPoints;return a&&i&&i.length&&!o&&(!s||!mt(s,i))?this.renderPolygonWithAnimation():this.renderPolygonStatically(i)}},{key:"render",value:function(){var r=this.props,i=r.hide,a=r.className,o=r.points,s=r.isAnimationActive;if(i||!o||!o.length)return null;var c=this.state.isAnimationFinished,d=N("recharts-radar",a);return u.createElement(S,{className:d},this.renderPolygon(),(!s||c)&&yt.renderCallByParent(this.props,o))}}],[{key:"getDerivedStateFromProps",value:function(r,i){return r.animationId!==i.prevAnimationId?{prevAnimationId:r.animationId,curPoints:r.points,prevPoints:i.curPoints}:r.points!==i.curPoints?{curPoints:r.points}:null}},{key:"renderDotItem",value:function(r,i){var a;if(u.isValidElement(r))a=u.cloneElement(r,i);else if(B(r))a=r(i);else{var o=i.key,s=vr(i,hr);a=u.createElement(He,te({},s,{key:o,className:N("recharts-radar-dot",typeof r!="boolean"?r.className:"")}))}return a}}])})(A.PureComponent);E(J,"displayName","Radar");E(J,"defaultProps",{angleAxisId:0,radiusAxisId:0,hide:!1,activeDot:!0,dot:!1,legendType:"rect",isAnimationActive:!ht.isSsr,animationBegin:0,animationDuration:1500,animationEasing:"ease"});E(J,"getComposedData",function(t){var e=t.radiusAxis,n=t.angleAxis,r=t.displayedData,i=t.dataKey,a=t.bandSize,o=n.cx,s=n.cy,c=!1,d=[],f=n.type!=="number"?a??0:0;r.forEach(function(l,v){var y=we(l,n.dataKey,v),h=we(l,i),g=n.scale(y)+f,O=Array.isArray(h)?vt(h):h,j=_e(O)?void 0:e.scale(O);Array.isArray(h)&&h.length>=2&&(c=!0),d.push(P(P({},w(o,s,j,g)),{},{name:y,value:h,cx:o,cy:s,radius:j,angle:g,payload:l}))});var m=[];return c&&d.forEach(function(l){if(Array.isArray(l.value)){var v=yr(l.value),y=_e(v)?void 0:e.scale(v);m.push(P(P({},l),{},{radius:y},w(o,s,y,l.angle)))}else m.push(l)}),{points:d,isRange:c,baseLinePoints:m}});var _r=gt({chartName:"RadarChart",GraphicalChild:J,axisComponents:[{axisType:"angleAxis",AxisComp:Y},{axisType:"radiusAxis",AxisComp:U}],formatAxisMap:bt,defaultProps:{layout:"centric",startAngle:90,endAngle:-270,cx:"50%",cy:"50%",innerRadius:0,outerRadius:"80%"}});const zr=()=>{const{userProfile:t}=it(),[e,n]=A.useState([]),[r,i]=A.useState([]),[a,o]=A.useState("N/A"),[s,c]=A.useState(!0),[d,f]=A.useState(!1),m=["#1FA7E1","#9956DE","#75D06A","#FFB356","#7274ED","#FF8B8B","#6ED1CF","#FB96BB"];return A.useEffect(()=>{if(!t?.uid){c(!1);return}const l=t.role==="student"?t.grade:null,y=st(l)[0]??"gen-math",h=ke.find(x=>x.id===y)?.modules||[],g=new Map;ke.forEach(x=>{x.modules.forEach($=>g.set($.id,x.id))});const O=h.map((x,$)=>({id:x.id,name:x.title.length>15?x.title.substring(0,15).trim()+"...":x.title,color:m[$%m.length]}));i(O);const j=[{key:"progress",label:"Overall Mastery"},{key:"concept",label:"Concept Grasp"},{key:"application",label:"Application"},{key:"engagement",label:"Engagement"},{key:"consistency",label:"Consistency"}],ae=x=>{let $=-1,ve="N/A";const ge=j.map(_=>{const K={metric:_.label,fullMark:100};return h.forEach(k=>{const I=g.get(k.id),M=I?x?.subjects?.[I]?.modulesProgress?.[k.id]:null,be=M?.progress||0,rt=x?.lessons??{},xe=k.lessons.length?k.lessons.reduce((Oe,je)=>{const se=rt?.[je.id]?.progressPercent;if(typeof se=="number"&&Number.isFinite(se))return Oe+Math.max(0,Math.min(100,se));const nt=!!M?.lessonsCompleted?.includes?.(je.id);return Oe+(nt?100:0)},0)/k.lessons.length:0,Pe=k.quizzes.length?(M?.quizzesCompleted?.length||0)/k.quizzes.length*100:0;let C=0;_.key==="progress"?C=be:_.key==="concept"?C=xe:_.key==="application"?C=Pe:_.key==="engagement"?C=Math.min(100,(xe+Pe*2)/1.5):_.key==="consistency"&&(C=Math.min(100,40+be*.6)),K[k.id]=C||0}),K});h.forEach(_=>{let K=0;ge.forEach(I=>{const M=I[_.id];K+=typeof M=="number"?M:0});const k=K/j.length;k>$&&($=k,ve=O.find(I=>I.id===_.id)?.name||"N/A")}),o(ve),n(ge),c(!1)};c(!0);const oe=at(t.uid,x=>{ae(x)});return()=>oe()},[t?.uid]),p.jsxs(ot.div,{initial:{opacity:0,y:20},animate:{opacity:1,y:0},transition:{duration:.5,ease:[.22,1,.36,1]},className:"relative overflow-hidden bg-white/80 backdrop-blur-xl border border-white/50 shadow-[0_8px_30px_rgb(0,0,0,0.04)] rounded-[2rem] p-6 lg:p-8 isolate group",onMouseEnter:()=>f(!0),onMouseLeave:()=>f(!1),children:[p.jsx("div",{className:"absolute top-0 right-0 w-64 h-64 bg-violet-400/5 rounded-full blur-3xl -translate-y-1/2 translate-x-1/4"}),p.jsx("div",{className:"absolute bottom-0 left-0 w-48 h-48 bg-rose-400/5 rounded-full blur-3xl translate-y-1/3 -translate-x-1/3"}),p.jsxs("div",{className:"flex flex-col sm:flex-row items-start sm:items-center justify-between mb-8 relative z-10 gap-4",children:[p.jsxs("div",{children:[p.jsxs("div",{className:"flex items-center gap-2 mb-1",children:[p.jsx("span",{className:"p-2 bg-violet-100 text-violet-600 rounded-xl",children:p.jsx(ct,{size:20,className:"stroke-[2.5]"})}),p.jsx("h3",{className:"text-xl font-display font-extrabold text-[#0a1628] tracking-tight",children:"Competency Matrix"})]}),p.jsx("p",{className:"text-sm text-[#5a6578] font-body ml-12",children:"Your realtime performance across modules"})]}),p.jsxs("div",{className:"flex items-center gap-3 bg-slate-50 border border-slate-100 px-4 py-2 rounded-2xl ml-12 sm:ml-0",children:[p.jsx("div",{className:"flex items-center justify-center w-8 h-8 rounded-full bg-white shadow-sm border border-slate-100",children:p.jsx(lt,{size:14,className:"text-amber-500"})}),p.jsxs("div",{children:[p.jsx("p",{className:"text-[10px] font-bold text-slate-400 uppercase tracking-wider",children:"Top Module"}),p.jsx("p",{className:"text-sm font-bold text-slate-700",children:a})]})]})]}),p.jsx("div",{className:"h-[300px] sm:h-[360px] w-full relative z-10",children:s?p.jsx("div",{className:"w-full h-full flex items-center justify-center",children:p.jsxs("div",{className:"flex flex-col items-center gap-3",children:[p.jsx("div",{className:"w-8 h-8 border-4 border-violet-200 border-t-violet-500 rounded-full animate-spin"}),p.jsx("p",{className:"text-sm text-slate-400 font-medium",children:"Analyzing skill vectors..."})]})}):p.jsx(xt,{width:"100%",height:"100%",children:p.jsxs(_r,{cx:"50%",cy:"50%",outerRadius:d?"75%":"70%",data:e,children:[p.jsx(Ue,{stroke:"#e2e8f0",strokeDasharray:"4 4",polarRadius:[20,40,60,80,100]}),p.jsx(Y,{dataKey:"metric",tick:{fill:"#475569",fontSize:12,fontWeight:600,fontFamily:"Inter, sans-serif"}}),p.jsx(U,{angle:90,domain:[0,100],tick:{fill:"#94a3b8",fontSize:10},tickCount:6,axisLine:!1}),r.map(l=>p.jsx(J,{name:l.name,dataKey:l.id,stroke:l.color,strokeWidth:2,fill:l.color,fillOpacity:.35,dot:{r:3,fill:"#fff",stroke:l.color,strokeWidth:2},activeDot:{r:5,fill:l.color,stroke:"#fff",strokeWidth:2},isAnimationActive:!0,animationDuration:1500,animationEasing:"ease-out"},l.id)),p.jsx(Pt,{cursor:!1,content:({active:l,payload:v})=>l&&v&&v.length?p.jsxs("div",{className:"bg-white/95 backdrop-blur shadow-[0_10px_40px_-10px_rgba(0,0,0,0.15)] border border-slate-100 rounded-xl p-4",children:[p.jsx("p",{className:"font-display font-bold text-slate-800 text-sm mb-3",children:v[0].payload.metric}),p.jsx("div",{className:"flex flex-col gap-2",children:v.map(y=>p.jsxs("div",{className:"flex items-center justify-between gap-4",children:[p.jsxs("div",{className:"flex items-center gap-2",children:[p.jsx("div",{className:"w-2 h-2 rounded-full",style:{backgroundColor:y.stroke}}),p.jsx("span",{className:"text-xs font-bold text-slate-600 uppercase tracking-wide truncate max-w-[120px]",title:String(y.name),children:String(y.name)})]}),p.jsxs("span",{className:"text-sm font-black",style:{color:y.stroke},children:[Math.round(y.value),"%"]})]},y.name))})]}):null})]})})}),!s&&r.length>0&&p.jsx("div",{className:"flex flex-wrap justify-center items-center gap-3 md:gap-5 mt-[5px] z-10 relative",children:r.map(l=>p.jsxs("div",{className:"flex items-center gap-1.5",children:[p.jsx("div",{className:"w-2.5 h-2.5 rounded-full",style:{backgroundColor:l.color}}),p.jsx("span",{className:"text-[10px] font-bold text-slate-600 uppercase tracking-widest",children:l.name.length>15?l.name.substring(0,12)+"...":l.name})]},l.id))})]})};export{zr as CompetencyRadarChart};
 
1
+ import{c as u,g as he,r as A,j as p}from"./vendor-react-Dexh7fmo.js";import{u as it,p as at,m as ot}from"./index-D4nJsLyx.js";import{g as st,s as ke}from"./subjects-DDBtpdiA.js";import{B as ct}from"./brain-CPvGdgWE.js";import{S as lt}from"./sparkles-CXUFmaBJ.js";import{f as b,x as w,y as qe,z as ut,A as We,D as ft,b as B,T as Ke,L as S,E as Ve,d as Ge,e as pt,F as He,H as dt,I as X,J as mt,K as yt,G as ht,M as we,N as vt,O as _e,r as gt,P as bt,R as xt,v as Pt}from"./generateCategoricalChart-CiUYzAvW.js";import{c as N}from"./clsx-B-dksMZM.js";import"./vendor-firebase-auth-COrkgW0P.js";import"./vendor-firebase-core-DQ-pMjxd.js";import"./vendor-firebase-firestore-BML5nJHm.js";import"./vendor-firebase-storage-BOeKE_0n.js";import"./vendor-firebase-analytics-CCo6E2f7.js";import"./trending-up-D-vj8Gbq.js";import"./chart-column-D5mAWcRx.js";var Ot=["points","className","baseLinePoints","connectNulls"];function F(){return F=Object.assign?Object.assign.bind():function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t},F.apply(this,arguments)}function jt(t,e){if(t==null)return{};var n=kt(t,e),r,i;if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);for(i=0;i<a.length;i++)r=a[i],!(e.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(t,r)&&(n[r]=t[r])}return n}function kt(t,e){if(t==null)return{};var n={};for(var r in t)if(Object.prototype.hasOwnProperty.call(t,r)){if(e.indexOf(r)>=0)continue;n[r]=t[r]}return n}function Ae(t){return Et(t)||At(t)||_t(t)||wt()}function wt(){throw new TypeError(`Invalid attempt to spread non-iterable instance.
2
  In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function _t(t,e){if(t){if(typeof t=="string")return pe(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);if(n==="Object"&&t.constructor&&(n=t.constructor.name),n==="Map"||n==="Set")return Array.from(t);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return pe(t,e)}}function At(t){if(typeof Symbol<"u"&&t[Symbol.iterator]!=null||t["@@iterator"]!=null)return Array.from(t)}function Et(t){if(Array.isArray(t))return pe(t)}function pe(t,e){(e==null||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n<e;n++)r[n]=t[n];return r}var Ee=function(e){return e&&e.x===+e.x&&e.y===+e.y},St=function(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[],n=[[]];return e.forEach(function(r){Ee(r)?n[n.length-1].push(r):n[n.length-1].length>0&&n.push([])}),Ee(e[0])&&n[n.length-1].push(e[0]),n[n.length-1].length<=0&&(n=n.slice(0,-1)),n},V=function(e,n){var r=St(e);n&&(r=[r.reduce(function(a,o){return[].concat(Ae(a),Ae(o))},[])]);var i=r.map(function(a){return a.reduce(function(o,s,c){return"".concat(o).concat(c===0?"M":"L").concat(s.x,",").concat(s.y)},"")}).join("");return r.length===1?"".concat(i,"Z"):i},Nt=function(e,n,r){var i=V(e,r);return"".concat(i.slice(-1)==="Z"?i.slice(0,-1):i,"L").concat(V(n.reverse(),r).slice(1))},Ze=function(e){var n=e.points,r=e.className,i=e.baseLinePoints,a=e.connectNulls,o=jt(e,Ot);if(!n||!n.length)return null;var s=N("recharts-polygon",r);if(i&&i.length){var c=o.stroke&&o.stroke!=="none",d=Nt(n,i,a);return u.createElement("g",{className:s},u.createElement("path",F({},b(o,!0),{fill:d.slice(-1)==="Z"?o.fill:"none",stroke:"none",d})),c?u.createElement("path",F({},b(o,!0),{fill:"none",d:V(n,a)})):null,c?u.createElement("path",F({},b(o,!0),{fill:"none",d:V(i,a)})):null)}var f=V(n,a);return u.createElement("path",F({},b(o,!0),{fill:f.slice(-1)==="Z"?o.fill:"none",className:s,d:f}))},Tt=["cx","cy","innerRadius","outerRadius","gridType","radialLines"];function H(t){"@babel/helpers - typeof";return H=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},H(t)}function $t(t,e){if(t==null)return{};var n=Rt(t,e),r,i;if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);for(i=0;i<a.length;i++)r=a[i],!(e.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(t,r)&&(n[r]=t[r])}return n}function Rt(t,e){if(t==null)return{};var n={};for(var r in t)if(Object.prototype.hasOwnProperty.call(t,r)){if(e.indexOf(r)>=0)continue;n[r]=t[r]}return n}function T(){return T=Object.assign?Object.assign.bind():function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t},T.apply(this,arguments)}function Se(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(i){return Object.getOwnPropertyDescriptor(t,i).enumerable})),n.push.apply(n,r)}return n}function Z(t){for(var e=1;e<arguments.length;e++){var n=arguments[e]!=null?arguments[e]:{};e%2?Se(Object(n),!0).forEach(function(r){Lt(t,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):Se(Object(n)).forEach(function(r){Object.defineProperty(t,r,Object.getOwnPropertyDescriptor(n,r))})}return t}function Lt(t,e,n){return e=Dt(e),e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function Dt(t){var e=It(t,"string");return H(e)=="symbol"?e:e+""}function It(t,e){if(H(t)!="object"||!t)return t;var n=t[Symbol.toPrimitive];if(n!==void 0){var r=n.call(t,e);if(H(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(e==="string"?String:Number)(t)}var Mt=function(e,n,r,i){var a="";return i.forEach(function(o,s){var c=w(n,r,e,o);s?a+="L ".concat(c.x,",").concat(c.y):a+="M ".concat(c.x,",").concat(c.y)}),a+="Z",a},Ct=function(e){var n=e.cx,r=e.cy,i=e.innerRadius,a=e.outerRadius,o=e.polarAngles,s=e.radialLines;if(!o||!o.length||!s)return null;var c=Z({stroke:"#ccc"},b(e,!1));return u.createElement("g",{className:"recharts-polar-grid-angle"},o.map(function(d){var f=w(n,r,i,d),m=w(n,r,a,d);return u.createElement("line",T({},c,{key:"line-".concat(d),x1:f.x,y1:f.y,x2:m.x,y2:m.y}))}))},Bt=function(e){var n=e.cx,r=e.cy,i=e.radius,a=e.index,o=Z(Z({stroke:"#ccc"},b(e,!1)),{},{fill:"none"});return u.createElement("circle",T({},o,{className:N("recharts-polar-grid-concentric-circle",e.className),key:"circle-".concat(a),cx:n,cy:r,r:i}))},Ft=function(e){var n=e.radius,r=e.index,i=Z(Z({stroke:"#ccc"},b(e,!1)),{},{fill:"none"});return u.createElement("path",T({},i,{className:N("recharts-polar-grid-concentric-polygon",e.className),key:"path-".concat(r),d:Mt(n,e.cx,e.cy,e.polarAngles)}))},zt=function(e){var n=e.polarRadius,r=e.gridType;return!n||!n.length?null:u.createElement("g",{className:"recharts-polar-grid-concentric"},n.map(function(i,a){var o=a;return r==="circle"?u.createElement(Bt,T({key:o},e,{radius:i,index:a})):u.createElement(Ft,T({key:o},e,{radius:i,index:a}))}))},Ue=function(e){var n=e.cx,r=n===void 0?0:n,i=e.cy,a=i===void 0?0:i,o=e.innerRadius,s=o===void 0?0:o,c=e.outerRadius,d=c===void 0?0:c,f=e.gridType,m=f===void 0?"polygon":f,l=e.radialLines,v=l===void 0?!0:l,y=$t(e,Tt);return d<=0?null:u.createElement("g",{className:"recharts-polar-grid"},u.createElement(Ct,T({cx:r,cy:a,innerRadius:s,outerRadius:d,gridType:m,radialLines:v},y)),u.createElement(zt,T({cx:r,cy:a,innerRadius:s,outerRadius:d,gridType:m,radialLines:v},y)))};Ue.displayName="PolarGrid";var ce,Ne;function qt(){if(Ne)return ce;Ne=1;var t=qe(),e=ut(),n=We();function r(i,a){return i&&i.length?t(i,n(a,2),e):void 0}return ce=r,ce}var Wt=qt();const Kt=he(Wt);var le,Te;function Vt(){if(Te)return le;Te=1;var t=qe(),e=We(),n=ft();function r(i,a){return i&&i.length?t(i,e(a,2),n):void 0}return le=r,le}var Gt=Vt();const Ht=he(Gt);var Zt=["cx","cy","angle","ticks","axisLine"],Ut=["ticks","tick","angle","tickFormatter","stroke"];function z(t){"@babel/helpers - typeof";return z=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},z(t)}function G(){return G=Object.assign?Object.assign.bind():function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t},G.apply(this,arguments)}function $e(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(i){return Object.getOwnPropertyDescriptor(t,i).enumerable})),n.push.apply(n,r)}return n}function R(t){for(var e=1;e<arguments.length;e++){var n=arguments[e]!=null?arguments[e]:{};e%2?$e(Object(n),!0).forEach(function(r){ne(t,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):$e(Object(n)).forEach(function(r){Object.defineProperty(t,r,Object.getOwnPropertyDescriptor(n,r))})}return t}function Re(t,e){if(t==null)return{};var n=Yt(t,e),r,i;if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);for(i=0;i<a.length;i++)r=a[i],!(e.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(t,r)&&(n[r]=t[r])}return n}function Yt(t,e){if(t==null)return{};var n={};for(var r in t)if(Object.prototype.hasOwnProperty.call(t,r)){if(e.indexOf(r)>=0)continue;n[r]=t[r]}return n}function Jt(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function Le(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,Je(r.key),r)}}function Xt(t,e,n){return e&&Le(t.prototype,e),n&&Le(t,n),Object.defineProperty(t,"prototype",{writable:!1}),t}function Qt(t,e,n){return e=Q(e),er(t,Ye()?Reflect.construct(e,n||[],Q(t).constructor):e.apply(t,n))}function er(t,e){if(e&&(z(e)==="object"||typeof e=="function"))return e;if(e!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return tr(t)}function tr(t){if(t===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}function Ye(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(Ye=function(){return!!t})()}function Q(t){return Q=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},Q(t)}function rr(t,e){if(typeof e!="function"&&e!==null)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&de(t,e)}function de(t,e){return de=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,i){return r.__proto__=i,r},de(t,e)}function ne(t,e,n){return e=Je(e),e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function Je(t){var e=nr(t,"string");return z(e)=="symbol"?e:e+""}function nr(t,e){if(z(t)!="object"||!t)return t;var n=t[Symbol.toPrimitive];if(n!==void 0){var r=n.call(t,e);if(z(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}var U=(function(t){function e(){return Jt(this,e),Qt(this,e,arguments)}return rr(e,t),Xt(e,[{key:"getTickValueCoord",value:function(r){var i=r.coordinate,a=this.props,o=a.angle,s=a.cx,c=a.cy;return w(s,c,i,o)}},{key:"getTickTextAnchor",value:function(){var r=this.props.orientation,i;switch(r){case"left":i="end";break;case"right":i="start";break;default:i="middle";break}return i}},{key:"getViewBox",value:function(){var r=this.props,i=r.cx,a=r.cy,o=r.angle,s=r.ticks,c=Kt(s,function(f){return f.coordinate||0}),d=Ht(s,function(f){return f.coordinate||0});return{cx:i,cy:a,startAngle:o,endAngle:o,innerRadius:d.coordinate||0,outerRadius:c.coordinate||0}}},{key:"renderAxisLine",value:function(){var r=this.props,i=r.cx,a=r.cy,o=r.angle,s=r.ticks,c=r.axisLine,d=Re(r,Zt),f=s.reduce(function(y,h){return[Math.min(y[0],h.coordinate),Math.max(y[1],h.coordinate)]},[1/0,-1/0]),m=w(i,a,f[0],o),l=w(i,a,f[1],o),v=R(R(R({},b(d,!1)),{},{fill:"none"},b(c,!1)),{},{x1:m.x,y1:m.y,x2:l.x,y2:l.y});return u.createElement("line",G({className:"recharts-polar-radius-axis-line"},v))}},{key:"renderTicks",value:function(){var r=this,i=this.props,a=i.ticks,o=i.tick,s=i.angle,c=i.tickFormatter,d=i.stroke,f=Re(i,Ut),m=this.getTickTextAnchor(),l=b(f,!1),v=b(o,!1),y=a.map(function(h,g){var O=r.getTickValueCoord(h),j=R(R(R(R({textAnchor:m,transform:"rotate(".concat(90-s,", ").concat(O.x,", ").concat(O.y,")")},l),{},{stroke:"none",fill:d},v),{},{index:g},O),{},{payload:h});return u.createElement(S,G({className:N("recharts-polar-radius-axis-tick",Ve(o)),key:"tick-".concat(h.coordinate)},Ge(r.props,h,g)),e.renderTickItem(o,j,c?c(h.value,g):h.value))});return u.createElement(S,{className:"recharts-polar-radius-axis-ticks"},y)}},{key:"render",value:function(){var r=this.props,i=r.ticks,a=r.axisLine,o=r.tick;return!i||!i.length?null:u.createElement(S,{className:N("recharts-polar-radius-axis",this.props.className)},a&&this.renderAxisLine(),o&&this.renderTicks(),pt.renderCallByParent(this.props,this.getViewBox()))}}],[{key:"renderTickItem",value:function(r,i,a){var o;return u.isValidElement(r)?o=u.cloneElement(r,i):B(r)?o=r(i):o=u.createElement(Ke,G({},i,{className:"recharts-polar-radius-axis-tick-value"}),a),o}}])})(A.PureComponent);ne(U,"displayName","PolarRadiusAxis");ne(U,"axisType","radiusAxis");ne(U,"defaultProps",{type:"number",radiusAxisId:0,cx:0,cy:0,angle:0,orientation:"right",stroke:"#ccc",axisLine:!0,tick:!0,tickCount:5,allowDataOverflow:!1,scale:"auto",allowDuplicatedCategory:!0});function q(t){"@babel/helpers - typeof";return q=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},q(t)}function D(){return D=Object.assign?Object.assign.bind():function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t},D.apply(this,arguments)}function De(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(i){return Object.getOwnPropertyDescriptor(t,i).enumerable})),n.push.apply(n,r)}return n}function L(t){for(var e=1;e<arguments.length;e++){var n=arguments[e]!=null?arguments[e]:{};e%2?De(Object(n),!0).forEach(function(r){ie(t,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):De(Object(n)).forEach(function(r){Object.defineProperty(t,r,Object.getOwnPropertyDescriptor(n,r))})}return t}function ir(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function Ie(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,Qe(r.key),r)}}function ar(t,e,n){return e&&Ie(t.prototype,e),n&&Ie(t,n),Object.defineProperty(t,"prototype",{writable:!1}),t}function or(t,e,n){return e=ee(e),sr(t,Xe()?Reflect.construct(e,n||[],ee(t).constructor):e.apply(t,n))}function sr(t,e){if(e&&(q(e)==="object"||typeof e=="function"))return e;if(e!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return cr(t)}function cr(t){if(t===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}function Xe(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(Xe=function(){return!!t})()}function ee(t){return ee=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},ee(t)}function lr(t,e){if(typeof e!="function"&&e!==null)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&me(t,e)}function me(t,e){return me=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,i){return r.__proto__=i,r},me(t,e)}function ie(t,e,n){return e=Qe(e),e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function Qe(t){var e=ur(t,"string");return q(e)=="symbol"?e:e+""}function ur(t,e){if(q(t)!="object"||!t)return t;var n=t[Symbol.toPrimitive];if(n!==void 0){var r=n.call(t,e);if(q(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}var fr=Math.PI/180,Me=1e-5,Y=(function(t){function e(){return ir(this,e),or(this,e,arguments)}return lr(e,t),ar(e,[{key:"getTickLineCoord",value:function(r){var i=this.props,a=i.cx,o=i.cy,s=i.radius,c=i.orientation,d=i.tickSize,f=d||8,m=w(a,o,s,r.coordinate),l=w(a,o,s+(c==="inner"?-1:1)*f,r.coordinate);return{x1:m.x,y1:m.y,x2:l.x,y2:l.y}}},{key:"getTickTextAnchor",value:function(r){var i=this.props.orientation,a=Math.cos(-r.coordinate*fr),o;return a>Me?o=i==="outer"?"start":"end":a<-Me?o=i==="outer"?"end":"start":o="middle",o}},{key:"renderAxisLine",value:function(){var r=this.props,i=r.cx,a=r.cy,o=r.radius,s=r.axisLine,c=r.axisLineType,d=L(L({},b(this.props,!1)),{},{fill:"none"},b(s,!1));if(c==="circle")return u.createElement(He,D({className:"recharts-polar-angle-axis-line"},d,{cx:i,cy:a,r:o}));var f=this.props.ticks,m=f.map(function(l){return w(i,a,o,l.coordinate)});return u.createElement(Ze,D({className:"recharts-polar-angle-axis-line"},d,{points:m}))}},{key:"renderTicks",value:function(){var r=this,i=this.props,a=i.ticks,o=i.tick,s=i.tickLine,c=i.tickFormatter,d=i.stroke,f=b(this.props,!1),m=b(o,!1),l=L(L({},f),{},{fill:"none"},b(s,!1)),v=a.map(function(y,h){var g=r.getTickLineCoord(y),O=r.getTickTextAnchor(y),j=L(L(L({textAnchor:O},f),{},{stroke:"none",fill:d},m),{},{index:h,payload:y,x:g.x2,y:g.y2});return u.createElement(S,D({className:N("recharts-polar-angle-axis-tick",Ve(o)),key:"tick-".concat(y.coordinate)},Ge(r.props,y,h)),s&&u.createElement("line",D({className:"recharts-polar-angle-axis-tick-line"},l,g)),o&&e.renderTickItem(o,j,c?c(y.value,h):y.value))});return u.createElement(S,{className:"recharts-polar-angle-axis-ticks"},v)}},{key:"render",value:function(){var r=this.props,i=r.ticks,a=r.radius,o=r.axisLine;return a<=0||!i||!i.length?null:u.createElement(S,{className:N("recharts-polar-angle-axis",this.props.className)},o&&this.renderAxisLine(),this.renderTicks())}}],[{key:"renderTickItem",value:function(r,i,a){var o;return u.isValidElement(r)?o=u.cloneElement(r,i):B(r)?o=r(i):o=u.createElement(Ke,D({},i,{className:"recharts-polar-angle-axis-tick-value"}),a),o}}])})(A.PureComponent);ie(Y,"displayName","PolarAngleAxis");ie(Y,"axisType","angleAxis");ie(Y,"defaultProps",{type:"category",angleAxisId:0,scale:"auto",cx:0,cy:0,orientation:"outer",axisLine:!0,tickLine:!0,tickSize:8,tick:!0,hide:!1,allowDuplicatedCategory:!0});var ue,Ce;function pr(){if(Ce)return ue;Ce=1;function t(e){return e&&e.length?e[0]:void 0}return ue=t,ue}var fe,Be;function dr(){return Be||(Be=1,fe=pr()),fe}var mr=dr();const yr=he(mr);var hr=["key"];function W(t){"@babel/helpers - typeof";return W=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},W(t)}function vr(t,e){if(t==null)return{};var n=gr(t,e),r,i;if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);for(i=0;i<a.length;i++)r=a[i],!(e.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(t,r)&&(n[r]=t[r])}return n}function gr(t,e){if(t==null)return{};var n={};for(var r in t)if(Object.prototype.hasOwnProperty.call(t,r)){if(e.indexOf(r)>=0)continue;n[r]=t[r]}return n}function te(){return te=Object.assign?Object.assign.bind():function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t},te.apply(this,arguments)}function Fe(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(i){return Object.getOwnPropertyDescriptor(t,i).enumerable})),n.push.apply(n,r)}return n}function P(t){for(var e=1;e<arguments.length;e++){var n=arguments[e]!=null?arguments[e]:{};e%2?Fe(Object(n),!0).forEach(function(r){E(t,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):Fe(Object(n)).forEach(function(r){Object.defineProperty(t,r,Object.getOwnPropertyDescriptor(n,r))})}return t}function br(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function ze(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,tt(r.key),r)}}function xr(t,e,n){return e&&ze(t.prototype,e),n&&ze(t,n),Object.defineProperty(t,"prototype",{writable:!1}),t}function Pr(t,e,n){return e=re(e),Or(t,et()?Reflect.construct(e,n||[],re(t).constructor):e.apply(t,n))}function Or(t,e){if(e&&(W(e)==="object"||typeof e=="function"))return e;if(e!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return jr(t)}function jr(t){if(t===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}function et(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(et=function(){return!!t})()}function re(t){return re=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},re(t)}function kr(t,e){if(typeof e!="function"&&e!==null)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&ye(t,e)}function ye(t,e){return ye=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,i){return r.__proto__=i,r},ye(t,e)}function E(t,e,n){return e=tt(e),e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function tt(t){var e=wr(t,"string");return W(e)=="symbol"?e:e+""}function wr(t,e){if(W(t)!="object"||!t)return t;var n=t[Symbol.toPrimitive];if(n!==void 0){var r=n.call(t,e);if(W(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}var J=(function(t){function e(){var n;br(this,e);for(var r=arguments.length,i=new Array(r),a=0;a<r;a++)i[a]=arguments[a];return n=Pr(this,e,[].concat(i)),E(n,"state",{isAnimationFinished:!1}),E(n,"handleAnimationEnd",function(){var o=n.props.onAnimationEnd;n.setState({isAnimationFinished:!0}),B(o)&&o()}),E(n,"handleAnimationStart",function(){var o=n.props.onAnimationStart;n.setState({isAnimationFinished:!1}),B(o)&&o()}),E(n,"handleMouseEnter",function(o){var s=n.props.onMouseEnter;s&&s(n.props,o)}),E(n,"handleMouseLeave",function(o){var s=n.props.onMouseLeave;s&&s(n.props,o)}),n}return kr(e,t),xr(e,[{key:"renderDots",value:function(r){var i=this.props,a=i.dot,o=i.dataKey,s=b(this.props,!1),c=b(a,!0),d=r.map(function(f,m){var l=P(P(P({key:"dot-".concat(m),r:3},s),c),{},{dataKey:o,cx:f.x,cy:f.y,index:m,payload:f});return e.renderDotItem(a,l)});return u.createElement(S,{className:"recharts-radar-dots"},d)}},{key:"renderPolygonStatically",value:function(r){var i=this.props,a=i.shape,o=i.dot,s=i.isRange,c=i.baseLinePoints,d=i.connectNulls,f;return u.isValidElement(a)?f=u.cloneElement(a,P(P({},this.props),{},{points:r})):B(a)?f=a(P(P({},this.props),{},{points:r})):f=u.createElement(Ze,te({},b(this.props,!0),{onMouseEnter:this.handleMouseEnter,onMouseLeave:this.handleMouseLeave,points:r,baseLinePoints:s?c:null,connectNulls:d})),u.createElement(S,{className:"recharts-radar-polygon"},f,o?this.renderDots(r):null)}},{key:"renderPolygonWithAnimation",value:function(){var r=this,i=this.props,a=i.points,o=i.isAnimationActive,s=i.animationBegin,c=i.animationDuration,d=i.animationEasing,f=i.animationId,m=this.state.prevPoints;return u.createElement(dt,{begin:s,duration:c,isActive:o,easing:d,from:{t:0},to:{t:1},key:"radar-".concat(f),onAnimationEnd:this.handleAnimationEnd,onAnimationStart:this.handleAnimationStart},function(l){var v=l.t,y=m&&m.length/a.length,h=a.map(function(g,O){var j=m&&m[Math.floor(O*y)];if(j){var ae=X(j.x,g.x),oe=X(j.y,g.y);return P(P({},g),{},{x:ae(v),y:oe(v)})}var x=X(g.cx,g.x),$=X(g.cy,g.y);return P(P({},g),{},{x:x(v),y:$(v)})});return r.renderPolygonStatically(h)})}},{key:"renderPolygon",value:function(){var r=this.props,i=r.points,a=r.isAnimationActive,o=r.isRange,s=this.state.prevPoints;return a&&i&&i.length&&!o&&(!s||!mt(s,i))?this.renderPolygonWithAnimation():this.renderPolygonStatically(i)}},{key:"render",value:function(){var r=this.props,i=r.hide,a=r.className,o=r.points,s=r.isAnimationActive;if(i||!o||!o.length)return null;var c=this.state.isAnimationFinished,d=N("recharts-radar",a);return u.createElement(S,{className:d},this.renderPolygon(),(!s||c)&&yt.renderCallByParent(this.props,o))}}],[{key:"getDerivedStateFromProps",value:function(r,i){return r.animationId!==i.prevAnimationId?{prevAnimationId:r.animationId,curPoints:r.points,prevPoints:i.curPoints}:r.points!==i.curPoints?{curPoints:r.points}:null}},{key:"renderDotItem",value:function(r,i){var a;if(u.isValidElement(r))a=u.cloneElement(r,i);else if(B(r))a=r(i);else{var o=i.key,s=vr(i,hr);a=u.createElement(He,te({},s,{key:o,className:N("recharts-radar-dot",typeof r!="boolean"?r.className:"")}))}return a}}])})(A.PureComponent);E(J,"displayName","Radar");E(J,"defaultProps",{angleAxisId:0,radiusAxisId:0,hide:!1,activeDot:!0,dot:!1,legendType:"rect",isAnimationActive:!ht.isSsr,animationBegin:0,animationDuration:1500,animationEasing:"ease"});E(J,"getComposedData",function(t){var e=t.radiusAxis,n=t.angleAxis,r=t.displayedData,i=t.dataKey,a=t.bandSize,o=n.cx,s=n.cy,c=!1,d=[],f=n.type!=="number"?a??0:0;r.forEach(function(l,v){var y=we(l,n.dataKey,v),h=we(l,i),g=n.scale(y)+f,O=Array.isArray(h)?vt(h):h,j=_e(O)?void 0:e.scale(O);Array.isArray(h)&&h.length>=2&&(c=!0),d.push(P(P({},w(o,s,j,g)),{},{name:y,value:h,cx:o,cy:s,radius:j,angle:g,payload:l}))});var m=[];return c&&d.forEach(function(l){if(Array.isArray(l.value)){var v=yr(l.value),y=_e(v)?void 0:e.scale(v);m.push(P(P({},l),{},{radius:y},w(o,s,y,l.angle)))}else m.push(l)}),{points:d,isRange:c,baseLinePoints:m}});var _r=gt({chartName:"RadarChart",GraphicalChild:J,axisComponents:[{axisType:"angleAxis",AxisComp:Y},{axisType:"radiusAxis",AxisComp:U}],formatAxisMap:bt,defaultProps:{layout:"centric",startAngle:90,endAngle:-270,cx:"50%",cy:"50%",innerRadius:0,outerRadius:"80%"}});const zr=()=>{const{userProfile:t}=it(),[e,n]=A.useState([]),[r,i]=A.useState([]),[a,o]=A.useState("N/A"),[s,c]=A.useState(!0),[d,f]=A.useState(!1),m=["#1FA7E1","#9956DE","#75D06A","#FFB356","#7274ED","#FF8B8B","#6ED1CF","#FB96BB"];return A.useEffect(()=>{if(!t?.uid){c(!1);return}const l=t.role==="student"?t.grade:null,y=st(l)[0]??"gen-math",h=ke.find(x=>x.id===y)?.modules||[],g=new Map;ke.forEach(x=>{x.modules.forEach($=>g.set($.id,x.id))});const O=h.map((x,$)=>({id:x.id,name:x.title.length>15?x.title.substring(0,15).trim()+"...":x.title,color:m[$%m.length]}));i(O);const j=[{key:"progress",label:"Overall Mastery"},{key:"concept",label:"Concept Grasp"},{key:"application",label:"Application"},{key:"engagement",label:"Engagement"},{key:"consistency",label:"Consistency"}],ae=x=>{let $=-1,ve="N/A";const ge=j.map(_=>{const K={metric:_.label,fullMark:100};return h.forEach(k=>{const I=g.get(k.id),M=I?x?.subjects?.[I]?.modulesProgress?.[k.id]:null,be=M?.progress||0,rt=x?.lessons??{},xe=k.lessons.length?k.lessons.reduce((Oe,je)=>{const se=rt?.[je.id]?.progressPercent;if(typeof se=="number"&&Number.isFinite(se))return Oe+Math.max(0,Math.min(100,se));const nt=!!M?.lessonsCompleted?.includes?.(je.id);return Oe+(nt?100:0)},0)/k.lessons.length:0,Pe=k.quizzes.length?(M?.quizzesCompleted?.length||0)/k.quizzes.length*100:0;let C=0;_.key==="progress"?C=be:_.key==="concept"?C=xe:_.key==="application"?C=Pe:_.key==="engagement"?C=Math.min(100,(xe+Pe*2)/1.5):_.key==="consistency"&&(C=Math.min(100,40+be*.6)),K[k.id]=C||0}),K});h.forEach(_=>{let K=0;ge.forEach(I=>{const M=I[_.id];K+=typeof M=="number"?M:0});const k=K/j.length;k>$&&($=k,ve=O.find(I=>I.id===_.id)?.name||"N/A")}),o(ve),n(ge),c(!1)};c(!0);const oe=at(t.uid,x=>{ae(x)});return()=>oe()},[t?.uid]),p.jsxs(ot.div,{initial:{opacity:0,y:20},animate:{opacity:1,y:0},transition:{duration:.5,ease:[.22,1,.36,1]},className:"relative overflow-hidden bg-white/80 backdrop-blur-xl border border-white/50 shadow-[0_8px_30px_rgb(0,0,0,0.04)] rounded-[2rem] p-6 lg:p-8 isolate group",onMouseEnter:()=>f(!0),onMouseLeave:()=>f(!1),children:[p.jsx("div",{className:"absolute top-0 right-0 w-64 h-64 bg-violet-400/5 rounded-full blur-3xl -translate-y-1/2 translate-x-1/4"}),p.jsx("div",{className:"absolute bottom-0 left-0 w-48 h-48 bg-rose-400/5 rounded-full blur-3xl translate-y-1/3 -translate-x-1/3"}),p.jsxs("div",{className:"flex flex-col sm:flex-row items-start sm:items-center justify-between mb-8 relative z-10 gap-4",children:[p.jsxs("div",{children:[p.jsxs("div",{className:"flex items-center gap-2 mb-1",children:[p.jsx("span",{className:"p-2 bg-violet-100 text-violet-600 rounded-xl",children:p.jsx(ct,{size:20,className:"stroke-[2.5]"})}),p.jsx("h3",{className:"text-xl font-display font-extrabold text-[#0a1628] tracking-tight",children:"Competency Matrix"})]}),p.jsx("p",{className:"text-sm text-[#5a6578] font-body ml-12",children:"Your realtime performance across modules"})]}),p.jsxs("div",{className:"flex items-center gap-3 bg-slate-50 border border-slate-100 px-4 py-2 rounded-2xl ml-12 sm:ml-0",children:[p.jsx("div",{className:"flex items-center justify-center w-8 h-8 rounded-full bg-white shadow-sm border border-slate-100",children:p.jsx(lt,{size:14,className:"text-amber-500"})}),p.jsxs("div",{children:[p.jsx("p",{className:"text-[10px] font-bold text-slate-400 uppercase tracking-wider",children:"Top Module"}),p.jsx("p",{className:"text-sm font-bold text-slate-700",children:a})]})]})]}),p.jsx("div",{className:"h-[300px] sm:h-[360px] w-full relative z-10",children:s?p.jsx("div",{className:"w-full h-full flex items-center justify-center",children:p.jsxs("div",{className:"flex flex-col items-center gap-3",children:[p.jsx("div",{className:"w-8 h-8 border-4 border-violet-200 border-t-violet-500 rounded-full animate-spin"}),p.jsx("p",{className:"text-sm text-slate-400 font-medium",children:"Analyzing skill vectors..."})]})}):p.jsx(xt,{width:"100%",height:"100%",children:p.jsxs(_r,{cx:"50%",cy:"50%",outerRadius:d?"75%":"70%",data:e,children:[p.jsx(Ue,{stroke:"#e2e8f0",strokeDasharray:"4 4",polarRadius:[20,40,60,80,100]}),p.jsx(Y,{dataKey:"metric",tick:{fill:"#475569",fontSize:12,fontWeight:600,fontFamily:"Inter, sans-serif"}}),p.jsx(U,{angle:90,domain:[0,100],tick:{fill:"#94a3b8",fontSize:10},tickCount:6,axisLine:!1}),r.map(l=>p.jsx(J,{name:l.name,dataKey:l.id,stroke:l.color,strokeWidth:2,fill:l.color,fillOpacity:.35,dot:{r:3,fill:"#fff",stroke:l.color,strokeWidth:2},activeDot:{r:5,fill:l.color,stroke:"#fff",strokeWidth:2},isAnimationActive:!0,animationDuration:1500,animationEasing:"ease-out"},l.id)),p.jsx(Pt,{cursor:!1,content:({active:l,payload:v})=>l&&v&&v.length?p.jsxs("div",{className:"bg-white/95 backdrop-blur shadow-[0_10px_40px_-10px_rgba(0,0,0,0.15)] border border-slate-100 rounded-xl p-4",children:[p.jsx("p",{className:"font-display font-bold text-slate-800 text-sm mb-3",children:v[0].payload.metric}),p.jsx("div",{className:"flex flex-col gap-2",children:v.map(y=>p.jsxs("div",{className:"flex items-center justify-between gap-4",children:[p.jsxs("div",{className:"flex items-center gap-2",children:[p.jsx("div",{className:"w-2 h-2 rounded-full",style:{backgroundColor:y.stroke}}),p.jsx("span",{className:"text-xs font-bold text-slate-600 uppercase tracking-wide truncate max-w-[120px]",title:String(y.name),children:String(y.name)})]}),p.jsxs("span",{className:"text-sm font-black",style:{color:y.stroke},children:[Math.round(y.value),"%"]})]},y.name))})]}):null})]})})}),!s&&r.length>0&&p.jsx("div",{className:"flex flex-wrap justify-center items-center gap-3 md:gap-5 mt-[5px] z-10 relative",children:r.map(l=>p.jsxs("div",{className:"flex items-center gap-1.5",children:[p.jsx("div",{className:"w-2.5 h-2.5 rounded-full",style:{backgroundColor:l.color}}),p.jsx("span",{className:"text-[10px] font-bold text-slate-600 uppercase tracking-widest",children:l.name.length>15?l.name.substring(0,12)+"...":l.name})]},l.id))})]})};export{zr as CompetencyRadarChart};
assets/{CompositeAvatar-BFyEBxkG.js β†’ CompositeAvatar-DMpjm5UY.js} RENAMED
@@ -1 +1 @@
1
- import{j as t}from"./vendor-react-Dexh7fmo.js";import{g as e}from"./avatarData-BW_TX0b4.js";import{m as s}from"./index-DUxNDyEU.js";const g=({layers:a,className:o="w-10 h-10 bg-slate-200 rounded-full",fallbackSrc:m})=>{const n=e(a?.top),i=e(a?.bottom),l=e(a?.shoes),r=e(a?.accessory),c=t.jsx("img",{src:"/avatar/avatar_body_base.png",alt:"base body",className:"absolute inset-0 w-full h-full object-contain z-10"}),u=t.jsxs(s.div,{className:"absolute inset-0 w-full h-full z-50 pointer-events-none",animate:{rotate:[-2,2,-2],y:[0,-3,0]},transition:{repeat:1/0,duration:4,ease:"easeInOut"},style:{originY:.7,originX:.5},children:[t.jsx(s.img,{src:"/avatar/left_horn.png",alt:"left horn",className:"absolute inset-0 w-full h-full object-contain origin-[50%_45%] z-0",animate:{rotate:[-4,4,-4]},transition:{repeat:1/0,duration:4,ease:"easeInOut"}}),t.jsx(s.img,{src:"/avatar/right_horn.png",alt:"right horn",className:"absolute inset-0 w-full h-full object-contain origin-[50%_45%] z-0",animate:{rotate:[4,-4,4]},transition:{repeat:1/0,duration:4,ease:"easeInOut"}}),t.jsx("img",{src:"/avatar/avatar_head_base.png",alt:"head base",className:"absolute inset-0 w-full h-full object-contain z-10"}),t.jsx(s.img,{src:"/avatar/eyes_default.png",alt:"Avatar Eyes",className:"absolute inset-0 w-full h-full object-contain z-10",style:{originY:"50%"},animate:{scaleY:[1,.1,1]},transition:{duration:.2,repeat:1/0,repeatDelay:3.8,ease:"easeInOut"}}),r&&t.jsx("img",{src:r,alt:"accessory",className:"absolute inset-0 w-full h-full object-contain z-20"})]});return!a||!a.top&&!a.bottom&&!a.shoes&&!a.accessory?t.jsxs("div",{className:`relative overflow-hidden ${o}`,children:[c,u]}):t.jsxs("div",{className:`relative overflow-hidden ${o}`,children:[c,i&&t.jsx("img",{src:i,alt:"bottom",className:"absolute inset-0 w-full h-full object-contain z-20"}),l&&t.jsx("img",{src:l,alt:"shoes",className:"absolute inset-0 w-full h-full object-contain z-30"}),n&&t.jsx("img",{src:n,alt:"top",className:"absolute inset-0 w-full h-full object-contain z-40"}),u]})};export{g as C};
 
1
+ import{j as t}from"./vendor-react-Dexh7fmo.js";import{g as e}from"./avatarData-BW_TX0b4.js";import{m as s}from"./index-D4nJsLyx.js";const g=({layers:a,className:o="w-10 h-10 bg-slate-200 rounded-full",fallbackSrc:m})=>{const n=e(a?.top),i=e(a?.bottom),l=e(a?.shoes),r=e(a?.accessory),c=t.jsx("img",{src:"/avatar/avatar_body_base.png",alt:"base body",className:"absolute inset-0 w-full h-full object-contain z-10"}),u=t.jsxs(s.div,{className:"absolute inset-0 w-full h-full z-50 pointer-events-none",animate:{rotate:[-2,2,-2],y:[0,-3,0]},transition:{repeat:1/0,duration:4,ease:"easeInOut"},style:{originY:.7,originX:.5},children:[t.jsx(s.img,{src:"/avatar/left_horn.png",alt:"left horn",className:"absolute inset-0 w-full h-full object-contain origin-[50%_45%] z-0",animate:{rotate:[-4,4,-4]},transition:{repeat:1/0,duration:4,ease:"easeInOut"}}),t.jsx(s.img,{src:"/avatar/right_horn.png",alt:"right horn",className:"absolute inset-0 w-full h-full object-contain origin-[50%_45%] z-0",animate:{rotate:[4,-4,4]},transition:{repeat:1/0,duration:4,ease:"easeInOut"}}),t.jsx("img",{src:"/avatar/avatar_head_base.png",alt:"head base",className:"absolute inset-0 w-full h-full object-contain z-10"}),t.jsx(s.img,{src:"/avatar/eyes_default.png",alt:"Avatar Eyes",className:"absolute inset-0 w-full h-full object-contain z-10",style:{originY:"50%"},animate:{scaleY:[1,.1,1]},transition:{duration:.2,repeat:1/0,repeatDelay:3.8,ease:"easeInOut"}}),r&&t.jsx("img",{src:r,alt:"accessory",className:"absolute inset-0 w-full h-full object-contain z-20"})]});return!a||!a.top&&!a.bottom&&!a.shoes&&!a.accessory?t.jsxs("div",{className:`relative overflow-hidden ${o}`,children:[c,u]}):t.jsxs("div",{className:`relative overflow-hidden ${o}`,children:[c,i&&t.jsx("img",{src:i,alt:"bottom",className:"absolute inset-0 w-full h-full object-contain z-20"}),l&&t.jsx("img",{src:l,alt:"shoes",className:"absolute inset-0 w-full h-full object-contain z-30"}),n&&t.jsx("img",{src:n,alt:"top",className:"absolute inset-0 w-full h-full object-contain z-40"}),u]})};export{g as C};
assets/{ConfirmModal-BGmRIqeR.js β†’ ConfirmModal-DGrnpObD.js} RENAMED
@@ -1 +1 @@
1
- import{j as e}from"./vendor-react-Dexh7fmo.js";import{B as i}from"./button-BpeUVhBo.js";import{e as f,m as r,T as h}from"./index-DUxNDyEU.js";import{X as y}from"./x-DwrHgz_L.js";import{T as j}from"./trash-2-DHSV6syb.js";import{L as w}from"./log-out-DH3jNNq7.js";import"./vendor-radix-BRdei-zg.js";import"./clsx-B-dksMZM.js";import"./utils-BQQgILNW.js";import"./vendor-firebase-auth-COrkgW0P.js";import"./vendor-firebase-core-DQ-pMjxd.js";import"./vendor-firebase-firestore-BML5nJHm.js";import"./vendor-firebase-storage-BOeKE_0n.js";import"./vendor-firebase-analytics-CCo6E2f7.js";const O=({isOpen:s,onClose:t,onConfirm:n,title:a,message:l,confirmText:c="Confirm",cancelText:d="Cancel",type:m="warning",icon:x="warning",zIndexClass:g="z-50"})=>{const b=()=>{switch(x){case"logout":return e.jsx(w,{size:32});case"delete":return e.jsx(j,{size:32});case"warning":default:return e.jsx(h,{size:32})}},o=(()=>{switch(m){case"danger":return{iconBg:"bg-red-100",iconColor:"text-red-600",buttonBg:"bg-red-600 hover:bg-red-700",buttonText:"text-white"};case"warning":return{iconBg:"bg-rose-100",iconColor:"text-rose-600",buttonBg:"bg-rose-600 hover:bg-rose-700",buttonText:"text-white"};case"info":default:return{iconBg:"bg-sky-100",iconColor:"text-sky-600",buttonBg:"bg-sky-600 hover:bg-sky-700",buttonText:"text-white"}}})(),p=async()=>{try{await n(),t()}catch{}};return e.jsx(f,{children:s&&e.jsx(e.Fragment,{children:e.jsx(r.div,{initial:{opacity:0},animate:{opacity:1},exit:{opacity:0},onClick:t,className:`fixed inset-0 bg-black/50 backdrop-blur-sm ${g} flex items-center justify-center p-4`,children:e.jsxs(r.div,{initial:{opacity:0,scale:.9,y:20},animate:{opacity:1,scale:1,y:0},exit:{opacity:0,scale:.9,y:20},transition:{type:"spring",damping:25,stiffness:300},onClick:u=>u.stopPropagation(),className:"bg-[#f7f9fc] rounded-3xl shadow-2xl max-w-md w-full overflow-hidden border border-[#dde3eb]",children:[e.jsx("button",{onClick:t,className:"absolute top-4 right-4 p-2 text-slate-500 hover:text-[#0a1628] hover:bg-[#dde3eb] rounded-xl transition-colors z-10",children:e.jsx(y,{size:20})}),e.jsxs("div",{className:"p-8 text-center",children:[e.jsx(r.div,{initial:{scale:0},animate:{scale:1},transition:{delay:.1,type:"spring",damping:15},className:`w-20 h-20 ${o.iconBg} rounded-full flex items-center justify-center mx-auto mb-6 ${o.iconColor}`,children:b()}),e.jsx("h2",{className:"text-2xl font-display font-bold text-[#0a1628] mb-3",children:a}),e.jsx("p",{className:"text-[#5a6578] mb-8 leading-relaxed",children:l}),e.jsxs("div",{className:"flex gap-3",children:[e.jsx(i,{onClick:t,variant:"outline",size:"lg",className:"flex-1 h-12 rounded-xl border-[#dde3eb] hover:border-[#d1cec6] hover:bg-[#edf1f7] font-bold",children:d}),e.jsx(i,{onClick:p,size:"lg",className:`flex-1 h-12 rounded-xl font-bold ${o.buttonBg} ${o.buttonText} transition-colors shadow-lg`,children:c})]})]})]})})})})};export{O as default};
 
1
+ import{j as e}from"./vendor-react-Dexh7fmo.js";import{B as i}from"./button-BpeUVhBo.js";import{e as f,m as r,T as h}from"./index-D4nJsLyx.js";import{X as y}from"./x-BONnp2RF.js";import{T as j}from"./trash-2-BoXE_mye.js";import{L as w}from"./log-out-BqGKt-tT.js";import"./vendor-radix-BRdei-zg.js";import"./clsx-B-dksMZM.js";import"./utils-BQQgILNW.js";import"./vendor-firebase-auth-COrkgW0P.js";import"./vendor-firebase-core-DQ-pMjxd.js";import"./vendor-firebase-firestore-BML5nJHm.js";import"./vendor-firebase-storage-BOeKE_0n.js";import"./vendor-firebase-analytics-CCo6E2f7.js";const O=({isOpen:s,onClose:t,onConfirm:n,title:a,message:l,confirmText:c="Confirm",cancelText:d="Cancel",type:m="warning",icon:x="warning",zIndexClass:g="z-50"})=>{const b=()=>{switch(x){case"logout":return e.jsx(w,{size:32});case"delete":return e.jsx(j,{size:32});case"warning":default:return e.jsx(h,{size:32})}},o=(()=>{switch(m){case"danger":return{iconBg:"bg-red-100",iconColor:"text-red-600",buttonBg:"bg-red-600 hover:bg-red-700",buttonText:"text-white"};case"warning":return{iconBg:"bg-rose-100",iconColor:"text-rose-600",buttonBg:"bg-rose-600 hover:bg-rose-700",buttonText:"text-white"};case"info":default:return{iconBg:"bg-sky-100",iconColor:"text-sky-600",buttonBg:"bg-sky-600 hover:bg-sky-700",buttonText:"text-white"}}})(),p=async()=>{try{await n(),t()}catch{}};return e.jsx(f,{children:s&&e.jsx(e.Fragment,{children:e.jsx(r.div,{initial:{opacity:0},animate:{opacity:1},exit:{opacity:0},onClick:t,className:`fixed inset-0 bg-black/50 backdrop-blur-sm ${g} flex items-center justify-center p-4`,children:e.jsxs(r.div,{initial:{opacity:0,scale:.9,y:20},animate:{opacity:1,scale:1,y:0},exit:{opacity:0,scale:.9,y:20},transition:{type:"spring",damping:25,stiffness:300},onClick:u=>u.stopPropagation(),className:"bg-[#f7f9fc] rounded-3xl shadow-2xl max-w-md w-full overflow-hidden border border-[#dde3eb]",children:[e.jsx("button",{onClick:t,className:"absolute top-4 right-4 p-2 text-slate-500 hover:text-[#0a1628] hover:bg-[#dde3eb] rounded-xl transition-colors z-10",children:e.jsx(y,{size:20})}),e.jsxs("div",{className:"p-8 text-center",children:[e.jsx(r.div,{initial:{scale:0},animate:{scale:1},transition:{delay:.1,type:"spring",damping:15},className:`w-20 h-20 ${o.iconBg} rounded-full flex items-center justify-center mx-auto mb-6 ${o.iconColor}`,children:b()}),e.jsx("h2",{className:"text-2xl font-display font-bold text-[#0a1628] mb-3",children:a}),e.jsx("p",{className:"text-[#5a6578] mb-8 leading-relaxed",children:l}),e.jsxs("div",{className:"flex gap-3",children:[e.jsx(i,{onClick:t,variant:"outline",size:"lg",className:"flex-1 h-12 rounded-xl border-[#dde3eb] hover:border-[#d1cec6] hover:bg-[#edf1f7] font-bold",children:d}),e.jsx(i,{onClick:p,size:"lg",className:`flex-1 h-12 rounded-xl font-bold ${o.buttonBg} ${o.buttonText} transition-colors shadow-lg`,children:c})]})]})]})})})})};export{O as default};
assets/{DashboardAvatar-C3sK59xb.js β†’ DashboardAvatar-CHVNq8nF.js} RENAMED
@@ -1 +1 @@
1
- import{j as a}from"./vendor-react-Dexh7fmo.js";import{g as e}from"./avatarData-BW_TX0b4.js";import{m as r}from"./index-DUxNDyEU.js";import"./vendor-firebase-auth-COrkgW0P.js";import"./vendor-firebase-core-DQ-pMjxd.js";import"./vendor-firebase-firestore-BML5nJHm.js";import"./vendor-firebase-storage-BOeKE_0n.js";import"./vendor-firebase-analytics-CCo6E2f7.js";const x=({className:l="w-full h-full",layers:s})=>{const t="absolute inset-0 w-full h-full object-contain object-bottom",o=e(s?.top),i=e(s?.bottom),n=e(s?.shoes),c=e(s?.accessory);return a.jsxs("div",{className:`relative flex items-end justify-center ${l}`,children:[a.jsx("img",{src:"/avatar/avatar_body_base.png",alt:"Avatar Body",className:`${t} z-10`}),i&&a.jsx("img",{src:i,alt:"Pants",className:`${t} z-[12]`}),n&&a.jsx("img",{src:n,alt:"Shoes",className:`${t} z-[11]`}),o&&a.jsx("img",{src:o,alt:"Uniform",className:`${t} z-[13]`}),a.jsxs(r.div,{className:"absolute inset-0 w-full h-full z-30",style:{originY:"80%"},animate:{rotate:[-2,2,-2]},transition:{duration:4,ease:"easeInOut",repeat:1/0},children:[a.jsx("img",{src:"/avatar/avatar_head_base.png",alt:"Avatar Head",className:`${t} z-[1]`}),a.jsx(r.img,{src:"/avatar/eyes_default.png",alt:"Avatar Eyes",className:`${t} z-[2]`,style:{originY:"50%"},animate:{scaleY:[1,.1,1]},transition:{duration:.2,repeat:1/0,repeatDelay:3.8,ease:"easeInOut"}}),a.jsxs(r.div,{className:`${t} z-[3]`,style:{originY:"bottom"},animate:{rotate:[1,-1,1]},transition:{duration:3.5,ease:"easeInOut",repeat:1/0},children:[a.jsx("img",{src:"/avatar/left_horn.png",alt:"Left Horn",className:t}),a.jsx("img",{src:"/avatar/right_horn.png",alt:"Right Horn",className:t})]}),c&&a.jsx("img",{src:c,alt:"Accessory",className:`${t} z-[4]`})]})]})};export{x as DashboardAvatar,x as default};
 
1
+ import{j as a}from"./vendor-react-Dexh7fmo.js";import{g as e}from"./avatarData-BW_TX0b4.js";import{m as r}from"./index-D4nJsLyx.js";import"./vendor-firebase-auth-COrkgW0P.js";import"./vendor-firebase-core-DQ-pMjxd.js";import"./vendor-firebase-firestore-BML5nJHm.js";import"./vendor-firebase-storage-BOeKE_0n.js";import"./vendor-firebase-analytics-CCo6E2f7.js";const x=({className:l="w-full h-full",layers:s})=>{const t="absolute inset-0 w-full h-full object-contain object-bottom",o=e(s?.top),i=e(s?.bottom),n=e(s?.shoes),c=e(s?.accessory);return a.jsxs("div",{className:`relative flex items-end justify-center ${l}`,children:[a.jsx("img",{src:"/avatar/avatar_body_base.png",alt:"Avatar Body",className:`${t} z-10`}),i&&a.jsx("img",{src:i,alt:"Pants",className:`${t} z-[12]`}),n&&a.jsx("img",{src:n,alt:"Shoes",className:`${t} z-[11]`}),o&&a.jsx("img",{src:o,alt:"Uniform",className:`${t} z-[13]`}),a.jsxs(r.div,{className:"absolute inset-0 w-full h-full z-30",style:{originY:"80%"},animate:{rotate:[-2,2,-2]},transition:{duration:4,ease:"easeInOut",repeat:1/0},children:[a.jsx("img",{src:"/avatar/avatar_head_base.png",alt:"Avatar Head",className:`${t} z-[1]`}),a.jsx(r.img,{src:"/avatar/eyes_default.png",alt:"Avatar Eyes",className:`${t} z-[2]`,style:{originY:"50%"},animate:{scaleY:[1,.1,1]},transition:{duration:.2,repeat:1/0,repeatDelay:3.8,ease:"easeInOut"}}),a.jsxs(r.div,{className:`${t} z-[3]`,style:{originY:"bottom"},animate:{rotate:[1,-1,1]},transition:{duration:3.5,ease:"easeInOut",repeat:1/0},children:[a.jsx("img",{src:"/avatar/left_horn.png",alt:"Left Horn",className:t}),a.jsx("img",{src:"/avatar/right_horn.png",alt:"Right Horn",className:t})]}),c&&a.jsx("img",{src:c,alt:"Accessory",className:`${t} z-[4]`})]})]})};export{x as DashboardAvatar,x as default};
assets/{DiagnosticAssessmentModal-BMXWtGqV.js β†’ DiagnosticAssessmentModal-C541tkg_.js} RENAMED
@@ -1 +1 @@
1
- import{r as m,c as z,j as e}from"./vendor-react-Dexh7fmo.js";import{B as E}from"./button-BpeUVhBo.js";import{M as ye}from"./MathAnswerInput-t95Hzg9C.js";import be from"./ScientificCalculator-3ZZoXfU9.js";import{triggerDiagnosticCompleted as ge}from"./automationService-DCIX9fmr.js";import{m as g,C as T,e as O,T as Q}from"./index-DUxNDyEU.js";import{B as J}from"./brain-D2SpSiL8.js";import{X as Z}from"./x-DwrHgz_L.js";import{C as ee}from"./circle-check-big-CXPh4ph_.js";import{C as ve}from"./chevron-right-CSxxBxL8.js";import{C as we}from"./chart-column-BSv3Tlcd.js";import{T as je}from"./trending-up-KXZvyUp1.js";import"./vendor-radix-BRdei-zg.js";import"./clsx-B-dksMZM.js";import"./utils-BQQgILNW.js";import"./apiService-BcE-mX0v.js";import"./chevron-up-B14f4SwA.js";import"./vendor-firebase-firestore-BML5nJHm.js";import"./vendor-firebase-core-DQ-pMjxd.js";import"./vendor-firebase-auth-COrkgW0P.js";import"./vendor-firebase-storage-BOeKE_0n.js";import"./vendor-firebase-analytics-CCo6E2f7.js";const H="iar-v2-deped-g11-core-g12-candidate-shortform",ae=[{id:"iar-fn-01",topicArea:"Functions",gradeLevel:"G11",quarter:1,difficulty:"basic",competencyCode:"M11GM-Ia-2",competencyDescription:"Evaluates a function and solves basic linear expressions.",answerType:"MCQ",depedBasis:"depedPattern",prompt:"Solve for x: 3x - 4 = 17",options:["5","6","7","8"],correctOptionIndex:2,isConfidenceProbe:!1,scorable:!0,estimatedSeconds:35},{id:"iar-fn-02",topicArea:"Functions",gradeLevel:"G11",quarter:1,difficulty:"standard",competencyCode:"M11GM-Ib-5",competencyDescription:"Finds the domain of a rational function.",answerType:"MCQ",depedBasis:"depedPattern",prompt:"What is the domain of f(x) = 5 / (x - 2)?",options:["All real numbers","x > 2","x β‰  2","x < 2"],correctOptionIndex:2,isConfidenceProbe:!1,scorable:!0,estimatedSeconds:45},{id:"iar-fn-03",topicArea:"Functions",gradeLevel:"G11",quarter:2,difficulty:"standard",competencyCode:"M11GM-Ie-f-1",competencyDescription:"Solves exponential equations in real-life growth contexts.",answerType:"shortAnswerNumeric",depedBasis:"depedPattern",prompt:"A quantity doubles every hour. If it starts at 3, what is the value after 4 hours?",acceptableNumericAnswers:[48],numericTolerance:0,isConfidenceProbe:!1,scorable:!0,estimatedSeconds:55},{id:"iar-fn-04",topicArea:"Functions",gradeLevel:"G11",quarter:2,difficulty:"challenge",competencyCode:"M11GM-Ii-4",competencyDescription:"Determines intercepts and asymptotic behavior of logarithmic functions.",answerType:"MCQ",depedBasis:"depedPattern",prompt:"Which statement is true for f(x) = log(x - 1)?",options:["Domain is all real numbers.","Vertical asymptote is x = 1.","x-intercept is always 0.","Range is x > 1."],correctOptionIndex:1,isConfidenceProbe:!1,scorable:!0,estimatedSeconds:55},{id:"iar-fn-c1",topicArea:"Functions",gradeLevel:"G11",quarter:2,difficulty:"standard",competencyCode:"M11GM-Id-2",competencyDescription:"Determines the inverse of a one-to-one function.",answerType:"shortAnswerNumeric",depedBasis:"depedPattern",prompt:"If f(x) = 2x + 3, what is f⁻¹(11)?",acceptableNumericAnswers:[4],numericTolerance:0,isConfidenceProbe:!1,scorable:!0,estimatedSeconds:35},{id:"iar-bm-01",topicArea:"BusinessMath",gradeLevel:"G11",quarter:3,difficulty:"basic",competencyCode:"M11GM-IIa-b-1",competencyDescription:"Computes simple interest and maturity value.",answerType:"shortAnswerNumeric",depedBasis:"depedPattern",prompt:"Find the simple interest on PHP 8,000 at 5% annual rate for 2 years.",acceptableNumericAnswers:[800],numericTolerance:0,isConfidenceProbe:!1,scorable:!0,estimatedSeconds:45},{id:"iar-bm-02",topicArea:"BusinessMath",gradeLevel:"G11",quarter:3,difficulty:"standard",competencyCode:"M11GM-IIa-2",competencyDescription:"Distinguishes simple and compound interest contexts.",answerType:"MCQ",depedBasis:"depedPattern",prompt:"Which statement correctly describes compound interest?",options:["Interest is based only on original principal.","Interest is computed once at maturity.","Interest is computed on principal plus accumulated interest.","Interest is always lower than simple interest."],correctOptionIndex:2,isConfidenceProbe:!1,scorable:!0,estimatedSeconds:45},{id:"iar-bm-03",topicArea:"BusinessMath",gradeLevel:"G11",quarter:3,difficulty:"standard",competencyCode:"M11GM-IIc-d-1",competencyDescription:"Computes annuity future value in basic settings.",answerType:"MCQ",depedBasis:"depedPattern",prompt:"A student saves PHP 1,000 monthly for 6 months with no interest. What is the accumulated amount?",options:["PHP 5,000","PHP 6,000","PHP 7,000","PHP 12,000"],correctOptionIndex:1,isConfidenceProbe:!1,scorable:!0,estimatedSeconds:40},{id:"iar-bm-04",topicArea:"BusinessMath",gradeLevel:"G11",quarter:3,difficulty:"challenge",competencyCode:"M11GM-IIf-3",competencyDescription:"Solves business and consumer loan scenarios.",answerType:"MCQ",depedBasis:"depedPattern",prompt:"A borrower receives PHP 20,000 and repays PHP 22,400 after 1 year. What is the annual simple interest rate?",options:["8%","10%","12%","14%"],correctOptionIndex:2,isConfidenceProbe:!1,scorable:!0,estimatedSeconds:60},{id:"iar-bm-c1",topicArea:"BusinessMath",gradeLevel:"G11",quarter:3,difficulty:"standard",competencyCode:"M11GM-IIc-d-1",competencyDescription:"Finds future value and present value of annuities.",answerType:"shortAnswerNumeric",depedBasis:"depedPattern",prompt:"Without interest, what is the present value of a 12-month annuity paying PHP 500 each month?",acceptableNumericAnswers:[6e3],numericTolerance:0,isConfidenceProbe:!1,scorable:!0,estimatedSeconds:40},{id:"iar-lg-01",topicArea:"Logic",gradeLevel:"G11",quarter:4,difficulty:"basic",competencyCode:"M11GM-IIg-1",competencyDescription:"Identifies and negates propositions.",answerType:"MCQ",depedBasis:"depedPattern",prompt:'If p is "All triangles have three sides," what is not p?',options:["Some triangles have three sides.","No triangle has three sides.","At least one triangle does not have three sides.","All triangles are polygons."],correctOptionIndex:2,isConfidenceProbe:!1,scorable:!0,estimatedSeconds:45},{id:"iar-lg-02",topicArea:"Logic",gradeLevel:"G11",quarter:4,difficulty:"standard",competencyCode:"M11GM-IIh-1",competencyDescription:"Determines truth values of compound propositions.",answerType:"MCQ",depedBasis:"depedPattern",prompt:"When p is true and q is false, what is the truth value of p -> q?",options:["True","False","Cannot be determined","Both true and false"],correctOptionIndex:1,isConfidenceProbe:!1,scorable:!0,estimatedSeconds:40},{id:"iar-lg-03",topicArea:"Logic",gradeLevel:"G11",quarter:4,difficulty:"standard",competencyCode:"M11GM-IIi-1",competencyDescription:"Identifies common reasoning fallacies in short arguments.",answerType:"shortAnswerText",depedBasis:"depedPattern",prompt:'A post says, "Everyone in my class passed because we used this lucky pen." Type the best label for this weak reasoning.',acceptableTextAnswers:["false cause","false causation","post hoc","hasty generalization"],isConfidenceProbe:!1,scorable:!0,estimatedSeconds:60},{id:"iar-lg-04",topicArea:"Logic",gradeLevel:"G11",quarter:4,difficulty:"challenge",competencyCode:"M11GM-IIi-2",competencyDescription:"Determines the validity of categorical syllogisms.",answerType:"MCQ",depedBasis:"depedPattern",prompt:"All squares are rectangles. All rectangles are quadrilaterals. Therefore all squares are quadrilaterals. This argument is:",options:["Valid","Invalid","A fallacy of composition","A contradiction"],correctOptionIndex:0,isConfidenceProbe:!1,scorable:!0,estimatedSeconds:55},{id:"iar-lg-c1",topicArea:"Logic",gradeLevel:"G11",quarter:4,difficulty:"standard",competencyCode:"M11GM-IIj-1",competencyDescription:"Illustrates methods of proof and disproof.",answerType:"MCQ",depedBasis:"depedPattern",prompt:'To prove "if n is even then nΒ² is even," which method is commonly used?',options:["Direct proof","Proof by contradiction only","Survey method","Graph sketch only"],correctOptionIndex:0,isConfidenceProbe:!1,scorable:!0,estimatedSeconds:40}];function Ne(s){return s>=75?"Mastered":s>=40?"NeedsReview":"HighRisk"}function Ce(){return ae.filter(s=>s.depedBasis==="depedPattern"&&!!s.competencyCode)}function ke(s=ae){const n=s.reduce((p,h)=>p+h.estimatedSeconds,0);return Math.round(n/60*10)/10}const te={Functions:"Functions and Graphs",BusinessMath:"Business and Financial Mathematics",Logic:"Logic and Reasoning"},Me={atRiskSubjectIds:[],questionSetVersion:H},x=Ce(),se=s=>s.trim().toLowerCase().replace(/\s+/g," "),re=(s,n)=>{if(!s.scorable)return!1;if(s.answerType==="MCQ")return typeof n=="number"&&n===s.correctOptionIndex;if(s.answerType==="shortAnswerNumeric"){if(typeof n!="string")return!1;const p=Number(n);if(Number.isNaN(p))return!1;const h=s.numericTolerance??0;return(s.acceptableNumericAnswers||[]).some(B=>Math.abs(p-B)<=h)}if(s.answerType==="shortAnswerText"){if(typeof n!="string")return!1;const p=se(n);return(s.acceptableTextAnswers||[]).some(h=>se(h)===p)}return!1},Ae=s=>s==="Mastered"?"text-teal-600 bg-teal-50":s==="NeedsReview"?"text-amber-700 bg-amber-50":"text-red-600 bg-red-50",Ie=s=>s==="NeedsReview"?"Needs Review":s==="HighRisk"?"High Risk":"Mastered",et=({isOpen:s,onClose:n,onComplete:p,lrn:h,gradeLevel:B="Grade 11",workflowMode:ie="iar_only",assessmentType:N="initial_assessment"})=>{const[v,L]=m.useState("intro"),[y,W]=m.useState(0),[ne,_]=m.useState([]),[C,I]=m.useState(""),[w,j]=m.useState(!1),[oe,b]=m.useState(!1),[a,q]=m.useState(null),[u,$]=m.useState(null),[k,V]=m.useState([]),[Se,U]=m.useState(!1);z.useEffect(()=>{s&&(L("intro"),W(0),_([]),I(""),j(!1),b(!1),q(null),$(null),V([]))},[s]),z.useEffect(()=>{if(!s||v!=="test"){b(!1);return}if(y>0||w){b(!1);return}b(!0);const t=window.setTimeout(()=>{b(!1)},2800);return()=>window.clearTimeout(t)},[s,v,y,w]);const ce=()=>{p({status:"skipped",...Me}),n()},R=()=>{n()};z.useEffect(()=>{if(!s)return;const t=i=>{i.key==="Escape"&&R()};return window.addEventListener("keydown",t),()=>window.removeEventListener("keydown",t)},[s]);const le=()=>{L("test")},de=t=>{_(t),I(""),j(!1),y<x.length-1?setTimeout(()=>{W(i=>i+1)},300):pe(t)},K=t=>{const i=[...ne];i[y]=t,de(i)},G=()=>{C.trim()&&K(C.trim())},pe=async t=>{const i=[],S={Functions:{correct:0,total:0},BusinessMath:{correct:0,total:0},Logic:{correct:0,total:0}},fe={Functions:[],BusinessMath:[],Logic:[]},P={};x.forEach((r,c)=>{const l=t[c];if(r.answerType==="confidenceLikert"&&typeof l=="number"&&fe[r.topicArea].push(l+1),!r.scorable)return;const d=re(r,l);S[r.topicArea].total+=1,d&&(S[r.topicArea].correct+=1),P[r.topicArea]||(P[r.topicArea]=[]),P[r.topicArea].push({correct:d,questionId:r.id,difficulty:r.difficulty,gradeLevelTag:r.gradeLevel,quarter:r.quarter,answerType:r.answerType})});const o=Object.keys(S).reduce((r,c)=>{const{correct:l,total:d}=S[c],M=d>0?Math.round(l/d*100):0,A=Ne(M);return A!=="Mastered"&&i.push(c),r[c]={correct:l,total:d,scorePercent:M,classification:A},r},{}),D=x.filter(r=>r.scorable&&r.gradeLevel==="G12Candidate"),xe=D.reduce((r,c)=>{const l=x.findIndex(d=>d.id===c.id);return r+(re(c,t[l])?1:0)},0),F=D.length>0?xe/D.length:1,he={readyForFiniteMath:Object.values(o).filter(r=>r.classification==="Mastered").length/3>=.67&&o.Functions.classification!=="HighRisk"&&o.BusinessMath.classification!=="HighRisk"&&F>=.5,readyForAdvancedStats:o.Logic.classification==="Mastered"&&F>=.67,readyForCalcIntro:o.Functions.classification==="Mastered"&&F>=.67,needsStrongerFunctions:o.Functions.classification!=="Mastered",needsStrongerBusinessMath:o.BusinessMath.classification!=="Mastered"};if(Object.keys(o).sort((r,c)=>{const l=o[r],d=o[c],M=X=>X==="HighRisk"?0:X==="NeedsReview"?1:2,A=M(l.classification)-M(d.classification);return A!==0?A:l.scorePercent-d.scorePercent}),V(i),q(o),$(he),L("results"),h){U(!0);try{const r=Object.keys(o).map(c=>({subject:c,score:o[c].scorePercent}));await ge(h,r,B,P,ie,N),console.log("[OK] Automation: diagnostic pipeline completed")}catch(r){console.error("[WARN] Automation: diagnostic pipeline failed:",r)}finally{U(!1)}}},me=()=>{if(!a||!u){p({status:"completed",atRiskSubjectIds:k,questionSetVersion:H}),n();return}p({status:"completed",atRiskSubjectIds:k,topicScores:{Functions:a.Functions.scorePercent,BusinessMath:a.BusinessMath.scorePercent,Logic:a.Logic.scorePercent},topicClassifications:{Functions:a.Functions.classification,BusinessMath:a.BusinessMath.classification,Logic:a.Logic.classification},priorityTopics:Object.keys(a).sort((t,i)=>a[t].scorePercent-a[i].scorePercent),g12ReadinessIndicators:u,questionSetVersion:H}),n()},f=x[y],Y=Math.round(y/x.length*100),ue=ke(x);return s?e.jsxs("div",{className:"fixed inset-0 z-50 flex items-center justify-center p-4 bg-black/50 backdrop-blur-sm",onClick:()=>{R()},children:[e.jsxs(g.div,{initial:{opacity:0,scale:.9},animate:{opacity:1,scale:1},exit:{opacity:0,scale:.9},className:"bg-white rounded-3xl shadow-2xl max-w-2xl w-full flex flex-col max-h-[90vh] pointer-events-auto overflow-hidden relative z-[51]",onClick:t=>t.stopPropagation(),children:[e.jsxs("div",{className:"px-8 py-6 border-b border-[#dde3eb] flex items-center justify-between bg-[#edf1f7] flex-shrink-0",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("div",{className:"w-10 h-10 bg-sky-100 rounded-xl flex items-center justify-center text-sky-600",children:e.jsx(J,{size:24})}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-xl font-bold text-[#0a1628]",children:N==="followup_diagnostic"?"Deep Diagnostic":"Initial Assessment"}),e.jsx("p",{className:"text-sm text-[#5a6578]",children:"Analyze your strengths & weaknesses"})]})]}),e.jsxs("div",{className:"flex items-center gap-2 relative",children:[e.jsxs("div",{className:"relative",children:[e.jsx("button",{onClick:()=>{j(!w),b(!1)},className:`relative w-10 h-10 rounded-xl flex items-center justify-center transition-all duration-200 border-2 ${w?"bg-sky-100 border-sky-300 text-sky-700 shadow-sm":"bg-white border-[#dde3eb] text-slate-500 hover:text-sky-600 hover:border-sky-200 hover:bg-sky-50"}`,title:"Toggle Calculator",children:e.jsx(T,{size:20})}),e.jsx(O,{children:s&&v==="test"&&oe&&!w&&e.jsxs(g.div,{initial:{opacity:0,y:10,scale:.95},animate:{opacity:1,y:0,scale:1},exit:{opacity:0,y:10,scale:.95},className:"absolute right-0 top-full mt-3 w-[260px] bg-[#0a1628] text-white border border-[#2a3648] rounded-2xl p-4 shadow-2xl z-50 pointer-events-none",children:[e.jsxs("div",{className:"flex gap-3",children:[e.jsx("div",{className:"w-8 h-8 rounded-full bg-sky-500/20 flex items-center justify-center flex-shrink-0",children:e.jsx(T,{size:16,className:"text-sky-400"})}),e.jsxs("div",{children:[e.jsx("h4",{className:"font-bold text-sm mb-1",children:"Calculator Available"}),e.jsx("p",{className:"text-xs text-slate-300 leading-relaxed",children:"You can freely use the scientific calculator at any time during this quiz."})]})]}),e.jsx("div",{className:"absolute -top-2 right-4 w-4 h-4 bg-[#0a1628] border-l border-t border-[#2a3648] rotate-45 rounded-tl-sm"})]})})]}),e.jsx("button",{onClick:()=>{R()},className:"w-10 h-10 rounded-xl flex items-center justify-center text-slate-500 border-2 border-transparent hover:text-[#5a6578] hover:bg-[#dde3eb] hover:border-[#dde3eb] transition-all",title:"Close assessment",children:e.jsx(Z,{size:20})})]})]}),e.jsx("div",{className:"p-8 overflow-y-auto",children:e.jsxs(O,{mode:"wait",children:[v==="intro"&&e.jsxs(g.div,{initial:{opacity:0,x:20},animate:{opacity:1,x:0},exit:{opacity:0,x:-20},className:"text-center space-y-6",children:[e.jsx("div",{className:"w-32 h-32 bg-sky-50 rounded-full flex items-center justify-center mx-auto mb-6",children:e.jsx(T,{size:64,className:"text-sky-600"})}),e.jsx("h3",{className:"text-2xl font-bold text-[#0a1628]",children:N==="followup_diagnostic"?"Let's close the gaps":"Welcome to MathPulse AI!"}),e.jsx("p",{className:"text-[#5a6578] max-w-md mx-auto leading-relaxed",children:N==="followup_diagnostic"?"You have pending weak-area checks from your initial assessment. Complete this deep diagnostic to unlock regular modules and practice.":`To personalize your learning path, complete a DepEd competency-based SHS diagnostic (${x.length} items, around ${ue} minutes).`}),e.jsxs("div",{className:"grid grid-cols-2 gap-4 max-w-lg mx-auto text-left",children:[e.jsxs("div",{className:"bg-[#edf1f7] p-4 rounded-xl border border-[#dde3eb]",children:[e.jsxs("div",{className:"flex items-center gap-2 font-bold text-[#0a1628] mb-1",children:[e.jsx(ee,{size:16,className:"text-teal-500"}),"Personalized Path"]}),e.jsx("p",{className:"text-xs text-[#5a6578] pl-6",children:"Get recommendations based on your level."})]}),e.jsxs("div",{className:"bg-[#edf1f7] p-4 rounded-xl border border-[#dde3eb]",children:[e.jsxs("div",{className:"flex items-center gap-2 font-bold text-[#0a1628] mb-1",children:[e.jsx(Q,{size:16,className:"text-rose-500"}),"Identify Risks"]}),e.jsx("p",{className:"text-xs text-[#5a6578] pl-6",children:"Spot areas that need more attention early."})]})]}),e.jsxs("div",{className:"pt-4 space-y-3",children:[e.jsx(E,{onClick:le,className:"bg-gradient-to-r from-sky-600 to-sky-500 hover:from-sky-700 hover:to-sky-600 text-white px-8 py-6 rounded-xl text-lg font-bold shadow-lg shadow-sky-200 w-full max-w-xs mx-auto",children:N==="followup_diagnostic"?"Start Deep Diagnostic":"Start Assessment"}),e.jsx("button",{onClick:()=>{ce()},className:"block mx-auto text-sm text-slate-500 hover:text-[#5a6578] transition-colors font-medium",children:"Skip for now β†’"})]})]},"intro"),v==="test"&&e.jsxs(g.div,{initial:{opacity:0,x:20},animate:{opacity:1,x:0},exit:{opacity:0,x:-20},className:"space-y-8",children:[e.jsxs("div",{className:"flex items-center justify-between text-sm font-bold text-[#5a6578] mb-2",children:[e.jsxs("span",{children:["Question ",y+1," of ",x.length]}),e.jsxs("span",{children:[Y,"% Completed"]})]}),e.jsx("div",{className:"h-2 bg-[#edf1f7] rounded-full overflow-hidden mb-8",children:e.jsx(g.div,{className:"h-full bg-sky-600 rounded-full",initial:{width:0},animate:{width:`${Y}%`}})}),e.jsxs("div",{className:"bg-[#edf1f7] p-6 rounded-2xl border border-[#dde3eb] mb-6",children:[e.jsxs("p",{className:"text-xs font-bold uppercase tracking-wide text-slate-500 mb-2",children:[te[f.topicArea]," β€’ ",f.difficulty]}),e.jsx("h3",{className:"text-xl font-bold text-[#0a1628] leading-relaxed",children:f.prompt})]}),(f.answerType==="MCQ"||f.answerType==="confidenceLikert")&&e.jsx("div",{className:"grid grid-cols-1 gap-3",children:(f.options||[]).map((t,i)=>e.jsxs("button",{onClick:()=>K(i),className:"w-full text-left p-4 rounded-xl border-2 border-[#dde3eb] hover:border-indigo-600 hover:bg-sky-50 transition-all font-medium text-[#0a1628] group flex items-center justify-between",children:[e.jsxs("span",{className:"flex items-center gap-3",children:[e.jsx("span",{className:"w-8 h-8 rounded-lg bg-white border border-[#dde3eb] flex items-center justify-center text-sm font-bold text-[#5a6578] group-hover:border-sky-300 group-hover:text-sky-600",children:String.fromCharCode(65+i)}),t]}),e.jsx(ve,{size:18,className:"opacity-0 group-hover:opacity-100 text-sky-600 transition-opacity"})]},i))}),(f.answerType==="shortAnswerNumeric"||f.answerType==="shortAnswerText")&&e.jsxs("div",{className:"space-y-3",children:[f.answerType==="shortAnswerNumeric"?e.jsx(e.Fragment,{children:e.jsx(ye,{value:C,onChange:I,placeholder:"Type numeric answer",onSubmit:G,onCalculatorOpen:()=>{j(!0),b(!1)}})}):e.jsx("input",{id:"diagnostic-short-answer",name:"diagnostic-short-answer","aria-label":"Short answer response",value:C,onChange:t=>I(t.target.value),onKeyDown:t=>{t.key==="Enter"&&G()},className:"w-full p-4 rounded-xl border-2 border-[#dde3eb] focus:outline-none focus:ring-2 focus:ring-sky-200 focus:border-sky-500",placeholder:"Type short answer"}),e.jsx(E,{onClick:G,disabled:!C.trim(),className:"w-full bg-sky-600 hover:bg-sky-700 text-white py-3 rounded-xl font-bold",children:"Submit Answer"})]})]},"test"),v==="results"&&e.jsxs(g.div,{initial:{opacity:0,scale:.95},animate:{opacity:1,scale:1},className:"text-center space-y-6",children:[e.jsx("div",{className:"w-24 h-24 bg-teal-100 rounded-full flex items-center justify-center mx-auto mb-4 animate-bounce",children:e.jsx(ee,{size:48,className:"text-teal-600"})}),e.jsx("h3",{className:"text-2xl font-bold text-[#0a1628]",children:"Assessment Completed!"}),e.jsx("p",{className:"text-[#5a6578]",children:"We computed topic-level placement from your IAR responses."}),e.jsxs("div",{className:"bg-[#edf1f7] rounded-2xl p-6 border border-[#dde3eb] text-left space-y-4",children:[e.jsxs("div",{className:"flex items-center gap-3 mb-2",children:[e.jsx("div",{className:"w-10 h-10 rounded-[14px] bg-indigo-50 border border-indigo-100 flex items-center justify-center text-indigo-500 shadow-inner",children:e.jsx(we,{size:18,strokeWidth:2.4})}),e.jsx("h4",{className:"font-display font-black text-[22px] text-slate-800 tracking-tight",children:"Topic Analysis"})]}),e.jsx("div",{className:"space-y-3",children:a&&Object.keys(a).map(t=>e.jsxs("div",{className:"flex items-center justify-between p-3 bg-white rounded-xl border border-[#dde3eb]",children:[e.jsxs("div",{children:[e.jsx("p",{className:"font-medium text-[#0a1628]",children:te[t]}),e.jsxs("p",{className:"text-xs text-slate-500",children:[a[t].correct,"/",a[t].total," correct β€’ ",a[t].scorePercent,"%"]})]}),e.jsxs("span",{className:`text-xs font-bold px-2 py-1 rounded-lg flex items-center gap-1 ${Ae(a[t].classification)}`,children:[a[t].classification==="Mastered"?e.jsx(je,{size:12}):e.jsx(Q,{size:12}),Ie(a[t].classification)]})]},t))})]}),u&&e.jsxs("div",{className:"bg-sky-50 rounded-2xl p-6 border border-sky-100 text-left space-y-2",children:[e.jsxs("div",{className:"flex items-center gap-3 mb-2",children:[e.jsx("div",{className:"w-10 h-10 rounded-[14px] bg-indigo-50 border border-indigo-100 flex items-center justify-center text-indigo-500 shadow-inner",children:e.jsx(J,{size:18,strokeWidth:2.4})}),e.jsx("h4",{className:"font-display font-black text-[22px] text-slate-800 tracking-tight",children:"Grade 12 Readiness Signals"})]}),e.jsx("p",{className:"text-xs text-slate-600",children:"These indicators come from challenge and candidate items only."}),e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-3 gap-2 text-xs",children:[e.jsxs("span",{className:`px-2 py-1 rounded-md font-bold ${u.readyForFiniteMath?"bg-teal-50 text-teal-700":"bg-slate-100 text-slate-600"}`,children:["Finite Math: ",u.readyForFiniteMath?"Ready":"Build More"]}),e.jsxs("span",{className:`px-2 py-1 rounded-md font-bold ${u.readyForAdvancedStats?"bg-teal-50 text-teal-700":"bg-slate-100 text-slate-600"}`,children:["Advanced Stats: ",u.readyForAdvancedStats?"Ready":"Build More"]}),e.jsxs("span",{className:`px-2 py-1 rounded-md font-bold ${u.readyForCalcIntro?"bg-teal-50 text-teal-700":"bg-slate-100 text-slate-600"}`,children:["Calculus Intro: ",u.readyForCalcIntro?"Ready":"Build More"]})]})]}),k.length>0&&e.jsxs("div",{className:"flex items-start gap-3 p-4 bg-rose-50 border border-rose-100 rounded-xl text-left",children:[e.jsx("div",{className:"w-10 h-10 rounded-[14px] bg-rose-100 border border-rose-200 flex items-center justify-center text-rose-600 shadow-inner shrink-0",children:e.jsx(Q,{size:18,strokeWidth:2.3})}),e.jsxs("div",{children:[e.jsx("h5",{className:"font-display font-black text-[20px] tracking-tight text-rose-800 leading-none mb-1",children:"Attention Needed"}),e.jsxs("p",{className:"text-rose-700 text-xs mt-1",children:["We flagged ",k.length," topic area",k.length>1?"s":""," for review. In IAR + Diagnostic mode, focused deep diagnostics may launch before full unlock."]})]})]}),e.jsx("div",{className:"pt-4",children:e.jsx(E,{onClick:me,className:"bg-sky-600 hover:bg-sky-700 text-white px-8 py-4 rounded-xl text-lg font-bold w-full",children:"Go to Dashboard"})})]},"results")]})})]}),e.jsx(O,{children:w&&e.jsxs(g.div,{drag:!0,dragMomentum:!1,initial:{opacity:0,scale:.95},animate:{opacity:1,scale:1},exit:{opacity:0,scale:.95},transition:{type:"spring",damping:25,stiffness:200},style:{position:"absolute",top:"50%",left:"calc(50% + 390px)",y:"-50%"},className:"w-[420px] max-w-[calc(100vw-24px)] bg-white rounded-3xl shadow-2xl border border-slate-200 flex flex-col pointer-events-auto overflow-hidden z-[60]",onClick:t=>t.stopPropagation(),children:[e.jsxs("div",{className:"p-4 border-b border-[#dde3eb] flex items-center justify-between bg-[#edf1f7] flex-shrink-0 cursor-move",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("div",{className:"w-8 h-8 rounded-xl bg-sky-100 flex items-center justify-center text-sky-600",children:e.jsx(T,{size:18})}),e.jsx("h3",{className:"font-bold text-[#0a1628] select-none",children:"Scientific Calc"})]}),e.jsx("button",{onClick:t=>{t.stopPropagation(),j(!1)},className:"w-8 h-8 flex items-center justify-center text-slate-500 hover:text-[#0a1628] hover:bg-[#dde3eb] rounded-lg transition-colors cursor-pointer",title:"Close Calculator",children:e.jsx(Z,{size:16})})]}),e.jsx("div",{className:"p-4 bg-[#f7f9fc]",children:e.jsx(be,{isOpen:!0,onClose:()=>j(!1),inline:!0})})]})})]}):null};export{et as default};
 
1
+ import{r as m,c as z,j as e}from"./vendor-react-Dexh7fmo.js";import{B as E}from"./button-BpeUVhBo.js";import{M as ye}from"./MathAnswerInput-DNG5LFL4.js";import be from"./ScientificCalculator-wlhyNBDf.js";import{triggerDiagnosticCompleted as ge}from"./automationService-DNyauqGd.js";import{m as g,C as T,e as O,T as Q}from"./index-D4nJsLyx.js";import{B as J}from"./brain-CPvGdgWE.js";import{X as Z}from"./x-BONnp2RF.js";import{C as ee}from"./circle-check-big-0Gzyt_f3.js";import{C as ve}from"./chevron-right-COMox1Xb.js";import{C as we}from"./chart-column-D5mAWcRx.js";import{T as je}from"./trending-up-D-vj8Gbq.js";import"./vendor-radix-BRdei-zg.js";import"./clsx-B-dksMZM.js";import"./utils-BQQgILNW.js";import"./apiService-axx1LHMk.js";import"./chevron-up-Bfmq3Clw.js";import"./vendor-firebase-firestore-BML5nJHm.js";import"./vendor-firebase-core-DQ-pMjxd.js";import"./vendor-firebase-auth-COrkgW0P.js";import"./vendor-firebase-storage-BOeKE_0n.js";import"./vendor-firebase-analytics-CCo6E2f7.js";const H="iar-v2-deped-g11-core-g12-candidate-shortform",ae=[{id:"iar-fn-01",topicArea:"Functions",gradeLevel:"G11",quarter:1,difficulty:"basic",competencyCode:"M11GM-Ia-2",competencyDescription:"Evaluates a function and solves basic linear expressions.",answerType:"MCQ",depedBasis:"depedPattern",prompt:"Solve for x: 3x - 4 = 17",options:["5","6","7","8"],correctOptionIndex:2,isConfidenceProbe:!1,scorable:!0,estimatedSeconds:35},{id:"iar-fn-02",topicArea:"Functions",gradeLevel:"G11",quarter:1,difficulty:"standard",competencyCode:"M11GM-Ib-5",competencyDescription:"Finds the domain of a rational function.",answerType:"MCQ",depedBasis:"depedPattern",prompt:"What is the domain of f(x) = 5 / (x - 2)?",options:["All real numbers","x > 2","x β‰  2","x < 2"],correctOptionIndex:2,isConfidenceProbe:!1,scorable:!0,estimatedSeconds:45},{id:"iar-fn-03",topicArea:"Functions",gradeLevel:"G11",quarter:2,difficulty:"standard",competencyCode:"M11GM-Ie-f-1",competencyDescription:"Solves exponential equations in real-life growth contexts.",answerType:"shortAnswerNumeric",depedBasis:"depedPattern",prompt:"A quantity doubles every hour. If it starts at 3, what is the value after 4 hours?",acceptableNumericAnswers:[48],numericTolerance:0,isConfidenceProbe:!1,scorable:!0,estimatedSeconds:55},{id:"iar-fn-04",topicArea:"Functions",gradeLevel:"G11",quarter:2,difficulty:"challenge",competencyCode:"M11GM-Ii-4",competencyDescription:"Determines intercepts and asymptotic behavior of logarithmic functions.",answerType:"MCQ",depedBasis:"depedPattern",prompt:"Which statement is true for f(x) = log(x - 1)?",options:["Domain is all real numbers.","Vertical asymptote is x = 1.","x-intercept is always 0.","Range is x > 1."],correctOptionIndex:1,isConfidenceProbe:!1,scorable:!0,estimatedSeconds:55},{id:"iar-fn-c1",topicArea:"Functions",gradeLevel:"G11",quarter:2,difficulty:"standard",competencyCode:"M11GM-Id-2",competencyDescription:"Determines the inverse of a one-to-one function.",answerType:"shortAnswerNumeric",depedBasis:"depedPattern",prompt:"If f(x) = 2x + 3, what is f⁻¹(11)?",acceptableNumericAnswers:[4],numericTolerance:0,isConfidenceProbe:!1,scorable:!0,estimatedSeconds:35},{id:"iar-bm-01",topicArea:"BusinessMath",gradeLevel:"G11",quarter:3,difficulty:"basic",competencyCode:"M11GM-IIa-b-1",competencyDescription:"Computes simple interest and maturity value.",answerType:"shortAnswerNumeric",depedBasis:"depedPattern",prompt:"Find the simple interest on PHP 8,000 at 5% annual rate for 2 years.",acceptableNumericAnswers:[800],numericTolerance:0,isConfidenceProbe:!1,scorable:!0,estimatedSeconds:45},{id:"iar-bm-02",topicArea:"BusinessMath",gradeLevel:"G11",quarter:3,difficulty:"standard",competencyCode:"M11GM-IIa-2",competencyDescription:"Distinguishes simple and compound interest contexts.",answerType:"MCQ",depedBasis:"depedPattern",prompt:"Which statement correctly describes compound interest?",options:["Interest is based only on original principal.","Interest is computed once at maturity.","Interest is computed on principal plus accumulated interest.","Interest is always lower than simple interest."],correctOptionIndex:2,isConfidenceProbe:!1,scorable:!0,estimatedSeconds:45},{id:"iar-bm-03",topicArea:"BusinessMath",gradeLevel:"G11",quarter:3,difficulty:"standard",competencyCode:"M11GM-IIc-d-1",competencyDescription:"Computes annuity future value in basic settings.",answerType:"MCQ",depedBasis:"depedPattern",prompt:"A student saves PHP 1,000 monthly for 6 months with no interest. What is the accumulated amount?",options:["PHP 5,000","PHP 6,000","PHP 7,000","PHP 12,000"],correctOptionIndex:1,isConfidenceProbe:!1,scorable:!0,estimatedSeconds:40},{id:"iar-bm-04",topicArea:"BusinessMath",gradeLevel:"G11",quarter:3,difficulty:"challenge",competencyCode:"M11GM-IIf-3",competencyDescription:"Solves business and consumer loan scenarios.",answerType:"MCQ",depedBasis:"depedPattern",prompt:"A borrower receives PHP 20,000 and repays PHP 22,400 after 1 year. What is the annual simple interest rate?",options:["8%","10%","12%","14%"],correctOptionIndex:2,isConfidenceProbe:!1,scorable:!0,estimatedSeconds:60},{id:"iar-bm-c1",topicArea:"BusinessMath",gradeLevel:"G11",quarter:3,difficulty:"standard",competencyCode:"M11GM-IIc-d-1",competencyDescription:"Finds future value and present value of annuities.",answerType:"shortAnswerNumeric",depedBasis:"depedPattern",prompt:"Without interest, what is the present value of a 12-month annuity paying PHP 500 each month?",acceptableNumericAnswers:[6e3],numericTolerance:0,isConfidenceProbe:!1,scorable:!0,estimatedSeconds:40},{id:"iar-lg-01",topicArea:"Logic",gradeLevel:"G11",quarter:4,difficulty:"basic",competencyCode:"M11GM-IIg-1",competencyDescription:"Identifies and negates propositions.",answerType:"MCQ",depedBasis:"depedPattern",prompt:'If p is "All triangles have three sides," what is not p?',options:["Some triangles have three sides.","No triangle has three sides.","At least one triangle does not have three sides.","All triangles are polygons."],correctOptionIndex:2,isConfidenceProbe:!1,scorable:!0,estimatedSeconds:45},{id:"iar-lg-02",topicArea:"Logic",gradeLevel:"G11",quarter:4,difficulty:"standard",competencyCode:"M11GM-IIh-1",competencyDescription:"Determines truth values of compound propositions.",answerType:"MCQ",depedBasis:"depedPattern",prompt:"When p is true and q is false, what is the truth value of p -> q?",options:["True","False","Cannot be determined","Both true and false"],correctOptionIndex:1,isConfidenceProbe:!1,scorable:!0,estimatedSeconds:40},{id:"iar-lg-03",topicArea:"Logic",gradeLevel:"G11",quarter:4,difficulty:"standard",competencyCode:"M11GM-IIi-1",competencyDescription:"Identifies common reasoning fallacies in short arguments.",answerType:"shortAnswerText",depedBasis:"depedPattern",prompt:'A post says, "Everyone in my class passed because we used this lucky pen." Type the best label for this weak reasoning.',acceptableTextAnswers:["false cause","false causation","post hoc","hasty generalization"],isConfidenceProbe:!1,scorable:!0,estimatedSeconds:60},{id:"iar-lg-04",topicArea:"Logic",gradeLevel:"G11",quarter:4,difficulty:"challenge",competencyCode:"M11GM-IIi-2",competencyDescription:"Determines the validity of categorical syllogisms.",answerType:"MCQ",depedBasis:"depedPattern",prompt:"All squares are rectangles. All rectangles are quadrilaterals. Therefore all squares are quadrilaterals. This argument is:",options:["Valid","Invalid","A fallacy of composition","A contradiction"],correctOptionIndex:0,isConfidenceProbe:!1,scorable:!0,estimatedSeconds:55},{id:"iar-lg-c1",topicArea:"Logic",gradeLevel:"G11",quarter:4,difficulty:"standard",competencyCode:"M11GM-IIj-1",competencyDescription:"Illustrates methods of proof and disproof.",answerType:"MCQ",depedBasis:"depedPattern",prompt:'To prove "if n is even then nΒ² is even," which method is commonly used?',options:["Direct proof","Proof by contradiction only","Survey method","Graph sketch only"],correctOptionIndex:0,isConfidenceProbe:!1,scorable:!0,estimatedSeconds:40}];function Ne(s){return s>=75?"Mastered":s>=40?"NeedsReview":"HighRisk"}function Ce(){return ae.filter(s=>s.depedBasis==="depedPattern"&&!!s.competencyCode)}function ke(s=ae){const n=s.reduce((p,h)=>p+h.estimatedSeconds,0);return Math.round(n/60*10)/10}const te={Functions:"Functions and Graphs",BusinessMath:"Business and Financial Mathematics",Logic:"Logic and Reasoning"},Me={atRiskSubjectIds:[],questionSetVersion:H},x=Ce(),se=s=>s.trim().toLowerCase().replace(/\s+/g," "),re=(s,n)=>{if(!s.scorable)return!1;if(s.answerType==="MCQ")return typeof n=="number"&&n===s.correctOptionIndex;if(s.answerType==="shortAnswerNumeric"){if(typeof n!="string")return!1;const p=Number(n);if(Number.isNaN(p))return!1;const h=s.numericTolerance??0;return(s.acceptableNumericAnswers||[]).some(B=>Math.abs(p-B)<=h)}if(s.answerType==="shortAnswerText"){if(typeof n!="string")return!1;const p=se(n);return(s.acceptableTextAnswers||[]).some(h=>se(h)===p)}return!1},Ae=s=>s==="Mastered"?"text-teal-600 bg-teal-50":s==="NeedsReview"?"text-amber-700 bg-amber-50":"text-red-600 bg-red-50",Ie=s=>s==="NeedsReview"?"Needs Review":s==="HighRisk"?"High Risk":"Mastered",et=({isOpen:s,onClose:n,onComplete:p,lrn:h,gradeLevel:B="Grade 11",workflowMode:ie="iar_only",assessmentType:N="initial_assessment"})=>{const[v,L]=m.useState("intro"),[y,W]=m.useState(0),[ne,_]=m.useState([]),[C,I]=m.useState(""),[w,j]=m.useState(!1),[oe,b]=m.useState(!1),[a,q]=m.useState(null),[u,$]=m.useState(null),[k,V]=m.useState([]),[Se,U]=m.useState(!1);z.useEffect(()=>{s&&(L("intro"),W(0),_([]),I(""),j(!1),b(!1),q(null),$(null),V([]))},[s]),z.useEffect(()=>{if(!s||v!=="test"){b(!1);return}if(y>0||w){b(!1);return}b(!0);const t=window.setTimeout(()=>{b(!1)},2800);return()=>window.clearTimeout(t)},[s,v,y,w]);const ce=()=>{p({status:"skipped",...Me}),n()},R=()=>{n()};z.useEffect(()=>{if(!s)return;const t=i=>{i.key==="Escape"&&R()};return window.addEventListener("keydown",t),()=>window.removeEventListener("keydown",t)},[s]);const le=()=>{L("test")},de=t=>{_(t),I(""),j(!1),y<x.length-1?setTimeout(()=>{W(i=>i+1)},300):pe(t)},K=t=>{const i=[...ne];i[y]=t,de(i)},G=()=>{C.trim()&&K(C.trim())},pe=async t=>{const i=[],S={Functions:{correct:0,total:0},BusinessMath:{correct:0,total:0},Logic:{correct:0,total:0}},fe={Functions:[],BusinessMath:[],Logic:[]},P={};x.forEach((r,c)=>{const l=t[c];if(r.answerType==="confidenceLikert"&&typeof l=="number"&&fe[r.topicArea].push(l+1),!r.scorable)return;const d=re(r,l);S[r.topicArea].total+=1,d&&(S[r.topicArea].correct+=1),P[r.topicArea]||(P[r.topicArea]=[]),P[r.topicArea].push({correct:d,questionId:r.id,difficulty:r.difficulty,gradeLevelTag:r.gradeLevel,quarter:r.quarter,answerType:r.answerType})});const o=Object.keys(S).reduce((r,c)=>{const{correct:l,total:d}=S[c],M=d>0?Math.round(l/d*100):0,A=Ne(M);return A!=="Mastered"&&i.push(c),r[c]={correct:l,total:d,scorePercent:M,classification:A},r},{}),D=x.filter(r=>r.scorable&&r.gradeLevel==="G12Candidate"),xe=D.reduce((r,c)=>{const l=x.findIndex(d=>d.id===c.id);return r+(re(c,t[l])?1:0)},0),F=D.length>0?xe/D.length:1,he={readyForFiniteMath:Object.values(o).filter(r=>r.classification==="Mastered").length/3>=.67&&o.Functions.classification!=="HighRisk"&&o.BusinessMath.classification!=="HighRisk"&&F>=.5,readyForAdvancedStats:o.Logic.classification==="Mastered"&&F>=.67,readyForCalcIntro:o.Functions.classification==="Mastered"&&F>=.67,needsStrongerFunctions:o.Functions.classification!=="Mastered",needsStrongerBusinessMath:o.BusinessMath.classification!=="Mastered"};if(Object.keys(o).sort((r,c)=>{const l=o[r],d=o[c],M=X=>X==="HighRisk"?0:X==="NeedsReview"?1:2,A=M(l.classification)-M(d.classification);return A!==0?A:l.scorePercent-d.scorePercent}),V(i),q(o),$(he),L("results"),h){U(!0);try{const r=Object.keys(o).map(c=>({subject:c,score:o[c].scorePercent}));await ge(h,r,B,P,ie,N),console.log("[OK] Automation: diagnostic pipeline completed")}catch(r){console.error("[WARN] Automation: diagnostic pipeline failed:",r)}finally{U(!1)}}},me=()=>{if(!a||!u){p({status:"completed",atRiskSubjectIds:k,questionSetVersion:H}),n();return}p({status:"completed",atRiskSubjectIds:k,topicScores:{Functions:a.Functions.scorePercent,BusinessMath:a.BusinessMath.scorePercent,Logic:a.Logic.scorePercent},topicClassifications:{Functions:a.Functions.classification,BusinessMath:a.BusinessMath.classification,Logic:a.Logic.classification},priorityTopics:Object.keys(a).sort((t,i)=>a[t].scorePercent-a[i].scorePercent),g12ReadinessIndicators:u,questionSetVersion:H}),n()},f=x[y],Y=Math.round(y/x.length*100),ue=ke(x);return s?e.jsxs("div",{className:"fixed inset-0 z-50 flex items-center justify-center p-4 bg-black/50 backdrop-blur-sm",onClick:()=>{R()},children:[e.jsxs(g.div,{initial:{opacity:0,scale:.9},animate:{opacity:1,scale:1},exit:{opacity:0,scale:.9},className:"bg-white rounded-3xl shadow-2xl max-w-2xl w-full flex flex-col max-h-[90vh] pointer-events-auto overflow-hidden relative z-[51]",onClick:t=>t.stopPropagation(),children:[e.jsxs("div",{className:"px-8 py-6 border-b border-[#dde3eb] flex items-center justify-between bg-[#edf1f7] flex-shrink-0",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("div",{className:"w-10 h-10 bg-sky-100 rounded-xl flex items-center justify-center text-sky-600",children:e.jsx(J,{size:24})}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-xl font-bold text-[#0a1628]",children:N==="followup_diagnostic"?"Deep Diagnostic":"Initial Assessment"}),e.jsx("p",{className:"text-sm text-[#5a6578]",children:"Analyze your strengths & weaknesses"})]})]}),e.jsxs("div",{className:"flex items-center gap-2 relative",children:[e.jsxs("div",{className:"relative",children:[e.jsx("button",{onClick:()=>{j(!w),b(!1)},className:`relative w-10 h-10 rounded-xl flex items-center justify-center transition-all duration-200 border-2 ${w?"bg-sky-100 border-sky-300 text-sky-700 shadow-sm":"bg-white border-[#dde3eb] text-slate-500 hover:text-sky-600 hover:border-sky-200 hover:bg-sky-50"}`,title:"Toggle Calculator",children:e.jsx(T,{size:20})}),e.jsx(O,{children:s&&v==="test"&&oe&&!w&&e.jsxs(g.div,{initial:{opacity:0,y:10,scale:.95},animate:{opacity:1,y:0,scale:1},exit:{opacity:0,y:10,scale:.95},className:"absolute right-0 top-full mt-3 w-[260px] bg-[#0a1628] text-white border border-[#2a3648] rounded-2xl p-4 shadow-2xl z-50 pointer-events-none",children:[e.jsxs("div",{className:"flex gap-3",children:[e.jsx("div",{className:"w-8 h-8 rounded-full bg-sky-500/20 flex items-center justify-center flex-shrink-0",children:e.jsx(T,{size:16,className:"text-sky-400"})}),e.jsxs("div",{children:[e.jsx("h4",{className:"font-bold text-sm mb-1",children:"Calculator Available"}),e.jsx("p",{className:"text-xs text-slate-300 leading-relaxed",children:"You can freely use the scientific calculator at any time during this quiz."})]})]}),e.jsx("div",{className:"absolute -top-2 right-4 w-4 h-4 bg-[#0a1628] border-l border-t border-[#2a3648] rotate-45 rounded-tl-sm"})]})})]}),e.jsx("button",{onClick:()=>{R()},className:"w-10 h-10 rounded-xl flex items-center justify-center text-slate-500 border-2 border-transparent hover:text-[#5a6578] hover:bg-[#dde3eb] hover:border-[#dde3eb] transition-all",title:"Close assessment",children:e.jsx(Z,{size:20})})]})]}),e.jsx("div",{className:"p-8 overflow-y-auto",children:e.jsxs(O,{mode:"wait",children:[v==="intro"&&e.jsxs(g.div,{initial:{opacity:0,x:20},animate:{opacity:1,x:0},exit:{opacity:0,x:-20},className:"text-center space-y-6",children:[e.jsx("div",{className:"w-32 h-32 bg-sky-50 rounded-full flex items-center justify-center mx-auto mb-6",children:e.jsx(T,{size:64,className:"text-sky-600"})}),e.jsx("h3",{className:"text-2xl font-bold text-[#0a1628]",children:N==="followup_diagnostic"?"Let's close the gaps":"Welcome to MathPulse AI!"}),e.jsx("p",{className:"text-[#5a6578] max-w-md mx-auto leading-relaxed",children:N==="followup_diagnostic"?"You have pending weak-area checks from your initial assessment. Complete this deep diagnostic to unlock regular modules and practice.":`To personalize your learning path, complete a DepEd competency-based SHS diagnostic (${x.length} items, around ${ue} minutes).`}),e.jsxs("div",{className:"grid grid-cols-2 gap-4 max-w-lg mx-auto text-left",children:[e.jsxs("div",{className:"bg-[#edf1f7] p-4 rounded-xl border border-[#dde3eb]",children:[e.jsxs("div",{className:"flex items-center gap-2 font-bold text-[#0a1628] mb-1",children:[e.jsx(ee,{size:16,className:"text-teal-500"}),"Personalized Path"]}),e.jsx("p",{className:"text-xs text-[#5a6578] pl-6",children:"Get recommendations based on your level."})]}),e.jsxs("div",{className:"bg-[#edf1f7] p-4 rounded-xl border border-[#dde3eb]",children:[e.jsxs("div",{className:"flex items-center gap-2 font-bold text-[#0a1628] mb-1",children:[e.jsx(Q,{size:16,className:"text-rose-500"}),"Identify Risks"]}),e.jsx("p",{className:"text-xs text-[#5a6578] pl-6",children:"Spot areas that need more attention early."})]})]}),e.jsxs("div",{className:"pt-4 space-y-3",children:[e.jsx(E,{onClick:le,className:"bg-gradient-to-r from-sky-600 to-sky-500 hover:from-sky-700 hover:to-sky-600 text-white px-8 py-6 rounded-xl text-lg font-bold shadow-lg shadow-sky-200 w-full max-w-xs mx-auto",children:N==="followup_diagnostic"?"Start Deep Diagnostic":"Start Assessment"}),e.jsx("button",{onClick:()=>{ce()},className:"block mx-auto text-sm text-slate-500 hover:text-[#5a6578] transition-colors font-medium",children:"Skip for now β†’"})]})]},"intro"),v==="test"&&e.jsxs(g.div,{initial:{opacity:0,x:20},animate:{opacity:1,x:0},exit:{opacity:0,x:-20},className:"space-y-8",children:[e.jsxs("div",{className:"flex items-center justify-between text-sm font-bold text-[#5a6578] mb-2",children:[e.jsxs("span",{children:["Question ",y+1," of ",x.length]}),e.jsxs("span",{children:[Y,"% Completed"]})]}),e.jsx("div",{className:"h-2 bg-[#edf1f7] rounded-full overflow-hidden mb-8",children:e.jsx(g.div,{className:"h-full bg-sky-600 rounded-full",initial:{width:0},animate:{width:`${Y}%`}})}),e.jsxs("div",{className:"bg-[#edf1f7] p-6 rounded-2xl border border-[#dde3eb] mb-6",children:[e.jsxs("p",{className:"text-xs font-bold uppercase tracking-wide text-slate-500 mb-2",children:[te[f.topicArea]," β€’ ",f.difficulty]}),e.jsx("h3",{className:"text-xl font-bold text-[#0a1628] leading-relaxed",children:f.prompt})]}),(f.answerType==="MCQ"||f.answerType==="confidenceLikert")&&e.jsx("div",{className:"grid grid-cols-1 gap-3",children:(f.options||[]).map((t,i)=>e.jsxs("button",{onClick:()=>K(i),className:"w-full text-left p-4 rounded-xl border-2 border-[#dde3eb] hover:border-indigo-600 hover:bg-sky-50 transition-all font-medium text-[#0a1628] group flex items-center justify-between",children:[e.jsxs("span",{className:"flex items-center gap-3",children:[e.jsx("span",{className:"w-8 h-8 rounded-lg bg-white border border-[#dde3eb] flex items-center justify-center text-sm font-bold text-[#5a6578] group-hover:border-sky-300 group-hover:text-sky-600",children:String.fromCharCode(65+i)}),t]}),e.jsx(ve,{size:18,className:"opacity-0 group-hover:opacity-100 text-sky-600 transition-opacity"})]},i))}),(f.answerType==="shortAnswerNumeric"||f.answerType==="shortAnswerText")&&e.jsxs("div",{className:"space-y-3",children:[f.answerType==="shortAnswerNumeric"?e.jsx(e.Fragment,{children:e.jsx(ye,{value:C,onChange:I,placeholder:"Type numeric answer",onSubmit:G,onCalculatorOpen:()=>{j(!0),b(!1)}})}):e.jsx("input",{id:"diagnostic-short-answer",name:"diagnostic-short-answer","aria-label":"Short answer response",value:C,onChange:t=>I(t.target.value),onKeyDown:t=>{t.key==="Enter"&&G()},className:"w-full p-4 rounded-xl border-2 border-[#dde3eb] focus:outline-none focus:ring-2 focus:ring-sky-200 focus:border-sky-500",placeholder:"Type short answer"}),e.jsx(E,{onClick:G,disabled:!C.trim(),className:"w-full bg-sky-600 hover:bg-sky-700 text-white py-3 rounded-xl font-bold",children:"Submit Answer"})]})]},"test"),v==="results"&&e.jsxs(g.div,{initial:{opacity:0,scale:.95},animate:{opacity:1,scale:1},className:"text-center space-y-6",children:[e.jsx("div",{className:"w-24 h-24 bg-teal-100 rounded-full flex items-center justify-center mx-auto mb-4 animate-bounce",children:e.jsx(ee,{size:48,className:"text-teal-600"})}),e.jsx("h3",{className:"text-2xl font-bold text-[#0a1628]",children:"Assessment Completed!"}),e.jsx("p",{className:"text-[#5a6578]",children:"We computed topic-level placement from your IAR responses."}),e.jsxs("div",{className:"bg-[#edf1f7] rounded-2xl p-6 border border-[#dde3eb] text-left space-y-4",children:[e.jsxs("div",{className:"flex items-center gap-3 mb-2",children:[e.jsx("div",{className:"w-10 h-10 rounded-[14px] bg-indigo-50 border border-indigo-100 flex items-center justify-center text-indigo-500 shadow-inner",children:e.jsx(we,{size:18,strokeWidth:2.4})}),e.jsx("h4",{className:"font-display font-black text-[22px] text-slate-800 tracking-tight",children:"Topic Analysis"})]}),e.jsx("div",{className:"space-y-3",children:a&&Object.keys(a).map(t=>e.jsxs("div",{className:"flex items-center justify-between p-3 bg-white rounded-xl border border-[#dde3eb]",children:[e.jsxs("div",{children:[e.jsx("p",{className:"font-medium text-[#0a1628]",children:te[t]}),e.jsxs("p",{className:"text-xs text-slate-500",children:[a[t].correct,"/",a[t].total," correct β€’ ",a[t].scorePercent,"%"]})]}),e.jsxs("span",{className:`text-xs font-bold px-2 py-1 rounded-lg flex items-center gap-1 ${Ae(a[t].classification)}`,children:[a[t].classification==="Mastered"?e.jsx(je,{size:12}):e.jsx(Q,{size:12}),Ie(a[t].classification)]})]},t))})]}),u&&e.jsxs("div",{className:"bg-sky-50 rounded-2xl p-6 border border-sky-100 text-left space-y-2",children:[e.jsxs("div",{className:"flex items-center gap-3 mb-2",children:[e.jsx("div",{className:"w-10 h-10 rounded-[14px] bg-indigo-50 border border-indigo-100 flex items-center justify-center text-indigo-500 shadow-inner",children:e.jsx(J,{size:18,strokeWidth:2.4})}),e.jsx("h4",{className:"font-display font-black text-[22px] text-slate-800 tracking-tight",children:"Grade 12 Readiness Signals"})]}),e.jsx("p",{className:"text-xs text-slate-600",children:"These indicators come from challenge and candidate items only."}),e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-3 gap-2 text-xs",children:[e.jsxs("span",{className:`px-2 py-1 rounded-md font-bold ${u.readyForFiniteMath?"bg-teal-50 text-teal-700":"bg-slate-100 text-slate-600"}`,children:["Finite Math: ",u.readyForFiniteMath?"Ready":"Build More"]}),e.jsxs("span",{className:`px-2 py-1 rounded-md font-bold ${u.readyForAdvancedStats?"bg-teal-50 text-teal-700":"bg-slate-100 text-slate-600"}`,children:["Advanced Stats: ",u.readyForAdvancedStats?"Ready":"Build More"]}),e.jsxs("span",{className:`px-2 py-1 rounded-md font-bold ${u.readyForCalcIntro?"bg-teal-50 text-teal-700":"bg-slate-100 text-slate-600"}`,children:["Calculus Intro: ",u.readyForCalcIntro?"Ready":"Build More"]})]})]}),k.length>0&&e.jsxs("div",{className:"flex items-start gap-3 p-4 bg-rose-50 border border-rose-100 rounded-xl text-left",children:[e.jsx("div",{className:"w-10 h-10 rounded-[14px] bg-rose-100 border border-rose-200 flex items-center justify-center text-rose-600 shadow-inner shrink-0",children:e.jsx(Q,{size:18,strokeWidth:2.3})}),e.jsxs("div",{children:[e.jsx("h5",{className:"font-display font-black text-[20px] tracking-tight text-rose-800 leading-none mb-1",children:"Attention Needed"}),e.jsxs("p",{className:"text-rose-700 text-xs mt-1",children:["We flagged ",k.length," topic area",k.length>1?"s":""," for review. In IAR + Diagnostic mode, focused deep diagnostics may launch before full unlock."]})]})]}),e.jsx("div",{className:"pt-4",children:e.jsx(E,{onClick:me,className:"bg-sky-600 hover:bg-sky-700 text-white px-8 py-4 rounded-xl text-lg font-bold w-full",children:"Go to Dashboard"})})]},"results")]})})]}),e.jsx(O,{children:w&&e.jsxs(g.div,{drag:!0,dragMomentum:!1,initial:{opacity:0,scale:.95},animate:{opacity:1,scale:1},exit:{opacity:0,scale:.95},transition:{type:"spring",damping:25,stiffness:200},style:{position:"absolute",top:"50%",left:"calc(50% + 390px)",y:"-50%"},className:"w-[420px] max-w-[calc(100vw-24px)] bg-white rounded-3xl shadow-2xl border border-slate-200 flex flex-col pointer-events-auto overflow-hidden z-[60]",onClick:t=>t.stopPropagation(),children:[e.jsxs("div",{className:"p-4 border-b border-[#dde3eb] flex items-center justify-between bg-[#edf1f7] flex-shrink-0 cursor-move",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("div",{className:"w-8 h-8 rounded-xl bg-sky-100 flex items-center justify-center text-sky-600",children:e.jsx(T,{size:18})}),e.jsx("h3",{className:"font-bold text-[#0a1628] select-none",children:"Scientific Calc"})]}),e.jsx("button",{onClick:t=>{t.stopPropagation(),j(!1)},className:"w-8 h-8 flex items-center justify-center text-slate-500 hover:text-[#0a1628] hover:bg-[#dde3eb] rounded-lg transition-colors cursor-pointer",title:"Close Calculator",children:e.jsx(Z,{size:16})})]}),e.jsx("div",{className:"p-4 bg-[#f7f9fc]",children:e.jsx(be,{isOpen:!0,onClose:()=>j(!1),inline:!0})})]})})]}):null};export{et as default};
assets/{FloatingAITutor-CEXAW82N.js β†’ FloatingAITutor-DkH3KrR1.js} RENAMED
@@ -1,7 +1,7 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/ChatMarkdown-DLD56_rz.js","assets/index-DUxNDyEU.js","assets/vendor-react-Dexh7fmo.js","assets/vendor-firebase-auth-COrkgW0P.js","assets/vendor-firebase-core-DQ-pMjxd.js","assets/vendor-firebase-firestore-BML5nJHm.js","assets/vendor-firebase-storage-BOeKE_0n.js","assets/vendor-firebase-analytics-CCo6E2f7.js","assets/index-CR2i2gnI.css","assets/vendor-markdown-C5ikSDMA.js","assets/vendor-markdown-CBmFCdgC.css","assets/apiService-BcE-mX0v.js"])))=>i.map(i=>d[i]);
2
- import{c as S,y as A,_ as w,m as p,I as M}from"./index-DUxNDyEU.js";import{r as a,j as e}from"./vendor-react-Dexh7fmo.js";import{M as f}from"./minus-DlNhq6wp.js";import{X as b}from"./x-DwrHgz_L.js";import{S as C}from"./send-CmgfnqX2.js";import"./vendor-firebase-auth-COrkgW0P.js";import"./vendor-firebase-core-DQ-pMjxd.js";import"./vendor-firebase-firestore-BML5nJHm.js";import"./vendor-firebase-storage-BOeKE_0n.js";import"./vendor-firebase-analytics-CCo6E2f7.js";/**
3
  * @license lucide-react v0.487.0 - ISC
4
  *
5
  * This source code is licensed under the ISC license.
6
  * See the LICENSE file in the root directory of this source tree.
7
- */const L=[["polyline",{points:"15 3 21 3 21 9",key:"mznyad"}],["polyline",{points:"9 21 3 21 3 15",key:"1avn1i"}],["line",{x1:"21",x2:"14",y1:"3",y2:"10",key:"ota7mn"}],["line",{x1:"3",x2:"10",y1:"21",y2:"14",key:"1atl0r"}]],E=S("maximize-2",L),O=a.lazy(()=>w(()=>import("./ChatMarkdown-DLD56_rz.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10]))),X=({constraintsRef:T,onFullScreen:y})=>{const{activeSessionId:n,setActiveSessionId:g,createNewSession:j,getActiveSession:v,sendMessage:N,isLoading:o}=A(),[s,r]=a.useState(!1),[l,c]=a.useState(()=>typeof window>"u"?!1:window.localStorage.getItem("floating_ai_tutor_minimized")==="1"),[i,d]=a.useState(""),u=a.useRef(null);a.useEffect(()=>{typeof window>"u"||window.localStorage.setItem("floating_ai_tutor_minimized",l?"1":"0")},[l]),a.useEffect(()=>{s&&w(async()=>{const{warmupBackend:t}=await import("./apiService-BcE-mX0v.js");return{warmupBackend:t}},__vite__mapDeps([11,1,2,3,4,5,6,7,8])).then(({warmupBackend:t})=>{t()}).catch(t=>{console.warn("Floating tutor warmup skipped:",t)})},[s]),a.useEffect(()=>{if(s&&!n){const t={id:"1",sender:"ai",text:"Hi! I'm your AI math tutor. What would you like to learn about today?",timestamp:new Date().toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"})},z=j(t);g(z)}},[s]);const m=v()?.messages||[],k=()=>{u.current?.scrollIntoView({behavior:"smooth"})};a.useEffect(()=>{k()},[m]);const x=async()=>{if(!i.trim()||!n||o)return;const t=i.trim();d(""),await N(n,t)},I=()=>{y()},h=()=>{r(!1),c(!0)},_=()=>{c(!1)};return e.jsxs("div",{className:"pointer-events-none flex flex-col items-end",children:[e.jsxs("div",{className:`pointer-events-auto mb-4 w-80 bg-[#f7f9fc] rounded-3xl shadow-2xl border border-[#dde3eb] flex flex-col overflow-hidden transition-all duration-300 origin-bottom-right select-none ${s?"opacity-100 scale-100 translate-y-0":"opacity-0 scale-95 translate-y-10 pointer-events-none h-0"}`,style:{maxHeight:s?"32rem":"0"},children:[e.jsxs("div",{className:"bg-gradient-to-r from-sky-600 to-sky-500 p-4 flex items-center justify-between flex-shrink-0",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("div",{className:"w-10 h-10 bg-white/20 rounded-xl flex items-center justify-center backdrop-blur-sm",children:e.jsx("img",{src:"/avatar/avatar_icon.png",alt:"AI Tutor",className:"w-9 h-9 object-contain drop-shadow-md"})}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-white font-bold text-sm",children:"L.O.L.I."}),e.jsxs("p",{className:"text-sky-100 text-[10px] leading-tight",children:["Logical Operations &",e.jsx("br",{}),"Learning Intelligence"]})]})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("button",{onClick:I,type:"button","aria-label":"Open fullscreen",className:"p-2 hover:bg-white/20 rounded-lg transition-colors",title:"Open fullscreen",children:e.jsx(E,{size:16,className:"text-white"})}),e.jsx("button",{type:"button","aria-label":"Minimize AI tutor launcher",onClick:h,className:"p-2 hover:bg-white/20 rounded-lg transition-colors",title:"Minimize",children:e.jsx(f,{size:16,className:"text-white"})}),e.jsx("button",{type:"button","aria-label":"Close chat",onClick:()=>r(!1),className:"p-2 hover:bg-white/20 rounded-lg transition-colors",children:e.jsx(b,{size:16,className:"text-white"})})]})]}),e.jsxs("div",{className:"flex-1 overflow-y-auto p-4 space-y-3 bg-[#edf1f7]",children:[m.map(t=>e.jsx("div",{className:`flex ${t.sender==="user"?"justify-end":"justify-start"}`,children:e.jsxs("div",{className:`max-w-[75%] rounded-2xl px-4 py-2.5 ${t.sender==="user"?"bg-sky-600 text-white":"bg-white text-[#0a1628] shadow-sm border border-[#dde3eb]"}`,children:[t.sender==="user"?e.jsx("p",{className:"text-sm whitespace-pre-wrap",children:t.text}):e.jsx(a.Suspense,{fallback:e.jsx("p",{className:"text-sm whitespace-pre-wrap",children:t.text}),children:e.jsx(O,{children:t.text})}),e.jsx("p",{className:`text-[10px] mt-1 ${t.sender==="user"?"text-sky-200":"text-slate-500"}`,children:t.timestamp})]})},t.id)),o&&e.jsx("div",{className:"flex justify-start",children:e.jsx("div",{className:"bg-white text-[#0a1628] shadow-sm border border-[#dde3eb] rounded-2xl px-4 py-2.5 max-w-[75%]",children:e.jsxs("div",{className:"flex gap-1",children:[e.jsx("div",{className:"w-2 h-2 bg-sky-400 rounded-full animate-bounce"}),e.jsx("div",{className:"w-2 h-2 bg-sky-400 rounded-full animate-bounce [animation-delay:150ms]"}),e.jsx("div",{className:"w-2 h-2 bg-sky-400 rounded-full animate-bounce [animation-delay:300ms]"})]})})}),e.jsx("div",{ref:u})]}),e.jsx("div",{className:"p-4 border-t border-[#dde3eb] bg-white flex-shrink-0",children:e.jsxs("div",{className:"flex gap-2",children:[e.jsx("input",{id:"ai-tutor-input",name:"ai-tutor-input","aria-label":"Ask AI tutor a question",type:"text",value:i,onChange:t=>d(t.target.value),onKeyPress:t=>t.key==="Enter"&&x(),placeholder:"Ask me anything...",className:"flex-1 px-4 py-2.5 rounded-xl border border-[#dde3eb] focus:outline-none focus:ring-2 focus:ring-sky-500 text-sm bg-[#f7f9fc]"}),e.jsx("button",{type:"button","aria-label":"Send message",onClick:x,className:"p-2.5 bg-sky-600 hover:bg-sky-700 text-white rounded-xl transition-colors disabled:opacity-50 disabled:cursor-not-allowed",disabled:!i.trim()||o,children:e.jsx(C,{size:18})})]})})]}),e.jsx("div",{className:"pointer-events-auto relative self-end",children:l?e.jsx(p.button,{type:"button",onClick:_,whileHover:{scale:1.08},whileTap:{scale:.95},className:"h-9 w-9 rounded-full bg-slate-900/85 text-white shadow-lg ring-1 ring-white/20 backdrop-blur-sm flex items-center justify-center","aria-label":"Restore AI tutor launcher",title:"Show AI tutor",children:e.jsx(M,{size:14})}):e.jsxs("div",{className:"relative group",children:[!s&&e.jsxs("div",{className:"absolute right-full mr-4 top-1/2 -translate-y-1/2 px-4 py-2 bg-slate-800 text-white text-sm rounded-xl opacity-0 group-hover:opacity-100 transition-opacity duration-300 pointer-events-none whitespace-nowrap shadow-xl z-50",children:["Hello! I'm L.O.L.I., how may I help you?",e.jsx("div",{className:"absolute top-1/2 -translate-y-1/2 -right-1 w-3 h-3 bg-slate-800 rotate-45"})]}),!s&&e.jsx("button",{type:"button","aria-label":"Minimize AI tutor launcher",title:"Minimize",onClick:h,className:"absolute -top-2 -left-2 z-10 h-6 w-6 rounded-full bg-white text-slate-700 border border-slate-200 shadow-md hover:bg-slate-100 transition-colors flex items-center justify-center",children:e.jsx(f,{size:12})}),e.jsx(p.button,{type:"button",onClick:()=>r(!s),whileHover:{scale:1.1},whileTap:{scale:.9},className:"w-16 h-16 bg-gradient-to-br from-sky-600 to-sky-500 rounded-xl shadow-2xl flex items-center justify-center text-white hover:shadow-sky-300/50 transition-all","aria-label":s?"Close AI tutor chat":"Open AI tutor chat",children:s?e.jsx(b,{size:28}):e.jsx("img",{src:"/avatar/avatar_icon.png",alt:"AI Tutor",className:"w-14 h-14 object-contain drop-shadow-lg"})})]})})]})};export{X as default};
 
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/ChatMarkdown-B34PtYCE.js","assets/index-D4nJsLyx.js","assets/vendor-react-Dexh7fmo.js","assets/vendor-firebase-auth-COrkgW0P.js","assets/vendor-firebase-core-DQ-pMjxd.js","assets/vendor-firebase-firestore-BML5nJHm.js","assets/vendor-firebase-storage-BOeKE_0n.js","assets/vendor-firebase-analytics-CCo6E2f7.js","assets/index-CR2i2gnI.css","assets/vendor-markdown-C5ikSDMA.js","assets/vendor-markdown-CBmFCdgC.css","assets/apiService-axx1LHMk.js"])))=>i.map(i=>d[i]);
2
+ import{c as S,y as A,_ as w,m as p,I as M}from"./index-D4nJsLyx.js";import{r as a,j as e}from"./vendor-react-Dexh7fmo.js";import{M as f}from"./minus-oFhmD2--.js";import{X as b}from"./x-BONnp2RF.js";import{S as C}from"./send-NQY-QTkN.js";import"./vendor-firebase-auth-COrkgW0P.js";import"./vendor-firebase-core-DQ-pMjxd.js";import"./vendor-firebase-firestore-BML5nJHm.js";import"./vendor-firebase-storage-BOeKE_0n.js";import"./vendor-firebase-analytics-CCo6E2f7.js";/**
3
  * @license lucide-react v0.487.0 - ISC
4
  *
5
  * This source code is licensed under the ISC license.
6
  * See the LICENSE file in the root directory of this source tree.
7
+ */const L=[["polyline",{points:"15 3 21 3 21 9",key:"mznyad"}],["polyline",{points:"9 21 3 21 3 15",key:"1avn1i"}],["line",{x1:"21",x2:"14",y1:"3",y2:"10",key:"ota7mn"}],["line",{x1:"3",x2:"10",y1:"21",y2:"14",key:"1atl0r"}]],E=S("maximize-2",L),O=a.lazy(()=>w(()=>import("./ChatMarkdown-B34PtYCE.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10]))),X=({constraintsRef:T,onFullScreen:y})=>{const{activeSessionId:n,setActiveSessionId:g,createNewSession:j,getActiveSession:v,sendMessage:N,isLoading:o}=A(),[s,r]=a.useState(!1),[l,c]=a.useState(()=>typeof window>"u"?!1:window.localStorage.getItem("floating_ai_tutor_minimized")==="1"),[i,d]=a.useState(""),u=a.useRef(null);a.useEffect(()=>{typeof window>"u"||window.localStorage.setItem("floating_ai_tutor_minimized",l?"1":"0")},[l]),a.useEffect(()=>{s&&w(async()=>{const{warmupBackend:t}=await import("./apiService-axx1LHMk.js");return{warmupBackend:t}},__vite__mapDeps([11,1,2,3,4,5,6,7,8])).then(({warmupBackend:t})=>{t()}).catch(t=>{console.warn("Floating tutor warmup skipped:",t)})},[s]),a.useEffect(()=>{if(s&&!n){const t={id:"1",sender:"ai",text:"Hi! I'm your AI math tutor. What would you like to learn about today?",timestamp:new Date().toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"})},z=j(t);g(z)}},[s]);const m=v()?.messages||[],k=()=>{u.current?.scrollIntoView({behavior:"smooth"})};a.useEffect(()=>{k()},[m]);const x=async()=>{if(!i.trim()||!n||o)return;const t=i.trim();d(""),await N(n,t)},I=()=>{y()},h=()=>{r(!1),c(!0)},_=()=>{c(!1)};return e.jsxs("div",{className:"pointer-events-none flex flex-col items-end",children:[e.jsxs("div",{className:`pointer-events-auto mb-4 w-80 bg-[#f7f9fc] rounded-3xl shadow-2xl border border-[#dde3eb] flex flex-col overflow-hidden transition-all duration-300 origin-bottom-right select-none ${s?"opacity-100 scale-100 translate-y-0":"opacity-0 scale-95 translate-y-10 pointer-events-none h-0"}`,style:{maxHeight:s?"32rem":"0"},children:[e.jsxs("div",{className:"bg-gradient-to-r from-sky-600 to-sky-500 p-4 flex items-center justify-between flex-shrink-0",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("div",{className:"w-10 h-10 bg-white/20 rounded-xl flex items-center justify-center backdrop-blur-sm",children:e.jsx("img",{src:"/avatar/avatar_icon.png",alt:"AI Tutor",className:"w-9 h-9 object-contain drop-shadow-md"})}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-white font-bold text-sm",children:"L.O.L.I."}),e.jsxs("p",{className:"text-sky-100 text-[10px] leading-tight",children:["Logical Operations &",e.jsx("br",{}),"Learning Intelligence"]})]})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("button",{onClick:I,type:"button","aria-label":"Open fullscreen",className:"p-2 hover:bg-white/20 rounded-lg transition-colors",title:"Open fullscreen",children:e.jsx(E,{size:16,className:"text-white"})}),e.jsx("button",{type:"button","aria-label":"Minimize AI tutor launcher",onClick:h,className:"p-2 hover:bg-white/20 rounded-lg transition-colors",title:"Minimize",children:e.jsx(f,{size:16,className:"text-white"})}),e.jsx("button",{type:"button","aria-label":"Close chat",onClick:()=>r(!1),className:"p-2 hover:bg-white/20 rounded-lg transition-colors",children:e.jsx(b,{size:16,className:"text-white"})})]})]}),e.jsxs("div",{className:"flex-1 overflow-y-auto p-4 space-y-3 bg-[#edf1f7]",children:[m.map(t=>e.jsx("div",{className:`flex ${t.sender==="user"?"justify-end":"justify-start"}`,children:e.jsxs("div",{className:`max-w-[75%] rounded-2xl px-4 py-2.5 ${t.sender==="user"?"bg-sky-600 text-white":"bg-white text-[#0a1628] shadow-sm border border-[#dde3eb]"}`,children:[t.sender==="user"?e.jsx("p",{className:"text-sm whitespace-pre-wrap",children:t.text}):e.jsx(a.Suspense,{fallback:e.jsx("p",{className:"text-sm whitespace-pre-wrap",children:t.text}),children:e.jsx(O,{children:t.text})}),e.jsx("p",{className:`text-[10px] mt-1 ${t.sender==="user"?"text-sky-200":"text-slate-500"}`,children:t.timestamp})]})},t.id)),o&&e.jsx("div",{className:"flex justify-start",children:e.jsx("div",{className:"bg-white text-[#0a1628] shadow-sm border border-[#dde3eb] rounded-2xl px-4 py-2.5 max-w-[75%]",children:e.jsxs("div",{className:"flex gap-1",children:[e.jsx("div",{className:"w-2 h-2 bg-sky-400 rounded-full animate-bounce"}),e.jsx("div",{className:"w-2 h-2 bg-sky-400 rounded-full animate-bounce [animation-delay:150ms]"}),e.jsx("div",{className:"w-2 h-2 bg-sky-400 rounded-full animate-bounce [animation-delay:300ms]"})]})})}),e.jsx("div",{ref:u})]}),e.jsx("div",{className:"p-4 border-t border-[#dde3eb] bg-white flex-shrink-0",children:e.jsxs("div",{className:"flex gap-2",children:[e.jsx("input",{id:"ai-tutor-input",name:"ai-tutor-input","aria-label":"Ask AI tutor a question",type:"text",value:i,onChange:t=>d(t.target.value),onKeyPress:t=>t.key==="Enter"&&x(),placeholder:"Ask me anything...",className:"flex-1 px-4 py-2.5 rounded-xl border border-[#dde3eb] focus:outline-none focus:ring-2 focus:ring-sky-500 text-sm bg-[#f7f9fc]"}),e.jsx("button",{type:"button","aria-label":"Send message",onClick:x,className:"p-2.5 bg-sky-600 hover:bg-sky-700 text-white rounded-xl transition-colors disabled:opacity-50 disabled:cursor-not-allowed",disabled:!i.trim()||o,children:e.jsx(C,{size:18})})]})})]}),e.jsx("div",{className:"pointer-events-auto relative self-end",children:l?e.jsx(p.button,{type:"button",onClick:_,whileHover:{scale:1.08},whileTap:{scale:.95},className:"h-9 w-9 rounded-full bg-slate-900/85 text-white shadow-lg ring-1 ring-white/20 backdrop-blur-sm flex items-center justify-center","aria-label":"Restore AI tutor launcher",title:"Show AI tutor",children:e.jsx(M,{size:14})}):e.jsxs("div",{className:"relative group",children:[!s&&e.jsxs("div",{className:"absolute right-full mr-4 top-1/2 -translate-y-1/2 px-4 py-2 bg-slate-800 text-white text-sm rounded-xl opacity-0 group-hover:opacity-100 transition-opacity duration-300 pointer-events-none whitespace-nowrap shadow-xl z-50",children:["Hello! I'm L.O.L.I., how may I help you?",e.jsx("div",{className:"absolute top-1/2 -translate-y-1/2 -right-1 w-3 h-3 bg-slate-800 rotate-45"})]}),!s&&e.jsx("button",{type:"button","aria-label":"Minimize AI tutor launcher",title:"Minimize",onClick:h,className:"absolute -top-2 -left-2 z-10 h-6 w-6 rounded-full bg-white text-slate-700 border border-slate-200 shadow-md hover:bg-slate-100 transition-colors flex items-center justify-center",children:e.jsx(f,{size:12})}),e.jsx(p.button,{type:"button",onClick:()=>r(!s),whileHover:{scale:1.1},whileTap:{scale:.9},className:"w-16 h-16 bg-gradient-to-br from-sky-600 to-sky-500 rounded-xl shadow-2xl flex items-center justify-center text-white hover:shadow-sky-300/50 transition-all","aria-label":s?"Close AI tutor chat":"Open AI tutor chat",children:s?e.jsx(b,{size:28}):e.jsx("img",{src:"/avatar/avatar_icon.png",alt:"AI Tutor",className:"w-14 h-14 object-contain drop-shadow-lg"})})]})})]})};export{X as default};
assets/{GradesPage-8xU1oSB9.js β†’ GradesPage-m1qiGDtC.js} RENAMED
@@ -1,2 +1,2 @@
1
- import{r as n,j as e}from"./vendor-react-Dexh7fmo.js";import{B as S}from"./button-BpeUVhBo.js";import{u as $,m as H,g as W}from"./index-DUxNDyEU.js";import{g as V,S as k}from"./subjects-mtNF4Bqy.js";import{A as T}from"./award-UT1_i9UI.js";import{T as A}from"./trending-up-KXZvyUp1.js";import{T as C}from"./target-CkzwB53m.js";import{C as P}from"./calendar-DOp6N-WM.js";import{D as _}from"./download-C6KU0zMt.js";import{T as J,F as K}from"./trending-down-6Zz2BWmA.js";import{C as X}from"./chevron-right-CSxxBxL8.js";import"./vendor-radix-BRdei-zg.js";import"./clsx-B-dksMZM.js";import"./utils-BQQgILNW.js";import"./vendor-firebase-auth-COrkgW0P.js";import"./vendor-firebase-core-DQ-pMjxd.js";import"./vendor-firebase-firestore-BML5nJHm.js";import"./vendor-firebase-storage-BOeKE_0n.js";import"./vendor-firebase-analytics-CCo6E2f7.js";import"./chart-column-BSv3Tlcd.js";const je=()=>{const{currentUser:p,userProfile:Q}=$(),[o,u]=n.useState("all"),[f,D]=n.useState("all"),[Y,j]=n.useState(!0),[i,R]=n.useState(null),E=Q?.grade,g=V(E),y=new Set(g);n.useEffect(()=>{(async()=>{if(p){j(!0);try{const s=await W(p.uid);R(s)}catch(s){console.error("Error loading grades:",s)}finally{j(!1)}}})()},[p]);const N=i?.quizAttempts||[],M=i?.totalQuizzesCompleted||0,h=i?.averageScore||0,U=h>0?Math.min(h/25,4).toFixed(2):"0.00",F={"gen-math":"blue","stats-prob":"cyan","pre-calc":"teal","basic-calc":"orange"},b=k.reduce((t,s)=>(t[s.id]={label:s.name,color:F[s.id]||"slate"},t),{}),c=k.filter(t=>y.has(t.id)).map(t=>t.name),v=Object.entries(i?.subjects||{}).filter(([t])=>y.has(t)).map(([t,s])=>{const a=b[t]||{label:t,color:"slate"},d=N.filter(l=>l.quizId?.startsWith(t)),m=d.length>0?Math.round(d.reduce((l,r)=>l+r.score,0)/d.length):Math.round(s.progress);return{subject:a.label,average:m,quizzes:d.length||s.completedModules,color:a.color,trend:"up"}}),G=g.map(t=>{const s=b[t]||{label:t,color:"slate"};return{subject:s.label,average:0,quizzes:0,color:s.color,trend:"up"}}),I=v.length>0?v:G,w=N.sort((t,s)=>new Date(s.completedAt).getTime()-new Date(t.completedAt).getTime()).slice(0,10).map((t,s)=>({id:s+1,title:t.quizId?.replace(/-/g," ").replace(/\b\w/g,a=>a.toUpperCase())||`Quiz ${s+1}`,subject:Object.entries(b).find(([a])=>t.quizId?.startsWith(a))?.[1]?.label||"General",score:t.score,total:100,date:t.completedAt instanceof Date?t.completedAt.toISOString().split("T")[0]:new Date(t.completedAt).toISOString().split("T")[0],type:t.quizId?.includes("practice")?"practice":"module",status:t.score>=60?"passed":"failed"})).filter(t=>c.includes(t.subject)),x={gpa:parseFloat(U),totalQuizzes:M,averageScore:h,trendValue:0},z=w.filter(t=>{if(!c.includes(t.subject))return!1;const s=o==="all"||t.subject===o,a=f==="all"||t.type===f;return s&&a});n.useEffect(()=>{o!=="all"&&(c.includes(o)||u("all"))},[c,o]);const O=()=>{const t=["Quiz","Subject","Type","Score","Date","Status"],s=w.map(r=>[r.title,r.subject,r.type,`${r.score}%`,r.date,r.status]),a=[t,...s].map(r=>r.join(",")).join(`
2
  `),d=new Blob([a],{type:"text/csv;charset=utf-8;"}),m=URL.createObjectURL(d),l=document.createElement("a");l.href=m,l.download=`mathpulse-grades-${new Date().toISOString().split("T")[0]}.csv`,l.click(),URL.revokeObjectURL(m)},L=t=>t>=90?"text-emerald-600 bg-emerald-50":t>=80?"text-sky-600 bg-sky-50":t>=70?"text-rose-600 bg-rose-50":"text-red-600 bg-red-50",B=t=>t>=90?"A":t>=80?"B":t>=70?"C":t>=60?"D":"F";return e.jsxs("div",{className:"space-y-6 px-4 sm:px-6 xl:px-10 py-6 sm:py-8",children:[e.jsxs("div",{className:"bg-gradient-to-br from-white via-sky-50/30 to-white rounded-2xl p-7 card-elevated-lg relative overflow-hidden border border-slate-200/80",children:[e.jsx("div",{className:"absolute top-0 left-0 right-0 h-px bg-gradient-to-r from-transparent via-sky-400/40 to-transparent"}),e.jsx("div",{className:"absolute top-0 right-0 w-48 h-48 bg-sky-100/40 rounded-full -translate-y-1/2 translate-x-1/2"}),e.jsxs("div",{className:"grid grid-cols-4 gap-4",children:[e.jsxs("div",{className:"bg-white rounded-lg p-4 border border-slate-200/80 shadow-sm",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[e.jsx(T,{size:18,className:"text-rose-500"}),e.jsx("span",{className:"text-xs text-slate-500 font-body",children:"Overall GPA"})]}),e.jsx("p",{className:"text-3xl font-display font-bold text-[#0a1628]",children:x.gpa}),e.jsxs("div",{className:"flex items-center gap-1 mt-2",children:[e.jsx(A,{size:14,className:"text-emerald-500"}),e.jsxs("span",{className:"text-xs text-slate-500 font-body",children:["+",x.trendValue,"% this month"]})]})]}),e.jsxs("div",{className:"bg-white rounded-lg p-4 border border-slate-200/80 shadow-sm",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[e.jsx(C,{size:18,className:"text-sky-500"}),e.jsx("span",{className:"text-xs text-slate-500 font-body",children:"Average Score"})]}),e.jsxs("p",{className:"text-3xl font-display font-bold text-[#0a1628]",children:[x.averageScore,"%"]}),e.jsx("p",{className:"text-xs text-slate-500 font-body mt-2",children:"Across all subjects"})]}),e.jsxs("div",{className:"bg-white rounded-lg p-4 border border-slate-200/80 shadow-sm",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[e.jsx(P,{size:18,className:"text-rose-500"}),e.jsx("span",{className:"text-xs text-slate-500 font-body",children:"Total Quizzes"})]}),e.jsx("p",{className:"text-3xl font-display font-bold text-[#0a1628]",children:x.totalQuizzes}),e.jsx("p",{className:"text-xs text-slate-500 font-body mt-2",children:"Completed"})]}),e.jsxs("div",{className:"bg-white rounded-lg p-4 border border-slate-200/80 shadow-sm",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[e.jsx(T,{size:18,className:"text-rose-500"}),e.jsx("span",{className:"text-xs text-slate-500 font-body",children:"Grade Rank"})]}),e.jsx("p",{className:"text-3xl font-display font-bold text-[#0a1628]",children:"Top 15%"}),e.jsx("p",{className:"text-xs text-slate-500 font-body mt-2",children:"In your class"})]})]})]}),e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center justify-between mb-4",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("div",{className:"w-10 h-10 rounded-[14px] bg-indigo-50 border border-indigo-100 flex items-center justify-center text-indigo-500 shadow-inner",children:e.jsx(C,{size:20,strokeWidth:2.5})}),e.jsx("h2",{className:"font-display font-black text-[24px] text-slate-800 tracking-tight",children:"Subject Performance"})]}),e.jsxs(S,{variant:"outline",size:"sm",className:"rounded-lg font-body border-[#dde3eb] text-[#5a6578]",onClick:O,children:[e.jsx(_,{size:16,className:"mr-2"}),"Export Report"]})]}),e.jsx("div",{className:"grid grid-cols-2 gap-4",children:I.map(t=>e.jsxs(H.div,{whileHover:{scale:1.02},className:"bg-white rounded-xl p-5 border border-[#dde3eb] card-elevated cursor-pointer",children:[e.jsxs("div",{className:"flex items-start justify-between mb-4",children:[e.jsxs("div",{className:"flex-1",children:[e.jsx("h3",{className:"font-display font-bold text-[#0a1628] mb-1",children:t.subject}),e.jsxs("p",{className:"text-xs text-[#5a6578] font-body",children:[t.quizzes," quizzes completed"]})]}),e.jsx("div",{className:`w-14 h-14 rounded-lg bg-${t.color}-50 flex items-center justify-center`,children:e.jsx("span",{className:`text-xl font-display font-bold text-${t.color}-600`,children:B(t.average)})})]}),e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsxs("p",{className:"text-3xl font-display font-bold text-[#0a1628]",children:[t.average,"%"]}),e.jsx("p",{className:"text-xs text-[#5a6578] font-body mt-1",children:"Average"})]}),e.jsxs("div",{className:"flex items-center gap-1",children:[t.trend==="up"?e.jsx(A,{size:18,className:"text-green-500"}):e.jsx(J,{size:18,className:"text-red-500"}),e.jsx(X,{size:16,className:"text-[#d1cec6]"})]})]})]},t.subject))})]}),e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center justify-between mb-4",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("div",{className:"w-10 h-10 rounded-[14px] bg-indigo-50 border border-indigo-100 flex items-center justify-center text-indigo-500 shadow-inner",children:e.jsx(P,{size:20,strokeWidth:2.5})}),e.jsx("h2",{className:"font-display font-black text-[24px] text-slate-800 tracking-tight",children:"Quiz History"})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs("select",{value:o,onChange:t=>u(t.target.value),className:"px-3 py-2 border border-[#dde3eb] rounded-lg text-sm font-body bg-white text-[#0a1628]",children:[e.jsx("option",{value:"all",children:"All Subjects"}),c.map(t=>e.jsx("option",{value:t,children:t},t))]}),e.jsxs("select",{value:f,onChange:t=>D(t.target.value),className:"px-3 py-2 border border-[#dde3eb] rounded-lg text-sm font-body bg-white text-[#0a1628]",children:[e.jsx("option",{value:"all",children:"All Types"}),e.jsx("option",{value:"practice",children:"Practice"}),e.jsx("option",{value:"module",children:"Module"})]})]})]}),e.jsxs("div",{className:"bg-white rounded-xl border border-[#dde3eb] card-elevated overflow-hidden",children:[e.jsxs("table",{className:"w-full",children:[e.jsx("thead",{className:"bg-[#f7f9fc] border-b border-[#dde3eb]",children:e.jsxs("tr",{children:[e.jsx("th",{className:"px-6 py-3 text-left text-[10px] font-body font-semibold text-[#5a6578] uppercase tracking-wider",children:"Quiz"}),e.jsx("th",{className:"px-6 py-3 text-left text-[10px] font-body font-semibold text-[#5a6578] uppercase tracking-wider",children:"Subject"}),e.jsx("th",{className:"px-6 py-3 text-left text-[10px] font-body font-semibold text-[#5a6578] uppercase tracking-wider",children:"Type"}),e.jsx("th",{className:"px-6 py-3 text-left text-[10px] font-body font-semibold text-[#5a6578] uppercase tracking-wider",children:"Score"}),e.jsx("th",{className:"px-6 py-3 text-left text-[10px] font-body font-semibold text-[#5a6578] uppercase tracking-wider",children:"Date"}),e.jsx("th",{className:"px-6 py-3 text-left text-[10px] font-body font-semibold text-[#5a6578] uppercase tracking-wider",children:"Action"})]})}),e.jsx("tbody",{children:z.map(t=>e.jsxs("tr",{className:"border-b border-[#edf1f7] hover:bg-[#f7f9fc] transition-colors",children:[e.jsx("td",{className:"px-6 py-4",children:e.jsx("p",{className:"font-body font-semibold text-[#0a1628] text-sm",children:t.title})}),e.jsx("td",{className:"px-6 py-4",children:e.jsx("span",{className:"text-sm text-[#5a6578] font-body",children:t.subject})}),e.jsx("td",{className:"px-6 py-4",children:e.jsx("span",{className:"px-2.5 py-1 bg-[#edf1f7] text-[#5a6578] text-xs font-body font-semibold rounded-md capitalize",children:t.type})}),e.jsx("td",{className:"px-6 py-4",children:e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsxs("span",{className:`px-2.5 py-1 rounded-md text-sm font-body font-semibold ${L(t.score)}`,children:[t.score,"%"]}),e.jsxs("span",{className:"text-xs text-slate-500 font-body",children:["(",t.score,"/",t.total,")"]})]})}),e.jsx("td",{className:"px-6 py-4",children:e.jsx("span",{className:"text-sm text-[#5a6578] font-body",children:t.date})}),e.jsx("td",{className:"px-6 py-4",children:e.jsx(S,{variant:"outline",size:"sm",className:"rounded-lg",children:"Review"})})]},t.id))})]}),z.length===0&&e.jsxs("div",{className:"text-center py-12",children:[e.jsx(K,{size:40,className:"text-[#d1cec6] mx-auto mb-3"}),e.jsx("p",{className:"text-[#5a6578] font-body",children:"No quizzes found with current filters"}),e.jsx("p",{className:"text-xs text-slate-500 font-body mt-1",children:"Try adjusting your filters"})]})]})]})]})};export{je as default};
 
1
+ import{r as n,j as e}from"./vendor-react-Dexh7fmo.js";import{B as S}from"./button-BpeUVhBo.js";import{u as $,m as H,g as W}from"./index-D4nJsLyx.js";import{g as V,S as k}from"./subjects-DDBtpdiA.js";import{A as T}from"./award-oJTbc9W5.js";import{T as A}from"./trending-up-D-vj8Gbq.js";import{T as C}from"./target-D7SVtf3g.js";import{C as P}from"./calendar-BJ8oE6yW.js";import{D as _}from"./download-PWUf0XJa.js";import{T as J,F as K}from"./trending-down-CqEkjFA9.js";import{C as X}from"./chevron-right-COMox1Xb.js";import"./vendor-radix-BRdei-zg.js";import"./clsx-B-dksMZM.js";import"./utils-BQQgILNW.js";import"./vendor-firebase-auth-COrkgW0P.js";import"./vendor-firebase-core-DQ-pMjxd.js";import"./vendor-firebase-firestore-BML5nJHm.js";import"./vendor-firebase-storage-BOeKE_0n.js";import"./vendor-firebase-analytics-CCo6E2f7.js";import"./chart-column-D5mAWcRx.js";const je=()=>{const{currentUser:p,userProfile:Q}=$(),[o,u]=n.useState("all"),[f,D]=n.useState("all"),[Y,j]=n.useState(!0),[i,R]=n.useState(null),E=Q?.grade,g=V(E),y=new Set(g);n.useEffect(()=>{(async()=>{if(p){j(!0);try{const s=await W(p.uid);R(s)}catch(s){console.error("Error loading grades:",s)}finally{j(!1)}}})()},[p]);const N=i?.quizAttempts||[],M=i?.totalQuizzesCompleted||0,h=i?.averageScore||0,U=h>0?Math.min(h/25,4).toFixed(2):"0.00",F={"gen-math":"blue","stats-prob":"cyan","pre-calc":"teal","basic-calc":"orange"},b=k.reduce((t,s)=>(t[s.id]={label:s.name,color:F[s.id]||"slate"},t),{}),c=k.filter(t=>y.has(t.id)).map(t=>t.name),v=Object.entries(i?.subjects||{}).filter(([t])=>y.has(t)).map(([t,s])=>{const a=b[t]||{label:t,color:"slate"},d=N.filter(l=>l.quizId?.startsWith(t)),m=d.length>0?Math.round(d.reduce((l,r)=>l+r.score,0)/d.length):Math.round(s.progress);return{subject:a.label,average:m,quizzes:d.length||s.completedModules,color:a.color,trend:"up"}}),G=g.map(t=>{const s=b[t]||{label:t,color:"slate"};return{subject:s.label,average:0,quizzes:0,color:s.color,trend:"up"}}),I=v.length>0?v:G,w=N.sort((t,s)=>new Date(s.completedAt).getTime()-new Date(t.completedAt).getTime()).slice(0,10).map((t,s)=>({id:s+1,title:t.quizId?.replace(/-/g," ").replace(/\b\w/g,a=>a.toUpperCase())||`Quiz ${s+1}`,subject:Object.entries(b).find(([a])=>t.quizId?.startsWith(a))?.[1]?.label||"General",score:t.score,total:100,date:t.completedAt instanceof Date?t.completedAt.toISOString().split("T")[0]:new Date(t.completedAt).toISOString().split("T")[0],type:t.quizId?.includes("practice")?"practice":"module",status:t.score>=60?"passed":"failed"})).filter(t=>c.includes(t.subject)),x={gpa:parseFloat(U),totalQuizzes:M,averageScore:h,trendValue:0},z=w.filter(t=>{if(!c.includes(t.subject))return!1;const s=o==="all"||t.subject===o,a=f==="all"||t.type===f;return s&&a});n.useEffect(()=>{o!=="all"&&(c.includes(o)||u("all"))},[c,o]);const O=()=>{const t=["Quiz","Subject","Type","Score","Date","Status"],s=w.map(r=>[r.title,r.subject,r.type,`${r.score}%`,r.date,r.status]),a=[t,...s].map(r=>r.join(",")).join(`
2
  `),d=new Blob([a],{type:"text/csv;charset=utf-8;"}),m=URL.createObjectURL(d),l=document.createElement("a");l.href=m,l.download=`mathpulse-grades-${new Date().toISOString().split("T")[0]}.csv`,l.click(),URL.revokeObjectURL(m)},L=t=>t>=90?"text-emerald-600 bg-emerald-50":t>=80?"text-sky-600 bg-sky-50":t>=70?"text-rose-600 bg-rose-50":"text-red-600 bg-red-50",B=t=>t>=90?"A":t>=80?"B":t>=70?"C":t>=60?"D":"F";return e.jsxs("div",{className:"space-y-6 px-4 sm:px-6 xl:px-10 py-6 sm:py-8",children:[e.jsxs("div",{className:"bg-gradient-to-br from-white via-sky-50/30 to-white rounded-2xl p-7 card-elevated-lg relative overflow-hidden border border-slate-200/80",children:[e.jsx("div",{className:"absolute top-0 left-0 right-0 h-px bg-gradient-to-r from-transparent via-sky-400/40 to-transparent"}),e.jsx("div",{className:"absolute top-0 right-0 w-48 h-48 bg-sky-100/40 rounded-full -translate-y-1/2 translate-x-1/2"}),e.jsxs("div",{className:"grid grid-cols-4 gap-4",children:[e.jsxs("div",{className:"bg-white rounded-lg p-4 border border-slate-200/80 shadow-sm",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[e.jsx(T,{size:18,className:"text-rose-500"}),e.jsx("span",{className:"text-xs text-slate-500 font-body",children:"Overall GPA"})]}),e.jsx("p",{className:"text-3xl font-display font-bold text-[#0a1628]",children:x.gpa}),e.jsxs("div",{className:"flex items-center gap-1 mt-2",children:[e.jsx(A,{size:14,className:"text-emerald-500"}),e.jsxs("span",{className:"text-xs text-slate-500 font-body",children:["+",x.trendValue,"% this month"]})]})]}),e.jsxs("div",{className:"bg-white rounded-lg p-4 border border-slate-200/80 shadow-sm",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[e.jsx(C,{size:18,className:"text-sky-500"}),e.jsx("span",{className:"text-xs text-slate-500 font-body",children:"Average Score"})]}),e.jsxs("p",{className:"text-3xl font-display font-bold text-[#0a1628]",children:[x.averageScore,"%"]}),e.jsx("p",{className:"text-xs text-slate-500 font-body mt-2",children:"Across all subjects"})]}),e.jsxs("div",{className:"bg-white rounded-lg p-4 border border-slate-200/80 shadow-sm",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[e.jsx(P,{size:18,className:"text-rose-500"}),e.jsx("span",{className:"text-xs text-slate-500 font-body",children:"Total Quizzes"})]}),e.jsx("p",{className:"text-3xl font-display font-bold text-[#0a1628]",children:x.totalQuizzes}),e.jsx("p",{className:"text-xs text-slate-500 font-body mt-2",children:"Completed"})]}),e.jsxs("div",{className:"bg-white rounded-lg p-4 border border-slate-200/80 shadow-sm",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[e.jsx(T,{size:18,className:"text-rose-500"}),e.jsx("span",{className:"text-xs text-slate-500 font-body",children:"Grade Rank"})]}),e.jsx("p",{className:"text-3xl font-display font-bold text-[#0a1628]",children:"Top 15%"}),e.jsx("p",{className:"text-xs text-slate-500 font-body mt-2",children:"In your class"})]})]})]}),e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center justify-between mb-4",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("div",{className:"w-10 h-10 rounded-[14px] bg-indigo-50 border border-indigo-100 flex items-center justify-center text-indigo-500 shadow-inner",children:e.jsx(C,{size:20,strokeWidth:2.5})}),e.jsx("h2",{className:"font-display font-black text-[24px] text-slate-800 tracking-tight",children:"Subject Performance"})]}),e.jsxs(S,{variant:"outline",size:"sm",className:"rounded-lg font-body border-[#dde3eb] text-[#5a6578]",onClick:O,children:[e.jsx(_,{size:16,className:"mr-2"}),"Export Report"]})]}),e.jsx("div",{className:"grid grid-cols-2 gap-4",children:I.map(t=>e.jsxs(H.div,{whileHover:{scale:1.02},className:"bg-white rounded-xl p-5 border border-[#dde3eb] card-elevated cursor-pointer",children:[e.jsxs("div",{className:"flex items-start justify-between mb-4",children:[e.jsxs("div",{className:"flex-1",children:[e.jsx("h3",{className:"font-display font-bold text-[#0a1628] mb-1",children:t.subject}),e.jsxs("p",{className:"text-xs text-[#5a6578] font-body",children:[t.quizzes," quizzes completed"]})]}),e.jsx("div",{className:`w-14 h-14 rounded-lg bg-${t.color}-50 flex items-center justify-center`,children:e.jsx("span",{className:`text-xl font-display font-bold text-${t.color}-600`,children:B(t.average)})})]}),e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsxs("p",{className:"text-3xl font-display font-bold text-[#0a1628]",children:[t.average,"%"]}),e.jsx("p",{className:"text-xs text-[#5a6578] font-body mt-1",children:"Average"})]}),e.jsxs("div",{className:"flex items-center gap-1",children:[t.trend==="up"?e.jsx(A,{size:18,className:"text-green-500"}):e.jsx(J,{size:18,className:"text-red-500"}),e.jsx(X,{size:16,className:"text-[#d1cec6]"})]})]})]},t.subject))})]}),e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center justify-between mb-4",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("div",{className:"w-10 h-10 rounded-[14px] bg-indigo-50 border border-indigo-100 flex items-center justify-center text-indigo-500 shadow-inner",children:e.jsx(P,{size:20,strokeWidth:2.5})}),e.jsx("h2",{className:"font-display font-black text-[24px] text-slate-800 tracking-tight",children:"Quiz History"})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs("select",{value:o,onChange:t=>u(t.target.value),className:"px-3 py-2 border border-[#dde3eb] rounded-lg text-sm font-body bg-white text-[#0a1628]",children:[e.jsx("option",{value:"all",children:"All Subjects"}),c.map(t=>e.jsx("option",{value:t,children:t},t))]}),e.jsxs("select",{value:f,onChange:t=>D(t.target.value),className:"px-3 py-2 border border-[#dde3eb] rounded-lg text-sm font-body bg-white text-[#0a1628]",children:[e.jsx("option",{value:"all",children:"All Types"}),e.jsx("option",{value:"practice",children:"Practice"}),e.jsx("option",{value:"module",children:"Module"})]})]})]}),e.jsxs("div",{className:"bg-white rounded-xl border border-[#dde3eb] card-elevated overflow-hidden",children:[e.jsxs("table",{className:"w-full",children:[e.jsx("thead",{className:"bg-[#f7f9fc] border-b border-[#dde3eb]",children:e.jsxs("tr",{children:[e.jsx("th",{className:"px-6 py-3 text-left text-[10px] font-body font-semibold text-[#5a6578] uppercase tracking-wider",children:"Quiz"}),e.jsx("th",{className:"px-6 py-3 text-left text-[10px] font-body font-semibold text-[#5a6578] uppercase tracking-wider",children:"Subject"}),e.jsx("th",{className:"px-6 py-3 text-left text-[10px] font-body font-semibold text-[#5a6578] uppercase tracking-wider",children:"Type"}),e.jsx("th",{className:"px-6 py-3 text-left text-[10px] font-body font-semibold text-[#5a6578] uppercase tracking-wider",children:"Score"}),e.jsx("th",{className:"px-6 py-3 text-left text-[10px] font-body font-semibold text-[#5a6578] uppercase tracking-wider",children:"Date"}),e.jsx("th",{className:"px-6 py-3 text-left text-[10px] font-body font-semibold text-[#5a6578] uppercase tracking-wider",children:"Action"})]})}),e.jsx("tbody",{children:z.map(t=>e.jsxs("tr",{className:"border-b border-[#edf1f7] hover:bg-[#f7f9fc] transition-colors",children:[e.jsx("td",{className:"px-6 py-4",children:e.jsx("p",{className:"font-body font-semibold text-[#0a1628] text-sm",children:t.title})}),e.jsx("td",{className:"px-6 py-4",children:e.jsx("span",{className:"text-sm text-[#5a6578] font-body",children:t.subject})}),e.jsx("td",{className:"px-6 py-4",children:e.jsx("span",{className:"px-2.5 py-1 bg-[#edf1f7] text-[#5a6578] text-xs font-body font-semibold rounded-md capitalize",children:t.type})}),e.jsx("td",{className:"px-6 py-4",children:e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsxs("span",{className:`px-2.5 py-1 rounded-md text-sm font-body font-semibold ${L(t.score)}`,children:[t.score,"%"]}),e.jsxs("span",{className:"text-xs text-slate-500 font-body",children:["(",t.score,"/",t.total,")"]})]})}),e.jsx("td",{className:"px-6 py-4",children:e.jsx("span",{className:"text-sm text-[#5a6578] font-body",children:t.date})}),e.jsx("td",{className:"px-6 py-4",children:e.jsx(S,{variant:"outline",size:"sm",className:"rounded-lg",children:"Review"})})]},t.id))})]}),z.length===0&&e.jsxs("div",{className:"text-center py-12",children:[e.jsx(K,{size:40,className:"text-[#d1cec6] mx-auto mb-3"}),e.jsx("p",{className:"text-[#5a6578] font-body",children:"No quizzes found with current filters"}),e.jsx("p",{className:"text-xs text-slate-500 font-body mt-1",children:"Try adjusting your filters"})]})]})]})]})};export{je as default};
assets/{HeroBanner-DGLaMkjC.js β†’ HeroBanner-BdiQHNd9.js} RENAMED
@@ -1,7 +1,7 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/DashboardAvatar-C3sK59xb.js","assets/vendor-react-Dexh7fmo.js","assets/avatarData-BW_TX0b4.js","assets/index-DUxNDyEU.js","assets/vendor-firebase-auth-COrkgW0P.js","assets/vendor-firebase-core-DQ-pMjxd.js","assets/vendor-firebase-firestore-BML5nJHm.js","assets/vendor-firebase-storage-BOeKE_0n.js","assets/vendor-firebase-analytics-CCo6E2f7.js","assets/index-CR2i2gnI.css"])))=>i.map(i=>d[i]);
2
- import{c as x,m as t,Z as c,A as p,_ as b}from"./index-DUxNDyEU.js";import{j as e,r}from"./vendor-react-Dexh7fmo.js";import{B as h}from"./brain-D2SpSiL8.js";import"./vendor-firebase-auth-COrkgW0P.js";import"./vendor-firebase-core-DQ-pMjxd.js";import"./vendor-firebase-firestore-BML5nJHm.js";import"./vendor-firebase-storage-BOeKE_0n.js";import"./vendor-firebase-analytics-CCo6E2f7.js";/**
3
  * @license lucide-react v0.487.0 - ISC
4
  *
5
  * This source code is licensed under the ISC license.
6
  * See the LICENSE file in the root directory of this source tree.
7
- */const g=[["path",{d:"M18 11V6a2 2 0 0 0-2-2a2 2 0 0 0-2 2",key:"1fvzgz"}],["path",{d:"M14 10V4a2 2 0 0 0-2-2a2 2 0 0 0-2 2v2",key:"1kc0my"}],["path",{d:"M10 10.5V6a2 2 0 0 0-2-2a2 2 0 0 0-2 2v8",key:"10h0bg"}],["path",{d:"M18 8a2 2 0 1 1 4 0v6a8 8 0 0 1-8 8h-2c-2.8 0-4.5-.86-5.99-2.34l-3.6-3.6a2 2 0 0 1 2.83-2.82L7 15",key:"1s1gnw"}]],u=x("hand",g),v=r.lazy(()=>b(()=>import("./DashboardAvatar-C3sK59xb.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9]))),A=({userName:a="Student",userLevel:o=1,avatarLayers:l,onContinueLearning:n,showAssessmentTooltip:i,onOpenAssessment:d})=>{const m=()=>{const s=new Date().getHours();return s<12?"Good Morning":s<18?"Good Afternoon":"Good Evening"};return e.jsxs(t.div,{initial:{opacity:0,y:20},animate:{opacity:1,y:0},transition:{duration:.6,ease:[.22,1,.36,1]},className:"relative w-full mt-0 rounded-[2rem] p-6 lg:p-8 bg-gradient-to-br from-white via-sky-50/50 to-white border border-slate-200/80 card-elevated-lg",children:[e.jsxs("div",{className:"absolute inset-0 overflow-hidden rounded-[2rem] pointer-events-none",children:[e.jsx("div",{className:"absolute top-0 left-0 right-0 h-px bg-gradient-to-r from-transparent via-sky-400/50 to-transparent"}),e.jsx("div",{className:"absolute top-0 right-0 w-96 h-96 bg-sky-100/40 rounded-full blur-3xl -translate-y-1/2 translate-x-1/4"}),e.jsx("div",{className:"absolute bottom-0 left-0 w-64 h-64 bg-rose-100/30 rounded-full blur-3xl translate-y-1/2 -translate-x-1/4"}),e.jsx("div",{className:"absolute inset-0 bg-dot-pattern opacity-40"})]}),e.jsx("div",{className:"relative z-10 flex min-h-[140px] lg:min-h-[160px] items-center justify-between gap-6 pb-0",children:e.jsxs("div",{className:"flex-1 min-w-0 pr-40 lg:pr-[280px] py-1",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[e.jsx("div",{className:"px-3 md:px-4 py-1.5 rounded-full bg-sky-100 border border-sky-200",children:e.jsxs("span",{className:"text-xs md:text-sm font-body font-bold text-sky-700",children:["Level ",o]})}),e.jsxs("div",{className:"px-3 md:px-4 py-1.5 rounded-full bg-rose-50 border border-rose-200",children:[e.jsx(c,{size:14,className:"inline -mt-0.5 text-rose-500 mr-1"}),e.jsx("span",{className:"text-xs md:text-sm font-body font-bold text-rose-700",children:"Active"})]})]}),e.jsxs("h1",{className:"text-xl md:text-2xl lg:text-3xl font-display font-black text-[#0a1628] mb-1.5 tracking-tight leading-[1.1]",children:[m(),", ",a,"! ",e.jsx(u,{size:20,className:"inline -mt-1 ml-1"})]}),e.jsx("p",{className:"text-slate-500 mb-1 text-xs md:text-sm font-body font-bold",children:"Today is a great day to move one step forward in math mastery."}),e.jsx("p",{className:"text-[11px] md:text-xs text-slate-400 font-body mb-4",children:"Focus on your next recommended lesson and keep your momentum."}),e.jsxs(t.button,{onClick:n,whileHover:{scale:1.03},whileTap:{scale:.97},className:"mt-2 bg-gradient-to-r from-purple-600 to-[#9956DE] text-white px-5 py-2 rounded-xl font-body font-bold text-sm shadow-lg shadow-purple-500/20 hover:shadow-purple-500/30 transition-all flex items-center gap-2 group",children:["Continue Learning",e.jsx(p,{size:14,className:"group-hover:translate-x-1 transition-transform"})]})]})}),i&&e.jsx(t.div,{initial:{opacity:0,scale:.9,x:10},animate:{opacity:1,scale:1,x:0},transition:{delay:.5,type:"spring"},onClick:d,className:"absolute hidden md:block right-[150px] lg:right-[250px] bottom-16 lg:bottom-20 z-30 cursor-pointer drop-shadow-lg group",children:e.jsxs("div",{className:"bg-white px-4 py-3 rounded-2xl rounded-br-sm border-2 border-amber-300 relative transition-all group-hover:bg-amber-50 group-hover:border-amber-400 group-hover:-translate-y-1",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-amber-500",children:e.jsx(h,{size:16})}),e.jsxs("p",{className:"text-xs lg:text-sm font-bold text-amber-900 leading-tight",children:["Don't forget to take the",e.jsx("br",{}),"Initial Assessment!"]})]}),e.jsx("div",{className:"absolute -right-2 bottom-0 w-4 h-4 bg-white border-2 border-transparent border-r-amber-300 border-b-amber-300 rotate-45 group-hover:bg-amber-50 group-hover:border-r-amber-400 group-hover:border-b-amber-400 transition-colors"})]})}),e.jsx("div",{className:"hidden md:block absolute right-0 lg:right-10 bottom-0 w-[150px] lg:w-[270px] pointer-events-none z-20",style:{clipPath:"inset(-100% -50% 0 -50%)"},children:e.jsx("div",{className:"relative w-full aspect-[4/5] translate-y-[21%] lg:translate-y-[19%] drop-shadow-2xl",children:e.jsx(r.Suspense,{fallback:e.jsx("div",{className:"w-full h-full scale-[1.25] lg:scale-[1.3] origin-bottom"}),children:e.jsx(v,{layers:l,className:"w-full h-full scale-[1.25] lg:scale-[1.3] origin-bottom"})})})})]})};export{A as default};
 
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/DashboardAvatar-CHVNq8nF.js","assets/vendor-react-Dexh7fmo.js","assets/avatarData-BW_TX0b4.js","assets/index-D4nJsLyx.js","assets/vendor-firebase-auth-COrkgW0P.js","assets/vendor-firebase-core-DQ-pMjxd.js","assets/vendor-firebase-firestore-BML5nJHm.js","assets/vendor-firebase-storage-BOeKE_0n.js","assets/vendor-firebase-analytics-CCo6E2f7.js","assets/index-CR2i2gnI.css"])))=>i.map(i=>d[i]);
2
+ import{c as x,m as t,Z as c,A as p,_ as b}from"./index-D4nJsLyx.js";import{j as e,r}from"./vendor-react-Dexh7fmo.js";import{B as h}from"./brain-CPvGdgWE.js";import"./vendor-firebase-auth-COrkgW0P.js";import"./vendor-firebase-core-DQ-pMjxd.js";import"./vendor-firebase-firestore-BML5nJHm.js";import"./vendor-firebase-storage-BOeKE_0n.js";import"./vendor-firebase-analytics-CCo6E2f7.js";/**
3
  * @license lucide-react v0.487.0 - ISC
4
  *
5
  * This source code is licensed under the ISC license.
6
  * See the LICENSE file in the root directory of this source tree.
7
+ */const g=[["path",{d:"M18 11V6a2 2 0 0 0-2-2a2 2 0 0 0-2 2",key:"1fvzgz"}],["path",{d:"M14 10V4a2 2 0 0 0-2-2a2 2 0 0 0-2 2v2",key:"1kc0my"}],["path",{d:"M10 10.5V6a2 2 0 0 0-2-2a2 2 0 0 0-2 2v8",key:"10h0bg"}],["path",{d:"M18 8a2 2 0 1 1 4 0v6a8 8 0 0 1-8 8h-2c-2.8 0-4.5-.86-5.99-2.34l-3.6-3.6a2 2 0 0 1 2.83-2.82L7 15",key:"1s1gnw"}]],u=x("hand",g),v=r.lazy(()=>b(()=>import("./DashboardAvatar-CHVNq8nF.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9]))),A=({userName:a="Student",userLevel:o=1,avatarLayers:l,onContinueLearning:n,showAssessmentTooltip:i,onOpenAssessment:d})=>{const m=()=>{const s=new Date().getHours();return s<12?"Good Morning":s<18?"Good Afternoon":"Good Evening"};return e.jsxs(t.div,{initial:{opacity:0,y:20},animate:{opacity:1,y:0},transition:{duration:.6,ease:[.22,1,.36,1]},className:"relative w-full mt-0 rounded-[2rem] p-6 lg:p-8 bg-gradient-to-br from-white via-sky-50/50 to-white border border-slate-200/80 card-elevated-lg",children:[e.jsxs("div",{className:"absolute inset-0 overflow-hidden rounded-[2rem] pointer-events-none",children:[e.jsx("div",{className:"absolute top-0 left-0 right-0 h-px bg-gradient-to-r from-transparent via-sky-400/50 to-transparent"}),e.jsx("div",{className:"absolute top-0 right-0 w-96 h-96 bg-sky-100/40 rounded-full blur-3xl -translate-y-1/2 translate-x-1/4"}),e.jsx("div",{className:"absolute bottom-0 left-0 w-64 h-64 bg-rose-100/30 rounded-full blur-3xl translate-y-1/2 -translate-x-1/4"}),e.jsx("div",{className:"absolute inset-0 bg-dot-pattern opacity-40"})]}),e.jsx("div",{className:"relative z-10 flex min-h-[140px] lg:min-h-[160px] items-center justify-between gap-6 pb-0",children:e.jsxs("div",{className:"flex-1 min-w-0 pr-40 lg:pr-[280px] py-1",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[e.jsx("div",{className:"px-3 md:px-4 py-1.5 rounded-full bg-sky-100 border border-sky-200",children:e.jsxs("span",{className:"text-xs md:text-sm font-body font-bold text-sky-700",children:["Level ",o]})}),e.jsxs("div",{className:"px-3 md:px-4 py-1.5 rounded-full bg-rose-50 border border-rose-200",children:[e.jsx(c,{size:14,className:"inline -mt-0.5 text-rose-500 mr-1"}),e.jsx("span",{className:"text-xs md:text-sm font-body font-bold text-rose-700",children:"Active"})]})]}),e.jsxs("h1",{className:"text-xl md:text-2xl lg:text-3xl font-display font-black text-[#0a1628] mb-1.5 tracking-tight leading-[1.1]",children:[m(),", ",a,"! ",e.jsx(u,{size:20,className:"inline -mt-1 ml-1"})]}),e.jsx("p",{className:"text-slate-500 mb-1 text-xs md:text-sm font-body font-bold",children:"Today is a great day to move one step forward in math mastery."}),e.jsx("p",{className:"text-[11px] md:text-xs text-slate-400 font-body mb-4",children:"Focus on your next recommended lesson and keep your momentum."}),e.jsxs(t.button,{onClick:n,whileHover:{scale:1.03},whileTap:{scale:.97},className:"mt-2 bg-gradient-to-r from-purple-600 to-[#9956DE] text-white px-5 py-2 rounded-xl font-body font-bold text-sm shadow-lg shadow-purple-500/20 hover:shadow-purple-500/30 transition-all flex items-center gap-2 group",children:["Continue Learning",e.jsx(p,{size:14,className:"group-hover:translate-x-1 transition-transform"})]})]})}),i&&e.jsx(t.div,{initial:{opacity:0,scale:.9,x:10},animate:{opacity:1,scale:1,x:0},transition:{delay:.5,type:"spring"},onClick:d,className:"absolute hidden md:block right-[150px] lg:right-[250px] bottom-16 lg:bottom-20 z-30 cursor-pointer drop-shadow-lg group",children:e.jsxs("div",{className:"bg-white px-4 py-3 rounded-2xl rounded-br-sm border-2 border-amber-300 relative transition-all group-hover:bg-amber-50 group-hover:border-amber-400 group-hover:-translate-y-1",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-amber-500",children:e.jsx(h,{size:16})}),e.jsxs("p",{className:"text-xs lg:text-sm font-bold text-amber-900 leading-tight",children:["Don't forget to take the",e.jsx("br",{}),"Initial Assessment!"]})]}),e.jsx("div",{className:"absolute -right-2 bottom-0 w-4 h-4 bg-white border-2 border-transparent border-r-amber-300 border-b-amber-300 rotate-45 group-hover:bg-amber-50 group-hover:border-r-amber-400 group-hover:border-b-amber-400 transition-colors"})]})}),e.jsx("div",{className:"hidden md:block absolute right-0 lg:right-10 bottom-0 w-[150px] lg:w-[270px] pointer-events-none z-20",style:{clipPath:"inset(-100% -50% 0 -50%)"},children:e.jsx("div",{className:"relative w-full aspect-[4/5] translate-y-[21%] lg:translate-y-[19%] drop-shadow-2xl",children:e.jsx(r.Suspense,{fallback:e.jsx("div",{className:"w-full h-full scale-[1.25] lg:scale-[1.3] origin-bottom"}),children:e.jsx(v,{layers:l,className:"w-full h-full scale-[1.25] lg:scale-[1.3] origin-bottom"})})})})]})};export{A as default};
assets/{LeaderboardPage-B2UR3owG.js β†’ LeaderboardPage-jsrBZaI7.js} RENAMED
@@ -1,4 +1,4 @@
1
- import{r as o,j as e}from"./vendor-react-Dexh7fmo.js";import{c as O,z as R,e as W,m as d,F as B,i as X,u as $,B as H}from"./index-DUxNDyEU.js";import{X as U}from"./x-DwrHgz_L.js";import{B as y}from"./book-open-B5Fr9j0O.js";import{T as A}from"./target-CkzwB53m.js";import{A as k}from"./award-UT1_i9UI.js";import{C as q}from"./clock-TIVUqSxI.js";import{T as v}from"./trophy-qEvM2_M2.js";import{T as P}from"./trending-up-KXZvyUp1.js";import{L as M}from"./loader-circle-6q_nFxhJ.js";import{S as G}from"./star-D2vv-PRB.js";import{U as L}from"./user-C2pqYPaR.js";import"./vendor-firebase-auth-COrkgW0P.js";import"./vendor-firebase-core-DQ-pMjxd.js";import"./vendor-firebase-firestore-BML5nJHm.js";import"./vendor-firebase-storage-BOeKE_0n.js";import"./vendor-firebase-analytics-CCo6E2f7.js";/**
2
  * @license lucide-react v0.487.0 - ISC
3
  *
4
  * This source code is licensed under the ISC license.
 
1
+ import{r as o,j as e}from"./vendor-react-Dexh7fmo.js";import{c as O,z as R,e as W,m as d,F as B,i as X,u as $,B as H}from"./index-D4nJsLyx.js";import{X as U}from"./x-BONnp2RF.js";import{B as y}from"./book-open-BH50GByv.js";import{T as A}from"./target-D7SVtf3g.js";import{A as k}from"./award-oJTbc9W5.js";import{C as q}from"./clock-DUJO-a50.js";import{T as v}from"./trophy-C2nVcZnb.js";import{T as P}from"./trending-up-D-vj8Gbq.js";import{L as M}from"./loader-circle-J8Mwbkkw.js";import{S as G}from"./star-dumQ9BVG.js";import{U as L}from"./user-CaTzqgOL.js";import"./vendor-firebase-auth-COrkgW0P.js";import"./vendor-firebase-core-DQ-pMjxd.js";import"./vendor-firebase-firestore-BML5nJHm.js";import"./vendor-firebase-storage-BOeKE_0n.js";import"./vendor-firebase-analytics-CCo6E2f7.js";/**
2
  * @license lucide-react v0.487.0 - ISC
3
  *
4
  * This source code is licensed under the ISC license.
assets/{LearningPath-B_WBYNl3.js β†’ LearningPath-B_MkUEk2.js} RENAMED
@@ -1 +1 @@
1
- import{r as p,c as h,j as t}from"./vendor-react-Dexh7fmo.js";import{u as S,n as k,o as v,g as w,A as C}from"./index-DUxNDyEU.js";import{g as L,s as M}from"./subjects-mtNF4Bqy.js";import{M as A}from"./ModuleFolderCard-Bja5J9kH.js";import{B as E}from"./book-open-B5Fr9j0O.js";import"./vendor-firebase-auth-COrkgW0P.js";import"./vendor-firebase-core-DQ-pMjxd.js";import"./vendor-firebase-firestore-BML5nJHm.js";import"./vendor-firebase-storage-BOeKE_0n.js";import"./vendor-firebase-analytics-CCo6E2f7.js";import"./trending-up-KXZvyUp1.js";import"./chart-column-BSv3Tlcd.js";import"./clock-TIVUqSxI.js";const H=({onNavigateToModules:c,atRiskSubjects:g=[],priorityTopics:d=[]})=>{const{userProfile:i}=S(),[x,f]=p.useState(null),b=i?.grade,j=L(b),m=M.filter(e=>j.includes(e.id)),l=m.find(e=>e.id==="gen-math")??m[0],a=h.useMemo(()=>{const e=d.length>0?d:g.map(s=>k(s)).filter(s=>s!==null),r=new Set;return e.filter(s=>r.has(s)?!1:(r.add(s),!0))},[d,g]),P=h.useMemo(()=>{const e=l?.modules??[];if(a.length===0)return e;const r=new Map(a.map((s,n)=>[v[s],n]));return[...e].sort((s,n)=>{const o=r.get(s.id)??Number.POSITIVE_INFINITY,N=r.get(n.id)??Number.POSITIVE_INFINITY;return o-N})},[l?.modules,a]);p.useEffect(()=>{i?.uid&&w(i.uid).then(f).catch(console.error)},[i?.uid]);const u=P.slice(0,4).map(e=>{const n=x?.subjects?.[l.id]?.modulesProgress?.[e.id]?.lessonsCompleted?.length||0,o=e.lessons.length>0?Math.round(n/e.lessons.length*100):0;return{...e,progress:o,status:o===100?"Completed":o>0?"In Progress":"Not Started"}}),I=u.some(e=>e.progress>0)?"Continue Learning":"Start Learning";return t.jsxs("div",{children:[t.jsxs("div",{className:"flex justify-between items-center mb-6 px-1",children:[t.jsxs("div",{className:"flex items-center gap-3",children:[t.jsx("div",{className:"w-10 h-10 rounded-[14px] bg-indigo-50 border border-indigo-100 flex items-center justify-center text-indigo-500 shadow-inner",children:t.jsx(E,{size:20,strokeWidth:2.5})}),t.jsx("h2",{className:"font-display font-black text-[24px] text-slate-800 tracking-tight",children:I})]}),t.jsxs("button",{onClick:()=>c?.(),className:"text-primary font-bold text-sm flex items-center gap-1 hover:gap-2 transition-all bg-primary/10 px-4 py-2 rounded-xl hover:bg-primary/20",children:["View All ",t.jsx(C,{size:16})]})]}),t.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 xl:grid-cols-4 gap-6",children:u.map((e,r)=>t.jsx(A,{module:e,index:r,onClick:()=>c?.(e.id),isAtRisk:a.length>0,badgeLabel:e.status!=="Not Started"?e.status:void 0},e.id))})]})};export{H as default};
 
1
+ import{r as p,c as h,j as t}from"./vendor-react-Dexh7fmo.js";import{u as S,n as k,o as v,g as w,A as C}from"./index-D4nJsLyx.js";import{g as L,s as M}from"./subjects-DDBtpdiA.js";import{M as A}from"./ModuleFolderCard-CoKTURyN.js";import{B as E}from"./book-open-BH50GByv.js";import"./vendor-firebase-auth-COrkgW0P.js";import"./vendor-firebase-core-DQ-pMjxd.js";import"./vendor-firebase-firestore-BML5nJHm.js";import"./vendor-firebase-storage-BOeKE_0n.js";import"./vendor-firebase-analytics-CCo6E2f7.js";import"./trending-up-D-vj8Gbq.js";import"./chart-column-D5mAWcRx.js";import"./clock-DUJO-a50.js";const H=({onNavigateToModules:c,atRiskSubjects:g=[],priorityTopics:d=[]})=>{const{userProfile:i}=S(),[x,f]=p.useState(null),b=i?.grade,j=L(b),m=M.filter(e=>j.includes(e.id)),l=m.find(e=>e.id==="gen-math")??m[0],a=h.useMemo(()=>{const e=d.length>0?d:g.map(s=>k(s)).filter(s=>s!==null),r=new Set;return e.filter(s=>r.has(s)?!1:(r.add(s),!0))},[d,g]),P=h.useMemo(()=>{const e=l?.modules??[];if(a.length===0)return e;const r=new Map(a.map((s,n)=>[v[s],n]));return[...e].sort((s,n)=>{const o=r.get(s.id)??Number.POSITIVE_INFINITY,N=r.get(n.id)??Number.POSITIVE_INFINITY;return o-N})},[l?.modules,a]);p.useEffect(()=>{i?.uid&&w(i.uid).then(f).catch(console.error)},[i?.uid]);const u=P.slice(0,4).map(e=>{const n=x?.subjects?.[l.id]?.modulesProgress?.[e.id]?.lessonsCompleted?.length||0,o=e.lessons.length>0?Math.round(n/e.lessons.length*100):0;return{...e,progress:o,status:o===100?"Completed":o>0?"In Progress":"Not Started"}}),I=u.some(e=>e.progress>0)?"Continue Learning":"Start Learning";return t.jsxs("div",{children:[t.jsxs("div",{className:"flex justify-between items-center mb-6 px-1",children:[t.jsxs("div",{className:"flex items-center gap-3",children:[t.jsx("div",{className:"w-10 h-10 rounded-[14px] bg-indigo-50 border border-indigo-100 flex items-center justify-center text-indigo-500 shadow-inner",children:t.jsx(E,{size:20,strokeWidth:2.5})}),t.jsx("h2",{className:"font-display font-black text-[24px] text-slate-800 tracking-tight",children:I})]}),t.jsxs("button",{onClick:()=>c?.(),className:"text-primary font-bold text-sm flex items-center gap-1 hover:gap-2 transition-all bg-primary/10 px-4 py-2 rounded-xl hover:bg-primary/20",children:["View All ",t.jsx(C,{size:16})]})]}),t.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 xl:grid-cols-4 gap-6",children:u.map((e,r)=>t.jsx(A,{module:e,index:r,onClick:()=>c?.(e.id),isAtRisk:a.length>0,badgeLabel:e.status!=="Not Started"?e.status:void 0},e.id))})]})};export{H as default};
assets/{LoginPage-DPeZFipP.js β†’ LoginPage-mXOi2OPh.js} RENAMED
@@ -1 +1 @@
1
- import{r,j as e}from"./vendor-react-Dexh7fmo.js";import{B as Q}from"./button-BpeUVhBo.js";import{I as N}from"./input-DBkKXOmF.js";import{m as s,A as I,s as C,a as K,b as z}from"./index-DUxNDyEU.js";import{S as X}from"./sparkles-BA64-_B-.js";import{B as Z}from"./brain-D2SpSiL8.js";import{T as ee}from"./trending-up-KXZvyUp1.js";import{A as te}from"./award-UT1_i9UI.js";import{U as B}from"./users-B8Q5DwX3.js";import{G}from"./graduation-cap-BnLJcznw.js";import{B as D}from"./book-open-B5Fr9j0O.js";import{M as se}from"./mail-IWkUUCjc.js";import{L}from"./lock-CsjFFL-g.js";import{E as ae}from"./eye-off-Dckh9BE_.js";import{E as re}from"./eye-kYT3TKwH.js";import{S as le}from"./shield-check-B8cYxDcb.js";import"./vendor-radix-BRdei-zg.js";import"./clsx-B-dksMZM.js";import"./utils-BQQgILNW.js";import"./vendor-firebase-auth-COrkgW0P.js";import"./vendor-firebase-core-DQ-pMjxd.js";import"./vendor-firebase-firestore-BML5nJHm.js";import"./vendor-firebase-storage-BOeKE_0n.js";import"./vendor-firebase-analytics-CCo6E2f7.js";const ie="/assets/shader-bg-DA7bEbBA.mp4",R=(h,d)=>{const l=h instanceof Error?h.message:d;return l.includes("auth/invalid-credential")||l.includes("auth/wrong-password")||l.includes("auth/user-not-found")?"Invalid email or password. Please check your credentials and try again.":l.includes("auth/email-already-in-use")?"This email is already registered. Please sign in instead.":l.includes("auth/weak-password")?"Password is too weak. It should be at least 6 characters.":l.includes("auth/too-many-requests")?"Access to this account has been temporarily disabled due to many failed login attempts. You can immediately restore it by resetting your password or you can try again later.":l.includes("auth/network-request-failed")?"Network error. Please check your internet connection and try again.":l.includes("Firebase:")||l.includes("auth/")?d:l},Ie=()=>{const h=["Grade 11","Grade 12"],d={"Grade 11":["STEM A","STEM B","ABM A","HUMSS A"],"Grade 12":["STEM A","STEM B","ABM A","HUMSS A"]},l={teacher:["Mathematics","Science","English","Technology","Humanities"]},[b,w]=r.useState(""),[f,k]=r.useState(""),[g,q]=r.useState(!1),[i,S]=r.useState(!1),[v,U]=r.useState(""),[o,A]=r.useState("student"),[m,$]=r.useState("Grade 11"),[y,P]=r.useState(d["Grade 11"][0]),[u,E]=r.useState("Mathematics"),[M,c]=r.useState(!1),[T,n]=r.useState(null),[O,H]=r.useState(!1),j=r.useRef(null);r.useEffect(()=>{j.current&&j.current.play().catch(()=>{})},[]),r.useEffect(()=>{o==="teacher"&&!l.teacher.includes(u)&&E(l.teacher[0])},[u,o]),r.useEffect(()=>{const t=d[m]||[];t.length>0&&!t.includes(y)&&P(t[0])},[m,y]);const Y=[{label:"Student",role:"student",email:"teststudent@school.edu",password:"TestPass123!",icon:G,color:"sky"},{label:"Teacher",role:"teacher",email:"testteacher@school.edu",password:"TestPass123!",icon:D,color:"emerald"},{label:"Admin",role:"admin",email:"testadmin@school.edu",password:"TestPass123!",icon:le,color:"rose"}],_=async(t,a,x)=>{n(null),c(!0),w(t),k(a),A(x),S(!1);try{C(x),await z(t,a)}catch(p){n(R(p,"Demo sign-in failed")),c(!1)}},F=async t=>{t.preventDefault(),n(null),c(!0);try{if(i){if(!v.trim()){n("Please enter your name"),c(!1);return}if(o==="student"&&!m){n("Please select a grade level"),c(!1);return}if(o!=="student"&&!u){n("Please select a department"),c(!1);return}if(o==="admin"){n("Admin account creation is restricted. Please contact an existing administrator."),c(!1);return}C(o),await K(b,f,v,o,o==="student"?{grade:m,section:y}:{department:u})}else await z(b,f)}catch(a){n(R(a,"Authentication failed")),c(!1)}},W=["∫","Ο€","βˆ‘","Ξ”","∞","Ο†","√","Ξ»","ΞΈ","βˆ‚"];return e.jsxs("div",{className:"h-screen w-full flex items-center justify-center px-6 overflow-hidden relative",style:{background:"linear-gradient(135deg, #f0f9ff 0%, #f8fafc 30%, #fff1f2 60%, #f0f9ff 100%)"},children:[e.jsx("video",{ref:j,autoPlay:!0,loop:!0,muted:!0,playsInline:!0,onCanPlay:()=>H(!0),className:`absolute inset-0 w-full h-full object-cover transition-opacity duration-1000 ${O?"opacity-40":"opacity-0"}`,src:ie}),e.jsx("div",{className:"absolute inset-0 pointer-events-none",style:{background:"radial-gradient(ellipse at 30% 50%, rgba(240,249,255,0.4) 0%, rgba(248,250,252,0.65) 50%, rgba(255,241,242,0.5) 80%, rgba(248,250,252,0.85) 100%)"}}),e.jsx("div",{className:"absolute top-[-20%] left-[-10%] w-[60%] h-[60%] rounded-full blur-[120px] pointer-events-none",style:{background:"radial-gradient(circle, rgba(14,165,233,0.12) 0%, transparent 70%)"}}),e.jsx("div",{className:"absolute bottom-[-20%] right-[-10%] w-[50%] h-[50%] rounded-full blur-[120px] pointer-events-none",style:{background:"radial-gradient(circle, rgba(244,63,94,0.08) 0%, transparent 70%)"}}),e.jsx("div",{className:"absolute inset-0 pointer-events-none opacity-[0.03]",style:{backgroundImage:"radial-gradient(circle, rgba(15,23,42,0.4) 1px, transparent 1px)",backgroundSize:"24px 24px"}}),W.map((t,a)=>e.jsx(s.span,{className:"absolute text-sky-700/[0.08] font-display select-none pointer-events-none",style:{fontSize:`${20+Math.random()*40}px`,left:`${5+a*9.5}%`,top:`${10+a*8}%`},animate:{y:[0,-30,0],opacity:[.04,.1,.04],rotate:[0,10,0]},transition:{duration:8+a*2,repeat:1/0,ease:"easeInOut",delay:a*.5},children:t},a)),e.jsx("div",{className:"absolute top-0 left-1/4 w-px h-full bg-gradient-to-b from-transparent via-sky-400/15 to-transparent"}),e.jsx("div",{className:"absolute top-0 right-1/3 w-px h-full bg-gradient-to-b from-transparent via-rose-300/10 to-transparent"}),e.jsx("div",{className:"relative z-10 w-full max-w-6xl mx-auto",children:e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-8 lg:gap-12 items-center",children:[e.jsxs(s.div,{initial:{opacity:0,x:-40},animate:{opacity:1,x:0},transition:{duration:.8,ease:[.22,1,.36,1]},className:"flex flex-col justify-center space-y-8",children:[e.jsxs(s.div,{className:"flex items-center gap-2.5",children:[e.jsx(s.div,{className:"relative flex items-center justify-center drop-shadow-md",children:e.jsx("img",{src:"/mathpulse_logo.png",alt:"MathPulse AI Logo",className:"w-16 h-16 object-contain flex-shrink-0"})}),e.jsxs("div",{children:[e.jsxs("h1",{className:"text-2xl font-display font-extrabold tracking-tight text-slate-900",children:["MathPulse",e.jsx("span",{className:"text-sky-500",children:"AI"})]}),e.jsxs("div",{className:"flex items-center gap-1.5 mt-0.5",children:[e.jsx(X,{size:12,className:"text-rose-500"}),e.jsx("span",{className:"text-xs text-slate-500 font-body font-medium tracking-wide",children:"Powered by Machine Learning"})]})]})]}),e.jsxs(s.div,{className:"space-y-5",initial:{opacity:0,y:20},animate:{opacity:1,y:0},transition:{delay:.2,duration:.8},children:[e.jsxs("h2",{className:"text-4xl lg:text-5xl xl:text-[3.4rem] font-display font-extrabold leading-[1.1] tracking-tight text-slate-900",children:["Transform Your",e.jsx("br",{}),e.jsx("span",{className:"bg-gradient-to-r from-sky-600 via-cyan-500 to-sky-500 bg-clip-text text-transparent",children:"Math Journey"})]}),e.jsx("p",{className:"text-base text-slate-500 leading-relaxed max-w-md font-body",children:"AI-powered predictive system designed to identify at-risk students and provide personalized learning recommendations."})]}),e.jsx("div",{className:"grid grid-cols-3 gap-3",children:[{icon:Z,label:"AI Predictions",desc:"Smart detection",color:"sky"},{icon:ee,label:"Analytics",desc:"Real-time data",color:"rose"},{icon:te,label:"Gamified",desc:"Learn & earn",color:"emerald"}].map((t,a)=>{const x=t.icon,p={sky:"border-sky-200/60 hover:border-sky-300",rose:"border-rose-200/60 hover:border-rose-300",emerald:"border-emerald-200/60 hover:border-emerald-300"},V={sky:"text-sky-600",rose:"text-rose-500",emerald:"text-emerald-600"},J={sky:"bg-sky-100",rose:"bg-rose-100",emerald:"bg-emerald-100"};return e.jsxs(s.div,{className:`bg-white/80 backdrop-blur-xl border ${p[t.color]} rounded-xl p-4 transition-all cursor-pointer group shadow-md shadow-slate-900/[0.04]`,initial:{opacity:0,y:20},animate:{opacity:1,y:0},transition:{delay:.5+a*.1},whileHover:{scale:1.03,y:-4},children:[e.jsx("div",{className:`w-9 h-9 rounded-lg ${J[t.color]} flex items-center justify-center mb-3`,children:e.jsx(x,{size:18,className:V[t.color]})}),e.jsx("h3",{className:"text-sm font-display font-semibold text-slate-800 mb-0.5",children:t.label}),e.jsx("p",{className:"text-xs text-slate-400 font-body",children:t.desc})]},a)})})]}),e.jsx(s.div,{initial:{opacity:0,y:30},animate:{opacity:1,y:0},transition:{duration:.8,delay:.15,ease:[.22,1,.36,1]},className:"relative flex justify-center lg:justify-end",children:e.jsxs("div",{className:"bg-white/85 backdrop-blur-2xl border border-slate-200/60 rounded-2xl p-7 w-full max-w-md relative overflow-hidden shadow-2xl shadow-slate-900/[0.08]",children:[e.jsx("div",{className:"absolute top-0 left-0 right-0 h-[2px] bg-gradient-to-r from-transparent via-sky-500/50 to-transparent"}),e.jsx("div",{className:"absolute -top-20 left-1/2 -translate-x-1/2 w-72 h-36 bg-sky-400/10 rounded-full blur-3xl pointer-events-none"}),e.jsxs("div",{className:"text-center mb-6 relative",children:[e.jsx(s.h3,{className:"text-2xl font-display font-bold text-slate-900 mb-2",initial:{opacity:0},animate:{opacity:1},transition:{delay:.4},children:i?"Create Account":"Welcome Back"}),e.jsx(s.p,{className:"text-sm text-slate-500 font-body",initial:{opacity:0},animate:{opacity:1},transition:{delay:.5},children:i?"Begin your learning journey":"Sign in to continue learning"})]}),e.jsxs("form",{onSubmit:F,className:"space-y-4 mb-5 relative",children:[T&&e.jsx(s.div,{initial:{opacity:0,y:-10},animate:{opacity:1,y:0},className:"bg-rose-50 border border-rose-200 text-rose-600 px-4 py-3 rounded-lg text-sm font-body",children:T}),i&&e.jsxs(s.div,{initial:{opacity:0,height:0},animate:{opacity:1,height:"auto"},exit:{opacity:0,height:0},children:[e.jsx("label",{className:"block text-xs font-body font-semibold text-slate-500 mb-2 uppercase tracking-wider",children:"Full Name"}),e.jsxs("div",{className:"relative",children:[e.jsx(B,{size:16,className:"absolute left-4 top-1/2 -translate-y-1/2 text-slate-400"}),e.jsx(N,{type:"text",placeholder:"Your Name",value:v,onChange:t=>U(t.target.value),className:"w-full pl-11 pr-4 py-3 rounded-lg bg-slate-100/70 border-slate-200/80 text-slate-900 placeholder:text-slate-400 focus:border-sky-400 focus:ring-2 focus:ring-sky-400/20 focus:bg-white text-sm font-body transition-all",required:!0})]})]}),i&&e.jsxs(s.div,{initial:{opacity:0,x:-20},animate:{opacity:1,x:0},transition:{delay:.45},children:[e.jsx("label",{className:"block text-xs font-body font-semibold text-slate-500 mb-2 uppercase tracking-wider",children:"Account Type"}),e.jsx("div",{className:"grid grid-cols-2 gap-2",children:[{role:"student",label:"Student"},{role:"teacher",label:"Teacher"}].map(t=>{const a=o===t.role;return e.jsx("button",{type:"button",onClick:()=>A(t.role),className:`rounded-lg border px-3 py-2 text-xs font-body font-semibold transition-all ${a?"border-sky-400 bg-sky-50 text-sky-700":"border-slate-200 bg-slate-50 text-slate-500 hover:border-slate-300"}`,children:t.label},t.role)})})]}),i&&o==="student"&&e.jsxs(s.div,{initial:{opacity:0,height:0},animate:{opacity:1,height:"auto"},exit:{opacity:0,height:0},children:[e.jsx("label",{className:"block text-xs font-body font-semibold text-slate-500 mb-2 uppercase tracking-wider",children:"Grade Level"}),e.jsxs("div",{className:"relative",children:[e.jsx(G,{size:16,className:"absolute left-4 top-1/2 -translate-y-1/2 text-slate-400"}),e.jsx("select",{value:m,onChange:t=>$(t.target.value),className:"w-full pl-11 pr-4 py-3 rounded-lg bg-slate-100/70 border border-slate-200/80 text-slate-900 focus:border-sky-400 focus:ring-2 focus:ring-sky-400/20 focus:bg-white text-sm font-body transition-all appearance-none",required:!0,children:h.map(t=>e.jsx("option",{value:t,children:t},t))})]})]}),i&&o==="student"&&e.jsxs(s.div,{initial:{opacity:0,height:0},animate:{opacity:1,height:"auto"},exit:{opacity:0,height:0},children:[e.jsx("label",{className:"block text-xs font-body font-semibold text-slate-500 mb-2 uppercase tracking-wider",children:"Section"}),e.jsxs("div",{className:"relative",children:[e.jsx(B,{size:16,className:"absolute left-4 top-1/2 -translate-y-1/2 text-slate-400"}),e.jsx("select",{value:y,onChange:t=>P(t.target.value),className:"w-full pl-11 pr-4 py-3 rounded-lg bg-slate-100/70 border border-slate-200/80 text-slate-900 focus:border-sky-400 focus:ring-2 focus:ring-sky-400/20 focus:bg-white text-sm font-body transition-all appearance-none",required:!0,children:(d[m]||[]).map(t=>e.jsx("option",{value:t,children:t},t))})]})]}),i&&o!=="student"&&e.jsxs(s.div,{initial:{opacity:0,height:0},animate:{opacity:1,height:"auto"},exit:{opacity:0,height:0},children:[e.jsx("label",{className:"block text-xs font-body font-semibold text-slate-500 mb-2 uppercase tracking-wider",children:"Department"}),e.jsxs("div",{className:"relative",children:[e.jsx(D,{size:16,className:"absolute left-4 top-1/2 -translate-y-1/2 text-slate-400"}),e.jsx("select",{value:u,onChange:t=>E(t.target.value),className:"w-full pl-11 pr-4 py-3 rounded-lg bg-slate-100/70 border border-slate-200/80 text-slate-900 focus:border-sky-400 focus:ring-2 focus:ring-sky-400/20 focus:bg-white text-sm font-body transition-all appearance-none",required:!0,children:l.teacher.map(t=>e.jsx("option",{value:t,children:t},t))})]})]}),e.jsxs(s.div,{initial:{opacity:0,x:-20},animate:{opacity:1,x:0},transition:{delay:.5},children:[e.jsx("label",{className:"block text-xs font-body font-semibold text-slate-500 mb-2 uppercase tracking-wider",children:"Email Address"}),e.jsxs("div",{className:"relative",children:[e.jsx(se,{size:16,className:"absolute left-4 top-1/2 -translate-y-1/2 text-slate-400"}),e.jsx(N,{type:"email",placeholder:"your.email@school.edu",value:b,onChange:t=>w(t.target.value),className:"w-full pl-11 pr-4 py-3 rounded-lg bg-slate-100/70 border-slate-200/80 text-slate-900 placeholder:text-slate-400 focus:border-sky-400 focus:ring-2 focus:ring-sky-400/20 focus:bg-white text-sm font-body transition-all",required:!0})]})]}),e.jsxs(s.div,{initial:{opacity:0,x:-20},animate:{opacity:1,x:0},transition:{delay:.6},children:[e.jsx("label",{className:"block text-xs font-body font-semibold text-slate-500 mb-2 uppercase tracking-wider",children:"Password"}),e.jsxs("div",{className:"relative",children:[e.jsx(L,{size:16,className:"absolute left-4 top-1/2 -translate-y-1/2 text-slate-400"}),e.jsx(N,{type:g?"text":"password",placeholder:"β€’β€’β€’β€’β€’β€’β€’β€’",value:f,onChange:t=>k(t.target.value),className:"w-full pl-11 pr-11 py-3 rounded-lg bg-slate-100/70 border-slate-200/80 text-slate-900 placeholder:text-slate-400 focus:border-sky-400 focus:ring-2 focus:ring-sky-400/20 focus:bg-white text-sm font-body transition-all",required:!0,minLength:6}),e.jsx(s.button,{type:"button",onClick:()=>q(!g),className:"absolute right-3 top-1/2 -translate-y-1/2 text-slate-400 hover:text-slate-600 transition-colors",whileTap:{scale:.9},children:g?e.jsx(ae,{size:16}):e.jsx(re,{size:16})})]})]}),e.jsx(s.div,{initial:{opacity:0,y:10},animate:{opacity:1,y:0},transition:{delay:.7},children:e.jsxs(Q,{type:"submit",disabled:M,className:"w-full bg-gradient-to-r from-sky-600 to-sky-500 hover:from-sky-500 hover:to-cyan-400 text-white font-body font-semibold py-3 rounded-xl shadow-lg shadow-sky-600/25 hover:shadow-sky-500/35 hover:scale-[1.01] transition-all text-sm group relative overflow-hidden disabled:opacity-50 disabled:cursor-not-allowed",children:[e.jsx(s.span,{className:"absolute inset-0 bg-gradient-to-r from-white/0 via-white/15 to-white/0",animate:{x:["-100%","100%"]},transition:{duration:3,repeat:1/0,repeatDelay:2}}),e.jsxs("span",{className:"relative flex items-center justify-center gap-2",children:[M?"Please wait...":i?"Create Account":"Sign In",e.jsx(I,{size:16,className:"group-hover:translate-x-1 transition-transform"})]})]})}),e.jsx("div",{className:"text-center",children:e.jsx("button",{type:"button",onClick:()=>{S(!i),n(null)},className:"text-sm text-slate-400 hover:text-sky-500 font-body font-medium transition-colors",children:i?"Already have an account? Sign in":"Don't have an account? Create one"})})]}),!i&&e.jsxs(s.div,{initial:{opacity:0},animate:{opacity:1},transition:{delay:.85},className:"mb-4 relative",children:[e.jsxs("div",{className:"relative flex items-center gap-3 mb-4",children:[e.jsx("div",{className:"flex-1 h-px bg-slate-200"}),e.jsx("span",{className:"text-[10px] font-body font-semibold text-slate-400 uppercase tracking-widest",children:"Quick Demo Access"}),e.jsx("div",{className:"flex-1 h-px bg-slate-200"})]}),e.jsx("div",{className:"flex flex-col gap-2",children:Y.map(t=>{const a=t.icon,x={sky:"bg-sky-100",emerald:"bg-emerald-100",rose:"bg-rose-100"},p={sky:"text-sky-600",emerald:"text-emerald-600",rose:"text-rose-500"};return e.jsxs(s.button,{type:"button",onClick:()=>_(t.email,t.password,t.role),className:"group flex items-center gap-3 w-full px-4 py-2.5 rounded-lg bg-slate-50/80 border border-slate-200/70 hover:border-sky-300 hover:bg-sky-50/80 hover:shadow-sm transition-all text-left",whileHover:{scale:1.01},whileTap:{scale:.99},children:[e.jsx("div",{className:`w-8 h-8 rounded-md flex items-center justify-center shrink-0 ${x[t.color]}`,children:e.jsx(a,{size:15,className:p[t.color]})}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsxs("p",{className:"text-xs font-body font-semibold text-slate-700 group-hover:text-sky-600 transition-colors",children:[t.label," Account"]}),e.jsx("p",{className:"text-[10px] text-slate-400 font-body truncate",children:t.email})]}),e.jsx(I,{size:14,className:"text-slate-300 group-hover:text-sky-500 group-hover:translate-x-0.5 transition-all shrink-0"})]},t.label)})})]}),e.jsxs(s.p,{className:"text-xs text-slate-400 text-center mt-4 font-body relative",initial:{opacity:0},animate:{opacity:1},transition:{delay:1},children:[e.jsx(L,{size:10,className:"inline mr-1 -mt-0.5"})," Your data is encrypted and secure"]})]})})]})})]})};export{Ie as default};
 
1
+ import{r,j as e}from"./vendor-react-Dexh7fmo.js";import{B as Q}from"./button-BpeUVhBo.js";import{I as N}from"./input-DBkKXOmF.js";import{m as s,A as I,s as C,a as K,b as z}from"./index-D4nJsLyx.js";import{S as X}from"./sparkles-CXUFmaBJ.js";import{B as Z}from"./brain-CPvGdgWE.js";import{T as ee}from"./trending-up-D-vj8Gbq.js";import{A as te}from"./award-oJTbc9W5.js";import{U as B}from"./users-HMf2sdE3.js";import{G}from"./graduation-cap-Df8fGPxp.js";import{B as D}from"./book-open-BH50GByv.js";import{M as se}from"./mail-D7el5vSX.js";import{L}from"./lock-_59co5m5.js";import{E as ae}from"./eye-off-BYAdNgqy.js";import{E as re}from"./eye-DXdRafOv.js";import{S as le}from"./shield-check-B_yHzqcC.js";import"./vendor-radix-BRdei-zg.js";import"./clsx-B-dksMZM.js";import"./utils-BQQgILNW.js";import"./vendor-firebase-auth-COrkgW0P.js";import"./vendor-firebase-core-DQ-pMjxd.js";import"./vendor-firebase-firestore-BML5nJHm.js";import"./vendor-firebase-storage-BOeKE_0n.js";import"./vendor-firebase-analytics-CCo6E2f7.js";const ie="/assets/shader-bg-DA7bEbBA.mp4",R=(h,d)=>{const l=h instanceof Error?h.message:d;return l.includes("auth/invalid-credential")||l.includes("auth/wrong-password")||l.includes("auth/user-not-found")?"Invalid email or password. Please check your credentials and try again.":l.includes("auth/email-already-in-use")?"This email is already registered. Please sign in instead.":l.includes("auth/weak-password")?"Password is too weak. It should be at least 6 characters.":l.includes("auth/too-many-requests")?"Access to this account has been temporarily disabled due to many failed login attempts. You can immediately restore it by resetting your password or you can try again later.":l.includes("auth/network-request-failed")?"Network error. Please check your internet connection and try again.":l.includes("Firebase:")||l.includes("auth/")?d:l},Ie=()=>{const h=["Grade 11","Grade 12"],d={"Grade 11":["STEM A","STEM B","ABM A","HUMSS A"],"Grade 12":["STEM A","STEM B","ABM A","HUMSS A"]},l={teacher:["Mathematics","Science","English","Technology","Humanities"]},[b,w]=r.useState(""),[f,k]=r.useState(""),[g,q]=r.useState(!1),[i,S]=r.useState(!1),[v,U]=r.useState(""),[o,A]=r.useState("student"),[m,$]=r.useState("Grade 11"),[y,P]=r.useState(d["Grade 11"][0]),[u,E]=r.useState("Mathematics"),[M,c]=r.useState(!1),[T,n]=r.useState(null),[O,H]=r.useState(!1),j=r.useRef(null);r.useEffect(()=>{j.current&&j.current.play().catch(()=>{})},[]),r.useEffect(()=>{o==="teacher"&&!l.teacher.includes(u)&&E(l.teacher[0])},[u,o]),r.useEffect(()=>{const t=d[m]||[];t.length>0&&!t.includes(y)&&P(t[0])},[m,y]);const Y=[{label:"Student",role:"student",email:"teststudent@school.edu",password:"TestPass123!",icon:G,color:"sky"},{label:"Teacher",role:"teacher",email:"testteacher@school.edu",password:"TestPass123!",icon:D,color:"emerald"},{label:"Admin",role:"admin",email:"testadmin@school.edu",password:"TestPass123!",icon:le,color:"rose"}],_=async(t,a,x)=>{n(null),c(!0),w(t),k(a),A(x),S(!1);try{C(x),await z(t,a)}catch(p){n(R(p,"Demo sign-in failed")),c(!1)}},F=async t=>{t.preventDefault(),n(null),c(!0);try{if(i){if(!v.trim()){n("Please enter your name"),c(!1);return}if(o==="student"&&!m){n("Please select a grade level"),c(!1);return}if(o!=="student"&&!u){n("Please select a department"),c(!1);return}if(o==="admin"){n("Admin account creation is restricted. Please contact an existing administrator."),c(!1);return}C(o),await K(b,f,v,o,o==="student"?{grade:m,section:y}:{department:u})}else await z(b,f)}catch(a){n(R(a,"Authentication failed")),c(!1)}},W=["∫","Ο€","βˆ‘","Ξ”","∞","Ο†","√","Ξ»","ΞΈ","βˆ‚"];return e.jsxs("div",{className:"h-screen w-full flex items-center justify-center px-6 overflow-hidden relative",style:{background:"linear-gradient(135deg, #f0f9ff 0%, #f8fafc 30%, #fff1f2 60%, #f0f9ff 100%)"},children:[e.jsx("video",{ref:j,autoPlay:!0,loop:!0,muted:!0,playsInline:!0,onCanPlay:()=>H(!0),className:`absolute inset-0 w-full h-full object-cover transition-opacity duration-1000 ${O?"opacity-40":"opacity-0"}`,src:ie}),e.jsx("div",{className:"absolute inset-0 pointer-events-none",style:{background:"radial-gradient(ellipse at 30% 50%, rgba(240,249,255,0.4) 0%, rgba(248,250,252,0.65) 50%, rgba(255,241,242,0.5) 80%, rgba(248,250,252,0.85) 100%)"}}),e.jsx("div",{className:"absolute top-[-20%] left-[-10%] w-[60%] h-[60%] rounded-full blur-[120px] pointer-events-none",style:{background:"radial-gradient(circle, rgba(14,165,233,0.12) 0%, transparent 70%)"}}),e.jsx("div",{className:"absolute bottom-[-20%] right-[-10%] w-[50%] h-[50%] rounded-full blur-[120px] pointer-events-none",style:{background:"radial-gradient(circle, rgba(244,63,94,0.08) 0%, transparent 70%)"}}),e.jsx("div",{className:"absolute inset-0 pointer-events-none opacity-[0.03]",style:{backgroundImage:"radial-gradient(circle, rgba(15,23,42,0.4) 1px, transparent 1px)",backgroundSize:"24px 24px"}}),W.map((t,a)=>e.jsx(s.span,{className:"absolute text-sky-700/[0.08] font-display select-none pointer-events-none",style:{fontSize:`${20+Math.random()*40}px`,left:`${5+a*9.5}%`,top:`${10+a*8}%`},animate:{y:[0,-30,0],opacity:[.04,.1,.04],rotate:[0,10,0]},transition:{duration:8+a*2,repeat:1/0,ease:"easeInOut",delay:a*.5},children:t},a)),e.jsx("div",{className:"absolute top-0 left-1/4 w-px h-full bg-gradient-to-b from-transparent via-sky-400/15 to-transparent"}),e.jsx("div",{className:"absolute top-0 right-1/3 w-px h-full bg-gradient-to-b from-transparent via-rose-300/10 to-transparent"}),e.jsx("div",{className:"relative z-10 w-full max-w-6xl mx-auto",children:e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-8 lg:gap-12 items-center",children:[e.jsxs(s.div,{initial:{opacity:0,x:-40},animate:{opacity:1,x:0},transition:{duration:.8,ease:[.22,1,.36,1]},className:"flex flex-col justify-center space-y-8",children:[e.jsxs(s.div,{className:"flex items-center gap-2.5",children:[e.jsx(s.div,{className:"relative flex items-center justify-center drop-shadow-md",children:e.jsx("img",{src:"/mathpulse_logo.png",alt:"MathPulse AI Logo",className:"w-16 h-16 object-contain flex-shrink-0"})}),e.jsxs("div",{children:[e.jsxs("h1",{className:"text-2xl font-display font-extrabold tracking-tight text-slate-900",children:["MathPulse",e.jsx("span",{className:"text-sky-500",children:"AI"})]}),e.jsxs("div",{className:"flex items-center gap-1.5 mt-0.5",children:[e.jsx(X,{size:12,className:"text-rose-500"}),e.jsx("span",{className:"text-xs text-slate-500 font-body font-medium tracking-wide",children:"Powered by Machine Learning"})]})]})]}),e.jsxs(s.div,{className:"space-y-5",initial:{opacity:0,y:20},animate:{opacity:1,y:0},transition:{delay:.2,duration:.8},children:[e.jsxs("h2",{className:"text-4xl lg:text-5xl xl:text-[3.4rem] font-display font-extrabold leading-[1.1] tracking-tight text-slate-900",children:["Transform Your",e.jsx("br",{}),e.jsx("span",{className:"bg-gradient-to-r from-sky-600 via-cyan-500 to-sky-500 bg-clip-text text-transparent",children:"Math Journey"})]}),e.jsx("p",{className:"text-base text-slate-500 leading-relaxed max-w-md font-body",children:"AI-powered predictive system designed to identify at-risk students and provide personalized learning recommendations."})]}),e.jsx("div",{className:"grid grid-cols-3 gap-3",children:[{icon:Z,label:"AI Predictions",desc:"Smart detection",color:"sky"},{icon:ee,label:"Analytics",desc:"Real-time data",color:"rose"},{icon:te,label:"Gamified",desc:"Learn & earn",color:"emerald"}].map((t,a)=>{const x=t.icon,p={sky:"border-sky-200/60 hover:border-sky-300",rose:"border-rose-200/60 hover:border-rose-300",emerald:"border-emerald-200/60 hover:border-emerald-300"},V={sky:"text-sky-600",rose:"text-rose-500",emerald:"text-emerald-600"},J={sky:"bg-sky-100",rose:"bg-rose-100",emerald:"bg-emerald-100"};return e.jsxs(s.div,{className:`bg-white/80 backdrop-blur-xl border ${p[t.color]} rounded-xl p-4 transition-all cursor-pointer group shadow-md shadow-slate-900/[0.04]`,initial:{opacity:0,y:20},animate:{opacity:1,y:0},transition:{delay:.5+a*.1},whileHover:{scale:1.03,y:-4},children:[e.jsx("div",{className:`w-9 h-9 rounded-lg ${J[t.color]} flex items-center justify-center mb-3`,children:e.jsx(x,{size:18,className:V[t.color]})}),e.jsx("h3",{className:"text-sm font-display font-semibold text-slate-800 mb-0.5",children:t.label}),e.jsx("p",{className:"text-xs text-slate-400 font-body",children:t.desc})]},a)})})]}),e.jsx(s.div,{initial:{opacity:0,y:30},animate:{opacity:1,y:0},transition:{duration:.8,delay:.15,ease:[.22,1,.36,1]},className:"relative flex justify-center lg:justify-end",children:e.jsxs("div",{className:"bg-white/85 backdrop-blur-2xl border border-slate-200/60 rounded-2xl p-7 w-full max-w-md relative overflow-hidden shadow-2xl shadow-slate-900/[0.08]",children:[e.jsx("div",{className:"absolute top-0 left-0 right-0 h-[2px] bg-gradient-to-r from-transparent via-sky-500/50 to-transparent"}),e.jsx("div",{className:"absolute -top-20 left-1/2 -translate-x-1/2 w-72 h-36 bg-sky-400/10 rounded-full blur-3xl pointer-events-none"}),e.jsxs("div",{className:"text-center mb-6 relative",children:[e.jsx(s.h3,{className:"text-2xl font-display font-bold text-slate-900 mb-2",initial:{opacity:0},animate:{opacity:1},transition:{delay:.4},children:i?"Create Account":"Welcome Back"}),e.jsx(s.p,{className:"text-sm text-slate-500 font-body",initial:{opacity:0},animate:{opacity:1},transition:{delay:.5},children:i?"Begin your learning journey":"Sign in to continue learning"})]}),e.jsxs("form",{onSubmit:F,className:"space-y-4 mb-5 relative",children:[T&&e.jsx(s.div,{initial:{opacity:0,y:-10},animate:{opacity:1,y:0},className:"bg-rose-50 border border-rose-200 text-rose-600 px-4 py-3 rounded-lg text-sm font-body",children:T}),i&&e.jsxs(s.div,{initial:{opacity:0,height:0},animate:{opacity:1,height:"auto"},exit:{opacity:0,height:0},children:[e.jsx("label",{className:"block text-xs font-body font-semibold text-slate-500 mb-2 uppercase tracking-wider",children:"Full Name"}),e.jsxs("div",{className:"relative",children:[e.jsx(B,{size:16,className:"absolute left-4 top-1/2 -translate-y-1/2 text-slate-400"}),e.jsx(N,{type:"text",placeholder:"Your Name",value:v,onChange:t=>U(t.target.value),className:"w-full pl-11 pr-4 py-3 rounded-lg bg-slate-100/70 border-slate-200/80 text-slate-900 placeholder:text-slate-400 focus:border-sky-400 focus:ring-2 focus:ring-sky-400/20 focus:bg-white text-sm font-body transition-all",required:!0})]})]}),i&&e.jsxs(s.div,{initial:{opacity:0,x:-20},animate:{opacity:1,x:0},transition:{delay:.45},children:[e.jsx("label",{className:"block text-xs font-body font-semibold text-slate-500 mb-2 uppercase tracking-wider",children:"Account Type"}),e.jsx("div",{className:"grid grid-cols-2 gap-2",children:[{role:"student",label:"Student"},{role:"teacher",label:"Teacher"}].map(t=>{const a=o===t.role;return e.jsx("button",{type:"button",onClick:()=>A(t.role),className:`rounded-lg border px-3 py-2 text-xs font-body font-semibold transition-all ${a?"border-sky-400 bg-sky-50 text-sky-700":"border-slate-200 bg-slate-50 text-slate-500 hover:border-slate-300"}`,children:t.label},t.role)})})]}),i&&o==="student"&&e.jsxs(s.div,{initial:{opacity:0,height:0},animate:{opacity:1,height:"auto"},exit:{opacity:0,height:0},children:[e.jsx("label",{className:"block text-xs font-body font-semibold text-slate-500 mb-2 uppercase tracking-wider",children:"Grade Level"}),e.jsxs("div",{className:"relative",children:[e.jsx(G,{size:16,className:"absolute left-4 top-1/2 -translate-y-1/2 text-slate-400"}),e.jsx("select",{value:m,onChange:t=>$(t.target.value),className:"w-full pl-11 pr-4 py-3 rounded-lg bg-slate-100/70 border border-slate-200/80 text-slate-900 focus:border-sky-400 focus:ring-2 focus:ring-sky-400/20 focus:bg-white text-sm font-body transition-all appearance-none",required:!0,children:h.map(t=>e.jsx("option",{value:t,children:t},t))})]})]}),i&&o==="student"&&e.jsxs(s.div,{initial:{opacity:0,height:0},animate:{opacity:1,height:"auto"},exit:{opacity:0,height:0},children:[e.jsx("label",{className:"block text-xs font-body font-semibold text-slate-500 mb-2 uppercase tracking-wider",children:"Section"}),e.jsxs("div",{className:"relative",children:[e.jsx(B,{size:16,className:"absolute left-4 top-1/2 -translate-y-1/2 text-slate-400"}),e.jsx("select",{value:y,onChange:t=>P(t.target.value),className:"w-full pl-11 pr-4 py-3 rounded-lg bg-slate-100/70 border border-slate-200/80 text-slate-900 focus:border-sky-400 focus:ring-2 focus:ring-sky-400/20 focus:bg-white text-sm font-body transition-all appearance-none",required:!0,children:(d[m]||[]).map(t=>e.jsx("option",{value:t,children:t},t))})]})]}),i&&o!=="student"&&e.jsxs(s.div,{initial:{opacity:0,height:0},animate:{opacity:1,height:"auto"},exit:{opacity:0,height:0},children:[e.jsx("label",{className:"block text-xs font-body font-semibold text-slate-500 mb-2 uppercase tracking-wider",children:"Department"}),e.jsxs("div",{className:"relative",children:[e.jsx(D,{size:16,className:"absolute left-4 top-1/2 -translate-y-1/2 text-slate-400"}),e.jsx("select",{value:u,onChange:t=>E(t.target.value),className:"w-full pl-11 pr-4 py-3 rounded-lg bg-slate-100/70 border border-slate-200/80 text-slate-900 focus:border-sky-400 focus:ring-2 focus:ring-sky-400/20 focus:bg-white text-sm font-body transition-all appearance-none",required:!0,children:l.teacher.map(t=>e.jsx("option",{value:t,children:t},t))})]})]}),e.jsxs(s.div,{initial:{opacity:0,x:-20},animate:{opacity:1,x:0},transition:{delay:.5},children:[e.jsx("label",{className:"block text-xs font-body font-semibold text-slate-500 mb-2 uppercase tracking-wider",children:"Email Address"}),e.jsxs("div",{className:"relative",children:[e.jsx(se,{size:16,className:"absolute left-4 top-1/2 -translate-y-1/2 text-slate-400"}),e.jsx(N,{type:"email",placeholder:"your.email@school.edu",value:b,onChange:t=>w(t.target.value),className:"w-full pl-11 pr-4 py-3 rounded-lg bg-slate-100/70 border-slate-200/80 text-slate-900 placeholder:text-slate-400 focus:border-sky-400 focus:ring-2 focus:ring-sky-400/20 focus:bg-white text-sm font-body transition-all",required:!0})]})]}),e.jsxs(s.div,{initial:{opacity:0,x:-20},animate:{opacity:1,x:0},transition:{delay:.6},children:[e.jsx("label",{className:"block text-xs font-body font-semibold text-slate-500 mb-2 uppercase tracking-wider",children:"Password"}),e.jsxs("div",{className:"relative",children:[e.jsx(L,{size:16,className:"absolute left-4 top-1/2 -translate-y-1/2 text-slate-400"}),e.jsx(N,{type:g?"text":"password",placeholder:"β€’β€’β€’β€’β€’β€’β€’β€’",value:f,onChange:t=>k(t.target.value),className:"w-full pl-11 pr-11 py-3 rounded-lg bg-slate-100/70 border-slate-200/80 text-slate-900 placeholder:text-slate-400 focus:border-sky-400 focus:ring-2 focus:ring-sky-400/20 focus:bg-white text-sm font-body transition-all",required:!0,minLength:6}),e.jsx(s.button,{type:"button",onClick:()=>q(!g),className:"absolute right-3 top-1/2 -translate-y-1/2 text-slate-400 hover:text-slate-600 transition-colors",whileTap:{scale:.9},children:g?e.jsx(ae,{size:16}):e.jsx(re,{size:16})})]})]}),e.jsx(s.div,{initial:{opacity:0,y:10},animate:{opacity:1,y:0},transition:{delay:.7},children:e.jsxs(Q,{type:"submit",disabled:M,className:"w-full bg-gradient-to-r from-sky-600 to-sky-500 hover:from-sky-500 hover:to-cyan-400 text-white font-body font-semibold py-3 rounded-xl shadow-lg shadow-sky-600/25 hover:shadow-sky-500/35 hover:scale-[1.01] transition-all text-sm group relative overflow-hidden disabled:opacity-50 disabled:cursor-not-allowed",children:[e.jsx(s.span,{className:"absolute inset-0 bg-gradient-to-r from-white/0 via-white/15 to-white/0",animate:{x:["-100%","100%"]},transition:{duration:3,repeat:1/0,repeatDelay:2}}),e.jsxs("span",{className:"relative flex items-center justify-center gap-2",children:[M?"Please wait...":i?"Create Account":"Sign In",e.jsx(I,{size:16,className:"group-hover:translate-x-1 transition-transform"})]})]})}),e.jsx("div",{className:"text-center",children:e.jsx("button",{type:"button",onClick:()=>{S(!i),n(null)},className:"text-sm text-slate-400 hover:text-sky-500 font-body font-medium transition-colors",children:i?"Already have an account? Sign in":"Don't have an account? Create one"})})]}),!i&&e.jsxs(s.div,{initial:{opacity:0},animate:{opacity:1},transition:{delay:.85},className:"mb-4 relative",children:[e.jsxs("div",{className:"relative flex items-center gap-3 mb-4",children:[e.jsx("div",{className:"flex-1 h-px bg-slate-200"}),e.jsx("span",{className:"text-[10px] font-body font-semibold text-slate-400 uppercase tracking-widest",children:"Quick Demo Access"}),e.jsx("div",{className:"flex-1 h-px bg-slate-200"})]}),e.jsx("div",{className:"flex flex-col gap-2",children:Y.map(t=>{const a=t.icon,x={sky:"bg-sky-100",emerald:"bg-emerald-100",rose:"bg-rose-100"},p={sky:"text-sky-600",emerald:"text-emerald-600",rose:"text-rose-500"};return e.jsxs(s.button,{type:"button",onClick:()=>_(t.email,t.password,t.role),className:"group flex items-center gap-3 w-full px-4 py-2.5 rounded-lg bg-slate-50/80 border border-slate-200/70 hover:border-sky-300 hover:bg-sky-50/80 hover:shadow-sm transition-all text-left",whileHover:{scale:1.01},whileTap:{scale:.99},children:[e.jsx("div",{className:`w-8 h-8 rounded-md flex items-center justify-center shrink-0 ${x[t.color]}`,children:e.jsx(a,{size:15,className:p[t.color]})}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsxs("p",{className:"text-xs font-body font-semibold text-slate-700 group-hover:text-sky-600 transition-colors",children:[t.label," Account"]}),e.jsx("p",{className:"text-[10px] text-slate-400 font-body truncate",children:t.email})]}),e.jsx(I,{size:14,className:"text-slate-300 group-hover:text-sky-500 group-hover:translate-x-0.5 transition-all shrink-0"})]},t.label)})})]}),e.jsxs(s.p,{className:"text-xs text-slate-400 text-center mt-4 font-body relative",initial:{opacity:0},animate:{opacity:1},transition:{delay:1},children:[e.jsx(L,{size:10,className:"inline mr-1 -mt-0.5"})," Your data is encrypted and secure"]})]})})]})})]})};export{Ie as default};
assets/{LogoutActionButton-1LrBiz6V.js β†’ LogoutActionButton-FS5OGZjL.js} RENAMED
@@ -1,4 +1,4 @@
1
- import{c as a,m as s}from"./index-DUxNDyEU.js";import{j as e}from"./vendor-react-Dexh7fmo.js";import{c as n}from"./utils-BQQgILNW.js";import{L as i}from"./log-out-DH3jNNq7.js";/**
2
  * @license lucide-react v0.487.0 - ISC
3
  *
4
  * This source code is licensed under the ISC license.
 
1
+ import{c as a,m as s}from"./index-D4nJsLyx.js";import{j as e}from"./vendor-react-Dexh7fmo.js";import{c as n}from"./utils-BQQgILNW.js";import{L as i}from"./log-out-BqGKt-tT.js";/**
2
  * @license lucide-react v0.487.0 - ISC
3
  *
4
  * This source code is licensed under the ISC license.
assets/{MathAnswerInput-t95Hzg9C.js β†’ MathAnswerInput-DNG5LFL4.js} RENAMED
@@ -1 +1 @@
1
- import{r as c,c as y,j as e}from"./vendor-react-Dexh7fmo.js";import{C as P}from"./index-DUxNDyEU.js";const N={0:"⁰",1:"ΒΉ",2:"Β²",3:"Β³",4:"⁴",5:"⁡",6:"⁢",7:"⁷",8:"⁸",9:"⁹"};function S(i){let t=i;return t=t.replace(/sin⁻¹/g,"sin<sup>-1</sup>"),t=t.replace(/cos⁻¹/g,"cos<sup>-1</sup>"),t=t.replace(/tan⁻¹/g,"tan<sup>-1</sup>"),t=t.replace(/⁻¹/g,"<sup>-1</sup>"),t=t.replace(/Β²/g,"<sup>2</sup>"),t=t.replace(/Β³/g,"<sup>3</sup>"),t=t.replace(/[⁰¹⁴⁡⁢⁷⁸⁹]/g,d=>`<sup>${{"⁰":"0","ΒΉ":"1","⁴":"4","⁡":"5","⁢":"6","⁷":"7","⁸":"8","⁹":"9"}[d]??d}</sup>`),t=t.replace(/√/g,"√"),t=t.replace(/Ο€/g,"Ο€"),t=t.replace(/<(?!\/?(?:sup|sub)\b)[^>]*>/gi,""),t}const R=({value:i,onChange:t,placeholder:d,onCalculatorOpen:h,onSubmit:f})=>{const[b,g]=c.useState(!1),[m,j]=c.useState(null),[w,v]=c.useState({top:0,left:0}),p=c.useRef(null),x=c.useRef(!1),s=c.useCallback(n=>{const o=p.current;if(!o){t(i+n);return}const l=o.selectionStart??i.length,u=o.selectionEnd??i.length,D=i.slice(0,l)+n+i.slice(u);t(D),setTimeout(()=>{o.setSelectionRange(l+n.length,l+n.length),o.focus()},0)},[i,t]),C=c.useCallback(n=>{const o=n.key;if(o==="Enter"){n.preventDefault(),f?.();return}if(o==="^"){x.current=!0,n.preventDefault();return}if(x.current){if(o==="-"){s("⁻"),n.preventDefault();return}if(/^[0-9]$/.test(o)&&N[o]){s(N[o]),x.current=!1,n.preventDefault();return}x.current=!1}if(o==="Tab"&&m!==null){s(m),j(null),n.preventDefault();return}setTimeout(()=>{const l=p.current?.value??i;if(l.endsWith("pi"))t(l.slice(0,-2)+"Ο€"),j(null);else if(l.endsWith("sqrt"))t(l.slice(0,-4)+"√");else if(l.endsWith("sin-1")||l.endsWith("sin^-1")){const u=l.endsWith("sin^-1")?6:5;t(l.slice(0,-u)+"sin⁻¹")}else if(l.endsWith("cos-1")||l.endsWith("cos^-1")){const u=l.endsWith("cos^-1")?6:5;t(l.slice(0,-u)+"cos⁻¹")}else if(l.endsWith("tan-1")||l.endsWith("tan^-1")){const u=l.endsWith("tan^-1")?6:5;t(l.slice(0,-u)+"tan⁻¹")}},0)},[i,t,m,s,f]),a=c.useCallback(()=>{if(p.current){const n=p.current.getBoundingClientRect();v({top:Math.max(20,n.bottom-280),left:Math.max(10,n.left-240)})}},[]),E=c.useCallback(()=>{a(),g(!0)},[a]);y.useEffect(()=>{const n=setTimeout(()=>{a(),g(!0)},50);return()=>clearTimeout(n)},[a]),y.useEffect(()=>{if(b)return window.addEventListener("resize",a),window.addEventListener("scroll",a,!0),()=>{window.removeEventListener("resize",a),window.removeEventListener("scroll",a,!0)}},[b,a]);const T=c.useCallback(()=>{},[]),k=S(i),W=k!==i&&i.length>0,r="bg-slate-100 hover:bg-slate-200 text-[#0a1628] text-sm px-2 py-1 rounded-lg transition-colors";return e.jsxs("div",{className:"relative",children:[b&&e.jsxs("div",{className:"fixed z-[60] bg-white border border-slate-200 rounded-xl shadow-xl px-3 py-3 flex flex-col gap-3 w-[220px] pointer-events-auto",style:{top:w.top,left:w.left},onMouseDown:n=>n.preventDefault(),children:[e.jsxs("div",{children:[e.jsx("span",{className:"text-[10px] text-[#5a6578] uppercase tracking-wider mb-0.5 block",children:"Powers"}),e.jsxs("div",{className:"flex gap-1",children:[e.jsx("button",{type:"button",className:r,title:"Square",onClick:()=>s("Β²"),children:"xΒ²"}),e.jsx("button",{type:"button",className:r,title:"Cube",onClick:()=>s("Β³"),children:"xΒ³"}),e.jsx("button",{type:"button",className:r,title:"Power",onClick:()=>s("^"),children:"xⁿ"}),e.jsx("button",{type:"button",className:r,title:"Inverse",onClick:()=>s("⁻¹"),children:"x⁻¹"}),e.jsx("button",{type:"button",className:r,title:"Square root",onClick:()=>s("√("),children:"√"}),e.jsx("button",{type:"button",className:r,title:"Cube root",onClick:()=>s("βˆ›("),children:"βˆ›"})]})]}),e.jsxs("div",{children:[e.jsx("span",{className:"text-[10px] text-[#5a6578] uppercase tracking-wider mb-0.5 block",children:"Inverse Trig"}),e.jsxs("div",{className:"flex gap-1",children:[e.jsx("button",{type:"button",className:r,title:"Inverse sine",onClick:()=>s("sin⁻¹("),children:"sin⁻¹"}),e.jsx("button",{type:"button",className:r,title:"Inverse cosine",onClick:()=>s("cos⁻¹("),children:"cos⁻¹"}),e.jsx("button",{type:"button",className:r,title:"Inverse tangent",onClick:()=>s("tan⁻¹("),children:"tan⁻¹"})]})]}),e.jsxs("div",{children:[e.jsx("span",{className:"text-[10px] text-[#5a6578] uppercase tracking-wider mb-0.5 block",children:"Symbols"}),e.jsxs("div",{className:"flex gap-1",children:[e.jsx("button",{type:"button",className:r,title:"Pi",onClick:()=>s("Ο€"),children:"Ο€"}),e.jsx("button",{type:"button",className:r,title:"Euler's number",onClick:()=>s("e"),children:"e"}),e.jsx("button",{type:"button",className:r,title:"Infinity",onClick:()=>s("∞"),children:"∞"}),e.jsx("button",{type:"button",className:r,title:"Plus-minus",onClick:()=>s("Β±"),children:"Β±"}),e.jsx("button",{type:"button",className:r,title:"Approximately",onClick:()=>s("β‰ˆ"),children:"β‰ˆ"}),e.jsx("button",{type:"button",className:r,title:"Degree",onClick:()=>s("Β°"),children:"Β°"})]})]}),e.jsxs("div",{children:[e.jsx("span",{className:"text-[10px] text-[#5a6578] uppercase tracking-wider mb-0.5 block",children:"Other"}),e.jsxs("div",{className:"flex gap-1 items-center",children:[e.jsx("button",{type:"button",className:r,title:"Fraction",onClick:()=>s("(/)"),children:"a/b"}),e.jsx("div",{className:"ml-auto",children:e.jsxs("button",{type:"button",className:"bg-sky-600 hover:bg-rose-500 text-white text-xs px-3 py-1 rounded-lg flex items-center gap-1",onClick:()=>h?.(),children:[e.jsx(P,{size:12}),"Use Calc"]})})]})]})]}),e.jsx("input",{ref:p,id:"math-answer-input",name:"math-answer-input","aria-label":"Math answer input",type:"text",value:i,onChange:n=>t(n.target.value),onKeyDown:C,onFocus:E,onBlur:T,placeholder:d||"Type your answer... use ^ for powers e.g. x^2 for xΒ²",className:"w-full bg-white border border-slate-200 focus:border-sky-500 rounded-xl px-4 py-3 text-[#0a1628] font-mono text-base outline-none transition-colors"}),W&&e.jsx("div",{className:"text-rose-300 text-sm font-mono mt-1",dangerouslySetInnerHTML:{__html:k}})]})};export{R as M};
 
1
+ import{r as c,c as y,j as e}from"./vendor-react-Dexh7fmo.js";import{C as P}from"./index-D4nJsLyx.js";const N={0:"⁰",1:"ΒΉ",2:"Β²",3:"Β³",4:"⁴",5:"⁡",6:"⁢",7:"⁷",8:"⁸",9:"⁹"};function S(i){let t=i;return t=t.replace(/sin⁻¹/g,"sin<sup>-1</sup>"),t=t.replace(/cos⁻¹/g,"cos<sup>-1</sup>"),t=t.replace(/tan⁻¹/g,"tan<sup>-1</sup>"),t=t.replace(/⁻¹/g,"<sup>-1</sup>"),t=t.replace(/Β²/g,"<sup>2</sup>"),t=t.replace(/Β³/g,"<sup>3</sup>"),t=t.replace(/[⁰¹⁴⁡⁢⁷⁸⁹]/g,d=>`<sup>${{"⁰":"0","ΒΉ":"1","⁴":"4","⁡":"5","⁢":"6","⁷":"7","⁸":"8","⁹":"9"}[d]??d}</sup>`),t=t.replace(/√/g,"√"),t=t.replace(/Ο€/g,"Ο€"),t=t.replace(/<(?!\/?(?:sup|sub)\b)[^>]*>/gi,""),t}const R=({value:i,onChange:t,placeholder:d,onCalculatorOpen:h,onSubmit:f})=>{const[b,g]=c.useState(!1),[m,j]=c.useState(null),[w,v]=c.useState({top:0,left:0}),p=c.useRef(null),x=c.useRef(!1),s=c.useCallback(n=>{const o=p.current;if(!o){t(i+n);return}const l=o.selectionStart??i.length,u=o.selectionEnd??i.length,D=i.slice(0,l)+n+i.slice(u);t(D),setTimeout(()=>{o.setSelectionRange(l+n.length,l+n.length),o.focus()},0)},[i,t]),C=c.useCallback(n=>{const o=n.key;if(o==="Enter"){n.preventDefault(),f?.();return}if(o==="^"){x.current=!0,n.preventDefault();return}if(x.current){if(o==="-"){s("⁻"),n.preventDefault();return}if(/^[0-9]$/.test(o)&&N[o]){s(N[o]),x.current=!1,n.preventDefault();return}x.current=!1}if(o==="Tab"&&m!==null){s(m),j(null),n.preventDefault();return}setTimeout(()=>{const l=p.current?.value??i;if(l.endsWith("pi"))t(l.slice(0,-2)+"Ο€"),j(null);else if(l.endsWith("sqrt"))t(l.slice(0,-4)+"√");else if(l.endsWith("sin-1")||l.endsWith("sin^-1")){const u=l.endsWith("sin^-1")?6:5;t(l.slice(0,-u)+"sin⁻¹")}else if(l.endsWith("cos-1")||l.endsWith("cos^-1")){const u=l.endsWith("cos^-1")?6:5;t(l.slice(0,-u)+"cos⁻¹")}else if(l.endsWith("tan-1")||l.endsWith("tan^-1")){const u=l.endsWith("tan^-1")?6:5;t(l.slice(0,-u)+"tan⁻¹")}},0)},[i,t,m,s,f]),a=c.useCallback(()=>{if(p.current){const n=p.current.getBoundingClientRect();v({top:Math.max(20,n.bottom-280),left:Math.max(10,n.left-240)})}},[]),E=c.useCallback(()=>{a(),g(!0)},[a]);y.useEffect(()=>{const n=setTimeout(()=>{a(),g(!0)},50);return()=>clearTimeout(n)},[a]),y.useEffect(()=>{if(b)return window.addEventListener("resize",a),window.addEventListener("scroll",a,!0),()=>{window.removeEventListener("resize",a),window.removeEventListener("scroll",a,!0)}},[b,a]);const T=c.useCallback(()=>{},[]),k=S(i),W=k!==i&&i.length>0,r="bg-slate-100 hover:bg-slate-200 text-[#0a1628] text-sm px-2 py-1 rounded-lg transition-colors";return e.jsxs("div",{className:"relative",children:[b&&e.jsxs("div",{className:"fixed z-[60] bg-white border border-slate-200 rounded-xl shadow-xl px-3 py-3 flex flex-col gap-3 w-[220px] pointer-events-auto",style:{top:w.top,left:w.left},onMouseDown:n=>n.preventDefault(),children:[e.jsxs("div",{children:[e.jsx("span",{className:"text-[10px] text-[#5a6578] uppercase tracking-wider mb-0.5 block",children:"Powers"}),e.jsxs("div",{className:"flex gap-1",children:[e.jsx("button",{type:"button",className:r,title:"Square",onClick:()=>s("Β²"),children:"xΒ²"}),e.jsx("button",{type:"button",className:r,title:"Cube",onClick:()=>s("Β³"),children:"xΒ³"}),e.jsx("button",{type:"button",className:r,title:"Power",onClick:()=>s("^"),children:"xⁿ"}),e.jsx("button",{type:"button",className:r,title:"Inverse",onClick:()=>s("⁻¹"),children:"x⁻¹"}),e.jsx("button",{type:"button",className:r,title:"Square root",onClick:()=>s("√("),children:"√"}),e.jsx("button",{type:"button",className:r,title:"Cube root",onClick:()=>s("βˆ›("),children:"βˆ›"})]})]}),e.jsxs("div",{children:[e.jsx("span",{className:"text-[10px] text-[#5a6578] uppercase tracking-wider mb-0.5 block",children:"Inverse Trig"}),e.jsxs("div",{className:"flex gap-1",children:[e.jsx("button",{type:"button",className:r,title:"Inverse sine",onClick:()=>s("sin⁻¹("),children:"sin⁻¹"}),e.jsx("button",{type:"button",className:r,title:"Inverse cosine",onClick:()=>s("cos⁻¹("),children:"cos⁻¹"}),e.jsx("button",{type:"button",className:r,title:"Inverse tangent",onClick:()=>s("tan⁻¹("),children:"tan⁻¹"})]})]}),e.jsxs("div",{children:[e.jsx("span",{className:"text-[10px] text-[#5a6578] uppercase tracking-wider mb-0.5 block",children:"Symbols"}),e.jsxs("div",{className:"flex gap-1",children:[e.jsx("button",{type:"button",className:r,title:"Pi",onClick:()=>s("Ο€"),children:"Ο€"}),e.jsx("button",{type:"button",className:r,title:"Euler's number",onClick:()=>s("e"),children:"e"}),e.jsx("button",{type:"button",className:r,title:"Infinity",onClick:()=>s("∞"),children:"∞"}),e.jsx("button",{type:"button",className:r,title:"Plus-minus",onClick:()=>s("Β±"),children:"Β±"}),e.jsx("button",{type:"button",className:r,title:"Approximately",onClick:()=>s("β‰ˆ"),children:"β‰ˆ"}),e.jsx("button",{type:"button",className:r,title:"Degree",onClick:()=>s("Β°"),children:"Β°"})]})]}),e.jsxs("div",{children:[e.jsx("span",{className:"text-[10px] text-[#5a6578] uppercase tracking-wider mb-0.5 block",children:"Other"}),e.jsxs("div",{className:"flex gap-1 items-center",children:[e.jsx("button",{type:"button",className:r,title:"Fraction",onClick:()=>s("(/)"),children:"a/b"}),e.jsx("div",{className:"ml-auto",children:e.jsxs("button",{type:"button",className:"bg-sky-600 hover:bg-rose-500 text-white text-xs px-3 py-1 rounded-lg flex items-center gap-1",onClick:()=>h?.(),children:[e.jsx(P,{size:12}),"Use Calc"]})})]})]})]}),e.jsx("input",{ref:p,id:"math-answer-input",name:"math-answer-input","aria-label":"Math answer input",type:"text",value:i,onChange:n=>t(n.target.value),onKeyDown:C,onFocus:E,onBlur:T,placeholder:d||"Type your answer... use ^ for powers e.g. x^2 for xΒ²",className:"w-full bg-white border border-slate-200 focus:border-sky-500 rounded-xl px-4 py-3 text-[#0a1628] font-mono text-base outline-none transition-colors"}),W&&e.jsx("div",{className:"text-rose-300 text-sm font-mono mt-1",dangerouslySetInnerHTML:{__html:k}})]})};export{R as M};
assets/{ModuleFolderCard-Bja5J9kH.js β†’ ModuleFolderCard-CoKTURyN.js} RENAMED
@@ -1 +1 @@
1
- import{j as e}from"./vendor-react-Dexh7fmo.js";import{m as d,T as n}from"./index-DUxNDyEU.js";import{B as x}from"./book-open-B5Fr9j0O.js";import{C as h}from"./clock-TIVUqSxI.js";const r=[{bg:"bg-[#9956DE]",tab:"bg-[#8248c2]",shadow:"shadow-[#9956DE]/30"},{bg:"bg-[#1FA7E1]",tab:"bg-[#198abf]",shadow:"shadow-[#1FA7E1]/30"},{bg:"bg-[#FFB356]",tab:"bg-[#e09841]",shadow:"shadow-[#FFB356]/30"},{bg:"bg-[#FB96BB]",tab:"bg-[#de7b9f]",shadow:"shadow-[#FB96BB]/30"}],g=({module:s,index:l,onClick:o,isAtRisk:i,badgeLabel:t})=>{const a=r[l%r.length];return e.jsxs(d.button,{whileHover:{y:-8},onClick:o,className:"relative text-left rounded-[1.4rem] overflow-visible min-h-[290px] bg-transparent group w-full",children:[e.jsx("div",{className:`absolute top-0 left-4 h-7 w-32 rounded-t-xl shadow-sm transition-colors duration-300 ${a.tab}`}),e.jsxs("div",{className:`relative mt-6 rounded-[1.4rem] p-6 transition-all duration-300 overflow-hidden flex flex-col h-[calc(100%-24px)] ${a.bg} shadow-[0_18px_30px_-20px_rgba(0,0,0,0.45)] group-hover:shadow-[0_24px_40px_-15px_rgba(0,0,0,0.5)]`,children:[e.jsx("div",{className:"absolute top-0 left-0 right-0 h-1.5 mix-blend-overlay bg-white/40"}),e.jsx("div",{className:"absolute -bottom-8 right-[-20%] w-48 h-48 bg-white opacity-10 rounded-full transition-transform duration-500 group-hover:scale-110"}),e.jsx("div",{className:"absolute bottom-4 right-12 w-32 h-32 bg-white opacity-10 rounded-full transition-transform duration-500 group-hover:scale-110 delay-75"}),e.jsxs("div",{className:"relative z-10 flex-1 flex flex-col h-full",children:[e.jsxs("div",{className:"flex items-start justify-between mb-4",children:[e.jsx("span",{className:"px-3 py-1.5 rounded-full bg-white/20 text-white text-[10px] font-black uppercase tracking-wider backdrop-blur-sm shadow-sm border border-white/10",children:"General Mathematics"}),(t||s.status==="Locked")&&e.jsx("span",{className:"px-2.5 py-1 rounded-full bg-black/30 text-white/90 text-[10px] font-black uppercase tracking-wider backdrop-blur-sm",children:t||"Locked"})]}),e.jsx("h3",{className:"text-2xl md:text-[22px] font-display font-black text-white leading-[1.1] mb-2 drop-shadow-sm pr-4 line-clamp-2",children:s.title}),e.jsx("p",{className:"text-white/85 text-sm line-clamp-2 mb-6 font-medium leading-relaxed pr-2",children:s.subtitle||s.description||"Master this module to unlock the next level of your mathematical journey."}),e.jsxs("div",{className:"mt-auto",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-5",children:[e.jsxs("div",{className:"flex items-center gap-1.5 px-3 py-1.5 bg-white/20 rounded-xl text-white font-bold text-[13px] backdrop-blur-sm shadow-sm border border-white/10",children:[e.jsx(x,{size:14,className:"opacity-90"})," ",s.totalLessons||s.lessons?.length||0," lessons"]}),e.jsxs("div",{className:"flex items-center gap-1.5 px-3 py-1.5 bg-white/20 rounded-xl text-white font-bold text-[13px] backdrop-blur-sm shadow-sm border border-white/10",children:[e.jsx(h,{size:14,className:"opacity-90"})," ",s.totalQuizzes||s.quizzes?.length||0," quizzes"]})]}),e.jsxs("div",{className:"flex justify-between text-white font-bold text-[13px] mb-1.5 drop-shadow-sm",children:[e.jsx("span",{children:"Progress"}),e.jsxs("span",{children:[s.progress>0?s.progress:0,"%"]})]}),e.jsx("div",{className:"w-full h-2.5 rounded-full bg-black/20 overflow-hidden shadow-inner flex-shrink-0",children:e.jsx("div",{className:"h-full bg-white rounded-full transition-all duration-1000 ease-out",style:{width:`${s.progress>0?s.progress:0}%`}})})]}),i&&e.jsxs("div",{className:"absolute -top-3 -right-2 bg-rose-500 text-white px-3 py-1.5 rounded-full text-[11px] font-black uppercase tracking-wider flex items-center gap-1.5 shadow-lg border border-rose-400 animate-pulse",children:[e.jsx(n,{size:12,strokeWidth:3})," Review"]})]})]})]})};export{g as M};
 
1
+ import{j as e}from"./vendor-react-Dexh7fmo.js";import{m as d,T as n}from"./index-D4nJsLyx.js";import{B as x}from"./book-open-BH50GByv.js";import{C as h}from"./clock-DUJO-a50.js";const r=[{bg:"bg-[#9956DE]",tab:"bg-[#8248c2]",shadow:"shadow-[#9956DE]/30"},{bg:"bg-[#1FA7E1]",tab:"bg-[#198abf]",shadow:"shadow-[#1FA7E1]/30"},{bg:"bg-[#FFB356]",tab:"bg-[#e09841]",shadow:"shadow-[#FFB356]/30"},{bg:"bg-[#FB96BB]",tab:"bg-[#de7b9f]",shadow:"shadow-[#FB96BB]/30"}],g=({module:s,index:l,onClick:o,isAtRisk:i,badgeLabel:t})=>{const a=r[l%r.length];return e.jsxs(d.button,{whileHover:{y:-8},onClick:o,className:"relative text-left rounded-[1.4rem] overflow-visible min-h-[290px] bg-transparent group w-full",children:[e.jsx("div",{className:`absolute top-0 left-4 h-7 w-32 rounded-t-xl shadow-sm transition-colors duration-300 ${a.tab}`}),e.jsxs("div",{className:`relative mt-6 rounded-[1.4rem] p-6 transition-all duration-300 overflow-hidden flex flex-col h-[calc(100%-24px)] ${a.bg} shadow-[0_18px_30px_-20px_rgba(0,0,0,0.45)] group-hover:shadow-[0_24px_40px_-15px_rgba(0,0,0,0.5)]`,children:[e.jsx("div",{className:"absolute top-0 left-0 right-0 h-1.5 mix-blend-overlay bg-white/40"}),e.jsx("div",{className:"absolute -bottom-8 right-[-20%] w-48 h-48 bg-white opacity-10 rounded-full transition-transform duration-500 group-hover:scale-110"}),e.jsx("div",{className:"absolute bottom-4 right-12 w-32 h-32 bg-white opacity-10 rounded-full transition-transform duration-500 group-hover:scale-110 delay-75"}),e.jsxs("div",{className:"relative z-10 flex-1 flex flex-col h-full",children:[e.jsxs("div",{className:"flex items-start justify-between mb-4",children:[e.jsx("span",{className:"px-3 py-1.5 rounded-full bg-white/20 text-white text-[10px] font-black uppercase tracking-wider backdrop-blur-sm shadow-sm border border-white/10",children:"General Mathematics"}),(t||s.status==="Locked")&&e.jsx("span",{className:"px-2.5 py-1 rounded-full bg-black/30 text-white/90 text-[10px] font-black uppercase tracking-wider backdrop-blur-sm",children:t||"Locked"})]}),e.jsx("h3",{className:"text-2xl md:text-[22px] font-display font-black text-white leading-[1.1] mb-2 drop-shadow-sm pr-4 line-clamp-2",children:s.title}),e.jsx("p",{className:"text-white/85 text-sm line-clamp-2 mb-6 font-medium leading-relaxed pr-2",children:s.subtitle||s.description||"Master this module to unlock the next level of your mathematical journey."}),e.jsxs("div",{className:"mt-auto",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-5",children:[e.jsxs("div",{className:"flex items-center gap-1.5 px-3 py-1.5 bg-white/20 rounded-xl text-white font-bold text-[13px] backdrop-blur-sm shadow-sm border border-white/10",children:[e.jsx(x,{size:14,className:"opacity-90"})," ",s.totalLessons||s.lessons?.length||0," lessons"]}),e.jsxs("div",{className:"flex items-center gap-1.5 px-3 py-1.5 bg-white/20 rounded-xl text-white font-bold text-[13px] backdrop-blur-sm shadow-sm border border-white/10",children:[e.jsx(h,{size:14,className:"opacity-90"})," ",s.totalQuizzes||s.quizzes?.length||0," quizzes"]})]}),e.jsxs("div",{className:"flex justify-between text-white font-bold text-[13px] mb-1.5 drop-shadow-sm",children:[e.jsx("span",{children:"Progress"}),e.jsxs("span",{children:[s.progress>0?s.progress:0,"%"]})]}),e.jsx("div",{className:"w-full h-2.5 rounded-full bg-black/20 overflow-hidden shadow-inner flex-shrink-0",children:e.jsx("div",{className:"h-full bg-white rounded-full transition-all duration-1000 ease-out",style:{width:`${s.progress>0?s.progress:0}%`}})})]}),i&&e.jsxs("div",{className:"absolute -top-3 -right-2 bg-rose-500 text-white px-3 py-1.5 rounded-full text-[11px] font-black uppercase tracking-wider flex items-center gap-1.5 shadow-lg border border-rose-400 animate-pulse",children:[e.jsx(n,{size:12,strokeWidth:3})," Review"]})]})]})]})};export{g as M};
assets/{ModulesPage-BZZ-FCnY.js β†’ ModulesPage-y4YivjOd.js} RENAMED
@@ -1,4 +1,4 @@
1
- import{r as l,j as e}from"./vendor-react-Dexh7fmo.js";import{M as we}from"./ModuleFolderCard-Bja5J9kH.js";import{B as X}from"./button-BpeUVhBo.js";import{I as Oe}from"./input-DBkKXOmF.js";import{c as F,m as p,Z as Ae,F as ae,e as Y,A as Ce,C as pe,u as Se,p as Ze,q as He,r as ze,v as Xe,w as Ue,g as Ye,n as Ke,o as Je,T as et,x as tt}from"./index-DUxNDyEU.js";import{T as H}from"./trophy-qEvM2_M2.js";import{S as je}from"./sparkles-BA64-_B-.js";import{T as Z}from"./target-CkzwB53m.js";import{A as re}from"./award-UT1_i9UI.js";import{S as Te}from"./star-D2vv-PRB.js";import{C as me}from"./check-DF0M9ltT.js";import{X as G}from"./x-DwrHgz_L.js";import{C as st}from"./circle-help-DWqFJv7Z.js";import{a as Me,s as ie,g as at}from"./subjects-mtNF4Bqy.js";import{T as he}from"./trending-up-KXZvyUp1.js";import{B as U}from"./book-open-B5Fr9j0O.js";import{L as Pe,c as it,a as nt}from"./quizService-C_kA-Nrp.js";import{C as se}from"./circle-check-big-CXPh4ph_.js";import{L as ve}from"./lock-CsjFFL-g.js";import{C as ne}from"./clock-TIVUqSxI.js";import Ie from"./confetti.module-C94ZD2ww.js";import{triggerQuizSubmitted as rt}from"./automationService-DCIX9fmr.js";import ot from"./ScientificCalculator-3ZZoXfU9.js";import{M as lt}from"./MathAnswerInput-t95Hzg9C.js";import Le from"./SupplementalBanner-BKiLrsCL.js";import{P as ct}from"./pen-line-C4kYg-x9.js";import{C as dt}from"./chevron-right-CSxxBxL8.js";import{S as xt}from"./search-DxT5Gvzl.js";import"./vendor-radix-BRdei-zg.js";import"./clsx-B-dksMZM.js";import"./utils-BQQgILNW.js";import"./vendor-firebase-auth-COrkgW0P.js";import"./vendor-firebase-core-DQ-pMjxd.js";import"./vendor-firebase-firestore-BML5nJHm.js";import"./vendor-firebase-storage-BOeKE_0n.js";import"./vendor-firebase-analytics-CCo6E2f7.js";import"./chart-column-BSv3Tlcd.js";import"./apiService-BcE-mX0v.js";import"./chevron-up-B14f4SwA.js";import"./brain-D2SpSiL8.js";/**
2
  * @license lucide-react v0.487.0 - ISC
3
  *
4
  * This source code is licensed under the ISC license.
 
1
+ import{r as l,j as e}from"./vendor-react-Dexh7fmo.js";import{M as we}from"./ModuleFolderCard-CoKTURyN.js";import{B as X}from"./button-BpeUVhBo.js";import{I as Oe}from"./input-DBkKXOmF.js";import{c as F,m as p,Z as Ae,F as ae,e as Y,A as Ce,C as pe,u as Se,p as Ze,q as He,r as ze,v as Xe,w as Ue,g as Ye,n as Ke,o as Je,T as et,x as tt}from"./index-D4nJsLyx.js";import{T as H}from"./trophy-C2nVcZnb.js";import{S as je}from"./sparkles-CXUFmaBJ.js";import{T as Z}from"./target-D7SVtf3g.js";import{A as re}from"./award-oJTbc9W5.js";import{S as Te}from"./star-dumQ9BVG.js";import{C as me}from"./check-BACdUlFL.js";import{X as G}from"./x-BONnp2RF.js";import{C as st}from"./circle-help-BmjHdT5a.js";import{a as Me,s as ie,g as at}from"./subjects-DDBtpdiA.js";import{T as he}from"./trending-up-D-vj8Gbq.js";import{B as U}from"./book-open-BH50GByv.js";import{L as Pe,c as it,a as nt}from"./quizService-CI5e0QMr.js";import{C as se}from"./circle-check-big-0Gzyt_f3.js";import{L as ve}from"./lock-_59co5m5.js";import{C as ne}from"./clock-DUJO-a50.js";import Ie from"./confetti.module-C94ZD2ww.js";import{triggerQuizSubmitted as rt}from"./automationService-DNyauqGd.js";import ot from"./ScientificCalculator-wlhyNBDf.js";import{M as lt}from"./MathAnswerInput-DNG5LFL4.js";import Le from"./SupplementalBanner-dklPrubU.js";import{P as ct}from"./pen-line-Vok2l3fc.js";import{C as dt}from"./chevron-right-COMox1Xb.js";import{S as xt}from"./search-Do6u3pFt.js";import"./vendor-radix-BRdei-zg.js";import"./clsx-B-dksMZM.js";import"./utils-BQQgILNW.js";import"./vendor-firebase-auth-COrkgW0P.js";import"./vendor-firebase-core-DQ-pMjxd.js";import"./vendor-firebase-firestore-BML5nJHm.js";import"./vendor-firebase-storage-BOeKE_0n.js";import"./vendor-firebase-analytics-CCo6E2f7.js";import"./chart-column-D5mAWcRx.js";import"./apiService-axx1LHMk.js";import"./chevron-up-Bfmq3Clw.js";import"./brain-CPvGdgWE.js";/**
2
  * @license lucide-react v0.487.0 - ISC
3
  *
4
  * This source code is licensed under the ISC license.
assets/{NotificationCenter-DKdxi7VY.js β†’ NotificationCenter-DGhehaGL.js} RENAMED
@@ -1,4 +1,4 @@
1
- import{r as m,j as e}from"./vendor-react-Dexh7fmo.js";import{c as w,u as A,m as o,e as C,j as M,k as z,l as E}from"./index-DUxNDyEU.js";import{B as h}from"./bell-CdZB167e.js";import{X as R}from"./x-DwrHgz_L.js";import{B as T}from"./book-open-B5Fr9j0O.js";import{M as $}from"./message-square-Cc7MV93e.js";import{C as B}from"./circle-alert-3TSiLPep.js";import{T as H}from"./trophy-qEvM2_M2.js";import"./vendor-firebase-auth-COrkgW0P.js";import"./vendor-firebase-core-DQ-pMjxd.js";import"./vendor-firebase-firestore-BML5nJHm.js";import"./vendor-firebase-storage-BOeKE_0n.js";import"./vendor-firebase-analytics-CCo6E2f7.js";/**
2
  * @license lucide-react v0.487.0 - ISC
3
  *
4
  * This source code is licensed under the ISC license.
 
1
+ import{r as m,j as e}from"./vendor-react-Dexh7fmo.js";import{c as w,u as A,m as o,e as C,j as M,k as z,l as E}from"./index-D4nJsLyx.js";import{B as h}from"./bell-CbSbac2W.js";import{X as R}from"./x-BONnp2RF.js";import{B as T}from"./book-open-BH50GByv.js";import{M as $}from"./message-square-DSAS4TVL.js";import{C as B}from"./circle-alert-CBefjicJ.js";import{T as H}from"./trophy-C2nVcZnb.js";import"./vendor-firebase-auth-COrkgW0P.js";import"./vendor-firebase-core-DQ-pMjxd.js";import"./vendor-firebase-firestore-BML5nJHm.js";import"./vendor-firebase-storage-BOeKE_0n.js";import"./vendor-firebase-analytics-CCo6E2f7.js";/**
2
  * @license lucide-react v0.487.0 - ISC
3
  *
4
  * This source code is licensed under the ISC license.
assets/{ProfileModal-CgIiffSP.js β†’ ProfileModal-D3hk8uuj.js} RENAMED
@@ -1,4 +1,4 @@
1
- import{r,j as e}from"./vendor-react-Dexh7fmo.js";import{B as c}from"./button-BpeUVhBo.js";import{I as l}from"./input-DBkKXOmF.js";import{c as u,e as P,m as k,B as A,N as B}from"./index-DUxNDyEU.js";import{C as R}from"./CompositeAvatar-BFyEBxkG.js";import{X as D}from"./x-DwrHgz_L.js";import{U as f}from"./users-B8Q5DwX3.js";import{M as F}from"./mail-IWkUUCjc.js";import{A as b}from"./award-UT1_i9UI.js";import{B as w}from"./book-open-B5Fr9j0O.js";import{C as U}from"./calendar-DOp6N-WM.js";import{G as _}from"./globe-ClgZF2mp.js";import{S as T}from"./save-B-nSNwXv.js";import"./vendor-radix-BRdei-zg.js";import"./clsx-B-dksMZM.js";import"./utils-BQQgILNW.js";import"./vendor-firebase-auth-COrkgW0P.js";import"./vendor-firebase-core-DQ-pMjxd.js";import"./vendor-firebase-firestore-BML5nJHm.js";import"./vendor-firebase-storage-BOeKE_0n.js";import"./vendor-firebase-analytics-CCo6E2f7.js";import"./avatarData-BW_TX0b4.js";/**
2
  * @license lucide-react v0.487.0 - ISC
3
  *
4
  * This source code is licensed under the ISC license.
 
1
+ import{r,j as e}from"./vendor-react-Dexh7fmo.js";import{B as c}from"./button-BpeUVhBo.js";import{I as l}from"./input-DBkKXOmF.js";import{c as u,e as P,m as k,B as A,N as B}from"./index-D4nJsLyx.js";import{C as R}from"./CompositeAvatar-DMpjm5UY.js";import{X as D}from"./x-BONnp2RF.js";import{U as f}from"./users-HMf2sdE3.js";import{M as F}from"./mail-D7el5vSX.js";import{A as b}from"./award-oJTbc9W5.js";import{B as w}from"./book-open-BH50GByv.js";import{C as U}from"./calendar-BJ8oE6yW.js";import{G as _}from"./globe-BMa4SWkV.js";import{S as T}from"./save-Og8yP5Yb.js";import"./vendor-radix-BRdei-zg.js";import"./clsx-B-dksMZM.js";import"./utils-BQQgILNW.js";import"./vendor-firebase-auth-COrkgW0P.js";import"./vendor-firebase-core-DQ-pMjxd.js";import"./vendor-firebase-firestore-BML5nJHm.js";import"./vendor-firebase-storage-BOeKE_0n.js";import"./vendor-firebase-analytics-CCo6E2f7.js";import"./avatarData-BW_TX0b4.js";/**
2
  * @license lucide-react v0.487.0 - ISC
3
  *
4
  * This source code is licensed under the ISC license.
assets/QuizBattlePage-BbGkD7O9.js ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import{c as Ee,d as Qe,E as ke,G as Pe,H as B,u as Jt,_ as Yt,m as re,I as ht,i as Kt}from"./index-D4nJsLyx.js";import{j as e,r as l}from"./vendor-react-Dexh7fmo.js";import{g as Zt,s as Xt}from"./subjects-DDBtpdiA.js";import{d as ea,b as ta,w as gt,o as Rt,l as Ye,f as Ke,q as Ze,e as Xe}from"./vendor-firebase-firestore-BML5nJHm.js";import{Y as R,Z as Mt,$ as At,a0 as be,a1 as aa}from"./vendor-firebase-core-DQ-pMjxd.js";import{B as I}from"./button-BpeUVhBo.js";import{c as h}from"./utils-BQQgILNW.js";import{c as sa,L as ra,d as oa,e as na,f as da,g as ia,h as ca}from"./vendor-radix-BRdei-zg.js";import{S as ce,a as le,b as ue,c as me,d as P}from"./select-Co4o1EaI.js";import{I as la}from"./input-DBkKXOmF.js";import{S as Me}from"./switch-eyvBOdtY.js";import{S as X,C as yt}from"./skeleton-BUmMbOVs.js";import{S as jt}from"./swords-8_KH18p7.js";import{U as Ae}from"./users-HMf2sdE3.js";import{C as He}from"./chevron-right-COMox1Xb.js";import{T as ua}from"./target-D7SVtf3g.js";import{C as wt}from"./check-BACdUlFL.js";import{L as Ge}from"./loader-circle-J8Mwbkkw.js";import{T as ma}from"./trophy-C2nVcZnb.js";import{S as xa}from"./sparkles-CXUFmaBJ.js";import{S as fa}from"./shield-check-B_yHzqcC.js";import"./vendor-firebase-auth-COrkgW0P.js";import"./vendor-firebase-storage-BOeKE_0n.js";import"./vendor-firebase-analytics-CCo6E2f7.js";import"./trending-up-D-vj8Gbq.js";import"./chart-column-D5mAWcRx.js";import"./clsx-B-dksMZM.js";import"./chevron-up-Bfmq3Clw.js";/**
2
+ * @license lucide-react v0.487.0 - ISC
3
+ *
4
+ * This source code is licensed under the ISC license.
5
+ * See the LICENSE file in the root directory of this source tree.
6
+ */const ba=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["polyline",{points:"12 6 12 12 16.5 12",key:"1aq6pp"}]],pa=Ee("clock-3",ba);/**
7
+ * @license lucide-react v0.487.0 - ISC
8
+ *
9
+ * This source code is licensed under the ISC license.
10
+ * See the LICENSE file in the root directory of this source tree.
11
+ */const ha=[["path",{d:"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",key:"1357e3"}],["path",{d:"M3 3v5h5",key:"1xhq8a"}],["path",{d:"M12 7v5l4 2",key:"1fdv2h"}]],ga=Ee("history",ha);/**
12
+ * @license lucide-react v0.487.0 - ISC
13
+ *
14
+ * This source code is licensed under the ISC license.
15
+ * See the LICENSE file in the root directory of this source tree.
16
+ */const ya=[["path",{d:"M11 4.702a.705.705 0 0 0-1.203-.498L6.413 7.587A1.4 1.4 0 0 1 5.416 8H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h2.416a1.4 1.4 0 0 1 .997.413l3.383 3.384A.705.705 0 0 0 11 19.298z",key:"uqj9uw"}],["path",{d:"M16 9a5 5 0 0 1 0 6",key:"1q6k2b"}],["path",{d:"M19.364 18.364a9 9 0 0 0 0-12.728",key:"ijwkga"}]],kt=Ee("volume-2",ya);/**
17
+ * @license lucide-react v0.487.0 - ISC
18
+ *
19
+ * This source code is licensed under the ISC license.
20
+ * See the LICENSE file in the root directory of this source tree.
21
+ */const ja=[["path",{d:"M11 4.702a.705.705 0 0 0-1.203-.498L6.413 7.587A1.4 1.4 0 0 1 5.416 8H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h2.416a1.4 1.4 0 0 1 .997.413l3.383 3.384A.705.705 0 0 0 11 19.298z",key:"uqj9uw"}],["line",{x1:"22",x2:"16",y1:"9",y2:"15",key:"1ewh16"}],["line",{x1:"16",x2:"22",y1:"9",y2:"15",key:"5ykzw1"}]],vt=Ee("volume-x",ja),wa=15e3,ka="mathpulse.quizBattle.local",Nt="".toLowerCase()==="true",_e=typeof window<"u",qe=()=>_e&&!1,tt=()=>{const a=Pe.currentUser?.uid;return a||"local-student"},Tt=a=>`${ka}.${a}`,ve=a=>{const s={stats:pe(a),history:[],queueStatus:"idle"};if(!_e)return s;try{const r=window.localStorage.getItem(Tt(a));if(!r)return s;const c=JSON.parse(r),i=Array.isArray(c.history)?c.history.map(g=>et(g.matchId||"local-match",g)):[];return{stats:c.stats?{...pe(a),...c.stats,userId:a,updatedAt:ze(c.stats.updatedAt)}:pe(a),history:i,queueStatus:c.queueStatus==="queued"||c.queueStatus==="matched"?c.queueStatus:"idle"}}catch(r){return console.error("Error reading local Quiz Battle fallback store:",r),s}},Qt=(a,s)=>{if(_e)try{window.localStorage.setItem(Tt(a),JSON.stringify(s))}catch(r){console.error("Error writing local Quiz Battle fallback store:",r)}},qt=a=>{const s=a||{},r=typeof s.code=="string"?s.code:"";return r?r.startsWith("functions/")?r.replace("functions/",""):r:""},H=a=>{if(!qe())return!1;const s=qt(a);if(["internal","not-found","unavailable","deadline-exceeded"].includes(s))return!0;const r=a||{},c=(typeof r.message=="string"?r.message:a instanceof Error?a.message:"").toLowerCase();return c?c.includes("cors policy")||c.includes("no access-control-allow-origin")||c.includes("failed to fetch")||c.includes("network error")||c.includes("err_failed"):!1},Te=(a,s)=>Math.floor(Math.random()*(s-a+1))+a,va=(a,s)=>{const r=Math.max(3,a),c=s==="easy"?0:s==="medium"?1:s==="hard"?2:1,i=Te(Math.max(0,r-3-c),r),d=Te(Math.max(0,r-4+c),r),g=Math.min(r,Math.max(0,i)),C=Math.min(r,Math.max(0,d)),y=Math.max(0,Math.min(100,g/r*100+Te(-8,6))),S=Te(1800,6200);return{scoreFor:g,scoreAgainst:C,accuracy:y,averageResponseMs:S}},Na=a=>{const s=tt(),r=ve(s),c=`local-bot-${Date.now()}-${Math.random().toString(16).slice(2,8)}`,i=va(a.rounds,a.botDifficulty),d=i.scoreFor>i.scoreAgainst?"win":i.scoreFor<i.scoreAgainst?"loss":"draw",g=new Date,C={matchId:c,mode:"bot",status:"completed",subjectId:a.subjectId,topicId:a.topicId,difficulty:a.botDifficulty,rounds:a.rounds,timePerQuestionSec:a.timePerQuestionSec,scoreFor:i.scoreFor,scoreAgainst:i.scoreAgainst,outcome:d,accuracy:i.accuracy,averageResponseMs:i.averageResponseMs,bestStreak:r.stats.bestStreak,xpEarned:d==="win"?60:d==="draw"?40:20,opponentName:"Practice Bot",opponentType:"bot",createdAt:g,endedAt:g},y=r.stats.matchesPlayed+1,S=r.stats.wins+(d==="win"?1:0),he=r.stats.losses+(d==="loss"?1:0),z=r.stats.draws+(d==="draw"?1:0),b=d==="win"?r.stats.currentStreak+1:0,A=Math.max(r.stats.bestStreak,b),j={...r.stats,matchesPlayed:y,wins:S,losses:he,draws:z,winRate:y>0?S/y*100:0,averageAccuracy:y>0?(r.stats.averageAccuracy*r.stats.matchesPlayed+i.accuracy)/y:i.accuracy,averageResponseMs:y>0?Math.round((r.stats.averageResponseMs*r.stats.matchesPlayed+i.averageResponseMs)/y):i.averageResponseMs,currentStreak:b,bestStreak:A,favoriteTopicId:a.topicId,leaderboardScore:r.stats.leaderboardScore+C.xpEarned,updatedAt:g};return Qt(s,{stats:j,history:[C,...r.history].slice(0,50),queueStatus:"idle"}),{success:!0,matchId:c,status:"ready",botDifficulty:a.botDifficulty}},zt=a=>{const s=tt(),r=ve(s);Qt(s,{...r,queueStatus:a})},Sa=()=>Math.random().toString(36).slice(2,8).toUpperCase(),at=a=>{const s=tt();return{roomId:`local-room-${Date.now()}`,roomCode:a||Sa(),ownerStudentId:s,participantIds:[s],participantCount:1,status:"waiting",subjectId:"gen-math",topicId:"functions",difficulty:"medium",rounds:5,timePerQuestionSec:30,isOwner:!0}},Et=()=>_e&&!!Pe.currentUser?.uid&&!!ke,Pt=(a,s,r)=>`quizBattlePresence/${a}/${s}/${r}`,Ca=async(a,s)=>{if(!Et()||!s.trim()||!ke)return;const r=Pe.currentUser?.uid;if(!r)return;const c=Mt(ke,Pt(a,s,r));try{await At(c,{studentId:r,scope:a,resourceId:s,online:!0,heartbeatAt:be(),updatedAt:be()}),await aa(c).update({online:!1,updatedAt:be(),disconnectedAt:be()})}catch(i){console.warn("Realtime presence connect failed:",i)}},Ia=async(a,s)=>{if(!Et()||!s.trim()||!ke)return;const r=Pe.currentUser?.uid;if(!r)return;const c=Mt(ke,Pt(a,s,r));try{await At(c,{studentId:r,scope:a,resourceId:s,online:!1,updatedAt:be(),disconnectedAt:be()})}catch(i){console.warn("Realtime presence disconnect failed:",i)}},Q=(a,s)=>{const r=`Unable to continue while ${a}. Please try again.`;if(s instanceof Error&&s.message.startsWith("Timed out while"))return s.message;const c=s||{},i=qt(s),d=typeof c.message=="string"?c.message.trim():"";return i==="unauthenticated"?"Your session has expired. Sign in again before starting a battle.":i==="permission-denied"?"Only student accounts can access Quiz Battle matchmaking.":i==="invalid-argument"?d||"Battle setup is invalid. Review the selected options and try again.":i==="already-exists"?d||"This room is already full. Try another room code.":i==="failed-precondition"?d||"Battle state changed. Please refresh and continue.":i==="unavailable"||i==="internal"||i==="not-found"||i==="deadline-exceeded"?/question generation temporarily unavailable/i.test(d)?d:"Quiz Battle service is temporarily unavailable. Please retry in a moment.":r},M=async(a,s,r=wa)=>{let c;try{return await Promise.race([s,new Promise((i,d)=>{c=setTimeout(()=>{d(new Error(`Timed out while ${a}. Please try again.`))},r)})])}finally{c&&clearTimeout(c)}},ze=a=>{if(!a)return new Date;if(a instanceof Date)return a;if(typeof a=="string"){const s=Date.parse(a);return Number.isNaN(s)?new Date:new Date(s)}if(typeof a=="number")return new Date(a);if(typeof a=="object"){const s=a;if(typeof s.toDate=="function")return s.toDate();if(typeof s.seconds=="number")return new Date(s.seconds*1e3)}return new Date},Ba=()=>({mode:"online",subjectId:"gen-math",topicId:"",difficulty:"medium",rounds:5,timePerQuestionSec:30,queueType:"public_matchmaking",botDifficulty:"medium",adaptiveBot:!1}),Ra=a=>{const s=[];return a.subjectId.trim()||s.push({field:"subjectId",message:"Choose a category before starting."}),a.topicId.trim()||s.push({field:"topicId",message:"Choose a strand or topic before starting."}),(a.rounds<3||a.rounds>20)&&s.push({field:"rounds",message:"Questions must be between 3 and 20."}),(a.timePerQuestionSec<10||a.timePerQuestionSec>180)&&s.push({field:"timePerQuestionSec",message:"Timer must be between 10s and 180s."}),a.mode==="bot"&&a.queueType!=="public_matchmaking"&&s.push({field:"queueType",message:"Bot battles use instant start and do not support private room mode."}),s},pe=a=>({userId:a,matchesPlayed:0,wins:0,losses:0,draws:0,winRate:0,averageAccuracy:0,averageResponseMs:0,bestStreak:0,currentStreak:0,favoriteTopicId:void 0,leaderboardScore:0,updatedAt:new Date}),Ma=async a=>{try{const s=ea(Qe,"studentBattleStats",a),r=await ta(s),c=qe()?ve(a).stats:null;if(!r.exists())return c&&c.matchesPlayed>0?c:pe(a);const i=r.data(),d={...pe(a),...i,userId:a,updatedAt:ze(i.updatedAt)};return c&&c.matchesPlayed>d.matchesPlayed?c:d}catch(s){if(console.error("Error loading battle stats:",s),qe()){const r=ve(a).stats;if(r.matchesPlayed>0)return r}return pe(a)}},et=(a,s)=>({matchId:s.matchId||a,mode:s.mode||"online",status:s.status||"completed",subjectId:s.subjectId||"gen-math",topicId:s.topicId||"unknown-topic",difficulty:s.difficulty||"medium",rounds:s.rounds||0,timePerQuestionSec:s.timePerQuestionSec||0,scoreFor:s.scoreFor||0,scoreAgainst:s.scoreAgainst||0,outcome:s.outcome||"draw",accuracy:s.accuracy||0,averageResponseMs:s.averageResponseMs||0,bestStreak:s.bestStreak||0,xpEarned:s.xpEarned||0,opponentName:s.opponentName||"Unknown opponent",opponentType:s.opponentType||"student",createdAt:ze(s.createdAt),endedAt:ze(s.endedAt)}),Aa=async(a,s={})=>{const r=s.limitCount||25,c=qe()?ve(a).history:[],i=g=>g.filter(y=>!(s.mode&&s.mode!=="all"&&y.mode!==s.mode||s.subjectId&&y.subjectId!==s.subjectId||s.startDate&&y.endedAt<s.startDate||s.endDate&&y.endedAt>s.endDate)).sort((y,S)=>S.endedAt.getTime()-y.endedAt.getTime()).slice(0,r),d=g=>{if(c.length===0)return i(g);const C=new Map;return[...c,...g].forEach(y=>{C.set(y.matchId,y)}),i(Array.from(C.values()))};try{const g=[gt("studentId","==",a),Rt("endedAt","desc"),Ye(r)],y=(await Ke(Ze(Xe(Qe,"quizBattleHistory"),...g))).docs.map(S=>et(S.id,S.data()));return d(y)}catch(g){try{const y=(await Ke(Ze(Xe(Qe,"quizBattleHistory"),gt("studentId","==",a),Ye(r)))).docs.map(S=>et(S.id,S.data())).sort((S,he)=>he.endedAt.getTime()-S.endedAt.getTime());return d(y)}catch(C){return console.error("Error loading battle history:",g,C),i(c)}}},Ta=async a=>{const s=R(B,"quizBattleJoinQueue");try{return(await M("joining Quiz Battle matchmaking queue",s({setup:a}))).data}catch(r){if(H(r))return zt("queued"),{success:!0,status:"queued",queueEntryId:`local-queue-${Date.now()}`};throw new Error(Q("joining Quiz Battle matchmaking queue",r))}},Qa=async()=>{const a=R(B,"quizBattleLeaveQueue");try{return(await M("leaving Quiz Battle matchmaking queue",a({}))).data}catch(s){if(H(s))return zt("idle"),{success:!0,status:"idle"};throw new Error(Q("leaving Quiz Battle matchmaking queue",s))}},qa=async a=>{const s=R(B,"quizBattleCreatePrivateRoom");try{return(await M("creating Quiz Battle private room",s({setup:a}))).data}catch(r){if(H(r))return{success:!0,room:at()};throw new Error(Q("creating Quiz Battle private room",r))}},za=async a=>{const s=R(B,"quizBattleJoinPrivateRoom");try{return(await M("joining Quiz Battle private room",s({roomCode:a}),2e4)).data}catch(r){if(H(r))return{success:!0,room:at(a.trim().toUpperCase()||void 0)};throw new Error(Q("joining Quiz Battle private room",r))}},Ea=async a=>{const s=R(B,"quizBattleGetPrivateRoomState");try{return(await M("loading Quiz Battle private room state",s(a),2e4)).data}catch(r){if(H(r))return{success:!0,room:at(a.roomCode?.trim().toUpperCase()||void 0)};throw new Error(Q("loading Quiz Battle private room state",r))}},Pa=async(a={})=>{const s=R(B,"quizBattleLeavePrivateRoom");try{return(await M("leaving Quiz Battle private room",s(a),2e4)).data}catch(r){if(H(r))return{success:!0,status:"idle"};throw new Error(Q("leaving Quiz Battle private room",r))}},St=async()=>{const a=R(B,"quizBattleResumeSession");try{return(await M("resuming Quiz Battle session",a({}),2e4)).data}catch(s){if(H(s))return{success:!0,sessionType:"idle"};throw new Error(Q("resuming Quiz Battle session",s))}},_a=async(a,s)=>{if(!s.trim())return;const r=R(B,"quizBattleHeartbeat");await Ca(a,s);try{await M("sending Quiz Battle heartbeat",r({scope:a,resourceId:s}),12e3)}catch(c){if(!H(c))throw new Error(Q("sending Quiz Battle heartbeat",c))}},Da=async a=>{const s=R(B,"quizBattleCreateBotMatch");try{return(await M("starting Quiz Battle bot match",s({setup:a}))).data}catch(r){if(H(r))return Na(a);throw new Error(Q("starting Quiz Battle bot match",r))}},La=async a=>{const s=R(B,"quizBattleGetGenerationAudit");return(await M("verifying Quiz Battle generation metadata",s({matchId:a}),2e4)).data},W=async a=>{const s=R(B,"quizBattleStartMatch");try{const c=(await M("starting Quiz Battle match",s({matchId:a}),2e4)).data.match;if(c.mode==="online")try{const i=await La(a);if(console.info("[QUIZ_BATTLE_GENERATION_AUDIT]",i),Nt&&!i.isAiSource)throw new Error(`Quiz Battle generation audit failed: expected AI source, got "${i.questionSetSource||"unknown"}".`)}catch(i){if(i instanceof Error&&i.message.startsWith("Quiz Battle generation audit failed"))throw i;if(console.warn("Quiz Battle generation audit unavailable:",i),Nt)throw new Error("Unable to verify Quiz Battle generation metadata. Please retry in a moment.")}return c}catch(r){throw new Error(Q("starting Quiz Battle match",r))}},Je=async a=>{const s=R(B,"quizBattleGetMatchState");try{return(await M("loading Quiz Battle match state",s({matchId:a}),2e4)).data.match}catch(r){throw new Error(Q("loading Quiz Battle match state",r))}},$a=async a=>{const s=R(B,"quizBattleSubmitAnswer");try{return(await M("submitting Quiz Battle answer",s({...a,idempotencyKey:a.idempotencyKey||`client-${Date.now()}-${Math.random().toString(16).slice(2,8)}`}),2e4)).data}catch(r){throw new Error(Q("submitting Quiz Battle answer",r))}},Fa=async a=>{const s=R(B,"quizBattleRequestRematch");try{return(await M("creating Quiz Battle rematch",s({matchId:a}),2e4)).data}catch(r){throw new Error(Q("creating Quiz Battle rematch",r))}},Oa=async(a=20)=>{try{const s=Ze(Xe(Qe,"studentBattleLeaderboard"),Rt("leaderboardScore","desc"),Ye(a));return(await Ke(s)).docs.map((c,i)=>{const d=c.data();return{userId:d.userId||c.id,displayName:d.displayName||"Student",photo:d.photo,rank:d.rank||i+1,leaderboardScore:d.leaderboardScore||0,winRate:d.winRate||0,bestStreak:d.bestStreak||0}})}catch(s){return console.error("Error loading Quiz Battle leaderboard:",s),[]}};function _({className:a,...s}){return e.jsx("div",{"data-slot":"card",className:h("bg-card text-card-foreground flex flex-col gap-6 rounded-xl border",a),...s})}function F({className:a,...s}){return e.jsx("div",{"data-slot":"card-header",className:h("@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-1.5 px-6 pt-6 has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-6",a),...s})}function O({className:a,...s}){return e.jsx("h4",{"data-slot":"card-title",className:h("leading-none",a),...s})}function V({className:a,...s}){return e.jsx("p",{"data-slot":"card-description",className:h("text-muted-foreground",a),...s})}function ee({className:a,...s}){return e.jsx("div",{"data-slot":"card-content",className:h("px-6 [&:last-child]:pb-6",a),...s})}function Ua({className:a,...s}){return e.jsx(sa,{"data-slot":"tabs",className:h("flex flex-col gap-2",a),...s})}function Wa({className:a,...s}){return e.jsx(ra,{"data-slot":"tabs-list",className:h("bg-muted text-muted-foreground inline-flex h-9 w-fit items-center justify-center rounded-xl p-[3px] flex",a),...s})}function xe({className:a,...s}){return e.jsx(oa,{"data-slot":"tabs-trigger",className:h("data-[state=active]:bg-card dark:data-[state=active]:text-foreground focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:outline-ring dark:data-[state=active]:border-input dark:data-[state=active]:bg-input/30 text-foreground dark:text-muted-foreground inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-xl border border-transparent px-2 py-1 text-sm font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:ring-[3px] focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",a),...s})}function fe({className:a,...s}){return e.jsx(na,{"data-slot":"tabs-content",className:h("flex-1 outline-none",a),...s})}function Va({...a}){return e.jsx(da,{"data-slot":"collapsible",...a})}function Ha({...a}){return e.jsx(ia,{"data-slot":"collapsible-trigger",...a})}function Ga({...a}){return e.jsx(ca,{"data-slot":"collapsible-content",...a})}const D="border border-border bg-card text-card-foreground shadow-sm dark:border-[#2b3140] dark:bg-[#181d27] dark:text-[#f5f7fb] dark:shadow-[0_12px_24px_rgba(0,0,0,0.22)]",Ct=a=>a<=0?"--":`${(a/1e3).toFixed(2)}s`,It=a=>a==="win"?"Win":a==="loss"?"Loss":"Draw",Ja=(a,s,r)=>Math.max(s,Math.min(r,a)),Ya=a=>{const s=Math.floor(a/60),r=a%60;return`${s}:${String(r).padStart(2,"0")}`},Ka=a=>{const s=a.trim().split(/\s+/).filter(Boolean).slice(0,2);return s.length===0?"ST":s.map(r=>r[0]?.toUpperCase()||"").join("")},Bt=(a,s)=>a?a.eventType==="round_started"?`Round ${a.roundNumber} started.`:a.eventType==="answer_locked"?a.lockedByStudentId&&s&&a.lockedByStudentId===s?`Round ${a.roundNumber}: your answer is locked.`:`Round ${a.roundNumber}: opponent answer locked.`:a.eventType==="round_result"?`Round ${a.roundNumber} resolved.`:"Match completed.":null,Cs=()=>{const{userProfile:a,userRole:s}=Jt(),r=a,[c,i]=l.useState("hub"),[d,g]=l.useState(Ba),[C,y]=l.useState([]),[S,he]=l.useState(!1),[z,b]=l.useState({status:"idle"}),[A,j]=l.useState(!1),[m,w]=l.useState(null),[De,ge]=l.useState(""),[Ne,st]=l.useState(null),[rt,oe]=l.useState(0),[G,ot]=l.useState(()=>typeof window>"u"?!0:window.localStorage.getItem("quiz_battle_sound_enabled")!=="0"),[_t,v]=l.useState("connected"),[ne,Dt]=l.useState("all"),[nt,Le]=l.useState(!0),[J,$e]=l.useState(null),[Fe,Oe]=l.useState([]),[Lt,dt]=l.useState(!1),[it,$t]=l.useState([]),[Se,Ft]=l.useState("alias"),[Ue,Ot]=l.useState(!1),[o,k]=l.useState(null),[Ce,L]=l.useState(null),[Y,ye]=l.useState(!1),[E,je]=l.useState(0),[U,$]=l.useState(!1),[Ie,te]=l.useState(null),ct=l.useRef(""),We=l.useRef(null),de=l.useRef(null),K=l.useRef(0),lt=l.useRef(""),we=l.useRef(0),Z=l.useMemo(()=>{const t=Zt(r?.grade);return Xt.filter(n=>t.includes(n.id))},[r?.grade]),Ut=l.useMemo(()=>(Z.find(n=>n.id===d.subjectId)?.modules||[]).map(n=>({value:n.id,label:n.title})),[Z,d.subjectId]),ae=l.useCallback(t=>{if(!G||typeof window>"u")return;const n=window.AudioContext||window.webkitAudioContext;if(n)try{const f=new n,u=f.createOscillator(),p=f.createGain(),x={tick:{frequency:740,duration:.06,type:"triangle",volume:.035},lock:{frequency:520,duration:.08,type:"square",volume:.04},result:{frequency:660,duration:.1,type:"sine",volume:.045},win:{frequency:920,duration:.18,type:"triangle",volume:.05},loss:{frequency:240,duration:.16,type:"sawtooth",volume:.045}}[t],N=f.currentTime;u.type=x.type,u.frequency.setValueAtTime(x.frequency,N),p.gain.setValueAtTime(1e-4,N),p.gain.exponentialRampToValueAtTime(x.volume,N+.015),p.gain.exponentialRampToValueAtTime(1e-4,N+x.duration),u.connect(p),p.connect(f.destination),u.start(N),u.stop(N+x.duration+.02),window.setTimeout(()=>{f.close()},Math.ceil((x.duration+.06)*1e3))}catch(f){console.debug("Battle tone playback skipped:",f)}},[G]),ut=l.useCallback(async t=>{if(!(!t||typeof window>"u"))try{await window.navigator.clipboard.writeText(t),st(t),window.setTimeout(()=>{st(n=>n===t?null:n)},1600)}catch{b({status:"error",message:"Unable to copy room code automatically. Please copy it manually."})}},[]),ie=l.useCallback(async()=>{if(!r?.uid)return null;const[t,n]=await Promise.all([Ma(r.uid),Aa(r.uid,{mode:ne,limitCount:8})]);return{stats:t,history:n}},[ne,r?.uid]);l.useEffect(()=>{if(Z.length===0)return;const n=Z.some(p=>p.id===d.subjectId)?d.subjectId:Z[0].id,f=Z.find(p=>p.id===n),u=f?.modules?.[0]?.id||"";g(p=>{const T=f?.modules?.some(x=>x.id===p.topicId)?p.topicId:u;return p.subjectId===n&&p.topicId===T?p:{...p,subjectId:n,topicId:T}})},[Z,d.subjectId]),l.useEffect(()=>{if(!r?.uid){$e(null),Oe([]),Le(!1);return}let t=!0;return Le(!0),(async()=>{const f=await ie();t&&(f&&($e(f.stats),Oe(f.history)),Le(!1))})(),()=>{t=!1}},[ie,r?.uid]);const Be=l.useMemo(()=>ne==="all"?Fe:Fe.filter(t=>t.mode===ne),[Fe,ne]),mt=l.useMemo(()=>it.map((t,n)=>{const f=t.rank||n+1,u=t.userId===r?.uid,p=`Student-${t.userId.slice(-4).toUpperCase()}`,T=Se==="full"?t.displayName:Se==="initials"?Ka(t.displayName):p,x=Math.floor(t.leaderboardScore/25)*25,N=Ue||u?`${t.leaderboardScore} pts`:`${x}-${x+24} pts`;return{...t,rank:f,isSelf:u,displayName:T,scoreLabel:N}}),[it,Se,Ue,r?.uid]);l.useEffect(()=>{if(c!=="leaderboard")return;let t=!0;return dt(!0),(async()=>{const f=await Oa(20);t&&($t(f),dt(!1))})(),()=>{t=!1}},[c]);const Re=l.useCallback(async()=>{if(r?.uid)try{const t=await St();if(t.sessionType==="match"&&t.match){let n=t.match;if(t.match.mode==="bot"&&t.match.status==="ready")try{n=await W(t.match.matchId),we.current=0}catch(f){const u=f;j(!1),w(null),k(null),i("setup"),v(typeof window<"u"&&window.navigator.onLine?"connected":"disconnected"),b({status:"error",message:u?.message||"Unable to resume bot battle. Please start a new match."});return}j(!1),w(t.room||null),k(n),i("battle"),v("connected");return}if(t.sessionType==="room"&&t.room){j(!1),w(t.room),k(n=>n?.mode==="bot"?n:null),v("connected");return}if(t.sessionType==="queue"){j(!0),w(null),k(n=>n?.mode==="bot"?n:null),v("connected");return}j(!1),w(null),k(n=>n?.mode==="bot"?n:null),v("connected")}catch(t){console.warn("Quiz Battle session resume failed:",t),v("reconnecting")}},[r?.uid]);l.useEffect(()=>{r?.uid&&Re()},[r?.uid,Re]),l.useEffect(()=>{typeof window>"u"||window.localStorage.setItem("quiz_battle_sound_enabled",G?"1":"0")},[G]),l.useEffect(()=>{if(!(A||m&&(m.status==="waiting"||m.status==="ready"))){oe(0);return}const t=window.setInterval(()=>{oe(n=>n+1)},1e3);return()=>{window.clearInterval(t)}},[A,m?.status,m?.roomId]),l.useEffect(()=>{if(typeof window>"u")return;v(window.navigator.onLine?"connected":"disconnected");const t=()=>{v("reconnecting"),Re()},n=()=>{v("disconnected")};return window.addEventListener("online",t),window.addEventListener("offline",n),()=>{window.removeEventListener("online",t),window.removeEventListener("offline",n)}},[Re]),l.useEffect(()=>{const t=o?.mode==="online"&&(o.status==="ready"||o.status==="in_progress"),n=o?.mode==="bot"&&o.status==="ready",f=!!(m&&(m.status==="waiting"||m.status==="ready"));if(n||(we.current=0),!A&&!f&&!t&&!n)return;let u=!1;const p=async()=>{try{if(o?.mode==="bot"&&o.status==="ready"){const x=await W(o.matchId);if(u)return;k(x),v("connected"),we.current=0,x.status==="in_progress"&&b({status:"queued",message:"Practice bot match started."});return}if(o?.mode==="online"){if(o.status==="ready"){const N=await W(o.matchId);if(u)return;k(N),v("connected"),N.status==="in_progress"&&b({status:"queued",message:"Match started. Round timer is live."});return}const x=await Je(o.matchId);if(u)return;k(x),x.status==="completed"&&(j(!1),w(null)),v("connected");return}if(m?.roomId){const x=await Ea({roomId:m.roomId});if(u)return;if(w(x.room),x.match){const N=await W(x.match.matchId);if(u)return;k(N),w(x.room),j(!1),i("battle"),v("connected"),b({status:"queued",message:N.status==="ready"?"Opponent connected. Waiting for synchronized start...":"Private room match started."})}return}if(A){const x=await St();if(u)return;if(x.sessionType==="match"&&x.match){const N=await W(x.match.matchId);if(u)return;k(N),w(x.room||null),j(!1),i("battle"),v("connected"),b({status:"queued",message:"Opponent found. Preparing synchronized start..."});return}if(x.sessionType==="room"&&x.room){j(!1),w(x.room),v("connected");return}v("connected")}}catch(x){if(!u){if(console.warn("Quiz Battle sync poll failed:",x),o?.mode==="bot"&&o.status==="ready"&&(we.current+=1,we.current>=3)){const N=x;j(!1),w(null),k(null),i("setup"),b({status:"error",message:N?.message||"Unable to start bot battle. Please try again."}),v("disconnected");return}v("reconnecting")}}};p();const T=window.setInterval(()=>{p()},3e3);return()=>{u=!0,window.clearInterval(T)}},[o?.matchId,o?.mode,o?.status,m?.roomId,m?.status,A]);const se=l.useMemo(()=>o?.mode==="online"&&(o.status==="ready"||o.status==="in_progress")?{scope:"match",resourceId:o.matchId}:m&&(m.status==="waiting"||m.status==="ready")?{scope:"room",resourceId:m.roomId}:A&&r?.uid?{scope:"queue",resourceId:r.uid}:null,[o,m,A,r?.uid]);l.useEffect(()=>{if(!se)return;let t=!1;const n=async()=>{try{await _a(se.scope,se.resourceId),t||v("connected")}catch(u){t||(console.warn("Quiz Battle heartbeat failed:",u),v("reconnecting"))}};n();const f=window.setInterval(()=>{n()},8e3);return()=>{t=!0,window.clearInterval(f),Ia(se.scope,se.resourceId)}},[se?.scope,se?.resourceId]),l.useEffect(()=>{if(!o||o.status!=="in_progress"){$(!1),de.current=null,K.current=0;return}de.current=null,K.current=0;const t=o.roundDeadlineAtMs?Math.max(0,Math.ceil((o.roundDeadlineAtMs-Date.now())/1e3)):o.timePerQuestionSec;je(t),L(null),$(!1)},[o?.matchId,o?.status,o?.currentRound,o?.timePerQuestionSec]),l.useEffect(()=>{const t=o?.lifecycle;if(!t?.eventType)return;const n=`${t.eventType}:${t.sequence}`;ct.current!==n&&(ct.current=n,t.eventType==="answer_locked"?ae("lock"):t.eventType==="round_result"&&ae("result"))},[o?.lifecycle?.eventType,o?.lifecycle?.sequence,ae]),l.useEffect(()=>{!o||o.status!=="completed"||lt.current!==o.matchId&&(lt.current=o.matchId,ae(o.outcome==="loss"?"loss":"win"),o.outcome==="win"&&Yt(()=>import("./confetti.module-C94ZD2ww.js"),[]).then(t=>{t.default({particleCount:110,spread:78,origin:{y:.62},ticks:160})}).catch(()=>{}))},[o?.matchId,o?.status,o?.outcome,ae]),l.useEffect(()=>{if(!o||o.status!=="in_progress"||U||Y){We.current=null;return}E<=3&&E>0&&We.current!==E&&(We.current=E,ae("tick"))},[o?.status,E,U,Y,ae]);const Ve=l.useCallback(async t=>{if(!o||o.status!=="in_progress"||U)return;ye(!0);const n=window.setTimeout(()=>{ye(!1),b({status:"error",message:"Submission took too long. Syncing latest match state now..."}),Je(o.matchId).then(f=>{k(f),f.status==="completed"&&(j(!1),w(null))}).catch(()=>{})},12e3);try{const f=o.roundDeadlineAtMs?Ja(o.timePerQuestionSec*1e3-Math.max(0,o.roundDeadlineAtMs-Date.now()),0,o.timePerQuestionSec*1e3):Math.max(0,(o.timePerQuestionSec-E)*1e3),u=await $a({matchId:o.matchId,roundNumber:o.currentRound,selectedOptionIndex:t,responseMs:f});de.current=null,K.current=0,k(u.match),te(u.roundResult),L(null),u.match.mode==="online"&&u.match.status==="in_progress"&&!u.roundResult&&($(!0),b({status:"queued",message:"Answer locked. Waiting for opponent to finish the round..."})),u.match.status==="completed"&&(j(!1),w(null),ie(),b({status:"queued",message:u.completion?`Match finished (${u.completion.outcome.toUpperCase()}) +${u.completion.xpEarned} XP`:"Match finished. Results saved."}))}catch(f){const p=f?.message||"Unable to submit answer right now. Please try again.";if(t===null||p.includes("Round timer elapsed")||p.includes("Expected round")||p.includes("Match is not currently active"))try{const x=await Je(o.matchId),N=x.currentRound!==o.currentRound;if(k(x),L(null),$(!1),N||x.status==="completed"?(de.current=null,K.current=0):t===null&&(K.current=Date.now()+3e3),x.status==="completed"){j(!1),w(null),ie(),b({status:"queued",message:"Match finished. Results synchronized."});return}b({status:"queued",message:"Round timed out. Synced to the latest battle state."});return}catch{}t===null&&(K.current=Date.now()+3e3),b({status:"error",message:p})}finally{window.clearTimeout(n),ye(!1)}},[o,ie,U,E]);l.useEffect(()=>{if(!o||o.status!=="in_progress"||Y||U)return;const t=o.roundDeadlineAtMs?Math.max(0,Math.ceil((o.roundDeadlineAtMs-Date.now())/1e3)):E;if(o.roundDeadlineAtMs&&t!==E&&je(t),Ce===null?t<=1:t<=0){if(de.current===o.currentRound&&Date.now()<K.current)return;de.current=o.currentRound,K.current=Date.now()+3e3,Ve(null);return}const f=window.setTimeout(()=>{o.roundDeadlineAtMs?je(Math.max(0,Math.ceil((o.roundDeadlineAtMs-Date.now())/1e3))):je(u=>Math.max(0,u-1))},1e3);return()=>{window.clearTimeout(f)}},[o,Y,U,E,Ce,Ve]);const Wt=l.useCallback(async()=>{if(!(!o||o.mode!=="bot")){ye(!0),b({status:"validating"});try{const t=await Fa(o.matchId),n=await W(t.matchId);k(n),w(null),j(!1),te(null),L(null),$(!1),i("battle"),b({status:"queued",message:`Rematch ready (${t.botDifficulty}). Good luck!`})}catch(t){b({status:"error",message:t?.message||"Unable to start rematch right now."})}finally{ye(!1)}}},[o]);if(s!=="student")return e.jsx("div",{className:"px-4 sm:px-6 xl:px-10 py-6 sm:py-8",children:e.jsx(_,{className:h(D,"max-w-2xl"),children:e.jsxs(F,{children:[e.jsx(O,{children:"Quiz Battle is student-only"}),e.jsx(V,{className:"text-muted-foreground dark:text-[#aab3c7]",children:"Your account role does not have access to this module."})]})})});const xt=t=>{y([]),b({status:"idle"}),j(!1),w(null),ge(""),k(null),te(null),L(null),$(!1),g(n=>({...n,mode:t,queueType:t==="online"?n.queueType:"public_matchmaking"})),oe(0),i("setup")},ft=t=>{y([]),b({status:"idle"}),j(!1),w(null),ge(""),k(null),te(null),L(null),$(!1),oe(0),g(n=>({...n,mode:t,queueType:t==="online"?n.queueType:"public_matchmaking"}))},bt=async()=>{b({status:"validating"});try{m?.roomId?await Pa({roomId:m.roomId}):await Qa(),j(!1),w(null),k(t=>!t||t.mode!=="online"?t:t.status==="ready"||t.status==="cancelled"?null:t),ge(""),oe(0),b({status:"queued",message:m?.roomId?"Private room cancelled.":"Left matchmaking queue."})}catch(t){b({status:"error",message:t?.message||"Unable to cancel this online session right now. Please try again."})}},Vt=async()=>{b({status:"validating"});const t=Ra(d);if(t.length>0){y(t),b({status:"error",message:"Fix the highlighted setup fields before starting."});return}y([]);try{if(d.mode==="online"){if(d.queueType==="private_room"){const p=De.trim().toUpperCase(),T=p?await za(p):await qa(d);if(j(!1),w(T.room),ge(""),T.match){const x=await W(T.match.matchId);k(x),te(null),L(null),$(!1),i("battle"),b({status:"queued",message:x.status==="ready"?`Room ${T.room.roomCode} linked. Waiting for synchronized start...`:"Private room match started."});return}k(null),b({status:"queued",message:p?"Joined private room. Waiting for opponent...":"Private room created. Share code:"});return}const u=await Ta(d);if(u.status==="matched"&&u.matchId){const p=await W(u.matchId);j(!1),w(null),k(p),te(null),L(null),$(!1),i("battle"),b({status:"queued",message:"Opponent found. Preparing synchronized start..."});return}j(!0),w(null),k(null),oe(0),b({status:"queued",message:"Joined matchmaking queue. Waiting for an opponent..."});return}const n=await Da(d),f=await W(n.matchId);j(!1),w(null),k(f),te(null),L(null),$(!1),je(f.timePerQuestionSec),i("battle"),b({status:"queued",message:`Bot match ${n.matchId.slice(0,8)} live (${n.botDifficulty}).`}),ie().then(u=>{u&&($e(u.stats),Oe(u.history))})}catch(n){j(!1),b({status:"error",message:n?.message||"Unable to start battle. Please try again."})}},q=t=>C.find(n=>n.field===t)?.message,Ht=J?.winRate??0,pt=!!(d.mode==="online"&&m&&(m.status==="waiting"||m.status==="ready")&&(!o||o.status!=="completed")),Gt=!!(A||m&&(m.status==="waiting"||m.status==="ready")&&(!o||o.status==="ready"||o.status==="cancelled"));return e.jsx("div",{className:"h-full flex flex-col px-4 sm:px-6 xl:px-10 py-6 sm:py-8",children:e.jsxs(re.div,{initial:{opacity:0,y:16},animate:{opacity:1,y:0},transition:{duration:.24,ease:[.22,1,.36,1]},className:"space-y-6",children:[e.jsxs(_,{className:h(D,"relative overflow-hidden rounded-[20px]"),children:[e.jsx("div",{className:"pointer-events-none absolute inset-0 bg-gradient-to-br from-primary/8 via-primary/4 to-transparent dark:bg-[radial-gradient(circle_at_15%_15%,rgba(140,125,255,0.28),transparent_45%),radial-gradient(circle_at_85%_20%,rgba(121,79,255,0.17),transparent_40%)]"}),e.jsxs(F,{className:"relative z-10 pb-4",children:[e.jsxs(O,{className:"flex items-center gap-2 text-2xl font-black tracking-tight text-foreground dark:text-[#f5f7fb]",children:[e.jsx(jt,{className:"h-5 w-5 text-primary dark:text-[#9e8fff]"}),"Quiz Battle"]}),e.jsx(V,{className:"text-muted-foreground dark:text-[#c4cce0]",children:"Timed student duels with synchronized rounds, instant feedback, and progression rewards."}),e.jsxs("p",{className:"text-xs font-semibold uppercase tracking-wide text-muted-foreground dark:text-[#9ea8c2]",children:["Connection: ",_t]})]}),e.jsxs(ee,{className:"relative z-10 grid grid-cols-2 md:grid-cols-4 gap-3 pb-6",children:[e.jsxs("div",{className:"rounded-2xl border border-border bg-muted/50 p-3 dark:border-[#30374a] dark:bg-[#11151d]",children:[e.jsx("p",{className:"text-xs text-muted-foreground dark:text-[#9da7bf]",children:"Win Rate"}),e.jsxs("p",{className:"tabular-nums text-lg font-bold text-foreground dark:text-[#f5f7fb]",children:[Ht.toFixed(1),"%"]})]}),e.jsxs("div",{className:"rounded-2xl border border-border bg-muted/50 p-3 dark:border-[#30374a] dark:bg-[#11151d]",children:[e.jsx("p",{className:"text-xs text-muted-foreground dark:text-[#9da7bf]",children:"Matches"}),e.jsx("p",{className:"tabular-nums text-lg font-bold text-foreground dark:text-[#f5f7fb]",children:J?.matchesPlayed||0})]}),e.jsxs("div",{className:"rounded-2xl border border-border bg-muted/50 p-3 dark:border-[#30374a] dark:bg-[#11151d]",children:[e.jsx("p",{className:"text-xs text-muted-foreground dark:text-[#9da7bf]",children:"Best Streak"}),e.jsx("p",{className:"tabular-nums text-lg font-bold text-foreground dark:text-[#f5f7fb]",children:J?.bestStreak||0})]}),e.jsxs("div",{className:"rounded-2xl border border-border bg-muted/50 p-3 dark:border-[#30374a] dark:bg-[#11151d]",children:[e.jsx("p",{className:"text-xs text-muted-foreground dark:text-[#9da7bf]",children:"Avg Response"}),e.jsx("p",{className:"tabular-nums text-lg font-bold text-foreground dark:text-[#f5f7fb]",children:Ct(J?.averageResponseMs||0)})]})]})]}),e.jsxs(Ua,{value:c,onValueChange:t=>i(t),children:[e.jsxs(Wa,{className:"w-full md:w-auto rounded-2xl p-1.5",children:[e.jsx(xe,{value:"hub",className:"rounded-xl",children:"Hub"}),e.jsx(xe,{value:"setup",className:"rounded-xl",children:"Setup"}),e.jsx(xe,{value:"battle",className:"rounded-xl",children:"Battle"}),e.jsx(xe,{value:"history",className:"rounded-xl",children:"History"}),e.jsx(xe,{value:"stats",className:"rounded-xl",children:"My Stats"}),e.jsx(xe,{value:"leaderboard",className:"rounded-xl",children:"Leaderboard"})]}),e.jsx(fe,{value:"hub",className:"mt-5",children:e.jsxs(re.div,{initial:{opacity:0,y:12},animate:{opacity:1,y:0},exit:{opacity:0,y:-12},className:"space-y-5",children:[e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[e.jsxs("button",{type:"button",onClick:()=>xt("online"),className:"text-left rounded-[18px] border border-border bg-card p-5 transition-colors hover:border-primary/60 hover:bg-accent/40 dark:border-[#333a4e] dark:bg-[#171d2a] dark:hover:border-[#8c7dff] dark:hover:bg-[#202736]",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{className:"flex items-center gap-2 text-foreground dark:text-[#f5f7fb] font-semibold",children:[e.jsx(Ae,{className:"h-4 w-4 text-primary dark:text-[#9e8fff]"}),"1v1 Online"]}),e.jsx(He,{className:"h-4 w-4 text-muted-foreground dark:text-[#a2abc2]"})]}),e.jsx("p",{className:"mt-2 text-sm text-muted-foreground dark:text-[#b3bdd5]",children:"Queue or room-code match with another student."})]}),e.jsxs("button",{type:"button",onClick:()=>xt("bot"),className:"text-left rounded-[18px] border border-border bg-card p-5 transition-colors hover:border-primary/60 hover:bg-accent/40 dark:border-[#333a4e] dark:bg-[#171d2a] dark:hover:border-[#8c7dff] dark:hover:bg-[#202736]",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{className:"flex items-center gap-2 text-foreground dark:text-[#f5f7fb] font-semibold",children:[e.jsx(ht,{className:"h-4 w-4 text-primary dark:text-[#9e8fff]"}),"1v1 vs Bot"]}),e.jsx(He,{className:"h-4 w-4 text-muted-foreground dark:text-[#a2abc2]"})]}),e.jsx("p",{className:"mt-2 text-sm text-muted-foreground dark:text-[#b3bdd5]",children:"Instant solo duel with selectable bot difficulty."})]})]}),e.jsxs(_,{className:h(D,"rounded-[18px]"),children:[e.jsx(F,{children:e.jsxs(O,{className:"text-base flex items-center gap-2",children:[e.jsx(ga,{className:"h-4 w-4 text-primary dark:text-[#9e8fff]"})," Recent Matches"]})}),e.jsx(ee,{className:"space-y-2",children:nt?e.jsxs("div",{className:"space-y-2",children:[e.jsx(X,{className:"h-12 w-full rounded-xl bg-muted dark:bg-[#2a3143]"}),e.jsx(X,{className:"h-12 w-full rounded-xl bg-muted dark:bg-[#2a3143]"}),e.jsx(X,{className:"h-12 w-full rounded-xl bg-muted dark:bg-[#2a3143]"})]}):Be.length===0?e.jsx("p",{className:"text-sm text-muted-foreground dark:text-[#a8b2c9]",children:"No battle history yet. Start your first duel."}):Be.slice(0,5).map(t=>e.jsxs("div",{className:"rounded-xl border border-border bg-muted/40 px-3 py-2 flex items-center justify-between dark:border-[#2f3547] dark:bg-[#11151d]",children:[e.jsxs("div",{children:[e.jsxs("p",{className:"text-sm font-semibold text-foreground dark:text-[#f5f7fb]",children:["vs ",t.opponentName]}),e.jsxs("p",{className:"text-xs text-muted-foreground dark:text-[#95a0bb]",children:[t.subjectId," Β· ",t.difficulty]})]}),e.jsxs("div",{className:"text-right",children:[e.jsxs("p",{className:"tabular-nums text-sm font-semibold text-foreground dark:text-[#f5f7fb]",children:[t.scoreFor," - ",t.scoreAgainst]}),e.jsx("p",{className:h("inline-flex items-center rounded-full px-2 py-0.5 text-xs font-medium",t.outcome==="win"?"bg-emerald-100 text-emerald-800 dark:bg-emerald-500/15 dark:text-emerald-300":t.outcome==="loss"?"bg-rose-100 text-rose-800 dark:bg-rose-500/15 dark:text-rose-300":"bg-amber-100 text-amber-800 dark:bg-amber-500/15 dark:text-amber-300"),children:It(t.outcome)})]})]},t.matchId))})]})]},"hub")}),e.jsx(fe,{value:"setup",className:"mt-5",children:e.jsx(re.div,{initial:{opacity:0,y:12},animate:{opacity:1,y:0},exit:{opacity:0,y:-12},className:"space-y-4",children:e.jsxs(_,{className:h(D,"rounded-[18px]"),children:[e.jsxs(F,{children:[e.jsxs(O,{className:"text-base flex items-center gap-2",children:[e.jsx(ua,{className:"h-4 w-4 text-primary dark:text-[#9e8fff]"})," Battle Setup"]}),e.jsx(V,{className:"text-muted-foreground dark:text-[#b2bad0]",children:"Configure a student-safe match and start quickly."})]}),e.jsxs(ee,{className:"space-y-4",children:[e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-3",children:[e.jsxs("div",{className:"space-y-1.5",children:[e.jsx("label",{className:"text-xs font-semibold text-foreground dark:text-[#c7cfe3]",children:"Mode"}),e.jsxs("div",{className:"grid grid-cols-2 gap-2",children:[e.jsx(I,{type:"button",variant:d.mode==="online"?"default":"outline",onClick:()=>ft("online"),className:"h-10 rounded-xl",children:"1v1 Online"}),e.jsx(I,{type:"button",variant:d.mode==="bot"?"default":"outline",onClick:()=>ft("bot"),className:"h-10 rounded-xl",children:"1v1 vs Bot"})]})]}),e.jsxs("div",{className:"space-y-1.5",children:[e.jsx("label",{className:"text-xs font-semibold text-foreground dark:text-[#c7cfe3]",children:"Category"}),e.jsxs(ce,{value:d.subjectId,onValueChange:t=>g(n=>({...n,subjectId:t})),children:[e.jsx(le,{className:h("rounded-xl",q("subjectId")&&"border-rose-400"),children:e.jsx(ue,{placeholder:"Select category"})}),e.jsx(me,{children:Z.map(t=>e.jsx(P,{value:t.id,children:t.title},t.id))})]}),q("subjectId")&&e.jsx("p",{className:"text-xs text-destructive dark:text-rose-300",children:q("subjectId")})]}),e.jsxs("div",{className:"space-y-1.5",children:[e.jsx("label",{className:"text-xs font-semibold text-foreground dark:text-[#c7cfe3]",children:"Strand / Topic Group"}),e.jsxs(ce,{value:d.topicId,onValueChange:t=>g(n=>({...n,topicId:t})),children:[e.jsx(le,{className:h("rounded-xl",q("topicId")&&"border-rose-400"),children:e.jsx(ue,{placeholder:"Select topic group"})}),e.jsx(me,{children:Ut.map(t=>e.jsx(P,{value:t.value,children:t.label},t.value))})]}),q("topicId")&&e.jsx("p",{className:"text-xs text-destructive dark:text-rose-300",children:q("topicId")})]}),e.jsxs("div",{className:"space-y-1.5",children:[e.jsx("label",{className:"text-xs font-semibold text-foreground dark:text-[#c7cfe3]",children:"Difficulty"}),e.jsxs(ce,{value:d.mode==="bot"?d.botDifficulty:d.difficulty,onValueChange:t=>g(n=>n.mode==="bot"?{...n,botDifficulty:t}:{...n,difficulty:t}),children:[e.jsx(le,{className:"rounded-xl",children:e.jsx(ue,{})}),e.jsxs(me,{children:[e.jsx(P,{value:"easy",children:"Easy"}),e.jsx(P,{value:"medium",children:"Medium"}),e.jsx(P,{value:"hard",children:"Hard"}),d.mode==="bot"&&e.jsx(P,{value:"adaptive",children:"Adaptive"})]})]})]}),e.jsxs("div",{className:"space-y-1.5",children:[e.jsx("label",{className:"text-xs font-semibold text-foreground dark:text-[#c7cfe3]",children:"Number of Questions"}),e.jsxs(ce,{value:String(d.rounds),onValueChange:t=>g(n=>({...n,rounds:Number(t)})),children:[e.jsx(le,{className:h("rounded-xl",q("rounds")&&"border-rose-400"),children:e.jsx(ue,{})}),e.jsx(me,{children:[3,5,7,10,12,15].map(t=>e.jsx(P,{value:String(t),children:t},t))})]}),q("rounds")&&e.jsx("p",{className:"text-xs text-destructive dark:text-rose-300",children:q("rounds")})]}),e.jsxs("div",{className:"space-y-1.5",children:[e.jsx("label",{className:"text-xs font-semibold text-foreground dark:text-[#c7cfe3]",children:"Time per Question"}),e.jsxs(ce,{value:String(d.timePerQuestionSec),onValueChange:t=>g(n=>({...n,timePerQuestionSec:Number(t)})),children:[e.jsx(le,{className:h("rounded-xl",q("timePerQuestionSec")&&"border-rose-400"),children:e.jsx(ue,{})}),e.jsx(me,{children:[15,20,30,45,60,90].map(t=>e.jsxs(P,{value:String(t),children:[t," sec"]},t))})]}),q("timePerQuestionSec")&&e.jsx("p",{className:"text-xs text-destructive dark:text-rose-300",children:q("timePerQuestionSec")})]})]}),e.jsxs(Va,{open:S,onOpenChange:he,children:[e.jsx(Ha,{asChild:!0,children:e.jsxs(I,{type:"button",variant:"outline",className:"w-full justify-between rounded-xl",children:["Advanced settings",e.jsx(He,{className:h("h-4 w-4 transition-transform",S&&"rotate-90")})]})}),e.jsxs(Ga,{className:"mt-3 rounded-xl border border-border bg-muted/40 p-3 space-y-3 dark:border-[#2e364a] dark:bg-[#11151d]",children:[d.mode==="online"?e.jsxs("div",{className:"space-y-3",children:[e.jsx("label",{className:"text-xs font-semibold text-foreground dark:text-[#c7cfe3]",children:"Online Match Type"}),e.jsx("div",{className:"grid grid-cols-2 gap-2",children:[{value:"public_matchmaking",label:"Public Queue"},{value:"private_room",label:"Private Room"}].map(t=>e.jsx(I,{type:"button",variant:d.queueType===t.value?"default":"outline",className:"rounded-xl h-9",onClick:()=>g(n=>({...n,queueType:t.value})),children:t.label},t.value))}),d.queueType==="private_room"&&e.jsxs("div",{className:"space-y-2",children:[e.jsx("label",{className:"text-xs font-semibold text-foreground dark:text-[#c7cfe3]",children:"Room Code (optional)"}),e.jsx(la,{value:De,onChange:t=>ge(t.target.value.toUpperCase().replace(/[^A-Z0-9]/g,"").slice(0,6)),placeholder:"Leave blank to create a room",className:"rounded-xl uppercase tracking-[0.15em]",maxLength:6}),e.jsx("div",{className:"rounded-xl border border-amber-300 bg-amber-50 px-3 py-2.5 text-[13px] font-semibold text-amber-900 dark:border-amber-500/40 dark:bg-amber-500/10 dark:text-amber-200",children:"Enter a room code to join an existing battle, or leave it blank to create a new room and share your code."})]})]}):e.jsxs(e.Fragment,{children:[e.jsxs("label",{className:"flex items-center justify-between rounded-xl border border-border bg-card p-3 dark:border-[#2f3547] dark:bg-[#171d2a]",children:[e.jsxs("div",{children:[e.jsx("p",{className:"text-sm font-semibold text-foreground dark:text-[#ecf0fb]",children:"Adaptive Bot"}),e.jsx("p",{className:"text-xs text-muted-foreground dark:text-[#a9b3ca]",children:"Tune response timing and accuracy to your recent trend."})]}),e.jsx(Me,{checked:d.adaptiveBot,onCheckedChange:t=>g(n=>({...n,adaptiveBot:t,botDifficulty:t?"adaptive":n.botDifficulty==="adaptive"?"medium":n.botDifficulty}))})]}),e.jsxs("label",{className:"flex items-center justify-between rounded-xl border border-border bg-card p-3 dark:border-[#2f3547] dark:bg-[#171d2a]",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[G?e.jsx(kt,{className:"h-4 w-4 text-primary dark:text-[#9e8fff]"}):e.jsx(vt,{className:"h-4 w-4 text-muted-foreground"}),e.jsxs("div",{children:[e.jsx("p",{className:"text-sm font-semibold text-foreground dark:text-[#ecf0fb]",children:"Battle Sounds"}),e.jsx("p",{className:"text-xs text-muted-foreground dark:text-[#a9b3ca]",children:"Play audio cues for countdowns and results."})]})]}),e.jsx(Me,{checked:G,onCheckedChange:ot})]})]}),d.mode==="online"&&e.jsxs("label",{className:"flex items-center justify-between rounded-xl border border-border bg-card p-3 dark:border-[#2f3547] dark:bg-[#171d2a]",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[G?e.jsx(kt,{className:"h-4 w-4 text-primary dark:text-[#9e8fff]"}):e.jsx(vt,{className:"h-4 w-4 text-muted-foreground"}),e.jsxs("div",{children:[e.jsx("p",{className:"text-sm font-semibold text-foreground dark:text-[#ecf0fb]",children:"Battle Sounds"}),e.jsx("p",{className:"text-xs text-muted-foreground dark:text-[#a9b3ca]",children:"Play audio cues for countdowns and results."})]})]}),e.jsx(Me,{checked:G,onCheckedChange:ot})]})]})]}),e.jsxs("div",{className:"flex flex-col sm:flex-row gap-2 sm:items-center sm:justify-between",children:[e.jsxs("div",{"aria-live":"polite",className:"min-h-[24px] text-sm text-muted-foreground dark:text-[#b6bfd5]",children:[z.status==="queued"&&e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[z.message,d.mode==="online"&&d.queueType==="private_room"&&m?.roomCode&&e.jsxs(I,{type:"button",variant:"outline",className:h("h-7 rounded-full border-amber-300/70 bg-amber-100/80 px-3 text-[11px] font-black uppercase tracking-[0.16em] text-amber-900 hover:bg-amber-200 dark:border-amber-500/50 dark:bg-amber-500/15 dark:text-amber-200 dark:hover:bg-amber-500/25",Ne===m.roomCode?"border-emerald-400/80 bg-emerald-100 text-emerald-900 dark:border-emerald-400/70 dark:bg-emerald-500/20 dark:text-emerald-200":null),onClick:()=>void ut(m.roomCode),"aria-label":`Copy room code ${m.roomCode}`,children:[Ne===m.roomCode?e.jsx(wt,{className:"h-3.5 w-3.5"}):e.jsx(yt,{className:"h-3.5 w-3.5"}),m.roomCode]}),(A||pt)&&rt>0&&e.jsxs("span",{className:"inline-flex items-center gap-1 rounded-md bg-primary/10 px-2 py-0.5 text-xs font-semibold text-primary dark:bg-[#8c7dff]/20 dark:text-[#c7c0ff]",children:["Waiting ",Ya(rt)]})]}),z.status==="error"&&e.jsx("span",{className:"text-destructive dark:text-rose-300",children:z.message}),z.status==="validating"&&e.jsxs("span",{className:"inline-flex items-center gap-2 text-foreground dark:text-[#d5dcf0]",children:[e.jsx(Ge,{className:"h-4 w-4 animate-spin"})," Validating setup..."]})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[Gt&&e.jsx(I,{type:"button",variant:"outline",onClick:bt,disabled:z.status==="validating",className:"rounded-xl",children:m?"Cancel room":"Leave queue"}),e.jsx(I,{type:"button",onClick:Vt,disabled:z.status==="validating"||A||pt,className:"rounded-xl",children:z.status==="validating"?e.jsxs("span",{className:"inline-flex items-center gap-2",children:[e.jsx(Ge,{className:"h-4 w-4 animate-spin"})," Starting..."]}):d.mode==="online"&&d.queueType==="private_room"?De.trim()?"Join room":"Create room":"Start battle"})]})]})]})]})},"setup")}),e.jsx(fe,{value:"battle",className:"mt-5",children:e.jsx(re.div,{initial:{opacity:0,y:12},animate:{opacity:1,y:0},exit:{opacity:0,y:-12},className:"space-y-4",children:o?e.jsxs(_,{className:h(D,"rounded-[18px]"),children:[e.jsxs(F,{children:[e.jsxs(O,{className:"text-base flex items-center justify-between gap-3",children:[e.jsxs("span",{className:"inline-flex items-center gap-2",children:[o.mode==="bot"?e.jsx(ht,{className:"h-4 w-4 text-primary dark:text-[#9e8fff]"}):e.jsx(Ae,{className:"h-4 w-4 text-primary dark:text-[#9e8fff]"}),"vs ",o.opponentName]}),e.jsxs("span",{className:"text-sm font-bold tabular-nums",children:[o.scoreFor," - ",o.scoreAgainst]})]}),e.jsx(V,{className:"text-muted-foreground dark:text-[#b2bad0]",children:o.status==="completed"?`Completed in ${o.totalRounds} rounds.`:o.status==="ready"?o.mode==="online"?"Waiting for both players to confirm and start together.":"Finalizing practice bot session start.":`Round ${o.currentRound} of ${o.totalRounds}`}),Bt(o.lifecycle,r?.uid)&&e.jsx("p",{className:"text-xs font-medium text-muted-foreground dark:text-[#9aa4be]",children:Bt(o.lifecycle,r?.uid)})]}),e.jsxs(ee,{className:"space-y-4",children:[o.status==="ready"&&e.jsx("div",{className:"rounded-xl border border-border bg-muted/30 p-3 dark:border-[#2f3547] dark:bg-[#11151d]",children:e.jsx("p",{className:"text-sm font-semibold text-foreground dark:text-[#ecf0fb]",children:o.mode==="online"?"Waiting for both players to lock in start...":"Starting practice bot round..."})}),o.status==="in_progress"&&o.currentQuestion&&e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"rounded-xl border border-border bg-muted/40 p-3 dark:border-[#2f3547] dark:bg-[#11151d]",children:[e.jsxs("p",{className:"text-xs text-muted-foreground dark:text-[#9aa4be]",children:["Time left: ",e.jsxs("span",{className:"font-semibold tabular-nums",children:[E,"s"]})]}),e.jsx("p",{className:"mt-2 text-sm font-semibold text-foreground dark:text-[#ecf0fb]",children:o.currentQuestion.prompt})]}),e.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-2",children:o.currentQuestion.choices.map((t,n)=>e.jsxs(I,{type:"button",variant:Ce===n?"default":"outline",onClick:()=>L(n),disabled:Y||U,className:"h-auto min-h-11 rounded-xl justify-start text-left whitespace-normal",children:[e.jsxs("span",{className:"mr-2 font-semibold",children:[String.fromCharCode(65+n),"."]}),t]},`${o.currentQuestion?.questionId}-${n}`))}),e.jsx("div",{className:"flex justify-end",children:e.jsx(I,{type:"button",onClick:()=>void Ve(Ce),disabled:Y||U,className:"rounded-xl",children:Y?e.jsxs("span",{className:"inline-flex items-center gap-2",children:[e.jsx(Ge,{className:"h-4 w-4 animate-spin"})," Submitting..."]}):U?"Waiting for opponent...":"Lock Answer"})})]}),Ie&&e.jsxs("div",{className:"rounded-xl border border-border bg-muted/30 p-3 dark:border-[#2f3547] dark:bg-[#11151d]",children:[e.jsxs("p",{className:"text-sm font-semibold text-foreground dark:text-[#ecf0fb]",children:["Last round: ",Ie.studentCorrect?"Correct":"Incorrect"," Β· ",o.mode==="bot"?"Bot":"Opponent"," ",Ie.botCorrect?"Correct":"Incorrect"]}),e.jsxs("p",{className:"text-xs text-muted-foreground dark:text-[#9aa4be]",children:["Correct option: ",String.fromCharCode(65+Ie.correctOptionIndex)]})]}),o.status==="completed"&&e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{className:h("rounded-2xl border p-4",o.outcome==="win"?"border-emerald-300 bg-emerald-50 dark:border-emerald-400/40 dark:bg-emerald-900/20":o.outcome==="loss"?"border-rose-300 bg-rose-50 dark:border-rose-400/40 dark:bg-rose-900/20":"border-amber-300 bg-amber-50 dark:border-amber-400/40 dark:bg-amber-900/20"),children:[e.jsx("p",{className:"text-lg font-black tracking-wide text-foreground dark:text-[#ecf0fb]",children:o.outcome==="win"?"Victory!":o.outcome==="loss"?"Match Complete":"Draw Match"}),e.jsxs("p",{className:"mt-1 text-sm font-semibold text-foreground dark:text-[#ecf0fb]",children:["Final Score: ",o.scoreFor," - ",o.scoreAgainst]}),e.jsxs("p",{className:"text-xs text-muted-foreground dark:text-[#9aa4be]",children:["XP Earned: +",o.xpEarned||0]})]}),e.jsxs("div",{className:"flex items-center justify-end gap-2",children:[e.jsx(I,{type:"button",variant:"outline",onClick:()=>{w(null),j(!1),i("setup")},className:"rounded-xl",children:"Start New Match"}),o.mode==="bot"&&e.jsx(I,{type:"button",onClick:()=>void Wt(),disabled:Y,className:"rounded-xl",children:"Rematch"})]})]})]})]}):m?e.jsxs(_,{className:h(D,"rounded-[18px]"),children:[e.jsxs(F,{children:[e.jsxs(O,{className:"text-base flex items-center gap-2",children:[e.jsx(Ae,{className:"h-4 w-4 text-primary dark:text-[#9e8fff]"}),"Private Room Lobby"]}),e.jsxs(V,{className:"text-muted-foreground dark:text-[#b2bad0]",children:["Room ",m.roomCode," Β· ",m.participantCount,"/2 students connected."]})]}),e.jsx(ee,{className:"space-y-3",children:e.jsxs("div",{className:"rounded-xl border border-border bg-muted/30 p-3 dark:border-[#2f3547] dark:bg-[#11151d]",children:[e.jsx("p",{className:"text-sm font-semibold text-foreground dark:text-[#ecf0fb]",children:m.status==="ready"?"Opponent connected. Syncing start...":"Waiting for another student to join this room."}),e.jsxs("p",{className:"text-xs text-muted-foreground dark:text-[#9aa4be]",children:["Share room code ",m.roomCode," with your classmate."]}),e.jsxs("div",{className:"mt-3 flex flex-wrap items-center justify-end gap-2",children:[(m.status==="waiting"||m.status==="ready")&&e.jsx(I,{type:"button",variant:"outline",className:"h-8 rounded-lg",onClick:bt,disabled:z.status==="validating",children:"Cancel room"}),e.jsxs(I,{type:"button",variant:"outline",className:"h-8 rounded-lg",onClick:()=>void ut(m.roomCode),children:[Ne===m.roomCode?e.jsx(wt,{className:"h-4 w-4"}):e.jsx(yt,{className:"h-4 w-4"}),Ne===m.roomCode?"Copied":"Copy code"]})]})]})})]}):A?e.jsx(_,{className:h(D,"rounded-[18px]"),children:e.jsxs(F,{children:[e.jsxs(O,{className:"text-base flex items-center gap-2",children:[e.jsx(Ae,{className:"h-4 w-4 text-primary dark:text-[#9e8fff]"}),"Public Matchmaking"]}),e.jsx(V,{className:"text-muted-foreground dark:text-[#b2bad0]",children:"Searching for a student with the same setup..."})]})}):e.jsx(_,{className:h(D,"rounded-[18px]"),children:e.jsxs(F,{children:[e.jsxs(O,{className:"text-base flex items-center gap-2",children:[e.jsx(jt,{className:"h-4 w-4 text-primary dark:text-[#9e8fff]"}),"No active battle"]}),e.jsx(V,{className:"text-muted-foreground dark:text-[#b2bad0]",children:"Start from Setup to create a bot match, private room, or public queue session."})]})})},"battle")}),e.jsx(fe,{value:"history",className:"mt-5",children:e.jsx(re.div,{initial:{opacity:0,y:12},animate:{opacity:1,y:0},exit:{opacity:0,y:-12},className:"space-y-4",children:e.jsxs(_,{className:h(D,"rounded-[18px]"),children:[e.jsxs(F,{children:[e.jsx(O,{className:"text-base",children:"Match History"}),e.jsx(V,{className:"text-muted-foreground dark:text-[#b2bad0]",children:"Your recent student battles only."})]}),e.jsxs(ee,{className:"space-y-3",children:[e.jsx("div",{className:"flex gap-2",children:[{value:"all",label:"All"},{value:"online",label:"Online"},{value:"bot",label:"Bot"}].map(t=>e.jsx(I,{type:"button",variant:ne===t.value?"default":"outline",onClick:()=>Dt(t.value),className:"rounded-xl h-8 px-3",children:t.label},t.value))}),nt?e.jsxs("div",{className:"space-y-2",children:[e.jsx(X,{className:"h-12 w-full rounded-xl bg-muted dark:bg-[#2a3143]"}),e.jsx(X,{className:"h-12 w-full rounded-xl bg-muted dark:bg-[#2a3143]"})]}):Be.length===0?e.jsx("p",{className:"text-sm text-muted-foreground dark:text-[#a8b2c9]",children:"No matches in this filter yet."}):Be.map(t=>e.jsxs("div",{className:"rounded-xl border border-border bg-muted/40 px-3 py-2 flex items-center justify-between gap-3 dark:border-[#2f3547] dark:bg-[#11151d]",children:[e.jsxs("div",{children:[e.jsxs("p",{className:"text-sm font-semibold text-foreground dark:text-[#f5f7fb]",children:["vs ",t.opponentName]}),e.jsxs("p",{className:"text-xs text-muted-foreground dark:text-[#95a0bb] tabular-nums",children:[t.scoreFor,"-",t.scoreAgainst," Β· ",t.accuracy.toFixed(0),"% Β· +",t.xpEarned," XP"]})]}),e.jsx("span",{className:h("text-xs font-semibold rounded-full px-2.5 py-1 border",t.outcome==="win"?"text-emerald-700 border-emerald-200 bg-emerald-50 dark:text-emerald-300 dark:border-emerald-300/40 dark:bg-emerald-900/20":t.outcome==="loss"?"text-rose-700 border-rose-200 bg-rose-50 dark:text-rose-300 dark:border-rose-300/40 dark:bg-rose-900/20":"text-amber-700 border-amber-200 bg-amber-50 dark:text-amber-300 dark:border-amber-300/40 dark:bg-amber-900/20"),children:It(t.outcome)})]},t.matchId))]})]})},"history")}),e.jsx(fe,{value:"stats",className:"mt-5",children:e.jsx(re.div,{initial:{opacity:0,y:12},animate:{opacity:1,y:0},exit:{opacity:0,y:-12},className:"grid grid-cols-1 md:grid-cols-2 xl:grid-cols-4 gap-4",children:[{label:"Wins",value:J?.wins??0,icon:ma},{label:"Current streak",value:J?.currentStreak??0,icon:xa},{label:"Avg accuracy",value:`${(J?.averageAccuracy||0).toFixed(1)}%`,icon:fa},{label:"Avg response",value:Ct(J?.averageResponseMs||0),icon:pa}].map(t=>e.jsx(_,{className:h(D,"rounded-[18px]"),children:e.jsxs(ee,{className:"pt-6",children:[e.jsx("p",{className:"text-xs text-muted-foreground dark:text-[#9da7bf]",children:t.label}),e.jsx("p",{className:"mt-1 tabular-nums text-2xl font-black text-foreground dark:text-[#f5f7fb]",children:t.value}),e.jsx(t.icon,{className:"mt-3 h-4 w-4 text-primary dark:text-[#9e8fff]"})]})},t.label))},"stats")}),e.jsx(fe,{value:"leaderboard",className:"mt-5",children:e.jsx(re.div,{initial:{opacity:0,y:12},animate:{opacity:1,y:0},exit:{opacity:0,y:-12},children:e.jsxs(_,{className:h(D,"rounded-[18px]"),children:[e.jsxs(F,{children:[e.jsxs(O,{className:"text-base flex items-center gap-2",children:[e.jsx(Kt,{className:"h-4 w-4 text-primary dark:text-[#9e8fff]"})," Student Leaderboard"]}),e.jsx(V,{className:"text-muted-foreground dark:text-[#b2bad0]",children:"Student-only ranking using trusted backend aggregates."})]}),e.jsx(ee,{children:Lt?e.jsxs("div",{className:"space-y-2",children:[e.jsx(X,{className:"h-12 w-full rounded-xl bg-muted dark:bg-[#2a3143]"}),e.jsx(X,{className:"h-12 w-full rounded-xl bg-muted dark:bg-[#2a3143]"}),e.jsx(X,{className:"h-12 w-full rounded-xl bg-muted dark:bg-[#2a3143]"})]}):mt.length===0?e.jsx("p",{className:"text-sm text-muted-foreground dark:text-[#a9b3ca]",children:"No leaderboard entries yet. Finish a battle to place on the board."}):e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-2",children:[e.jsxs("div",{className:"rounded-xl border border-border bg-muted/30 p-2.5 dark:border-[#2f3547] dark:bg-[#11151d]",children:[e.jsx("p",{className:"text-[11px] font-semibold uppercase tracking-wide text-muted-foreground dark:text-[#98a2bc]",children:"Name display"}),e.jsxs(ce,{value:Se,onValueChange:t=>Ft(t),children:[e.jsx(le,{className:"mt-1 h-8 rounded-lg",children:e.jsx(ue,{})}),e.jsxs(me,{children:[e.jsx(P,{value:"alias",children:"Alias"}),e.jsx(P,{value:"initials",children:"Initials"}),e.jsx(P,{value:"full",children:"Full name"})]})]})]}),e.jsxs("label",{className:"rounded-xl border border-border bg-muted/30 p-2.5 flex items-center justify-between gap-3 dark:border-[#2f3547] dark:bg-[#11151d]",children:[e.jsxs("div",{children:[e.jsx("p",{className:"text-[11px] font-semibold uppercase tracking-wide text-muted-foreground dark:text-[#98a2bc]",children:"Score detail"}),e.jsx("p",{className:"text-xs text-muted-foreground dark:text-[#98a2bc]",children:"Show exact score values"})]}),e.jsx(Me,{checked:Ue,onCheckedChange:Ot})]})]}),e.jsx("p",{className:"text-xs text-muted-foreground dark:text-[#95a0bb]",children:"Privacy mode keeps classmate identities and scores obfuscated by default while preserving your own exact rank and score."}),mt.map(t=>e.jsxs("div",{className:h("rounded-xl border bg-muted/30 px-3 py-2 flex items-center justify-between dark:bg-[#11151d]",t.isSelf?"border-primary/60 dark:border-[#8d7fff]":"border-border dark:border-[#2f3547]"),children:[e.jsxs("div",{children:[e.jsxs("p",{className:"text-sm font-semibold text-foreground dark:text-[#f5f7fb]",children:["#",t.rank," ",t.displayName,t.isSelf?" (You)":""]}),e.jsxs("p",{className:"text-xs text-muted-foreground dark:text-[#95a0bb]",children:["Win rate ",t.winRate.toFixed(1),"% Β· Best streak ",t.bestStreak]})]}),e.jsx("p",{className:"tabular-nums text-sm font-semibold text-foreground dark:text-[#f5f7fb]",children:t.scoreLabel})]},t.userId))]})})]})},"leaderboard")})]})]})})};export{Cs as default};
assets/QuizBattlePage-eGdKu290.js DELETED
@@ -1,21 +0,0 @@
1
- import{c as ze,d as Te,E as we,G as Ee,H as B,u as Gt,_ as Jt,m as se,I as pt,i as Yt}from"./index-DUxNDyEU.js";import{j as e,r as l}from"./vendor-react-Dexh7fmo.js";import{g as Kt,s as Zt}from"./subjects-mtNF4Bqy.js";import{d as Xt,b as ea,w as ht,o as Bt,l as Je,f as Ye,q as Ke,e as Ze}from"./vendor-firebase-firestore-BML5nJHm.js";import{Y as R,Z as Rt,$ as Mt,a0 as be,a1 as ta}from"./vendor-firebase-core-DQ-pMjxd.js";import{B as I}from"./button-BpeUVhBo.js";import{c as b}from"./utils-BQQgILNW.js";import{c as aa,L as sa,d as ra,e as oa,f as na,g as da,h as ia}from"./vendor-radix-BRdei-zg.js";import{S as ce,a as le,b as ue,c as me,d as E}from"./select-eb8ZLkQc.js";import{I as ca}from"./input-DBkKXOmF.js";import{S as Re}from"./switch-eyvBOdtY.js";import{S as Z,C as gt}from"./skeleton-DVOhx2DS.js";import{S as yt}from"./swords-XAghltmC.js";import{U as Me}from"./users-B8Q5DwX3.js";import{C as Ve}from"./chevron-right-CSxxBxL8.js";import{T as la}from"./target-CkzwB53m.js";import{C as jt}from"./check-DF0M9ltT.js";import{L as He}from"./loader-circle-6q_nFxhJ.js";import{T as ua}from"./trophy-qEvM2_M2.js";import{S as ma}from"./sparkles-BA64-_B-.js";import{S as xa}from"./shield-check-B8cYxDcb.js";import"./vendor-firebase-auth-COrkgW0P.js";import"./vendor-firebase-storage-BOeKE_0n.js";import"./vendor-firebase-analytics-CCo6E2f7.js";import"./trending-up-KXZvyUp1.js";import"./chart-column-BSv3Tlcd.js";import"./clsx-B-dksMZM.js";import"./chevron-up-B14f4SwA.js";/**
2
- * @license lucide-react v0.487.0 - ISC
3
- *
4
- * This source code is licensed under the ISC license.
5
- * See the LICENSE file in the root directory of this source tree.
6
- */const fa=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["polyline",{points:"12 6 12 12 16.5 12",key:"1aq6pp"}]],ba=ze("clock-3",fa);/**
7
- * @license lucide-react v0.487.0 - ISC
8
- *
9
- * This source code is licensed under the ISC license.
10
- * See the LICENSE file in the root directory of this source tree.
11
- */const pa=[["path",{d:"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",key:"1357e3"}],["path",{d:"M3 3v5h5",key:"1xhq8a"}],["path",{d:"M12 7v5l4 2",key:"1fdv2h"}]],ha=ze("history",pa);/**
12
- * @license lucide-react v0.487.0 - ISC
13
- *
14
- * This source code is licensed under the ISC license.
15
- * See the LICENSE file in the root directory of this source tree.
16
- */const ga=[["path",{d:"M11 4.702a.705.705 0 0 0-1.203-.498L6.413 7.587A1.4 1.4 0 0 1 5.416 8H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h2.416a1.4 1.4 0 0 1 .997.413l3.383 3.384A.705.705 0 0 0 11 19.298z",key:"uqj9uw"}],["path",{d:"M16 9a5 5 0 0 1 0 6",key:"1q6k2b"}],["path",{d:"M19.364 18.364a9 9 0 0 0 0-12.728",key:"ijwkga"}]],wt=ze("volume-2",ga);/**
17
- * @license lucide-react v0.487.0 - ISC
18
- *
19
- * This source code is licensed under the ISC license.
20
- * See the LICENSE file in the root directory of this source tree.
21
- */const ya=[["path",{d:"M11 4.702a.705.705 0 0 0-1.203-.498L6.413 7.587A1.4 1.4 0 0 1 5.416 8H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h2.416a1.4 1.4 0 0 1 .997.413l3.383 3.384A.705.705 0 0 0 11 19.298z",key:"uqj9uw"}],["line",{x1:"22",x2:"16",y1:"9",y2:"15",key:"1ewh16"}],["line",{x1:"16",x2:"22",y1:"9",y2:"15",key:"5ykzw1"}]],kt=ze("volume-x",ya),ja=15e3,wa="mathpulse.quizBattle.local",vt="".toLowerCase()==="true",Pe=typeof window<"u",Qe=()=>Pe&&!1,et=()=>{const a=Ee.currentUser?.uid;return a||"local-student"},At=a=>`${wa}.${a}`,ke=a=>{const s={stats:pe(a),history:[],queueStatus:"idle"};if(!Pe)return s;try{const r=window.localStorage.getItem(At(a));if(!r)return s;const c=JSON.parse(r),i=Array.isArray(c.history)?c.history.map(p=>Xe(p.matchId||"local-match",p)):[];return{stats:c.stats?{...pe(a),...c.stats,userId:a,updatedAt:qe(c.stats.updatedAt)}:pe(a),history:i,queueStatus:c.queueStatus==="queued"||c.queueStatus==="matched"?c.queueStatus:"idle"}}catch(r){return console.error("Error reading local Quiz Battle fallback store:",r),s}},Tt=(a,s)=>{if(Pe)try{window.localStorage.setItem(At(a),JSON.stringify(s))}catch(r){console.error("Error writing local Quiz Battle fallback store:",r)}},Qt=a=>{const s=a||{},r=typeof s.code=="string"?s.code:"";return r?r.startsWith("functions/")?r.replace("functions/",""):r:""},V=a=>{if(!Qe())return!1;const s=Qt(a);if(["internal","not-found","unavailable","deadline-exceeded"].includes(s))return!0;const r=a||{},c=(typeof r.message=="string"?r.message:a instanceof Error?a.message:"").toLowerCase();return c?c.includes("cors policy")||c.includes("no access-control-allow-origin")||c.includes("failed to fetch")||c.includes("network error")||c.includes("err_failed"):!1},Ae=(a,s)=>Math.floor(Math.random()*(s-a+1))+a,ka=(a,s)=>{const r=Math.max(3,a),c=s==="easy"?0:s==="medium"?1:s==="hard"?2:1,i=Ae(Math.max(0,r-3-c),r),d=Ae(Math.max(0,r-4+c),r),p=Math.min(r,Math.max(0,i)),C=Math.min(r,Math.max(0,d)),y=Math.max(0,Math.min(100,p/r*100+Ae(-8,6))),N=Ae(1800,6200);return{scoreFor:p,scoreAgainst:C,accuracy:y,averageResponseMs:N}},va=a=>{const s=et(),r=ke(s),c=`local-bot-${Date.now()}-${Math.random().toString(16).slice(2,8)}`,i=ka(a.rounds,a.botDifficulty),d=i.scoreFor>i.scoreAgainst?"win":i.scoreFor<i.scoreAgainst?"loss":"draw",p=new Date,C={matchId:c,mode:"bot",status:"completed",subjectId:a.subjectId,topicId:a.topicId,difficulty:a.botDifficulty,rounds:a.rounds,timePerQuestionSec:a.timePerQuestionSec,scoreFor:i.scoreFor,scoreAgainst:i.scoreAgainst,outcome:d,accuracy:i.accuracy,averageResponseMs:i.averageResponseMs,bestStreak:r.stats.bestStreak,xpEarned:d==="win"?60:d==="draw"?40:20,opponentName:"Practice Bot",opponentType:"bot",createdAt:p,endedAt:p},y=r.stats.matchesPlayed+1,N=r.stats.wins+(d==="win"?1:0),he=r.stats.losses+(d==="loss"?1:0),q=r.stats.draws+(d==="draw"?1:0),h=d==="win"?r.stats.currentStreak+1:0,A=Math.max(r.stats.bestStreak,h),w={...r.stats,matchesPlayed:y,wins:N,losses:he,draws:q,winRate:y>0?N/y*100:0,averageAccuracy:y>0?(r.stats.averageAccuracy*r.stats.matchesPlayed+i.accuracy)/y:i.accuracy,averageResponseMs:y>0?Math.round((r.stats.averageResponseMs*r.stats.matchesPlayed+i.averageResponseMs)/y):i.averageResponseMs,currentStreak:h,bestStreak:A,favoriteTopicId:a.topicId,leaderboardScore:r.stats.leaderboardScore+C.xpEarned,updatedAt:p};return Tt(s,{stats:w,history:[C,...r.history].slice(0,50),queueStatus:"idle"}),{success:!0,matchId:c,status:"ready",botDifficulty:a.botDifficulty}},qt=a=>{const s=et(),r=ke(s);Tt(s,{...r,queueStatus:a})},Na=()=>Math.random().toString(36).slice(2,8).toUpperCase(),tt=a=>{const s=et();return{roomId:`local-room-${Date.now()}`,roomCode:a||Na(),ownerStudentId:s,participantIds:[s],participantCount:1,status:"waiting",subjectId:"gen-math",topicId:"functions",difficulty:"medium",rounds:5,timePerQuestionSec:30,isOwner:!0}},zt=()=>Pe&&!!Ee.currentUser?.uid&&!!we,Et=(a,s,r)=>`quizBattlePresence/${a}/${s}/${r}`,Sa=async(a,s)=>{if(!zt()||!s.trim()||!we)return;const r=Ee.currentUser?.uid;if(!r)return;const c=Rt(we,Et(a,s,r));try{await Mt(c,{studentId:r,scope:a,resourceId:s,online:!0,heartbeatAt:be(),updatedAt:be()}),await ta(c).update({online:!1,updatedAt:be(),disconnectedAt:be()})}catch(i){console.warn("Realtime presence connect failed:",i)}},Ca=async(a,s)=>{if(!zt()||!s.trim()||!we)return;const r=Ee.currentUser?.uid;if(!r)return;const c=Rt(we,Et(a,s,r));try{await Mt(c,{studentId:r,scope:a,resourceId:s,online:!1,updatedAt:be(),disconnectedAt:be()})}catch(i){console.warn("Realtime presence disconnect failed:",i)}},T=(a,s)=>{const r=`Unable to continue while ${a}. Please try again.`;if(s instanceof Error&&s.message.startsWith("Timed out while"))return s.message;const c=s||{},i=Qt(s),d=typeof c.message=="string"?c.message.trim():"";return i==="unauthenticated"?"Your session has expired. Sign in again before starting a battle.":i==="permission-denied"?"Only student accounts can access Quiz Battle matchmaking.":i==="invalid-argument"?d||"Battle setup is invalid. Review the selected options and try again.":i==="already-exists"?d||"This room is already full. Try another room code.":i==="failed-precondition"?d||"Battle state changed. Please refresh and continue.":i==="unavailable"||i==="internal"||i==="not-found"||i==="deadline-exceeded"?/question generation temporarily unavailable/i.test(d)?d:"Quiz Battle service is temporarily unavailable. Please retry in a moment.":r},M=async(a,s,r=ja)=>{let c;try{return await Promise.race([s,new Promise((i,d)=>{c=setTimeout(()=>{d(new Error(`Timed out while ${a}. Please try again.`))},r)})])}finally{c&&clearTimeout(c)}},qe=a=>{if(!a)return new Date;if(a instanceof Date)return a;if(typeof a=="string"){const s=Date.parse(a);return Number.isNaN(s)?new Date:new Date(s)}if(typeof a=="number")return new Date(a);if(typeof a=="object"){const s=a;if(typeof s.toDate=="function")return s.toDate();if(typeof s.seconds=="number")return new Date(s.seconds*1e3)}return new Date},Ia=()=>({mode:"online",subjectId:"gen-math",topicId:"",difficulty:"medium",rounds:5,timePerQuestionSec:30,queueType:"public_matchmaking",botDifficulty:"medium",adaptiveBot:!1}),Ba=a=>{const s=[];return a.subjectId.trim()||s.push({field:"subjectId",message:"Choose a category before starting."}),a.topicId.trim()||s.push({field:"topicId",message:"Choose a strand or topic before starting."}),(a.rounds<3||a.rounds>20)&&s.push({field:"rounds",message:"Questions must be between 3 and 20."}),(a.timePerQuestionSec<10||a.timePerQuestionSec>180)&&s.push({field:"timePerQuestionSec",message:"Timer must be between 10s and 180s."}),a.mode==="bot"&&a.queueType!=="public_matchmaking"&&s.push({field:"queueType",message:"Bot battles use instant start and do not support private room mode."}),s},pe=a=>({userId:a,matchesPlayed:0,wins:0,losses:0,draws:0,winRate:0,averageAccuracy:0,averageResponseMs:0,bestStreak:0,currentStreak:0,favoriteTopicId:void 0,leaderboardScore:0,updatedAt:new Date}),Ra=async a=>{try{const s=Xt(Te,"studentBattleStats",a),r=await ea(s),c=Qe()?ke(a).stats:null;if(!r.exists())return c&&c.matchesPlayed>0?c:pe(a);const i=r.data(),d={...pe(a),...i,userId:a,updatedAt:qe(i.updatedAt)};return c&&c.matchesPlayed>d.matchesPlayed?c:d}catch(s){if(console.error("Error loading battle stats:",s),Qe()){const r=ke(a).stats;if(r.matchesPlayed>0)return r}return pe(a)}},Xe=(a,s)=>({matchId:s.matchId||a,mode:s.mode||"online",status:s.status||"completed",subjectId:s.subjectId||"gen-math",topicId:s.topicId||"unknown-topic",difficulty:s.difficulty||"medium",rounds:s.rounds||0,timePerQuestionSec:s.timePerQuestionSec||0,scoreFor:s.scoreFor||0,scoreAgainst:s.scoreAgainst||0,outcome:s.outcome||"draw",accuracy:s.accuracy||0,averageResponseMs:s.averageResponseMs||0,bestStreak:s.bestStreak||0,xpEarned:s.xpEarned||0,opponentName:s.opponentName||"Unknown opponent",opponentType:s.opponentType||"student",createdAt:qe(s.createdAt),endedAt:qe(s.endedAt)}),Ma=async(a,s={})=>{const r=s.limitCount||25,c=Qe()?ke(a).history:[],i=p=>p.filter(y=>!(s.mode&&s.mode!=="all"&&y.mode!==s.mode||s.subjectId&&y.subjectId!==s.subjectId||s.startDate&&y.endedAt<s.startDate||s.endDate&&y.endedAt>s.endDate)).sort((y,N)=>N.endedAt.getTime()-y.endedAt.getTime()).slice(0,r),d=p=>{if(c.length===0)return i(p);const C=new Map;return[...c,...p].forEach(y=>{C.set(y.matchId,y)}),i(Array.from(C.values()))};try{const p=[ht("studentId","==",a),Bt("endedAt","desc"),Je(r)],y=(await Ye(Ke(Ze(Te,"quizBattleHistory"),...p))).docs.map(N=>Xe(N.id,N.data()));return d(y)}catch(p){try{const y=(await Ye(Ke(Ze(Te,"quizBattleHistory"),ht("studentId","==",a),Je(r)))).docs.map(N=>Xe(N.id,N.data())).sort((N,he)=>he.endedAt.getTime()-N.endedAt.getTime());return d(y)}catch(C){return console.error("Error loading battle history:",p,C),i(c)}}},Aa=async a=>{const s=R(B,"quizBattleJoinQueue");try{return(await M("joining Quiz Battle matchmaking queue",s({setup:a}))).data}catch(r){if(V(r))return qt("queued"),{success:!0,status:"queued",queueEntryId:`local-queue-${Date.now()}`};throw new Error(T("joining Quiz Battle matchmaking queue",r))}},Ta=async()=>{const a=R(B,"quizBattleLeaveQueue");try{return(await M("leaving Quiz Battle matchmaking queue",a({}))).data}catch(s){if(V(s))return qt("idle"),{success:!0,status:"idle"};throw new Error(T("leaving Quiz Battle matchmaking queue",s))}},Qa=async a=>{const s=R(B,"quizBattleCreatePrivateRoom");try{return(await M("creating Quiz Battle private room",s({setup:a}))).data}catch(r){if(V(r))return{success:!0,room:tt()};throw new Error(T("creating Quiz Battle private room",r))}},qa=async a=>{const s=R(B,"quizBattleJoinPrivateRoom");try{return(await M("joining Quiz Battle private room",s({roomCode:a}),2e4)).data}catch(r){if(V(r))return{success:!0,room:tt(a.trim().toUpperCase()||void 0)};throw new Error(T("joining Quiz Battle private room",r))}},za=async a=>{const s=R(B,"quizBattleGetPrivateRoomState");try{return(await M("loading Quiz Battle private room state",s(a),2e4)).data}catch(r){if(V(r))return{success:!0,room:tt(a.roomCode?.trim().toUpperCase()||void 0)};throw new Error(T("loading Quiz Battle private room state",r))}},Ea=async(a={})=>{const s=R(B,"quizBattleLeavePrivateRoom");try{return(await M("leaving Quiz Battle private room",s(a),2e4)).data}catch(r){if(V(r))return{success:!0,status:"idle"};throw new Error(T("leaving Quiz Battle private room",r))}},Nt=async()=>{const a=R(B,"quizBattleResumeSession");try{return(await M("resuming Quiz Battle session",a({}),2e4)).data}catch(s){if(V(s))return{success:!0,sessionType:"idle"};throw new Error(T("resuming Quiz Battle session",s))}},Pa=async(a,s)=>{if(!s.trim())return;const r=R(B,"quizBattleHeartbeat");await Sa(a,s);try{await M("sending Quiz Battle heartbeat",r({scope:a,resourceId:s}),12e3)}catch(c){if(!V(c))throw new Error(T("sending Quiz Battle heartbeat",c))}},_a=async a=>{const s=R(B,"quizBattleCreateBotMatch");try{return(await M("starting Quiz Battle bot match",s({setup:a}))).data}catch(r){if(V(r))return va(a);throw new Error(T("starting Quiz Battle bot match",r))}},Da=async a=>{const s=R(B,"quizBattleGetGenerationAudit");return(await M("verifying Quiz Battle generation metadata",s({matchId:a}),2e4)).data},re=async a=>{const s=R(B,"quizBattleStartMatch");try{const c=(await M("starting Quiz Battle match",s({matchId:a}),2e4)).data.match;try{const i=await Da(a);if(console.info("[QUIZ_BATTLE_GENERATION_AUDIT]",i),vt&&!i.isAiSource)throw new Error(`Quiz Battle generation audit failed: expected AI source, got "${i.questionSetSource||"unknown"}".`)}catch(i){if(i instanceof Error&&i.message.startsWith("Quiz Battle generation audit failed"))throw i;if(console.warn("Quiz Battle generation audit unavailable:",i),vt)throw new Error("Unable to verify Quiz Battle generation metadata. Please retry in a moment.")}return c}catch(r){throw new Error(T("starting Quiz Battle match",r))}},Ge=async a=>{const s=R(B,"quizBattleGetMatchState");try{return(await M("loading Quiz Battle match state",s({matchId:a}),2e4)).data.match}catch(r){throw new Error(T("loading Quiz Battle match state",r))}},La=async a=>{const s=R(B,"quizBattleSubmitAnswer");try{return(await M("submitting Quiz Battle answer",s({...a,idempotencyKey:a.idempotencyKey||`client-${Date.now()}-${Math.random().toString(16).slice(2,8)}`}),2e4)).data}catch(r){throw new Error(T("submitting Quiz Battle answer",r))}},$a=async a=>{const s=R(B,"quizBattleRequestRematch");try{return(await M("creating Quiz Battle rematch",s({matchId:a}),2e4)).data}catch(r){throw new Error(T("creating Quiz Battle rematch",r))}},Fa=async(a=20)=>{try{const s=Ke(Ze(Te,"studentBattleLeaderboard"),Bt("leaderboardScore","desc"),Je(a));return(await Ye(s)).docs.map((c,i)=>{const d=c.data();return{userId:d.userId||c.id,displayName:d.displayName||"Student",photo:d.photo,rank:d.rank||i+1,leaderboardScore:d.leaderboardScore||0,winRate:d.winRate||0,bestStreak:d.bestStreak||0}})}catch(s){return console.error("Error loading Quiz Battle leaderboard:",s),[]}};function P({className:a,...s}){return e.jsx("div",{"data-slot":"card",className:b("bg-card text-card-foreground flex flex-col gap-6 rounded-xl border",a),...s})}function F({className:a,...s}){return e.jsx("div",{"data-slot":"card-header",className:b("@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-1.5 px-6 pt-6 has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-6",a),...s})}function O({className:a,...s}){return e.jsx("h4",{"data-slot":"card-title",className:b("leading-none",a),...s})}function W({className:a,...s}){return e.jsx("p",{"data-slot":"card-description",className:b("text-muted-foreground",a),...s})}function X({className:a,...s}){return e.jsx("div",{"data-slot":"card-content",className:b("px-6 [&:last-child]:pb-6",a),...s})}function Oa({className:a,...s}){return e.jsx(aa,{"data-slot":"tabs",className:b("flex flex-col gap-2",a),...s})}function Ua({className:a,...s}){return e.jsx(sa,{"data-slot":"tabs-list",className:b("bg-muted text-muted-foreground inline-flex h-9 w-fit items-center justify-center rounded-xl p-[3px] flex",a),...s})}function xe({className:a,...s}){return e.jsx(ra,{"data-slot":"tabs-trigger",className:b("data-[state=active]:bg-card dark:data-[state=active]:text-foreground focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:outline-ring dark:data-[state=active]:border-input dark:data-[state=active]:bg-input/30 text-foreground dark:text-muted-foreground inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-xl border border-transparent px-2 py-1 text-sm font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:ring-[3px] focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",a),...s})}function fe({className:a,...s}){return e.jsx(oa,{"data-slot":"tabs-content",className:b("flex-1 outline-none",a),...s})}function Wa({...a}){return e.jsx(na,{"data-slot":"collapsible",...a})}function Va({...a}){return e.jsx(da,{"data-slot":"collapsible-trigger",...a})}function Ha({...a}){return e.jsx(ia,{"data-slot":"collapsible-content",...a})}const _="border border-border bg-card text-card-foreground shadow-sm dark:border-[#2b3140] dark:bg-[#181d27] dark:text-[#f5f7fb] dark:shadow-[0_12px_24px_rgba(0,0,0,0.22)]",St=a=>a<=0?"--":`${(a/1e3).toFixed(2)}s`,Ct=a=>a==="win"?"Win":a==="loss"?"Loss":"Draw",Ga=(a,s,r)=>Math.max(s,Math.min(r,a)),Ja=a=>{const s=Math.floor(a/60),r=a%60;return`${s}:${String(r).padStart(2,"0")}`},Ya=a=>{const s=a.trim().split(/\s+/).filter(Boolean).slice(0,2);return s.length===0?"ST":s.map(r=>r[0]?.toUpperCase()||"").join("")},It=(a,s)=>a?a.eventType==="round_started"?`Round ${a.roundNumber} started.`:a.eventType==="answer_locked"?a.lockedByStudentId&&s&&a.lockedByStudentId===s?`Round ${a.roundNumber}: your answer is locked.`:`Round ${a.roundNumber}: opponent answer locked.`:a.eventType==="round_result"?`Round ${a.roundNumber} resolved.`:"Match completed.":null,Ss=()=>{const{userProfile:a,userRole:s}=Gt(),r=a,[c,i]=l.useState("hub"),[d,p]=l.useState(Ia),[C,y]=l.useState([]),[N,he]=l.useState(!1),[q,h]=l.useState({status:"idle"}),[A,w]=l.useState(!1),[u,k]=l.useState(null),[_e,ge]=l.useState(""),[ve,at]=l.useState(null),[st,oe]=l.useState(0),[H,rt]=l.useState(()=>typeof window>"u"?!0:window.localStorage.getItem("quiz_battle_sound_enabled")!=="0"),[Pt,S]=l.useState("connected"),[ne,_t]=l.useState("all"),[ot,De]=l.useState(!0),[G,Le]=l.useState(null),[$e,Fe]=l.useState([]),[Dt,nt]=l.useState(!1),[dt,Lt]=l.useState([]),[Ne,$t]=l.useState("alias"),[Oe,Ft]=l.useState(!1),[o,v]=l.useState(null),[Se,D]=l.useState(null),[J,ye]=l.useState(!1),[z,je]=l.useState(0),[U,L]=l.useState(!1),[Ce,ee]=l.useState(null),it=l.useRef(""),Ue=l.useRef(null),de=l.useRef(null),Y=l.useRef(0),ct=l.useRef(""),K=l.useMemo(()=>{const t=Kt(r?.grade);return Zt.filter(n=>t.includes(n.id))},[r?.grade]),Ot=l.useMemo(()=>(K.find(n=>n.id===d.subjectId)?.modules||[]).map(n=>({value:n.id,label:n.title})),[K,d.subjectId]),te=l.useCallback(t=>{if(!H||typeof window>"u")return;const n=window.AudioContext||window.webkitAudioContext;if(n)try{const m=new n,x=m.createOscillator(),f=m.createGain(),j={tick:{frequency:740,duration:.06,type:"triangle",volume:.035},lock:{frequency:520,duration:.08,type:"square",volume:.04},result:{frequency:660,duration:.1,type:"sine",volume:.045},win:{frequency:920,duration:.18,type:"triangle",volume:.05},loss:{frequency:240,duration:.16,type:"sawtooth",volume:.045}}[t],$=m.currentTime;x.type=j.type,x.frequency.setValueAtTime(j.frequency,$),f.gain.setValueAtTime(1e-4,$),f.gain.exponentialRampToValueAtTime(j.volume,$+.015),f.gain.exponentialRampToValueAtTime(1e-4,$+j.duration),x.connect(f),f.connect(m.destination),x.start($),x.stop($+j.duration+.02),window.setTimeout(()=>{m.close()},Math.ceil((j.duration+.06)*1e3))}catch(m){console.debug("Battle tone playback skipped:",m)}},[H]),lt=l.useCallback(async t=>{if(!(!t||typeof window>"u"))try{await window.navigator.clipboard.writeText(t),at(t),window.setTimeout(()=>{at(n=>n===t?null:n)},1600)}catch{h({status:"error",message:"Unable to copy room code automatically. Please copy it manually."})}},[]),ie=l.useCallback(async()=>{if(!r?.uid)return null;const[t,n]=await Promise.all([Ra(r.uid),Ma(r.uid,{mode:ne,limitCount:8})]);return{stats:t,history:n}},[ne,r?.uid]);l.useEffect(()=>{if(K.length===0)return;const n=K.some(f=>f.id===d.subjectId)?d.subjectId:K[0].id,m=K.find(f=>f.id===n),x=m?.modules?.[0]?.id||"";p(f=>{const g=m?.modules?.some(j=>j.id===f.topicId)?f.topicId:x;return f.subjectId===n&&f.topicId===g?f:{...f,subjectId:n,topicId:g}})},[K,d.subjectId]),l.useEffect(()=>{if(!r?.uid){Le(null),Fe([]),De(!1);return}let t=!0;return De(!0),(async()=>{const m=await ie();t&&(m&&(Le(m.stats),Fe(m.history)),De(!1))})(),()=>{t=!1}},[ie,r?.uid]);const Ie=l.useMemo(()=>ne==="all"?$e:$e.filter(t=>t.mode===ne),[$e,ne]),ut=l.useMemo(()=>dt.map((t,n)=>{const m=t.rank||n+1,x=t.userId===r?.uid,f=`Student-${t.userId.slice(-4).toUpperCase()}`,g=Ne==="full"?t.displayName:Ne==="initials"?Ya(t.displayName):f,j=Math.floor(t.leaderboardScore/25)*25,$=Oe||x?`${t.leaderboardScore} pts`:`${j}-${j+24} pts`;return{...t,rank:m,isSelf:x,displayName:g,scoreLabel:$}}),[dt,Ne,Oe,r?.uid]);l.useEffect(()=>{if(c!=="leaderboard")return;let t=!0;return nt(!0),(async()=>{const m=await Fa(20);t&&(Lt(m),nt(!1))})(),()=>{t=!1}},[c]);const Be=l.useCallback(async()=>{if(r?.uid)try{const t=await Nt();if(t.sessionType==="match"&&t.match){w(!1),k(t.room||null),v(t.match),i("battle"),S("connected");return}if(t.sessionType==="room"&&t.room){w(!1),k(t.room),v(n=>n?.mode==="bot"?n:null),S("connected");return}if(t.sessionType==="queue"){w(!0),k(null),v(n=>n?.mode==="bot"?n:null),S("connected");return}w(!1),k(null),v(n=>n?.mode==="bot"?n:null),S("connected")}catch(t){console.warn("Quiz Battle session resume failed:",t),S("reconnecting")}},[r?.uid]);l.useEffect(()=>{r?.uid&&Be()},[r?.uid,Be]),l.useEffect(()=>{typeof window>"u"||window.localStorage.setItem("quiz_battle_sound_enabled",H?"1":"0")},[H]),l.useEffect(()=>{if(!(A||u&&(u.status==="waiting"||u.status==="ready"))){oe(0);return}const t=window.setInterval(()=>{oe(n=>n+1)},1e3);return()=>{window.clearInterval(t)}},[A,u?.status,u?.roomId]),l.useEffect(()=>{if(typeof window>"u")return;S(window.navigator.onLine?"connected":"disconnected");const t=()=>{S("reconnecting"),Be()},n=()=>{S("disconnected")};return window.addEventListener("online",t),window.addEventListener("offline",n),()=>{window.removeEventListener("online",t),window.removeEventListener("offline",n)}},[Be]),l.useEffect(()=>{const t=o?.mode==="online"&&(o.status==="ready"||o.status==="in_progress"),n=!!(u&&(u.status==="waiting"||u.status==="ready"));if(!A&&!n&&!t)return;let m=!1;const x=async()=>{try{if(o?.mode==="online"){if(o.status==="ready"){const j=await re(o.matchId);if(m)return;v(j),S("connected"),j.status==="in_progress"&&h({status:"queued",message:"Match started. Round timer is live."});return}const g=await Ge(o.matchId);if(m)return;v(g),g.status==="completed"&&(w(!1),k(null)),S("connected");return}if(u?.roomId){const g=await za({roomId:u.roomId});if(m)return;if(k(g.room),g.match){const j=await re(g.match.matchId);if(m)return;v(j),k(g.room),w(!1),i("battle"),S("connected"),h({status:"queued",message:j.status==="ready"?"Opponent connected. Waiting for synchronized start...":"Private room match started."})}return}if(A){const g=await Nt();if(m)return;if(g.sessionType==="match"&&g.match){const j=await re(g.match.matchId);if(m)return;v(j),k(g.room||null),w(!1),i("battle"),S("connected"),h({status:"queued",message:"Opponent found. Preparing synchronized start..."});return}if(g.sessionType==="room"&&g.room){w(!1),k(g.room),S("connected");return}S("connected")}}catch(g){m||(console.warn("Quiz Battle sync poll failed:",g),S("reconnecting"))}};x();const f=window.setInterval(()=>{x()},3e3);return()=>{m=!0,window.clearInterval(f)}},[o?.matchId,o?.mode,o?.status,u?.roomId,u?.status,A]);const ae=l.useMemo(()=>o?.mode==="online"&&(o.status==="ready"||o.status==="in_progress")?{scope:"match",resourceId:o.matchId}:u&&(u.status==="waiting"||u.status==="ready")?{scope:"room",resourceId:u.roomId}:A&&r?.uid?{scope:"queue",resourceId:r.uid}:null,[o,u,A,r?.uid]);l.useEffect(()=>{if(!ae)return;let t=!1;const n=async()=>{try{await Pa(ae.scope,ae.resourceId),t||S("connected")}catch(x){t||(console.warn("Quiz Battle heartbeat failed:",x),S("reconnecting"))}};n();const m=window.setInterval(()=>{n()},8e3);return()=>{t=!0,window.clearInterval(m),Ca(ae.scope,ae.resourceId)}},[ae?.scope,ae?.resourceId]),l.useEffect(()=>{if(!o||o.status!=="in_progress"){L(!1),de.current=null,Y.current=0;return}de.current=null,Y.current=0;const t=o.roundDeadlineAtMs?Math.max(0,Math.ceil((o.roundDeadlineAtMs-Date.now())/1e3)):o.timePerQuestionSec;je(t),D(null),L(!1)},[o?.matchId,o?.status,o?.currentRound,o?.timePerQuestionSec]),l.useEffect(()=>{const t=o?.lifecycle;if(!t?.eventType)return;const n=`${t.eventType}:${t.sequence}`;it.current!==n&&(it.current=n,t.eventType==="answer_locked"?te("lock"):t.eventType==="round_result"&&te("result"))},[o?.lifecycle?.eventType,o?.lifecycle?.sequence,te]),l.useEffect(()=>{!o||o.status!=="completed"||ct.current!==o.matchId&&(ct.current=o.matchId,te(o.outcome==="loss"?"loss":"win"),o.outcome==="win"&&Jt(()=>import("./confetti.module-C94ZD2ww.js"),[]).then(t=>{t.default({particleCount:110,spread:78,origin:{y:.62},ticks:160})}).catch(()=>{}))},[o?.matchId,o?.status,o?.outcome,te]),l.useEffect(()=>{if(!o||o.status!=="in_progress"||U||J){Ue.current=null;return}z<=3&&z>0&&Ue.current!==z&&(Ue.current=z,te("tick"))},[o?.status,z,U,J,te]);const We=l.useCallback(async t=>{if(!o||o.status!=="in_progress"||U)return;ye(!0);const n=window.setTimeout(()=>{ye(!1),h({status:"error",message:"Submission took too long. Syncing latest match state now..."}),Ge(o.matchId).then(m=>{v(m),m.status==="completed"&&(w(!1),k(null))}).catch(()=>{})},12e3);try{const m=o.roundDeadlineAtMs?Ga(o.timePerQuestionSec*1e3-Math.max(0,o.roundDeadlineAtMs-Date.now()),0,o.timePerQuestionSec*1e3):Math.max(0,(o.timePerQuestionSec-z)*1e3),x=await La({matchId:o.matchId,roundNumber:o.currentRound,selectedOptionIndex:t,responseMs:m});de.current=null,Y.current=0,v(x.match),ee(x.roundResult),D(null),x.match.mode==="online"&&x.match.status==="in_progress"&&!x.roundResult&&(L(!0),h({status:"queued",message:"Answer locked. Waiting for opponent to finish the round..."})),x.match.status==="completed"&&(w(!1),k(null),ie(),h({status:"queued",message:x.completion?`Match finished (${x.completion.outcome.toUpperCase()}) +${x.completion.xpEarned} XP`:"Match finished. Results saved."}))}catch(m){const f=m?.message||"Unable to submit answer right now. Please try again.";if(t===null||f.includes("Round timer elapsed")||f.includes("Expected round")||f.includes("Match is not currently active"))try{const j=await Ge(o.matchId),$=j.currentRound!==o.currentRound;if(v(j),D(null),L(!1),$||j.status==="completed"?(de.current=null,Y.current=0):t===null&&(Y.current=Date.now()+3e3),j.status==="completed"){w(!1),k(null),ie(),h({status:"queued",message:"Match finished. Results synchronized."});return}h({status:"queued",message:"Round timed out. Synced to the latest battle state."});return}catch{}t===null&&(Y.current=Date.now()+3e3),h({status:"error",message:f})}finally{window.clearTimeout(n),ye(!1)}},[o,ie,U,z]);l.useEffect(()=>{if(!o||o.status!=="in_progress"||J||U)return;const t=o.roundDeadlineAtMs?Math.max(0,Math.ceil((o.roundDeadlineAtMs-Date.now())/1e3)):z;if(o.roundDeadlineAtMs&&t!==z&&je(t),Se===null?t<=1:t<=0){if(de.current===o.currentRound&&Date.now()<Y.current)return;de.current=o.currentRound,Y.current=Date.now()+3e3,We(null);return}const m=window.setTimeout(()=>{o.roundDeadlineAtMs?je(Math.max(0,Math.ceil((o.roundDeadlineAtMs-Date.now())/1e3))):je(x=>Math.max(0,x-1))},1e3);return()=>{window.clearTimeout(m)}},[o,J,U,z,Se,We]);const Ut=l.useCallback(async()=>{if(!(!o||o.mode!=="bot")){ye(!0),h({status:"validating"});try{const t=await $a(o.matchId),n=await re(t.matchId);v(n),k(null),w(!1),ee(null),D(null),L(!1),i("battle"),h({status:"queued",message:`Rematch ready (${t.botDifficulty}). Good luck!`})}catch(t){h({status:"error",message:t?.message||"Unable to start rematch right now."})}finally{ye(!1)}}},[o]);if(s!=="student")return e.jsx("div",{className:"px-4 sm:px-6 xl:px-10 py-6 sm:py-8",children:e.jsx(P,{className:b(_,"max-w-2xl"),children:e.jsxs(F,{children:[e.jsx(O,{children:"Quiz Battle is student-only"}),e.jsx(W,{className:"text-muted-foreground dark:text-[#aab3c7]",children:"Your account role does not have access to this module."})]})})});const mt=t=>{y([]),h({status:"idle"}),w(!1),k(null),ge(""),v(null),ee(null),D(null),L(!1),p(n=>({...n,mode:t,queueType:t==="online"?n.queueType:"public_matchmaking"})),oe(0),i("setup")},xt=t=>{y([]),h({status:"idle"}),w(!1),k(null),ge(""),v(null),ee(null),D(null),L(!1),oe(0),p(n=>({...n,mode:t,queueType:t==="online"?n.queueType:"public_matchmaking"}))},ft=async()=>{h({status:"validating"});try{u?.roomId?await Ea({roomId:u.roomId}):await Ta(),w(!1),k(null),v(t=>!t||t.mode!=="online"?t:t.status==="ready"||t.status==="cancelled"?null:t),ge(""),oe(0),h({status:"queued",message:u?.roomId?"Private room cancelled.":"Left matchmaking queue."})}catch(t){h({status:"error",message:t?.message||"Unable to cancel this online session right now. Please try again."})}},Wt=async()=>{h({status:"validating"});const t=Ba(d);if(t.length>0){y(t),h({status:"error",message:"Fix the highlighted setup fields before starting."});return}y([]);try{if(d.mode==="online"){if(d.queueType==="private_room"){const f=_e.trim().toUpperCase(),g=f?await qa(f):await Qa(d);if(w(!1),k(g.room),ge(""),g.match){const j=await re(g.match.matchId);v(j),ee(null),D(null),L(!1),i("battle"),h({status:"queued",message:j.status==="ready"?`Room ${g.room.roomCode} linked. Waiting for synchronized start...`:"Private room match started."});return}v(null),h({status:"queued",message:f?"Joined private room. Waiting for opponent...":"Private room created. Share code:"});return}const x=await Aa(d);if(x.status==="matched"&&x.matchId){const f=await re(x.matchId);w(!1),k(null),v(f),ee(null),D(null),L(!1),i("battle"),h({status:"queued",message:"Opponent found. Preparing synchronized start..."});return}w(!0),k(null),v(null),oe(0),h({status:"queued",message:"Joined matchmaking queue. Waiting for an opponent..."});return}const n=await _a(d),m=await re(n.matchId);w(!1),k(null),v(m),ee(null),D(null),L(!1),je(m.timePerQuestionSec),i("battle"),h({status:"queued",message:`Bot match ${n.matchId.slice(0,8)} live (${n.botDifficulty}).`}),ie().then(x=>{x&&(Le(x.stats),Fe(x.history))})}catch(n){w(!1),h({status:"error",message:n?.message||"Unable to start battle. Please try again."})}},Q=t=>C.find(n=>n.field===t)?.message,Vt=G?.winRate??0,bt=!!(d.mode==="online"&&u&&(u.status==="waiting"||u.status==="ready")&&(!o||o.status!=="completed")),Ht=!!(A||u&&(u.status==="waiting"||u.status==="ready")&&(!o||o.status==="ready"||o.status==="cancelled"));return e.jsx("div",{className:"h-full flex flex-col px-4 sm:px-6 xl:px-10 py-6 sm:py-8",children:e.jsxs(se.div,{initial:{opacity:0,y:16},animate:{opacity:1,y:0},transition:{duration:.24,ease:[.22,1,.36,1]},className:"space-y-6",children:[e.jsxs(P,{className:b(_,"relative overflow-hidden rounded-[20px]"),children:[e.jsx("div",{className:"pointer-events-none absolute inset-0 bg-gradient-to-br from-primary/8 via-primary/4 to-transparent dark:bg-[radial-gradient(circle_at_15%_15%,rgba(140,125,255,0.28),transparent_45%),radial-gradient(circle_at_85%_20%,rgba(121,79,255,0.17),transparent_40%)]"}),e.jsxs(F,{className:"relative z-10 pb-4",children:[e.jsxs(O,{className:"flex items-center gap-2 text-2xl font-black tracking-tight text-foreground dark:text-[#f5f7fb]",children:[e.jsx(yt,{className:"h-5 w-5 text-primary dark:text-[#9e8fff]"}),"Quiz Battle"]}),e.jsx(W,{className:"text-muted-foreground dark:text-[#c4cce0]",children:"Timed student duels with synchronized rounds, instant feedback, and progression rewards."}),e.jsxs("p",{className:"text-xs font-semibold uppercase tracking-wide text-muted-foreground dark:text-[#9ea8c2]",children:["Connection: ",Pt]})]}),e.jsxs(X,{className:"relative z-10 grid grid-cols-2 md:grid-cols-4 gap-3 pb-6",children:[e.jsxs("div",{className:"rounded-2xl border border-border bg-muted/50 p-3 dark:border-[#30374a] dark:bg-[#11151d]",children:[e.jsx("p",{className:"text-xs text-muted-foreground dark:text-[#9da7bf]",children:"Win Rate"}),e.jsxs("p",{className:"tabular-nums text-lg font-bold text-foreground dark:text-[#f5f7fb]",children:[Vt.toFixed(1),"%"]})]}),e.jsxs("div",{className:"rounded-2xl border border-border bg-muted/50 p-3 dark:border-[#30374a] dark:bg-[#11151d]",children:[e.jsx("p",{className:"text-xs text-muted-foreground dark:text-[#9da7bf]",children:"Matches"}),e.jsx("p",{className:"tabular-nums text-lg font-bold text-foreground dark:text-[#f5f7fb]",children:G?.matchesPlayed||0})]}),e.jsxs("div",{className:"rounded-2xl border border-border bg-muted/50 p-3 dark:border-[#30374a] dark:bg-[#11151d]",children:[e.jsx("p",{className:"text-xs text-muted-foreground dark:text-[#9da7bf]",children:"Best Streak"}),e.jsx("p",{className:"tabular-nums text-lg font-bold text-foreground dark:text-[#f5f7fb]",children:G?.bestStreak||0})]}),e.jsxs("div",{className:"rounded-2xl border border-border bg-muted/50 p-3 dark:border-[#30374a] dark:bg-[#11151d]",children:[e.jsx("p",{className:"text-xs text-muted-foreground dark:text-[#9da7bf]",children:"Avg Response"}),e.jsx("p",{className:"tabular-nums text-lg font-bold text-foreground dark:text-[#f5f7fb]",children:St(G?.averageResponseMs||0)})]})]})]}),e.jsxs(Oa,{value:c,onValueChange:t=>i(t),children:[e.jsxs(Ua,{className:"w-full md:w-auto rounded-2xl p-1.5",children:[e.jsx(xe,{value:"hub",className:"rounded-xl",children:"Hub"}),e.jsx(xe,{value:"setup",className:"rounded-xl",children:"Setup"}),e.jsx(xe,{value:"battle",className:"rounded-xl",children:"Battle"}),e.jsx(xe,{value:"history",className:"rounded-xl",children:"History"}),e.jsx(xe,{value:"stats",className:"rounded-xl",children:"My Stats"}),e.jsx(xe,{value:"leaderboard",className:"rounded-xl",children:"Leaderboard"})]}),e.jsx(fe,{value:"hub",className:"mt-5",children:e.jsxs(se.div,{initial:{opacity:0,y:12},animate:{opacity:1,y:0},exit:{opacity:0,y:-12},className:"space-y-5",children:[e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[e.jsxs("button",{type:"button",onClick:()=>mt("online"),className:"text-left rounded-[18px] border border-border bg-card p-5 transition-colors hover:border-primary/60 hover:bg-accent/40 dark:border-[#333a4e] dark:bg-[#171d2a] dark:hover:border-[#8c7dff] dark:hover:bg-[#202736]",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{className:"flex items-center gap-2 text-foreground dark:text-[#f5f7fb] font-semibold",children:[e.jsx(Me,{className:"h-4 w-4 text-primary dark:text-[#9e8fff]"}),"1v1 Online"]}),e.jsx(Ve,{className:"h-4 w-4 text-muted-foreground dark:text-[#a2abc2]"})]}),e.jsx("p",{className:"mt-2 text-sm text-muted-foreground dark:text-[#b3bdd5]",children:"Queue or room-code match with another student."})]}),e.jsxs("button",{type:"button",onClick:()=>mt("bot"),className:"text-left rounded-[18px] border border-border bg-card p-5 transition-colors hover:border-primary/60 hover:bg-accent/40 dark:border-[#333a4e] dark:bg-[#171d2a] dark:hover:border-[#8c7dff] dark:hover:bg-[#202736]",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{className:"flex items-center gap-2 text-foreground dark:text-[#f5f7fb] font-semibold",children:[e.jsx(pt,{className:"h-4 w-4 text-primary dark:text-[#9e8fff]"}),"1v1 vs Bot"]}),e.jsx(Ve,{className:"h-4 w-4 text-muted-foreground dark:text-[#a2abc2]"})]}),e.jsx("p",{className:"mt-2 text-sm text-muted-foreground dark:text-[#b3bdd5]",children:"Instant solo duel with selectable bot difficulty."})]})]}),e.jsxs(P,{className:b(_,"rounded-[18px]"),children:[e.jsx(F,{children:e.jsxs(O,{className:"text-base flex items-center gap-2",children:[e.jsx(ha,{className:"h-4 w-4 text-primary dark:text-[#9e8fff]"})," Recent Matches"]})}),e.jsx(X,{className:"space-y-2",children:ot?e.jsxs("div",{className:"space-y-2",children:[e.jsx(Z,{className:"h-12 w-full rounded-xl bg-muted dark:bg-[#2a3143]"}),e.jsx(Z,{className:"h-12 w-full rounded-xl bg-muted dark:bg-[#2a3143]"}),e.jsx(Z,{className:"h-12 w-full rounded-xl bg-muted dark:bg-[#2a3143]"})]}):Ie.length===0?e.jsx("p",{className:"text-sm text-muted-foreground dark:text-[#a8b2c9]",children:"No battle history yet. Start your first duel."}):Ie.slice(0,5).map(t=>e.jsxs("div",{className:"rounded-xl border border-border bg-muted/40 px-3 py-2 flex items-center justify-between dark:border-[#2f3547] dark:bg-[#11151d]",children:[e.jsxs("div",{children:[e.jsxs("p",{className:"text-sm font-semibold text-foreground dark:text-[#f5f7fb]",children:["vs ",t.opponentName]}),e.jsxs("p",{className:"text-xs text-muted-foreground dark:text-[#95a0bb]",children:[t.subjectId," Β· ",t.difficulty]})]}),e.jsxs("div",{className:"text-right",children:[e.jsxs("p",{className:"tabular-nums text-sm font-semibold text-foreground dark:text-[#f5f7fb]",children:[t.scoreFor," - ",t.scoreAgainst]}),e.jsx("p",{className:b("inline-flex items-center rounded-full px-2 py-0.5 text-xs font-medium",t.outcome==="win"?"bg-emerald-100 text-emerald-800 dark:bg-emerald-500/15 dark:text-emerald-300":t.outcome==="loss"?"bg-rose-100 text-rose-800 dark:bg-rose-500/15 dark:text-rose-300":"bg-amber-100 text-amber-800 dark:bg-amber-500/15 dark:text-amber-300"),children:Ct(t.outcome)})]})]},t.matchId))})]})]},"hub")}),e.jsx(fe,{value:"setup",className:"mt-5",children:e.jsx(se.div,{initial:{opacity:0,y:12},animate:{opacity:1,y:0},exit:{opacity:0,y:-12},className:"space-y-4",children:e.jsxs(P,{className:b(_,"rounded-[18px]"),children:[e.jsxs(F,{children:[e.jsxs(O,{className:"text-base flex items-center gap-2",children:[e.jsx(la,{className:"h-4 w-4 text-primary dark:text-[#9e8fff]"})," Battle Setup"]}),e.jsx(W,{className:"text-muted-foreground dark:text-[#b2bad0]",children:"Configure a student-safe match and start quickly."})]}),e.jsxs(X,{className:"space-y-4",children:[e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-3",children:[e.jsxs("div",{className:"space-y-1.5",children:[e.jsx("label",{className:"text-xs font-semibold text-foreground dark:text-[#c7cfe3]",children:"Mode"}),e.jsxs("div",{className:"grid grid-cols-2 gap-2",children:[e.jsx(I,{type:"button",variant:d.mode==="online"?"default":"outline",onClick:()=>xt("online"),className:"h-10 rounded-xl",children:"1v1 Online"}),e.jsx(I,{type:"button",variant:d.mode==="bot"?"default":"outline",onClick:()=>xt("bot"),className:"h-10 rounded-xl",children:"1v1 vs Bot"})]})]}),e.jsxs("div",{className:"space-y-1.5",children:[e.jsx("label",{className:"text-xs font-semibold text-foreground dark:text-[#c7cfe3]",children:"Category"}),e.jsxs(ce,{value:d.subjectId,onValueChange:t=>p(n=>({...n,subjectId:t})),children:[e.jsx(le,{className:b("rounded-xl",Q("subjectId")&&"border-rose-400"),children:e.jsx(ue,{placeholder:"Select category"})}),e.jsx(me,{children:K.map(t=>e.jsx(E,{value:t.id,children:t.title},t.id))})]}),Q("subjectId")&&e.jsx("p",{className:"text-xs text-destructive dark:text-rose-300",children:Q("subjectId")})]}),e.jsxs("div",{className:"space-y-1.5",children:[e.jsx("label",{className:"text-xs font-semibold text-foreground dark:text-[#c7cfe3]",children:"Strand / Topic Group"}),e.jsxs(ce,{value:d.topicId,onValueChange:t=>p(n=>({...n,topicId:t})),children:[e.jsx(le,{className:b("rounded-xl",Q("topicId")&&"border-rose-400"),children:e.jsx(ue,{placeholder:"Select topic group"})}),e.jsx(me,{children:Ot.map(t=>e.jsx(E,{value:t.value,children:t.label},t.value))})]}),Q("topicId")&&e.jsx("p",{className:"text-xs text-destructive dark:text-rose-300",children:Q("topicId")})]}),e.jsxs("div",{className:"space-y-1.5",children:[e.jsx("label",{className:"text-xs font-semibold text-foreground dark:text-[#c7cfe3]",children:"Difficulty"}),e.jsxs(ce,{value:d.mode==="bot"?d.botDifficulty:d.difficulty,onValueChange:t=>p(n=>n.mode==="bot"?{...n,botDifficulty:t}:{...n,difficulty:t}),children:[e.jsx(le,{className:"rounded-xl",children:e.jsx(ue,{})}),e.jsxs(me,{children:[e.jsx(E,{value:"easy",children:"Easy"}),e.jsx(E,{value:"medium",children:"Medium"}),e.jsx(E,{value:"hard",children:"Hard"}),d.mode==="bot"&&e.jsx(E,{value:"adaptive",children:"Adaptive"})]})]})]}),e.jsxs("div",{className:"space-y-1.5",children:[e.jsx("label",{className:"text-xs font-semibold text-foreground dark:text-[#c7cfe3]",children:"Number of Questions"}),e.jsxs(ce,{value:String(d.rounds),onValueChange:t=>p(n=>({...n,rounds:Number(t)})),children:[e.jsx(le,{className:b("rounded-xl",Q("rounds")&&"border-rose-400"),children:e.jsx(ue,{})}),e.jsx(me,{children:[3,5,7,10,12,15].map(t=>e.jsx(E,{value:String(t),children:t},t))})]}),Q("rounds")&&e.jsx("p",{className:"text-xs text-destructive dark:text-rose-300",children:Q("rounds")})]}),e.jsxs("div",{className:"space-y-1.5",children:[e.jsx("label",{className:"text-xs font-semibold text-foreground dark:text-[#c7cfe3]",children:"Time per Question"}),e.jsxs(ce,{value:String(d.timePerQuestionSec),onValueChange:t=>p(n=>({...n,timePerQuestionSec:Number(t)})),children:[e.jsx(le,{className:b("rounded-xl",Q("timePerQuestionSec")&&"border-rose-400"),children:e.jsx(ue,{})}),e.jsx(me,{children:[15,20,30,45,60,90].map(t=>e.jsxs(E,{value:String(t),children:[t," sec"]},t))})]}),Q("timePerQuestionSec")&&e.jsx("p",{className:"text-xs text-destructive dark:text-rose-300",children:Q("timePerQuestionSec")})]})]}),e.jsxs(Wa,{open:N,onOpenChange:he,children:[e.jsx(Va,{asChild:!0,children:e.jsxs(I,{type:"button",variant:"outline",className:"w-full justify-between rounded-xl",children:["Advanced settings",e.jsx(Ve,{className:b("h-4 w-4 transition-transform",N&&"rotate-90")})]})}),e.jsxs(Ha,{className:"mt-3 rounded-xl border border-border bg-muted/40 p-3 space-y-3 dark:border-[#2e364a] dark:bg-[#11151d]",children:[d.mode==="online"?e.jsxs("div",{className:"space-y-3",children:[e.jsx("label",{className:"text-xs font-semibold text-foreground dark:text-[#c7cfe3]",children:"Online Match Type"}),e.jsx("div",{className:"grid grid-cols-2 gap-2",children:[{value:"public_matchmaking",label:"Public Queue"},{value:"private_room",label:"Private Room"}].map(t=>e.jsx(I,{type:"button",variant:d.queueType===t.value?"default":"outline",className:"rounded-xl h-9",onClick:()=>p(n=>({...n,queueType:t.value})),children:t.label},t.value))}),d.queueType==="private_room"&&e.jsxs("div",{className:"space-y-2",children:[e.jsx("label",{className:"text-xs font-semibold text-foreground dark:text-[#c7cfe3]",children:"Room Code (optional)"}),e.jsx(ca,{value:_e,onChange:t=>ge(t.target.value.toUpperCase().replace(/[^A-Z0-9]/g,"").slice(0,6)),placeholder:"Leave blank to create a room",className:"rounded-xl uppercase tracking-[0.15em]",maxLength:6}),e.jsx("div",{className:"rounded-xl border border-amber-300 bg-amber-50 px-3 py-2.5 text-[13px] font-semibold text-amber-900 dark:border-amber-500/40 dark:bg-amber-500/10 dark:text-amber-200",children:"Enter a room code to join an existing battle, or leave it blank to create a new room and share your code."})]})]}):e.jsxs(e.Fragment,{children:[e.jsxs("label",{className:"flex items-center justify-between rounded-xl border border-border bg-card p-3 dark:border-[#2f3547] dark:bg-[#171d2a]",children:[e.jsxs("div",{children:[e.jsx("p",{className:"text-sm font-semibold text-foreground dark:text-[#ecf0fb]",children:"Adaptive Bot"}),e.jsx("p",{className:"text-xs text-muted-foreground dark:text-[#a9b3ca]",children:"Tune response timing and accuracy to your recent trend."})]}),e.jsx(Re,{checked:d.adaptiveBot,onCheckedChange:t=>p(n=>({...n,adaptiveBot:t,botDifficulty:t?"adaptive":n.botDifficulty==="adaptive"?"medium":n.botDifficulty}))})]}),e.jsxs("label",{className:"flex items-center justify-between rounded-xl border border-border bg-card p-3 dark:border-[#2f3547] dark:bg-[#171d2a]",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[H?e.jsx(wt,{className:"h-4 w-4 text-primary dark:text-[#9e8fff]"}):e.jsx(kt,{className:"h-4 w-4 text-muted-foreground"}),e.jsxs("div",{children:[e.jsx("p",{className:"text-sm font-semibold text-foreground dark:text-[#ecf0fb]",children:"Battle Sounds"}),e.jsx("p",{className:"text-xs text-muted-foreground dark:text-[#a9b3ca]",children:"Play audio cues for countdowns and results."})]})]}),e.jsx(Re,{checked:H,onCheckedChange:rt})]})]}),d.mode==="online"&&e.jsxs("label",{className:"flex items-center justify-between rounded-xl border border-border bg-card p-3 dark:border-[#2f3547] dark:bg-[#171d2a]",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[H?e.jsx(wt,{className:"h-4 w-4 text-primary dark:text-[#9e8fff]"}):e.jsx(kt,{className:"h-4 w-4 text-muted-foreground"}),e.jsxs("div",{children:[e.jsx("p",{className:"text-sm font-semibold text-foreground dark:text-[#ecf0fb]",children:"Battle Sounds"}),e.jsx("p",{className:"text-xs text-muted-foreground dark:text-[#a9b3ca]",children:"Play audio cues for countdowns and results."})]})]}),e.jsx(Re,{checked:H,onCheckedChange:rt})]})]})]}),e.jsxs("div",{className:"flex flex-col sm:flex-row gap-2 sm:items-center sm:justify-between",children:[e.jsxs("div",{"aria-live":"polite",className:"min-h-[24px] text-sm text-muted-foreground dark:text-[#b6bfd5]",children:[q.status==="queued"&&e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[q.message,d.mode==="online"&&d.queueType==="private_room"&&u?.roomCode&&e.jsxs(I,{type:"button",variant:"outline",className:b("h-7 rounded-full border-amber-300/70 bg-amber-100/80 px-3 text-[11px] font-black uppercase tracking-[0.16em] text-amber-900 hover:bg-amber-200 dark:border-amber-500/50 dark:bg-amber-500/15 dark:text-amber-200 dark:hover:bg-amber-500/25",ve===u.roomCode?"border-emerald-400/80 bg-emerald-100 text-emerald-900 dark:border-emerald-400/70 dark:bg-emerald-500/20 dark:text-emerald-200":null),onClick:()=>void lt(u.roomCode),"aria-label":`Copy room code ${u.roomCode}`,children:[ve===u.roomCode?e.jsx(jt,{className:"h-3.5 w-3.5"}):e.jsx(gt,{className:"h-3.5 w-3.5"}),u.roomCode]}),(A||bt)&&st>0&&e.jsxs("span",{className:"inline-flex items-center gap-1 rounded-md bg-primary/10 px-2 py-0.5 text-xs font-semibold text-primary dark:bg-[#8c7dff]/20 dark:text-[#c7c0ff]",children:["Waiting ",Ja(st)]})]}),q.status==="error"&&e.jsx("span",{className:"text-destructive dark:text-rose-300",children:q.message}),q.status==="validating"&&e.jsxs("span",{className:"inline-flex items-center gap-2 text-foreground dark:text-[#d5dcf0]",children:[e.jsx(He,{className:"h-4 w-4 animate-spin"})," Validating setup..."]})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[Ht&&e.jsx(I,{type:"button",variant:"outline",onClick:ft,disabled:q.status==="validating",className:"rounded-xl",children:u?"Cancel room":"Leave queue"}),e.jsx(I,{type:"button",onClick:Wt,disabled:q.status==="validating"||A||bt,className:"rounded-xl",children:q.status==="validating"?e.jsxs("span",{className:"inline-flex items-center gap-2",children:[e.jsx(He,{className:"h-4 w-4 animate-spin"})," Starting..."]}):d.mode==="online"&&d.queueType==="private_room"?_e.trim()?"Join room":"Create room":"Start battle"})]})]})]})]})},"setup")}),e.jsx(fe,{value:"battle",className:"mt-5",children:e.jsx(se.div,{initial:{opacity:0,y:12},animate:{opacity:1,y:0},exit:{opacity:0,y:-12},className:"space-y-4",children:o?e.jsxs(P,{className:b(_,"rounded-[18px]"),children:[e.jsxs(F,{children:[e.jsxs(O,{className:"text-base flex items-center justify-between gap-3",children:[e.jsxs("span",{className:"inline-flex items-center gap-2",children:[o.mode==="bot"?e.jsx(pt,{className:"h-4 w-4 text-primary dark:text-[#9e8fff]"}):e.jsx(Me,{className:"h-4 w-4 text-primary dark:text-[#9e8fff]"}),"vs ",o.opponentName]}),e.jsxs("span",{className:"text-sm font-bold tabular-nums",children:[o.scoreFor," - ",o.scoreAgainst]})]}),e.jsx(W,{className:"text-muted-foreground dark:text-[#b2bad0]",children:o.status==="completed"?`Completed in ${o.totalRounds} rounds.`:o.status==="ready"?"Waiting for both players to confirm and start together.":`Round ${o.currentRound} of ${o.totalRounds}`}),It(o.lifecycle,r?.uid)&&e.jsx("p",{className:"text-xs font-medium text-muted-foreground dark:text-[#9aa4be]",children:It(o.lifecycle,r?.uid)})]}),e.jsxs(X,{className:"space-y-4",children:[o.status==="ready"&&e.jsx("div",{className:"rounded-xl border border-border bg-muted/30 p-3 dark:border-[#2f3547] dark:bg-[#11151d]",children:e.jsx("p",{className:"text-sm font-semibold text-foreground dark:text-[#ecf0fb]",children:o.mode==="online"?"Waiting for both players to lock in start...":"Preparing match session..."})}),o.status==="in_progress"&&o.currentQuestion&&e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"rounded-xl border border-border bg-muted/40 p-3 dark:border-[#2f3547] dark:bg-[#11151d]",children:[e.jsxs("p",{className:"text-xs text-muted-foreground dark:text-[#9aa4be]",children:["Time left: ",e.jsxs("span",{className:"font-semibold tabular-nums",children:[z,"s"]})]}),e.jsx("p",{className:"mt-2 text-sm font-semibold text-foreground dark:text-[#ecf0fb]",children:o.currentQuestion.prompt})]}),e.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-2",children:o.currentQuestion.choices.map((t,n)=>e.jsxs(I,{type:"button",variant:Se===n?"default":"outline",onClick:()=>D(n),disabled:J||U,className:"h-auto min-h-11 rounded-xl justify-start text-left whitespace-normal",children:[e.jsxs("span",{className:"mr-2 font-semibold",children:[String.fromCharCode(65+n),"."]}),t]},`${o.currentQuestion?.questionId}-${n}`))}),e.jsx("div",{className:"flex justify-end",children:e.jsx(I,{type:"button",onClick:()=>void We(Se),disabled:J||U,className:"rounded-xl",children:J?e.jsxs("span",{className:"inline-flex items-center gap-2",children:[e.jsx(He,{className:"h-4 w-4 animate-spin"})," Submitting..."]}):U?"Waiting for opponent...":"Lock Answer"})})]}),Ce&&e.jsxs("div",{className:"rounded-xl border border-border bg-muted/30 p-3 dark:border-[#2f3547] dark:bg-[#11151d]",children:[e.jsxs("p",{className:"text-sm font-semibold text-foreground dark:text-[#ecf0fb]",children:["Last round: ",Ce.studentCorrect?"Correct":"Incorrect"," Β· ",o.mode==="bot"?"Bot":"Opponent"," ",Ce.botCorrect?"Correct":"Incorrect"]}),e.jsxs("p",{className:"text-xs text-muted-foreground dark:text-[#9aa4be]",children:["Correct option: ",String.fromCharCode(65+Ce.correctOptionIndex)]})]}),o.status==="completed"&&e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{className:b("rounded-2xl border p-4",o.outcome==="win"?"border-emerald-300 bg-emerald-50 dark:border-emerald-400/40 dark:bg-emerald-900/20":o.outcome==="loss"?"border-rose-300 bg-rose-50 dark:border-rose-400/40 dark:bg-rose-900/20":"border-amber-300 bg-amber-50 dark:border-amber-400/40 dark:bg-amber-900/20"),children:[e.jsx("p",{className:"text-lg font-black tracking-wide text-foreground dark:text-[#ecf0fb]",children:o.outcome==="win"?"Victory!":o.outcome==="loss"?"Match Complete":"Draw Match"}),e.jsxs("p",{className:"mt-1 text-sm font-semibold text-foreground dark:text-[#ecf0fb]",children:["Final Score: ",o.scoreFor," - ",o.scoreAgainst]}),e.jsxs("p",{className:"text-xs text-muted-foreground dark:text-[#9aa4be]",children:["XP Earned: +",o.xpEarned||0]})]}),e.jsxs("div",{className:"flex items-center justify-end gap-2",children:[e.jsx(I,{type:"button",variant:"outline",onClick:()=>{k(null),w(!1),i("setup")},className:"rounded-xl",children:"Start New Match"}),o.mode==="bot"&&e.jsx(I,{type:"button",onClick:()=>void Ut(),disabled:J,className:"rounded-xl",children:"Rematch"})]})]})]})]}):u?e.jsxs(P,{className:b(_,"rounded-[18px]"),children:[e.jsxs(F,{children:[e.jsxs(O,{className:"text-base flex items-center gap-2",children:[e.jsx(Me,{className:"h-4 w-4 text-primary dark:text-[#9e8fff]"}),"Private Room Lobby"]}),e.jsxs(W,{className:"text-muted-foreground dark:text-[#b2bad0]",children:["Room ",u.roomCode," Β· ",u.participantCount,"/2 students connected."]})]}),e.jsx(X,{className:"space-y-3",children:e.jsxs("div",{className:"rounded-xl border border-border bg-muted/30 p-3 dark:border-[#2f3547] dark:bg-[#11151d]",children:[e.jsx("p",{className:"text-sm font-semibold text-foreground dark:text-[#ecf0fb]",children:u.status==="ready"?"Opponent connected. Syncing start...":"Waiting for another student to join this room."}),e.jsxs("p",{className:"text-xs text-muted-foreground dark:text-[#9aa4be]",children:["Share room code ",u.roomCode," with your classmate."]}),e.jsxs("div",{className:"mt-3 flex flex-wrap items-center justify-end gap-2",children:[(u.status==="waiting"||u.status==="ready")&&e.jsx(I,{type:"button",variant:"outline",className:"h-8 rounded-lg",onClick:ft,disabled:q.status==="validating",children:"Cancel room"}),e.jsxs(I,{type:"button",variant:"outline",className:"h-8 rounded-lg",onClick:()=>void lt(u.roomCode),children:[ve===u.roomCode?e.jsx(jt,{className:"h-4 w-4"}):e.jsx(gt,{className:"h-4 w-4"}),ve===u.roomCode?"Copied":"Copy code"]})]})]})})]}):A?e.jsx(P,{className:b(_,"rounded-[18px]"),children:e.jsxs(F,{children:[e.jsxs(O,{className:"text-base flex items-center gap-2",children:[e.jsx(Me,{className:"h-4 w-4 text-primary dark:text-[#9e8fff]"}),"Public Matchmaking"]}),e.jsx(W,{className:"text-muted-foreground dark:text-[#b2bad0]",children:"Searching for a student with the same setup..."})]})}):e.jsx(P,{className:b(_,"rounded-[18px]"),children:e.jsxs(F,{children:[e.jsxs(O,{className:"text-base flex items-center gap-2",children:[e.jsx(yt,{className:"h-4 w-4 text-primary dark:text-[#9e8fff]"}),"No active battle"]}),e.jsx(W,{className:"text-muted-foreground dark:text-[#b2bad0]",children:"Start from Setup to create a bot match, private room, or public queue session."})]})})},"battle")}),e.jsx(fe,{value:"history",className:"mt-5",children:e.jsx(se.div,{initial:{opacity:0,y:12},animate:{opacity:1,y:0},exit:{opacity:0,y:-12},className:"space-y-4",children:e.jsxs(P,{className:b(_,"rounded-[18px]"),children:[e.jsxs(F,{children:[e.jsx(O,{className:"text-base",children:"Match History"}),e.jsx(W,{className:"text-muted-foreground dark:text-[#b2bad0]",children:"Your recent student battles only."})]}),e.jsxs(X,{className:"space-y-3",children:[e.jsx("div",{className:"flex gap-2",children:[{value:"all",label:"All"},{value:"online",label:"Online"},{value:"bot",label:"Bot"}].map(t=>e.jsx(I,{type:"button",variant:ne===t.value?"default":"outline",onClick:()=>_t(t.value),className:"rounded-xl h-8 px-3",children:t.label},t.value))}),ot?e.jsxs("div",{className:"space-y-2",children:[e.jsx(Z,{className:"h-12 w-full rounded-xl bg-muted dark:bg-[#2a3143]"}),e.jsx(Z,{className:"h-12 w-full rounded-xl bg-muted dark:bg-[#2a3143]"})]}):Ie.length===0?e.jsx("p",{className:"text-sm text-muted-foreground dark:text-[#a8b2c9]",children:"No matches in this filter yet."}):Ie.map(t=>e.jsxs("div",{className:"rounded-xl border border-border bg-muted/40 px-3 py-2 flex items-center justify-between gap-3 dark:border-[#2f3547] dark:bg-[#11151d]",children:[e.jsxs("div",{children:[e.jsxs("p",{className:"text-sm font-semibold text-foreground dark:text-[#f5f7fb]",children:["vs ",t.opponentName]}),e.jsxs("p",{className:"text-xs text-muted-foreground dark:text-[#95a0bb] tabular-nums",children:[t.scoreFor,"-",t.scoreAgainst," Β· ",t.accuracy.toFixed(0),"% Β· +",t.xpEarned," XP"]})]}),e.jsx("span",{className:b("text-xs font-semibold rounded-full px-2.5 py-1 border",t.outcome==="win"?"text-emerald-700 border-emerald-200 bg-emerald-50 dark:text-emerald-300 dark:border-emerald-300/40 dark:bg-emerald-900/20":t.outcome==="loss"?"text-rose-700 border-rose-200 bg-rose-50 dark:text-rose-300 dark:border-rose-300/40 dark:bg-rose-900/20":"text-amber-700 border-amber-200 bg-amber-50 dark:text-amber-300 dark:border-amber-300/40 dark:bg-amber-900/20"),children:Ct(t.outcome)})]},t.matchId))]})]})},"history")}),e.jsx(fe,{value:"stats",className:"mt-5",children:e.jsx(se.div,{initial:{opacity:0,y:12},animate:{opacity:1,y:0},exit:{opacity:0,y:-12},className:"grid grid-cols-1 md:grid-cols-2 xl:grid-cols-4 gap-4",children:[{label:"Wins",value:G?.wins??0,icon:ua},{label:"Current streak",value:G?.currentStreak??0,icon:ma},{label:"Avg accuracy",value:`${(G?.averageAccuracy||0).toFixed(1)}%`,icon:xa},{label:"Avg response",value:St(G?.averageResponseMs||0),icon:ba}].map(t=>e.jsx(P,{className:b(_,"rounded-[18px]"),children:e.jsxs(X,{className:"pt-6",children:[e.jsx("p",{className:"text-xs text-muted-foreground dark:text-[#9da7bf]",children:t.label}),e.jsx("p",{className:"mt-1 tabular-nums text-2xl font-black text-foreground dark:text-[#f5f7fb]",children:t.value}),e.jsx(t.icon,{className:"mt-3 h-4 w-4 text-primary dark:text-[#9e8fff]"})]})},t.label))},"stats")}),e.jsx(fe,{value:"leaderboard",className:"mt-5",children:e.jsx(se.div,{initial:{opacity:0,y:12},animate:{opacity:1,y:0},exit:{opacity:0,y:-12},children:e.jsxs(P,{className:b(_,"rounded-[18px]"),children:[e.jsxs(F,{children:[e.jsxs(O,{className:"text-base flex items-center gap-2",children:[e.jsx(Yt,{className:"h-4 w-4 text-primary dark:text-[#9e8fff]"})," Student Leaderboard"]}),e.jsx(W,{className:"text-muted-foreground dark:text-[#b2bad0]",children:"Student-only ranking using trusted backend aggregates."})]}),e.jsx(X,{children:Dt?e.jsxs("div",{className:"space-y-2",children:[e.jsx(Z,{className:"h-12 w-full rounded-xl bg-muted dark:bg-[#2a3143]"}),e.jsx(Z,{className:"h-12 w-full rounded-xl bg-muted dark:bg-[#2a3143]"}),e.jsx(Z,{className:"h-12 w-full rounded-xl bg-muted dark:bg-[#2a3143]"})]}):ut.length===0?e.jsx("p",{className:"text-sm text-muted-foreground dark:text-[#a9b3ca]",children:"No leaderboard entries yet. Finish a battle to place on the board."}):e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-2",children:[e.jsxs("div",{className:"rounded-xl border border-border bg-muted/30 p-2.5 dark:border-[#2f3547] dark:bg-[#11151d]",children:[e.jsx("p",{className:"text-[11px] font-semibold uppercase tracking-wide text-muted-foreground dark:text-[#98a2bc]",children:"Name display"}),e.jsxs(ce,{value:Ne,onValueChange:t=>$t(t),children:[e.jsx(le,{className:"mt-1 h-8 rounded-lg",children:e.jsx(ue,{})}),e.jsxs(me,{children:[e.jsx(E,{value:"alias",children:"Alias"}),e.jsx(E,{value:"initials",children:"Initials"}),e.jsx(E,{value:"full",children:"Full name"})]})]})]}),e.jsxs("label",{className:"rounded-xl border border-border bg-muted/30 p-2.5 flex items-center justify-between gap-3 dark:border-[#2f3547] dark:bg-[#11151d]",children:[e.jsxs("div",{children:[e.jsx("p",{className:"text-[11px] font-semibold uppercase tracking-wide text-muted-foreground dark:text-[#98a2bc]",children:"Score detail"}),e.jsx("p",{className:"text-xs text-muted-foreground dark:text-[#98a2bc]",children:"Show exact score values"})]}),e.jsx(Re,{checked:Oe,onCheckedChange:Ft})]})]}),e.jsx("p",{className:"text-xs text-muted-foreground dark:text-[#95a0bb]",children:"Privacy mode keeps classmate identities and scores obfuscated by default while preserving your own exact rank and score."}),ut.map(t=>e.jsxs("div",{className:b("rounded-xl border bg-muted/30 px-3 py-2 flex items-center justify-between dark:bg-[#11151d]",t.isSelf?"border-primary/60 dark:border-[#8d7fff]":"border-border dark:border-[#2f3547]"),children:[e.jsxs("div",{children:[e.jsxs("p",{className:"text-sm font-semibold text-foreground dark:text-[#f5f7fb]",children:["#",t.rank," ",t.displayName,t.isSelf?" (You)":""]}),e.jsxs("p",{className:"text-xs text-muted-foreground dark:text-[#95a0bb]",children:["Win rate ",t.winRate.toFixed(1),"% Β· Best streak ",t.bestStreak]})]}),e.jsx("p",{className:"tabular-nums text-sm font-semibold text-foreground dark:text-[#f5f7fb]",children:t.scoreLabel})]},t.userId))]})})]})},"leaderboard")})]})]})})};export{Ss as default};
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/{RewardsModal-Ligjd-Ky.js β†’ RewardsModal-HRePzoUo.js} RENAMED
@@ -1 +1 @@
1
- import{j as e}from"./vendor-react-Dexh7fmo.js";import{X as h}from"./x-DwrHgz_L.js";import{i as o,F as d,Z as f}from"./index-DUxNDyEU.js";import{S as n}from"./star-D2vv-PRB.js";import{T as g}from"./trophy-qEvM2_M2.js";import{T as j}from"./target-CkzwB53m.js";import{B as u}from"./book-open-B5Fr9j0O.js";import{A as N}from"./award-UT1_i9UI.js";import{C as v}from"./calendar-DOp6N-WM.js";import{U as w}from"./users-B8Q5DwX3.js";import{T as y}from"./trending-up-KXZvyUp1.js";import"./vendor-firebase-auth-COrkgW0P.js";import"./vendor-firebase-core-DQ-pMjxd.js";import"./vendor-firebase-firestore-BML5nJHm.js";import"./vendor-firebase-storage-BOeKE_0n.js";import"./vendor-firebase-analytics-CCo6E2f7.js";const R=({isOpen:c,onClose:r,userLevel:t,currentXP:i,xpToNextLevel:a,totalXP:x,streak:m})=>{if(!c)return null;const b=[{id:"1",icon:n,title:"First Steps",description:"Complete your first video lesson",unlocked:!0,color:"text-[#9956DE]",bgColor:"bg-[#FB96BB]/20"},{id:"2",icon:g,title:"Quiz Master",description:"Score 100% on any quiz",unlocked:!1,color:"text-slate-500",bgColor:"bg-slate-100"},{id:"3",icon:d,title:"Week Warrior",description:"Maintain a 7-day login streak",progress:2,total:7,unlocked:!1,color:"text-slate-500",bgColor:"bg-slate-100"},{id:"4",icon:j,title:"Practice Makes Perfect",description:"Complete 10 practice sets",progress:2,total:10,unlocked:!1,color:"text-slate-500",bgColor:"bg-slate-100"},{id:"5",icon:u,title:"Knowledge Seeker",description:"Watch 20 video lessons",unlocked:!0,color:"text-[#1FA7E1]",bgColor:"bg-[#6ED1CF]/20"},{id:"6",icon:f,title:"Speed Learner",description:"Complete 5 lessons in one day",unlocked:!0,color:"text-[#FFB356]",bgColor:"bg-[#FFB356]/20"},{id:"7",icon:o,title:"Crown Achiever",description:"Reach Level 10",progress:4,total:10,unlocked:!1,color:"text-slate-500",bgColor:"bg-slate-100"},{id:"8",icon:N,title:"XP Hunter",description:"Earn 1000 XP",unlocked:!0,color:"text-[#7274ED]",bgColor:"bg-[#7274ED]/15"},{id:"9",icon:v,title:"Dedicated Learner",description:"Maintain a 14-day streak",progress:2,total:14,unlocked:!1,color:"text-slate-500",bgColor:"bg-slate-100"},{id:"10",icon:w,title:"Monthly Champion",description:"Maintain a 30-day streak",progress:2,total:30,unlocked:!1,color:"text-slate-500",bgColor:"bg-slate-100"}],p=[{activity:"Complete a video lesson",xp:50},{activity:"Complete exercises",xp:100},{activity:"Perfect quiz score",xp:150},{activity:"Finish a quiz",xp:75},{activity:"Daily login streak",xp:25}];return e.jsxs("div",{className:"fixed inset-0 z-50 flex items-center justify-center p-8",children:[e.jsx("div",{className:"absolute inset-0 bg-black/50 backdrop-blur-sm",onClick:r}),e.jsxs("div",{className:"relative bg-[#f7f9fc] rounded-2xl shadow-2xl border border-[#dde3eb] w-full max-w-2xl max-h-[85vh] overflow-hidden",children:[e.jsxs("div",{className:"bg-gradient-to-r from-[#9956DE] via-[#7274ED] to-[#1FA7E1] p-6 text-white relative overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-[radial-gradient(circle_at_14%_12%,rgba(251,150,187,0.35),transparent_42%),radial-gradient(circle_at_80%_80%,rgba(117,208,106,0.25),transparent_38%)]"}),e.jsxs("div",{className:"flex items-center justify-between mb-4 relative z-10",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-display font-bold",children:"Rewards & Achievements"}),e.jsx("p",{className:"text-white/90 text-sm font-body",children:"Track your learning progress and unlock badges"})]}),e.jsx("button",{onClick:r,className:"text-white/90 hover:text-white hover:bg-white/20 p-2 rounded-xl transition-colors",children:e.jsx(h,{size:24})})]}),e.jsxs("div",{className:"grid grid-cols-3 gap-3 relative z-10",children:[e.jsxs("div",{className:"bg-white/15 backdrop-blur-sm rounded-xl p-4 border border-white/25",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-1",children:[e.jsx(o,{size:18,className:"text-[#FFB356]"}),e.jsx("span",{className:"text-xs font-medium text-white/90 font-body",children:"Level"})]}),e.jsx("p",{className:"text-2xl font-bold",children:t})]}),e.jsxs("div",{className:"bg-white/15 backdrop-blur-sm rounded-xl p-4 border border-white/25",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-1",children:[e.jsx(n,{size:18,className:"text-[#6ED1CF]"}),e.jsx("span",{className:"text-xs font-medium text-white/90 font-body",children:"Total XP"})]}),e.jsx("p",{className:"text-2xl font-bold",children:x.toLocaleString()})]}),e.jsxs("div",{className:"bg-white/15 backdrop-blur-sm rounded-xl p-4 border border-white/25",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-1",children:[e.jsx(d,{size:18,className:"text-[#FF8B8B]"}),e.jsx("span",{className:"text-xs font-medium text-white/90 font-body",children:"Day Streak"})]}),e.jsxs("p",{className:"text-2xl font-bold",children:[m," days"]})]})]}),e.jsxs("div",{className:"mt-4 relative z-10",children:[e.jsxs("div",{className:"flex justify-between items-center mb-2",children:[e.jsxs("span",{className:"text-sm font-bold text-white font-body",children:["Level ",t]}),e.jsxs("span",{className:"text-sm font-bold text-white font-body",children:["Level ",t+1]})]}),e.jsxs("div",{className:"relative",children:[e.jsx("div",{className:"flex justify-between items-center mb-1",children:e.jsxs("span",{className:"text-xs text-white/90",children:[i," / ",a," XP"]})}),e.jsx("div",{className:"h-3 bg-white/20 rounded-full overflow-hidden border border-white/20",children:e.jsx("div",{className:"h-full bg-gradient-to-r from-[#6ED1CF] via-[#75D06A] to-[#FFB356] rounded-full transition-all duration-500",style:{width:`${i/a*100}%`}})})]})]})]}),e.jsxs("div",{className:"p-6 overflow-y-auto max-h-[calc(85vh-280px)]",children:[e.jsxs("div",{className:"mb-6",children:[e.jsx("h3",{className:"text-lg font-display font-bold text-[#0a1628] mb-4",children:"Achievements"}),e.jsx("div",{className:"grid grid-cols-2 gap-3",children:b.map(s=>{const l=s.icon;return e.jsx("div",{className:`${s.unlocked?"bg-white border-[#9956DE]/25":"bg-[#edf1f7] border-[#dde3eb]"} border-2 rounded-xl p-4 transition-all ${s.unlocked?"shadow-md":"opacity-60"}`,children:e.jsxs("div",{className:"flex items-start gap-3",children:[e.jsx("div",{className:`w-12 h-12 ${s.bgColor} rounded-xl flex items-center justify-center flex-shrink-0`,children:e.jsx(l,{size:24,className:s.color})}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-1",children:[e.jsx("h4",{className:`text-sm font-bold ${s.unlocked?"text-[#0a1628]":"text-slate-500"} font-body`,children:s.title}),s.unlocked&&e.jsx("span",{className:"px-2 py-0.5 bg-[#75D06A] text-white text-[9px] font-bold rounded-full",children:"Unlocked"})]}),e.jsx("p",{className:`text-xs ${s.unlocked?"text-[#5a6578]":"text-slate-500"} mb-2`,children:s.description}),s.progress!==void 0&&s.total!==void 0&&e.jsxs("div",{children:[e.jsxs("div",{className:"flex justify-between items-center mb-1",children:[e.jsx("span",{className:"text-[10px] text-slate-500",children:"Progress"}),e.jsxs("span",{className:"text-[10px] font-bold text-[#5a6578]",children:[s.progress," / ",s.total]})]}),e.jsx("div",{className:"h-1.5 bg-[#dde3eb] rounded-full overflow-hidden",children:e.jsx("div",{className:"h-full bg-gradient-to-r from-[#7274ED] to-[#1FA7E1] rounded-full transition-all",style:{width:`${s.progress/s.total*100}%`}})})]})]})]})},s.id)})})]}),e.jsxs("div",{className:"bg-white rounded-xl p-5 border border-[#dde3eb]",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-4",children:[e.jsx("div",{className:"w-8 h-8 bg-gradient-to-br from-[#7274ED] to-[#1FA7E1] rounded-lg flex items-center justify-center",children:e.jsx(y,{size:16,className:"text-white"})}),e.jsx("h3",{className:"text-base font-display font-bold text-[#0a1628]",children:"How to Earn XP"})]}),e.jsx("div",{className:"grid grid-cols-2 gap-2",children:p.map((s,l)=>e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("div",{className:"w-1.5 h-1.5 bg-[#1FA7E1] rounded-full"}),e.jsxs("span",{className:"text-xs text-[#5a6578] font-body",children:[s.activity,":"]}),e.jsxs("span",{className:"text-xs font-bold text-[#7274ED]",children:["+",s.xp," XP"]})]},l))})]})]})]})]})};export{R as default};
 
1
+ import{j as e}from"./vendor-react-Dexh7fmo.js";import{X as h}from"./x-BONnp2RF.js";import{i as o,F as d,Z as f}from"./index-D4nJsLyx.js";import{S as n}from"./star-dumQ9BVG.js";import{T as g}from"./trophy-C2nVcZnb.js";import{T as j}from"./target-D7SVtf3g.js";import{B as u}from"./book-open-BH50GByv.js";import{A as N}from"./award-oJTbc9W5.js";import{C as v}from"./calendar-BJ8oE6yW.js";import{U as w}from"./users-HMf2sdE3.js";import{T as y}from"./trending-up-D-vj8Gbq.js";import"./vendor-firebase-auth-COrkgW0P.js";import"./vendor-firebase-core-DQ-pMjxd.js";import"./vendor-firebase-firestore-BML5nJHm.js";import"./vendor-firebase-storage-BOeKE_0n.js";import"./vendor-firebase-analytics-CCo6E2f7.js";const R=({isOpen:c,onClose:r,userLevel:t,currentXP:i,xpToNextLevel:a,totalXP:x,streak:m})=>{if(!c)return null;const b=[{id:"1",icon:n,title:"First Steps",description:"Complete your first video lesson",unlocked:!0,color:"text-[#9956DE]",bgColor:"bg-[#FB96BB]/20"},{id:"2",icon:g,title:"Quiz Master",description:"Score 100% on any quiz",unlocked:!1,color:"text-slate-500",bgColor:"bg-slate-100"},{id:"3",icon:d,title:"Week Warrior",description:"Maintain a 7-day login streak",progress:2,total:7,unlocked:!1,color:"text-slate-500",bgColor:"bg-slate-100"},{id:"4",icon:j,title:"Practice Makes Perfect",description:"Complete 10 practice sets",progress:2,total:10,unlocked:!1,color:"text-slate-500",bgColor:"bg-slate-100"},{id:"5",icon:u,title:"Knowledge Seeker",description:"Watch 20 video lessons",unlocked:!0,color:"text-[#1FA7E1]",bgColor:"bg-[#6ED1CF]/20"},{id:"6",icon:f,title:"Speed Learner",description:"Complete 5 lessons in one day",unlocked:!0,color:"text-[#FFB356]",bgColor:"bg-[#FFB356]/20"},{id:"7",icon:o,title:"Crown Achiever",description:"Reach Level 10",progress:4,total:10,unlocked:!1,color:"text-slate-500",bgColor:"bg-slate-100"},{id:"8",icon:N,title:"XP Hunter",description:"Earn 1000 XP",unlocked:!0,color:"text-[#7274ED]",bgColor:"bg-[#7274ED]/15"},{id:"9",icon:v,title:"Dedicated Learner",description:"Maintain a 14-day streak",progress:2,total:14,unlocked:!1,color:"text-slate-500",bgColor:"bg-slate-100"},{id:"10",icon:w,title:"Monthly Champion",description:"Maintain a 30-day streak",progress:2,total:30,unlocked:!1,color:"text-slate-500",bgColor:"bg-slate-100"}],p=[{activity:"Complete a video lesson",xp:50},{activity:"Complete exercises",xp:100},{activity:"Perfect quiz score",xp:150},{activity:"Finish a quiz",xp:75},{activity:"Daily login streak",xp:25}];return e.jsxs("div",{className:"fixed inset-0 z-50 flex items-center justify-center p-8",children:[e.jsx("div",{className:"absolute inset-0 bg-black/50 backdrop-blur-sm",onClick:r}),e.jsxs("div",{className:"relative bg-[#f7f9fc] rounded-2xl shadow-2xl border border-[#dde3eb] w-full max-w-2xl max-h-[85vh] overflow-hidden",children:[e.jsxs("div",{className:"bg-gradient-to-r from-[#9956DE] via-[#7274ED] to-[#1FA7E1] p-6 text-white relative overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-[radial-gradient(circle_at_14%_12%,rgba(251,150,187,0.35),transparent_42%),radial-gradient(circle_at_80%_80%,rgba(117,208,106,0.25),transparent_38%)]"}),e.jsxs("div",{className:"flex items-center justify-between mb-4 relative z-10",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-display font-bold",children:"Rewards & Achievements"}),e.jsx("p",{className:"text-white/90 text-sm font-body",children:"Track your learning progress and unlock badges"})]}),e.jsx("button",{onClick:r,className:"text-white/90 hover:text-white hover:bg-white/20 p-2 rounded-xl transition-colors",children:e.jsx(h,{size:24})})]}),e.jsxs("div",{className:"grid grid-cols-3 gap-3 relative z-10",children:[e.jsxs("div",{className:"bg-white/15 backdrop-blur-sm rounded-xl p-4 border border-white/25",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-1",children:[e.jsx(o,{size:18,className:"text-[#FFB356]"}),e.jsx("span",{className:"text-xs font-medium text-white/90 font-body",children:"Level"})]}),e.jsx("p",{className:"text-2xl font-bold",children:t})]}),e.jsxs("div",{className:"bg-white/15 backdrop-blur-sm rounded-xl p-4 border border-white/25",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-1",children:[e.jsx(n,{size:18,className:"text-[#6ED1CF]"}),e.jsx("span",{className:"text-xs font-medium text-white/90 font-body",children:"Total XP"})]}),e.jsx("p",{className:"text-2xl font-bold",children:x.toLocaleString()})]}),e.jsxs("div",{className:"bg-white/15 backdrop-blur-sm rounded-xl p-4 border border-white/25",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-1",children:[e.jsx(d,{size:18,className:"text-[#FF8B8B]"}),e.jsx("span",{className:"text-xs font-medium text-white/90 font-body",children:"Day Streak"})]}),e.jsxs("p",{className:"text-2xl font-bold",children:[m," days"]})]})]}),e.jsxs("div",{className:"mt-4 relative z-10",children:[e.jsxs("div",{className:"flex justify-between items-center mb-2",children:[e.jsxs("span",{className:"text-sm font-bold text-white font-body",children:["Level ",t]}),e.jsxs("span",{className:"text-sm font-bold text-white font-body",children:["Level ",t+1]})]}),e.jsxs("div",{className:"relative",children:[e.jsx("div",{className:"flex justify-between items-center mb-1",children:e.jsxs("span",{className:"text-xs text-white/90",children:[i," / ",a," XP"]})}),e.jsx("div",{className:"h-3 bg-white/20 rounded-full overflow-hidden border border-white/20",children:e.jsx("div",{className:"h-full bg-gradient-to-r from-[#6ED1CF] via-[#75D06A] to-[#FFB356] rounded-full transition-all duration-500",style:{width:`${i/a*100}%`}})})]})]})]}),e.jsxs("div",{className:"p-6 overflow-y-auto max-h-[calc(85vh-280px)]",children:[e.jsxs("div",{className:"mb-6",children:[e.jsx("h3",{className:"text-lg font-display font-bold text-[#0a1628] mb-4",children:"Achievements"}),e.jsx("div",{className:"grid grid-cols-2 gap-3",children:b.map(s=>{const l=s.icon;return e.jsx("div",{className:`${s.unlocked?"bg-white border-[#9956DE]/25":"bg-[#edf1f7] border-[#dde3eb]"} border-2 rounded-xl p-4 transition-all ${s.unlocked?"shadow-md":"opacity-60"}`,children:e.jsxs("div",{className:"flex items-start gap-3",children:[e.jsx("div",{className:`w-12 h-12 ${s.bgColor} rounded-xl flex items-center justify-center flex-shrink-0`,children:e.jsx(l,{size:24,className:s.color})}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-1",children:[e.jsx("h4",{className:`text-sm font-bold ${s.unlocked?"text-[#0a1628]":"text-slate-500"} font-body`,children:s.title}),s.unlocked&&e.jsx("span",{className:"px-2 py-0.5 bg-[#75D06A] text-white text-[9px] font-bold rounded-full",children:"Unlocked"})]}),e.jsx("p",{className:`text-xs ${s.unlocked?"text-[#5a6578]":"text-slate-500"} mb-2`,children:s.description}),s.progress!==void 0&&s.total!==void 0&&e.jsxs("div",{children:[e.jsxs("div",{className:"flex justify-between items-center mb-1",children:[e.jsx("span",{className:"text-[10px] text-slate-500",children:"Progress"}),e.jsxs("span",{className:"text-[10px] font-bold text-[#5a6578]",children:[s.progress," / ",s.total]})]}),e.jsx("div",{className:"h-1.5 bg-[#dde3eb] rounded-full overflow-hidden",children:e.jsx("div",{className:"h-full bg-gradient-to-r from-[#7274ED] to-[#1FA7E1] rounded-full transition-all",style:{width:`${s.progress/s.total*100}%`}})})]})]})]})},s.id)})})]}),e.jsxs("div",{className:"bg-white rounded-xl p-5 border border-[#dde3eb]",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-4",children:[e.jsx("div",{className:"w-8 h-8 bg-gradient-to-br from-[#7274ED] to-[#1FA7E1] rounded-lg flex items-center justify-center",children:e.jsx(y,{size:16,className:"text-white"})}),e.jsx("h3",{className:"text-base font-display font-bold text-[#0a1628]",children:"How to Earn XP"})]}),e.jsx("div",{className:"grid grid-cols-2 gap-2",children:p.map((s,l)=>e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("div",{className:"w-1.5 h-1.5 bg-[#1FA7E1] rounded-full"}),e.jsxs("span",{className:"text-xs text-[#5a6578] font-body",children:[s.activity,":"]}),e.jsxs("span",{className:"text-xs font-bold text-[#7274ED]",children:["+",s.xp," XP"]})]},l))})]})]})]})]})};export{R as default};
assets/{RightSidebar-uaRo-cl-.js β†’ RightSidebar-Dfek3lmU.js} RENAMED
@@ -1 +1 @@
1
- import{r as m,j as e}from"./vendor-react-Dexh7fmo.js";import{e as g,m as r,Z as f,F as p,i as x}from"./index-DUxNDyEU.js";import{C as v}from"./circle-check-big-CXPh4ph_.js";import{T as j,a as w,b as N}from"./tooltip-BV3U-RJu.js";import{T as y}from"./trophy-qEvM2_M2.js";import{C as h}from"./chevron-right-CSxxBxL8.js";import{S as C}from"./star-D2vv-PRB.js";import"./vendor-firebase-auth-COrkgW0P.js";import"./vendor-firebase-core-DQ-pMjxd.js";import"./vendor-firebase-firestore-BML5nJHm.js";import"./vendor-firebase-storage-BOeKE_0n.js";import"./vendor-firebase-analytics-CCo6E2f7.js";import"./vendor-radix-BRdei-zg.js";import"./utils-BQQgILNW.js";import"./clsx-B-dksMZM.js";const b=[{id:1,title:"Daily challenge",subtitle:"Do your plan before 09:00 AM",bgColor:"bg-[#6ED1CF]",orbColor:"bg-[#50B8B6]",avatars:["https://i.pravatar.cc/150?img=1","https://i.pravatar.cc/150?img=5","https://i.pravatar.cc/150?img=8"],extraCount:4,icon:e.jsx(f,{size:24,fill:"currentColor",className:"text-white"})},{id:2,title:"Weekend Warrior",subtitle:"Complete 3 modules this weekend",bgColor:"bg-[#FF8B8B]",orbColor:"bg-[#E06A6A]",avatars:["https://i.pravatar.cc/150?img=12","https://i.pravatar.cc/150?img=32"],extraCount:12,icon:e.jsx(p,{size:24,fill:"currentColor",className:"text-white"})},{id:3,title:"Speed Runner",subtitle:"Finish a quiz in under 5 mins",bgColor:"bg-[#75D06A]",orbColor:"bg-[#58B34D]",avatars:["https://i.pravatar.cc/150?img=44","https://i.pravatar.cc/150?img=55","https://i.pravatar.cc/150?img=68"],extraCount:8,icon:e.jsx(v,{size:24,className:"text-white"})}],_=(o=[])=>{const n=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],i=new Date,l=i.getDay(),a=[];for(let t=0;t<7;t++){const s=new Date(i);s.setDate(i.getDate()-l+t);const c=t===l,d=`${s.getFullYear()}-${String(s.getMonth()+1).padStart(2,"0")}-${String(s.getDate()).padStart(2,"0")}`,u=o.includes(d);a.push({dayName:n[t],dateNumber:s.getDate(),isToday:c,hasDot:u})}return a},k=({streakHistory:o=[]})=>{const[n,i]=m.useState(0),l=_(o);m.useEffect(()=>{const t=setInterval(()=>{i(s=>(s+1)%b.length)},5e3);return()=>clearInterval(t)},[]);const a=b[n];return e.jsxs("div",{className:"bg-white rounded-[24px] p-4 shadow-sm border border-slate-100 flex flex-col gap-6 mt-4 relative overflow-hidden",children:[e.jsx("div",{className:"relative h-[170px] rounded-[-20px] rounded-2xl overflow-hidden cursor-pointer group",children:e.jsx(g,{mode:"wait",children:e.jsxs(r.div,{initial:{opacity:0,x:20},animate:{opacity:1,x:0},exit:{opacity:0,x:-20},transition:{duration:.3},className:`absolute inset-0 ${a.bgColor} p-5 flex flex-col justify-between overflow-hidden`,children:[e.jsxs("div",{className:"absolute top-4 right-4 flex gap-1 items-center z-20",children:[e.jsx("div",{className:"w-3 h-1.5 rounded-full bg-white/60"}),e.jsx("div",{className:"w-1.5 h-1.5 rounded-full bg-white/40"}),e.jsx("div",{className:"w-1.5 h-1.5 rounded-full bg-white/40"})]}),e.jsx("div",{className:`absolute -right-4 -top-8 w-36 h-36 rounded-full ${a.orbColor} opacity-90 blur-2xl group-hover:scale-110 transition-transform duration-700 pointer-events-none`}),e.jsx("div",{className:"absolute right-4 bottom-4 w-[52px] h-[52px] rounded-2xl rotate-12 bg-white/20 backdrop-blur-md shadow-sm border border-white/20 group-hover:rotate-45 group-hover:scale-110 transition-transform duration-700 flex items-center justify-center",children:a.icon}),e.jsxs("div",{className:"relative z-10 w-3/4",children:[e.jsx("h3",{className:"font-display font-bold text-[22px] text-white mb-1",children:a.title}),e.jsx("p",{className:"text-[13px] font-medium text-white/80 leading-snug",children:a.subtitle})]}),e.jsxs("div",{className:"flex items-center -space-x-2.5 relative z-10 mt-auto",children:[a.avatars.map((t,s)=>e.jsx("img",{src:t,alt:"User",className:"w-[34px] h-[34px] rounded-full border-2 border-transparent object-cover relative z-[3] z-[2] z-[1]",style:{borderColor:a.bgColor.replace("bg-[","").replace("]","")}},s)),e.jsxs("div",{className:"w-[34px] h-[34px] rounded-full border-2 text-[12px] font-bold flex items-center justify-center text-white relative z-0",style:{backgroundColor:"rgba(0,0,0,0.2)",borderColor:a.bgColor.replace("bg-[","").replace("]","")},children:["+",a.extraCount]})]})]},a.id)})}),e.jsxs("div",{children:[e.jsx("h4",{className:"font-display text-[15px] font-bold text-[#141b2d] mb-4 px-1",children:"Your streak"}),e.jsx("div",{className:"flex justify-between items-center gap-1.5 px-0.5",children:l.map((t,s)=>e.jsxs("div",{className:`flex flex-col items-center pt-2 pb-3 w-[46px] h-[72px] rounded-[24px] border ${t.isToday?"bg-[#12192b] text-white border-transparent shadow-[0_8px_16px_rgba(18,25,43,0.3)] transform -translate-y-1":"bg-white text-slate-400 border-slate-200/80 hover:border-slate-300"} transition-all duration-200 cursor-pointer`,children:[e.jsx("div",{className:"h-1.5 flex items-center justify-center mb-1.5",children:t.hasDot?e.jsx("div",{className:`w-[5px] h-[5px] rounded-full ${t.isToday?"bg-white":"bg-slate-300"}`}):e.jsx("div",{className:`text-[10px] ${t.isToday?"text-white/50":"text-slate-200"} font-bold`,children:"+"})}),e.jsx("span",{className:`text-[11px] font-bold mb-1 ${t.isToday?"text-slate-300":"text-slate-400/80"}`,children:t.dayName}),e.jsx("span",{className:`text-[15px] font-bold leading-none ${t.isToday?"text-white":"text-[#334155]"}`,children:t.dateNumber})]},s))})]})]})},X=({onOpenRewards:o,onOpenLeaderboard:n,onNavigateToModules:i,userLevel:l,currentXP:a,xpToNextLevel:t,streak:s,streakHistory:c=[]})=>{const d=a/t*100;return e.jsxs("div",{className:"space-y-2.5",children:[e.jsxs(r.div,{initial:{opacity:0,y:12},animate:{opacity:1,y:0},transition:{delay:.1,duration:.4,ease:[.22,1,.36,1]},onClick:o,className:"rounded-2xl border border-[#9956DE]/25 cursor-pointer transition-all group relative overflow-hidden bg-gradient-to-br from-[#9956DE] via-[#7274ED] to-[#1FA7E1] hover:shadow-[0_16px_40px_rgba(114,116,237,0.28)] hover:-translate-y-0.5",children:[e.jsx("div",{className:"absolute inset-0 bg-[radial-gradient(circle_at_18%_8%,rgba(251,150,187,0.32),transparent_42%),radial-gradient(circle_at_85%_84%,rgba(117,208,106,0.24),transparent_40%)]"}),e.jsxs("div",{className:"relative z-10 p-3",children:[e.jsxs("div",{className:"flex items-center justify-between mb-3",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("div",{className:"w-9 h-9 bg-white/20 rounded-xl flex items-center justify-center border border-white/35 backdrop-blur-sm",children:e.jsx(y,{size:16,className:"text-white"})}),e.jsx("h3",{className:"font-display font-bold text-sm text-white tracking-wide",children:"Rewards & Achievements"})]}),e.jsx(h,{size:16,className:"text-white/80 group-hover:text-white group-hover:translate-x-0.5 transition-all"})]}),e.jsxs("div",{className:"flex items-center gap-2.5 mb-3",children:[e.jsxs("div",{className:"flex items-center gap-1.5 text-xs font-body px-2 py-1 rounded-md bg-white/14 border border-white/25 text-white",children:[e.jsx(x,{size:12,className:"text-[#FFB356]"}),e.jsxs("span",{className:"font-bold",children:["Lv ",l]})]}),e.jsx("div",{className:"w-px h-3 bg-white/35"}),e.jsxs(j,{children:[e.jsx(w,{asChild:!0,children:e.jsxs("button",{onClick:i,className:"flex items-center gap-1.5 text-xs font-body px-2 py-1 rounded-md bg-white/14 border border-white/25 text-white cursor-pointer hover:bg-white/20 transition-colors active:scale-95",children:[e.jsx(C,{size:12,className:"text-[#6ED1CF]"}),e.jsxs("span",{className:"font-bold",children:[a," XP"]})]})}),e.jsx(N,{side:"top",className:"bg-slate-900 text-white border border-slate-700",children:"Review more lessons to earn more XP!"})]}),e.jsx("div",{className:"w-px h-3 bg-white/35"}),e.jsxs("div",{className:"flex items-center gap-1.5 text-xs font-body px-2 py-1 rounded-md bg-white/14 border border-white/25 text-white",children:[e.jsx(p,{size:12,className:"text-[#FF8B8B]"}),e.jsxs("span",{className:"font-bold",children:[s,"d"]})]})]}),e.jsxs("div",{children:[e.jsxs("div",{className:"flex justify-between items-center mb-1.5",children:[e.jsxs("span",{className:"text-[11px] font-body text-white/90",children:["Next: Level ",l+1]}),e.jsxs("span",{className:"text-[11px] font-body font-semibold text-white",children:[Math.round(d),"%"]})]}),e.jsx("div",{className:"h-2 bg-white/25 rounded-full overflow-hidden border border-white/20",children:e.jsx(r.div,{initial:{width:0},animate:{width:`${d}%`},transition:{duration:1,ease:"easeOut"},className:"h-full bg-gradient-to-r from-[#6ED1CF] via-[#75D06A] to-[#FFB356] rounded-full"})})]})]})]}),e.jsx(r.div,{initial:{opacity:0,y:12},animate:{opacity:1,y:0},transition:{delay:.2,duration:.4,ease:[.22,1,.36,1]},children:e.jsx(k,{streakHistory:c})}),e.jsxs(r.div,{initial:{opacity:0,y:12},animate:{opacity:1,y:0},transition:{delay:.3,duration:.4,ease:[.22,1,.36,1]},onClick:n,className:"bg-white rounded-xl border border-slate-200/80 hover:shadow-md hover:border-amber-200/60 transition-all group overflow-hidden cursor-pointer",children:[e.jsxs("div",{className:"p-3 border-b border-slate-100 flex items-center justify-between",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("div",{className:"w-7 h-7 bg-amber-50 rounded-lg flex items-center justify-center border border-amber-200/60 transition-colors group-hover:bg-amber-100/50",children:e.jsx(x,{size:14,className:"text-amber-500"})}),e.jsx("h3",{className:"font-display font-bold text-sm text-[#0a1628]",children:"Leaderboards"})]}),e.jsx(h,{size:14,className:"text-slate-400 group-hover:translate-x-0.5 group-hover:text-amber-500 transition-transform"})]}),e.jsxs("div",{className:"pt-8 pb-3 px-2 bg-gradient-to-b from-slate-50/30 to-white flex items-end justify-center gap-1.5 min-h-[170px]",children:[e.jsxs("div",{className:"flex flex-col items-center relative z-10",children:[e.jsxs(r.div,{initial:{y:20,opacity:0},animate:{y:0,opacity:1},transition:{delay:.5},className:"relative mb-2",children:[e.jsx("img",{src:"https://i.pravatar.cc/150?img=33",alt:"You",className:"w-10 h-10 rounded-full border-[3px] border-sky-400 z-10 relative object-cover shadow-sm bg-white"}),e.jsx("div",{className:"absolute -bottom-2 left-1/2 -translate-x-1/2 bg-sky-500 text-white text-[10px] font-bold px-2 py-0.5 rounded-full z-20 shadow-sm",children:"2"})]}),e.jsxs(r.div,{initial:{height:0},animate:{height:"54px"},transition:{delay:.4,duration:.5,ease:"easeOut"},className:"w-[70px] bg-gradient-to-b from-slate-200 to-slate-100 rounded-t-xl rounded-b-md border-t-2 border-slate-50 flex items-center justify-center relative shadow-[inset_0_-4px_6px_rgba(0,0,0,0.05),0_4px_6px_rgba(0,0,0,0.05)]",children:[e.jsx("span",{className:"text-slate-400 font-black text-2xl opacity-40 translate-y-1",children:"2"}),e.jsx("div",{className:"absolute top-0 left-0 right-0 h-1.5 bg-white/70 rounded-t-xl"})]}),e.jsxs("div",{className:"mt-2 text-center",children:[e.jsx("span",{className:"block text-[12px] font-bold text-[#0a1628]",children:"You"}),e.jsx("span",{className:"block text-[10px] text-sky-600 font-bold",children:"2.1k XP"})]})]}),e.jsxs("div",{className:"flex flex-col items-center relative z-20 -mx-2",children:[e.jsxs(r.div,{initial:{y:20,opacity:0},animate:{y:0,opacity:1},transition:{delay:.7},className:"relative mb-2",children:[e.jsx("div",{className:"absolute -top-4 left-1/2 -translate-x-1/2 z-20",children:e.jsx(x,{size:22,className:"text-amber-400 drop-shadow-md mb-1",fill:"#fbbf24",strokeWidth:1.5})}),e.jsx("img",{src:"https://i.pravatar.cc/150?img=68",alt:"Alex",className:"w-[52px] h-[52px] rounded-full border-[3px] border-amber-400 z-10 relative object-cover shadow-md bg-white"}),e.jsx("div",{className:"absolute -bottom-2 left-1/2 -translate-x-1/2 bg-amber-500 text-white text-[10px] font-bold px-2 py-0.5 rounded-full z-20 shadow-sm",children:"1"})]}),e.jsxs(r.div,{initial:{height:0},animate:{height:"74px"},transition:{delay:.6,duration:.5,ease:"easeOut"},className:"w-[78px] bg-gradient-to-b from-amber-100 to-amber-50 rounded-t-xl rounded-b-md border-t-2 border-amber-50 flex items-center justify-center relative shadow-[inset_0_-4px_8px_rgba(251,191,36,0.1),0_6px_8px_rgba(0,0,0,0.05)]",children:[e.jsx("span",{className:"text-amber-400 font-black text-3xl opacity-50 translate-y-1",children:"1"}),e.jsx("div",{className:"absolute top-0 left-0 right-0 h-1.5 bg-white/80 rounded-t-xl"})]}),e.jsxs("div",{className:"mt-2 text-center",children:[e.jsx("span",{className:"block text-[13px] font-black text-[#0a1628]",children:"Alex M."}),e.jsx("span",{className:"block text-[11px] text-amber-600 font-bold",children:"2.4k XP"})]})]}),e.jsxs("div",{className:"flex flex-col items-center relative z-10",children:[e.jsxs(r.div,{initial:{y:20,opacity:0},animate:{y:0,opacity:1},transition:{delay:.6},className:"relative mb-2",children:[e.jsx("img",{src:"https://i.pravatar.cc/150?img=47",alt:"Sarah",className:"w-10 h-10 rounded-full border-[3px] border-orange-400 z-10 relative object-cover shadow-sm bg-white"}),e.jsx("div",{className:"absolute -bottom-2 left-1/2 -translate-x-1/2 bg-orange-500 text-white text-[10px] font-bold px-2 py-0.5 rounded-full z-20 shadow-sm",children:"3"})]}),e.jsxs(r.div,{initial:{height:0},animate:{height:"38px"},transition:{delay:.5,duration:.5,ease:"easeOut"},className:"w-[70px] bg-gradient-to-b from-orange-50 to-slate-50 rounded-t-xl rounded-b-md border-t-2 border-orange-100 flex items-center justify-center relative shadow-[inset_0_-4px_6px_rgba(249,115,22,0.05),0_4px_6px_rgba(0,0,0,0.02)]",children:[e.jsx("span",{className:"text-orange-400/60 font-black text-2xl opacity-60 translate-y-1",children:"3"}),e.jsx("div",{className:"absolute top-0 left-0 right-0 h-1.5 bg-white/70 rounded-t-xl"})]}),e.jsxs("div",{className:"mt-2 text-center",children:[e.jsx("span",{className:"block text-[12px] font-bold text-[#0a1628]",children:"Sarah K."}),e.jsx("span",{className:"block text-[10px] text-orange-600 font-bold",children:"1.9k XP"})]})]})]})]})]})};export{X as default};
 
1
+ import{r as m,j as e}from"./vendor-react-Dexh7fmo.js";import{e as g,m as r,Z as f,F as p,i as x}from"./index-D4nJsLyx.js";import{C as v}from"./circle-check-big-0Gzyt_f3.js";import{T as j,a as w,b as N}from"./tooltip-BV3U-RJu.js";import{T as y}from"./trophy-C2nVcZnb.js";import{C as h}from"./chevron-right-COMox1Xb.js";import{S as C}from"./star-dumQ9BVG.js";import"./vendor-firebase-auth-COrkgW0P.js";import"./vendor-firebase-core-DQ-pMjxd.js";import"./vendor-firebase-firestore-BML5nJHm.js";import"./vendor-firebase-storage-BOeKE_0n.js";import"./vendor-firebase-analytics-CCo6E2f7.js";import"./vendor-radix-BRdei-zg.js";import"./utils-BQQgILNW.js";import"./clsx-B-dksMZM.js";const b=[{id:1,title:"Daily challenge",subtitle:"Do your plan before 09:00 AM",bgColor:"bg-[#6ED1CF]",orbColor:"bg-[#50B8B6]",avatars:["https://i.pravatar.cc/150?img=1","https://i.pravatar.cc/150?img=5","https://i.pravatar.cc/150?img=8"],extraCount:4,icon:e.jsx(f,{size:24,fill:"currentColor",className:"text-white"})},{id:2,title:"Weekend Warrior",subtitle:"Complete 3 modules this weekend",bgColor:"bg-[#FF8B8B]",orbColor:"bg-[#E06A6A]",avatars:["https://i.pravatar.cc/150?img=12","https://i.pravatar.cc/150?img=32"],extraCount:12,icon:e.jsx(p,{size:24,fill:"currentColor",className:"text-white"})},{id:3,title:"Speed Runner",subtitle:"Finish a quiz in under 5 mins",bgColor:"bg-[#75D06A]",orbColor:"bg-[#58B34D]",avatars:["https://i.pravatar.cc/150?img=44","https://i.pravatar.cc/150?img=55","https://i.pravatar.cc/150?img=68"],extraCount:8,icon:e.jsx(v,{size:24,className:"text-white"})}],_=(o=[])=>{const n=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],i=new Date,l=i.getDay(),a=[];for(let t=0;t<7;t++){const s=new Date(i);s.setDate(i.getDate()-l+t);const c=t===l,d=`${s.getFullYear()}-${String(s.getMonth()+1).padStart(2,"0")}-${String(s.getDate()).padStart(2,"0")}`,u=o.includes(d);a.push({dayName:n[t],dateNumber:s.getDate(),isToday:c,hasDot:u})}return a},k=({streakHistory:o=[]})=>{const[n,i]=m.useState(0),l=_(o);m.useEffect(()=>{const t=setInterval(()=>{i(s=>(s+1)%b.length)},5e3);return()=>clearInterval(t)},[]);const a=b[n];return e.jsxs("div",{className:"bg-white rounded-[24px] p-4 shadow-sm border border-slate-100 flex flex-col gap-6 mt-4 relative overflow-hidden",children:[e.jsx("div",{className:"relative h-[170px] rounded-[-20px] rounded-2xl overflow-hidden cursor-pointer group",children:e.jsx(g,{mode:"wait",children:e.jsxs(r.div,{initial:{opacity:0,x:20},animate:{opacity:1,x:0},exit:{opacity:0,x:-20},transition:{duration:.3},className:`absolute inset-0 ${a.bgColor} p-5 flex flex-col justify-between overflow-hidden`,children:[e.jsxs("div",{className:"absolute top-4 right-4 flex gap-1 items-center z-20",children:[e.jsx("div",{className:"w-3 h-1.5 rounded-full bg-white/60"}),e.jsx("div",{className:"w-1.5 h-1.5 rounded-full bg-white/40"}),e.jsx("div",{className:"w-1.5 h-1.5 rounded-full bg-white/40"})]}),e.jsx("div",{className:`absolute -right-4 -top-8 w-36 h-36 rounded-full ${a.orbColor} opacity-90 blur-2xl group-hover:scale-110 transition-transform duration-700 pointer-events-none`}),e.jsx("div",{className:"absolute right-4 bottom-4 w-[52px] h-[52px] rounded-2xl rotate-12 bg-white/20 backdrop-blur-md shadow-sm border border-white/20 group-hover:rotate-45 group-hover:scale-110 transition-transform duration-700 flex items-center justify-center",children:a.icon}),e.jsxs("div",{className:"relative z-10 w-3/4",children:[e.jsx("h3",{className:"font-display font-bold text-[22px] text-white mb-1",children:a.title}),e.jsx("p",{className:"text-[13px] font-medium text-white/80 leading-snug",children:a.subtitle})]}),e.jsxs("div",{className:"flex items-center -space-x-2.5 relative z-10 mt-auto",children:[a.avatars.map((t,s)=>e.jsx("img",{src:t,alt:"User",className:"w-[34px] h-[34px] rounded-full border-2 border-transparent object-cover relative z-[3] z-[2] z-[1]",style:{borderColor:a.bgColor.replace("bg-[","").replace("]","")}},s)),e.jsxs("div",{className:"w-[34px] h-[34px] rounded-full border-2 text-[12px] font-bold flex items-center justify-center text-white relative z-0",style:{backgroundColor:"rgba(0,0,0,0.2)",borderColor:a.bgColor.replace("bg-[","").replace("]","")},children:["+",a.extraCount]})]})]},a.id)})}),e.jsxs("div",{children:[e.jsx("h4",{className:"font-display text-[15px] font-bold text-[#141b2d] mb-4 px-1",children:"Your streak"}),e.jsx("div",{className:"flex justify-between items-center gap-1.5 px-0.5",children:l.map((t,s)=>e.jsxs("div",{className:`flex flex-col items-center pt-2 pb-3 w-[46px] h-[72px] rounded-[24px] border ${t.isToday?"bg-[#12192b] text-white border-transparent shadow-[0_8px_16px_rgba(18,25,43,0.3)] transform -translate-y-1":"bg-white text-slate-400 border-slate-200/80 hover:border-slate-300"} transition-all duration-200 cursor-pointer`,children:[e.jsx("div",{className:"h-1.5 flex items-center justify-center mb-1.5",children:t.hasDot?e.jsx("div",{className:`w-[5px] h-[5px] rounded-full ${t.isToday?"bg-white":"bg-slate-300"}`}):e.jsx("div",{className:`text-[10px] ${t.isToday?"text-white/50":"text-slate-200"} font-bold`,children:"+"})}),e.jsx("span",{className:`text-[11px] font-bold mb-1 ${t.isToday?"text-slate-300":"text-slate-400/80"}`,children:t.dayName}),e.jsx("span",{className:`text-[15px] font-bold leading-none ${t.isToday?"text-white":"text-[#334155]"}`,children:t.dateNumber})]},s))})]})]})},X=({onOpenRewards:o,onOpenLeaderboard:n,onNavigateToModules:i,userLevel:l,currentXP:a,xpToNextLevel:t,streak:s,streakHistory:c=[]})=>{const d=a/t*100;return e.jsxs("div",{className:"space-y-2.5",children:[e.jsxs(r.div,{initial:{opacity:0,y:12},animate:{opacity:1,y:0},transition:{delay:.1,duration:.4,ease:[.22,1,.36,1]},onClick:o,className:"rounded-2xl border border-[#9956DE]/25 cursor-pointer transition-all group relative overflow-hidden bg-gradient-to-br from-[#9956DE] via-[#7274ED] to-[#1FA7E1] hover:shadow-[0_16px_40px_rgba(114,116,237,0.28)] hover:-translate-y-0.5",children:[e.jsx("div",{className:"absolute inset-0 bg-[radial-gradient(circle_at_18%_8%,rgba(251,150,187,0.32),transparent_42%),radial-gradient(circle_at_85%_84%,rgba(117,208,106,0.24),transparent_40%)]"}),e.jsxs("div",{className:"relative z-10 p-3",children:[e.jsxs("div",{className:"flex items-center justify-between mb-3",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("div",{className:"w-9 h-9 bg-white/20 rounded-xl flex items-center justify-center border border-white/35 backdrop-blur-sm",children:e.jsx(y,{size:16,className:"text-white"})}),e.jsx("h3",{className:"font-display font-bold text-sm text-white tracking-wide",children:"Rewards & Achievements"})]}),e.jsx(h,{size:16,className:"text-white/80 group-hover:text-white group-hover:translate-x-0.5 transition-all"})]}),e.jsxs("div",{className:"flex items-center gap-2.5 mb-3",children:[e.jsxs("div",{className:"flex items-center gap-1.5 text-xs font-body px-2 py-1 rounded-md bg-white/14 border border-white/25 text-white",children:[e.jsx(x,{size:12,className:"text-[#FFB356]"}),e.jsxs("span",{className:"font-bold",children:["Lv ",l]})]}),e.jsx("div",{className:"w-px h-3 bg-white/35"}),e.jsxs(j,{children:[e.jsx(w,{asChild:!0,children:e.jsxs("button",{onClick:i,className:"flex items-center gap-1.5 text-xs font-body px-2 py-1 rounded-md bg-white/14 border border-white/25 text-white cursor-pointer hover:bg-white/20 transition-colors active:scale-95",children:[e.jsx(C,{size:12,className:"text-[#6ED1CF]"}),e.jsxs("span",{className:"font-bold",children:[a," XP"]})]})}),e.jsx(N,{side:"top",className:"bg-slate-900 text-white border border-slate-700",children:"Review more lessons to earn more XP!"})]}),e.jsx("div",{className:"w-px h-3 bg-white/35"}),e.jsxs("div",{className:"flex items-center gap-1.5 text-xs font-body px-2 py-1 rounded-md bg-white/14 border border-white/25 text-white",children:[e.jsx(p,{size:12,className:"text-[#FF8B8B]"}),e.jsxs("span",{className:"font-bold",children:[s,"d"]})]})]}),e.jsxs("div",{children:[e.jsxs("div",{className:"flex justify-between items-center mb-1.5",children:[e.jsxs("span",{className:"text-[11px] font-body text-white/90",children:["Next: Level ",l+1]}),e.jsxs("span",{className:"text-[11px] font-body font-semibold text-white",children:[Math.round(d),"%"]})]}),e.jsx("div",{className:"h-2 bg-white/25 rounded-full overflow-hidden border border-white/20",children:e.jsx(r.div,{initial:{width:0},animate:{width:`${d}%`},transition:{duration:1,ease:"easeOut"},className:"h-full bg-gradient-to-r from-[#6ED1CF] via-[#75D06A] to-[#FFB356] rounded-full"})})]})]})]}),e.jsx(r.div,{initial:{opacity:0,y:12},animate:{opacity:1,y:0},transition:{delay:.2,duration:.4,ease:[.22,1,.36,1]},children:e.jsx(k,{streakHistory:c})}),e.jsxs(r.div,{initial:{opacity:0,y:12},animate:{opacity:1,y:0},transition:{delay:.3,duration:.4,ease:[.22,1,.36,1]},onClick:n,className:"bg-white rounded-xl border border-slate-200/80 hover:shadow-md hover:border-amber-200/60 transition-all group overflow-hidden cursor-pointer",children:[e.jsxs("div",{className:"p-3 border-b border-slate-100 flex items-center justify-between",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("div",{className:"w-7 h-7 bg-amber-50 rounded-lg flex items-center justify-center border border-amber-200/60 transition-colors group-hover:bg-amber-100/50",children:e.jsx(x,{size:14,className:"text-amber-500"})}),e.jsx("h3",{className:"font-display font-bold text-sm text-[#0a1628]",children:"Leaderboards"})]}),e.jsx(h,{size:14,className:"text-slate-400 group-hover:translate-x-0.5 group-hover:text-amber-500 transition-transform"})]}),e.jsxs("div",{className:"pt-8 pb-3 px-2 bg-gradient-to-b from-slate-50/30 to-white flex items-end justify-center gap-1.5 min-h-[170px]",children:[e.jsxs("div",{className:"flex flex-col items-center relative z-10",children:[e.jsxs(r.div,{initial:{y:20,opacity:0},animate:{y:0,opacity:1},transition:{delay:.5},className:"relative mb-2",children:[e.jsx("img",{src:"https://i.pravatar.cc/150?img=33",alt:"You",className:"w-10 h-10 rounded-full border-[3px] border-sky-400 z-10 relative object-cover shadow-sm bg-white"}),e.jsx("div",{className:"absolute -bottom-2 left-1/2 -translate-x-1/2 bg-sky-500 text-white text-[10px] font-bold px-2 py-0.5 rounded-full z-20 shadow-sm",children:"2"})]}),e.jsxs(r.div,{initial:{height:0},animate:{height:"54px"},transition:{delay:.4,duration:.5,ease:"easeOut"},className:"w-[70px] bg-gradient-to-b from-slate-200 to-slate-100 rounded-t-xl rounded-b-md border-t-2 border-slate-50 flex items-center justify-center relative shadow-[inset_0_-4px_6px_rgba(0,0,0,0.05),0_4px_6px_rgba(0,0,0,0.05)]",children:[e.jsx("span",{className:"text-slate-400 font-black text-2xl opacity-40 translate-y-1",children:"2"}),e.jsx("div",{className:"absolute top-0 left-0 right-0 h-1.5 bg-white/70 rounded-t-xl"})]}),e.jsxs("div",{className:"mt-2 text-center",children:[e.jsx("span",{className:"block text-[12px] font-bold text-[#0a1628]",children:"You"}),e.jsx("span",{className:"block text-[10px] text-sky-600 font-bold",children:"2.1k XP"})]})]}),e.jsxs("div",{className:"flex flex-col items-center relative z-20 -mx-2",children:[e.jsxs(r.div,{initial:{y:20,opacity:0},animate:{y:0,opacity:1},transition:{delay:.7},className:"relative mb-2",children:[e.jsx("div",{className:"absolute -top-4 left-1/2 -translate-x-1/2 z-20",children:e.jsx(x,{size:22,className:"text-amber-400 drop-shadow-md mb-1",fill:"#fbbf24",strokeWidth:1.5})}),e.jsx("img",{src:"https://i.pravatar.cc/150?img=68",alt:"Alex",className:"w-[52px] h-[52px] rounded-full border-[3px] border-amber-400 z-10 relative object-cover shadow-md bg-white"}),e.jsx("div",{className:"absolute -bottom-2 left-1/2 -translate-x-1/2 bg-amber-500 text-white text-[10px] font-bold px-2 py-0.5 rounded-full z-20 shadow-sm",children:"1"})]}),e.jsxs(r.div,{initial:{height:0},animate:{height:"74px"},transition:{delay:.6,duration:.5,ease:"easeOut"},className:"w-[78px] bg-gradient-to-b from-amber-100 to-amber-50 rounded-t-xl rounded-b-md border-t-2 border-amber-50 flex items-center justify-center relative shadow-[inset_0_-4px_8px_rgba(251,191,36,0.1),0_6px_8px_rgba(0,0,0,0.05)]",children:[e.jsx("span",{className:"text-amber-400 font-black text-3xl opacity-50 translate-y-1",children:"1"}),e.jsx("div",{className:"absolute top-0 left-0 right-0 h-1.5 bg-white/80 rounded-t-xl"})]}),e.jsxs("div",{className:"mt-2 text-center",children:[e.jsx("span",{className:"block text-[13px] font-black text-[#0a1628]",children:"Alex M."}),e.jsx("span",{className:"block text-[11px] text-amber-600 font-bold",children:"2.4k XP"})]})]}),e.jsxs("div",{className:"flex flex-col items-center relative z-10",children:[e.jsxs(r.div,{initial:{y:20,opacity:0},animate:{y:0,opacity:1},transition:{delay:.6},className:"relative mb-2",children:[e.jsx("img",{src:"https://i.pravatar.cc/150?img=47",alt:"Sarah",className:"w-10 h-10 rounded-full border-[3px] border-orange-400 z-10 relative object-cover shadow-sm bg-white"}),e.jsx("div",{className:"absolute -bottom-2 left-1/2 -translate-x-1/2 bg-orange-500 text-white text-[10px] font-bold px-2 py-0.5 rounded-full z-20 shadow-sm",children:"3"})]}),e.jsxs(r.div,{initial:{height:0},animate:{height:"38px"},transition:{delay:.5,duration:.5,ease:"easeOut"},className:"w-[70px] bg-gradient-to-b from-orange-50 to-slate-50 rounded-t-xl rounded-b-md border-t-2 border-orange-100 flex items-center justify-center relative shadow-[inset_0_-4px_6px_rgba(249,115,22,0.05),0_4px_6px_rgba(0,0,0,0.02)]",children:[e.jsx("span",{className:"text-orange-400/60 font-black text-2xl opacity-60 translate-y-1",children:"3"}),e.jsx("div",{className:"absolute top-0 left-0 right-0 h-1.5 bg-white/70 rounded-t-xl"})]}),e.jsxs("div",{className:"mt-2 text-center",children:[e.jsx("span",{className:"block text-[12px] font-bold text-[#0a1628]",children:"Sarah K."}),e.jsx("span",{className:"block text-[10px] text-orange-600 font-bold",children:"1.9k XP"})]})]})]})]})]})};export{X as default};
assets/{ScientificCalculator-3ZZoXfU9.js β†’ ScientificCalculator-wlhyNBDf.js} RENAMED
@@ -1,4 +1,4 @@
1
- import{r as c,j as e}from"./vendor-react-Dexh7fmo.js";import{apiService as de}from"./apiService-BcE-mX0v.js";import{c as Z,e as U,m as ue}from"./index-DUxNDyEU.js";import{C as fe,a as pe}from"./chevron-up-B14f4SwA.js";import{X as be}from"./x-DwrHgz_L.js";import"./vendor-firebase-auth-COrkgW0P.js";import"./vendor-firebase-core-DQ-pMjxd.js";import"./vendor-firebase-firestore-BML5nJHm.js";import"./vendor-firebase-storage-BOeKE_0n.js";import"./vendor-firebase-analytics-CCo6E2f7.js";/**
2
  * @license lucide-react v0.487.0 - ISC
3
  *
4
  * This source code is licensed under the ISC license.
 
1
+ import{r as c,j as e}from"./vendor-react-Dexh7fmo.js";import{apiService as de}from"./apiService-axx1LHMk.js";import{c as Z,e as U,m as ue}from"./index-D4nJsLyx.js";import{C as fe,a as pe}from"./chevron-up-Bfmq3Clw.js";import{X as be}from"./x-BONnp2RF.js";import"./vendor-firebase-auth-COrkgW0P.js";import"./vendor-firebase-core-DQ-pMjxd.js";import"./vendor-firebase-firestore-BML5nJHm.js";import"./vendor-firebase-storage-BOeKE_0n.js";import"./vendor-firebase-analytics-CCo6E2f7.js";/**
2
  * @license lucide-react v0.487.0 - ISC
3
  *
4
  * This source code is licensed under the ISC license.
assets/{SearchBar-BsWL3-M7.js β†’ SearchBar-ldiC0sUv.js} RENAMED
@@ -1 +1 @@
1
- import{r as o,j as e}from"./vendor-react-Dexh7fmo.js";import{S as m}from"./search-DxT5Gvzl.js";import{m as n,e as C}from"./index-DUxNDyEU.js";import{X as k}from"./x-DwrHgz_L.js";import{C as S}from"./clock-TIVUqSxI.js";import{B as a}from"./book-open-B5Fr9j0O.js";import{T as c}from"./trending-up-KXZvyUp1.js";import{U as d}from"./users-B8Q5DwX3.js";import{G}from"./graduation-cap-BnLJcznw.js";import"./vendor-firebase-auth-COrkgW0P.js";import"./vendor-firebase-core-DQ-pMjxd.js";import"./vendor-firebase-firestore-BML5nJHm.js";import"./vendor-firebase-storage-BOeKE_0n.js";import"./vendor-firebase-analytics-CCo6E2f7.js";const K=({placeholder:b="Search anything...",userRole:p="student",onSelect:y})=>{const[i,l]=o.useState(""),[g,r]=o.useState(!1),[x,f]=o.useState([]),u=o.useRef(null),v=()=>p==="student"?[{id:"1",type:"module",title:"General Mathematics",subtitle:"Grade 11 β€’ Functions & Business Math",icon:a},{id:"2",type:"module",title:"Statistics & Probability",subtitle:"Grade 11 β€’ Distributions & Testing",icon:a},{id:"3",type:"module",title:"Pre-Calculus",subtitle:"Grade 12 β€’ Analytic Geometry & Trig",icon:a},{id:"4",type:"module",title:"Basic Calculus",subtitle:"Grade 12 β€’ Limits & Derivatives",icon:a},{id:"5",type:"page",title:"AI Chat",subtitle:"Get help from AI tutor",icon:c},{id:"6",type:"page",title:"My Progress",subtitle:"View your achievements",icon:c}]:p==="teacher"?[{id:"1",type:"student",title:"Alex Johnson",subtitle:"Grade 11 β€’ Level 12",icon:d},{id:"2",type:"student",title:"Sarah Williams",subtitle:"Grade 12 β€’ Level 11",icon:d},{id:"3",type:"module",title:"Gen Math Quiz 5",subtitle:"12 submissions",icon:a},{id:"4",type:"page",title:"Analytics",subtitle:"Class performance overview",icon:c},{id:"5",type:"page",title:"Create Assignment",subtitle:"New homework or quiz",icon:a}]:[{id:"1",type:"teacher",title:"Prof. Anderson",subtitle:"48 students β€’ Math Dept",icon:G},{id:"2",type:"student",title:"Alex Johnson",subtitle:"Top Performer β€’ Level 12",icon:d},{id:"3",type:"page",title:"System Settings",subtitle:"Platform configuration",icon:c},{id:"4",type:"page",title:"Reports",subtitle:"Export analytics",icon:a},{id:"5",type:"page",title:"User Management",subtitle:"Manage accounts",icon:d}],w=["Functions and Relations","Normal Distribution","AI Chat"];o.useEffect(()=>{if(i.trim()){const s=v().filter(h=>h.title.toLowerCase().includes(i.toLowerCase())||h.subtitle?.toLowerCase().includes(i.toLowerCase()));f(s)}else f([])},[i]);const j=t=>{l(""),r(!1),y?.(t)},N=()=>{l(""),u.current?.focus()};return o.useEffect(()=>{const t=s=>{s.ctrlKey&&s.key.toLowerCase()==="k"&&(s.preventDefault(),u.current?.focus(),r(!0))};return window.addEventListener("keydown",t),()=>window.removeEventListener("keydown",t)},[]),e.jsxs("div",{className:"relative w-full max-w-xl",children:[e.jsxs("div",{className:"relative",children:[e.jsx(m,{className:"absolute left-3.5 top-1/2 -translate-y-1/2 text-slate-500",size:18}),e.jsx("input",{ref:u,id:"global-search",name:"global-search","aria-label":"Search anything",type:"text",value:i,onChange:t=>l(t.target.value),onFocus:()=>r(!0),placeholder:b,className:"w-full pl-11 pr-24 py-2.5 bg-white border border-[#dde3eb] rounded-lg text-[#0a1628] placeholder-[#a8a5b3] font-body text-sm focus:bg-white focus:border-sky-400 focus:ring-2 focus:ring-sky-400/15 focus:outline-none transition-all"}),e.jsxs("div",{className:"absolute right-2 top-1/2 -translate-y-1/2 flex items-center gap-1",children:[i&&e.jsx(n.button,{initial:{scale:0},animate:{scale:1},exit:{scale:0},whileHover:{scale:1.1},whileTap:{scale:.9},onClick:N,className:"p-1.5 text-slate-500 hover:text-[#5a6578] hover:bg-[#edf1f7] rounded-md transition-colors",children:e.jsx(k,{size:14})}),e.jsx("kbd",{className:"hidden sm:inline-flex px-2 py-0.5 text-[10px] font-body font-semibold text-slate-500 bg-[#edf1f7] border border-[#dde3eb] rounded-md",children:"Ctrl+K"})]})]}),e.jsx(C,{children:g&&e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"fixed inset-0 z-40",onClick:()=>r(!1)}),e.jsx(n.div,{initial:{opacity:0,y:-10},animate:{opacity:1,y:0},exit:{opacity:0,y:-10},transition:{duration:.2},className:"absolute top-full left-0 right-0 mt-2 bg-white rounded-xl shadow-lg border border-[#dde3eb] z-50 overflow-hidden max-h-96 overflow-y-auto",children:i.trim()?x.length>0?e.jsxs("div",{className:"p-2",children:[e.jsx("div",{className:"px-3 py-2 text-[10px] font-body font-semibold text-slate-500 uppercase tracking-wider",children:"Results"}),x.map(t=>{const s=t.icon||m;return e.jsxs(n.button,{whileHover:{backgroundColor:"rgba(248, 247, 244, 1)"},onClick:()=>j(t),className:"w-full flex items-center gap-3 px-3 py-2.5 rounded-lg text-left transition-colors",children:[e.jsx("div",{className:"w-9 h-9 bg-sky-500/10 rounded-lg flex items-center justify-center text-sky-600 flex-shrink-0",children:e.jsx(s,{size:16})}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsx("h4",{className:"text-sm font-body font-semibold text-[#0a1628] truncate",children:t.title}),t.subtitle&&e.jsx("p",{className:"text-xs font-body text-[#5a6578] truncate",children:t.subtitle})]})]},t.id)})]}):e.jsxs("div",{className:"p-8 text-center",children:[e.jsx(m,{size:40,className:"text-[#d1cec6] mx-auto mb-3"}),e.jsx("p",{className:"text-[#5a6578] font-body text-sm",children:"No results found"}),e.jsx("p",{className:"text-slate-500 font-body text-xs mt-1",children:"Try a different search term"})]}):e.jsxs("div",{className:"p-2",children:[e.jsx("div",{className:"px-3 py-2 text-[10px] font-body font-semibold text-slate-500 uppercase tracking-wider",children:"Recent Searches"}),w.map((t,s)=>e.jsxs(n.button,{whileHover:{backgroundColor:"rgba(248, 247, 244, 1)"},onClick:()=>l(t),className:"w-full flex items-center gap-3 px-3 py-2.5 rounded-lg text-left transition-colors",children:[e.jsx(S,{size:16,className:"text-slate-500 flex-shrink-0"}),e.jsx("span",{className:"text-sm font-body text-[#0a1628]",children:t})]},s))]})})]})})]})};export{K as default};
 
1
+ import{r as o,j as e}from"./vendor-react-Dexh7fmo.js";import{S as m}from"./search-Do6u3pFt.js";import{m as n,e as C}from"./index-D4nJsLyx.js";import{X as k}from"./x-BONnp2RF.js";import{C as S}from"./clock-DUJO-a50.js";import{B as a}from"./book-open-BH50GByv.js";import{T as c}from"./trending-up-D-vj8Gbq.js";import{U as d}from"./users-HMf2sdE3.js";import{G}from"./graduation-cap-Df8fGPxp.js";import"./vendor-firebase-auth-COrkgW0P.js";import"./vendor-firebase-core-DQ-pMjxd.js";import"./vendor-firebase-firestore-BML5nJHm.js";import"./vendor-firebase-storage-BOeKE_0n.js";import"./vendor-firebase-analytics-CCo6E2f7.js";const K=({placeholder:b="Search anything...",userRole:p="student",onSelect:y})=>{const[i,l]=o.useState(""),[g,r]=o.useState(!1),[x,f]=o.useState([]),u=o.useRef(null),v=()=>p==="student"?[{id:"1",type:"module",title:"General Mathematics",subtitle:"Grade 11 β€’ Functions & Business Math",icon:a},{id:"2",type:"module",title:"Statistics & Probability",subtitle:"Grade 11 β€’ Distributions & Testing",icon:a},{id:"3",type:"module",title:"Pre-Calculus",subtitle:"Grade 12 β€’ Analytic Geometry & Trig",icon:a},{id:"4",type:"module",title:"Basic Calculus",subtitle:"Grade 12 β€’ Limits & Derivatives",icon:a},{id:"5",type:"page",title:"AI Chat",subtitle:"Get help from AI tutor",icon:c},{id:"6",type:"page",title:"My Progress",subtitle:"View your achievements",icon:c}]:p==="teacher"?[{id:"1",type:"student",title:"Alex Johnson",subtitle:"Grade 11 β€’ Level 12",icon:d},{id:"2",type:"student",title:"Sarah Williams",subtitle:"Grade 12 β€’ Level 11",icon:d},{id:"3",type:"module",title:"Gen Math Quiz 5",subtitle:"12 submissions",icon:a},{id:"4",type:"page",title:"Analytics",subtitle:"Class performance overview",icon:c},{id:"5",type:"page",title:"Create Assignment",subtitle:"New homework or quiz",icon:a}]:[{id:"1",type:"teacher",title:"Prof. Anderson",subtitle:"48 students β€’ Math Dept",icon:G},{id:"2",type:"student",title:"Alex Johnson",subtitle:"Top Performer β€’ Level 12",icon:d},{id:"3",type:"page",title:"System Settings",subtitle:"Platform configuration",icon:c},{id:"4",type:"page",title:"Reports",subtitle:"Export analytics",icon:a},{id:"5",type:"page",title:"User Management",subtitle:"Manage accounts",icon:d}],w=["Functions and Relations","Normal Distribution","AI Chat"];o.useEffect(()=>{if(i.trim()){const s=v().filter(h=>h.title.toLowerCase().includes(i.toLowerCase())||h.subtitle?.toLowerCase().includes(i.toLowerCase()));f(s)}else f([])},[i]);const j=t=>{l(""),r(!1),y?.(t)},N=()=>{l(""),u.current?.focus()};return o.useEffect(()=>{const t=s=>{s.ctrlKey&&s.key.toLowerCase()==="k"&&(s.preventDefault(),u.current?.focus(),r(!0))};return window.addEventListener("keydown",t),()=>window.removeEventListener("keydown",t)},[]),e.jsxs("div",{className:"relative w-full max-w-xl",children:[e.jsxs("div",{className:"relative",children:[e.jsx(m,{className:"absolute left-3.5 top-1/2 -translate-y-1/2 text-slate-500",size:18}),e.jsx("input",{ref:u,id:"global-search",name:"global-search","aria-label":"Search anything",type:"text",value:i,onChange:t=>l(t.target.value),onFocus:()=>r(!0),placeholder:b,className:"w-full pl-11 pr-24 py-2.5 bg-white border border-[#dde3eb] rounded-lg text-[#0a1628] placeholder-[#a8a5b3] font-body text-sm focus:bg-white focus:border-sky-400 focus:ring-2 focus:ring-sky-400/15 focus:outline-none transition-all"}),e.jsxs("div",{className:"absolute right-2 top-1/2 -translate-y-1/2 flex items-center gap-1",children:[i&&e.jsx(n.button,{initial:{scale:0},animate:{scale:1},exit:{scale:0},whileHover:{scale:1.1},whileTap:{scale:.9},onClick:N,className:"p-1.5 text-slate-500 hover:text-[#5a6578] hover:bg-[#edf1f7] rounded-md transition-colors",children:e.jsx(k,{size:14})}),e.jsx("kbd",{className:"hidden sm:inline-flex px-2 py-0.5 text-[10px] font-body font-semibold text-slate-500 bg-[#edf1f7] border border-[#dde3eb] rounded-md",children:"Ctrl+K"})]})]}),e.jsx(C,{children:g&&e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"fixed inset-0 z-40",onClick:()=>r(!1)}),e.jsx(n.div,{initial:{opacity:0,y:-10},animate:{opacity:1,y:0},exit:{opacity:0,y:-10},transition:{duration:.2},className:"absolute top-full left-0 right-0 mt-2 bg-white rounded-xl shadow-lg border border-[#dde3eb] z-50 overflow-hidden max-h-96 overflow-y-auto",children:i.trim()?x.length>0?e.jsxs("div",{className:"p-2",children:[e.jsx("div",{className:"px-3 py-2 text-[10px] font-body font-semibold text-slate-500 uppercase tracking-wider",children:"Results"}),x.map(t=>{const s=t.icon||m;return e.jsxs(n.button,{whileHover:{backgroundColor:"rgba(248, 247, 244, 1)"},onClick:()=>j(t),className:"w-full flex items-center gap-3 px-3 py-2.5 rounded-lg text-left transition-colors",children:[e.jsx("div",{className:"w-9 h-9 bg-sky-500/10 rounded-lg flex items-center justify-center text-sky-600 flex-shrink-0",children:e.jsx(s,{size:16})}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsx("h4",{className:"text-sm font-body font-semibold text-[#0a1628] truncate",children:t.title}),t.subtitle&&e.jsx("p",{className:"text-xs font-body text-[#5a6578] truncate",children:t.subtitle})]})]},t.id)})]}):e.jsxs("div",{className:"p-8 text-center",children:[e.jsx(m,{size:40,className:"text-[#d1cec6] mx-auto mb-3"}),e.jsx("p",{className:"text-[#5a6578] font-body text-sm",children:"No results found"}),e.jsx("p",{className:"text-slate-500 font-body text-xs mt-1",children:"Try a different search term"})]}):e.jsxs("div",{className:"p-2",children:[e.jsx("div",{className:"px-3 py-2 text-[10px] font-body font-semibold text-slate-500 uppercase tracking-wider",children:"Recent Searches"}),w.map((t,s)=>e.jsxs(n.button,{whileHover:{backgroundColor:"rgba(248, 247, 244, 1)"},onClick:()=>l(t),className:"w-full flex items-center gap-3 px-3 py-2.5 rounded-lg text-left transition-colors",children:[e.jsx(S,{size:16,className:"text-slate-500 flex-shrink-0"}),e.jsx("span",{className:"text-sm font-body text-[#0a1628]",children:t})]},s))]})})]})})]})};export{K as default};
assets/{SettingsModal-azrtAtw2.js β†’ SettingsModal-C-nK3nbS.js} RENAMED
@@ -1,4 +1,4 @@
1
- import{r as i,j as e}from"./vendor-react-Dexh7fmo.js";import{c as ee,e as be,m as S,D as ue,t as c}from"./index-DUxNDyEU.js";import{B as x}from"./button-BpeUVhBo.js";import{I as l}from"./input-DBkKXOmF.js";import{S as m}from"./switch-eyvBOdtY.js";import W from"./ConfirmModal-BGmRIqeR.js";import{U as fe}from"./user-C2pqYPaR.js";import{B as pe}from"./bell-CdZB167e.js";import{S as ye}from"./shield-m_A65sim.js";import{G as je}from"./globe-ClgZF2mp.js";import{D as Y}from"./download-C6KU0zMt.js";import{X as Z}from"./x-DwrHgz_L.js";import{L as ge}from"./lock-CsjFFL-g.js";import{C as Ne}from"./clock-TIVUqSxI.js";import{T as ve}from"./trash-2-DHSV6syb.js";import"./vendor-firebase-auth-COrkgW0P.js";import"./vendor-firebase-core-DQ-pMjxd.js";import"./vendor-firebase-firestore-BML5nJHm.js";import"./vendor-firebase-storage-BOeKE_0n.js";import"./vendor-firebase-analytics-CCo6E2f7.js";import"./vendor-radix-BRdei-zg.js";import"./clsx-B-dksMZM.js";import"./utils-BQQgILNW.js";import"./log-out-DH3jNNq7.js";/**
2
  * @license lucide-react v0.487.0 - ISC
3
  *
4
  * This source code is licensed under the ISC license.
 
1
+ import{r as i,j as e}from"./vendor-react-Dexh7fmo.js";import{c as ee,e as be,m as S,D as ue,t as c}from"./index-D4nJsLyx.js";import{B as x}from"./button-BpeUVhBo.js";import{I as l}from"./input-DBkKXOmF.js";import{S as m}from"./switch-eyvBOdtY.js";import W from"./ConfirmModal-DGrnpObD.js";import{U as fe}from"./user-CaTzqgOL.js";import{B as pe}from"./bell-CbSbac2W.js";import{S as ye}from"./shield-L33jkK5w.js";import{G as je}from"./globe-BMa4SWkV.js";import{D as Y}from"./download-PWUf0XJa.js";import{X as Z}from"./x-BONnp2RF.js";import{L as ge}from"./lock-_59co5m5.js";import{C as Ne}from"./clock-DUJO-a50.js";import{T as ve}from"./trash-2-BoXE_mye.js";import"./vendor-firebase-auth-COrkgW0P.js";import"./vendor-firebase-core-DQ-pMjxd.js";import"./vendor-firebase-firestore-BML5nJHm.js";import"./vendor-firebase-storage-BOeKE_0n.js";import"./vendor-firebase-analytics-CCo6E2f7.js";import"./vendor-radix-BRdei-zg.js";import"./clsx-B-dksMZM.js";import"./utils-BQQgILNW.js";import"./log-out-BqGKt-tT.js";/**
2
  * @license lucide-react v0.487.0 - ISC
3
  *
4
  * This source code is licensed under the ISC license.
assets/{Sidebar-ZOTUQCrB.js β†’ Sidebar-xBQ3Qnyw.js} RENAMED
@@ -1 +1 @@
1
- import{r as S,j as e}from"./vendor-react-Dexh7fmo.js";import{C as k,S as C,a as L,L as d}from"./LogoutActionButton-1LrBiz6V.js";import{c as M}from"./utils-BQQgILNW.js";import{m as o}from"./index-DUxNDyEU.js";import{X as A}from"./x-DwrHgz_L.js";import{C as z}from"./chevron-right-CSxxBxL8.js";import{U as f}from"./users-B8Q5DwX3.js";import{B as c}from"./book-open-B5Fr9j0O.js";import{C as u}from"./chart-column-BSv3Tlcd.js";import{S as B}from"./shield-m_A65sim.js";import{M as I}from"./message-square-Cc7MV93e.js";import{G as E}from"./graduation-cap-BnLJcznw.js";import{S as H}from"./swords-XAghltmC.js";import{T}from"./trophy-qEvM2_M2.js";import{S as $}from"./shirt-Gt1mteCK.js";import"./log-out-DH3jNNq7.js";import"./clsx-B-dksMZM.js";import"./vendor-firebase-auth-COrkgW0P.js";import"./vendor-firebase-core-DQ-pMjxd.js";import"./vendor-firebase-firestore-BML5nJHm.js";import"./vendor-firebase-storage-BOeKE_0n.js";import"./vendor-firebase-analytics-CCo6E2f7.js";const oe=({activeTab:i,setActiveTab:g,userRole:m="student",onOpenSettings:j,onLogout:b,sidebarCollapsed:a=!1,setSidebarCollapsed:p,mode:v="desktop",onRequestClose:x})=>{const[l,h]=S.useState(!1),r=v==="mobile",s=!r&&a&&!l,y=!r,w=m==="admin"?[{label:"Management",items:[{icon:d,label:"Overview"},{icon:f,label:"User Management"},{icon:c,label:"Content"}]},{label:"Insights",items:[{icon:u,label:"Analytics"},{icon:B,label:"Audit Log"}]}]:m==="teacher"?[{label:"Teaching",items:[{icon:d,label:"Dashboard"},{icon:f,label:"My Students"},{icon:c,label:"Classes"}]},{label:"Insights",items:[{icon:u,label:"Analytics"}]}]:[{label:"Learn",items:[{icon:d,label:"Dashboard"},{icon:c,label:"Modules"},{icon:I,label:"AI Chat"}]},{label:"Progress",items:[{icon:E,label:"Grades",displayLabel:"Assessment"},{icon:H,label:"Quiz Battle",displayLabel:"Quiz Battle"},{icon:T,label:"Leaderboard",displayLabel:"Leadership Board"}]},{label:"Customization",items:[{icon:$,label:"Avatar Studio",displayLabel:"Avatar Studio"}]}];return e.jsxs(o.aside,{initial:!1,animate:r?{width:280}:{width:a&&!l?80:280},transition:{type:"spring",stiffness:360,damping:34},onMouseEnter:()=>y&&a&&h(!0),onMouseLeave:()=>h(!1),className:M("h-full bg-[#f7f9fc] border border-[#dde3eb] shadow-sm flex flex-col",r?"rounded-2xl p-4":"rounded-3xl p-5"),children:[e.jsxs("div",{className:"flex-1 flex flex-col min-h-0",children:[e.jsxs("div",{className:`mb-8 flex items-center ${s?"justify-center":"justify-between"}`,children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("img",{src:"/mathpulse_logo.png",alt:"MathPulse AI",className:"w-12 h-12 object-contain drop-shadow-md flex-shrink-0"}),(!s||l)&&e.jsx("div",{children:e.jsx("h2",{className:"text-base font-bold font-display text-[#0a1628] whitespace-nowrap",children:"MathPulse AI"})})]}),r&&x&&e.jsx("button",{onClick:x,className:"p-2 hover:bg-[#dde3eb] rounded-lg transition-colors text-[#5a6578]","aria-label":"Close navigation",children:e.jsx(A,{size:20})}),!r&&p&&(!a||l)&&e.jsx(o.button,{whileHover:{scale:1.1},whileTap:{scale:.95},onClick:()=>p(!a),className:"p-2 hover:bg-[#dde3eb] rounded-lg transition-colors text-[#5a6578]","aria-label":a?"Expand sidebar":"Collapse sidebar",title:a?"Expand sidebar":"Collapse sidebar",children:a?e.jsx(z,{size:20}):e.jsx(k,{size:20})})]}),e.jsx("nav",{className:"flex-1 min-h-0 overflow-y-auto space-y-5 pr-1",children:w.map((n,N)=>e.jsxs("div",{children:[s?e.jsx("div",{className:"px-4 mb-2 flex items-center gap-2",children:e.jsx("div",{className:"flex-1 h-[1px] bg-[#dde3eb]"})}):n.label&&e.jsx("p",{className:"px-4 mb-2 text-[10px] font-bold text-[#5a6578] uppercase tracking-widest",children:n.label}),e.jsx("div",{className:"space-y-1",children:n.items.map(t=>e.jsxs(o.button,{whileHover:{x:2},whileTap:{scale:.98},onClick:()=>g(t.label),className:`w-full flex items-center gap-3 px-4 py-3 rounded-2xl cursor-pointer transition-all duration-200 border whitespace-nowrap ${s?"justify-center":""} ${i===t.label?"bg-sky-50 border-sky-200 shadow-sm text-sky-700":"bg-transparent border-transparent text-[#5a6578] hover:bg-[#dde3eb] hover:border-[#dde3eb] hover:text-[#0a1628]"}`,children:[e.jsx(t.icon,{size:18,strokeWidth:i===t.label?2.5:2,className:"flex-shrink-0"}),(!s||l)&&e.jsx("span",{className:"font-body font-bold text-xs",children:t.displayLabel||t.label}),i===t.label&&(!s||l)&&e.jsx(o.div,{layoutId:"sidebar-active-indicator",className:"ml-auto w-2 h-2 rounded-full bg-sky-500",transition:{type:"spring",duration:.4}})]},t.label))})]},N))})]}),e.jsxs("div",{className:"mt-4 space-y-2 border-t border-[#dde3eb] pt-4",children:[e.jsxs(o.button,{whileHover:{x:2},whileTap:{scale:.98},className:`w-full flex items-center gap-3 px-4 py-3 rounded-2xl text-[#5a6578] font-bold border border-transparent hover:bg-[#dde3eb] hover:border-[#dde3eb] hover:text-[#0a1628] transition-all duration-200 whitespace-nowrap ${s?"justify-center":""}`,onClick:j,title:s?"Settings":"",children:[e.jsx(C,{size:18,strokeWidth:2,className:"flex-shrink-0"}),(!s||l)&&e.jsx("span",{className:"font-body text-xs",children:"Settings"})]}),b&&e.jsx("div",{className:"text-[#5a6578]",children:e.jsx(L,{onClick:b,collapsed:s})})]})]})};export{oe as default};
 
1
+ import{r as S,j as e}from"./vendor-react-Dexh7fmo.js";import{C as k,S as C,a as L,L as d}from"./LogoutActionButton-FS5OGZjL.js";import{c as M}from"./utils-BQQgILNW.js";import{m as o}from"./index-D4nJsLyx.js";import{X as A}from"./x-BONnp2RF.js";import{C as z}from"./chevron-right-COMox1Xb.js";import{U as f}from"./users-HMf2sdE3.js";import{B as c}from"./book-open-BH50GByv.js";import{C as u}from"./chart-column-D5mAWcRx.js";import{S as B}from"./shield-L33jkK5w.js";import{M as I}from"./message-square-DSAS4TVL.js";import{G as E}from"./graduation-cap-Df8fGPxp.js";import{S as H}from"./swords-8_KH18p7.js";import{T}from"./trophy-C2nVcZnb.js";import{S as $}from"./shirt-BMZy0pq4.js";import"./log-out-BqGKt-tT.js";import"./clsx-B-dksMZM.js";import"./vendor-firebase-auth-COrkgW0P.js";import"./vendor-firebase-core-DQ-pMjxd.js";import"./vendor-firebase-firestore-BML5nJHm.js";import"./vendor-firebase-storage-BOeKE_0n.js";import"./vendor-firebase-analytics-CCo6E2f7.js";const oe=({activeTab:i,setActiveTab:g,userRole:m="student",onOpenSettings:j,onLogout:b,sidebarCollapsed:a=!1,setSidebarCollapsed:p,mode:v="desktop",onRequestClose:x})=>{const[l,h]=S.useState(!1),r=v==="mobile",s=!r&&a&&!l,y=!r,w=m==="admin"?[{label:"Management",items:[{icon:d,label:"Overview"},{icon:f,label:"User Management"},{icon:c,label:"Content"}]},{label:"Insights",items:[{icon:u,label:"Analytics"},{icon:B,label:"Audit Log"}]}]:m==="teacher"?[{label:"Teaching",items:[{icon:d,label:"Dashboard"},{icon:f,label:"My Students"},{icon:c,label:"Classes"}]},{label:"Insights",items:[{icon:u,label:"Analytics"}]}]:[{label:"Learn",items:[{icon:d,label:"Dashboard"},{icon:c,label:"Modules"},{icon:I,label:"AI Chat"}]},{label:"Progress",items:[{icon:E,label:"Grades",displayLabel:"Assessment"},{icon:H,label:"Quiz Battle",displayLabel:"Quiz Battle"},{icon:T,label:"Leaderboard",displayLabel:"Leadership Board"}]},{label:"Customization",items:[{icon:$,label:"Avatar Studio",displayLabel:"Avatar Studio"}]}];return e.jsxs(o.aside,{initial:!1,animate:r?{width:280}:{width:a&&!l?80:280},transition:{type:"spring",stiffness:360,damping:34},onMouseEnter:()=>y&&a&&h(!0),onMouseLeave:()=>h(!1),className:M("h-full bg-[#f7f9fc] border border-[#dde3eb] shadow-sm flex flex-col",r?"rounded-2xl p-4":"rounded-3xl p-5"),children:[e.jsxs("div",{className:"flex-1 flex flex-col min-h-0",children:[e.jsxs("div",{className:`mb-8 flex items-center ${s?"justify-center":"justify-between"}`,children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("img",{src:"/mathpulse_logo.png",alt:"MathPulse AI",className:"w-12 h-12 object-contain drop-shadow-md flex-shrink-0"}),(!s||l)&&e.jsx("div",{children:e.jsx("h2",{className:"text-base font-bold font-display text-[#0a1628] whitespace-nowrap",children:"MathPulse AI"})})]}),r&&x&&e.jsx("button",{onClick:x,className:"p-2 hover:bg-[#dde3eb] rounded-lg transition-colors text-[#5a6578]","aria-label":"Close navigation",children:e.jsx(A,{size:20})}),!r&&p&&(!a||l)&&e.jsx(o.button,{whileHover:{scale:1.1},whileTap:{scale:.95},onClick:()=>p(!a),className:"p-2 hover:bg-[#dde3eb] rounded-lg transition-colors text-[#5a6578]","aria-label":a?"Expand sidebar":"Collapse sidebar",title:a?"Expand sidebar":"Collapse sidebar",children:a?e.jsx(z,{size:20}):e.jsx(k,{size:20})})]}),e.jsx("nav",{className:"flex-1 min-h-0 overflow-y-auto space-y-5 pr-1",children:w.map((n,N)=>e.jsxs("div",{children:[s?e.jsx("div",{className:"px-4 mb-2 flex items-center gap-2",children:e.jsx("div",{className:"flex-1 h-[1px] bg-[#dde3eb]"})}):n.label&&e.jsx("p",{className:"px-4 mb-2 text-[10px] font-bold text-[#5a6578] uppercase tracking-widest",children:n.label}),e.jsx("div",{className:"space-y-1",children:n.items.map(t=>e.jsxs(o.button,{whileHover:{x:2},whileTap:{scale:.98},onClick:()=>g(t.label),className:`w-full flex items-center gap-3 px-4 py-3 rounded-2xl cursor-pointer transition-all duration-200 border whitespace-nowrap ${s?"justify-center":""} ${i===t.label?"bg-sky-50 border-sky-200 shadow-sm text-sky-700":"bg-transparent border-transparent text-[#5a6578] hover:bg-[#dde3eb] hover:border-[#dde3eb] hover:text-[#0a1628]"}`,children:[e.jsx(t.icon,{size:18,strokeWidth:i===t.label?2.5:2,className:"flex-shrink-0"}),(!s||l)&&e.jsx("span",{className:"font-body font-bold text-xs",children:t.displayLabel||t.label}),i===t.label&&(!s||l)&&e.jsx(o.div,{layoutId:"sidebar-active-indicator",className:"ml-auto w-2 h-2 rounded-full bg-sky-500",transition:{type:"spring",duration:.4}})]},t.label))})]},N))})]}),e.jsxs("div",{className:"mt-4 space-y-2 border-t border-[#dde3eb] pt-4",children:[e.jsxs(o.button,{whileHover:{x:2},whileTap:{scale:.98},className:`w-full flex items-center gap-3 px-4 py-3 rounded-2xl text-[#5a6578] font-bold border border-transparent hover:bg-[#dde3eb] hover:border-[#dde3eb] hover:text-[#0a1628] transition-all duration-200 whitespace-nowrap ${s?"justify-center":""}`,onClick:j,title:s?"Settings":"",children:[e.jsx(C,{size:18,strokeWidth:2,className:"flex-shrink-0"}),(!s||l)&&e.jsx("span",{className:"font-body text-xs",children:"Settings"})]}),b&&e.jsx("div",{className:"text-[#5a6578]",children:e.jsx(L,{onClick:b,collapsed:s})})]})]})};export{oe as default};
assets/{SupplementalBanner-BKiLrsCL.js β†’ SupplementalBanner-dklPrubU.js} RENAMED
@@ -1 +1 @@
1
- import{j as e,r as y}from"./vendor-react-Dexh7fmo.js";import{e as j,m as p,T as h}from"./index-DUxNDyEU.js";import{X as v}from"./x-DwrHgz_L.js";import{S as w}from"./sparkles-BA64-_B-.js";import{C as f}from"./chevron-right-CSxxBxL8.js";import{B as g}from"./book-open-B5Fr9j0O.js";import{T as m}from"./trending-up-KXZvyUp1.js";import{B as x}from"./brain-D2SpSiL8.js";import"./vendor-firebase-auth-COrkgW0P.js";import"./vendor-firebase-core-DQ-pMjxd.js";import"./vendor-firebase-firestore-BML5nJHm.js";import"./vendor-firebase-storage-BOeKE_0n.js";import"./vendor-firebase-analytics-CCo6E2f7.js";const b={"General Mathematics":[{label:"Functions Deep Dive",description:"Interactive review of function types and graphs",icon:e.jsx(m,{size:14})},{label:"Business Math Basics",description:"Simple & compound interest practice",icon:e.jsx(g,{size:14})}],"Statistics and Probability":[{label:"Distribution Visualizer",description:"Explore normal distribution curves",icon:e.jsx(m,{size:14})},{label:"Hypothesis Practice",description:"Step-by-step hypothesis testing",icon:e.jsx(x,{size:14})}],"Pre-Calculus":[{label:"Conic Sections Explorer",description:"Visual parabola, ellipse, hyperbola tool",icon:e.jsx(m,{size:14})},{label:"Trig Identity Practice",description:"Identity verification drill set",icon:e.jsx(x,{size:14})}],"Basic Calculus":[{label:"Limits Visualizer",description:"Graphical approach to limits",icon:e.jsx(m,{size:14})},{label:"Derivative Rules Drill",description:"Practice chain rule & implicit diff",icon:e.jsx(x,{size:14})}]};function u(i){const s=i.toLowerCase();return s==="functions"||s.includes("function")||s==="businessmath"||s.includes("business")||s==="logic"||s.includes("reason")||s.includes("general")||s.includes("gen-math")||s.includes("gen math")?"General Mathematics":s.includes("stat")||s.includes("prob")?"Statistics and Probability":s.includes("pre-calc")||s.includes("pre calc")||s.includes("precalc")?"Pre-Calculus":s.includes("basic")||s.includes("calc")?"Basic Calculus":null}function N(i){const s=i.trim().toLowerCase();return s==="functions"?"Functions and Graphs":s==="businessmath"?"Business and Financial Mathematics":s==="logic"?"Logic and Reasoning":i}const k=({atRiskSubjects:i=[],onAction:s,onDismiss:n})=>{const[l,a]=y.useState(!1);if(l||i.length===0)return null;const r=()=>{a(!0),n?.()};return e.jsx(j,{children:!l&&e.jsx(p.div,{initial:{opacity:0,y:-10,height:0},animate:{opacity:1,y:0,height:"auto"},exit:{opacity:0,y:-10,height:0},className:"overflow-hidden",children:e.jsxs("div",{className:"relative bg-gradient-to-r from-sky-600 via-sky-500 to-sky-600 rounded-2xl p-5 text-white shadow-lg shadow-sky-500/20",children:[e.jsx("button",{onClick:r,className:"absolute top-3 right-3 w-7 h-7 bg-white/20 hover:bg-white/30 rounded-full flex items-center justify-center transition-colors",children:e.jsx(v,{size:14})}),e.jsxs("div",{className:"flex items-start gap-4",children:[e.jsx("div",{className:"w-12 h-12 bg-white/20 rounded-xl flex items-center justify-center flex-shrink-0",children:e.jsx(w,{size:24})}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsx("h3",{className:"font-bold text-lg mb-1",children:"Supplemental Materials Available"}),e.jsx("p",{className:"text-sky-100 text-sm mb-3",children:"Based on your diagnostic assessment, we've identified topics that could use extra practice. Strengthening these areas will improve your overall performance."}),e.jsx("div",{className:"flex flex-wrap gap-2 mb-3",children:i.map(t=>e.jsxs("span",{className:"inline-flex items-center gap-1.5 bg-white/20 backdrop-blur-sm px-3 py-1 rounded-full text-xs font-semibold",children:[e.jsx(h,{size:12}),N(t)]},t))}),e.jsxs("button",{onClick:s,className:"inline-flex items-center gap-2 bg-white text-sky-600 font-bold text-sm px-4 py-2 rounded-xl hover:bg-sky-50 transition-colors",children:["Review Topics",e.jsx(f,{size:16})]})]})]})]})})})},C=({quizSubject:i,atRiskSubjects:s=[]})=>{const n=i?u(i):null;if(!s.some(r=>{const t=u(r);return t&&t===n})||!n)return null;const a=b[n]||[];return e.jsx(p.div,{initial:{opacity:0,height:0},animate:{opacity:1,height:"auto"},className:"mb-4 overflow-hidden",children:e.jsxs("div",{className:"bg-gradient-to-r from-rose-50 to-orange-50 border border-rose-200 rounded-xl p-3",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-1.5",children:[e.jsx(h,{size:14,className:"text-rose-600"}),e.jsxs("span",{className:"text-xs font-bold text-rose-800",children:["Supplemental Focus Area β€” ",n]})]}),e.jsx("p",{className:"text-xs text-rose-700 mb-2",children:"This topic was flagged in your diagnostic. Take your time and review the explanations carefully."}),a.length>0&&e.jsx("div",{className:"flex flex-wrap gap-1.5",children:a.slice(0,2).map((r,t)=>e.jsxs("span",{className:"inline-flex items-center gap-1 bg-rose-100 text-rose-700 px-2 py-0.5 rounded-md text-xs font-medium",children:[r.icon,r.label]},t))})]})})},z=({quizSubject:i,quizScore:s=0,atRiskSubjects:n=[],onAction:l})=>{const a=i?u(i):null,r=n.some(c=>{const d=u(c);return d&&d===a});if(s>=70&&!r)return null;const t=a?b[a]||[]:[],o=s<70;return e.jsx(p.div,{initial:{opacity:0,y:10},animate:{opacity:1,y:0},transition:{delay:.5},className:"mt-4",children:e.jsx("div",{className:`rounded-2xl p-4 border-2 ${o?"bg-orange-50 border-orange-200":"bg-sky-50 border-sky-200"}`,children:e.jsxs("div",{className:"flex items-start gap-3",children:[e.jsx("div",{className:`w-10 h-10 rounded-xl flex items-center justify-center flex-shrink-0 ${o?"bg-orange-500":"bg-sky-500"}`,children:e.jsx(g,{size:20,className:"text-white"})}),e.jsxs("div",{className:"flex-1",children:[e.jsx("h4",{className:"font-display font-bold text-[#0a1628] text-sm mb-1",children:o?"Review Recommended":"Supplemental Materials"}),e.jsx("p",{className:"text-xs text-[#5a6578] mb-2",children:o?`You scored ${s}% on this quiz. We recommend reviewing the following resources to strengthen your understanding.`:"This topic was identified as an area for growth. Check out these additional resources."}),t.length>0&&e.jsx("div",{className:"space-y-1.5 mb-3",children:t.map((c,d)=>e.jsxs("div",{className:"flex items-center gap-2 text-xs",children:[e.jsx("span",{className:`w-5 h-5 rounded flex items-center justify-center ${o?"bg-orange-100 text-orange-600":"bg-sky-100 text-sky-600"}`,children:c.icon}),e.jsx("span",{className:"font-medium text-[#0a1628]",children:c.label}),e.jsxs("span",{className:"text-slate-500",children:["β€” ",c.description]})]},d))}),l&&e.jsxs("button",{onClick:l,className:`inline-flex items-center gap-1.5 text-xs font-bold px-3 py-1.5 rounded-lg transition-colors ${o?"bg-orange-500 hover:bg-orange-600 text-white":"bg-sky-500 hover:bg-sky-600 text-white"}`,children:["Open Practice Center",e.jsx(f,{size:12})]})]})]})})})},I=i=>{switch(i.variant){case"compact":return e.jsx(C,{...i});case"results":return e.jsx(z,{...i});case"full":default:return e.jsx(k,{...i})}};export{I as default};
 
1
+ import{j as e,r as y}from"./vendor-react-Dexh7fmo.js";import{e as j,m as p,T as h}from"./index-D4nJsLyx.js";import{X as v}from"./x-BONnp2RF.js";import{S as w}from"./sparkles-CXUFmaBJ.js";import{C as f}from"./chevron-right-COMox1Xb.js";import{B as g}from"./book-open-BH50GByv.js";import{T as m}from"./trending-up-D-vj8Gbq.js";import{B as x}from"./brain-CPvGdgWE.js";import"./vendor-firebase-auth-COrkgW0P.js";import"./vendor-firebase-core-DQ-pMjxd.js";import"./vendor-firebase-firestore-BML5nJHm.js";import"./vendor-firebase-storage-BOeKE_0n.js";import"./vendor-firebase-analytics-CCo6E2f7.js";const b={"General Mathematics":[{label:"Functions Deep Dive",description:"Interactive review of function types and graphs",icon:e.jsx(m,{size:14})},{label:"Business Math Basics",description:"Simple & compound interest practice",icon:e.jsx(g,{size:14})}],"Statistics and Probability":[{label:"Distribution Visualizer",description:"Explore normal distribution curves",icon:e.jsx(m,{size:14})},{label:"Hypothesis Practice",description:"Step-by-step hypothesis testing",icon:e.jsx(x,{size:14})}],"Pre-Calculus":[{label:"Conic Sections Explorer",description:"Visual parabola, ellipse, hyperbola tool",icon:e.jsx(m,{size:14})},{label:"Trig Identity Practice",description:"Identity verification drill set",icon:e.jsx(x,{size:14})}],"Basic Calculus":[{label:"Limits Visualizer",description:"Graphical approach to limits",icon:e.jsx(m,{size:14})},{label:"Derivative Rules Drill",description:"Practice chain rule & implicit diff",icon:e.jsx(x,{size:14})}]};function u(i){const s=i.toLowerCase();return s==="functions"||s.includes("function")||s==="businessmath"||s.includes("business")||s==="logic"||s.includes("reason")||s.includes("general")||s.includes("gen-math")||s.includes("gen math")?"General Mathematics":s.includes("stat")||s.includes("prob")?"Statistics and Probability":s.includes("pre-calc")||s.includes("pre calc")||s.includes("precalc")?"Pre-Calculus":s.includes("basic")||s.includes("calc")?"Basic Calculus":null}function N(i){const s=i.trim().toLowerCase();return s==="functions"?"Functions and Graphs":s==="businessmath"?"Business and Financial Mathematics":s==="logic"?"Logic and Reasoning":i}const k=({atRiskSubjects:i=[],onAction:s,onDismiss:n})=>{const[l,a]=y.useState(!1);if(l||i.length===0)return null;const r=()=>{a(!0),n?.()};return e.jsx(j,{children:!l&&e.jsx(p.div,{initial:{opacity:0,y:-10,height:0},animate:{opacity:1,y:0,height:"auto"},exit:{opacity:0,y:-10,height:0},className:"overflow-hidden",children:e.jsxs("div",{className:"relative bg-gradient-to-r from-sky-600 via-sky-500 to-sky-600 rounded-2xl p-5 text-white shadow-lg shadow-sky-500/20",children:[e.jsx("button",{onClick:r,className:"absolute top-3 right-3 w-7 h-7 bg-white/20 hover:bg-white/30 rounded-full flex items-center justify-center transition-colors",children:e.jsx(v,{size:14})}),e.jsxs("div",{className:"flex items-start gap-4",children:[e.jsx("div",{className:"w-12 h-12 bg-white/20 rounded-xl flex items-center justify-center flex-shrink-0",children:e.jsx(w,{size:24})}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsx("h3",{className:"font-bold text-lg mb-1",children:"Supplemental Materials Available"}),e.jsx("p",{className:"text-sky-100 text-sm mb-3",children:"Based on your diagnostic assessment, we've identified topics that could use extra practice. Strengthening these areas will improve your overall performance."}),e.jsx("div",{className:"flex flex-wrap gap-2 mb-3",children:i.map(t=>e.jsxs("span",{className:"inline-flex items-center gap-1.5 bg-white/20 backdrop-blur-sm px-3 py-1 rounded-full text-xs font-semibold",children:[e.jsx(h,{size:12}),N(t)]},t))}),e.jsxs("button",{onClick:s,className:"inline-flex items-center gap-2 bg-white text-sky-600 font-bold text-sm px-4 py-2 rounded-xl hover:bg-sky-50 transition-colors",children:["Review Topics",e.jsx(f,{size:16})]})]})]})]})})})},C=({quizSubject:i,atRiskSubjects:s=[]})=>{const n=i?u(i):null;if(!s.some(r=>{const t=u(r);return t&&t===n})||!n)return null;const a=b[n]||[];return e.jsx(p.div,{initial:{opacity:0,height:0},animate:{opacity:1,height:"auto"},className:"mb-4 overflow-hidden",children:e.jsxs("div",{className:"bg-gradient-to-r from-rose-50 to-orange-50 border border-rose-200 rounded-xl p-3",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-1.5",children:[e.jsx(h,{size:14,className:"text-rose-600"}),e.jsxs("span",{className:"text-xs font-bold text-rose-800",children:["Supplemental Focus Area β€” ",n]})]}),e.jsx("p",{className:"text-xs text-rose-700 mb-2",children:"This topic was flagged in your diagnostic. Take your time and review the explanations carefully."}),a.length>0&&e.jsx("div",{className:"flex flex-wrap gap-1.5",children:a.slice(0,2).map((r,t)=>e.jsxs("span",{className:"inline-flex items-center gap-1 bg-rose-100 text-rose-700 px-2 py-0.5 rounded-md text-xs font-medium",children:[r.icon,r.label]},t))})]})})},z=({quizSubject:i,quizScore:s=0,atRiskSubjects:n=[],onAction:l})=>{const a=i?u(i):null,r=n.some(c=>{const d=u(c);return d&&d===a});if(s>=70&&!r)return null;const t=a?b[a]||[]:[],o=s<70;return e.jsx(p.div,{initial:{opacity:0,y:10},animate:{opacity:1,y:0},transition:{delay:.5},className:"mt-4",children:e.jsx("div",{className:`rounded-2xl p-4 border-2 ${o?"bg-orange-50 border-orange-200":"bg-sky-50 border-sky-200"}`,children:e.jsxs("div",{className:"flex items-start gap-3",children:[e.jsx("div",{className:`w-10 h-10 rounded-xl flex items-center justify-center flex-shrink-0 ${o?"bg-orange-500":"bg-sky-500"}`,children:e.jsx(g,{size:20,className:"text-white"})}),e.jsxs("div",{className:"flex-1",children:[e.jsx("h4",{className:"font-display font-bold text-[#0a1628] text-sm mb-1",children:o?"Review Recommended":"Supplemental Materials"}),e.jsx("p",{className:"text-xs text-[#5a6578] mb-2",children:o?`You scored ${s}% on this quiz. We recommend reviewing the following resources to strengthen your understanding.`:"This topic was identified as an area for growth. Check out these additional resources."}),t.length>0&&e.jsx("div",{className:"space-y-1.5 mb-3",children:t.map((c,d)=>e.jsxs("div",{className:"flex items-center gap-2 text-xs",children:[e.jsx("span",{className:`w-5 h-5 rounded flex items-center justify-center ${o?"bg-orange-100 text-orange-600":"bg-sky-100 text-sky-600"}`,children:c.icon}),e.jsx("span",{className:"font-medium text-[#0a1628]",children:c.label}),e.jsxs("span",{className:"text-slate-500",children:["β€” ",c.description]})]},d))}),l&&e.jsxs("button",{onClick:l,className:`inline-flex items-center gap-1.5 text-xs font-bold px-3 py-1.5 rounded-lg transition-colors ${o?"bg-orange-500 hover:bg-orange-600 text-white":"bg-sky-500 hover:bg-sky-600 text-white"}`,children:["Open Practice Center",e.jsx(f,{size:12})]})]})]})})})},I=i=>{switch(i.variant){case"compact":return e.jsx(C,{...i});case"results":return e.jsx(z,{...i});case"full":default:return e.jsx(k,{...i})}};export{I as default};
assets/{TeacherDashboard-C_E8X2zT.js β†’ TeacherDashboard-D8avlB5m.js} RENAMED
@@ -1,4 +1,4 @@
1
- import{r as d,j as e,c as fe}from"./vendor-react-Dexh7fmo.js";import{B as Me}from"./button-BpeUVhBo.js";import{I as bt}from"./input-DBkKXOmF.js";import Er from"./ConfirmModal-BGmRIqeR.js";import{C as Et,L as Rr,S as _r,a as Br}from"./LogoutActionButton-1LrBiz6V.js";import{c as wt,d as Te,e as et,m as ie,Z as qa,u as Wt,t as U,C as Dr,T as At,g as Fr,M as Gr}from"./index-DUxNDyEU.js";import{e as nt,q as Ve,l as Qr,w as Ye,f as He,o as Ur,j as qr,s as tt,d as Be,u as Ke,b as ut,a as Oe}from"./vendor-firebase-firestore-BML5nJHm.js";import{apiService as he,ApiError as As}from"./apiService-BcE-mX0v.js";import{G as Va}from"./graduation-cap-BnLJcznw.js";import{X as Mt}from"./x-DwrHgz_L.js";import{B as Ya}from"./brain-D2SpSiL8.js";import{B as Kt}from"./book-open-B5Fr9j0O.js";import{s as ua,f as Vr,L as Yr,d as Wr,a as Kr,p as Hr,b as Jr}from"./quizService-C_kA-Nrp.js";import{L as Qe}from"./loader-circle-6q_nFxhJ.js";import{E as ds}from"./eye-kYT3TKwH.js";import{S as zt}from"./send-CmgfnqX2.js";import{T as Xr}from"./trash-2-DHSV6syb.js";import{C as ws}from"./circle-alert-3TSiLPep.js";import{M as xa}from"./minus-DlNhq6wp.js";import{P as ha}from"./plus-CCRS5c6k.js";import{C as Dt}from"./check-DF0M9ltT.js";import{F as $s,I as Ft,R as Zr,D as en,V as tn}from"./video-dHir2Lp4.js";import{C as vt}from"./chart-column-BSv3Tlcd.js";import{C as sn,S as z}from"./skeleton-DVOhx2DS.js";import{D as Ps}from"./download-C6KU0zMt.js";import{S as an}from"./sparkles-BA64-_B-.js";import{S as Wa}from"./save-B-nSNwXv.js";import{T as Os}from"./trending-up-KXZvyUp1.js";import{U as Gt}from"./users-B8Q5DwX3.js";import{S as Ht}from"./search-DxT5Gvzl.js";import{C as Qt,a as st}from"./chevron-up-B14f4SwA.js";import{S as fa,g as rn,G as nn}from"./subjects-mtNF4Bqy.js";import{C as Ka}from"./circle-check-big-CXPh4ph_.js";import{E as on}from"./eye-off-Dckh9BE_.js";import{U as pa}from"./user-C2pqYPaR.js";import{C as Jt}from"./chevron-right-CSxxBxL8.js";import{A as ln}from"./award-UT1_i9UI.js";import Ha from"./ChatMarkdown-DLD56_rz.js";import{T as cn}from"./target-CkzwB53m.js";import{B as ga}from"./bell-CdZB167e.js";import{C as ba}from"./calendar-DOp6N-WM.js";import{C as dn}from"./clock-TIVUqSxI.js";import{g as mn,i as _e,G as un,a as ms,m as xn,b as at,T as hn,s as us,f as mt,c as va,L as ya,d as fn,e as pn,u as Es,h as Rs,j as gn,k as bn,l as vn,w as ja,n as Ja,o as Xt,p as yn,q as jn,r as Nn,B as ks,t as wn,R as Na,v as wa,C as kn}from"./generateCategoricalChart-CiUYzAvW.js";import{c as xt}from"./clsx-B-dksMZM.js";import{P as Xa}from"./pen-line-C4kYg-x9.js";import"./vendor-radix-BRdei-zg.js";import"./utils-BQQgILNW.js";import"./log-out-DH3jNNq7.js";import"./vendor-firebase-auth-COrkgW0P.js";import"./vendor-firebase-core-DQ-pMjxd.js";import"./vendor-firebase-storage-BOeKE_0n.js";import"./vendor-firebase-analytics-CCo6E2f7.js";import"./vendor-markdown-C5ikSDMA.js";/**
2
  * @license lucide-react v0.487.0 - ISC
3
  *
4
  * This source code is licensed under the ISC license.
 
1
+ import{r as d,j as e,c as fe}from"./vendor-react-Dexh7fmo.js";import{B as Me}from"./button-BpeUVhBo.js";import{I as bt}from"./input-DBkKXOmF.js";import Er from"./ConfirmModal-DGrnpObD.js";import{C as Et,L as Rr,S as _r,a as Br}from"./LogoutActionButton-FS5OGZjL.js";import{c as wt,d as Te,e as et,m as ie,Z as qa,u as Wt,t as U,C as Dr,T as At,g as Fr,M as Gr}from"./index-D4nJsLyx.js";import{e as nt,q as Ve,l as Qr,w as Ye,f as He,o as Ur,j as qr,s as tt,d as Be,u as Ke,b as ut,a as Oe}from"./vendor-firebase-firestore-BML5nJHm.js";import{apiService as he,ApiError as As}from"./apiService-axx1LHMk.js";import{G as Va}from"./graduation-cap-Df8fGPxp.js";import{X as Mt}from"./x-BONnp2RF.js";import{B as Ya}from"./brain-CPvGdgWE.js";import{B as Kt}from"./book-open-BH50GByv.js";import{s as ua,f as Vr,L as Yr,d as Wr,a as Kr,p as Hr,b as Jr}from"./quizService-CI5e0QMr.js";import{L as Qe}from"./loader-circle-J8Mwbkkw.js";import{E as ds}from"./eye-DXdRafOv.js";import{S as zt}from"./send-NQY-QTkN.js";import{T as Xr}from"./trash-2-BoXE_mye.js";import{C as ws}from"./circle-alert-CBefjicJ.js";import{M as xa}from"./minus-oFhmD2--.js";import{P as ha}from"./plus-BxxucBR0.js";import{C as Dt}from"./check-BACdUlFL.js";import{F as $s,I as Ft,R as Zr,D as en,V as tn}from"./video-CS-NQBfT.js";import{C as vt}from"./chart-column-D5mAWcRx.js";import{C as sn,S as z}from"./skeleton-BUmMbOVs.js";import{D as Ps}from"./download-PWUf0XJa.js";import{S as an}from"./sparkles-CXUFmaBJ.js";import{S as Wa}from"./save-Og8yP5Yb.js";import{T as Os}from"./trending-up-D-vj8Gbq.js";import{U as Gt}from"./users-HMf2sdE3.js";import{S as Ht}from"./search-Do6u3pFt.js";import{C as Qt,a as st}from"./chevron-up-Bfmq3Clw.js";import{S as fa,g as rn,G as nn}from"./subjects-DDBtpdiA.js";import{C as Ka}from"./circle-check-big-0Gzyt_f3.js";import{E as on}from"./eye-off-BYAdNgqy.js";import{U as pa}from"./user-CaTzqgOL.js";import{C as Jt}from"./chevron-right-COMox1Xb.js";import{A as ln}from"./award-oJTbc9W5.js";import Ha from"./ChatMarkdown-B34PtYCE.js";import{T as cn}from"./target-D7SVtf3g.js";import{B as ga}from"./bell-CbSbac2W.js";import{C as ba}from"./calendar-BJ8oE6yW.js";import{C as dn}from"./clock-DUJO-a50.js";import{g as mn,i as _e,G as un,a as ms,m as xn,b as at,T as hn,s as us,f as mt,c as va,L as ya,d as fn,e as pn,u as Es,h as Rs,j as gn,k as bn,l as vn,w as ja,n as Ja,o as Xt,p as yn,q as jn,r as Nn,B as ks,t as wn,R as Na,v as wa,C as kn}from"./generateCategoricalChart-CiUYzAvW.js";import{c as xt}from"./clsx-B-dksMZM.js";import{P as Xa}from"./pen-line-Vok2l3fc.js";import"./vendor-radix-BRdei-zg.js";import"./utils-BQQgILNW.js";import"./log-out-BqGKt-tT.js";import"./vendor-firebase-auth-COrkgW0P.js";import"./vendor-firebase-core-DQ-pMjxd.js";import"./vendor-firebase-storage-BOeKE_0n.js";import"./vendor-firebase-analytics-CCo6E2f7.js";import"./vendor-markdown-C5ikSDMA.js";/**
2
  * @license lucide-react v0.487.0 - ISC
3
  *
4
  * This source code is licensed under the ISC license.
assets/{XPNotification-Bo4a14zB.js β†’ XPNotification-4si_K5GL.js} RENAMED
@@ -1 +1 @@
1
- import{r as l,j as e}from"./vendor-react-Dexh7fmo.js";import{e as n,m as r}from"./index-DUxNDyEU.js";import{S as c}from"./star-D2vv-PRB.js";import{S as m}from"./sparkles-BA64-_B-.js";import"./vendor-firebase-auth-COrkgW0P.js";import"./vendor-firebase-core-DQ-pMjxd.js";import"./vendor-firebase-firestore-BML5nJHm.js";import"./vendor-firebase-storage-BOeKE_0n.js";import"./vendor-firebase-analytics-CCo6E2f7.js";const v=({xp:i,message:a,show:t,onComplete:s})=>(l.useEffect(()=>{if(t){const o=setTimeout(()=>{s()},3e3);return()=>clearTimeout(o)}},[t,s]),e.jsx(n,{children:t&&e.jsx(r.div,{initial:{opacity:0,y:-50,scale:.8},animate:{opacity:1,y:0,scale:1},exit:{opacity:0,y:-20,scale:.9},className:"fixed top-8 left-1/2 -translate-x-1/2 z-50",children:e.jsxs("div",{className:"bg-gradient-to-r from-rose-400 via-orange-500 to-rose-500 text-white px-6 py-4 rounded-2xl shadow-2xl border-2 border-rose-300 flex items-center gap-3",children:[e.jsxs("div",{className:"relative",children:[e.jsx("div",{className:"w-10 h-10 bg-white/20 rounded-xl flex items-center justify-center",children:e.jsx(c,{size:20,className:"text-white",fill:"currentColor"})}),e.jsx(r.div,{className:"absolute -top-1 -right-1",animate:{rotate:[0,360]},transition:{duration:2,repeat:1/0,ease:"linear"},children:e.jsx(m,{size:16,className:"text-rose-200"})})]}),e.jsxs("div",{children:[e.jsx("p",{className:"text-sm font-bold",children:a}),e.jsxs("p",{className:"text-2xl font-black",children:["+",i," XP"]})]})]})})}));export{v as default};
 
1
+ import{r as l,j as e}from"./vendor-react-Dexh7fmo.js";import{e as n,m as r}from"./index-D4nJsLyx.js";import{S as c}from"./star-dumQ9BVG.js";import{S as m}from"./sparkles-CXUFmaBJ.js";import"./vendor-firebase-auth-COrkgW0P.js";import"./vendor-firebase-core-DQ-pMjxd.js";import"./vendor-firebase-firestore-BML5nJHm.js";import"./vendor-firebase-storage-BOeKE_0n.js";import"./vendor-firebase-analytics-CCo6E2f7.js";const v=({xp:i,message:a,show:t,onComplete:s})=>(l.useEffect(()=>{if(t){const o=setTimeout(()=>{s()},3e3);return()=>clearTimeout(o)}},[t,s]),e.jsx(n,{children:t&&e.jsx(r.div,{initial:{opacity:0,y:-50,scale:.8},animate:{opacity:1,y:0,scale:1},exit:{opacity:0,y:-20,scale:.9},className:"fixed top-8 left-1/2 -translate-x-1/2 z-50",children:e.jsxs("div",{className:"bg-gradient-to-r from-rose-400 via-orange-500 to-rose-500 text-white px-6 py-4 rounded-2xl shadow-2xl border-2 border-rose-300 flex items-center gap-3",children:[e.jsxs("div",{className:"relative",children:[e.jsx("div",{className:"w-10 h-10 bg-white/20 rounded-xl flex items-center justify-center",children:e.jsx(c,{size:20,className:"text-white",fill:"currentColor"})}),e.jsx(r.div,{className:"absolute -top-1 -right-1",animate:{rotate:[0,360]},transition:{duration:2,repeat:1/0,ease:"linear"},children:e.jsx(m,{size:16,className:"text-rose-200"})})]}),e.jsxs("div",{children:[e.jsx("p",{className:"text-sm font-bold",children:a}),e.jsxs("p",{className:"text-2xl font-black",children:["+",i," XP"]})]})]})})}));export{v as default};
assets/{apiService-BcE-mX0v.js β†’ apiService-axx1LHMk.js} RENAMED
@@ -1,4 +1,4 @@
1
- import{G as B}from"./index-DUxNDyEU.js";import"./vendor-react-Dexh7fmo.js";import"./vendor-firebase-auth-COrkgW0P.js";import"./vendor-firebase-core-DQ-pMjxd.js";import"./vendor-firebase-firestore-BML5nJHm.js";import"./vendor-firebase-storage-BOeKE_0n.js";import"./vendor-firebase-analytics-CCo6E2f7.js";const z=3e4,ce=3,le=1e3;class E extends Error{status;statusText;endpoint;responseBody;retryable;requestId;constructor(t){super(`API Error ${t.status} (${t.statusText}) on ${t.endpoint}: ${t.responseBody}`),this.name="ApiError",this.status=t.status,this.statusText=t.statusText,this.endpoint=t.endpoint,this.responseBody=t.responseBody,this.retryable=t.retryable,this.requestId=t.requestId}}class N extends Error{endpoint;timeoutMs;constructor(t,r){super(`Request to ${t} timed out after ${r}ms`),this.name="ApiTimeoutError",this.endpoint=t,this.timeoutMs=r}}class W extends Error{endpoint;originalError;constructor(t,r){super(`Network error on ${t}: ${r.message}`),this.name="ApiNetworkError",this.endpoint=t,this.originalError=r}}class y extends Error{endpoint;details;constructor(t,r){super(`Validation error before calling ${t}: ${r}`),this.name="ApiValidationError",this.endpoint=t,this.details=r}}const me=new Set([408,429,500,502,503,504]);function fe(e){return me.has(e)}function K(e){const t=`[API ${e.level.toUpperCase()}] ${e.timestamp} ${e.method} ${e.endpoint}`;switch(e.level){case"error":console.error(t,e.message,e.details??"");break;case"warn":console.warn(t,e.message,e.details??"");break;default:console.info(t,e.message,e.details??"")}}function I(e,t,r,a){K({timestamp:new Date().toISOString(),level:"info",endpoint:e,method:t,message:r,details:a})}function Y(e,t,r,a){K({timestamp:new Date().toISOString(),level:"warn",endpoint:e,method:t,message:r,details:a})}function m(e,t,r,a){K({timestamp:new Date().toISOString(),level:"error",endpoint:e,method:t,message:r,details:a})}function pe(e,t,r=z){const a=new AbortController,s=setTimeout(()=>a.abort(),r);return{promise:fetch(e,{...t,signal:a.signal}).finally(()=>clearTimeout(s)),abort:()=>a.abort()}}let he=e=>new Promise(t=>setTimeout(t,e));function ee(e){return he(e)}function ye(e,t=le){const r=t*Math.pow(2,e),a=Math.random()*t;return Math.min(r+a,3e4)}async function te(e,t={},r={}){const{maxRetries:a=ce,timeoutMs:s=z,baseBackoffMs:f=le}=r,d=(t.method??"GET").toUpperCase();let i;for(let n=0;n<=a;n++){const g=Date.now();try{n>0&&I(e,d,`Retry attempt ${n}/${a}`);const{promise:l}=pe(e,t,s),c=await l,w=Date.now()-g;if(c.ok)return I(e,d,`${c.status} in ${w}ms`,{attempt:n}),await c.json();const L=await c.text().catch(()=>"Unable to read response body"),R=fe(c.status),k=new E({status:c.status,statusText:c.statusText,endpoint:e,responseBody:L,retryable:R,requestId:c.headers.get("x-request-id")??void 0});if(m(e,d,`${c.status} ${c.statusText} in ${w}ms`,{attempt:n,responseBody:L.slice(0,500),retryable:R}),!R)throw k;if(c.status===429){const u=c.headers.get("retry-after");if(u){const P=parseInt(u,10);if(!isNaN(P)&&P>0){Y(e,d,`Rate limited. Waiting ${P}s (Retry-After header)`),await ee(P*1e3),i=k;continue}}}i=k}catch(l){const c=Date.now()-g;if(l instanceof E&&!l.retryable)throw l;if(l instanceof DOMException&&l.name==="AbortError"){const w=new N(e,s);m(e,d,`Timeout after ${c}ms`,{attempt:n,timeoutMs:s}),i=w}else if(l instanceof TypeError&&l.message.includes("fetch")){const w=new W(e,l);m(e,d,`Network error after ${c}ms: ${l.message}`,{attempt:n}),i=w}else l instanceof E?i=l:(i=l instanceof Error?l:new Error(String(l)),m(e,d,`Unexpected error: ${i.message}`,{attempt:n}))}if(n<a){const l=ye(n,f);Y(e,d,`Backing off ${Math.round(l)}ms before attempt ${n+1}`,{attempt:n}),await ee(l)}}throw m(e,d,`All ${a+1} attempts failed`),i??new Error(`retryFetch: all ${a+1} attempts failed for ${e}`)}async function x(e,t,r="API call"){try{return{data:await e(),fromFallback:!1}}catch(a){return Y("","",`${r} failed β€” returning fallback`,{error:a instanceof Error?a.message:String(a)}),{data:t,fromFallback:!0}}}function p(e,t){const r=Object.entries(t).filter(([,a])=>a==null||a==="").map(([a])=>a);if(r.length>0)throw new y(e,`Missing required fields: ${r.join(", ")}`)}function h(e,t,r,a,s){if(typeof r!="number"||isNaN(r)||r<a||r>s)throw new y(e,`${t} must be a number between ${a} and ${s}, got ${r}`)}const U="https://deign86-mathpulse-api-v3test.hf.space",q=(e,t)=>t,de=(e,t)=>t,j=q(void 0,!0),re=q(void 0,!0),ae=q(void 0,!0),se=q(void 0,!0),ne=de(void 0,9e4),H=de(void 0,9e5);let Q=!0,ie=0;const ge=6e4,F={maxRetries:ce,timeoutMs:z,baseBackoffMs:1e3},A={...F,timeoutMs:6e4},Se={...A,maxRetries:1,timeoutMs:45e3,baseBackoffMs:750},V={maxRetries:2,timeoutMs:12e4,baseBackoffMs:2e3},we={maxRetries:0,timeoutMs:8e3,baseBackoffMs:500};let D=null;async function Be(){return D||(D=(async()=>{try{I("/health","GET","Warming up HuggingFace Space...");const e=new AbortController,t=setTimeout(()=>e.abort(),15e3),r=await fetch(`${U}/health`,{method:"GET",signal:e.signal});return clearTimeout(t),r.ok?(I("/health","GET","Backend warm and ready"),!0):(console.warn("[apiService] Backend health check returned",r.status),!1)}catch(e){return console.warn("[apiService] Backend warmup failed (cold start expected):",e),!1}})(),D)}async function o(e,t,r=F){const a=`${U}${e}`,s=t?.method??"GET";I(e,s,"Starting request");const f=async i=>{const n=new Headers(t?.headers??{});!(t?.body instanceof FormData)&&!n.has("Content-Type")&&n.set("Content-Type","application/json");const g=B.currentUser;if(g)try{const l=await g.getIdToken(i);l&&n.set("Authorization",`Bearer ${l}`)}catch(l){m(e,s,"Failed to acquire Firebase ID token",l)}return{...t,headers:n}};let d=await f(!1);try{const i=await te(a,d,r);return I(e,s,"Request succeeded"),i}catch(i){if(i instanceof E&&i.status===401&&B.currentUser)try{I(e,s,"401 received, refreshing Firebase token and retrying once"),d=await f(!0);const n=await te(a,d,r);return I(e,s,"Request succeeded after token refresh"),n}catch(n){throw n instanceof E?m(e,s,`HTTP ${n.status}: ${n.responseBody.slice(0,300)}`):n instanceof N?m(e,s,`Timeout after ${n.timeoutMs}ms`):n instanceof W?m(e,s,`Network error: ${n.originalError.message}`):m(e,s,`Unexpected: ${n instanceof Error?n.message:String(n)}`),n}throw i instanceof E?m(e,s,`HTTP ${i.status}: ${i.responseBody.slice(0,300)}`):i instanceof N?m(e,s,`Timeout after ${i.timeoutMs}ms`):i instanceof W?m(e,s,`Network error: ${i.originalError.message}`):m(e,s,`Unexpected: ${i instanceof Error?i.message:String(i)}`),i}}async function Te(e,t,r=z){const a=`${U}${e}`,s=t?.method??"GET";I(e,s,"Starting blob request");const f=async d=>{const i=new Headers(t?.headers??{}),n=B.currentUser;if(n)try{const c=await n.getIdToken(d);c&&i.set("Authorization",`Bearer ${c}`)}catch(c){m(e,s,"Failed to acquire Firebase ID token",c)}const g=new AbortController,l=setTimeout(()=>g.abort(),r);try{const c=await fetch(a,{...t,headers:i,signal:g.signal});if(!c.ok){const w=await c.text();throw new E({status:c.status,statusText:c.statusText||"Request Failed",endpoint:e,responseBody:w,retryable:c.status>=500||c.status===429})}return await c.blob()}finally{clearTimeout(l)}};try{return await f(!1)}catch(d){if(d instanceof E&&d.status===401&&B.currentUser)return I(e,s,"401 received for blob request, refreshing Firebase token and retrying once"),f(!0);throw d}}const be={response:"Sorry, the AI tutor is temporarily unavailable. Please try again in a moment."},Ie={riskLevel:"Medium",confidence:0,analysis:{labels:[],scores:[]},risk_level:"medium",risk_score:0,top_factors:["Fallback risk response due to temporary service unavailability"]},Ee={learningPath:"Unable to generate a learning path right now. Please try again later."},ke={insight:"Daily insight is temporarily unavailable. Please refresh later."},Ae={expression:"",result:"Error: calculation service unavailable",steps:[],simplified:null,latex:null};function Oe(e){if(typeof e!="object"||e===null)return!1;const t=e;return typeof t.riskLevel=="string"&&typeof t.confidence=="number"}function oe(e){if(typeof e!="object"||e===null)return!1;const t=e;return Array.isArray(t.questions)&&typeof t.totalPoints=="number"}const ve=e=>new Promise(t=>setTimeout(t,e));function Re(e){if(!e)return"Generation task failed without a detailed error.";if(typeof e=="string")return e;if(typeof e=="object"&&e!==null){const t=e;if(typeof t.message=="string")return t.message;try{return JSON.stringify(t)}catch{return"Generation task failed due to an unknown error."}}return String(e)}const b={getImportGroundedRolloutFlags(){return{quizEnabled:j,lessonEnabled:re,feedbackEnabled:ae}},async reportImportGroundedFeedback(e){return ae?o("/api/feedback/import-grounded",{method:"POST",body:JSON.stringify(e)}):{success:!0,stored:!1,warnings:["Import-grounded feedback events are disabled by frontend rollout flag."]}},async health(){return o("/health",void 0,{...F,timeoutMs:1e4})},async chat(e,t,r,a){p("/api/chat",{message:e});const s={message:e,history:t??[],...a?.expectedEndMarker?{expectedEndMarker:a.expectedEndMarker}:{},...a?.completionMode?{completionMode:a.completionMode}:{},...typeof a?.continuationMaxRounds=="number"?{continuationMaxRounds:Math.max(0,Math.floor(a.continuationMaxRounds))}:{}};if(r){const d=new AbortController;let i=null,n=null,g=null;const l=u=>{i||(i=u,d.abort())},c=()=>{n&&(clearTimeout(n),n=null),g&&(clearTimeout(g),g=null)},w=()=>{n&&clearTimeout(n),n=setTimeout(()=>l("idle"),ne)};g=setTimeout(()=>l("total"),H);const L=new Headers({"Content-Type":"application/json"}),R=B.currentUser;if(R)try{const u=await R.getIdToken(!1);u&&L.set("Authorization",`Bearer ${u}`)}catch(u){m("/api/chat/stream","POST","Failed to acquire Firebase ID token",u)}let k=null;try{w();const u=await fetch(`${U}/api/chat/stream`,{method:"POST",headers:L,body:JSON.stringify(s),signal:d.signal});if(!u.ok||!u.body){const $=await u.text().catch(()=>"Unable to read response body");throw new Error(`Streaming request failed (${u.status}): ${$.slice(0,300)}`)}k=u.body.getReader();const P=new TextDecoder;let O="",G="",X=!1;const J=$=>{const v=$.indexOf(`
2
 
3
  `),T=$.indexOf(`\r
4
  \r
 
1
+ import{G as B}from"./index-D4nJsLyx.js";import"./vendor-react-Dexh7fmo.js";import"./vendor-firebase-auth-COrkgW0P.js";import"./vendor-firebase-core-DQ-pMjxd.js";import"./vendor-firebase-firestore-BML5nJHm.js";import"./vendor-firebase-storage-BOeKE_0n.js";import"./vendor-firebase-analytics-CCo6E2f7.js";const z=3e4,ce=3,le=1e3;class E extends Error{status;statusText;endpoint;responseBody;retryable;requestId;constructor(t){super(`API Error ${t.status} (${t.statusText}) on ${t.endpoint}: ${t.responseBody}`),this.name="ApiError",this.status=t.status,this.statusText=t.statusText,this.endpoint=t.endpoint,this.responseBody=t.responseBody,this.retryable=t.retryable,this.requestId=t.requestId}}class N extends Error{endpoint;timeoutMs;constructor(t,r){super(`Request to ${t} timed out after ${r}ms`),this.name="ApiTimeoutError",this.endpoint=t,this.timeoutMs=r}}class W extends Error{endpoint;originalError;constructor(t,r){super(`Network error on ${t}: ${r.message}`),this.name="ApiNetworkError",this.endpoint=t,this.originalError=r}}class y extends Error{endpoint;details;constructor(t,r){super(`Validation error before calling ${t}: ${r}`),this.name="ApiValidationError",this.endpoint=t,this.details=r}}const me=new Set([408,429,500,502,503,504]);function fe(e){return me.has(e)}function K(e){const t=`[API ${e.level.toUpperCase()}] ${e.timestamp} ${e.method} ${e.endpoint}`;switch(e.level){case"error":console.error(t,e.message,e.details??"");break;case"warn":console.warn(t,e.message,e.details??"");break;default:console.info(t,e.message,e.details??"")}}function I(e,t,r,a){K({timestamp:new Date().toISOString(),level:"info",endpoint:e,method:t,message:r,details:a})}function Y(e,t,r,a){K({timestamp:new Date().toISOString(),level:"warn",endpoint:e,method:t,message:r,details:a})}function m(e,t,r,a){K({timestamp:new Date().toISOString(),level:"error",endpoint:e,method:t,message:r,details:a})}function pe(e,t,r=z){const a=new AbortController,s=setTimeout(()=>a.abort(),r);return{promise:fetch(e,{...t,signal:a.signal}).finally(()=>clearTimeout(s)),abort:()=>a.abort()}}let he=e=>new Promise(t=>setTimeout(t,e));function ee(e){return he(e)}function ye(e,t=le){const r=t*Math.pow(2,e),a=Math.random()*t;return Math.min(r+a,3e4)}async function te(e,t={},r={}){const{maxRetries:a=ce,timeoutMs:s=z,baseBackoffMs:f=le}=r,d=(t.method??"GET").toUpperCase();let i;for(let n=0;n<=a;n++){const g=Date.now();try{n>0&&I(e,d,`Retry attempt ${n}/${a}`);const{promise:l}=pe(e,t,s),c=await l,w=Date.now()-g;if(c.ok)return I(e,d,`${c.status} in ${w}ms`,{attempt:n}),await c.json();const L=await c.text().catch(()=>"Unable to read response body"),R=fe(c.status),k=new E({status:c.status,statusText:c.statusText,endpoint:e,responseBody:L,retryable:R,requestId:c.headers.get("x-request-id")??void 0});if(m(e,d,`${c.status} ${c.statusText} in ${w}ms`,{attempt:n,responseBody:L.slice(0,500),retryable:R}),!R)throw k;if(c.status===429){const u=c.headers.get("retry-after");if(u){const P=parseInt(u,10);if(!isNaN(P)&&P>0){Y(e,d,`Rate limited. Waiting ${P}s (Retry-After header)`),await ee(P*1e3),i=k;continue}}}i=k}catch(l){const c=Date.now()-g;if(l instanceof E&&!l.retryable)throw l;if(l instanceof DOMException&&l.name==="AbortError"){const w=new N(e,s);m(e,d,`Timeout after ${c}ms`,{attempt:n,timeoutMs:s}),i=w}else if(l instanceof TypeError&&l.message.includes("fetch")){const w=new W(e,l);m(e,d,`Network error after ${c}ms: ${l.message}`,{attempt:n}),i=w}else l instanceof E?i=l:(i=l instanceof Error?l:new Error(String(l)),m(e,d,`Unexpected error: ${i.message}`,{attempt:n}))}if(n<a){const l=ye(n,f);Y(e,d,`Backing off ${Math.round(l)}ms before attempt ${n+1}`,{attempt:n}),await ee(l)}}throw m(e,d,`All ${a+1} attempts failed`),i??new Error(`retryFetch: all ${a+1} attempts failed for ${e}`)}async function x(e,t,r="API call"){try{return{data:await e(),fromFallback:!1}}catch(a){return Y("","",`${r} failed β€” returning fallback`,{error:a instanceof Error?a.message:String(a)}),{data:t,fromFallback:!0}}}function p(e,t){const r=Object.entries(t).filter(([,a])=>a==null||a==="").map(([a])=>a);if(r.length>0)throw new y(e,`Missing required fields: ${r.join(", ")}`)}function h(e,t,r,a,s){if(typeof r!="number"||isNaN(r)||r<a||r>s)throw new y(e,`${t} must be a number between ${a} and ${s}, got ${r}`)}const U="https://deign86-mathpulse-api-v3test.hf.space",q=(e,t)=>t,de=(e,t)=>t,j=q(void 0,!0),re=q(void 0,!0),ae=q(void 0,!0),se=q(void 0,!0),ne=de(void 0,9e4),H=de(void 0,9e5);let Q=!0,ie=0;const ge=6e4,F={maxRetries:ce,timeoutMs:z,baseBackoffMs:1e3},A={...F,timeoutMs:6e4},Se={...A,maxRetries:1,timeoutMs:45e3,baseBackoffMs:750},V={maxRetries:2,timeoutMs:12e4,baseBackoffMs:2e3},we={maxRetries:0,timeoutMs:8e3,baseBackoffMs:500};let D=null;async function Be(){return D||(D=(async()=>{try{I("/health","GET","Warming up HuggingFace Space...");const e=new AbortController,t=setTimeout(()=>e.abort(),15e3),r=await fetch(`${U}/health`,{method:"GET",signal:e.signal});return clearTimeout(t),r.ok?(I("/health","GET","Backend warm and ready"),!0):(console.warn("[apiService] Backend health check returned",r.status),!1)}catch(e){return console.warn("[apiService] Backend warmup failed (cold start expected):",e),!1}})(),D)}async function o(e,t,r=F){const a=`${U}${e}`,s=t?.method??"GET";I(e,s,"Starting request");const f=async i=>{const n=new Headers(t?.headers??{});!(t?.body instanceof FormData)&&!n.has("Content-Type")&&n.set("Content-Type","application/json");const g=B.currentUser;if(g)try{const l=await g.getIdToken(i);l&&n.set("Authorization",`Bearer ${l}`)}catch(l){m(e,s,"Failed to acquire Firebase ID token",l)}return{...t,headers:n}};let d=await f(!1);try{const i=await te(a,d,r);return I(e,s,"Request succeeded"),i}catch(i){if(i instanceof E&&i.status===401&&B.currentUser)try{I(e,s,"401 received, refreshing Firebase token and retrying once"),d=await f(!0);const n=await te(a,d,r);return I(e,s,"Request succeeded after token refresh"),n}catch(n){throw n instanceof E?m(e,s,`HTTP ${n.status}: ${n.responseBody.slice(0,300)}`):n instanceof N?m(e,s,`Timeout after ${n.timeoutMs}ms`):n instanceof W?m(e,s,`Network error: ${n.originalError.message}`):m(e,s,`Unexpected: ${n instanceof Error?n.message:String(n)}`),n}throw i instanceof E?m(e,s,`HTTP ${i.status}: ${i.responseBody.slice(0,300)}`):i instanceof N?m(e,s,`Timeout after ${i.timeoutMs}ms`):i instanceof W?m(e,s,`Network error: ${i.originalError.message}`):m(e,s,`Unexpected: ${i instanceof Error?i.message:String(i)}`),i}}async function Te(e,t,r=z){const a=`${U}${e}`,s=t?.method??"GET";I(e,s,"Starting blob request");const f=async d=>{const i=new Headers(t?.headers??{}),n=B.currentUser;if(n)try{const c=await n.getIdToken(d);c&&i.set("Authorization",`Bearer ${c}`)}catch(c){m(e,s,"Failed to acquire Firebase ID token",c)}const g=new AbortController,l=setTimeout(()=>g.abort(),r);try{const c=await fetch(a,{...t,headers:i,signal:g.signal});if(!c.ok){const w=await c.text();throw new E({status:c.status,statusText:c.statusText||"Request Failed",endpoint:e,responseBody:w,retryable:c.status>=500||c.status===429})}return await c.blob()}finally{clearTimeout(l)}};try{return await f(!1)}catch(d){if(d instanceof E&&d.status===401&&B.currentUser)return I(e,s,"401 received for blob request, refreshing Firebase token and retrying once"),f(!0);throw d}}const be={response:"Sorry, the AI tutor is temporarily unavailable. Please try again in a moment."},Ie={riskLevel:"Medium",confidence:0,analysis:{labels:[],scores:[]},risk_level:"medium",risk_score:0,top_factors:["Fallback risk response due to temporary service unavailability"]},Ee={learningPath:"Unable to generate a learning path right now. Please try again later."},ke={insight:"Daily insight is temporarily unavailable. Please refresh later."},Ae={expression:"",result:"Error: calculation service unavailable",steps:[],simplified:null,latex:null};function Oe(e){if(typeof e!="object"||e===null)return!1;const t=e;return typeof t.riskLevel=="string"&&typeof t.confidence=="number"}function oe(e){if(typeof e!="object"||e===null)return!1;const t=e;return Array.isArray(t.questions)&&typeof t.totalPoints=="number"}const ve=e=>new Promise(t=>setTimeout(t,e));function Re(e){if(!e)return"Generation task failed without a detailed error.";if(typeof e=="string")return e;if(typeof e=="object"&&e!==null){const t=e;if(typeof t.message=="string")return t.message;try{return JSON.stringify(t)}catch{return"Generation task failed due to an unknown error."}}return String(e)}const b={getImportGroundedRolloutFlags(){return{quizEnabled:j,lessonEnabled:re,feedbackEnabled:ae}},async reportImportGroundedFeedback(e){return ae?o("/api/feedback/import-grounded",{method:"POST",body:JSON.stringify(e)}):{success:!0,stored:!1,warnings:["Import-grounded feedback events are disabled by frontend rollout flag."]}},async health(){return o("/health",void 0,{...F,timeoutMs:1e4})},async chat(e,t,r,a){p("/api/chat",{message:e});const s={message:e,history:t??[],...a?.expectedEndMarker?{expectedEndMarker:a.expectedEndMarker}:{},...a?.completionMode?{completionMode:a.completionMode}:{},...typeof a?.continuationMaxRounds=="number"?{continuationMaxRounds:Math.max(0,Math.floor(a.continuationMaxRounds))}:{}};if(r){const d=new AbortController;let i=null,n=null,g=null;const l=u=>{i||(i=u,d.abort())},c=()=>{n&&(clearTimeout(n),n=null),g&&(clearTimeout(g),g=null)},w=()=>{n&&clearTimeout(n),n=setTimeout(()=>l("idle"),ne)};g=setTimeout(()=>l("total"),H);const L=new Headers({"Content-Type":"application/json"}),R=B.currentUser;if(R)try{const u=await R.getIdToken(!1);u&&L.set("Authorization",`Bearer ${u}`)}catch(u){m("/api/chat/stream","POST","Failed to acquire Firebase ID token",u)}let k=null;try{w();const u=await fetch(`${U}/api/chat/stream`,{method:"POST",headers:L,body:JSON.stringify(s),signal:d.signal});if(!u.ok||!u.body){const $=await u.text().catch(()=>"Unable to read response body");throw new Error(`Streaming request failed (${u.status}): ${$.slice(0,300)}`)}k=u.body.getReader();const P=new TextDecoder;let O="",G="",X=!1;const J=$=>{const v=$.indexOf(`
2
 
3
  `),T=$.indexOf(`\r
4
  \r
assets/{automationService-DCIX9fmr.js β†’ automationService-DNyauqGd.js} RENAMED
@@ -1 +1 @@
1
- import{m as p,e as r,q as w,w as h,f as z,n as Q,a as i,s as I,d as b,u as A}from"./vendor-firebase-firestore-BML5nJHm.js";import{d as s,O as a,P as $}from"./index-DUxNDyEU.js";import"./vendor-firebase-core-DQ-pMjxd.js";import"./vendor-react-Dexh7fmo.js";import"./vendor-firebase-auth-COrkgW0P.js";import"./vendor-firebase-storage-BOeKE_0n.js";import"./vendor-firebase-analytics-CCo6E2f7.js";async function T(e){if(!e)return 0;const n=r(s,"deepDiagnosticAssignments"),c=w(n,h("lrn","==",e));return(await z(c)).docs.filter(o=>{const t=o.data().status;return t==="pending"||t==="queued"||t==="in_progress"||t==="expired"}).length}async function k(e,n,c="Grade 11",u,o="iar_only",t="initial_assessment"){if(t==="followup_diagnostic"){const D=r(s,"deepDiagnosticAssignments"),C=w(D,h("lrn","==",e)),d=await z(C);if(!d.empty){const m=Q(s);let g=!1;for(const l of d.docs){const f=l.data().status;(f==="pending"||f==="queued")&&(m.update(l.ref,{status:"in_progress",startedAt:i()}),g=!0)}g&&await m.commit()}}return await I(b(s,"diagnosticResults",e),{lrn:e,results:n,gradeLevel:c,workflowMode:o,assessmentType:t,questionBreakdown:u||null,completedAt:i(),processed:!1,processing:!1}),{success:!0,event:"diagnostic_completed",lrn:e,message:`Diagnostic submitted for ${e}. Processing will begin automatically.`,remedialQuizzesCreated:0,notifications:["Your diagnostic results are being processed. Check back shortly!"]}}async function B(e){return await p(r(s,"quizResults"),{lrn:e.lrn,quizId:e.quizId,subject:e.subject,score:e.score,totalQuestions:e.totalQuestions,correctAnswers:e.correctAnswers,timeSpentSeconds:e.timeSpentSeconds,answers:e.answers||null,submittedAt:i()}),{success:!0,event:"quiz_submitted",lrn:e.lrn,message:`Quiz submitted for ${e.lrn}. Risk recalculation will run automatically.`,remedialQuizzesCreated:0,notifications:[`Quiz result recorded for ${e.subject}.`]}}async function M(e){return await $(e.lrn),await a(e.lrn,"reminder","Welcome to MathPulse AI!","Complete your diagnostic assessment to get started with personalised learning."),e.teacherId&&await a(e.teacherId,"message","New Student Enrolled",`${e.name} has joined. Diagnostic assessment is pending.`),{success:!0,event:"student_enrolled",lrn:e.lrn,message:`Student ${e.name} enrolled and initialised`,remedialQuizzesCreated:0,notifications:[`Welcome ${e.name}! Please complete the diagnostic assessment.`]}}async function U(e){return await p(r(s,"dataImports"),{teacherId:e.teacherId,studentCount:e.students.length,columnMapping:e.columnMapping,importedAt:i(),processed:!1}),await a(e.teacherId,"message","Data Import Processed",`Data import complete β€” ${e.students.length} student records processed.`),{success:!0,event:"data_imported",message:`Data import processed for ${e.students.length} students`,remedialQuizzesCreated:0,notifications:[`Data import complete β€” ${e.students.length} student records processed.`]}}async function x(e){const n=b(s,"curriculumContent",e.contentId);return e.action==="delete"?await A(n,{deleted:!0,deletedBy:e.adminId,deletedAt:i(),contentType:e.contentType,subjectId:e.subjectId||null}):await I(n,{contentType:e.contentType,subjectId:e.subjectId||null,details:e.details||null,updatedBy:e.adminId,action:e.action,updatedAt:i()},{merge:!0}),{success:!0,event:"content_updated",message:`Content ${e.action} processed for ${e.contentType}`,remedialQuizzesCreated:0,notifications:[]}}export{T as getPendingDeepDiagnosticCount,x as triggerContentUpdated,U as triggerDataImported,k as triggerDiagnosticCompleted,B as triggerQuizSubmitted,M as triggerStudentEnrolled};
 
1
+ import{m as p,e as r,q as w,w as h,f as z,n as Q,a as i,s as I,d as b,u as A}from"./vendor-firebase-firestore-BML5nJHm.js";import{d as s,O as a,P as $}from"./index-D4nJsLyx.js";import"./vendor-firebase-core-DQ-pMjxd.js";import"./vendor-react-Dexh7fmo.js";import"./vendor-firebase-auth-COrkgW0P.js";import"./vendor-firebase-storage-BOeKE_0n.js";import"./vendor-firebase-analytics-CCo6E2f7.js";async function T(e){if(!e)return 0;const n=r(s,"deepDiagnosticAssignments"),c=w(n,h("lrn","==",e));return(await z(c)).docs.filter(o=>{const t=o.data().status;return t==="pending"||t==="queued"||t==="in_progress"||t==="expired"}).length}async function k(e,n,c="Grade 11",u,o="iar_only",t="initial_assessment"){if(t==="followup_diagnostic"){const D=r(s,"deepDiagnosticAssignments"),C=w(D,h("lrn","==",e)),d=await z(C);if(!d.empty){const m=Q(s);let g=!1;for(const l of d.docs){const f=l.data().status;(f==="pending"||f==="queued")&&(m.update(l.ref,{status:"in_progress",startedAt:i()}),g=!0)}g&&await m.commit()}}return await I(b(s,"diagnosticResults",e),{lrn:e,results:n,gradeLevel:c,workflowMode:o,assessmentType:t,questionBreakdown:u||null,completedAt:i(),processed:!1,processing:!1}),{success:!0,event:"diagnostic_completed",lrn:e,message:`Diagnostic submitted for ${e}. Processing will begin automatically.`,remedialQuizzesCreated:0,notifications:["Your diagnostic results are being processed. Check back shortly!"]}}async function B(e){return await p(r(s,"quizResults"),{lrn:e.lrn,quizId:e.quizId,subject:e.subject,score:e.score,totalQuestions:e.totalQuestions,correctAnswers:e.correctAnswers,timeSpentSeconds:e.timeSpentSeconds,answers:e.answers||null,submittedAt:i()}),{success:!0,event:"quiz_submitted",lrn:e.lrn,message:`Quiz submitted for ${e.lrn}. Risk recalculation will run automatically.`,remedialQuizzesCreated:0,notifications:[`Quiz result recorded for ${e.subject}.`]}}async function M(e){return await $(e.lrn),await a(e.lrn,"reminder","Welcome to MathPulse AI!","Complete your diagnostic assessment to get started with personalised learning."),e.teacherId&&await a(e.teacherId,"message","New Student Enrolled",`${e.name} has joined. Diagnostic assessment is pending.`),{success:!0,event:"student_enrolled",lrn:e.lrn,message:`Student ${e.name} enrolled and initialised`,remedialQuizzesCreated:0,notifications:[`Welcome ${e.name}! Please complete the diagnostic assessment.`]}}async function U(e){return await p(r(s,"dataImports"),{teacherId:e.teacherId,studentCount:e.students.length,columnMapping:e.columnMapping,importedAt:i(),processed:!1}),await a(e.teacherId,"message","Data Import Processed",`Data import complete β€” ${e.students.length} student records processed.`),{success:!0,event:"data_imported",message:`Data import processed for ${e.students.length} students`,remedialQuizzesCreated:0,notifications:[`Data import complete β€” ${e.students.length} student records processed.`]}}async function x(e){const n=b(s,"curriculumContent",e.contentId);return e.action==="delete"?await A(n,{deleted:!0,deletedBy:e.adminId,deletedAt:i(),contentType:e.contentType,subjectId:e.subjectId||null}):await I(n,{contentType:e.contentType,subjectId:e.subjectId||null,details:e.details||null,updatedBy:e.adminId,action:e.action,updatedAt:i()},{merge:!0}),{success:!0,event:"content_updated",message:`Content ${e.action} processed for ${e.contentType}`,remedialQuizzesCreated:0,notifications:[]}}export{T as getPendingDeepDiagnosticCount,x as triggerContentUpdated,U as triggerDataImported,k as triggerDiagnosticCompleted,B as triggerQuizSubmitted,M as triggerStudentEnrolled};
assets/{award-UT1_i9UI.js β†’ award-oJTbc9W5.js} RENAMED
@@ -1,4 +1,4 @@
1
- import{c}from"./index-DUxNDyEU.js";/**
2
  * @license lucide-react v0.487.0 - ISC
3
  *
4
  * This source code is licensed under the ISC license.
 
1
+ import{c}from"./index-D4nJsLyx.js";/**
2
  * @license lucide-react v0.487.0 - ISC
3
  *
4
  * This source code is licensed under the ISC license.
assets/{bell-CdZB167e.js β†’ bell-CbSbac2W.js} RENAMED
@@ -1,4 +1,4 @@
1
- import{c as e}from"./index-DUxNDyEU.js";/**
2
  * @license lucide-react v0.487.0 - ISC
3
  *
4
  * This source code is licensed under the ISC license.
 
1
+ import{c as e}from"./index-D4nJsLyx.js";/**
2
  * @license lucide-react v0.487.0 - ISC
3
  *
4
  * This source code is licensed under the ISC license.
assets/{book-open-B5Fr9j0O.js β†’ book-open-BH50GByv.js} RENAMED
@@ -1,4 +1,4 @@
1
- import{c as o}from"./index-DUxNDyEU.js";/**
2
  * @license lucide-react v0.487.0 - ISC
3
  *
4
  * This source code is licensed under the ISC license.
 
1
+ import{c as o}from"./index-D4nJsLyx.js";/**
2
  * @license lucide-react v0.487.0 - ISC
3
  *
4
  * This source code is licensed under the ISC license.
assets/{brain-D2SpSiL8.js β†’ brain-CPvGdgWE.js} RENAMED
@@ -1,4 +1,4 @@
1
- import{c as a}from"./index-DUxNDyEU.js";/**
2
  * @license lucide-react v0.487.0 - ISC
3
  *
4
  * This source code is licensed under the ISC license.
 
1
+ import{c as a}from"./index-D4nJsLyx.js";/**
2
  * @license lucide-react v0.487.0 - ISC
3
  *
4
  * This source code is licensed under the ISC license.
assets/{calendar-DOp6N-WM.js β†’ calendar-BJ8oE6yW.js} RENAMED
@@ -1,4 +1,4 @@
1
- import{c as e}from"./index-DUxNDyEU.js";/**
2
  * @license lucide-react v0.487.0 - ISC
3
  *
4
  * This source code is licensed under the ISC license.
 
1
+ import{c as e}from"./index-D4nJsLyx.js";/**
2
  * @license lucide-react v0.487.0 - ISC
3
  *
4
  * This source code is licensed under the ISC license.
assets/{chart-column-BSv3Tlcd.js β†’ chart-column-D5mAWcRx.js} RENAMED
@@ -1,4 +1,4 @@
1
- import{c as t}from"./index-DUxNDyEU.js";/**
2
  * @license lucide-react v0.487.0 - ISC
3
  *
4
  * This source code is licensed under the ISC license.
 
1
+ import{c as t}from"./index-D4nJsLyx.js";/**
2
  * @license lucide-react v0.487.0 - ISC
3
  *
4
  * This source code is licensed under the ISC license.
assets/{chatService-D3W4VTvs.js β†’ chatService-LsXGqjoV.js} RENAMED
@@ -1 +1 @@
1
- import{d as c,e as d,b as g,a as i,s as w,u as p,q as l,w as u,o as y,f as A}from"./vendor-firebase-firestore-BML5nJHm.js";import{d as o}from"./index-DUxNDyEU.js";import"./vendor-firebase-core-DQ-pMjxd.js";import"./vendor-react-Dexh7fmo.js";import"./vendor-firebase-auth-COrkgW0P.js";import"./vendor-firebase-storage-BOeKE_0n.js";import"./vendor-firebase-analytics-CCo6E2f7.js";const C=async(s,t="New Conversation")=>{try{const e=c(d(o,"chatSessions")),r={id:e.id,userId:s,title:t,messages:[],createdAt:new Date,updatedAt:new Date,isActive:!0};return await w(e,{...r,createdAt:i(),updatedAt:i()}),r}catch(e){throw console.error("Error creating chat session:",e),e}},M=async s=>{try{const t=l(d(o,"chatSessions"),u("userId","==",s),u("isActive","==",!0),y("updatedAt","desc"));return(await A(t)).docs.map(r=>{const a=r.data();return{...a,createdAt:a.createdAt?.toDate()||new Date,updatedAt:a.updatedAt?.toDate()||new Date}})}catch(t){return console.error("Error getting chat sessions:",t),[]}},T=async s=>{try{const t=await g(c(o,"chatSessions",s));if(t.exists()){const e=t.data();return{...e,createdAt:e.createdAt?.toDate()||new Date,updatedAt:e.updatedAt?.toDate()||new Date}}return null}catch(t){return console.error("Error getting chat session:",t),null}},b=async(s,t,e,r)=>{try{const a=c(d(o,"chatMessages")),n={id:a.id,userId:"",role:t,content:e,timestamp:new Date,...r?{context:r}:{}},h=await g(c(o,"chatSessions",s));h.exists()&&(n.userId=h.data().userId);const m={id:n.id,userId:n.userId,role:n.role,content:n.content,sessionId:s,timestamp:i()};return n.context&&(m.context=n.context),await w(a,m),await p(c(o,"chatSessions",s),{updatedAt:i()}),n}catch(a){throw console.error("Error adding message:",a),a}},q=async s=>{try{const t=l(d(o,"chatMessages"),u("sessionId","==",s),y("timestamp","asc"));return(await A(t)).docs.map(r=>{const a=r.data();return{...a,timestamp:a.timestamp?.toDate()||new Date}})}catch(t){return console.error("Error getting session messages:",t),[]}},Q=async(s,t)=>{try{await p(c(o,"chatSessions",s),{title:t,updatedAt:i()})}catch(e){throw console.error("Error updating session title:",e),e}},R=async s=>{try{await p(c(o,"chatSessions",s),{isActive:!1,updatedAt:i()})}catch(t){throw console.error("Error deleting session:",t),t}};export{b as addMessageToSession,C as createChatSession,R as deleteSession,T as getChatSession,q as getSessionMessages,M as getUserChatSessions,Q as updateSessionTitle};
 
1
+ import{d as c,e as d,b as g,a as i,s as w,u as p,q as l,w as u,o as y,f as A}from"./vendor-firebase-firestore-BML5nJHm.js";import{d as o}from"./index-D4nJsLyx.js";import"./vendor-firebase-core-DQ-pMjxd.js";import"./vendor-react-Dexh7fmo.js";import"./vendor-firebase-auth-COrkgW0P.js";import"./vendor-firebase-storage-BOeKE_0n.js";import"./vendor-firebase-analytics-CCo6E2f7.js";const C=async(s,t="New Conversation")=>{try{const e=c(d(o,"chatSessions")),r={id:e.id,userId:s,title:t,messages:[],createdAt:new Date,updatedAt:new Date,isActive:!0};return await w(e,{...r,createdAt:i(),updatedAt:i()}),r}catch(e){throw console.error("Error creating chat session:",e),e}},M=async s=>{try{const t=l(d(o,"chatSessions"),u("userId","==",s),u("isActive","==",!0),y("updatedAt","desc"));return(await A(t)).docs.map(r=>{const a=r.data();return{...a,createdAt:a.createdAt?.toDate()||new Date,updatedAt:a.updatedAt?.toDate()||new Date}})}catch(t){return console.error("Error getting chat sessions:",t),[]}},T=async s=>{try{const t=await g(c(o,"chatSessions",s));if(t.exists()){const e=t.data();return{...e,createdAt:e.createdAt?.toDate()||new Date,updatedAt:e.updatedAt?.toDate()||new Date}}return null}catch(t){return console.error("Error getting chat session:",t),null}},b=async(s,t,e,r)=>{try{const a=c(d(o,"chatMessages")),n={id:a.id,userId:"",role:t,content:e,timestamp:new Date,...r?{context:r}:{}},h=await g(c(o,"chatSessions",s));h.exists()&&(n.userId=h.data().userId);const m={id:n.id,userId:n.userId,role:n.role,content:n.content,sessionId:s,timestamp:i()};return n.context&&(m.context=n.context),await w(a,m),await p(c(o,"chatSessions",s),{updatedAt:i()}),n}catch(a){throw console.error("Error adding message:",a),a}},q=async s=>{try{const t=l(d(o,"chatMessages"),u("sessionId","==",s),y("timestamp","asc"));return(await A(t)).docs.map(r=>{const a=r.data();return{...a,timestamp:a.timestamp?.toDate()||new Date}})}catch(t){return console.error("Error getting session messages:",t),[]}},Q=async(s,t)=>{try{await p(c(o,"chatSessions",s),{title:t,updatedAt:i()})}catch(e){throw console.error("Error updating session title:",e),e}},R=async s=>{try{await p(c(o,"chatSessions",s),{isActive:!1,updatedAt:i()})}catch(t){throw console.error("Error deleting session:",t),t}};export{b as addMessageToSession,C as createChatSession,R as deleteSession,T as getChatSession,q as getSessionMessages,M as getUserChatSessions,Q as updateSessionTitle};
assets/{check-DF0M9ltT.js β†’ check-BACdUlFL.js} RENAMED
@@ -1,4 +1,4 @@
1
- import{c}from"./index-DUxNDyEU.js";/**
2
  * @license lucide-react v0.487.0 - ISC
3
  *
4
  * This source code is licensed under the ISC license.
 
1
+ import{c}from"./index-D4nJsLyx.js";/**
2
  * @license lucide-react v0.487.0 - ISC
3
  *
4
  * This source code is licensed under the ISC license.
assets/{chevron-right-CSxxBxL8.js β†’ chevron-right-COMox1Xb.js} RENAMED
@@ -1,4 +1,4 @@
1
- import{c as o}from"./index-DUxNDyEU.js";/**
2
  * @license lucide-react v0.487.0 - ISC
3
  *
4
  * This source code is licensed under the ISC license.
 
1
+ import{c as o}from"./index-D4nJsLyx.js";/**
2
  * @license lucide-react v0.487.0 - ISC
3
  *
4
  * This source code is licensed under the ISC license.
assets/{chevron-up-B14f4SwA.js β†’ chevron-up-Bfmq3Clw.js} RENAMED
@@ -1,4 +1,4 @@
1
- import{c as o}from"./index-DUxNDyEU.js";/**
2
  * @license lucide-react v0.487.0 - ISC
3
  *
4
  * This source code is licensed under the ISC license.
 
1
+ import{c as o}from"./index-D4nJsLyx.js";/**
2
  * @license lucide-react v0.487.0 - ISC
3
  *
4
  * This source code is licensed under the ISC license.
assets/{circle-alert-3TSiLPep.js β†’ circle-alert-CBefjicJ.js} RENAMED
@@ -1,4 +1,4 @@
1
- import{c as e}from"./index-DUxNDyEU.js";/**
2
  * @license lucide-react v0.487.0 - ISC
3
  *
4
  * This source code is licensed under the ISC license.
 
1
+ import{c as e}from"./index-D4nJsLyx.js";/**
2
  * @license lucide-react v0.487.0 - ISC
3
  *
4
  * This source code is licensed under the ISC license.
assets/{circle-check-big-CXPh4ph_.js β†’ circle-check-big-0Gzyt_f3.js} RENAMED
@@ -1,4 +1,4 @@
1
- import{c}from"./index-DUxNDyEU.js";/**
2
  * @license lucide-react v0.487.0 - ISC
3
  *
4
  * This source code is licensed under the ISC license.
 
1
+ import{c}from"./index-D4nJsLyx.js";/**
2
  * @license lucide-react v0.487.0 - ISC
3
  *
4
  * This source code is licensed under the ISC license.
assets/{circle-help-DWqFJv7Z.js β†’ circle-help-BmjHdT5a.js} RENAMED
@@ -1,4 +1,4 @@
1
- import{c}from"./index-DUxNDyEU.js";/**
2
  * @license lucide-react v0.487.0 - ISC
3
  *
4
  * This source code is licensed under the ISC license.
 
1
+ import{c}from"./index-D4nJsLyx.js";/**
2
  * @license lucide-react v0.487.0 - ISC
3
  *
4
  * This source code is licensed under the ISC license.
assets/{clock-TIVUqSxI.js β†’ clock-DUJO-a50.js} RENAMED
@@ -1,4 +1,4 @@
1
- import{c}from"./index-DUxNDyEU.js";/**
2
  * @license lucide-react v0.487.0 - ISC
3
  *
4
  * This source code is licensed under the ISC license.
 
1
+ import{c}from"./index-D4nJsLyx.js";/**
2
  * @license lucide-react v0.487.0 - ISC
3
  *
4
  * This source code is licensed under the ISC license.
assets/{download-C6KU0zMt.js β†’ download-PWUf0XJa.js} RENAMED
@@ -1,4 +1,4 @@
1
- import{c as o}from"./index-DUxNDyEU.js";/**
2
  * @license lucide-react v0.487.0 - ISC
3
  *
4
  * This source code is licensed under the ISC license.
 
1
+ import{c as o}from"./index-D4nJsLyx.js";/**
2
  * @license lucide-react v0.487.0 - ISC
3
  *
4
  * This source code is licensed under the ISC license.
assets/{eye-kYT3TKwH.js β†’ eye-DXdRafOv.js} RENAMED
@@ -1,4 +1,4 @@
1
- import{c}from"./index-DUxNDyEU.js";/**
2
  * @license lucide-react v0.487.0 - ISC
3
  *
4
  * This source code is licensed under the ISC license.
 
1
+ import{c}from"./index-D4nJsLyx.js";/**
2
  * @license lucide-react v0.487.0 - ISC
3
  *
4
  * This source code is licensed under the ISC license.