All pages

essentials

Columns

Labels, colours, icons, descriptions, workflow transitions, and locked cards.

Basic example

php
<?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

php
KanbanColumn::make('todo')
    ->label('To Do')
    ->color('green'); // Supports hex, rgb, hsl, and Tailwind colors

Icon

php
KanbanColumn::make('todo')
    ->label('To Do')
    ->icon(Heroicon::OutlinedRectangleStack)
    ->iconColor(Color::Red[500])
    ->iconSize(IconSize::Medium);

Extra heading classes

php
KanbanColumn::make('todo')
    ->label('To Do')
    ->extraColumnHeadingClass('text-lg font-bold');

Description

php
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.

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')
                ->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.

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')
                ->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

php
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:

php
KanbanColumn::make('todo')
    ->modifyRecordQueryUsing(fn ($query) => $query->with('assignee')->where('is_archived', false));