Components

Base Components

Table

Semantic table built with Tailwind. Use with Data Table for sorting, filtering, and pagination.

Example

A list of recent invoices.
InvoiceStatusAmount
INV001Paid$250.00
INV002Pending$150.00
Total$400.00

Installation

Create a table.tsx file and paste the following code into it.

"use client";import * as React from "react";import { cn } from "@/lib/utils";function Table({ className, ...props }: React.ComponentProps<"table">) {  return (    <div      data-slot="table-container"      className="relative w-full overflow-x-auto"    >      <table        data-slot="table"        className={cn("w-full caption-bottom text-sm", className)}        {...props}      />    </div>  );}function TableHeader({ className, ...props }: React.ComponentProps<"thead">) {  return (    <thead      data-slot="table-header"      className={cn("[&_tr]:border-b", className)}      {...props}    />  );}function TableBody({ className, ...props }: React.ComponentProps<"tbody">) {  return (    <tbody      data-slot="table-body"      className={cn("[&_tr:last-child]:border-0", className)}      {...props}    />  );}function TableFooter({ className, ...props }: React.ComponentProps<"tfoot">) {  return (    <tfoot      data-slot="table-footer"      className={cn(        "bg-muted/50 border-t font-medium [&>tr]:last:border-b-0",        className,      )}      {...props}    />  );}function TableRow({ className, ...props }: React.ComponentProps<"tr">) {  return (    <tr      data-slot="table-row"      className={cn(        "hover:bg-muted/50 data-[state=selected]:bg-muted border-b transition-colors",        className,      )}      {...props}    />  );}function TableHead({ className, ...props }: React.ComponentProps<"th">) {  return (    <th      data-slot="table-head"      className={cn(        "text-foreground h-10 px-2 text-left align-middle font-medium whitespace-nowrap [&:has([role=checkbox])]:pr-0",        className,      )}      {...props}    />  );}function TableCell({ className, ...props }: React.ComponentProps<"td">) {  return (    <td      data-slot="table-cell"      className={cn(        "p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0",        className,      )}      {...props}    />  );}function TableCaption({  className,  ...props}: React.ComponentProps<"caption">) {  return (    <caption      data-slot="table-caption"      className={cn("text-muted-foreground mt-4 text-sm", className)}      {...props}    />  );}export {  Table,  TableHeader,  TableBody,  TableFooter,  TableHead,  TableRow,  TableCell,  TableCaption,};

Check the import paths to ensure they match your project setup.

Usage

import {
  Table,
  TableBody,
  TableCaption,
  TableCell,
  TableFooter,
  TableHead,
  TableHeader,
  TableRow,
} from "@/components/ui/table";
Use these components to build semantic HTML tables. For datagrids with sorting, filtering, and pagination, see the Data Table component.

On this page