155 lines
5.4 KiB
TypeScript
155 lines
5.4 KiB
TypeScript
"use client";
|
|
|
|
import React, { useState, useRef, useEffect } from "react";
|
|
import { FaAngleDown } from "react-icons/fa";
|
|
import { ProductDropdown, SolutionsDropdown, ResourcesDropdown } from "./dropdowns";
|
|
import MobileMenu from "./MobileMenu"; // Import the MobileMenu component
|
|
|
|
const Navbar: React.FC = () => {
|
|
const [showProduct, setShowProduct] = useState<boolean>(false);
|
|
const [showSolutions, setShowSolutions] = useState<boolean>(false);
|
|
const [showResources, setShowResources] = useState<boolean>(false);
|
|
const [activeTab, setActiveTab] = useState<string | null>(null);
|
|
const [mobileMenuOpen, setMobileMenuOpen] = useState<boolean>(false);
|
|
|
|
const navbarRef = useRef<HTMLDivElement>(null); // Reference for the navbar
|
|
|
|
const toggleDropdown = (tab: string) => {
|
|
if (activeTab === tab) {
|
|
setActiveTab(null);
|
|
setShowProduct(false);
|
|
setShowSolutions(false);
|
|
setShowResources(false);
|
|
} else {
|
|
setActiveTab(tab);
|
|
setShowProduct(tab === "product");
|
|
setShowSolutions(tab === "solutions");
|
|
setShowResources(tab === "resources");
|
|
}
|
|
};
|
|
|
|
const toggleMobileMenu = () => {
|
|
setMobileMenuOpen(!mobileMenuOpen);
|
|
};
|
|
|
|
// Close dropdowns when clicking outside the navbar
|
|
useEffect(() => {
|
|
const handleClickOutside = (event: MouseEvent) => {
|
|
if (navbarRef.current && !navbarRef.current.contains(event.target as Node)) {
|
|
setActiveTab(null);
|
|
setShowProduct(false);
|
|
setShowSolutions(false);
|
|
setShowResources(false);
|
|
}
|
|
};
|
|
|
|
document.addEventListener("mousedown", handleClickOutside);
|
|
return () => {
|
|
document.removeEventListener("mousedown", handleClickOutside);
|
|
};
|
|
}, []);
|
|
|
|
return (
|
|
<div ref={navbarRef} className="fixed top-0 w-full h-fit px-10 bg-[#080E12] bg-clip-padding backdrop-filter backdrop-blur-sm bg-opacity-100 z-50">
|
|
<div className="w-full text-white flex items-center justify-between">
|
|
<div className="flex items-center space-x-12 relative">
|
|
<a href="/">
|
|
<img
|
|
className="h-20"
|
|
src="https://res.cloudinary.com/dezd109fz/image/upload/v1737306774/Screenshot_2025-01-16_150353_fwgdmz.png"
|
|
alt="Logo"
|
|
/>
|
|
</a>
|
|
|
|
{/* Desktop Menu */}
|
|
<ul className="hidden md:flex space-x-12">
|
|
{/* Product Menu */}
|
|
<li
|
|
className={`flex items-center cursor-pointer relative ${activeTab === "product" ? "text-violet-500" : "text-white"}`}
|
|
onClick={() => toggleDropdown("product")}
|
|
>
|
|
Product <FaAngleDown className="ml-2" />
|
|
{activeTab === "product" && (
|
|
<span className="absolute left-0 -bottom-1 transition-all duration-300">
|
|
<span className="block h-[2px] w-full bg-violet-500"></span>
|
|
</span>
|
|
)}
|
|
</li>
|
|
|
|
{/* Solutions Menu */}
|
|
<li
|
|
className={`flex items-center cursor-pointer relative ${activeTab === "solutions" ? "text-violet-500" : "text-white"}`}
|
|
onClick={() => toggleDropdown("solutions")}
|
|
>
|
|
Solutions <FaAngleDown className="ml-2" />
|
|
{activeTab === "solutions" && (
|
|
<span className="absolute left-0 -bottom-1 transition-all duration-300">
|
|
<span className="block h-[2px] w-full bg-violet-500"></span>
|
|
</span>
|
|
)}
|
|
</li>
|
|
|
|
{/* Pricing */}
|
|
<a href="/pricing">
|
|
<li className="flex items-center cursor-pointer text-white">Pricing</li>
|
|
</a>
|
|
|
|
{/* Resources Menu */}
|
|
<li
|
|
className={`flex items-center cursor-pointer relative ${activeTab === "resources" ? "text-violet-500" : "text-white"}`}
|
|
onClick={() => toggleDropdown("resources")}
|
|
>
|
|
Resources <FaAngleDown className="ml-2" />
|
|
{activeTab === "resources" && (
|
|
<span className="absolute left-0 -bottom-1 transition-all duration-300">
|
|
<span className="block h-[2px] w-full bg-violet-500"></span>
|
|
</span>
|
|
)}
|
|
</li>
|
|
|
|
<a href="/ai-agents">
|
|
<li className="flex items-center cursor-pointer text-white">AI Agents</li>
|
|
</a>
|
|
</ul>
|
|
|
|
{/* Hamburger Icon for Mobile View */}
|
|
<div className="md:hidden flex items-center" onClick={toggleMobileMenu}>
|
|
☰
|
|
</div>
|
|
</div>
|
|
|
|
{/* Action Buttons */}
|
|
<div className="hidden md:flex space-x-4">
|
|
<button className="border px-4 py-2 rounded-md text-white border-white hover:bg-gray-800">Start Free Trial</button>
|
|
|
|
<button className="border px-4 py-2 rounded-md bg-violet-700 hover:bg-violet-500 text-white">Take a Demo</button>
|
|
</div>
|
|
</div>
|
|
|
|
{/* Dropdowns for Desktop View */}
|
|
<div className="border">
|
|
{showProduct && (
|
|
<div>
|
|
<ProductDropdown />
|
|
</div>
|
|
)}
|
|
{showSolutions && (
|
|
<div>
|
|
<SolutionsDropdown />
|
|
</div>
|
|
)}
|
|
{showResources && (
|
|
<div>
|
|
<ResourcesDropdown />
|
|
</div>
|
|
)}
|
|
</div>
|
|
|
|
{/* Mobile Menu */}
|
|
{mobileMenuOpen && <MobileMenu show={mobileMenuOpen} toggle={toggleMobileMenu} />}
|
|
</div>
|
|
);
|
|
};
|
|
|
|
export default Navbar;
|