PageSourceSearch

https://languageknow.com/assets/LearnerLeaderboard-e9lv2YhZ.js

js languageknow.com collected 2026-10-02 01:35:07 UTC 9,142 bytes, 1 lines download raw bytes

1import{r as R,a3 as G,j as e,G as U,ad as F,aj as K,D as M,C as l,a as n,a1 as H,S as $,b8 as x,a5 as I,a6 as Q,a7 as o,aD as q,a8 as g,b6 as P,e as h,g as j,aR as V,b7 as B,m as J}from"./index-F66J0iB8.js";import{A as p,L as O,B as W,T as X}from"./TeacherSpotlightCard-BJH4nRXs.js";import{d as Y}from"./streakLabel-BtgopgxH.js";function re(){var b,w,v,L,k,S,_,T,C,z;const[Z,ee]=R.useState("all"),{data:t,isLoading:D}=G({queryKey:["leaderboards"],queryFn:async()=>(await J.functions.invoke("getLeaderboards",{})).data||{},staleTime:60*1e3}),[c,E]=R.useState(p),u=(t==null?void 0:t.learners)||[],N=(t==null?void 0:t.learner_languages)||[],i=c===p?u:u.filter(s=>s.language_group_id===c),f=(t==null?void 0:t.progress)||[],r=[...i].sort((s,a)=>(a.total_points||0)-(s.total_points||0)),y=[...i].sort((s,a)=>(a.current_streak||0)-(s.current_streak||0)),d=s=>s===0?"bg-yellow-500 text-white":s===1?"bg-gray-400 text-white":s===2?"bg-orange-600 text-white":"bg-gray-100 text-gray-600",m=s=>s===0?e.jsx(P,{className:"w-5 h-5"}):s===1?e.jsx(B,{className:"w-5 h-5"}):s===2?e.jsx(B,{className:"w-5 h-5"}):e.jsx("span",{className:"font-bold",children:s+1});return D?e.jsx("div",{className:"min-h-screen bg-gray-50 flex items-center justify-center",children:e.jsx("p",{className:"text-gray-600",children:"Loading leaderboard..."})}):e.jsx("div",{className:"min-h-screen bg-gray-50 py-8",children:e.jsxs("div",{className:"max-w-4xl mx-auto px-4",children:[e.jsx(U,{page:"LearnerLeaderboard",className:"mb-3"}),e.jsxs("div",{className:"text-center mb-8",children:[e.jsx("div",{className:"w-16 h-16 bg-primary rounded-2xl flex items-center justify-center mx-auto mb-4",children:e.jsx(F,{className:"w-8 h-8 text-white"})}),e.jsx("h1",{className:"text-3xl font-bold text-gray-900 mb-2",children:"Learner Leaderboard"}),e.jsx("p",{className:"text-gray-600",children:"Top learners making incredible progress"}),e.jsx("p",{className:"text-sm text-gray-600 mt-1",children:c===p?"Across all languages on LanguageKnow.":`Ranked within ${((b=N.find(s=>s.id===c))==null?void 0:b.name)||"this language"}.`}),e.jsx("p",{className:"text-xs text-gray-500 mt-1",children:"Each entry is one learner in one language."}),e.jsx("p",{className:"text-xs text-gray-500 mt-2",children:"Points are for recognition and motivation only."}),e.jsx("div",{className:"mt-4 flex justify-center",children:e.jsx(O,{value:c,onChange:E,languages:N})}),e.jsx("div",{className:"mt-4 flex justify-center",children:e.jsx(W,{current:"learner"})}),e.jsx("div",{className:"mt-3 flex flex-wrap items-center justify-center gap-x-4 gap-y-1 text-sm",children:e.jsx(K,{to:M("LanguageLeaderboard"),className:"text-primary hover:underline",children:"Language challenges & leaderboards"})})]}),e.jsx(X,{className:"mb-8"}),e.jsxs("div",{className:"grid grid-cols-3 gap-4 mb-8",children:[e.jsx(l,{className:"bg-white border border-gray-200 shadow-sm",children:e.jsxs(n,{className:"pt-4 text-center",children:[e.jsx(H,{className:"w-6 h-6 text-blue-600 mx-auto mb-1"}),e.jsx("p",{className:"text-2xl font-bold text-gray-900",children:i.length}),e.jsx("p",{className:"text-xs text-gray-600",children:"Active Learners"})]})}),e.jsx(l,{className:"bg-white border border-gray-200 shadow-sm",children:e.jsxs(n,{className:"pt-4 text-center",children:[e.jsx($,{className:"w-6 h-6 text-yellow-600 mx-auto mb-1"}),e.jsx("p",{className:"text-2xl font-bold text-gray-900",children:i.reduce((s,a)=>s+(a.total_points||0),0).toLocaleString()}),e.jsx("p",{className:"text-xs text-gray-600",children:"Total Points"})]})}),e.jsx(l,{className:"bg-white border border-gray-200 shadow-sm",children:e.jsxs(n,{className:"pt-4 text-center",children:[e.jsx(x,{className:"w-6 h-6 text-orange-600 mx-auto mb-1"}),e.jsx("p",{className:"text-2xl font-bold text-gray-900",children:Math.max(...i.map(s=>s.longest_streak||s.current_streak||0),0)}),e.jsx("p",{className:"text-xs text-gray-600",children:"Longest Streak"})]})})]}),e.jsxs(I,{defaultValue:"points",className:"space-y-6",children:[e.jsxs(Q,{className:"grid grid-cols-3 w-full max-w-lg mx-auto",children:[e.jsxs(o,{value:"points",className:"flex items-center gap-2",children:[e.jsx($,{className:"w-4 h-4"})," Points"]}),e.jsxs(o,{value:"streaks",className:"flex items-center gap-2",children:[e.jsx(x,{className:"w-4 h-4"})," Streaks"]}),e.jsxs(o,{value:"progress",className:"flex items-center gap-2",children:[e.jsx(q,{className:"w-4 h-4"})," Progress"]})]}),e.jsxs(g,{value:"points",children:[r.length>=3&&e.jsxs("div",{className:"flex items-end justify-center gap-4 mb-8",children:[e.jsxs("div",{className:"text-center",children:[e.jsx("div",{className:"w-16 h-16 bg-gray-400 rounded-full flex items-center justify-center mx-auto mb-2",children:e.jsx("span",{className:"text-2xl font-bold text-white",children:"2"})}),e.jsx("p",{className:"font-semibold text-gray-900 truncate max-w-[100px]",children:(w=r[1])==null?void 0:w.username}),e.jsxs("p",{className:"text-sm text-gray-500",children:[(L=(v=r[1])==null?void 0:v.total_points)==null?void 0:L.toLocaleStr
1ing()," pts"]})]}),e.jsxs("div",{className:"text-center -mt-4",children:[e.jsx(P,{className:"w-8 h-8 text-yellow-500 mx-auto mb-1"}),e.jsx("div",{className:"w-20 h-20 bg-yellow-500 rounded-full flex items-center justify-center mx-auto mb-2",children:e.jsx("span",{className:"text-3xl font-bold text-white",children:"1"})}),e.jsx("p",{className:"font-bold text-gray-900 truncate max-w-[120px]",children:(k=r[0])==null?void 0:k.username}),e.jsxs("p",{className:"text-sm text-yellow-600 font-semibold",children:[(_=(S=r[0])==null?void 0:S.total_points)==null?void 0:_.toLocaleString()," pts"]})]}),e.jsxs("div",{className:"text-center",children:[e.jsx("div",{className:"w-16 h-16 bg-orange-600 rounded-full flex items-center justify-center mx-auto mb-2",children:e.jsx("span",{className:"text-2xl font-bold text-white",children:"3"})}),e.jsx("p",{className:"font-semibold text-gray-900 truncate max-w-[100px]",children:(T=r[2])==null?void 0:T.username}),e.jsxs("p",{className:"text-sm text-gray-500",children:[(z=(C=r[2])==null?void 0:C.total_points)==null?void 0:z.toLocaleString()," pts"]})]})]}),e.jsxs(l,{children:[e.jsx(h,{children:e.jsx(j,{className:"text-lg",children:"All Rankings"})}),e.jsx(n,{className:"space-y-2",children:r.slice(0,50).map((s,a)=>{var A;return e.jsxs("div",{className:`flex items-center gap-4 p-3 rounded-lg ${a<3?"bg-yellow-50":"bg-gray-50"}`,children:[e.jsx("div",{className:`w-8 h-8 rounded-full flex items-center justify-center ${d(a)}`,children:m(a)}),e.jsxs("div",{className:"flex-1",children:[e.jsx("p",{className:"font-semibold text-gray-900",children:s.username}),s.language_name&&e.jsx("p",{className:"text-xs text-gray-500",children:s.language_name})]}),e.jsxs("div",{className:"text-right",children:[e.jsx("p",{className:"font-bold text-gray-900",children:(A=s.total_points)==null?void 0:A.toLocaleString()}),e.jsx("p",{className:"text-xs text-gray-500",children:"points"})]})]},s.id)})})]})]}),e.jsx(g,{value:"streaks",children:e.jsxs(l,{children:[e.jsx(h,{children:e.jsxs(j,{className:"flex items-center gap-2",children:[e.jsx(x,{className:"w-5 h-5 text-orange-500"}),"Top Streaks"]})}),e.jsxs(n,{className:"space-y-2",children:[y.filter(s=>s.current_streak>0).slice(0,50).map((s,a)=>e.jsxs("div",{className:`flex items-center gap-4 p-3 rounded-lg ${a<3?"bg-orange-50":"bg-gray-50"}`,children:[e.jsx("div",{className:`w-8 h-8 rounded-full flex items-center justify-center ${d(a)}`,children:m(a)}),e.jsx("div",{className:"flex-1",children:e.jsx("p",{className:"font-semibold text-gray-900",children:s.username})}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(x,{className:"w-5 h-5 text-orange-500"}),e.jsx("span",{className:"font-bold text-orange-600",children:Y(s.current_streak)})]})]},s.id)),y.filter(s=>s.current_streak>0).length===0&&e.jsx("p",{className:"text-center text-gray-500 py-8",children:"No active streaks yet. Start learning to build yours!"})]})]})}),e.jsx(g,{value:"progress",children:e.jsxs(l,{children:[e.jsxs(h,{children:[e.jsxs(j,{className:"flex items-center gap-2",children:[e.jsx(q,{className:"w-5 h-5 text-indigo-600"}),"Top by Progress"]}),e.jsx("p",{className:"text-xs text-gray-500",children:"Ranked by quizzes passed, then highest level reached."})]}),e.jsxs(n,{className:"space-y-2",children:[f.slice(0,50).map((s,a)=>e.jsxs("div",{className:`flex items-center gap-4 p-3 rounded-lg ${a<3?"bg-indigo-50":"bg-gray-50"}`,children:[e.jsx("div",{className:`w-8 h-8 rounded-full flex items-center justify-center ${d(a)}`,children:m(a)}),e.jsxs("div",{className:"flex-1",children:[e.jsx("p",{className:"font-semibold text-gray-900",children:s.username}),e.jsxs("p",{className:"text-xs text-gray-500 capitalize",children:[s.levelName," level"]})]}),e.jsxs("div",{className:"text-right",children:[e.jsx("p",{className:"font-bold text-indigo-600",children:s.quizzes}),e.jsx("p",{className:"text-xs text-gray-500",children:"quizzes passed"})]})]},s.id)),f.length===0&&e.jsx("p",{className:"text-center text-gray-500 py-8",children:"No quizzes passed yet. Be the first to climb the ranks!"})]})]})})]}),e.jsx(V,{})]})})}export{re as default};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.