Blocks
Content is Puck data, in entries.content and templates.content: a tree of items
{ type, props: { id, attrs, children } }, rendered by src/render/c/.
Props are clean values: styles as CSS with design tokens (var(--color-*), var(--space-*),
var(--text-*)), layouts as { type: flow | constrained | row | stack | grid }.
Core blocks
Section titled “Core blocks”| Group | Blocks |
|---|---|
| Layout | section, columns / column, separator, spacer |
| Text | text (paragraph), heading, list / list-item, quote, buttons / button, html |
| Media | image, cover, hero, gallery, video-gallery, video, embed, media-text |
| Entry fields | entry-title, entry-excerpt, entry-date, entry-terms, entry-image, entry-field, entry-content (Page content) |
| Collections | collection, pagination, archive-title (and older collection-items, collection-empty, pagination-* children) |
| Events | event-date, event-details, event-schedule, event-calendar, events-calendar |
| Site | navigation, site-title, social-links, search-form, collection-filters, map |
| Forms | form |
| Structure | part, pattern, global |
A site adds its own through render.ts (Blocks and hooks). An unknown
type renders its children.
Notable blocks
Section titled “Notable blocks”hero: a full-bleed image with eyebrow, title, text and two buttons.gallery,video-gallery: image blocks, or embed and video blocks, shown as a grid, masonry columns or a slider (display). The slider is a scroll-snap row with buttons and autoplay (public/assets/js/gallery-slider.js). Media picked in the panel arrive asattrs.addand become child blocks (resolveGalleryinsrc/puck/config.tsx).entry-image:fieldpicks an image field instead of the featured image, andlinkFieldlinks it to a URL field (a logo linked to a member’s website).entry-content: where a template places the entry’s content.attrs.areanames a content area (Templates and types).
Classes and behaviour
Section titled “Classes and behaviour”Core blocks output c-* classes. A site’s classes in content are only styling hooks for its
theme.css. Behaviour never keys off content class names: the core uses block settings instead
(entry-image field, event-date for card dates, collection shuffle, query.upcoming,
columns, autoplay).
Formatting
Section titled “Formatting”Rendered output passes through texturize (smart quotes, dashes). Section and loop markup is followed
by autop, so the whitespace in those templates matters.