Spaces:
Sleeping
Sleeping
| 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> | |
| ); | |
| } | |