SwitchTabs
Get Started
Introduction
Components
Accordion
Badge
Button
Card
Checkbox
Command
Dialog
Dropdown Menu
Input
Select
Switch
Table
Tabs
Toast
Tooltip
Forms
Controlled Input
Field Arrays
Submit
Validation

A responsive table component with composable sub-components.

InvoiceAmount
INV001$250.00
INV002$150.00

#Installation

bunx --bun barefoot add table

#Usage

A list of recent invoices.
InvoiceStatusMethodAmount
INV001PaidCredit Card$250.00
INV002PendingPayPal$150.00
INV003PaidBank Transfer$350.00
Total$750.00
1import {2  Table, TableHeader, TableBody, TableFooter,3  TableRow, TableHead, TableCell, TableCaption,4} from "@/components/ui/table"56function TableDemo() {7  return (8    <Table>9      <TableCaption>A list of recent invoices.</TableCaption>10      <TableHeader>11        <TableRow>12          <TableHead className="w-[100px]">Invoice</TableHead>13          <TableHead>Status</TableHead>14          <TableHead>Method</TableHead>15          <TableHead className="text-right">Amount</TableHead>16        </TableRow>17      </TableHeader>18      <TableBody>19        <TableRow>20          <TableCell className="font-medium">INV001</TableCell>21          <TableCell>Paid</TableCell>22          <TableCell>Credit Card</TableCell>23          <TableCell className="text-right">$250.00</TableCell>24        </TableRow>25        <TableRow>26          <TableCell className="font-medium">INV002</TableCell>27          <TableCell>Pending</TableCell>28          <TableCell>PayPal</TableCell>29          <TableCell className="text-right">$150.00</TableCell>30        </TableRow>31        <TableRow>32          <TableCell className="font-medium">INV003</TableCell>33          <TableCell>Paid</TableCell>34          <TableCell>Bank Transfer</TableCell>35          <TableCell className="text-right">$350.00</TableCell>36        </TableRow>37      </TableBody>38      <TableFooter>39        <TableRow>40          <TableCell colSpan={3}>Total</TableCell>41          <TableCell className="text-right">$750.00</TableCell>42        </TableRow>43      </TableFooter>44    </Table>45  )46}

#Examples

#Basic

InvoiceStatusMethodAmount
INV001PaidCredit Card$250.00
INV002PendingPayPal$150.00
INV003UnpaidBank Transfer$350.00
INV004PaidCredit Card$450.00
1import {2  Table, TableBody, TableCell, TableHead, TableHeader, TableRow,3} from '@/components/ui/table'45const invoices = [6  { invoice: 'INV001', status: 'Paid', method: 'Credit Card', amount: '$250.00' },7  { invoice: 'INV002', status: 'Pending', method: 'PayPal', amount: '$150.00' },8  { invoice: 'INV003', status: 'Unpaid', method: 'Bank Transfer', amount: '$350.00' },9  { invoice: 'INV004', status: 'Paid', method: 'Credit Card', amount: '$450.00' },10]1112function TableBasic() {13  return (14    <Table>15      <TableHeader>16        <TableRow>17          <TableHead className="w-[100px]">Invoice</TableHead>18          <TableHead>Status</TableHead>19          <TableHead>Method</TableHead>20          <TableHead className="text-right">Amount</TableHead>21        </TableRow>22      </TableHeader>23      <TableBody>24        {invoices.map((inv) => (25          <TableRow>26            <TableCell className="font-medium">{inv.invoice}</TableCell>27            <TableCell>{inv.status}</TableCell>28            <TableCell>{inv.method}</TableCell>29            <TableCell className="text-right">{inv.amount}</TableCell>30          </TableRow>31        ))}32      </TableBody>33    </Table>34  )35}
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
Total$2,500.00
1import {2  Table, TableBody, TableCaption, TableCell,3  TableFooter, TableHead, TableHeader, TableRow,4} from '@/components/ui/table'56const invoices = [7  { invoice: 'INV001', status: 'Paid', method: 'Credit Card', amount: '$250.00' },8  { invoice: 'INV002', status: 'Pending', method: 'PayPal', amount: '$150.00' },9  { invoice: 'INV003', status: 'Unpaid', method: 'Bank Transfer', amount: '$350.00' },10  { invoice: 'INV004', status: 'Paid', method: 'Credit Card', amount: '$450.00' },11  { invoice: 'INV005', status: 'Paid', method: 'PayPal', amount: '$550.00' },12  { invoice: 'INV006', status: 'Pending', method: 'Bank Transfer', amount: '$200.00' },13  { invoice: 'INV007', status: 'Unpaid', method: 'Credit Card', amount: '$300.00' },14]1516function TableWithFooter() {17  return (18    <Table>19      <TableCaption>A list of your recent invoices.</TableCaption>20      <TableHeader>21        <TableRow>22          <TableHead className="w-[100px]">Invoice</TableHead>23          <TableHead>Status</TableHead>24          <TableHead>Method</TableHead>25          <TableHead className="text-right">Amount</TableHead>26        </TableRow>27      </TableHeader>28      <TableBody>29        {invoices.map((inv) => (30          <TableRow>31            <TableCell className="font-medium">{inv.invoice}</TableCell>32            <TableCell>{inv.status}</TableCell>33            <TableCell>{inv.method}</TableCell>34            <TableCell className="text-right">{inv.amount}</TableCell>35          </TableRow>36        ))}37      </TableBody>38      <TableFooter>39        <TableRow>40          <TableCell colSpan={3}>Total</TableCell>41          <TableCell className="text-right">$2,500.00</TableCell>42        </TableRow>43      </TableFooter>44    </Table>45  )46}

#API Reference

Table

PropTypeDefaultDescription
childrenChild-Table sub-components (TableHeader, TableBody, TableFooter, TableCaption).
classNamestring-Additional CSS classes for the table element.

TableRow

PropTypeDefaultDescription
childrenChild-TableHead or TableCell elements.
data-state'selected'-Set to "selected" to highlight the row.

TableCell / TableHead

PropTypeDefaultDescription
childrenChild-Cell content.
colSpannumber-Number of columns the cell should span.