Listy

A list that scrolls, groups and virtualizes its rows, and leaves the content of every row to you.

Basic

Pass items, a rowKey that names a stable field like id, and an itemRender that returns the content of each row.

Rich rows

Return any layout from itemRender, like an avatar, a name over a team and a role tag, and the list adds the padding and separators.
Return a link from itemRender and set classNames.item to p-0 so the whole row, padding included, is the click target.

Virtual scrolling

Set virtual and a height to mount only the rows on screen, so a list of 5,000 scrolls as smoothly as a short one.

Grouping

Pass group a key to collect rows under headers without sorting them first, and a title that receives each group's rows for a count.

Sticky headers

Set sticky and a height on a grouped list to pin each header to the top until the next group pushes it out.

Scroll to a row

Call scrollTo on the list's ref with an index or a row key, and set align to bring that row to the top or the bottom.

Drag sorting

Sort rows with dnd-kit: the dragged row lifts, the others slide aside to show where it lands, and Space with the arrow keys sorts from the keyboard.

Load on scroll

Read the scroll position in onScroll to load the next page near the bottom, with a button for anyone who does not scroll.

In context

The component inside real screens, with the components it usually sits beside.

Inbox

An inbox with unread dots, attachment icons and category tags, and star and archive buttons that appear on hover or focus.

Activity feed

A team activity feed grouped by day under sticky headers, where each event says who did what and tags what it touched.

Bulk selection

A file list with checkboxes and bulk actions, where classNames and styles as functions highlight the list while any row is selected.

API Reference

Listy
Listy's props. Rows marked antuikit in the Version column are added by the kit.
Group
Group's props.