affectUI › Screens › App screens

Kanban Board

Issues on a board by priority – drag cards between columns, switch to a list, filter and sort.

Part of affectUI Pro. Install: npx shadcn@latest add https://www.affectui.com/r/kanban.json · Import from @/components/ui/kanban

When to use

  • Issue, bug or task tracking where work moves through stages
  • Any list people sort by dragging into columns

When not to use

  • Hundreds of items per column – use a table with filters
  • Data people edit cell by cell – use the CRM screen

Usage

import { KanbanScreen } from "@/components/ui/kanban";

export default function Page() {
  return <KanbanScreen workspace="Acme" user={{ name: "Alex Morgan" }} onNavigate={(label) => router.push(routes[label])} />;
}

Props

NameTypeDefaultDescription
onNavigate(label: string) => voidCalled with the label of a sidebar item
workspacestring"Acme"Workspace name in the sidebar
user{ name: string; avatar?: string }{ name: "Alex Morgan" }Account at the bottom of the sidebar
classNamestringExtra class on the root
columns{ id; label; tone: "low" | "medium" | "high" | "done" }[]The columns, left to right – tone picks the priority mark
cards{ id; column; title; description?; status?: "review" | "attention" | "progress" | "fixed"; comments?; attachments? }[]The issues – `column` puts each one into a column; every card shows title, detail, status and counts

Keyboard

  • Tab: Move through the cards; Filter, Sort and the view switch are buttons
  • Enter: Open the focused card or row
  • ⌘ Enter: Send a comment in an open issue, or create the issue in the New issue window
  • Esc: Close the New issue window

Accessibility

  • Columns are labelled sections, cards are labelled and focusable
  • Board / List is a radio group; Filter and Sort are menus with checked items
  • Status and priority marks are decorative – the status is written next to them
  • An open issue edits its title and description in place; status, priority, assignee, labels and project are menus with checked items, and every change shows up in the activity

Responsive

  • Fills its container – give it the full viewport height in your app
  • The board scrolls sideways when the columns don't fit; on phones the bar wraps and list rows keep only the title and status
  • Dark mode built in: switches when an ancestor (usually <html>) has the class dark or data-theme="dark"; colors are CSS variables on .ui-as

Requirements

  • React 19
  • @hugeicons/react
  • @hugeicons/core-free-icons
  • App Shell (installed with it)