A centred install hero whose serif headline ends in a word that keeps changing (a pricing page, a hero, a footer), so the promise reads as a list of things the agent can be asked for. Below it an ink command pill that copies the install command on click sits beside a sliding-marker outline pill, then a quiet note.
A hero whose headline never finishes the same way twice: the last word cycles through the things an agent can be asked for, so the promise reads as a list rather than a claim.
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/hero194?email=YOUR_EMAIL&license_key=YOUR_KEY"Base UI flavor
npx shadcn add "https://ui.beste.co/r-base/hero194?email=YOUR_EMAIL&license_key=YOUR_KEY"This installs the block to components/beste/block/hero194.tsx plus the button22 sliding-marker pill and the text4 turning word it uses.
The installed file exports hero194Demo alongside the block: the exact props behind the preview above. Spread it to get a working hero in one line.
import { Hero194, hero194Demo } from "@/components/beste/block/hero194";
export default function Page() {
return <Hero194 {...hero194Demo} />;
}Then replace the demo with your own props. Written out, a trimmed setup looks like this:
import { Hero194 } from "@/components/beste/block/hero194";
export default function Page() {
return (
<Hero194
eyebrow="Your agent, better furnished"
headingBefore="Ask your agent for a"
headingWords={["pricing page.", "hero.", "sign in form.", "footer."]}
description="It answers with a section that already exists, in your theme."
command="npx your-cli@latest"
copyLabel="Copy command"
copiedLabel="Copied"
buttons={[{ label: "Read the docs", href: "/docs", tone: "outline" }]}
note="Free to start. No account needed for the first page."
/>
);
}| Prop | Type | Default | Description |
|---|---|---|---|
eyebrow | string | – | Small-caps line above the headline |
headingBefore | string | – | The fixed opening of the headline |
headingWords | string[] | [] | Words that take turns finishing it |
description | string | – | Paragraph under the headline |
command | string | – | The install command; clicking the pill copies it |
copyLabel | string | – | Accessible name for the pill in its resting state |
copiedLabel | string | – | Accessible name and live-region text once copied |
buttons | ActionButton[] | [] | Pill actions beside the command |
note | string | – | Quiet line under the actions |
className | string | – | Extra classes for the outer <section> |
type ActionButton = {
label: string;
href: string;
tone?: "primary" | "light" | "dark" | "outline";
};Text4, which swaps it on a timer and blurs each one in and out. Include the full stop in each word so the sentence closes cleanly whichever one is showing.headingBefore.split(" ").length + 1, since the turning word's length is not knowable in advance.h-14 so the filled command and the outlined action line up exactly.