import { useState, useEffect, useRef } from "react"; import { motion, AnimatePresence } from "motion/react"; import { Plus, ArrowRight } from "lucide-react"; import { cls } from "@/lib/utils"; import Button from "@/components/ui/Button"; interface NavbarCenteredProps { logo: string; navItems: { name: string; href: string }[]; ctaButton: { text: string; href: string }; } const handleNavClick = (e: React.MouseEvent, href: string, onClose?: () => void) => { if (href.startsWith("#")) { e.preventDefault(); const element = document.getElementById(href.slice(1)); element?.scrollIntoView({ behavior: "smooth", block: "start" }); } onClose?.(); }; const NavbarCentered = ({ logo, navItems, ctaButton }: NavbarCenteredProps) => { const [isScrolled, setIsScrolled] = useState(false); const [menuOpen, setMenuOpen] = useState(false); const menuRef = useRef(null); useEffect(() => { const handleScroll = () => setIsScrolled(window.scrollY > 50); window.addEventListener("scroll", handleScroll, { passive: true }); return () => window.removeEventListener("scroll", handleScroll); }, []); useEffect(() => { const handleKeyDown = (e: KeyboardEvent) => { if (e.key === "Escape" && menuOpen) setMenuOpen(false); }; const handleClickOutside = (e: MouseEvent) => { if (menuOpen && menuRef.current && !menuRef.current.contains(e.target as Node)) { setMenuOpen(false); } }; document.addEventListener("keydown", handleKeyDown); document.addEventListener("mousedown", handleClickOutside); return () => { document.removeEventListener("keydown", handleKeyDown); document.removeEventListener("mousedown", handleClickOutside); }; }, [menuOpen]); return ( <> {menuOpen && (

Menu

{navItems.map((item, index) => (
)} ); }; export default NavbarCentered;