Contained 16:9 hero carousel with badge, title, description, and CTA over an image background. Auto-rotates with centered, clickable dots at the bottom — same carousel engine as hero19 but not full-height.
A contained 16:9 hero carousel that rotates through slides, each with its own badge, heading, description, image and CTA. Unlike a fullscreen hero, the carousel lives inside a padded, rounded card capped between 420px and 640px tall, so it reads as a boxed showcase panel rather than a page-filling banner.
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/hero109?email=YOUR_EMAIL&license_key=YOUR_KEY"Base UI flavor
npx shadcn add "https://ui.beste.co/r-base/hero109?email=YOUR_EMAIL&license_key=YOUR_KEY"This installs the block to components/beste/block/hero109.tsx and the badge and button shadcn/ui primitives it depends on.
The installed file exports hero109Demo alongside the block: the exact props behind the preview above. Spread it to get a working carousel in one line.
import { Hero109, hero109Demo } from "@/components/beste/block/hero109";
export default function Page() {
return <Hero109 {...hero109Demo} />;
}Then replace the demo with your own props. Written out, a trimmed setup looks like this:
import { Hero109 } from "@/components/beste/block/hero109";
export default function Page() {
return (
<Hero109
autoPlay
interval={5000}
transition="kenBurns"
showDots
slides={[
{
id: "slide-1",
badge: { label: "New", variant: "secondary" },
heading: "Launch week is here",
description: "Ship your product page in an afternoon, not a sprint.",
image: {
src: "https://images.unsplash.com/photo-1519389950473-47ba0277781c?w=1500&h=844&fit=crop",
alt: "Team celebrating a product launch",
},
buttons: [{ id: "btn-1", label: "See the release", href: "https://beste.co" }],
},
{
id: "slide-2",
badge: { label: "Design", variant: "secondary" },
heading: "Built for detail",
description: "Every transition, spacing and shadow considered.",
image: {
src: "https://images.unsplash.com/photo-1498050108023-c5249f4df085?w=1500&h=844&fit=crop",
alt: "Designer reviewing a layout on a laptop",
},
buttons: [{ id: "btn-1", label: "View the system", href: "https://beste.co" }],
},
]}
/>
);
}| Prop | Type | Default | Description |
|---|---|---|---|
slides | HeroSlide[] | – | Slide list; each slide carries its own badge, heading, description, image and buttons |
autoPlay | boolean | true | Auto-advances to the next slide on the interval timer |
interval | number | 6000 | Milliseconds between auto-advances |
transition | "fade" | "slide" | "zoom" | "blur" | "kenBurns" | "fade" | Which framer-motion variant set drives the slide change |
showDots | boolean | true | Shows the clickable dot pager at the bottom of the card |
className | string | – | Extra classes for the outer <section> |
type HeroSlide = {
id: string;
badge?: { label: string; variant?: "default" | "secondary" | "outline" };
heading?: string;
description?: string;
image?: { src: string; alt: string };
buttons?: ButtonItem[];
};
type ButtonItem = {
id: string;
label: string;
href?: string;
variant?: "default" | "secondary" | "outline" | "ghost" | "link" | "destructive";
};AnimatePresence; the transition prop swaps in a different variant/transition pair: slide moves on the x-axis with a spring and tracks direction (left/right), zoom and kenBurns scale the image in and out, blur animates a CSS blur filter, fade is a plain opacity cross-fade.onMouseEnter/onMouseLeave toggle an isPaused state); moving off resumes it. Clicking a dot jumps straight to that slide and sets the transition direction based on whether it is ahead or behind the current one.aspect-[16/9] with a min-h-[420px]/max-h-[640px] range and sits inside a rounded-3xl, padded card, which is what makes it "bounded" rather than a fullscreen hero.hero110
Contained 16:9 hero carousel with badge, title, description, and CTA. Vertically centered content that anchors to the left, center, or right via the contentAlign prop. Auto-rotates with centered, clickable dots.
hero19
Full-screen animated carousel with multiple transition effects, next slide preview, and progress bar. Perfect for immersive storytelling and portfolio showcases.
hero21
Full-screen carousel with vertical slide transitions, decorative grid lines, and customizable accent colors. Perfect for creative agencies and modern brand showcases.
hero20
Two-column carousel with animated content transitions, thumbnail strip navigation, and vertical progress indicator. Perfect for product showcases and feature highlights.
hero57
Vertically centered hero with animated scroll-down indicator featuring bouncing dot and arrow. Perfect for single-page sites and immersive landing pages.
hero111
Two-column hero with heading, description, icon-only feature list, and CTA on one side and a square image on the other. Image position is configurable.