@@ -9,105 +9,76 @@ import { cn } from "@/lib/utils"
99import HeaderSkeleton from './skeleton/header'
1010import Image from 'next/image'
1111import Link from 'next/link'
12- import { TABS } from '../(root)/page'
13- interface HeaderProps {
14- activeTab ?: typeof TABS [ number ]
15- setActiveTab : ( tab : typeof TABS [ number ] ) => void
16- }
17- export default function Header ( { setActiveTab } : HeaderProps ) {
12+
13+ export default function Header ( ) {
1814 const { resolvedTheme } = useTheme ( )
1915 const [ isMounted , setIsMounted ] = useState ( false )
16+ const [ showImage , setShowImage ] = useState ( true )
2017
2118 useEffect ( ( ) => {
2219 setIsMounted ( true )
20+
21+ const handleScroll = ( ) => {
22+ const isMobileView = window . innerWidth <= 640
23+ const scrolledEnough = window . scrollY >= 120
24+ setShowImage ( ! isMobileView || scrolledEnough )
25+ }
26+
27+ handleScroll ( )
28+ window . addEventListener ( 'scroll' , handleScroll )
29+ window . addEventListener ( 'resize' , handleScroll )
30+
31+ return ( ) => {
32+ window . removeEventListener ( 'scroll' , handleScroll )
33+ window . removeEventListener ( 'resize' , handleScroll )
34+ }
2335 } , [ ] )
2436
25- if ( ! isMounted ) {
26- return (
27- < >
28- < HeaderSkeleton />
29- </ >
30- )
31- }
37+
38+ if ( ! isMounted ) return < HeaderSkeleton />
3239
3340 return (
3441 < header className = "sticky top-0 z-40 bg-background/80 backdrop-blur-md border-b border-border" >
3542 < div className = "container mx-auto px-4 py-4 lg:px-20 xl:px-32" >
36- < div className = "flex items-center justify-between gap-1 pt-6 sm:pt-0 " >
37- < div className = "flex sm: items-center space-x-4 sm:flex-row gap-4 sm:gap-0 flex-col " >
43+ < div className = "flex items-center justify-between gap-1" >
44+ < div className = "flex items-center space-x-4" >
3845 < div className = "relative" >
39-
40- { /* use image instead */ }
41- < div
42- className = { cn (
43- "size-20 sm:size-13 rounded-lg bg-gradient-to-br flex items-center justify-center relative outline outline-offset-[3px] outline-border" ,
44- resolvedTheme === "dark"
45- ? "from-zinc-600 to-zinc-900"
46- : "from-zinc-50 to-zinc-200"
47- ) }
48- >
49-
50- < Image src = "/avatar-p.png" alt = 'Profile photo' height = "40" width = "40" className = 'absolute h-full w-full top-0 left-0 rounded-xl object-cover saturate-100' aria-label = 'Profile photo of Alex Developer' quality = { 100 } />
51- </ div >
52-
53- { /* use dots grid instead */ }
54-
55- { /* <div
56- className={cn(
57- "size-10 sm:size-13 rounded-lg bg-gradient-to-br flex items-center justify-center ",
58- resolvedTheme === "dark"
59- ? "from-zinc-600 to-zinc-900"
60- : "from-zinc-50 to-zinc-200"
61- )}
62- >
63-
64- <div className="grid grid-cols-2 gap-1">
65- <div className="size-2 sm:size-3 bg-zinc-300 rounded-sm" />
66- <div className="size-2 sm:size-3 bg-zinc-400 rounded-sm" />
67- <div className="size-2 sm:size-3 bg-zinc-500 rounded-sm" />
68- <div className="size-2 sm:size-3 bg-zinc-600 rounded-sm" />
46+ { /* Only show image when showImage is true */ }
47+ { showImage && (
48+ < div
49+ className = { cn (
50+ "size-10 sm:size-13 rounded-lg bg-gradient-to-br flex items-center justify-center relative outline outline-offset-[3px] outline-border" ,
51+ resolvedTheme === "dark"
52+ ? "from-zinc-600 to-zinc-900"
53+ : "from-zinc-50 to-zinc-200"
54+ ) }
55+ >
56+ < Image
57+ src = "/avatar-p.png"
58+ alt = "Profile photo"
59+ height = { 40 }
60+ width = { 40 }
61+ className = "absolute h-full w-full top-0 left-0 rounded-xl object-cover saturate-100"
62+ aria-label = "Profile photo of Alex Developer"
63+ quality = { 100 }
64+ />
6965 </ div >
70- </div> */ }
66+ ) }
7167 </ div >
72- < div >
73- < h1 className = "text-xl font-medium flex items-center gap-2" >
68+ < div className = 'hidden sm:block' >
69+ < h1 className = "text-base sm:text- xl font-medium flex items-center gap-2" >
7470 Alex Developer
7571 < div className = "size-1.5 sm:size-2.5 animate-pulse relative after:content-[''] after:absolute flex items-center justify-center after:h-full after:w-full after:bg-green-400 after:rounded-full after:animate-ping rounded-full bg-primary" > </ div >
7672 </ h1 >
77- < p className = "text-muted-foreground text-sm" >
73+ < p className = "text-muted-foreground text-[11px] sm:text- sm" >
7874 Full Stack Developer & UI / UX Designer
7975 </ p >
8076 </ div >
81-
82- < div className = "sm:hidden flex justify-between gap-2 items-center" >
83- { /* Download resume button one more button */ }
84- < a
85- href = "/resume.pdf"
86- target = "_blank"
87- rel = "noopener noreferrer"
88- aria-label = "Open Resume"
89- >
90- < Button
91- variant = "outline"
92- size = "sm"
93- className = "rounded-full text-primary hover:bg-primary/70"
94- >
95- Download Resume
96- </ Button >
97- </ a >
98- < Button variant = "outline" size = "sm" className = 'rounded-full text-muted-foreground'
99- onClick = { ( ) => setActiveTab ( "contact" ) }
100- aria-label = "Contact Me"
101- >
102- Contact Me
103- </ Button >
104- </ div >
10577 </ div >
106- < div className = "flex items-center space-x-2 self-start flex-col sm:flex-row sm:self-center gap-1 " >
78+ < div className = "flex items-center space-x-2" >
10779 < ThemeToggle />
10880 < Link href = "https://github.com/psparwez" aria-label = "View GitHub Profile" target = "_blank" rel = "noopener noreferrer" >
10981 < Button variant = "outline" size = "sm" >
110-
11182 < Github className = "w-4 h-4 sm:mr-1" />
11283 < span className = "hidden sm:inline" > View GitHub</ span >
11384 </ Button >
0 commit comments