Kanban Card
CardsComposable kanban card with status indicator, title, description, detail rows, and tag pills. Pair with the kanban-board block for full drag-and-drop kanban boards.
Preview
Status Variants
Cards support neutral, info, warning, success, and destructive status indicators.
123 Main Street
$1,200,000 Refinance
456 Oak Avenue
$3,500,000 Acquisition
789 Pine Boulevard
$850,000 Bridge Loan
321 Elm Drive
$2,100,000 Construction
555 Cedar Lane
$4,750,000 Permanent
With Action Slot
Use KanbanCardAction for right-aligned actions like a lock icon or menu trigger.
View-only Deal
$2,000,000 Refinance
Minimal
All sub-components are optional. Use only what you need.
Simple Task
Board Integration
Combine with the kanban-board block for drag-and-drop. The board provides columns, drop zones, and a KanbanBoardDraggableCard wrapper. Try dragging cards between columns below.
123 Main Street
$1.2M Refinance
Acme CapitalMultifamilyNew York, NY456 Oak Avenue
$3.5M Acquisition
Skyline PartnersOfficeChicago, IL
789 Pine Blvd
$850K Bridge Loan
Harbor GroupRetailMiami, FL
321 Elm Drive
$2.1M Construction
IndustrialDallas, TX
555 Cedar Lane
$4.75M Permanent
Summit RealtyHotelSan Francisco, CA
import {
KanbanBoard,
KanbanBoardDroppableColumn,
KanbanBoardColumnHeader,
KanbanBoardColumnBody,
KanbanBoardDraggableCard,
} from "@/components/blocks/kanban-board"
<KanbanBoard>
<KanbanBoardDroppableColumn droppable={{ id: "todo" }}>
<KanbanBoardColumnHeader>To Do</KanbanBoardColumnHeader>
<KanbanBoardColumnBody>
<KanbanBoardDraggableCard draggable={{ id: "card-1" }}>
{(draggable) => (
<KanbanCard>
<KanbanCardHeader>
<KanbanCardStatus variant="neutral" />
<KanbanCardTitle>Task 1</KanbanCardTitle>
</KanbanCardHeader>
</KanbanCard>
)}
</KanbanBoardDraggableCard>
</KanbanBoardColumnBody>
</KanbanBoardDroppableColumn>
</KanbanBoard>Install
Install the card block. For drag-and-drop boards, also install the board primitives.
npx shadcn@latest add @airy/kanban-cardnpx shadcn@latest add @airy/kanban-boardUsage
Import the card sub-components:
import {
KanbanCard,
KanbanCardHeader,
KanbanCardStatus,
KanbanCardTitle,
KanbanCardAction,
KanbanCardDescription,
KanbanCardDetail,
KanbanCardTags,
KanbanCardTag,
} from "@/components/blocks/cards/kanban-card"Compose the card from its parts:
<KanbanCard>
<KanbanCardHeader>
<KanbanCardStatus variant="info" />
<KanbanCardTitle>123 Main Street</KanbanCardTitle>
</KanbanCardHeader>
<KanbanCardDescription>$1.2M Refinance</KanbanCardDescription>
<KanbanCardDetail icon={Store}>Acme Capital</KanbanCardDetail>
<KanbanCardTags>
<KanbanCardTag icon={Building2}>Multifamily</KanbanCardTag>
<KanbanCardTag icon={MapPin}>New York, NY</KanbanCardTag>
</KanbanCardTags>
</KanbanCard>