Frontend support for Hero block's optional portrait image

This commit is contained in:
Marco
2026-08-26 20:50:25 +00:00
parent 7fc7ee2c3a
commit b0d76c891f
2 changed files with 29 additions and 9 deletions
+26 -7
View File
@@ -40,15 +40,33 @@ export function renderPageBlockSync(block: PageBlock): React.ReactNode {
// (/lebensuhr, /3x3-system, /ueber-mich) used for its own H1 before
// this block existed — see HeroBlock.ts's own comment on why the
// headline moved out of Pages.title and into here.
case "hero":
case "hero": {
const headline = (
<p
className={
block.image
? "font-semibold text-[clamp(2rem,1.393rem+1.5vw,2.75rem)] text-text-primary leading-[1.15]"
: "font-semibold text-[clamp(2.25rem,1.393rem+1.786vw,3rem)] text-text-primary leading-[1.15]"
}
style={{ fontFamily: "var(--font-playfair)" }}
>
{block.headline}
</p>
);
return (
<div key={block.id} className="flex flex-col gap-4 items-start">
<p
className="font-semibold text-[clamp(2.25rem,1.393rem+1.786vw,3rem)] text-text-primary leading-[1.15]"
style={{ fontFamily: "var(--font-playfair)" }}
>
{block.headline}
</p>
{/* Optional round portrait beside the headline — e.g. /ueber-mich's
"Hallo, ich bin Björn." */}
{block.image ? (
<div className="flex items-center gap-5">
<div className="relative size-20 shrink-0 rounded-full overflow-hidden">
<Image alt="" src={block.image} fill sizes="80px" className="object-cover" />
</div>
{headline}
</div>
) : (
headline
)}
{block.subline && <p className="text-body text-text-muted">{block.subline}</p>}
{block.ctaLabel && block.ctaHref && (
<Link
@@ -60,6 +78,7 @@ export function renderPageBlockSync(block: PageBlock): React.ReactNode {
)}
</div>
);
}
case "richTextSection":
return <RichText key={block.id} content={block.content} />;