QuoteSection.tsx32 lines · main
| 1 | import type { GoQuoteSection } from '../schemas' |
| 2 | |
| 3 | export default function QuoteSection({ section }: { section: GoQuoteSection }) { |
| 4 | return ( |
| 5 | <div className="max-w-7xl mx-auto px-8"> |
| 6 | <figure className="max-w-3xl mx-auto text-center"> |
| 7 | <blockquote> |
| 8 | <p className="text-foreground text-xl sm:text-2xl font-medium leading-relaxed"> |
| 9 | “{section.quote}” |
| 10 | </p> |
| 11 | </blockquote> |
| 12 | <figcaption className="mt-6 flex items-center justify-center gap-3"> |
| 13 | {section.avatar && ( |
| 14 | <img |
| 15 | src={section.avatar.src} |
| 16 | alt={section.avatar.alt} |
| 17 | width={32} |
| 18 | height={32} |
| 19 | className="rounded-full" |
| 20 | /> |
| 21 | )} |
| 22 | <div className="text-sm"> |
| 23 | <span className="text-foreground font-medium">{section.author}</span> |
| 24 | {section.role && ( |
| 25 | <span className="text-foreground-lighter"> · {section.role}</span> |
| 26 | )} |
| 27 | </div> |
| 28 | </figcaption> |
| 29 | </figure> |
| 30 | </div> |
| 31 | ) |
| 32 | } |