Livewire Data Table
A server-driven table for Livewire 3: wire:click column sorting with aria-sort, a debounced live search, a per-page selector, server pagination, optional row selection, and an empty state.
Preview
| Role | ||
|---|---|---|
| Ada Lovelace | [email protected] | Owner |
| Alan Turing | [email protected] | Admin |
| Grace Hopper | [email protected] | Member |
Controls
Device view renders in an isolated frame so real responsive breakpoints apply. Switch to Full for overflowing popovers.
Installation
php artisan ui:add livewire-data-table
Registry contract
Install confidence
php artisan ui:add livewire-data-table
writes only the generated targets below. The CLI validates each file hash before writing and
prompts before replacing local changes unless --force is used.
- Version
- 1.0.0
- License
- open
- Stability
- stable
- Contract
- v2
- Foundation
- ≥ 1.0.0
| Type | Generated target |
|---|---|
| blade | resources/views/components/ui/livewire-data-table/livewire-data-table.blade.php |
Registry dependencies
Package dependencies
composer: jml/brok:^1.0
Guidance
Livewire framework adapterAdd server-driven behavior to an existing interaction pattern.
Use when
- Use this Livewire variant when the same core pattern needs server-driven interactivity. Apply the underlying base component’s usability rules; the framework integration does not change when the pattern is appropriate.
Avoid when
- Apply the data-table guidance and preserve state, focus, and meaningful loading feedback across server updates.
- Task length
- short
- Interaction cost
- medium
- Interruptiveness
- none
- Input precision
- none
- Mobile / touch risk
- medium
- Accessibility risk
- high
- Needs background context
- Yes
- Comparison needed
- No
Preferred alternatives
- Base component without server round trips
Anti-patterns
- Treating framework integration as a UX rationale
API
manifest knowledge + registry-derived coverageProps
| Prop | Type / values | Default | Description |
|---|---|---|---|
| columns | array | [] | Declared by @props in the registry Blade source. |
| rows | array | [] | Declared by @props in the registry Blade source. |
| searchModel | string | search | Declared by @props in the registry Blade source. |
| sortField | mixed|null | null | Declared by @props in the registry Blade source. |
| sortDirection | string | asc | Declared by @props in the registry Blade source. |
| sortMethod | string | sortBy | Declared by @props in the registry Blade source. |
| perPageModel | string | perPage | Declared by @props in the registry Blade source. |
| perPageOptions | array | [10, 15, 25, 50, 100] | Declared by @props in the registry Blade source. |
| selectable | bool | false | Declared by @props in the registry Blade source. |
| selectedModel | string | selected | Declared by @props in the registry Blade source. |
| searchPlaceholder | string | Search… | Declared by @props in the registry Blade source. |
| emptyHeading | string | No results | Declared by @props in the registry Blade source. |
| emptyDescription | string | Try adjusting your search or filters. | Declared by @props in the registry Blade source. |
Slots
x-ui.livewire-data-table.livewire-data-table— Installed subcomponent from the registry item.
Data slots
livewire-data-table
Capabilities
Behavior
- Uses server-rendered Blade and semantic HTML.
- Declares registry capability flags: a11y, responsive, rtl, darkMode, localized, requires.
Usage
@php
$columns = [
['key' => 'name', 'label' => 'Name'],
['key' => 'email', 'label' => 'Email'],
['key' => 'role', 'label' => 'Role', 'sortable' => false],
];
$rows = [
['id' => 1, 'name' => 'Ada Lovelace', 'email' => 'ada@example.com', 'role' => 'Owner'],
['id' => 2, 'name' => 'Alan Turing', 'email' => 'alan@example.com', 'role' => 'Admin'],
['id' => 3, 'name' => 'Grace Hopper', 'email' => 'grace@example.com', 'role' => 'Member'],
];
@endphp
<div class="w-full">
<x-ui.livewire-data-table :columns="$columns" :rows="$rows" sort-field="name" sort-direction="asc" />
</div>
Accessibility & localization
data-slot
Keyboard focus-visible
Localized labels
- Accessibility target: wcag-2.2-aa-target.
- Uses semantic HTML and a stable
data-slotattribute for styling/scripting hooks. - Focus-visible rings use the
ringtoken so keyboard focus is always visible. - Disabled and invalid states are conveyed to assistive tech, not by color alone.
- Targets WCAG 2.2 AA; verify contrast in light, dark, admin and customer surfaces above.
- Labels go through
__()and the component uses logical properties (ms-*,text-start,start-*) so it mirrors correctly — flip the preview to RTL to confirm.
Source
The exact, editable file ui:add writes
into your app — copy it or own the whole thing. Previews
render this same code; there are no preview-only components.
Changelog
Current version: v1.0.0. See the site changelog for the full release history.