Pexo
Building one pagers together,wherever and anywhere
The fastest method for working together on staging and temporary environments.
🧬
Next.js
Next.js description
⚡️
Shadcn
Shadcn description
🚀
Tailwind
Tailwind
🌍
i18n
i18n
+
title
description
"use client";import Link, { type LinkProps } from "next/link";import { usePathname } from "next/navigation";import {NavigationMenu,NavigationMenuContent,NavigationMenuItem,NavigationMenuLink,NavigationMenuList,NavigationMenuTrigger,navigationMenuTriggerStyle,} from "@/components/ui/navigation-menu";import { marketingPagesConfig } from "@/config/pages";import { cn } from "@/lib/utils";import * as React from "react";import { Icons, type ValidIcon } from "../icons";// import { BrandName } from "./brand-name";// import { LoginButton } from "./login-button";// import { MarketingMenu } from "./marketing-menu";interface Props {className?: string;}export default function MarketingHeader({ className }: Props) {const pathname = usePathname();return (<headerclassName={cn("sticky top-3 z-10 flex w-full items-center justify-between gap-8 rounded-full border border-border px-2.5 py-1.5 backdrop-blur-lg md:top-6",className,)}><div className="flex items-center gap-6"><div className="ml-3 flex items-center gap-3 font-bold">Pexo</div><divclassName={cn("mx-auto hidden items-center justify-center border border-transparent md:flex md:gap-1",)}><NavigationMenu><NavigationMenuList>{marketingPagesConfig.map((page) => {const { href, title, children } = page;if (!children) {return (<NavigationMenuItem key={title}><Link href={href} legacyBehavior passHref><NavigationMenuLinkclassName={cn(navigationMenuTriggerStyle(),"h-9 rounded-full bg-transparent text-muted-foreground hover:bg-accent/50",{ "text-foreground": href === pathname },)}>{title}</NavigationMenuLink></Link></NavigationMenuItem>);}return (<NavigationMenuItem key={href}><NavigationMenuTrigger className="h-9 rounded-full bg-transparent text-muted-foreground hover:bg-transparent data-[state=open]:text-accent-foreground">{title}</NavigationMenuTrigger><NavigationMenuContent><ul className="grid w-[400px] gap-3 p-4 md:w-[500px] md:grid-cols-2 lg:w-[600px]">{children?.map((item) => {const isExternal = item.href.startsWith("http");const _externalProps = isExternal? { target: "_blank" }: {};const _isActive = pathname.startsWith(item.href);return (<ListItemkey={item.title}title={item.title}href={item.href}icon={item.icon}>{item.description}</ListItem>);})}</ul></NavigationMenuContent></NavigationMenuItem>);})}</NavigationMenuList></NavigationMenu></div></div><div className="flex items-center justify-end gap-3"><div className="block md:hidden">{/* <MarketingMenu /> */}</div>{/* <LoginButton /> */}<button>Login</button></div></header>);}const ListItem = React.forwardRef<React.ElementRef<"a">,React.ComponentPropsWithoutRef<"a"> & LinkProps & { icon: ValidIcon }>(({ className, title, children, icon, ...props }, ref) => {// TODO: if external, add Arrow-Right-Up Iconconst Icon = Icons[icon];return (<li className="group"><NavigationMenuLink asChild><Linkref={ref}className={cn("flex select-none gap-3 space-y-1 rounded-md p-3 leading-none no-underline outline-none transition-colors hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground",className,)}{...props}><div className="self-start rounded-md border p-2 group-hover:bg-background"><Icon className="h-4 w-4" /></div><div className="grid gap-1"><div className="font-medium text-sm leading-none">{title}</div><p className="line-clamp-2 text-muted-foreground text-sm leading-snug">{children}</p></div></Link></NavigationMenuLink></li>);});ListItem.displayName = "ListItem";