From 2aff4a130f466476b0cd61d6d365ad1dca5d1a26 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Padez?= Date: Sat, 5 Sep 2026 15:08:06 +0100 Subject: [PATCH] the lead photograph gets Shape MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The same framing a media block has had since it existed, so a template wanting a letterbox lead can ask for one. It was in PLACES_ONLY — the list of blocks that hold nothing — which was true until it held a ratio. Shape and only Shape. Not the media block's other controls: there is no file to choose, because the picture is the carousel's first item, and no crop to set, because the crop belongs to the carousel item. Two crops for one placement is two answers able to disagree. Co-Authored-By: Claude Opus 5 (1M context) --- web/sections/PageBuilderPanel.tsx | 40 +++++++++++++++++++++++++++++-- 1 file changed, 38 insertions(+), 2 deletions(-) diff --git a/web/sections/PageBuilderPanel.tsx b/web/sections/PageBuilderPanel.tsx index 0328599..57b2178 100644 --- a/web/sections/PageBuilderPanel.tsx +++ b/web/sections/PageBuilderPanel.tsx @@ -44,8 +44,12 @@ const PLACES_ONLY: string[] = [ 'collections', 'pieces', 'collabs', - // The subject blocks hold nothing either: what they draw is the row the URL names. - 'subject-cover', + /* + The subject blocks hold nothing either: what they draw is the row the URL names. + + `subject-cover` is the exception and stays OUT of this list — it holds a `ratio`, which is a real + stored value and needs a settings panel to set it. Everything else here genuinely holds nothing. + */ 'subject-title', 'subject-description', 'subject-specs', @@ -820,6 +824,38 @@ export const PageBuilderPanel = () => { )} + {/* + The lead photograph gets Shape, and only Shape. + + The same framing the media block has had since it existed — a template wanting a letterbox + lead had no way to ask for one. Not the rest of that block's controls: there is no file to + choose, because the picture is the carousel's first item, and no crop to set, because the + crop belongs to the carousel item and two crops for one placement is two answers able to + disagree. + */} + {block.kind === 'subject-cover' && ( +
+ + +
+ )} + {(block.kind === 'media' || block.kind === 'video') && (
{/*