@@ -2,6 +2,30 @@ import React, { type ReactNode, useState, useEffect } from "react";
22import Link from "@docusaurus/Link" ;
33import { useSafeColorMode } from "@site/src/utils/useSafeColorMode" ;
44import clsx from "clsx" ;
5+ import {
6+ Award ,
7+ BarChart3 ,
8+ BookOpen ,
9+ BookText ,
10+ BriefcaseBusiness ,
11+ Building2 ,
12+ CheckCircle2 ,
13+ Handshake ,
14+ LayoutDashboard ,
15+ LifeBuoy ,
16+ Link2 ,
17+ Mail ,
18+ type LucideIcon ,
19+ MessageCircleQuestion ,
20+ Mic2 ,
21+ MonitorPlay ,
22+ Newspaper ,
23+ Puzzle ,
24+ Rocket ,
25+ Sparkles ,
26+ Users ,
27+ Video ,
28+ } from "lucide-react" ;
529import "./enhanced-footer.css" ;
630import Counter from "./Counter" ;
731import { createPortal } from "react-dom" ;
@@ -16,6 +40,19 @@ interface FooterStats {
1640
1741const emailRegex = / ^ [ ^ \s @ ] + @ [ ^ \s @ ] + \. [ ^ \s @ ] + $ / ;
1842
43+ type FooterIconProps = {
44+ icon : LucideIcon ;
45+ className ?: string ;
46+ } ;
47+
48+ function FooterIcon ( { icon : Icon , className } : FooterIconProps ) {
49+ return (
50+ < span className = { clsx ( "footer-icon" , className ) } aria-hidden = "true" >
51+ < Icon strokeWidth = { 2 } />
52+ </ span >
53+ ) ;
54+ }
55+
1956export default function FooterLayout ( ) : ReactNode {
2057 const { isDark } = useSafeColorMode ( ) ;
2158
@@ -95,7 +132,7 @@ export default function FooterLayout(): ReactNode {
95132 createPortal (
96133 < div className = "newsletter-toast" >
97134 < div className = "toast-content" >
98- < span className = "toast-icon" > 🎉 </ span >
135+ < FooterIcon icon = { CheckCircle2 } className = "toast-icon" / >
99136 < div className = "toast-message" >
100137 < h4 > Successfully Subscribed!</ h4 >
101138 < p > Thank you for joining our newsletter.</ p >
@@ -105,11 +142,11 @@ export default function FooterLayout(): ReactNode {
105142 onClick = { ( ) => setShowToast ( false ) }
106143 aria-label = "Close notification"
107144 >
108- ×
145+ x
109146 </ button >
110147 </ div >
111148 </ div > ,
112- document . body , // 👈 mounts toast directly to <body>, outside footer
149+ document . body , // mounts toast directly to <body>, outside footer
113150 ) }
114151
115152 { /* Hero Section */ }
@@ -230,40 +267,42 @@ export default function FooterLayout(): ReactNode {
230267 { /* Learning Column */ }
231268 < div className = "footer-column" >
232269 < h3 className = "footer-column-title" >
233- < div className = "column-icon resources-icon" > 📚</ div >
270+ < div className = "column-icon resources-icon" >
271+ < FooterIcon icon = { BookOpen } />
272+ </ div >
234273 Learning
235274 </ h3 >
236275 < ul className = "footer-links" >
237276 < li >
238277 < Link to = "/docs" className = "footer-link" >
239- < span className = "link-icon" > 📖 </ span >
278+ < FooterIcon icon = { BookText } className = "link-icon" / >
240279 Documentation
241280 < span className = "link-badge popular" > Popular</ span >
242281 </ Link >
243282 </ li >
244283 < li >
245284 < Link to = "/courses" className = "footer-link" >
246- < span className = "link-icon" > 🎥 </ span >
285+ < FooterIcon icon = { Video } className = "link-icon" / >
247286 Video Courses
248287 < span className = "link-badge new" > New</ span >
249288 </ Link >
250289 </ li >
251290 < li >
252291 < Link to = "/get-started" className = "footer-link" >
253- < span className = "link-icon" > 🚀 </ span >
292+ < FooterIcon icon = { Rocket } className = "link-icon" / >
254293 Get Started
255294 </ Link >
256295 </ li >
257296 < li >
258297 < Link to = "/interview-prep" className = "footer-link" >
259- < span className = "link-icon" > 🧩 </ span >
298+ < FooterIcon icon = { Puzzle } className = "link-icon" / >
260299 Interview Prep
261300 < span className = "link-badge hot" > Hot</ span >
262301 </ Link >
263302 </ li >
264303 < li >
265304 < Link to = "/badges/github-badges" className = "footer-link" >
266- < span className = "link-icon" > 🏆 </ span >
305+ < FooterIcon icon = { Award } className = "link-icon" / >
267306 GitHub Badges
268307 </ Link >
269308 </ li >
@@ -273,38 +312,43 @@ export default function FooterLayout(): ReactNode {
273312 { /* Company Column */ }
274313 < div className = "footer-column" >
275314 < h3 className = "footer-column-title" >
276- < div className = "column-icon company-icon" > 🏢</ div >
315+ < div className = "column-icon company-icon" >
316+ < FooterIcon icon = { Building2 } />
317+ </ div >
277318 Company
278319 </ h3 >
279320 < ul className = "footer-links" >
280321 < li >
281322 < Link to = "/community" className = "footer-link" >
282- < span className = "link-icon" > 👥 </ span >
323+ < FooterIcon icon = { Users } className = "link-icon" / >
283324 Community
284325 </ Link >
285326 </ li >
286327 < li >
287328 < Link to = "/blogs" className = "footer-link" >
288- < span className = "link-icon" > 📰 </ span >
329+ < FooterIcon icon = { Newspaper } className = "link-icon" / >
289330 Our Blog
290331 </ Link >
291332 </ li >
292333 < li >
293334 < Link to = "/careers" className = "footer-link" >
294- < span className = "link-icon" > 💼</ span >
335+ < FooterIcon
336+ icon = { BriefcaseBusiness }
337+ className = "link-icon"
338+ />
295339 Careers
296340 < span className = "link-badge hiring" > We're Hiring!</ span >
297341 </ Link >
298342 </ li >
299343 < li >
300344 < Link to = "/our-sponsors" className = "footer-link" >
301- < span className = "link-icon" > 🤝 </ span >
345+ < FooterIcon icon = { Handshake } className = "link-icon" / >
302346 Our Sponsors
303347 </ Link >
304348 </ li >
305349 < li >
306350 < Link to = "/showcase" className = "footer-link" >
307- < span className = "link-icon" > 🌟 </ span >
351+ < FooterIcon icon = { Sparkles } className = "link-icon" / >
308352 Showcase
309353 </ Link >
310354 </ li >
@@ -314,25 +358,30 @@ export default function FooterLayout(): ReactNode {
314358 { /* Support Column */ }
315359 < div className = "footer-column" >
316360 < h3 className = "footer-column-title" >
317- < div className = "column-icon support-icon" > 🛠️</ div >
361+ < div className = "column-icon support-icon" >
362+ < FooterIcon icon = { LifeBuoy } />
363+ </ div >
318364 Support
319365 </ h3 >
320366 < ul className = "footer-links" >
321367 < li >
322368 < Link to = "/contact-us" className = "footer-link" >
323- < span className = "link-icon" > ❓</ span >
369+ < FooterIcon
370+ icon = { MessageCircleQuestion }
371+ className = "link-icon"
372+ />
324373 Contact Us
325374 </ Link >
326375 </ li >
327376 < li >
328377 < Link to = "/broadcasts" className = "footer-link" >
329- < span className = "link-icon" > 📺 </ span >
378+ < FooterIcon icon = { MonitorPlay } className = "link-icon" / >
330379 Broadcasts
331380 </ Link >
332381 </ li >
333382 < li >
334383 < Link to = "/podcasts" className = "footer-link" >
335- < span className = "link-icon" > 🎙️ </ span >
384+ < FooterIcon icon = { Mic2 } className = "link-icon" / >
336385 Podcasts
337386 </ Link >
338387 </ li >
@@ -342,7 +391,9 @@ export default function FooterLayout(): ReactNode {
342391 { /* Newsletter Column with Quick Links below */ }
343392 < div className = "footer-column newsletter-column" >
344393 < h3 className = "footer-column-title" >
345- < div className = "column-icon newsletter-icon" > 📧</ div >
394+ < div className = "column-icon newsletter-icon" >
395+ < FooterIcon icon = { Mail } />
396+ </ div >
346397 Stay in the Loop
347398 </ h3 >
348399 < p className = "newsletter-description" >
@@ -368,28 +419,32 @@ export default function FooterLayout(): ReactNode {
368419 } `}
369420 disabled = { isSubscribed }
370421 >
371- { isSubscribed ? "✓ Subscribed!" : "Subscribe Now → " }
422+ { isSubscribed ? "Subscribed!" : "Subscribe Now" }
372423 </ button >
373424 { error && < p className = "error-text" > { error } </ p > }
374425 </ form >
375426 < div className = "newsletter-stats" >
376427 < span className = "newsletter-stat" >
377- 📊 1.2K+ developers joined this week
428+ < FooterIcon icon = { BarChart3 } className = "newsletter-stat-icon" />
429+ 1.2K+ developers joined this week
378430 </ span >
379431 </ div >
380432 { /* Quick Links Section moved below subscription */ }
381433 < div className = "quick-links-section newsletter-quick-links" >
382434 < h4 className = "quick-links-title" >
383- < span className = "links-icon" > 🔗 </ span >
435+ < FooterIcon icon = { Link2 } className = "links-icon" / >
384436 QUICK LINKS
385437 </ h4 >
386438 < div className = "quick-links-list" >
387439 < Link to = "/get-started" className = "quick-link" >
388- < span className = "quick-link-icon" > 🚀 </ span >
440+ < FooterIcon icon = { Rocket } className = "quick-link-icon" / >
389441 Get Started
390442 </ Link >
391443 < Link to = "/dashboard" className = "quick-link" >
392- < span className = "quick-link-icon" > 📊</ span >
444+ < FooterIcon
445+ icon = { LayoutDashboard }
446+ className = "quick-link-icon"
447+ />
393448 Dashboard
394449 </ Link >
395450 </ div >
0 commit comments