Editorial hero pairing an oversized statement, a paragraph and a pill CTA with a ruled index of disciplines, closed by a wide cinematic image band carrying a caption and a location credit on its own rule.
Editorial hero for a studio or practice: an oversized statement and a paragraph sit beside a ruled index of the disciplines you take on, with a pill CTA under the copy and a wide cinematic image band closing the section on its own caption rule.
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/hero147?email=YOUR_EMAIL&license_key=YOUR_KEY"Base UI flavor
npx shadcn add "https://ui.beste.co/r-base/hero147?email=YOUR_EMAIL&license_key=YOUR_KEY"This installs the block to components/beste/block/hero147.tsx plus the badge7 eyebrow and button12 pill button it uses.
The installed file exports hero147Demo alongside the block: the exact props behind the preview above. Spread it to get a working hero in one line.
import { Hero147, hero147Demo } from "@/components/beste/block/hero147";
export default function Page() {
return <Hero147 {...hero147Demo} />;
}Then replace the demo with your own props. Written out, a trimmed setup looks like this:
import { Hero147 } from "@/components/beste/block/hero147";
export default function Page() {
return (
<Hero147
badge={{ label: "Design practice" }}
heading="A studio for the parts nobody wants to own."
description="We take the messy middle of a brand and finish it."
button={{ label: "Start a commission", href: "/contact" }}
disciplines={[
{ title: "Identity", description: "Marks, type systems and the rules that keep them alive." },
{ title: "Editorial", description: "Long-form pages that survive being read." },
]}
image={{ src: "/studio/table.jpg", alt: "Printed layouts across a studio table" }}
labels={{ imageCaption: "Second week of a rebrand.", imageCredit: "Studio floor, Rotterdam" }}
/>
);
}| Prop | Type | Default | Description |
|---|---|---|---|
badge | { label: string } | – | Eyebrow label rendered as a Badge7 |
heading | string | – | Display statement, rendered as the page h1 |
description | string | – | Supporting paragraph under the heading |
button | ActionButton | – | Pill CTA, rendered as Button12 |
disciplines | Discipline[] | [] | Ruled index in the narrow right column |
image | { src: string; alt: string } | – | Wide image band under the two columns |
labels | Hero147Labels | {} | Fixed strings that are not content: index title, image caption and credit |
className | string | – | Extra classes for the outer <section> |
type Discipline = {
title: string;
description: string;
};
type ActionButton = {
label: string;
href: string;
};
type Hero147Labels = {
disciplinesTitle?: string;
imageCaption?: string;
imageCredit?: string;
};md:items-end, so the discipline index sits on the same baseline as the CTA rather than floating next to the top of a very tall heading.h2 under the h1, which keeps the outline correct when this block opens a page and the index doubles as a section summary.aspect-[16/9] on mobile becomes aspect-[21/9] from md up, so the crop stays cinematic on desktop without going letterbox-thin on a phone.border-t row under the image and wrap independently, so a long caption never pushes the credit out of the section.image the block ends after the two columns, and without disciplines the heading column simply takes the full width.hero120
Centered editorial hero with eyebrow, large heading, description, dual dark and outline CTAs, and a wide 16:9 image with a mono caption below.
hero166
An editorial hero that breaks its display heading across two lines and slots a square image tile floating a live payment card into the gap, with the paragraph and action landing under a hairline.
hero145
An editorial hero with an eyebrow and an oversized full-width light heading, then a lower row pairing a paragraph and two accent buttons with an image tile that floats a live app window frame.
hero138
Static full-bleed editorial hero with an eyebrow badge, a giant display heading, a supporting paragraph, dual seal CTAs, and an overlapping avatar trust row.