"use client";
import {
IconBrandDiscord,
IconBrandGithub,
IconBrandReddit,
IconMenu2,
IconSpeakerphone,
IconX,
} from "@tabler/icons-react";
import { AnimatePresence, motion } from "motion/react";
import Link from "next/link";
import { useEffect, useState } from "react";
import { SignInButton } from "@/components/auth/sign-in-button";
import { Logo } from "@/components/Logo";
import { ThemeTogglerComponent } from "@/components/theme/theme-toggle";
import { useAnnouncements } from "@/hooks/use-announcements";
import { useGithubStars } from "@/hooks/use-github-stars";
import { cn } from "@/lib/utils";
export const Navbar = () => {
const [isScrolled, setIsScrolled] = useState(false);
const navItems = [
{ name: "Pricing", link: "/pricing" },
{ name: "Changelog", link: "/changelog" },
{ name: "Docs", link: "/docs" },
{ name: "Contact\u00A0Us", link: "/contact" },
];
useEffect(() => {
if (typeof window === "undefined") return;
const handleScroll = () => {
setIsScrolled(window.scrollY > 20);
};
handleScroll();
window.addEventListener("scroll", handleScroll);
return () => window.removeEventListener("scroll", handleScroll);
}, []);
return (
);
};
const DesktopNav = ({ navItems, isScrolled }: any) => {
const [hovered, setHovered] = useState(null);
const [mounted, setMounted] = useState(false);
const { compactFormat: githubStars, loading: loadingGithubStars } = useGithubStars();
const { unreadCount } = useAnnouncements();
useEffect(() => setMounted(true), []);
return (
{
setHovered(null);
}}
className={cn(
"mx-auto hidden w-full max-w-7xl flex-row items-center justify-between self-start rounded-full px-4 py-2 lg:flex transition-all duration-300",
isScrolled
? "bg-white/80 backdrop-blur-md border border-white/20 shadow-lg dark:bg-neutral-950/80 dark:border-neutral-800/50"
: "bg-transparent border border-transparent"
)}
>
SurfSense
{navItems.map((navItem: any, idx: number) => (
setHovered(idx)}
onMouseLeave={() => setHovered(null)}
className="relative px-4 py-2 text-neutral-600 dark:text-neutral-300"
key={`link=${idx}`}
href={navItem.link}
>
{hovered === idx && (
)}
{navItem.name}
))}
{loadingGithubStars ? (
) : (
{githubStars}
)}
{mounted && unreadCount > 0 && (
{unreadCount > 99 ? "99+" : unreadCount}
)}
);
};
const MobileNav = ({ navItems, isScrolled }: any) => {
const [open, setOpen] = useState(false);
const [mounted, setMounted] = useState(false);
const { compactFormat: githubStars, loading: loadingGithubStars } = useGithubStars();
const { unreadCount } = useAnnouncements();
useEffect(() => setMounted(true), []);
return (
SurfSense
{open && (
{navItems.map((navItem: any, idx: number) => (
{navItem.name}
))}
{loadingGithubStars ? (
) : (
{githubStars}
)}
{mounted && unreadCount > 0 && (
{unreadCount > 99 ? "99+" : unreadCount}
)}
)}
);
};