Custom icons
Every glyph is a named slot. Override any subset with the icons option, which accepts a partial. Defaults come from Remix Icon, but you can swap in any icon library.
Custom icons
ID | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|
2261 | 45000134754 | 099 | ||||||||
| Ava | Thompson | Owner | Engineering | active | 22 | $45,000 | Jan 2, 2023 | 0% | ||
| Liam | Nguyen | Admin | Marketing | inactive | 25 | $47,137 | Jan 13, 2023 | 9% | ||
| Noah | Silva | Editor | Design | pending | 28 | $49,274 | Jan 24, 2023 | 18% | ||
| Emma | Carter | Viewer | Sales | active | 31 | $51,411 | Feb 4, 2023 | 27% | ||
| Olivia | Rossi | Owner | Support | inactive | 34 | $53,548 | Feb 15, 2023 | 36% | ||
| William | Walker | Admin | Engineering | pending | 37 | $55,685 | Feb 26, 2023 | 45% | ||
| Sophia | Patel | Editor | Marketing | active | 40 | $57,822 | Mar 9, 2023 | 54% | ||
| James | Muller | Viewer | Design | inactive | 43 | $59,959 | Mar 20, 2023 | 63% | ||
| Isabella | Park | Owner | Sales | pending | 46 | $62,096 | Mar 31, 2023 | 72% | ||
| Lucas | Reyes | Admin | Support | active | 49 | $64,233 | Apr 11, 2023 | 81% | ||
| $4,120,536 |
Rows per page
1–10 of 48
Each value is a component that accepts a className, so any icon library works — here using lucide-react:
import { DataTable, useDataTable } from "@/components/ui/data-table"
import { ArrowDown, ArrowUp, Search } from "lucide-react"
const table = useDataTable({
data,
columns,
getRowId: (row) => row.id,
icons: {
sortAscending: ArrowUp,
sortDescending: ArrowDown,
search: Search,
},
})
return <DataTable table={table} />
App-wide defaults
For icon (and localization) defaults shared across many tables, wrap a subtree in DataTableConfigProvider.
import { DataTableConfigProvider } from "@/components/ui/data-table"
import { Search } from "lucide-react"
<DataTableConfigProvider icons={{ search: Search }}>
{children}
</DataTableConfigProvider>
Precedence
Values resolve in this order: built-in defaults → DataTableConfigProvider →
per-call options. Per-call icons always win.