Basic Pagination
Compact Variant
Custom onEachSide
First Page
Pagination Component
A flexible pagination component that works with Laravel's LengthAwarePaginator. Supports both standard HTTP navigation and Livewire wire models.
Props
paginator- LengthAwarePaginator (required) - The paginated data from Laravelvariant- string - 'default' | 'compact' (default: 'default')wireModel- string|null - Livewire component property name for wire navigation (default: null)showInfo- bool - Show "Showing X to Y of Z results" (default: true)onEachSide- int - Number of pages to show on each side of current page (default: 2)
Variants
- default - Shows page numbers with ellipsis for large page counts
- compact - Shows "Page X of Y" format instead of individual page numbers
Livewire Support
When using with Livewire, pass the component property name to wireModel:
<x-ui.pagination :paginator="$users" wire-model="users" />
The component will automatically use wire:click for navigation instead of regular links.
Features
- • Automatic ellipsis for large page counts
- • First and last page shortcuts
- • Previous/Next navigation buttons
- • Results info display (customizable)
- • Livewire wire model support
- • Responsive design
- • Dark mode support
- • Accessible with proper ARIA labels
- • Disabled states for first/last pages
Common Use Cases
Standard HTTP Pagination:
// In Controller
$users = User::paginate(15);
// In Blade
<x-ui.pagination :paginator="$users" />
Livewire Pagination:
// In Livewire Component
public function render()
{
$users = User::paginate(15);
return view('livewire.users', compact('users'));
}
// In Blade
<x-ui.pagination :paginator="$users" wire-model="users" />
Compact Variant:
<x-ui.pagination :paginator="$items" variant="compact" />
Without Info:
<x-ui.pagination :paginator="$items" :show-info="false" />
Custom Page Range:
<x-ui.pagination :paginator="$items" :on-each-side="3" />
Controller Example
public function index()
{
$items = Item::query()
->when(request('search'), fn($q) => $q->where('name', 'like', '%'.request('search').'%'))
->orderBy('created_at', 'desc')
->paginate(15);
return view('items.index', compact('items'));
}