Skip to content
Data & ChartsPro

List Group

A 400 px card of list rows with an optional header — sixteen ready patterns: basic, icon, avatar, brand, metric, selectable, toggle, sortable, expandable, grouped, ranking, comparison, tree, action, discussion and master–detail.

See alsoList ItemProList PanelPro

Usage

Settings

  • Name, photo and bio
  • Email, push and in-app alerts
  • Password and two-factor sign-in
  • Plan, invoices and payment method
  • Connected apps and API keys

Installation

List Group comes with WunderUI Core and Pro, in the package from your plan. See the plans.

Then import what you need:

tsx
import {
  ListGroup,
  ListGroupActions,
  ListGroupActionsProps,
  ListGroupDetails,
  ListGroupDetailsProps,
  ListGroupDiscussion,
  ListGroupDiscussionProps,
  ListGroupExpandable,
  ListGroupExpandableItem,
  ListGroupExpandableProps,
  ListGroupHeader,
  ListGroupHeaderProps,
  ListGroupMasterDetail,
  ListGroupMasterDetailItem,
  ListGroupMasterDetailProps,
  ListGroupProps,
  ListGroupSection,
  ListGroupSectionProps,
  ListGroupSelectable,
  ListGroupSelectableItem,
  ListGroupSelectableProps,
  ListGroupSortable,
  ListGroupSortableItem,
  ListGroupSortableProps,
  ListGroupToggle,
  ListGroupToggleItem,
  ListGroupToggleProps,
  ListGroupTree,
  ListGroupTreeProps,
} from "@wunderui/react"

Examples

Basic List

Title, description and a chevron. Each row is a button that selects; the divider runs under every row but the last.

Settings

  • Name, photo and bio
  • Email, push and in-app alerts
  • Password and two-factor sign-in
  • Plan, invoices and payment method
  • Connected apps and API keys

Icon List

A tinted icon tile, title, description and a plain button per row.

Workspace

  • Automations12 active workflows
  • ReportsWeekly summary is ready
  • Team8 members, 2 invites pending
  • BillingNext invoice on Nov 1
  • SecurityTwo-factor sign-in is on

Avatar List

Tint initials avatars, name, role or email and a status badge; the header carries the count.

Team members

5
  • alina@wunderui.com
    Online
  • Product designer
    Away
  • Engineering lead
    Online
  • Account executive
    In a meeting
  • Customer support
    Offline

Brand List

Integration logos with their connection status; Connect connects, Manage opens the settings.

Integrations

  • SlackConnected 2 days ago
  • GmailNot connected
  • GitHubConnected Oct 12
  • SalesforceNot connected
  • TrelloNot connected

Metric List

A metric per row: value, the previous value and the change as a trend chip.

Key metrics

Last 30 days

  • Net of refunds
    $84,210vs $76.4K10.2%
  • Daily average
    12,480vs 11,9024.9%
  • Visit to purchase
    3.42%vs 3.61%5.3%
  • All channels
    $68.20vs $64.106.4%

Selectable List

One radio per row in a radio group; click anywhere on the row or use the arrow keys. mode="checkbox" allows several.

Choose a plan

You can change it at any time

  • StarterUp to 3 seats
    $19per month
  • TeamUp to 20 seats and shared views
    $49per month
  • BusinessUnlimited seats and audit log
    $99per month
  • EnterpriseSSO, SCIM and a dedicated manager
    Custombilled yearly

Toggle List

Icon tile, label, explanation and a switch; the whole row toggles it, the last row is disabled.

Notifications

Choose how we contact you

  • Email alertsA summary every morning at 8:00
  • Push notificationsMentions and direct replies
  • Weekly reportSent every Monday at 9:00
  • Product updatesNew features and changes
  • SMS alertsAvailable on the Business plan

Sortable List

Drag a row by its handle, press Alt with an arrow key on the handle, or use Move up and Move down in the row menu. Each move is announced.

Dashboard sections

Drag to change the order

Drag the handle to reorder, or press Alt with Arrow Up or Arrow Down. Space picks a row up and drops it.

  • Revenue overviewArea chart, last 12 months
  • Top productsRanked list, 5 rows
  • Traffic sourcesBar chart by channel
  • Recent ordersTable with 5 rows
  • Team activityActivity feed

Expandable List

Every row is a disclosure button; the open row shows its details and actions under it.

Invoices

Tap a row to see the details

  • Brightline Studio, due Nov 4
    Amount
    $2,480.00
    Customer
    Brightline Studio
    Payment method
    Visa ending 4242
    Status
    Due in 5 days
  • Northpeak Labs, paid Oct 28
    Amount
    $1,150.00
    Customer
    Northpeak Labs
    Payment method
    Visa ending 4242
    Status
    Paid
  • Atlas Foods, paid Oct 21
    Amount
    $640.00
    Customer
    Atlas Foods
    Payment method
    Visa ending 4242
    Status
    Paid
  • Morrow & Co, overdue
    Amount
    $3,200.00
    Customer
    Morrow & Co
    Payment method
    Visa ending 4242
    Status
    Overdue 6 days

