Not sure where to start?
Tell us about your brief and we'll map the right team in 48 hours.
Dark studio navbar whose Services item opens a mega panel with three eyebrow-titled link columns and a bordered booking card with a seal CTA.
Dark studio navbar on a solid bg-foreground bar whose single "Services" item opens a mega panel with three eyebrow-titled link columns and a bordered booking card carrying its own call-to-action. Plain nav links sit alongside the mega trigger, and the panel opens on hover as well as click.
Upgrade to Pro
Pro blocks install through the shadcn CLI with your license key and ship their full source. Docs and live previews stay open to everyone, so you can read every block's details first.
Swap YOUR_EMAIL and YOUR_KEY for the email and license key on your account. Find your license key on your account page.
Radix flavor
npx shadcn add "https://ui.beste.co/r/navbar53?email=YOUR_EMAIL&license_key=YOUR_KEY"Base UI flavor
npx shadcn add "https://ui.beste.co/r-base/navbar53?email=YOUR_EMAIL&license_key=YOUR_KEY"This installs the block to components/beste/block/navbar53.tsx and the button1 component it uses for the CTA and the mega panel's booking card.
The installed file exports navbar53Demo alongside the block: the exact props behind the preview above. Spread it to get a working navbar in one line.
import { Navbar53, navbar53Demo } from "@/components/beste/block/navbar53";
export default function Layout() {
return <Navbar53 {...navbar53Demo} />;
}Then replace the demo with your own props. Written out, a trimmed setup looks like this:
import { Navbar53 } from "@/components/beste/block/navbar53";
export default function Layout() {
return (
<Navbar53
brand="Polaris"
megaMenu={{
label: "Services",
columns: [
{
title: "Brand",
links: [{ label: "Strategy & Naming", href: "/services/strategy" }],
},
{
title: "Build",
links: [{ label: "Web Engineering", href: "/services/engineering" }],
},
],
card: {
heading: "Not sure where to start?",
description: "Tell us about your brief and we'll map the right team.",
cta: { label: "Book a Call", href: "/contact" },
},
}}
links={[
{ label: "Work", href: "/work" },
{ label: "Journal", href: "/journal" },
]}
cta={{ label: "Start a Project", href: "/contact" }}
/>
);
}| Prop | Type | Default | Description |
|---|---|---|---|
brand | string | – | Wordmark text next to the leading square accent; hidden entirely when omitted |
megaMenu | MegaMenu | – | Mega trigger and panel content; hidden entirely when omitted |
links | NavLink[] | [] | Plain nav links rendered after the mega trigger |
cta | CtaLink | – | Primary button, rendered via button1; hidden when omitted |
className | string | – | Extra classes for the outer <header> |
type NavLink = { label: string; href: string };
type MegaMenu = {
label: string;
columns: MegaColumn[];
card?: MegaCard;
};
type MegaColumn = { title: string; links: NavLink[] };
type MegaCard = {
heading: string;
description: string;
cta: { label: string; href: string };
};onMouseEnter and also toggles on click; moving the mouse off the whole <header> (including the panel) closes it via onMouseLeave.megaMenu is set, and its open/closed state is driven by opacity, translate, and visibility classes with a 200ms transition rather than unmounting.lg breakpoint the desktop links and mega trigger disappear in favor of a hamburger button; the mobile panel flattens the mega columns into a bordered list above the plain links and a full-width CTA button.bg-foreground/text-background tokens rather than adaptive surface tokens, so it stays a dark bar regardless of the page theme.