Skip to content

List page layout ​

Header, filters, table, footer. The shell every list page uses.

Open in demo
Open in demo

Usage ​

Four body slots in a fixed order: filters, table, footer, with the header built from breadcrumb, description and actions, which are forwarded to the page header.

The header slots and the body slots cannot collide, which is what lets one layout own both halves.

The filters block is spaced internally, because most pages put a stats grid above the filter control, and it sits closer to the table than the standard gap. That is deliberate: a right-aligned Filters button has to read as this table's control rather than as something floating between two sections.

API ​

Source: src/shared/components/common/pages/ListPageLayout.vue

Props ​

PropTypeDefaultDescription
titlestring—Forwarded to the page header.

Emits ​

None.

Slots ​

SlotDescription
breadcrumbForwarded to the page header.
descriptionForwarded to the page header.
actionsForwarded to the page header.
filtersStats and the filter control, above the table.
tableThe table.
footerUnder the table.

Every slot is optional, and an empty one renders nothing rather than an empty block.

Accessibility ​

  • The layout adds no landmarks of its own, so the page's structure is whatever you put in the slots, with the header's <h1> at the top.
  • The gap between blocks is spacing, not a separator, so a screen reader is not read a run of empty elements.