Skip to content
UI Brok

Loading…

No results

Browse catalog

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

Theme
Surface
Direction
Viewport

Device view renders in an isolated frame so real responsive breakpoints apply. Switch to Full for overflowing popovers.

Installation

terminal
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

table input select checkbox

Package dependencies

composer: jml/brok:^1.0

Guidance

Livewire framework adapter

Add 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 coverage

Props

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

wcag-2.2-aa-target responsive rtl darkMode localized livewire-3

Behavior

  • Uses server-rendered Blade and semantic HTML.
  • Declares registry capability flags: a11y, responsive, rtl, darkMode, localized, requires.

Usage

previews.components.livewire-data-table.default.blade.php Blade
@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

WCAG 2.2 AA RTL-ready data-slot Keyboard focus-visible Localized labels
  • Accessibility target: wcag-2.2-aa-target.
  • Uses semantic HTML and a stable data-slot attribute for styling/scripting hooks.
  • Focus-visible rings use the ring token 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.