From 536f979b303f5c4e374d158e6311a0b37fdceccf Mon Sep 17 00:00:00 2001 From: kudinDmitriyUp Date: Wed, 1 Jul 2026 23:52:46 +0000 Subject: [PATCH] Bob AI: Update navbar to match design specs with custom styling and --- src/components/ui/NavbarCentered.tsx | 146 ++++++++++++++++++++++++++- 1 file changed, 145 insertions(+), 1 deletion(-) diff --git a/src/components/ui/NavbarCentered.tsx b/src/components/ui/NavbarCentered.tsx index ed1bc07..cc36a9e 100644 --- a/src/components/ui/NavbarCentered.tsx +++ b/src/components/ui/NavbarCentered.tsx @@ -136,4 +136,148 @@ const NavbarCentered = ({ logo, navItems, ctaButton }: NavbarCenteredProps) => { ); }; -export default NavbarCentered; +const CustomNavbar = ({ logo, navItems, ctaButton }: NavbarCenteredProps) => { + const [isScrolled, setIsScrolled] = useState(false); + const [menuOpen, setMenuOpen] = useState(false); + + useEffect(() => { + const handleScroll = () => { + setIsScrolled(window.scrollY > 80); + }; + window.addEventListener("scroll", handleScroll); + return () => window.removeEventListener("scroll", handleScroll); + }, []); + + 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?.(); + }; + + return ( + <> + +
+ {/* LEFT - Logo */} + handleNavClick(e, "#hero")} + > +
+ X +
+
+
+ APEX +
+
+ Web Group +
+
+
+ + {/* CENTER - Links */} +
+ {navItems.filter(item => ["Services", "Packages", "Guarantee", "Contact"].includes(item.name)).map((item) => ( + handleNavClick(e, item.href)} + className="group relative font-sans font-bold text-[13px] tracking-[2px] uppercase text-[rgba(255,255,255,0.65)] hover:text-[#F5F5F5] transition-colors duration-250" + > + {item.name} + + + ))} +
+ + {/* RIGHT - CTA */} + + handleNavClick(e, ctaButton.href)} + className="inline-flex items-center justify-center rounded-full bg-[rgba(255,255,255,0.07)] border border-[rgba(255,255,255,0.18)] backdrop-blur-[10px] px-[24px] py-[10px] font-sans font-bold text-[12px] tracking-[2px] uppercase text-white hover:bg-[rgba(125,28,46,0.35)] hover:border-[rgba(125,28,46,0.6)] hover:scale-[1.03] transition-all duration-250 ease-out" + > + {ctaButton.text} + + + + {/* Mobile Toggle */} + +
+
+ + {/* Mobile Menu Overlay */} + + {menuOpen && ( + +
+ {navItems.filter(item => ["Services", "Packages", "Guarantee", "Contact"].includes(item.name)).map((item, i) => ( + handleNavClick(e, item.href, () => setMenuOpen(false))} + className="font-sans font-bold text-[24px] tracking-[2px] uppercase text-white" + > + {item.name} + + ))} + handleNavClick(e, ctaButton.href, () => setMenuOpen(false))} + className="mt-8 inline-flex items-center justify-center rounded-full bg-[rgba(125,28,46,0.35)] border border-[rgba(125,28,46,0.6)] px-[32px] py-[14px] font-sans font-bold text-[14px] tracking-[2px] uppercase text-white" + > + {ctaButton.text} + +
+
+ )} +
+ + ); +}; + +export default CustomNavbar;