Blocks

Layout 608

standard
1 ColumnText Align CenterText Align LeftButtonsText OnlyBenefits Section
Layout 608

Code

relume-layout608.tsx
import { Button, type ButtonProps } from "@/components/ui/button";
import { ChevronRight } from "relume-icons";

type ListItem = {
  number: string;
  heading: string;
  description: string;
};

type Props = {
  tagline: string;
  heading: string;
  description: string;
  listItems: ListItem[];
  buttons: ButtonProps[];
};

export type Layout608Props = React.ComponentPropsWithoutRef<"section"> & Partial<Props>;

export const Layout608 = (props: Layout608Props) => {
  const { tagline, heading, description, listItems, buttons } = {
    ...props,
    ...Layout608Defaults,
  };
  return (
    <section className="px-[5%] py-16 md:py-24 lg:py-28">
      <div className="container">
        <div className="mx-auto mb-12 max-w-lg text-center md:mb-18 lg:mb-20">
          <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 className="mx-auto w-full max-w-lg">
          {listItems.map((item, index) => (
            <div
              key={index}
              className="flex w-full gap-6 border-t border-scheme-border py-6 md:gap-8 md:py-8 lg:py-12"
            >
              <div className="inline-block flex-none self-start">
                <h3 className="text-h2 font-bold">{item.number}</h3>
              </div>
              <div>
                <div className="mb-3 md:mb-4">
                  <h3 className="text-h4 font-bold">{item.heading}</h3>
                </div>
                <p>{item.description}</p>
              </div>
            </div>
          ))}
          <div className="mt-8 flex flex-wrap items-center justify-center gap-4 md:mt-10 lg:mt-12">
            {buttons.map((button, index) => (
              <Button key={index} {...button}>
                {button.title}
              </Button>
            ))}
          </div>
        </div>
      </div>
    </section>
  );
};

export const Layout608Defaults: 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.",
  listItems: [
    {
      number: "01",
      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.",
    },
    {
      number: "02",
      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.",
    },
    {
      number: "03",
      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.",
    },
  ],
  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 class-variance-authority@0.7.1 clsx@^2.1.1 relume-icons@1.3.0 tailwind-merge@^2.2.2