DATA TABLE: Full-featured data table with toolbar, sorting, selection, and pagination
COMPOSES: Table | Badge | Button | Form | Pagination | Input Group | Tag | Avatar | Dropdown

Higher-level pattern that wraps a .table with toolbar (search, filters, actions), bulk actions bar, and pagination footer. All inner content uses existing components.

Full Data Table

Complete example: Toolbar with search + filter pills + primary action, sortable + selectable table with mixed cell types, and pagination footer.

Name Status Year Group Interests Submitted Actions
SJ
Sarah Johnson
sarah.j@email.com
Active Year 7
Music Drama
15 Feb 2026
3 days ago
MC
Michael Chen
m.chen@email.com
Pending Year 7
Sport Science +2
14 Feb 2026
4 days ago
EW
Emma Williams
emma.w@email.com
Active Year 8
Art
13 Feb 2026
5 days ago
JB
James Brown
j.brown@email.com
Rejected Year 7
Music Sport Tech +1
12 Feb 2026
6 days ago
LD
Lily Davis
lily.d@email.com
Active Year 9
Languages
10 Feb 2026
8 days ago
<div class="tw-data-table"><div class="tw-data-table-toolbar">...</div><div class="tw-data-table-body"><table>...</table></div><div class="tw-data-table-footer">...</div></div>

Minimal Data Table

Simple variant: Search + basic table + pagination. No selection, no filters, no bulk actions.

Event Name Date Location Attendees
Spring Open Day 22 Mar 2026
Main Hall
156
Year 7 Information Evening 15 Apr 2026
Assembly Hall
89
Scholarship Assessment Day 3 May 2026
Exam Centre
42
<div class="tw-data-table">...toolbar (search only)...table...footer...</div>

Bulk Actions (Bar)

BULK BAR: .tw-data-table-bulk | .tw-data-table-bulk-head | .tw-data-table-bulk-count | .tw-data-table-bulk-clear | .tw-data-table-bulk-actions

White bar with a primary rail, shown when rows are selected. A head row carries the count and Clear selection; beneath it the action buttons wrap. Hide the whole bar with .tw:hidden on a wrapper when nothing is selected.

3 students selected
Student Status Year Group Submitted
SJ
Sarah Johnson
Active Year 7 15 Feb 2026
MC
Michael Chen
Pending Year 7 14 Feb 2026
EW
Emma Williams
Active Year 8 13 Feb 2026
JB
James Brown
Rejected Year 7 12 Feb 2026
<div class="tw-data-table-bulk"><div class="tw-data-table-bulk-head">count + clear</div><div class="tw-data-table-bulk-actions">...buttons...</div></div>

Bulk Actions — Many Actions

Every action stays on the surface. When a list has more bulk actions than a row can hold, the buttons wrap — they do not move into an overflow menu, collapse to icons, or scroll sideways. The count leads with its scope ("across 3 pages"), and .tw-data-table-bulk-clear sits at the far right of the head row, away from the count, so a stray click can't discard a large selection. Seventeen actions below, all visible, in two rows.

247 applications selected across 3 pages
<div class="tw-data-table-bulk"><div class="tw-data-table-bulk-head">count + clear</div><div class="tw-data-table-bulk-actions">…wrapping buttons…</div></div>

Bulk Actions (Inline)

INLINE BULK: .tw-data-table-bulk-inline | .tw-data-table-bulk-clear | .tw-data-table-bulk-divider

A compact bulk selection indicator that sits inline within the toolbar row. Use when the toolbar already has a title, tabs, or filters and a separate bar would be too heavy. The count and clear action sit alongside other items; bulk action buttons go in toolbar-end.

All Enquiries

