From 211b543414b47fbbbcb3e4fc066f7c670a4eaffa Mon Sep 17 00:00:00 2001 From: arsam Date: Fri, 18 Sep 2026 23:05:51 +0330 Subject: [PATCH] Import source: src/components/Header Import the existing local project snapshot. This commit organizes existing files; it does not represent newly developed functionality. --- src/components/Header.tsx | 145 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 145 insertions(+) create mode 100644 src/components/Header.tsx diff --git a/src/components/Header.tsx b/src/components/Header.tsx new file mode 100644 index 0000000..1c4553a --- /dev/null +++ b/src/components/Header.tsx @@ -0,0 +1,145 @@ +'use client'; + +import { useState, useEffect } from 'react'; +import { usePathname, useRouter } from '@/i18n/routing'; +import { useLocale, useTranslations } from 'next-intl'; +import { Sun, Moon, Globe, Menu, X } from 'lucide-react'; + +export default function Header() { + const t = useTranslations('Header'); + const locale = useLocale(); + const pathname = usePathname(); + const router = useRouter(); + + const [theme, setTheme] = useState<'light' | 'dark'>('dark'); + const [mobileMenuOpen, setMobileMenuOpen] = useState(false); + + useEffect(() => { + // Check local storage or document class to sync initial state + const isDark = document.documentElement.classList.contains('dark'); + setTheme(isDark ? 'dark' : 'light'); + }, []); + + const toggleTheme = () => { + if (theme === 'dark') { + document.documentElement.classList.remove('dark'); + localStorage.setItem('theme', 'light'); + setTheme('light'); + } else { + document.documentElement.classList.add('dark'); + localStorage.setItem('theme', 'dark'); + setTheme('dark'); + } + }; + + const toggleLanguage = () => { + const nextLocale = locale === 'en' ? 'fa' : 'en'; + router.replace(pathname, { locale: nextLocale }); + }; + + const navItems = [ + { key: 'about', href: '#about' }, + { key: 'expertise', href: '#expertise' }, + { key: 'projects', href: '#projects' }, + { key: 'writing', href: '#writing' }, + { key: 'contact', href: '#contact' }, + ]; + + return ( +
+
+ {/* Name / Logo */} + + {locale === 'fa' ? 'آرسام صباغ' : 'Arsam Sabbagh'} + + + {/* Desktop Nav Links */} + + + {/* Action Controls */} +
+ {/* Language Switcher */} + + + {/* Theme Switcher */} + +
+ + {/* Mobile controls & toggle */} +
+ + + + + +
+
+ + {/* Mobile Menu Panel */} + {mobileMenuOpen && ( +
+ +
+ )} +
+ ); +}