Page header
The furniture a screen opens with: breadcrumb trail, page title with supporting description, and a right-aligned action group over a grounding rule.
Installation
Blocks are copied source, not library calls — the generator writes this
exact template into app/views/blocks/
and from there it's yours to edit. The preview below renders the same
source the copy-in produces.
bin/rails g poetry:block page-header
Default
Atlas
Shipping schedules, owners, and release health for the Atlas program.
<header class="flex flex-col gap-4">
<%= poetry_breadcrumb do |crumb| %>
<% crumb.with_item("Home", href: "/") %>
<% crumb.with_item("Projects", href: "/projects") %>
<% crumb.with_item("Atlas") %>
<% end %>
<div class="flex flex-wrap items-end justify-between gap-4">
<div class="space-y-1">
<h1 class="text-2xl font-semibold tracking-tight">Atlas</h1>
<p class="text-sm text-muted-foreground">Shipping schedules, owners, and release health for the Atlas program.</p>
</div>
<div class="flex items-center gap-2">
<%= poetry_button(variant: :outline) do |button| %>
<% button.with_leading { poetry_icon(name: :download) } %>
Export
<% end %>
<%= poetry_button do |button| %>
<% button.with_leading { poetry_icon(name: :plus) } %>
New project
<% end %>
</div>
</div>
<%= poetry_separator %>
</header>
Styling
A block has no styling surface of its own — every element in the copied
template is a Poetry component carrying its usual
data-slot parts, and because you own
the source, utility classes can be edited directly in place. Per-part
contracts live on the composed components' pages: