ChopFresh / src /components /Header.tsx
pranav8tripathi@gmail.com
init
56ea4c7
import { useState, useEffect } from "react";
import { Menu, X } from "lucide-react";
import { motion, AnimatePresence } from "framer-motion";
import { Button } from "./ui/button";
import { Sheet, SheetContent, SheetTrigger } from "./ui/sheet";
export default function Header() {
const [isVisible, setIsVisible] = useState(true);
const [lastScrollY, setLastScrollY] = useState(0);
const [isOpen, setIsOpen] = useState(false);
useEffect(() => {
const handleScroll = () => {
const currentScrollY = window.scrollY;
if (currentScrollY < 50) {
setIsVisible(true);
} else if (currentScrollY > lastScrollY) {
setIsVisible(false);
} else {
setIsVisible(true);
}
setLastScrollY(currentScrollY);
};
window.addEventListener("scroll", handleScroll, { passive: true });
return () => window.removeEventListener("scroll", handleScroll);
}, [lastScrollY]);
const scrollToSection = (id: string) => {
const element = document.getElementById(id);
if (element) {
element.scrollIntoView({ behavior: "smooth" });
setIsOpen(false);
}
};
const navItems = [
{ label: "About Us", id: "about" },
{ label: "Why Trust Us", id: "trust" },
{ label: "Connect", id: "contact" },
];
return (
<motion.header
initial={{ y: 0 }}
animate={{ y: isVisible ? 0 : -100 }}
transition={{ duration: 0.3 }}
className="fixed top-0 left-0 right-0 z-50 bg-white/95 backdrop-blur-sm border-b border-gray-200 shadow-sm"
>
<div className="container mx-auto px-4 sm:px-6 lg:px-8">
<div className="flex items-center justify-between h-16">
{/* Logo */}
<div className="flex-shrink-0">
<div className="flex items-center space-x-2">
<img
src="/chopfreshinternational.png"
alt="ChopFresh Logo"
className="h-8 w-auto object-contain"
/>
<button
onClick={() => window.scrollTo({ top: 0, behavior: "smooth" })}
className="text-2xl font-bold text-green-600 hover:text-green-700 transition-colors"
>
ChopFresh International
</button>
</div>
</div>
{/* Desktop Navigation */}
<nav className="hidden md:flex items-center space-x-8">
{navItems.map((item) => (
<button
key={item.id}
onClick={() => scrollToSection(item.id)}
className="text-gray-700 hover:text-green-600 font-medium transition-colors"
>
{item.label}
</button>
))}
</nav>
{/* Mobile Menu */}
<Sheet open={isOpen} onOpenChange={setIsOpen}>
<SheetTrigger asChild className="md:hidden">
<Button variant="ghost" size="icon">
<Menu className="h-6 w-6" />
</Button>
</SheetTrigger>
<SheetContent side="right" className="w-[300px] sm:w-[400px]">
<nav className="flex flex-col space-y-6 mt-8">
{navItems.map((item) => (
<button
key={item.id}
onClick={() => scrollToSection(item.id)}
className="text-lg text-gray-700 hover:text-green-600 font-medium transition-colors text-left"
>
{item.label}
</button>
))}
</nav>
</SheetContent>
</Sheet>
</div>
</div>
</motion.header>
);
}