Table Primitive
Headless, unstyled table primitive with sorting, pagination, and selection capabilities.
Basic Table
Simple table with no sorting, pagination, or selection
| Name | Age | Department | |
|---|---|---|---|
| John Doe | john@example.com | 32 | Engineering |
| Jane Smith | jane@example.com | 28 | Design |
| Bob Johnson | bob@example.com | 45 | Sales |
| Alice Williams | alice@example.com | 35 | Engineering |
| Charlie Brown | charlie@example.com | 29 | Marketing |
| Diana Prince | diana@example.com | 31 | Design |
| Eve Davis | eve@example.com | 27 | Sales |
| Frank Miller | frank@example.com | 38 | Engineering |
Row Actions
Table with an actions dropdown menu for each row
| Name | Department | Actions | |
|---|---|---|---|
| John Doe | john@example.com | Engineering | |
| Jane Smith | jane@example.com | Design | |
| Bob Johnson | bob@example.com | Sales | |
| Alice Williams | alice@example.com | Engineering | |
| Charlie Brown | charlie@example.com | Marketing | |
| Diana Prince | diana@example.com | Design | |
| Eve Davis | eve@example.com | Sales | |
| Frank Miller | frank@example.com | Engineering |
Sortable Table
Click column headers to sort. Three-state cycle: None → Ascending → Descending → None
Name |
Email |
Age |
Department |
|---|---|---|---|
| John Doe | john@example.com | 32 | Engineering |
| Jane Smith | jane@example.com | 28 | Design |
| Bob Johnson | bob@example.com | 45 | Sales |
| Alice Williams | alice@example.com | 35 | Engineering |
| Charlie Brown | charlie@example.com | 29 | Marketing |
| Diana Prince | diana@example.com | 31 | Design |
| Eve Davis | eve@example.com | 27 | Sales |
| Frank Miller | frank@example.com | 38 | Engineering |
Current Sort State
Column: None
Direction: None
Paginated Table
Table with pagination controls and configurable page size
| Name | Age | Department | |
|---|---|---|---|
| Jimmy Taylor | jimmy.taylor@example.com | 22 | Engineering |
| John Doe | john.doe@example.com | 23 | Design |
| Jane Smith | jane.smith@example.com | 24 | Sales |
| Bob Johnson | bob.johnson@example.com | 25 | Marketing |
| Alice Williams | alice.williams@example.com | 26 | HR |
Rows per page
Selectable Table (Multi-Select)
Click rows or checkboxes to select. Click header checkbox to select/deselect all. Use arrow keys to navigate and Enter/Space to select.
| Name | Age | Department | Actions | ||
|---|---|---|---|---|---|
| John Doe | john@example.com | 32 | Engineering | ||
| Jane Smith | jane@example.com | 28 | Design | ||
| Bob Johnson | bob@example.com | 45 | Sales | ||
| Alice Williams | alice@example.com | 35 | Engineering | ||
| Charlie Brown | charlie@example.com | 29 | Marketing | ||
| Diana Prince | diana@example.com | 31 | Design | ||
| Eve Davis | eve@example.com | 27 | Sales | ||
| Frank Miller | frank@example.com | 38 | Engineering |
Selection State
Selected: 0 rows
All Features Combined
Filtering, sorting, pagination, and selection all working together
Name
|
Email
|
Age
|
Department
| |
|---|---|---|---|---|
| Jimmy Taylor | jimmy.taylor@example.com | 22 | Engineering | |
| John Doe | john.doe@example.com | 23 | Design | |
| Jane Smith | jane.smith@example.com | 24 | Sales | |
| Bob Johnson | bob.johnson@example.com | 25 | Marketing | |
| Alice Williams | alice.williams@example.com | 26 | HR |
Rows per page
Current State
Active Filters: 0
Sort Column: None
Sort Direction: None
Current Page: 1 / 100
Selected Rows: 0
Filtered Results: 500 / 500
Column Filtering
Click filter icons in headers to filter by column
Name
|
Email
|
Department
|
|---|---|---|
| Jimmy Taylor | jimmy.taylor@example.com | Engineering |
| John Doe | john.doe@example.com | Design |
| Jane Smith | jane.smith@example.com | Sales |
| Bob Johnson | bob.johnson@example.com | Marketing |
| Alice Williams | alice.williams@example.com | HR |
| Charlie Brown | charlie.brown@example.com | Finance |
| Diana Jones | diana.jones@example.com | Operations |
| Eve Garcia | eve.garcia@example.com | Support |
| Frank Miller | frank.miller@example.com | Engineering |
| Grace Davis | grace.davis@example.com | Design |
Rows per page
Filter State
Active Filters: 0
Results: 500 / 8
Global Search
Search across all columns simultaneously
| Name | Age | Department | |
|---|---|---|---|
| Jimmy Taylor | jimmy.taylor@example.com | 22 | Engineering |
| John Doe | john.doe@example.com | 23 | Design |
| Jane Smith | jane.smith@example.com | 24 | Sales |
| Bob Johnson | bob.johnson@example.com | 25 | Marketing |
| Alice Williams | alice.williams@example.com | 26 | HR |
| Charlie Brown | charlie.brown@example.com | 27 | Finance |
| Diana Jones | diana.jones@example.com | 28 | Operations |
| Eve Garcia | eve.garcia@example.com | 29 | Support |
| Frank Miller | frank.miller@example.com | 30 | Engineering |
| Grace Davis | grace.davis@example.com | 31 | Design |
Rows per page
Search Results
Query: None
Results: 500 / 8
Accessibility Features
Built-in accessibility features following WAI-ARIA design patterns.
ARIA Attributes
- ✓
role="grid"for screen readers - ✓
aria-sortindicates column sort direction - ✓
aria-selectedindicates row selection state - ✓
aria-rowcountfor total row count - ✓ Focusable rows with visible focus indicator
Keyboard Shortcuts
Navigate and interact with the table using keyboard.
API Reference
Component properties and parameters.
| Prop | Type | Default | Description |
|---|---|---|---|
| Data | IEnumerable<TData> | — | The data source for the table. |
| State | TableState<TData>? | — | Table state for controlled mode. Supports two-way binding with @bind-State. |
| SelectionMode | SelectionMode | None | Selection mode: None, Single, or Multiple. |
| EnableKeyboardNavigation | bool | true | Enables row keyboard navigation (Arrow keys, Enter/Space). |
| ManualPagination | bool | false | When true, table will not automatically set total item count. |
| OnSelectionChange | EventCallback<IReadOnlyCollection<TData>> | — | Callback invoked when selection changes. |
| OnSortChange | EventCallback<(string, SortDirection)> | — | Callback invoked when sorting changes. |
| TableRow.Item | TData? | — | The data item for a row. Required for selection behavior. |
| TableHeaderCell.ColumnId | string? | — | Column identifier used for sortable headers. |