Skip to content
THE COMPONENT LIBRARY
Skip to content

Component reference

Kanban

Move work through a sprint board with local state.

Preview

Live preview

Changes apply to this preview only.

No card has moved yet.

Select a card to open its details.

Drag a card to move it, or focus a card and press Control or Alt with the arrow keys. The move menu offers the same actions.

Backlog2 cards

  1. low
    Design systemIcons
    Merge the two navigation families and remove the unused glyphs.
  2. medium
    Docs
    Explain the token rename and the codemod for legacy themes.

To do3 of 3 cards

  1. urgent
    AccessibilityRelease blocker
    Two amber badges still fail AA on the glass preset.
  2. high
    Components
    Auto-resize the textarea and keep Shift + Enter as a newline.
  3. medium
    ComponentsA11y
    Control and Alt with the arrow keys, plus the move menu.

In progress1 of 2 cards

  1. high
    Playground
    Check light and dark, then the new board and chat pages.

Done2 cards

  1. medium
    Tokens
  2. low
    Release

Width adapts to the available space

More examples

Different configurations and compositions using the real Pimolu API. Each preview runs independently and follows the site appearance.

Inspect and move a task

Move a card by keyboard or menu, then activate it to report the selected task.

Open preview

Leave a full column

A full column refuses incoming cards, but its existing cards stay enabled. Focus a card and use Control/Alt with an arrow to move it out.

Open preview

Limits and empty columns

Triage is full at two cards, so it refuses new drops and disables that destination in the move menu. Resolved is empty and still accepts a drop. This board is uncontrolled through defaultColumns.

Open preview

Usage

Keep column/task ids stable and persist moves in your own data layer.

API reference

Generated from the public TypeScript declarations. Native HTML attributes are inherited where the component extends them; this reference includes Pimolu props and selected common native attributes.

PimoluKanbanAssignee

Type source
PimoluKanbanAssignee public API
NameTypeDefaultDescription
idRequiredstring—Public Pimolu prop; see the source declaration for details.
nameRequiredstring—Public Pimolu prop; see the source declaration for details.
avatarstring | undefined—Public Pimolu prop; see the source declaration for details.
idRequired

string

No default extracted.

Public Pimolu prop; see the source declaration for details.

nameRequired

string

No default extracted.

Public Pimolu prop; see the source declaration for details.

avatar

string | undefined

No default extracted.

Public Pimolu prop; see the source declaration for details.

PimoluKanbanCard

Type source
PimoluKanbanCard public API
NameTypeDefaultDescription
idRequiredstring—Stable card id, used by moves and callbacks.
titleRequiredstring—Visible title.
descriptionReactNode—Optional supporting text.
labelsreadonly PimoluKanbanLabel[] | undefined—Category labels.
assigneePimoluKanbanAssignee | undefined—Card owner.
priorityPimoluKanbanPriority | undefined—Urgency shown as a Badge.
idRequired

string

No default extracted.

Stable card id, used by moves and callbacks.

titleRequired

string

No default extracted.

Visible title.

description

ReactNode

No default extracted.

Optional supporting text.

labels

readonly PimoluKanbanLabel[] | undefined

No default extracted.

Category labels.

assignee

PimoluKanbanAssignee | undefined

No default extracted.

Card owner.

priority

PimoluKanbanPriority | undefined

No default extracted.

Urgency shown as a Badge.

PimoluKanbanColumn

Type source
PimoluKanbanColumn public API
NameTypeDefaultDescription
idRequiredstring—Stable column id.
titleRequiredstring—Visible heading.
limitnumber | undefined—Maximum number of cards accepted by the column.
cardsRequiredreadonly PimoluKanbanCard[]—Ordered cards. Never mutated by the component.
idRequired

string

No default extracted.

Stable column id.

titleRequired

string

No default extracted.

Visible heading.

limit

number | undefined

No default extracted.

Maximum number of cards accepted by the column.

cardsRequired

readonly PimoluKanbanCard[]

No default extracted.

Ordered cards. Never mutated by the component.

PimoluKanbanLabels

Type source
PimoluKanbanLabels public API
NameTypeDefaultDescription
boardRequiredstring—Accessible name of the board region.
instructionsRequiredstring—Keyboard instructions exposed through aria-describedby.
addCardRequiredstring—Visible text of the add-card button.
addCardToRequired(columnTitle: string) => string—Accessible name of the add-card button in a given column.
emptyColumnRequiredstring—Shown inside a column without cards.
cardRequired(cardTitle: string, columnTitle: string) => string—Accessible name of a card.
countRequired(count: number, limit?: number) => string—Visible card counter, for example "3 of 5 cards".
fullRequiredstring—Badge shown when a column reached its limit.
moveRequired(cardTitle: string) => string—Accessible name of the move menu trigger.
moveUpRequiredstring—Move menu entry.
moveDownRequiredstring—Move menu entry.
moveToRequired(columnTitle: string) => string—Move menu entry pointing at another column.
movedRequired(cardTitle: string, columnTitle: string, position: number) => string—Live announcement after a successful move.
boardRequired

