"use client"; import { useState, useEffect, useCallback, memo, Fragment } from "react"; import Logo from "../Logo"; import HamburgerButton from "../HamburgerButton"; import Button from "@/components/button/Button"; import { NavItem } from "@/types/navigation"; import { cls } from "@/lib/utils"; import { getButtonProps } from "@/lib/buttonUtils"; import { useButtonClick } from "@/components/button/useButtonClick"; import { useTheme } from "@/providers/themeProvider/ThemeProvider"; import type { ButtonConfig } from "@/types/button"; import "./NavbarStyleCentered.css"; import { ArrowUpRight } from "lucide-react"; interface NavLinkProps { item: NavItem; index: number; onClose: () => void; } const NavLink = memo(function NavLink({ item, index, onClose }: NavLinkProps) { const handleClick = useButtonClick(item.id, onClose); return (
  • ); }); interface NavbarStyleCenteredProps { navItems: NavItem[]; button: ButtonConfig; logoSrc?: string; logoAlt?: string; brandName?: string; className?: string; } const NavbarStyleCentered = memo(function NavbarStyleCentered({ navItems, button, logoSrc, logoAlt = "", brandName = "Webild", className = "", }: NavbarStyleCenteredProps) { const [isActive, setIsActive] = useState(false); const theme = useTheme(); const getButtonConfigProps = () => { if (theme.defaultButtonVariant === "hover-bubble") { return { bgClassName: "w-full" }; } if (theme.defaultButtonVariant === "icon-arrow") { return { className: "justify-between" }; } return {}; }; const handleToggle = useCallback(() => { setIsActive((prev) => !prev); }, []); const handleClose = useCallback(() => { setIsActive(false); }, []); useEffect(() => { const handleKeyDown = (e: KeyboardEvent) => { if (e.key === "Escape" && isActive) { setIsActive(false); } }; document.addEventListener("keydown", handleKeyDown); return () => document.removeEventListener("keydown", handleKeyDown); }, [isActive]); return ( ); }); NavbarStyleCentered.displayName = "NavbarStyleCentered"; export default NavbarStyleCentered;