Component
Table

Table

A responsive table component.

A list of your recent invoices.
InvoiceStatusMethodAmount
INV001PaidCredit Card$250.00
INV002PendingPayPal$150.00
INV003UnpaidBank Transfer$350.00
INV004PaidCredit Card$450.00
INV005PaidPayPal$550.00
INV006PendingBank Transfer$200.00
INV007UnpaidCredit Card$300.00

Installation

Copy and paste the following code into your project

components/ui/table/index.tsx
import * as React from 'react'
import { styled } from '@shadow-panda/styled-system/jsx'
import {
  tableContainer,
  table,
  tableHeader,
  tableBody,
  tableFooter,
  tableHead,
  tableRow,
  tableCell,
  tableCaption,
} from '@shadow-panda/styled-system/recipes'
 
const TableContainer = styled('div', tableContainer)
 
const BaseTable = React.forwardRef<HTMLTableElement, React.HTMLAttributes<HTMLTableElement>>(
  (props, ref) => (
    <TableContainer>
      <table ref={ref} {...props} />
    </TableContainer>
  ),
)
BaseTable.displayName = 'Table'
 
export const Table = styled(BaseTable, table)
export const TableHeader = styled('thead', tableHeader)
export const TableBody = styled('tbody', tableBody)
export const TableFooter = styled('tfoot', tableFooter)
export const TableHead = styled('th', tableHead)
export const TableRow = styled('tr', tableRow)
export const TableCell = styled('td', tableCell)
export const TableCaption = styled('caption', tableCaption)

Update the import paths to match your project setup

Usage

import {
  Table,
  TableBody,
  TableCaption,
  TableCell,
  TableHead,
  TableHeader,
  TableRow,
} from '@/components/ui/table'
<Table>
  <TableCaption>A list of your recent invoices.</TableCaption>
  <TableHeader>
    <TableRow>
      <TableHead w="100px">Invoice</TableHead>
      <TableHead>Status</TableHead>
      <TableHead>Method</TableHead>
      <TableHead textAlign="right">Amount</TableHead>
    </TableRow>
  </TableHeader>
  <TableBody>
    <TableRow>
      <TableCell fontWeight="medium">INV001</TableCell>
      <TableCell>Paid</TableCell>
      <TableCell>Credit Card</TableCell>
      <TableCell textAlign="right">$250.00</TableCell>
    </TableRow>
  </TableBody>
</Table>

Data Table

You can use the <Table /> component to build more complex data tables. Combine it with @tanstack/react-table to create tables with sorting, filtering and pagination.

See the Data Table documentation for more information.