"use client"; import { IconMenu2, IconUser, IconX } from "@tabler/icons-react"; import { AnimatePresence, motion, useMotionValueEvent, useScroll } from "framer-motion"; import Link from "next/link"; import { useRef, useState } from "react"; import { cn } from "@/lib/utils"; import { Logo } from "./Logo"; import { ThemeTogglerComponent } from "./theme/theme-toggle"; import { Button } from "./ui/button"; interface NavbarProps { navItems: { name: string; link: string; }[]; visible: boolean; } export const Navbar = () => { const navItems = [ { name: "Docs", link: "/docs", }, // { // name: "Product", // link: "/#product", // }, // { // name: "Pricing", // link: "/#pricing", // }, ]; const ref = useRef(null); const { scrollY } = useScroll({ target: ref, offset: ["start start", "end start"], }); const [visible, setVisible] = useState(false); useMotionValueEvent(scrollY, "change", (latest) => { if (latest > 100) { setVisible(true); } else { setVisible(false); } }); return ( ); }; const DesktopNav = ({ navItems, visible }: NavbarProps) => { const [hoveredIndex, setHoveredIndex] = useState(null); const handleGoogleLogin = () => { // Redirect to the login page window.location.href = "/login"; }; return ( setHoveredIndex(null)} animate={{ backdropFilter: "blur(16px)", background: visible ? "rgba(var(--background-rgb), 0.8)" : "rgba(var(--background-rgb), 0.6)", width: visible ? "38%" : "80%", height: visible ? "48px" : "64px", y: visible ? 8 : 0, }} initial={{ width: "80%", height: "64px", background: "rgba(var(--background-rgb), 0.6)", }} transition={{ type: "spring", stiffness: 400, damping: 30, }} className={cn( "hidden lg:flex flex-row self-center items-center justify-between py-2 mx-auto px-6 rounded-full relative z-[60] backdrop-saturate-[1.8]", visible ? "border dark:border-white/10 border-gray-300/30" : "border-0" )} style={ { "--background-rgb": "var(--tw-dark) ? '0, 0, 0' : '255, 255, 255'", } as React.CSSProperties } >
SurfSense
{navItems.map((navItem, idx) => ( setHoveredIndex(idx)} className="relative" > {navItem.name} {hoveredIndex === idx && ( )} ))} {!visible && ( )}
); }; const MobileNav = ({ navItems, visible }: NavbarProps) => { const [open, setOpen] = useState(false); const handleGoogleLogin = () => { // Redirect to the login page window.location.href = "./login"; }; return (
{open ? ( setOpen(!open)} /> ) : ( setOpen(!open)} /> )}
{open && ( {navItems.map((navItem: { link: string; name: string }) => ( setOpen(false)} className="relative dark:text-white/90 text-gray-800 hover:text-gray-900 dark:hover:text-white transition-colors" > {navItem.name} ))} )}
); };