Grouped List

Sections with a heading and a count badge; the first row shows the unread dot until you open it.

Activity

Today, 3 items
  • Brightline Studio paid $2,480.00
    09:24Unread
  • Noah Berger joined the Team plan
    08:10
  • Deployed to all regions
    07:45
Yesterday, 2 items
  • Card ending 0119 was declined
    18:32
  • Mara Koch replied on Q4 roadmap
    14:05

Ranking List

Rank, value and the change in position as a trend chip.

Top sellers

October, by closed revenue

  • 1
    48 deals closed
    $128.4K+2
  • 2
    41 deals closed
    $112.9K-1
  • 3
    37 deals closed
    $98.2K+1
  • 4
    33 deals closed
    $87.5K0
  • 5
    29 deals closed
    $74.1K-2

Comparison List

Current value, the value it is compared with and the difference.

October vs September

Current value, previous value and difference

  • $84.2Kvs $76.4K10.2%
  • 1,284vs 1,1907.9%
  • $1.9Kvs $2.3K17.4%
  • 342vs 3615.3%
  • $65.60vs $64.202.2%

Tree List

Nested folders indented 20 px per level. Arrow keys move, Right opens, Left closes or goes up, Enter selects.

Workspace files

64
  • Design24
  • Product UI12
  • Dashboard.fig
  • Settings.fig

Action List

A menu of actions with icons, descriptions and shortcuts; the destructive action is set in text-error.

Quick actions

Discussion List

Comments with author, time, a like that toggles, replies that show and hide, and a reply composer.

Discussion

3
Mara Koch2 h ago

Can we move the launch review to Thursday? The pricing page still needs a final pass.

Felix Brandt1 h ago

Thursday works. I will update the copy by Wednesday evening.

Tim Vogel35 min ago

Shared the updated forecast in the Sales folder. Q4 is 8% above plan.

Master-Detail List

Choosing a conversation opens it beside the list (400 px list + detail). Arrow keys move through the inbox; Resolve and Reply work.

Inbox

12
  • Alina LorenzInvoice INV-2041 question
    09:24Unread
  • Felix BrandtAccess to the design files
    08:51
  • Sofia KleinRefund for order #10482
    Yesterday
  • Noah BergerUpgrade to the Business plan
    Yesterday
  • Emma WolfAPI rate limit reached
    Oct 19
Details: Alina Lorenz
Alina Lorenzalina@wunderui.com
Open

Invoice INV-2041 question

Hi team, the October invoice lists 14 seats but we only had 12 active members. Could you check the seat count and send a corrected invoice?

Priority
High
Assignee
Felix Brandt
Created
Oct 21, 09:24

Anatomy

The parts the component is made of. Each one renders a you can target from CSS.

  • data-slot="list-group"

    The 400 px card (16 px radius, 8 px padding) with an optional header and rows from or children. Basic, icon, avatar, brand, metric, ranking and comparison lists are this card with different slots.

  • data-slot="list-group-header"Optional

    Title, optional description, count badge or link action at the top of the card.

  • data-slot="list-group-section"Optional

    A labelled run of rows inside a group, with a count badge (Today 3, Yesterday 2).

  • data-slot="list-item"

    A row inside the special groups; the same row as List Item.

  • data-slot="list-item-row"

    The rounded surface of such a row.

  • data-slot="list-row-click-area"

    A layer under the controls that lets a click anywhere on a selectable or toggle row reach its control.

  • Optional

    A command menu (): icon, title, description and a Kbd shortcut per action; one tab stop, arrow keys and typeahead.

  • Optional

    Comments with author and time, a like that toggles, replies that show and hide, and an inline reply composer.

  • data-slot="list-comment"

    One comment of the discussion: avatar, author, time, text and the reaction buttons.

  • data-slot="list-thread"Optional

    A comment with its replies; threads are divided by a hairline.

  • Optional

    Rows that are disclosure buttons; the open row shows its details below. One open at a time unless .

  • data-slot="list-group-details"Optional

    The detail box an expandable row opens: label and value pairs on a subtle surface, then actions.

  • data-slot="list-group-master-detail"Optional

    An inbox-style listbox on the left and the detail of the chosen row on the right; stacks below 720 px.

  • Optional

    A checkbox or radio per row, controlled with or uncontrolled; a click anywhere on the row toggles it.

  • Optional

    Rows with drag handles. Drag with a pointer, press Alt with an arrow key, or use Move up and Move down in the row menu; every move is announced.

  • Optional

    A switch per row; the row toggles it, and disabled rows stay readable at half opacity.

  • Optional

    Nested folders and items in a , indented 20 px per level, with the full arrow-key pattern.

