K

Table

Patterns & Recipes

On this page

User Table with Avatar

$table->columns([
StackedColumn::make('user')
->avatar('avatar_url')
->primary('name')
->secondary('email')
->circular()
->searchable()
->searchColumns(['name', 'email']),
 
BadgeColumn::make('role')
->colors(['primary' => 'admin', 'success' => 'editor', 'gray' => 'viewer']),
 
TextColumn::make('department.name')
->sortable()
->searchable(),
 
TextColumn::make('posts.count')
->label('Posts')
->sortable()
->alignCenter(),
 
TextColumn::make('last_login')
->since()
->sortable()
->textSize('sm')
->textColor('gray'),
 
BooleanColumn::make('is_active'),
]);

Financial Table

$table->columns([
TextColumn::make('number')
->searchable()
->fontFamily('mono'),
 
TextColumn::make('client.name')
->searchable()
->sortable(),
 
TextColumn::make('issued_at')
->date('d.m.Y')
->sortable(),
 
TextColumn::make('due_at')
->date('d.m.Y'),
 
TextColumn::make('total')
->money('CZK')
->sortable()
->alignRight()
->weight('bold')
->summarize('sum', 'Total'),
 
BadgeColumn::make('status')
->colors([
'draft' => 'gray',
'sent' => 'warning',
'paid' => 'success',
'overdue' => 'danger',
]),
 
PollColumn::make('payment_status')
->intervalSeconds(30)
->badge()
->colors(['success' => 'received', 'warning' => 'pending', 'gray' => 'none'])
->pollWhile(fn ($state) => $state === 'pending'),
]);

Task Board Table

$table->columns([
SelectColumn::make('status')
->options([
'todo' => '📋 To Do',
'in_progress' => '🔄 In Progress',
'review' => '👀 Review',
'done' => '✅ Done',
]),
 
TextColumn::make('title')
->searchable()
->weight('semibold')
->description(fn ($r) => Str::limit($r->body, 60))
->actionUrl(fn ($r) => route('tasks.show', $r)),
 
StackedColumn::make('assignee')
->avatar('assignee.avatar_url')
->primary('assignee.name')
->circular()
->avatarSize('sm'),
 
BadgeColumn::make('priority')
->colors(['danger' => 'high', 'warning' => 'medium', 'gray' => 'low'])
->icons(['arrow-up' => 'high', 'minus' => 'medium', 'arrow-down' => 'low']),
 
TextColumn::make('due_at')
->date('d.m.')
->textColor('gray')
->textSize('sm'),
]);