1- import { FaGithub } from 'react-icons/fa ' ;
1+ import { useState } from 'react' ;
22import { Link } from 'react-router-dom' ;
3+ import {
4+ FaGithub ,
5+ FaTwitter ,
6+ FaDiscord ,
7+ FaArrowRight ,
8+ FaEnvelope ,
9+ FaInfoCircle ,
10+ } from 'react-icons/fa' ;
311
412function Footer ( ) {
513 const [ email , setEmail ] = useState ( '' ) ;
614
7- const handleSubscribe = ( e : React . FormEvent ) => {
15+ const handleSubscribe = ( e : React . FormEvent < HTMLFormElement > ) => {
816 e . preventDefault ( ) ;
9- // Removed raw console logging of emails to protect user data privacy (PII leak fix)
17+
18+ // Replace with API call
1019 alert ( 'Thank you for subscribing!' ) ;
20+
1121 setEmail ( '' ) ;
1222 } ;
1323
1424 return (
15- < footer className = "w-full relative overflow-hidden transition-colors duration-300 border-t border-zinc-200 dark:border-zinc-800/80
16- /* Light Mode: Restored your original crisp daylight background */
17- bg-white
18- /* Dark Mode: Retained matching deep navy navbar theme background */
19- dark:bg-[#0f172a]
20- font-sans select-none before:absolute before:inset-0 before:bg-gradient-to-b before:from-blue-500/5 before:to-transparent before:pointer-events-none"
25+ < footer
26+ className = "
27+ w-full relative overflow-hidden transition-colors duration-300
28+ border-t border-zinc-200 dark:border-zinc-800/80
29+ bg-white dark:bg-[#0f172a]
30+ font-sans select-none
31+ before:absolute before:inset-0
32+ before:bg-gradient-to-b before:from-blue-500/5
33+ before:to-transparent before:pointer-events-none
34+ "
2135 >
2236 < div className = "max-w-7xl mx-auto px-8 pt-16 pb-10 relative z-10" >
23-
24- { /* Upper Area: Clean Layout Grid from the image */ }
37+ { /* Upper Section */ }
2538 < div className = "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-12 gap-10 pb-12 border-b border-zinc-200 dark:border-zinc-800/60" >
26-
27- { /* Column 1: Brand Presentation */ }
39+
40+ { /* Brand */ }
2841 < div className = "lg:col-span-5 flex flex-col space-y-4" >
29- < Link to = "/" className = "flex items-center space-x-3 text-xl font-bold tracking-tight group w-fit" >
42+ < Link
43+ to = "/"
44+ className = "flex items-center space-x-3 text-xl font-bold tracking-tight group w-fit"
45+ >
3046 < div className = "p-2.5 bg-zinc-900 dark:bg-zinc-100 text-white dark:text-zinc-950 rounded-xl shadow-sm group-hover:scale-105 transition-transform duration-200" >
3147 < FaGithub className = "h-5 w-5" />
3248 </ div >
49+
3350 < span className = "font-bold text-zinc-900 dark:text-zinc-50" >
3451 GitHub Tracker
35- </ a >
52+ </ span >
53+ </ Link >
3654
3755 < p className = "text-sm leading-6 text-gray-600 dark:text-gray-400 max-w-sm" >
3856 Track repositories, analyze contributions, and explore GitHub
3957 insights with a clean and intuitive interface.
4058 </ p >
4159 </ div >
4260
43- { /* Navigation Links */ }
44- < div className = "space-y-3 " >
61+ { /* Quick Links */ }
62+ < div className = "lg:col-span-3 space-y-4 " >
4563 < h3 className = "text-sm font-semibold uppercase tracking-wider text-gray-900 dark:text-white" >
4664 Quick Links
4765 </ h3 >
48-
49- < form onSubmit = { handleSubscribe } className = "flex flex-col sm:flex-row items-stretch gap-2 w-full max-w-sm lg:max-w-none" >
66+
67+ < div className = "flex flex-col space-y-3" >
68+ < Link
69+ to = "/contact"
70+ className = "inline-flex items-center gap-2 text-sm text-gray-600 dark:text-gray-400 hover:text-indigo-600 dark:hover:text-indigo-400 transition-colors"
71+ >
72+ < FaEnvelope className = "h-3.5 w-3.5" />
73+ Contact Us
74+ </ Link >
75+
76+ < Link
77+ to = "/about"
78+ className = "inline-flex items-center gap-2 text-sm text-gray-600 dark:text-gray-400 hover:text-indigo-600 dark:hover:text-indigo-400 transition-colors"
79+ >
80+ < FaInfoCircle className = "h-3.5 w-3.5" />
81+ About
82+ </ Link >
83+ </ div >
84+ </ div >
85+
86+ { /* Newsletter */ }
87+ < div className = "lg:col-span-4 space-y-4" >
88+ < h3 className = "text-sm font-semibold uppercase tracking-wider text-gray-900 dark:text-white" >
89+ Subscribe
90+ </ h3 >
91+
92+ < form
93+ onSubmit = { handleSubscribe }
94+ className = "flex flex-col sm:flex-row items-stretch gap-2"
95+ >
5096 < input
5197 type = "email"
5298 required
5399 placeholder = "Enter email address"
54100 value = { email }
55101 onChange = { ( e ) => setEmail ( e . target . value ) }
56- className = "flex-grow text-sm px-4 py-3 bg-zinc-50 dark:bg-zinc-800/40 border border-zinc-200 dark:border-zinc-700/50 rounded-xl focus:outline-none focus:ring-2 focus:ring-blue-500/20 focus:border-blue-500 text-zinc-900 dark:text-white placeholder-zinc-400 dark:placeholder-zinc-500 transition-all"
102+ className = "
103+ flex-grow text-sm px-4 py-3
104+ bg-zinc-50 dark:bg-zinc-800/40
105+ border border-zinc-200 dark:border-zinc-700/50
106+ rounded-xl
107+ focus:outline-none focus:ring-2
108+ focus:ring-blue-500/20 focus:border-blue-500
109+ text-zinc-900 dark:text-white
110+ placeholder-zinc-400 dark:placeholder-zinc-500
111+ transition-all
112+ "
57113 />
114+
58115 < button
59116 type = "submit"
60- className = "px-5 py-3 text-sm font-bold bg-blue-600 hover:bg-blue-700 text-white rounded-xl shadow-sm active:scale-[0.98] transition-all duration-300 hover:shadow-lg hover:shadow-blue-500/20 flex items-center justify-center space-x-1.5 whitespace-nowrap"
117+ className = "
118+ px-5 py-3 text-sm font-bold
119+ bg-blue-600 hover:bg-blue-700
120+ text-white rounded-xl shadow-sm
121+ active:scale-[0.98]
122+ transition-all duration-300
123+ hover:shadow-lg hover:shadow-blue-500/20
124+ flex items-center justify-center gap-1.5
125+ whitespace-nowrap
126+ "
61127 >
62128 < span > Subscribe</ span >
63129 < FaArrowRight className = "h-3.5 w-3.5" />
64130 </ button >
65131 </ form >
66132 </ div >
133+ </ div >
67134
68- < div className = "flex flex-col space-y-2" >
69- < Link
70- to = "/contact"
71- className = "inline-flex items-center gap-2 text-sm hover:text-indigo-600 dark:hover:text-indigo-400 transition-colors"
72- >
73- < FaEnvelope className = "h-3.5 w-3.5" />
74- Contact Us
75- </ Link >
135+ { /* Bottom Bar */ }
136+ < div className = "flex flex-col md:flex-row items-center justify-between gap-6 pt-6" >
76137
77- < Link
78- to = "/about"
79- className = "inline-flex items-center gap-2 text-sm hover:text-indigo-600 dark:hover:text-indigo-400 transition-colors"
80- >
81- < FaInfoCircle className = "h-3.5 w-3.5" />
82- About
83- </ Link >
84- </ div >
138+ { /* Copyright */ }
139+ < div className = "text-center md:text-left text-gray-600 dark:text-gray-400" >
140+ < p className = "text-xs md:text-sm font-semibold" >
141+ © { new Date ( ) . getFullYear ( ) } { ' ' }
142+ < span className = "font-semibold" > GitHub Tracker</ span > . All rights reserved.
143+ </ p >
85144 </ div >
86-
87- { /* Social Icons (Right Aligned) - Icon sizes increased to h-5 w-5 */ }
88- < div className = "flex items-center space-x-5 order-1 sm:order-3 " >
89- < a
90- href = "https://github.com/GitMetricsLab/github_tracker"
91- target = "_blank"
92- rel = "noopener noreferrer"
145+
146+ { /* Social Icons */ }
147+ < div className = "flex items-center space-x-5" >
148+ < a
149+ href = "https://github.com/GitMetricsLab/github_tracker"
150+ target = "_blank"
151+ rel = "noopener noreferrer"
93152 className = "text-zinc-400 dark:text-zinc-500 hover:text-zinc-900 dark:hover:text-zinc-100 transition-all duration-300 hover:-translate-y-1 hover:scale-110"
94153 aria-label = "GitHub Repository"
95154 >
96- < FaGithub className = "h-7 w-7 " />
155+ < FaGithub className = "h-6 w-6 " />
97156 </ a >
98- < a
99- href = "https://x.com/your_handle"
100- target = "_blank"
101- rel = "noopener noreferrer"
157+
158+ < a
159+ href = "https://x.com/your_handle"
160+ target = "_blank"
161+ rel = "noopener noreferrer"
102162 className = "text-zinc-400 dark:text-zinc-500 hover:text-sky-500 dark:hover:text-zinc-100 transition-all duration-300 hover:-translate-y-1 hover:scale-110"
103163 aria-label = "Twitter"
104164 >
105- < FaTwitter className = "h-7 w-7 " />
165+ < FaTwitter className = "h-6 w-6 " />
106166 </ a >
107- < a
108- href = "https://discord.gg/your_invite"
109- target = "_blank"
110- rel = "noopener noreferrer"
111- className = "text-zinc-400 dark:text-zinc-500 hover:text-indigo-500 dark:hover:text-zinc-100 transition-all duration-300 hover:-translate-y-1 hover:scale-110"
167+
168+ < a
169+ href = "https://discord.gg/your_invite"
170+ target = "_blank"
171+ rel = "noopener noreferrer"
172+ className = "text-zinc-400 dark:text-zinc-500 hover:text-indigo-500 dark:hover:text-zinc-100 transition-all duration-300 hover:-translate-y-1 hover:scale-110"
112173 aria-label = "Discord"
113174 >
114- < FaDiscord className = "h-7 w-7 " />
175+ < FaDiscord className = "h-6 w-6 " />
115176 </ a >
116177 </ div >
117178 </ div >
118- < div className = "p-2 border-t border-gray-200 dark:border-gray-800 text-center text-gray-600 dark:text-gray-400" >
119- < p className = "text-xs md:text-sm font-semibold" >
120- © { new Date ( ) . getFullYear ( ) } { " " }
121- < span className = "font-semibold" > GitHub Tracker</ span > . All rights reserved.
122- </ p >
123- </ div >
124179 </ div >
125180 </ footer >
126181 ) ;
127182}
128183
129- export default Footer ;
184+ export default Footer ;
0 commit comments