Best practices

  • When to use

    Use a List Group for a self-contained list in a settings page, a sidebar or next to a chart: a few rows under one heading. For a dashboard card with loading and empty states, use a List Panel.

  • Do

    Choose the group by what people do with the rows: pick (Selectable), switch (Toggle), reorder (Sortable), open (Expandable, Tree, Master–Detail) or run (Action).

  • Do

    Keep a group to about five to eight rows and link to the full list with the header action.

  • Do

    Name every group with a title or ; the lists, trees and menus inside take their accessible name from it.

  • Don’t

    Don't mix dividers and no dividers in one group. Lists with figures and states get dividers; feeds, rankings and timelines go without.

  • Don’t

    Don't rely on drag alone. Sortable already offers Alt with the arrow keys and the row menu, so keep the handle visible.

API Reference

PropTypeDefault
title / descriptionReactNode—
countnumber | string—
actionReactNode—
itemsListItemData[]— (or children)
density / divider"comfortable" | "compact" / boolean"comfortable" / true
showHeader / titleAsboolean / "h2" … "h6"title set / "h3"
ListGroupSection label / count / itemsReactNode / number / ListItemData[]—
ListGroupSelectable mode / value / onValueChange"checkbox" | "radio" / string[] | string / (value) => void"checkbox" / uncontrolled
ListGroupToggle value / onValueChangeRecord<string, boolean>uncontrolled
ListGroupSortable items / defaultItems / onItemsChange / rowMenuSortableItem[] / … / (items) => void / (item) => ListMenuItem[]uncontrolled
ListGroupExpandable value / multiple / items[].detailsstring[] / boolean / ReactNode[] / false
ListGroupTree nodes / expanded / selectedListTreeNode[] / string[] / string | nulluncontrolled
ListGroupActions actions / onActionListAction[] / (action) => void—
ListGroupDiscussion comments / onCommentsChange / onReply / currentUserListComment[] / … / (parentId, text) => void / personuncontrolled
ListGroupMasterDetail items / value / renderDetail / emptyDetailitems / string | null / (item) => ReactNode / ReactNodeuncontrolled
aria-labelstring—
classNamestring—
density"compact" | "comfortable""comfortable"
descriptionReact.ReactNode—
dividerbooleantrue
showHeaderboolean—
titleReact.ReactNode—
titleAs"h2" | "h3" | "h4" | "h5" | "h6"—
titleIdstring—
...propsReact.HTMLAttributes (277 attributes)—

Theming

The CSS variables this component reads. Set one on any wrapper to restyle everything inside it. More in Theming.

VariableUsed forDefault
Color
Background, border, ringListGroup, ListGroupDiscussion, ListGroupExpandable, ListGroupMasterDetail, ListGroupSelectable, ListGroupSortable, ListGroupToggle#F1F5F7dark #323438
BackgroundListGroup, ListGroupExpandable, ListGroupMasterDetail, ListGroupSelectable, ListGroupSortable, ListGroupToggle#FFFFFFdark #1C1D20
Texthover · ListGroup, ListGroupActions, ListGroupDetails, ListGroupDiscussion, ListGroupExpandable, ListGroupHeader, ListGroupMasterDetail, ListGroupSelectable, ListGroupSortable, ListGroupToggle, ListGroupTree#000000dark #FFFFFF
Outlinefocus · ListGroupActions, ListGroupExpandable, ListGroupMasterDetail, ListGroupSortable, ListGroupTree#555CF3dark #999DF8
Backgroundfocus · ListGroupActions, ListGroupDetails, ListGroupMasterDetail#F1F5F7dark #25272A
TextListGroupActions, ListGroupExpandable#D42A2Ddark #F8ADBC
TextListGroupDiscussion#555CF3dark #999DF8
TextListGroup, ListGroupActions, ListGroupDetails, ListGroupDiscussion, ListGroupExpandable, ListGroupHeader, ListGroupMasterDetail, ListGroupSelectable, ListGroupToggle, ListGroupTree#454648dark #D1D1D1
TextListGroupDiscussion, ListGroupExpandable, ListGroupMasterDetail, ListGroupSection, ListGroupSortable, ListGroupTree#6E6E70dark #A2A3A3
Radius
Corner radiusListGroupActions, ListGroupDetails, ListGroupExpandable, ListGroupMasterDetail, ListGroupSelectable, ListGroupToggle, ListGroupTree8px
Corner radiusListGroupSortable4px
Corner radiusListGroup, ListGroupExpandable, ListGroupMasterDetail, ListGroupSelectable, ListGroupToggle16px
Shadow
ShadowListGroupSortable0 8px 16px 0 rgb(0 0 0 / 0.12)
Motion
DurationListGroupExpandable, ListGroupTree250ms
DurationListGroupActions, ListGroupDiscussion, ListGroupExpandable, ListGroupMasterDetail, ListGroupSortable, ListGroupTree150ms
EasingListGroupActions, ListGroupExpandable, ListGroupMasterDetail, ListGroupSortable, ListGroupTreecubic-bezier(0.22, 1, 0.36, 1)
EasingListGroupExpandable, ListGroupTreecubic-bezier(0.65, 0, 0.35, 1)
EasingListGroupDiscussioncubic-bezier(0.34, 1.35, 0.64, 1)