Attendee
Status
Ticket
Paid
Tasks
Registered
Location
TD
Tom Davidsontom@email.com
Checked in9:02 AM
$120.00
8/10
12 May 2025
Sydney, AU
PS
Priya Sharmapriya@company.co
PendingAwaiting payment
$0.00
10/10
3 Jun 2025
Melbourne, AU
JO
James Okaforjames@mail.ng
CancelledRefunded
$120.00
0/10
28 Apr 2025
Lagos, NG
ML
Mei Linmei@studio.io
TransferredFrom another event
$85.00
5/10
1 May 2025
Singapore, SG

preview

Member
Status
Tasks
Joined
Amount
AM
Alex Monroealex@company.co
ActiveRegistered
8/10
12 Jan 2025
$240.00
JW
Jamie Wellsjamie@studio.io
PendingAwaiting payment
3/10
4 Mar 2025
$0.00
SR
Sam Riverasam@corp.mx
CancelledRefunded
0/10
19 Feb 2025
$120.00
PN
Priya Nairpriya@design.in
ActiveRegistered
10/10
22 Apr 2025
$240.00

props

TableProps

PropTypeDefaultDescription
columnsColumnDef[]requiredColumn definitions controlling id, label, width, cell type, and sort behaviour.
dataRecord<string, unknown>[]requiredArray of row objects. Each key should match a column id.
onRowClick(row) => voidWhen provided, rows become clickable and display a hover state.
onSortChange(columnId, direction) => voidCalled after each sort change. Use for server-side sorting; omit to let the table sort internally.

ColumnDef

PropTypeDefaultDescription
idstringrequiredKey used to read the cell value from each row object.
labelstringrequiredColumn header text, rendered uppercase.
widthstring1frColumn width — pixel value ("200px") or fractional ("2fr").
cellTypeCellType'text'Controls how the cell value is rendered. See Cell Types below.
sortablebooleanfalseAdds a sort affordance to the header. Clicking cycles asc → desc → clear.
currencyVariant'success' | 'error' | 'default''default'Colour treatment for currency cells.

best practices

Tables are useful for organising data in grids. They work best when used to compare data points, find insights, locate specific information within a large dataset, or show long lists of sequential or structured content.

Do

  • Keep cell content short and succinct
  • Use sortable columns to help users find what they need faster
  • Ensure each column has a clear, descriptive label
  • Use the appropriate cell type to communicate the data format

Don't

  • Write long-form content inside table cells
  • Put a table inside another table
  • Use a table for minimal information where a list would suffice
  • Use detailed tables in small spaces like modals or drawers
Attendee
Paid
TD
Tom Davidsontom@email.com
$120.00
PS
Priya Sharmapriya@co.com
$85.00
DoShort, structured cell values with appropriate types
Name
Notes
Tom Davidson
Arrived early, requested a front row seat and asked about parking near the venue.
Priya Sharma
Dietary requirements: vegetarian. Will be bringing two guests.
Don’tLong-form text inside cells breaks the table layout

interaction

Users can perform a single action across a row. Pass onRowClick to make rows interactive — clicking can open a modal, drawer, or navigate to a detail view. When no handler is provided the table is non-interactive and rows show no hover state.

Member
Status
TD
Tom Davidsontom@email.com
Active
PS
Priya Sharmapriya@co.com
Pending
InteractiveRows highlight on hover and fire onRowClick
Member
Status
TD
Tom Davidsontom@email.com
Active
PS
Priya Sharmapriya@co.com
Pending
Non-interactiveNo hover state, used for read-only data display

responsive

When a table has more columns than the available width, it scrolls horizontally. A right-edge shadow appears automatically to signal that content is hidden — it fades away as the user scrolls to the end. The column header scrolls together with the body so labels always stay aligned.

Attendee
Status
Ticket
Paid
Tasks
Registered
Location
TD
Tom Davidsontom@email.com
Checked in9:02 AM
$120.00
8/10
12 May 2025
Sydney, AU
PS
Priya Sharmapriya@company.co
PendingAwaiting payment
$0.00
10/10
3 Jun 2025
Melbourne, AU
Overflow shadowRight-edge inset shadow indicates hidden columns — scroll to reveal

cell types

Set cellType on each ColumnDef to control how values are rendered. Each type expects a specific value shape in the row data.

Leading

The primary identity cell. Pairs an Avatar with a bold title and optional muted description. Use for people, organisations, or any entity that benefits from visual identification.

Default (with description)
Condensed (title only)
TD
Tom Davidsontom@email.com
TD
Tom Davidson
PS
Priya Sharmapriya@company.co
PS
Priya Sharma
JO
James Okaforjames@mail.ng
JO
James Okafor

Status

Communicates the state of a record with a coloured icon badge, a label, and an optional description. Five variants cover the full sentiment spectrum.

Status
ActiveChecked in
PendingAwaiting payment
CancelledRefunded
Not attending
TransferredFrom another event

Text

Plain body text. Use for string values that don't need special treatment. This is the default cell type when cellType is omitted.

Text cell
Hole Sponsor
Gold Sponsor
Silver Sponsor

Currency

Semibold numeric value with a colour variant to communicate financial sentiment. Values are passed as pre-formatted strings.

Success
Error
Default
$120.00
-$4.80
$0.00
$85.00
-$3.40
$95.00

Progress

Uses the ProgressBar component inline. Pass current, total, and an optional intent. The percentage is computed automatically. Use intent to convey sentiment — warning when partially complete, positive when done.

Tasks
10/10
8/10
3/10
0/10

Date

Condensed date cell with a calendar icon. Pass a pre-formatted date string. If the value is empty the cell enters the incomplete state, showing a warning colour and a 'Date missing' label.

Registered
12 May 2025
3 Jun 2025
Date missing

Time

Condensed time cell with a clock icon. Same incomplete behaviour as the date cell when the value is empty.

Start time
9:00 AM
2:30 PM
Time missing

Location

Condensed location cell with a map-pin icon. Same incomplete behaviour when the value is empty.

Location
Sydney, AU
Melbourne, AU
Location missing