Layout 254
standard3 ColumnsText Align CenterImage/Video CenterIconsButtonsImage

Code
relume-layout254.tsx
import { ChevronRight, RelumeIcon } from "relume-icons";
import { Button, type ButtonProps } from "@/components/ui/button";
type ImageProps = {
src: string;
alt?: string;
};
type SectionProps = {
heading: string;
description: string;
};
type Props = {
tagline: string;
heading: string;
description: string;
leftSections: SectionProps[];
rightSections: SectionProps[];
buttons: ButtonProps[];
image: ImageProps;
};
export type Layout254Props = React.ComponentPropsWithoutRef<"section"> & Partial<Props>;
export const Layout254 = (props: Layout254Props) => {
const { tagline, heading, description, leftSections, rightSections, buttons, image } = {
...props,
...Layout254Defaults,
};
return (
<section className="px-[5%] py-16 md:py-24 lg:py-28">
<div className="container">
<div className="mb-12 md:mb-18 lg:mb-20">
<div className="mx-auto max-w-lg text-center">
<p className="mb-3 font-semibold md:mb-4">{tagline}</p>
<h2 className="mb-5 text-h2 font-bold md:mb-6">{heading}</h2>
<p className="text-medium">{description}</p>
</div>
</div>
<div className="grid place-items-center gap-x-8 gap-y-12 sm:grid-cols-2 md:gap-y-16 lg:grid-cols-[1fr_1.5fr_1fr] lg:gap-x-12">
<FeatureSection sections={leftSections} />
<div className="relative order-last w-full sm:col-span-2 lg:order-none lg:col-span-1">
<img
src={image.src}
alt={image.alt}
className="h-auto w-full rounded-image object-cover"
/>
</div>
<FeatureSection sections={rightSections} />
</div>
<div className="mt-12 flex flex-wrap items-center justify-center gap-4 md:mt-18 lg:mt-20">
{buttons.map((button, index) => (
<Button key={index} {...button}>
{button.title}
</Button>
))}
</div>
</div>
</section>
);
};
const FeatureSection = ({ sections }: { sections: SectionProps[] }) => (
<div className="grid w-full grid-cols-1 gap-x-20 gap-y-12 md:gap-y-16">
{sections.map((section, index) => (
<div key={index} className="flex flex-col items-center text-center">
<div className="mb-5 md:mb-6">
<RelumeIcon className="size-12 text-scheme-text" />
</div>
<h3 className="mb-3 text-h5 font-bold md:mb-4">{section.heading}</h3>
<p>{section.description}</p>
</div>
))}
</div>
);
export const Layout254Defaults: Props = {
tagline: "Tagline",
heading: "Medium length section 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.",
leftSections: [
{
heading: "Short heading goes here",
description:
"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique.",
},
{
heading: "Short heading goes here",
description:
"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique.",
},
],
rightSections: [
{
heading: "Short heading goes here",
description:
"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique.",
},
{
heading: "Short heading goes here",
description:
"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique.",
},
],
buttons: [
{ title: "Button", variant: "secondary" },
{
title: "Button",
variant: "link",
size: "link",
iconRight: <ChevronRight className="text-scheme-text" />,
},
],
image: {
src: "https://d22po4pjz3o32e.cloudfront.net/placeholder-image.svg",
alt: "Relume placeholder image",
},
};npm i @radix-ui/react-slot class-variance-authority@0.7.1 clsx@^2.1.1 relume-icons@1.3.0 tailwind-merge@^2.2.2