string

No default extracted.

Accessible name of the board region.

instructionsRequired

string

No default extracted.

Keyboard instructions exposed through aria-describedby.

addCardRequired

string

No default extracted.

Visible text of the add-card button.

addCardToRequired

(columnTitle: string) => string

No default extracted.

Accessible name of the add-card button in a given column.

emptyColumnRequired

string

No default extracted.

Shown inside a column without cards.

cardRequired

(cardTitle: string, columnTitle: string) => string

No default extracted.

Accessible name of a card.

countRequired

(count: number, limit?: number) => string

No default extracted.

Visible card counter, for example "3 of 5 cards".

fullRequired

string

No default extracted.

Badge shown when a column reached its limit.

moveRequired

(cardTitle: string) => string

No default extracted.

Accessible name of the move menu trigger.

moveUpRequired

string

No default extracted.

Move menu entry.

moveDownRequired

string

No default extracted.

Move menu entry.

moveToRequired

(columnTitle: string) => string

No default extracted.

Move menu entry pointing at another column.

movedRequired

(cardTitle: string, columnTitle: string, position: number) => string

No default extracted.

Live announcement after a successful move.

PimoluKanbanProps

Type source
PimoluKanbanProps public API
NameTypeDefaultDescription
columnsreadonly PimoluKanbanColumn[] | undefined—Controlled columns. When provided, the component renders this snapshot verbatim; update it from `onMove` or `onColumnsChange`.
defaultColumnsreadonly PimoluKanbanColumn[] | undefined—Initial columns when the board is uncontrolled.
onColumnsChange((columns: PimoluKanbanColumn[]) => void) | undefined—Called with the next columns after any valid move.
onMove((cardId: string, fromColumnId: string, toColumnId: string, index: number) => void) | undefined—Called after a valid drag, drop, keyboard or menu move. `index` is the zero-based position of the card in the destination column, once the move is applied.
onCardClick((card: PimoluKanbanCard, columnId: string) => void) | undefined—Called when a card body/title is activated.
onAddCard((columnId: string) => void) | undefined—Adds an "Add card" button to every column when provided.
labelsPartial<PimoluKanbanLabels> | undefined—Overrides the built-in accessible labels.
onChangeChangeEventHandler<HTMLDivElement, Element> | undefined—Standard React/HTML attribute.
defaultValuestring | number | readonly string[] | undefined—Standard React/HTML attribute.
classNamestring | undefined—Standard React/HTML attribute.
styleCSSProperties | undefined—Standard React/HTML attribute.
aria-labelstring | undefined—Defines a string value that labels the current element.
onClickMouseEventHandler<HTMLDivElement> | undefined—Standard React/HTML attribute.
columns

readonly PimoluKanbanColumn[] | undefined

No default extracted.

Controlled columns. When provided, the component renders this snapshot verbatim; update it from `onMove` or `onColumnsChange`.

defaultColumns

readonly PimoluKanbanColumn[] | undefined

No default extracted.

Initial columns when the board is uncontrolled.

onColumnsChange

((columns: PimoluKanbanColumn[]) => void) | undefined

No default extracted.

Called with the next columns after any valid move.

onMove

((cardId: string, fromColumnId: string, toColumnId: string, index: number) => void) | undefined

No default extracted.

Called after a valid drag, drop, keyboard or menu move. `index` is the zero-based position of the card in the destination column, once the move is applied.

onCardClick

((card: PimoluKanbanCard, columnId: string) => void) | undefined

No default extracted.

Called when a card body/title is activated.

onAddCard

((columnId: string) => void) | undefined

No default extracted.

Adds an "Add card" button to every column when provided.

labels

Partial<PimoluKanbanLabels> | undefined

No default extracted.

Overrides the built-in accessible labels.

onChange

ChangeEventHandler<HTMLDivElement, Element> | undefined

No default extracted.

Standard React/HTML attribute.

defaultValue

string | number | readonly string[] | undefined

No default extracted.

Standard React/HTML attribute.

className

string | undefined

No default extracted.

Standard React/HTML attribute.

style

CSSProperties | undefined

No default extracted.

Standard React/HTML attribute.

aria-label

string | undefined

No default extracted.

Defines a string value that labels the current element.

onClick

MouseEventHandler<HTMLDivElement> | undefined

No default extracted.

Standard React/HTML attribute.

Accessibility

  • A full column blocks incoming moves and additions. Existing cards remain enabled so users can move them out.
  • Provide a keyboard move path and announce the resulting destination; do not require drag and drop.
Read the accessibility guide →