import logo from "../assets/Logo.png"; import { useState } from "react"; import { Button, useMediaQuery } from "@relume_io/relume-ui"; import type { ButtonProps } from "@relume_io/relume-ui"; import { AnimatePresence, motion } from "framer-motion"; import { RxChevronDown } from "react-icons/rx"; import { Link } from "react-router-dom"; type NavButtonProps = ButtonProps & { url?: string }; type ImageProps = { url?: string; src: string; alt?: string; }; type NavLink = { url?: string; title: string; subMenuLinks?: NavLink[]; }; type Props = { logo: ImageProps; navLinks: NavLink[]; buttons: NavButtonProps[]; }; export type Navbar3Props = React.ComponentPropsWithoutRef<"section"> & Partial; export const Navbar3 = (props: Navbar3Props) => { const { logo, navLinks, buttons } = { ...Navbar3Defaults, ...props, }; const [isMobileMenuOpen, setIsMobileMenuOpen] = useState(false); const isMobile = useMediaQuery("(max-width: 991px)"); return (
{logo.alt} {navLinks.map((navLink, index) => (
{navLink.subMenuLinks && navLink.subMenuLinks.length > 0 ? ( ) : ( {navLink.title} )}
))}
{buttons.map(({ url, ...button }, index) => url ? ( ) : ( ) )}
{isMobileMenuOpen && ( setIsMobileMenuOpen(false)} /> )}
{logo.alt}
{buttons.map(({ url, ...button }, index) => url ? ( ) : ( ) )}
); }; const SubMenu = ({ navLink, isMobile }: { navLink: NavLink; isMobile: boolean }) => { const [isDropdownOpen, setIsDropdownOpen] = useState(false); return (
!isMobile && setIsDropdownOpen(true)} onMouseLeave={() => !isMobile && setIsDropdownOpen(false)} > {isDropdownOpen && ( {navLink.subMenuLinks?.map((subMenuLink, index) => ( {subMenuLink.title} ))} )}
); }; export const Navbar3Defaults: Props = { logo: { url: "/", src: logo, alt: "UXplore Logo", }, navLinks: [ { title: "Programm", url: "/programm" }, { title: "Speaker", url: "/speaker" }, { title: "Location", url: "#" }, ], buttons: [ { title: "Tickets", size: "sm", variant: "primary", url: "/tickets", }, ], };