Getting Started
Components52
- Accordion
- Alert
- Alert Dialog
- Attachment
- Badge
- Breadcrumb
- Bubble
- Button
- Button Group
- Calendar
- Card
- Checkbox
- Collapsible
- Command
- Context Menu
- Data Table
- Dialog
- Drawer
- Dropdown Menu
- Empty
- Field
- Hover Card
- Input
- Input Group
- Item
- Kbd
- Label
- Marker
- Menubar
- Message
- Message Scroller
- Pagination
- Popover
- Progress
- Questionnaire
- Radio Group
- Scroll Area
- Select
- Separator
- Sheet
- Sidebar
- Skeleton
- Slider
- Sonner
- Spinner
- Switch
- Table
- Tabs
- Textarea
- Toggle
- Toggle Group
- Tooltip
import {
Pagination,
PaginationContent,
PaginationEllipsis,
PaginationItem,
PaginationLink,
PaginationNext,
PaginationPrevious,
} from "@/components/ui/pagination"
export function PaginationDemo() {
return (
<Pagination>
<PaginationContent>
<PaginationItem>
<PaginationPrevious href="#" />
</PaginationItem>
<PaginationItem>
<PaginationLink href="#">1</PaginationLink>
</PaginationItem>
<PaginationItem>
<PaginationLink href="#" isActive>
2
</PaginationLink>
</PaginationItem>
<PaginationItem>
<PaginationLink href="#">3</PaginationLink>
</PaginationItem>
<PaginationItem>
<PaginationEllipsis />
</PaginationItem>
<PaginationItem>
<PaginationLink href="#">10</PaginationLink>
</PaginationItem>
<PaginationItem>
<PaginationNext href="#" />
</PaginationItem>
</PaginationContent>
</Pagination>
)
}Installation#
pnpm dlx shadcn@latest add https://ui.ikramhasan.com/r/pagination.json
Usage#
import {
Pagination,
PaginationContent,
PaginationEllipsis,
PaginationItem,
PaginationLink,
PaginationNext,
PaginationPrevious,
} from "@/components/ui/pagination"<Pagination>
<PaginationContent>
<PaginationItem>
<PaginationPrevious href="#" />
</PaginationItem>
<PaginationItem>
<PaginationLink href="#">1</PaginationLink>
</PaginationItem>
<PaginationItem>
<PaginationEllipsis />
</PaginationItem>
<PaginationItem>
<PaginationNext href="#" />
</PaginationItem>
</PaginationContent>
</Pagination>PaginationContent is a recessed track, like the Tabs list; the link with isActive rises out of it as the raised chip.
Examples#
Disabled#
Set aria-disabled (and tabIndex={-1}) on a link that leads nowhere, such as Previous on the first page.
import {
Pagination,
PaginationContent,
PaginationItem,
PaginationLink,
PaginationNext,
PaginationPrevious,
} from "@/components/ui/pagination"
export function PaginationDisabled() {
return (
<Pagination>
<PaginationContent>
<PaginationItem>
<PaginationPrevious aria-disabled="true" tabIndex={-1} />
</PaginationItem>
<PaginationItem>
<PaginationLink href="#" isActive>
1
</PaginationLink>
</PaginationItem>
<PaginationItem>
<PaginationLink href="#">2</PaginationLink>
</PaginationItem>
<PaginationItem>
<PaginationLink href="#">3</PaginationLink>
</PaginationItem>
<PaginationItem>
<PaginationNext href="#" />
</PaginationItem>
</PaginationContent>
</Pagination>
)
}Icons only#
Page 4 of 12
import { ChevronLeftIcon, ChevronRightIcon } from "lucide-react"
import {
Pagination,
PaginationContent,
PaginationItem,
PaginationLink,
} from "@/components/ui/pagination"
export function PaginationIconsOnly() {
return (
<div className="flex items-center gap-3">
<span className="text-sm text-muted-foreground tabular-nums">
Page 4 of 12
</span>
<Pagination className="mx-0 w-auto">
<PaginationContent>
<PaginationItem>
<PaginationLink href="#" aria-label="Go to previous page">
<ChevronLeftIcon />
</PaginationLink>
</PaginationItem>
<PaginationItem>
<PaginationLink href="#" aria-label="Go to next page">
<ChevronRightIcon />
</PaginationLink>
</PaginationItem>
</PaginationContent>
</Pagination>
</div>
)
}Next.js#
To use Next.js's <Link />, update PaginationLink's render prop to render a Link instead of an <a>.
API Reference#
| Part | Element | Notes |
|---|---|---|
Pagination | nav | aria-label="pagination". |
PaginationContent | ul | The recessed track. |
PaginationItem | li | |
PaginationLink | a | isActive sets aria-current="page". size takes the Button sizes (default icon). |
PaginationPrevious | a | text (default "Previous"), hidden below sm. |
PaginationNext | a | text (default "Next"), hidden below sm. |
PaginationEllipsis | span | aria-hidden; a decorative gap between page links. |