Header 33
background1 ColumnImage/Video CenterText Align CenterButtonsBackground VideoHero Header Section

Code
relume-header33.tsx
import { Button, type ButtonProps } from "@/components/ui/button";
type Props = {
heading: string;
description: string;
buttons: ButtonProps[];
video: string;
videoType: string;
};
export type Header33Props = React.ComponentPropsWithoutRef<"section"> & Partial<Props>;
export const Header33 = (props: Header33Props) => {
const { heading, description, buttons, video, videoType } = {
...Header33Defaults,
...props,
};
return (
<section className="relative px-[5%]">
<div className="relative z-10 container max-w-lg">
<div className="flex max-h-[60rem] min-h-svh items-center py-16 md:py-24 lg:py-28">
<div className="text-center">
<h1 className="mb-5 text-h1 font-bold text-white md:mb-6">{heading}</h1>
<p className="text-medium text-white">{description}</p>
<div className="mt-6 flex items-center justify-center gap-x-4 md:mt-8">
{buttons.map((button, index) => (
<Button key={index} {...button}>
{button.title}
</Button>
))}
</div>
</div>
</div>
</div>
<div className="absolute inset-0 z-0">
<video className="absolute inset-0 aspect-video size-full object-cover" autoPlay loop muted>
<source src={video} type={videoType} />
</video>
<div className="absolute inset-0 bg-neutral-darkest/50" />
</div>
</section>
);
};
export const Header33Defaults: Props = {
heading: "Medium length hero heading goes here",
description:
"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique. Duis cursus, mi quis viverra ornare, eros dolor interdum nulla, ut commodo diam libero vitae erat.",
buttons: [
{ title: "Button", variant: "alternate" },
{ title: "Button", variant: "secondary-alt" },
],
video: "https://d22po4pjz3o32e.cloudfront.net/placeholder-video.mp4",
videoType: "video/mp4",
};npm i @radix-ui/react-dialog @radix-ui/react-slot class-variance-authority@0.7.1 clsx@^2.1.1 relume-icons@1.3.0 tailwind-merge@^2.2.2


