SocialProofSection.tsx30 lines · main
| 1 | import type { GoSocialProofSection } from '../schemas' |
| 2 | |
| 3 | export default function SocialProofSection({ section }: { section: GoSocialProofSection }) { |
| 4 | return ( |
| 5 | <div className="text-center"> |
| 6 | {section.heading && <h2 className="text-foreground text-2xl mb-8">{section.heading}</h2>} |
| 7 | {section.stats && section.stats.length > 0 && ( |
| 8 | <div className="flex items-center justify-center gap-12 mb-8"> |
| 9 | {section.stats.map((stat) => ( |
| 10 | <div key={stat.label}> |
| 11 | <p className="text-foreground text-3xl font-semibold">{stat.value}</p> |
| 12 | <p className="text-foreground-lighter text-sm mt-1">{stat.label}</p> |
| 13 | </div> |
| 14 | ))} |
| 15 | </div> |
| 16 | )} |
| 17 | {section.testimonial && ( |
| 18 | <blockquote className="max-w-xl mx-auto"> |
| 19 | <p className="text-foreground-light text-lg italic"> |
| 20 | “{section.testimonial.quote}” |
| 21 | </p> |
| 22 | <footer className="mt-4 text-foreground-lighter text-sm"> |
| 23 | {section.testimonial.author} |
| 24 | {section.testimonial.role && <span> · {section.testimonial.role}</span>} |
| 25 | </footer> |
| 26 | </blockquote> |
| 27 | )} |
| 28 | </div> |
| 29 | ) |
| 30 | } |