essentials
Columns
Labels, colours, icons, descriptions, workflow transitions, and locked cards.
Basic example
<?php
use Asmit\AdvancedKanban\Columns\KanbanColumn;
public function kanban(Kanban $kanban): Kanban
{
return $kanban
->model(Task::class)
->statusField('status')
->columns([
KanbanColumn::make('todo')
->label('To Do')
->color('gray'),
KanbanColumn::make('in_progress')
->label('In Progress')
->color('blue'),
KanbanColumn::make('completed')
->label('Completed')
->color('green'),
]);
}
Customisation
Colour
KanbanColumn::make('todo')
->label('To Do')
->color('green'); // Supports hex, rgb, hsl, and Tailwind colors
Icon
KanbanColumn::make('todo')
->label('To Do')
->icon(Heroicon::OutlinedRectangleStack)
->iconColor(Color::Red[500])
->iconSize(IconSize::Medium);
Extra heading classes
KanbanColumn::make('todo')
->label('To Do')
->extraColumnHeadingClass('text-lg font-bold');
Description
KanbanColumn::make('todo')
->label('To Do')
->description('Tasks that need to be started')
->color('gray');
Workflow transitions
Say which columns a card may move to. The board enforces it on drop, so a card that breaks the rule snaps back.
use Asmit\AdvancedKanban\Columns\KanbanColumn;
public function kanban(Kanban $kanban): Kanban
{
return $kanban
->model(Task::class)
->statusField('status')
->columns([
KanbanColumn::make('todo')
->label('To Do')
->allowedTransitions(['in_progress']), // Can only move to 'In Progress'
KanbanColumn::make('in_progress')
->label('In Progress')
->allowedTransitions(['todo', 'review']), // Back to 'To Do' or forward to 'Review'
KanbanColumn::make('review')
->label('Review')
->allowedTransitions(['in_progress', 'completed']),
KanbanColumn::make('completed')
->label('Completed')
->allowedTransitions([]), // Nothing leaves 'Completed'
]);
}
Locked cards
Lock individual cards so they can't be dragged — not to another column, and not to another position within their own.
use Asmit\AdvancedKanban\Columns\KanbanColumn;
public function kanban(Kanban $kanban): Kanban
{
return $kanban
->model(Task::class)
->statusField('status')
->columns([
KanbanColumn::make('todo')
->label('To Do')
->lockCardUsing(fn($record) => $record->id === 1), // Lock one record
KanbanColumn::make('completed')
->label('Completed')
->lockCardUsing(fn($record) => true), // Lock every card in the column
]);
}
Lock appearance
KanbanColumn::make('completed')
->label('Completed')
->lockCardUsing(fn($record) => true)
->lockedIcon('heroicon-o-lock-closed')
->lockLabel('Completed - Cannot be moved');
Per-column queries
Scope, sort, or eager load the records of a single column:
KanbanColumn::make('todo')
->modifyRecordQueryUsing(fn ($query) => $query->with('assignee')->where('is_archived', false));