Announcement Bar Navbar

Sirius is now live for multi-site groups.See what's new
About this block

Announcement Bar NavbarPRO

A navbar with a dark announcement strip above a hairline-bordered row carrying a lowercase wordmark, uppercase links, a sign-in link, an accent call to action, and a mobile menu.

A navbar with an optional dark announcement strip stacked above a hairline-bordered nav row. The strip carries a short message and a linked call-to-action with a trailing arrow, while the row below holds a lowercase wordmark, uppercase nav links, a plain-text sign-in link, and a solid accent button, with the strip, sign-in link, and menu all collapsing sensibly on mobile.

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.

Upgrade Now

Installation

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

bash
npx shadcn add "https://ui.beste.co/r/navbar73?email=YOUR_EMAIL&license_key=YOUR_KEY"

Base UI flavor

bash
npx shadcn add "https://ui.beste.co/r-base/navbar73?email=YOUR_EMAIL&license_key=YOUR_KEY"

This installs the block to components/beste/block/navbar73.tsx, the button21 component it uses for its call-to-action, and its dependencies.

Quick start

The installed file exports navbar73Demo alongside the block: the exact props behind the preview above. Spread it to get a working navbar in one line.

tsx
import { Navbar73, navbar73Demo } from "@/components/beste/block/navbar73";

export default function Layout() {
  return <Navbar73 {...navbar73Demo} />;
}

Then replace the demo with your own props. Written out, a trimmed setup looks like this:

tsx
import { Navbar73 } from "@/components/beste/block/navbar73";

export default function Layout() {
  return (
    <Navbar73
      announcement={{
        text: "Now live for multi-site groups.",
        link: { label: "See what's new", href: "/changelog" },
      }}
      brand="Acme"
      items={[
        { label: "Platform", href: "/platform" },
        { label: "Pricing", href: "/pricing" },
      ]}
      signIn={{ label: "Sign in", href: "/login" }}
      button={{ label: "Book a demo", href: "/demo" }}
    />
  );
}

Props

PropTypeDefaultDescription
announcementAnnouncement–Dark strip above the nav row; omit to hide the strip entirely
brandstring–Wordmark text, rendered lowercase, linked to https://beste.co
itemsNavLink[][]Nav links in the main row
signInActionLink–Plain-text link shown next to the call-to-action; omit to hide it
buttonActionLink–Accent call-to-action rendered via Button21; omit to hide it
classNamestring–Extra classes for the outer <header>
ts
type Announcement = { text: string; link: ActionLink };
type NavLink = { label: string; href: string };
type ActionLink = { label: string; href: string };

Behavior notes

  • The announcement strip only renders when announcement is passed; it uses inverted bg-foreground/text-background colors regardless of theme, and its link shows a trailing arrow icon.
  • The nav row itself always has a bottom border (border-b), independent of whether the announcement strip is shown.
  • signIn is desktop-only inline (hidden lg:block) but reappears above the call-to-action inside the open mobile menu.
  • The mobile menu (below lg) stacks the nav links, then signIn, then a full-width call-to-action button, each in its own row.
  • There is no dismiss control on the announcement strip; visibility is controlled entirely by whether the announcement prop is passed.

More Navigation blocks

View all Navigation
PRO

navbar79

Announcement Navbar

PRO

navbar43

Dark Announcement Navbar

PRO

navbar62

Announcement Marquee Navbar

Get Pro access