page-hero.tsx 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. import type { ReactNode } from "react";
  2. import { cn } from "@/lib/utils";
  3. interface PageHeroProps {
  4. eyebrow?: string;
  5. title: string;
  6. description: string;
  7. children?: ReactNode;
  8. className?: string;
  9. }
  10. export function PageHero({
  11. eyebrow,
  12. title,
  13. description,
  14. children,
  15. className,
  16. }: PageHeroProps) {
  17. return (
  18. <section
  19. className={cn(
  20. "bg-[radial-gradient(ellipse_at_top_left,rgb(149_32_130_/_0.12),transparent_55%),radial-gradient(ellipse_at_bottom_right,rgb(0_157_99_/_0.08),transparent_50%)]",
  21. className,
  22. )}
  23. >
  24. <div className="mx-auto max-w-6xl px-5 py-16 lg:px-8 lg:py-24">
  25. {eyebrow ? (
  26. <p className="mb-4 text-xs font-medium uppercase tracking-[0.18em] text-accent-hover">
  27. {eyebrow}
  28. </p>
  29. ) : null}
  30. <h1 className="font-display max-w-3xl text-4xl font-semibold tracking-tight text-balance sm:text-5xl lg:text-[3.25rem] lg:leading-[1.1]">
  31. {title}
  32. </h1>
  33. <p className="prose-measure mt-5 text-base leading-relaxed text-muted-foreground sm:text-lg">
  34. {description}
  35. </p>
  36. {children ? <div className="mt-8">{children}</div> : null}
  37. </div>
  38. </section>
  39. );
  40. }