11import { FontAwesomeIcon } from "@fortawesome/react-fontawesome" ;
22import { faClock , faCode , faTerminal , faServer , faBolt , faFire , faStar , faRocket } from "@fortawesome/free-solid-svg-icons" ;
3+ import { Member } from "@/app/types/LeaderboardMember" ;
34
4- type Member = {
5- user_id : string ;
6- role : string ;
7- email : string ;
8- total_seconds : number ;
9- languages : { name : string } [ ] | null ;
10- operating_systems : { name : string } [ ] | null ;
11- editors : { name : string } [ ] | null ;
12- } ;
135
146function LeaderboardStats ( { members } : { members : Member [ ] } ) {
157 const totalHours = Math . round (
@@ -114,6 +106,7 @@ export default function LeaderboardTable({
114106 . map ( ( member , index ) => ( {
115107 user_id : member . user_id ,
116108 rank : index + 1 ,
109+ name : member . name ,
117110 email : member . email ,
118111 hours : Math . round ( ( member . total_seconds || 0 ) / 3600 ) ,
119112 role : member . role ,
@@ -200,7 +193,7 @@ export default function LeaderboardTable({
200193 ) : (
201194 < div className = "glass-card overflow-hidden" >
202195 { /* Header Row (Desktop) */ }
203- < div className = "hidden md:flex items-center px-4 sm:px-6 py-4 border-b border-white/5 bg-white/[0.01] text-[10px] font-bold text-gray-500 uppercase tracking-widest" >
196+ < div className = "hidden md:flex items-center px-4 sm:px-6 py-4 border-b border-white/5 bg-white/1 text-[10px] font-bold text-gray-500 uppercase tracking-widest" >
204197 < div className = "w-12 shrink-0 text-center" > Rank</ div >
205198 < div className = "flex-1 ml-4" > Developer</ div >
206199 < div className = "w-48 lg:w-72 xl:w-80" > Tech Stack</ div >
@@ -219,16 +212,16 @@ export default function LeaderboardTable({
219212 < div
220213 key = { user . user_id }
221214 className = { `group relative flex flex-col md:flex-row items-start md:items-center px-4 sm:px-6 py-4 md:py-4 transition-colors hover:bg-white/[0.02] ${
222- isCurrentUser ? "bg-indigo-500/[0.02] " : "bg-transparent"
215+ isCurrentUser ? "bg-indigo-500/2 " : "bg-transparent"
223216 } `}
224217 >
225218 { /* Background Progress Bar */ }
226219 < div
227- className = "absolute left-0 bottom-0 h-[1px] bg-gradient -to-r from-indigo-500/50 to-transparent"
220+ className = "absolute left-0 bottom-0 h-px bg-linear -to-r from-indigo-500/50 to-transparent"
228221 style = { { width : `${ pct } %` } }
229222 />
230223 { isCurrentUser && (
231- < div className = "absolute left-0 top-0 bottom-0 w-[2px] bg-indigo-500" />
224+ < div className = "absolute left-0 top-0 bottom-0 w-0.5 bg-indigo-500" />
232225 ) }
233226
234227 { /* MOBILE TOP ROW / DESKTOP LEFT FLEX */ }
@@ -242,13 +235,13 @@ export default function LeaderboardTable({
242235
243236 { /* Profile + Badges */ }
244237 < div className = "flex-1 ml-3 sm:ml-4 min-w-0 flex items-center gap-3" >
245- < div className = "w-8 h-8 sm:w-10 sm:h-10 shrink-0 rounded-lg bg-gradient -to-br from-white/5 to-white/10 border border-white/10 flex items-center justify-center text-[10px] sm:text-sm font-semibold text-gray-300 shadow-sm uppercase" >
246- { user . email . charAt ( 0 ) }
238+ < div className = "w-8 h-8 sm:w-10 sm:h-10 shrink-0 rounded-lg bg-linear -to-br from-white/5 to-white/10 border border-white/10 flex items-center justify-center text-[10px] sm:text-sm font-semibold text-gray-300 shadow-sm uppercase" >
239+ { user . name ? user . name . charAt ( 0 ) : user . email . charAt ( 0 ) }
247240 </ div >
248241 < div className = "flex flex-col min-w-0 gap-1 sm:gap-1.5" >
249242 < div className = "flex items-center gap-2" >
250- < p className = "font-semibold text-gray-200 tracking-tight text-sm sm:text-[15px] truncate max-w-[120px] xs:max-w-[160px] sm:max-w-[180px] lg:max-w-[200px] leading-none" >
251- { user . email . split ( "@" ) [ 0 ] }
243+ < p className = "font-semibold text-gray-200 tracking-tight text-sm sm:text-[15px] truncate max-w-30 xs:max-w-[160px] sm:max-w-45 lg:max-w-50 leading-none" >
244+ { user . name ?? user . email . split ( "@" ) [ 0 ] }
252245 </ p >
253246 { isCurrentUser && (
254247 < span className = "px-1.5 py-0.5 rounded border border-indigo-500/30 bg-indigo-500/10 text-indigo-400 text-[8px] sm:text-[9px] uppercase font-bold tracking-widest leading-none" >
@@ -275,12 +268,12 @@ export default function LeaderboardTable({
275268 </ div >
276269
277270 { /* MOBILE BOTTOM STACK / DESKTOP RIGHT ROW */ }
278- < div className = "flex flex-col md:flex-row items-start md:items-center w-full md:w-auto mt-4 md:mt-0 pl-[2.75rem] sm:pl-[4.25rem] md:pl-0 gap-2.5 md:gap-0" >
271+ < div className = "flex flex-col md:flex-row items-start md:items-center w-full md:w-auto mt-4 md:mt-0 pl-11 sm:pl-17 md:pl-0 gap-2.5 md:gap-0" >
279272 { /* Tech Stack */ }
280273 < div className = "flex flex-wrap items-center gap-1.5 w-full md:w-48 lg:w-72 xl:w-80 md:shrink-0 md:pr-4" >
281274 { user . languages . length > 0 ? (
282275 user . languages . map ( ( lang , i ) => (
283- < span key = { i } className = "px-1.5 sm:px-2 py-0.5 sm:py-1 rounded bg-white/[0.03] border border-white/5 text-[9px] sm:text-[10px] text-gray-300 font-medium tracking-wide truncate max-w-[70px] sm:max-w-[80px]" >
276+ < span key = { i } className = "px-1.5 sm:px-2 py-0.5 sm:py-1 rounded bg-white/3 border border-white/5 text-[9px] sm:text-[10px] text-gray-300 font-medium tracking-wide truncate max-w-[70px] sm:max-w-[80px]" >
284277 { lang }
285278 </ span >
286279 ) )
@@ -292,15 +285,15 @@ export default function LeaderboardTable({
292285 { /* Environment */ }
293286 < div className = "flex items-center gap-1.5 sm:gap-2 w-full md:w-32 lg:w-48 md:shrink-0" >
294287 { user . editor !== "N/A" && (
295- < span className = "text-[10px] sm:text-[11px] text-gray-400 font-medium truncate max-w-[70px] lg:max-w-[90px] " >
288+ < span className = "text-[10px] sm:text-[11px] text-gray-400 font-medium truncate max-w-17.5 lg:max-w-22.5 " >
296289 { user . editor }
297290 </ span >
298291 ) }
299292 { user . editor !== "N/A" && user . os !== "N/A" && (
300- < span className = "w-[3px] h-[3px] rounded-full bg-gray-600 shrink-0" > </ span >
293+ < span className = "w-0.75 h-0.75 rounded-full bg-gray-600 shrink-0" > </ span >
301294 ) }
302295 { user . os !== "N/A" && (
303- < span className = "text-[10px] sm:text-[11px] text-gray-400 font-medium truncate max-w-[70px] lg:max-w-[90px] " >
296+ < span className = "text-[10px] sm:text-[11px] text-gray-400 font-medium truncate max-w-17.5 lg:max-w-22.5 " >
304297 { user . os }
305298 </ span >
306299 ) }
0 commit comments