A set of composable table elements for displaying structured data in rows and columns.
A collection of styled HTML table primitives wrapped in a horizontally scrollable container. Each sub-component maps to a native table element (table, thead, tbody, tfoot, tr, th, td, caption) with consistent spacing, borders, and hover states.
| Invoice | Status | Method | Amount |
|---|---|---|---|
| INV001 | Paid | Credit Card | $250.00 |
| INV002 | Pending | PayPal | $150.00 |
| INV003 | Paid | Bank Transfer | $350.00 |
import {
Table,
TableBody,
TableCaption,
TableCell,
TableHead,
TableHeader,
TableRow,
} from "@/components/ui/table"
export default function TableDemo() {
return (
<Table>
<TableCaption>A list of recent invoices.</TableCaption>
<TableHeader>
<TableRow>
<TableHead>Invoice</TableHead>
<TableHead>Status</TableHead>
<TableHead>Method</TableHead>
<TableHead className="text-right">Amount</TableHead>
</TableRow>
</TableHeader>
<TableBody>
<TableRow>
<TableCell>INV001</TableCell>
<TableCell>Paid</TableCell>
<TableCell>Credit Card</TableCell>
<TableCell className="text-right">$250.00</TableCell>
</TableRow>
<TableRow>
<TableCell>INV002</TableCell>
<TableCell>Pending</TableCell>
<TableCell>PayPal</TableCell>
<TableCell className="text-right">$150.00</TableCell>
</TableRow>
<TableRow>
<TableCell>INV003</TableCell>
<TableCell>Paid</TableCell>
<TableCell>Bank Transfer</TableCell>
<TableCell className="text-right">$350.00</TableCell>
</TableRow>
</TableBody>
</Table>
)
}
import {
Table,
TableHeader,
TableBody,
TableFooter,
TableHead,
TableRow,
TableCell,
TableCaption,
} from "@/components/ui/table"<Table>
<TableHeader>
<TableRow>
<TableHead>Name</TableHead>
<TableHead>Status</TableHead>
</TableRow>
</TableHeader>
<TableBody>
<TableRow>
<TableCell>Alice</TableCell>
<TableCell>Active</TableCell>
</TableRow>
</TableBody>
</Table><Table>
<TableHeader>
<TableRow>
<TableHead>Invoice</TableHead>
<TableHead>Status</TableHead>
<TableHead>Amount</TableHead>
</TableRow>
</TableHeader>
<TableBody>
<TableRow>
<TableCell>INV001</TableCell>
<TableCell>Paid</TableCell>
<TableCell>$250.00</TableCell>
</TableRow>
<TableRow>
<TableCell>INV002</TableCell>
<TableCell>Pending</TableCell>
<TableCell>$150.00</TableCell>
</TableRow>
</TableBody>
</Table><Table>
<TableCaption>A list of recent invoices.</TableCaption>
<TableHeader>
<TableRow>
<TableHead>Invoice</TableHead>
<TableHead>Amount</TableHead>
</TableRow>
</TableHeader>
<TableBody>
<TableRow>
<TableCell>INV001</TableCell>
<TableCell>$250.00</TableCell>
</TableRow>
<TableRow>
<TableCell>INV002</TableCell>
<TableCell>$150.00</TableCell>
</TableRow>
</TableBody>
<TableFooter>
<TableRow>
<TableCell>Total</TableCell>
<TableCell>$400.00</TableCell>
</TableRow>
</TableFooter>
</Table>Add data-state="selected" to a TableRow to highlight it.
<Table>
<TableHeader>
<TableRow>
<TableHead>Name</TableHead>
<TableHead>Role</TableHead>
</TableRow>
</TableHeader>
<TableBody>
<TableRow data-state="selected">
<TableCell>Alice</TableCell>
<TableCell>Admin</TableCell>
</TableRow>
<TableRow>
<TableCell>Bob</TableCell>
<TableCell>User</TableCell>
</TableRow>
</TableBody>
</Table>The root table element wrapped in a horizontally scrollable container.
| Prop | Type | Default |
|---|---|---|
className | string | — |
Accepts all standard table HTML attributes.
The <thead> element. Rows inside receive a bottom border.
| Prop | Type | Default |
|---|---|---|
className | string | — |
The <tbody> element. The last row's bottom border is removed.
| Prop | Type | Default |
|---|---|---|
className | string | — |
The <tfoot> element. Rendered with a top border and muted background.
| Prop | Type | Default |
|---|---|---|
className | string | — |
A <tr> element with hover and selected-state background styles.
| Prop | Type | Default |
|---|---|---|
className | string | — |
A <th> element styled with medium font weight and foreground color.
| Prop | Type | Default |
|---|---|---|
className | string | — |
A <td> element with consistent padding and vertical alignment.
| Prop | Type | Default |
|---|---|---|
className | string | — |
A <caption> element positioned below the table with muted text.
| Prop | Type | Default |
|---|---|---|
className | string | — |