Layout 506
cardText Align LeftText Align Center2 ColumnsTabsButtonsMultiple Images

Code
relume-layout506.tsx
import { ChevronRight, RelumeIcon } from "relume-icons";
import { Button, type ButtonProps } from "@/components/ui/button";
import { Card } from "@/components/ui/card";
import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs";
type Feature = {
heading: string;
description: string;
buttons: ButtonProps[];
};
type Tab = {
value: string;
trigger: string;
content: Feature;
};
type Props = {
tagline: string;
heading: string;
description: string;
tabs: Tab[];
defaultTabValue: string;
};
export type Layout506Props = React.ComponentPropsWithoutRef<"section"> & Partial<Props>;
export const Layout506 = (props: Layout506Props) => {
const { tagline, heading, description, tabs, defaultTabValue } = {
...Layout506Defaults,
...props,
};
return (
<section className="px-[5%] py-16 md:py-24 lg:py-28">
<div className="container">
<div className="mx-auto mb-12 w-full max-w-lg text-center md:mb-18 lg:mb-20">
<p className="mb-3 font-semibold md:mb-4">{tagline}</p>
<h1 className="mb-5 text-h2 font-bold md:mb-6">{heading}</h1>
<p className="text-medium">{description}</p>
</div>
<Card>
<Tabs
defaultValue={defaultTabValue}
orientation="vertical"
className="relative grid auto-cols-fr grid-cols-1 md:grid-cols-[1.5fr_1fr]"
>
{tabs.map((tab) => (
<TabsContent
key={tab.value}
value={tab.value}
className="data-[state=active]:animate-tabs"
>
<FeatureCard tab={tab} />
</TabsContent>
))}
<TabsList className="relative grid h-full auto-cols-fr grid-cols-1 border-t border-scheme-border md:border-t-0 md:border-l">
{tabs.map((tab, index) => (
<TabsTrigger
key={index}
value={tab.value}
className="items-start justify-start rounded-none border-0 border-b p-6 text-h5 font-bold last-of-type:border-0 data-[state=inactive]:border-scheme-border data-[state=inactive]:bg-scheme-background md:px-8"
>
{tab.trigger}
</TabsTrigger>
))}
</TabsList>
</Tabs>
</Card>
</div>
</section>
);
};
const FeatureCard = ({ tab }: { tab: Tab }) => {
return (
<div className="flex h-full flex-col justify-center p-6 md:p-8 lg:p-16">
<div className="mb-5 md:mb-6">
<RelumeIcon className="size-12 text-scheme-text" />
</div>
<h2 className="mb-5 text-h3 font-bold md:mb-6">{tab.content.heading}</h2>
<p>{tab.content.description}</p>
<div className="mt-6 flex flex-wrap items-center gap-4 md:mt-8">
{tab.content.buttons.map((button, index) => (
<Button key={index} {...button}>
{button.title}
</Button>
))}
</div>
</div>
);
};
export const Layout506Defaults: Props = {
tagline: "Tagline",
heading: "Short 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.",
defaultTabValue: "tab-1",
tabs: [
{
value: "tab-1",
trigger: "Tab one",
content: {
heading: "Medium length section 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" />,
},
],
},
},
{
value: "tab-2",
trigger: "Tab two",
content: {
heading: "Medium length section 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" />,
},
],
},
},
{
value: "tab-3",
trigger: "Tab three",
content: {
heading: "Medium length section 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" />,
},
],
},
},
{
value: "tab-4",
trigger: "Tab four",
content: {
heading: "Medium length section 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" />,
},
],
},
},
{
value: "tab-5",
trigger: "Tab five",
content: {
heading: "Medium length section 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" />,
},
],
},
},
{
value: "tab-6",
trigger: "Tab six",
content: {
heading: "Medium length section 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" />,
},
],
},
},
],
};npm i @radix-ui/react-dialog @radix-ui/react-slot @radix-ui/react-tabs class-variance-authority@0.7.1 clsx@^2.1.1 motion@^12.15.0 relume-icons@1.3.0 tailwind-merge@^2.2.2


