Moul UIBeta
Components

Pagination

Accessible navigation landmark for paginated lists, data tables, and search results.

Pagination

The Pagination component enables users to navigate across large datasets divided into multiple pages. It features automatic sibling truncation ellipses, rows-per-page selection dropdowns, total summary counts, and complete ARIA landmark semantics.

Preview

Interactive

Properties

Variant
Size
Shape
Live Code Snippet
import { Pagination } from '@moul-dev/ui';
import { useState } from 'react';

export default function Example() {
  const [page, setPage] = useState(1);
  const [pageSize, setPageSize] = useState(10);

  return (
    <Pagination
      page={page}
      onChange={setPage}
      pageSize={pageSize}
      onPageSizeChange={setPageSize} totalPages={10} showSummary showPageSize showFirstLast
    />
  );
}

Import

import {
  Pagination,
  PaginationContent,
  PaginationItem,
  PaginationLink,
  PaginationPrevious,
  PaginationNext,
  PaginationFirst,
  PaginationLast,
  PaginationEllipsis,
  PaginationSummary,
  PaginationPageSize,
} from '@moul-dev/ui';

Interactive Table Demo

IDNameRoleStatus
21User 21EditorInactive
22User 22AdminActive
23User 23EditorActive
24User 24ViewerActive
25User 25AdminInactive
26User 26ViewerActive
27User 27EditorActive
28User 28AdminActive
29User 29EditorInactive
30User 30ViewerActive

Basic Usage

Pass page, totalPages, and onChange for standard controlled pagination:

import { Pagination } from '@moul-dev/ui';
import { useState } from 'react';

export default function Example() {
  const [page, setPage] = useState(1);

  return (
    <Pagination
      page={page}
      totalPages={10}
      onChange={setPage}
    />
  );
}

With Summary and Page Size Selector

Enable showSummary and showPageSize to provide complete data table navigation:

import { Pagination } from '@moul-dev/ui';
import { useState } from 'react';

export default function Example() {
  const [page, setPage] = useState(1);
  const [pageSize, setPageSize] = useState(10);

  return (
    <Pagination
      page={page}
      total={250}
      pageSize={pageSize}
      showSummary
      showPageSize
      showFirstLast
      showPrevNext
      onChange={setPage}
      onPageSizeChange={setPageSize}
    />
  );
}

Shapes & Variants

Choose between rounded, circle, or square button shapes, and outline, ghost, primary, or subtle styles:

<Pagination page={4} totalPages={8} variant="outline" shape="rounded" />
<Pagination page={4} totalPages={8} variant="subtle" shape="circle" />
<Pagination page={4} totalPages={8} variant="ghost" shape="square" />

Compound Composition

You can build custom layouts by composing subcomponents inside <Pagination>:

import {
  Pagination,
  PaginationContent,
  PaginationItem,
  PaginationLink,
  PaginationPrevious,
  PaginationNext,
  PaginationEllipsis,
  PaginationSummary,
} from '@moul-dev/ui';

export default function CustomPagination() {
  return (
    <Pagination page={3} totalPages={10}>
      <PaginationSummary>Page 3 of 10</PaginationSummary>
      <PaginationContent>
        <PaginationItem>
          <PaginationPrevious />
        </PaginationItem>
        <PaginationItem>
          <PaginationLink page={1} />
        </PaginationItem>
        <PaginationItem>
          <PaginationEllipsis />
        </PaginationItem>
        <PaginationItem>
          <PaginationLink page={3} isActive />
        </PaginationItem>
        <PaginationItem>
          <PaginationEllipsis />
        </PaginationItem>
        <PaginationItem>
          <PaginationLink page={10} />
        </PaginationItem>
        <PaginationItem>
          <PaginationNext />
        </PaginationItem>
      </PaginationContent>
    </Pagination>
  );
}

API Reference

Prop

Type

On this page