GitHub

Pagination

Page navigation control with previous/next and adaptive page range.

01 Live Demo

Current page: 5

02 Code Snippet

src/ui/Pagination.tsx
import { Pagination } from "@/ui/Pagination";

<Pagination.Root
  page={page}
  totalPages={24}
  onPageChange={setPage}
  siblingCount={1}
/>

03 Copy-Paste (Single File)

Pagination.tsx
function PaginationRoot({ page, totalPages, onPageChange }: { page: number; totalPages: number; onPageChange: (page: number) => void }) {
  const pages = Array.from({ length: totalPages }, (_, index) => index + 1);
  return (
    <nav className="inline-flex items-center gap-1">
      <button type="button" onClick={() => onPageChange(page - 1)} disabled={page <= 1}>Prev</button>
      {pages.map((token) => (
        <button key={token} type="button" onClick={() => onPageChange(token)} className={token === page ? "bg-primary text-white" : ""}>{token}</button>
      ))}
      <button type="button" onClick={() => onPageChange(page + 1)} disabled={page >= totalPages}>Next</button>
    </nav>
  );
}

type PaginationCompound = typeof PaginationRoot & { Root: typeof PaginationRoot };
export const Pagination = Object.assign(PaginationRoot, { Root: PaginationRoot }) as PaginationCompound;
react-principles