Overview

How an entity page opens: the stage, with identity panelled in.

How an entity page opens: the Gallery stage with the entity's identity panelled into it. Overview and gallery are one block, not two (ADR 0028) — nothing could reorder or omit them independently, which is this system's test for whether two things are one section.

Three pages used to hold a copy of this apiece, and their chrome was byte-identical. They differed only in the foot, which is the whole of the branching here, in precedence order: authoredhighlights win when somebody wrote them, thenpriceLabel for a home, then stats for a development, which shows what it holds rather than what it costs.

stageTransitionName and panelTransitionName are absent here and that is deliberate. They are half of the listings → detail morph (ADR 0017) and mean nothing outside a real navigation — andtransition:name={undefined} would still claim a generated name, which two pages would then pair by accident.

A home — price, status and the New flag

Tone

A development — stats instead of a price

No floor plan either: a development is not one unit, so there is no single plan to append as the gallery's last frame.

Tone

Authored highlights win

When somebody has written highlights, they take the foot and the price steps aside. This is the top of the precedence order, not an addition to it.

Tone

Props

packages/primitives/src/Overview.astro
PropTypeRequired
kindLabelstringyes
titlestringyes
subtitlestringyes
accentstring
availability"available" | "reserved" | "let" | "coming-soon"
statusLabelstring
highlights

Foot, in precedence order.

string[]
priceLabelstring
stats{ label: string; value: string }[]
isNew

A home can carry a "new" flag beside its price.

boolean
newLabelstring
ctaLabelstringyes
ctaHrefstringyes
contactLabelstringyes
contactHrefstringyes
galleryGalleryImage[]yes
floorPlan

Optional floor plan, appended as the gallery's last slide — labelled on its thumbnail and shown contained (a cropped plan is useless). A development isn't one unit, so it has none.

GalleryImage
floorPlanLabelstring
galleryLabelstringyes
galleryPrevLabelstringyes
galleryNextLabelstringyes
galleryZoomLabelstringyes
galleryCloseLabelstringyes
stageTransitionName

View-transition names for the listings → detail morph (ADR 0017). Absent on pages that aren't a morph target — and absent has to mean NO name at all, not an unnamed opt-in: Astro's `transition:name` directive assigns a generated name whenever it is present, even with an undefined value, and a generated name is the same on every page rendering this component. Two detail pages would then pair their panels (and every gallery slide) as shared elements by accident — and named elements escape their clipping container mid-transition, so the carousel's off-screen slides would fly across the viewport. Hence the inline `view-transition-name` below.

string
panelTransitionNamestring
headingLevel1 | 2 | 3 | 4 | 5 | 6
GalleryImage — referenced by a prop above
FieldTypeRequired
srcstringyes
altstringyes
fullstring