Pieces: the Gallery, as a section like Collections

The Gallery is a flat list of peças, each with a title, a gallery of mixed
media, and the specs from the client's sitemap — measurement, raw material,
colours, and NOTAS: production time and shipping conditions.

That is a collection one level flatter, so the panel is shared rather than
copied. SubjectPanel and SubjectFields take a section config (subjects.ts);
CollectionsPanel and PiecesPanel are one line each.

The five template blocks are renamed collection-* to subject-*. They never read
anything collection-specific, and copying them per section would have meant
twenty kinds by the time Drops and Collabs land.

Called Pieces in the nav, not Gallery — there is already a Galleries section
meaning a named set of media, and two rows called Gallery and Galleries is a
question somebody has to answer every time they look at it.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-09-04 17:44:32 +01:00
co-authored by Claude Opus 5
parent 179507fb7b
commit 5e5c06e76e
10 changed files with 498 additions and 375 deletions
+13 -11
View File
@@ -23,11 +23,12 @@ const LABELS: Record<string, string> = {
'contact-form': 'Contact form',
partners: 'Partners',
collections: 'Collections',
'collection-cover': 'Lead photograph',
'collection-title': 'Name',
'collection-description': 'Description',
'collection-specs': 'Specs',
'collection-gallery': 'Photographs',
pieces: 'Pieces',
'subject-cover': 'Lead photograph',
'subject-title': 'Name',
'subject-description': 'Description',
'subject-specs': 'Specs',
'subject-gallery': 'Photographs',
};
/*
@@ -40,12 +41,13 @@ const PLACES_ONLY: string[] = [
'contact-form',
'partners',
'collections',
// The subject blocks hold nothing either: what they draw is the collection the URL names.
'collection-cover',
'collection-title',
'collection-description',
'collection-specs',
'collection-gallery',
'pieces',
// The subject blocks hold nothing either: what they draw is the row the URL names.
'subject-cover',
'subject-title',
'subject-description',
'subject-specs',
'subject-gallery',
];
import { AddSectionDialog, type SectionLayout } from './AddSectionDialog';
import { FreeTextEditor } from './FreeTextEditor';