2 selected
Student Family Year Group Source Status
Lily Hughes
daisy.hughes@email.com
Poppy Smith (Mother)
Siblings: Daisy Hughes
Year 7 Website New
Sophie Martin
olivia.m@email.com
Jack Martin (Father)
Siblings: Olivia Martin, James Martin
Reception Referral New
Olivia Taylor
o.taylor@email.com
Charlotte Taylor (Mother)
Year 5 Open Day New
<div class="tw-data-table-bulk tw-data-table-bulk-inline"><span class="tw-data-table-bulk-count">2 selected</span><button class="tw-data-table-bulk-clear">Clear</button></div>

Empty State

No results: Use .table-empty inside the data table when no records match the current filter or search.

Name Status Year Group Submitted

No results found

Try adjusting your search or filter criteria.

<td colspan="4" class="tw-table-empty">...</td>

Compact Data Table

Dense variant: Combine .table-sm with the data table pattern for high-density data views. Useful for dashboards and reporting screens.

Date Description Category Amount Status
13 Feb 2026 Application fee — Johnson
Admissions
£150.00 Paid
12 Feb 2026 Registration deposit — Chen
Admissions
£500.00 Pending
11 Feb 2026 Assessment fee — Williams
Assessment
£75.00 Paid
10 Feb 2026 Application fee — Brown
Admissions
£150.00 Overdue
9 Feb 2026 Bursary application — Davis
Financial Aid
£0.00 Review
8 Feb 2026 Application fee — Taylor
Admissions
£150.00 Paid
<table class="tw-table tw-table-sm tw-table-hover tw-table-striped">...</table>

Block Table

COMPOSES: Table + Counted Tag (Tag + Badge)
CELL CLASS: .tw-data-table-cell-block

For allocation grids where rows are subjects/courses and columns are blocks or time slots. Each cell contains a counted tag showing the group name and fill count.

Course Block A Block B Block C Block D
A Level Chemistry 12 Chem A 12/14 12 Chem B 16/17
A Level Mathematics 12 Maths B 7/18 12 Maths A 11/15
A Level English Literature 12 Eng Lit A 5/17 12 Eng Lit B 17/18 12 Eng Lit C 6/13
A Level Psychology 12 Psych A 11/12 12 Psych B 14/18
A Level Biology 12 Bio A 9/17
<td class="tw-data-table-cell-block"><span class="tw-tag tw-tag-outline-info tw-tag-neutral-text">12 Maths B <span class="tw-badge tw-badge-rounded tw-badge-info">7/18</span></span></td>

The Canonical List Toolbar

One order, every list screen. Production varies the order and contents of this row from screen to screen, so the same control lives somewhere different on each list. The rule: -toolbar-start holds everything that decides which records you see (saved view → Filters → active filter chips → search); -toolbar-end holds everything that acts on the list as shown (Columns → Export → Share). The primary create action is not here at all — it belongs in .tw-page-header-actions.

Saved views
Year 7 Submitted after 1 Mar
StudentStatusYear groupSubmitted
Amelia OkaforOffer accepted Year 714 Mar 2026
Josh WhitmoreOffer made Year 72 Mar 2026
-toolbar-start: saved view → Filters (count badge) → active filter tags + Clear all → search  |  -toolbar-end: Columns → Export → Share

Saved Views & Column Configuration

Two toolbar affordances: a saved-views selector at the start of the toolbar (the current view's name is the trigger; the menu lists views with a check on the active one, then "Save current view…") and a Columns control at the end (a multi-select dropdown driven by data-controller="table-columns" — unticking a column hides its header and cells; cells opt in with data-column keys). "Year group" starts unticked below — tick it to bring the column back.

Saved views
Student Status Year group Submitted
Amelia Okafor Offer accepted Year 7 14 Mar 2026
Josh Whitmore Offer made Year 7 2 Mar 2026
Priya Nair Awaiting response Year 12 27 Feb 2026
<div class="tw-data-table" data-controller="table-columns"> … <input type="checkbox" data-column="year" data-action="change->dropdown#check change->table-columns#toggle"> … <th data-column="year">