Pagination

Navigation that splits content across a sequence of numbered pages.

Default

Pagination is an accessible <nav> wrapping a Pagination.Content list of Pagination.Items, with the current page marked by active.

tsx

import { Pagination } from "@hummingbirdui/react";
import { ChevronLeft, ChevronRight } from "lucide-react";

export default function PaginationDefault() {
  return (
    <Pagination>
      <Pagination.Content>
        <Pagination.Item disabled>
          <Pagination.Link href="#">
            <ChevronLeft className="size-4" />
          </Pagination.Link>
        </Pagination.Item>
        <Pagination.Item>
          <Pagination.Link href="#">1</Pagination.Link>
        </Pagination.Item>
        <Pagination.Item active>
          <Pagination.Link href="#">2</Pagination.Link>
        </Pagination.Item>
        <Pagination.Item>
          <Pagination.Link href="#">3</Pagination.Link>
        </Pagination.Item>
        <Pagination.Item>
          <Pagination.Link href="#">
            <ChevronRight className="size-4" />
          </Pagination.Link>
        </Pagination.Item>
      </Pagination.Content>
    </Pagination>
  );
}

Sizes

The size prop on Pagination offers sm, md (default), and lg.

tsx

import { Pagination } from "@hummingbirdui/react";
import { ChevronLeft, ChevronRight } from "lucide-react";

export default function PaginationSizes() {
  return (
    <div className="flex flex-col gap-3">
      <Pagination size="sm">
        <Pagination.Content>
          <Pagination.Item disabled>
            <Pagination.Link href="#">
              <ChevronLeft className="size-4" />
            </Pagination.Link>
          </Pagination.Item>
          <Pagination.Item>
            <Pagination.Link href="#">1</Pagination.Link>
          </Pagination.Item>
          <Pagination.Item active>
            <Pagination.Link href="#">2</Pagination.Link>
          </Pagination.Item>
          <Pagination.Item>
            <Pagination.Link href="#">3</Pagination.Link>
          </Pagination.Item>
          <Pagination.Item>
            <Pagination.Link href="#">
              <ChevronRight className="size-4" />
            </Pagination.Link>
          </Pagination.Item>
        </Pagination.Content>
      </Pagination>
      <Pagination>
        <Pagination.Content>
          <Pagination.Item disabled>
            <Pagination.Link href="#">
              <ChevronLeft className="size-4" />
            </Pagination.Link>
          </Pagination.Item>
          <Pagination.Item>
            <Pagination.Link href="#">1</Pagination.Link>
          </Pagination.Item>
          <Pagination.Item active>
            <Pagination.Link href="#">2</Pagination.Link>
          </Pagination.Item>
          <Pagination.Item>
            <Pagination.Link href="#">3</Pagination.Link>
          </Pagination.Item>
          <Pagination.Item>
            <Pagination.Link href="#">
              <ChevronRight className="size-4" />
            </Pagination.Link>
          </Pagination.Item>
        </Pagination.Content>
      </Pagination>
      <Pagination size="lg">
        <Pagination.Content>
          <Pagination.Item disabled>
            <Pagination.Link href="#">
              <ChevronLeft className="size-4" />
            </Pagination.Link>
          </Pagination.Item>
          <Pagination.Item>
            <Pagination.Link href="#">1</Pagination.Link>
          </Pagination.Item>
          <Pagination.Item active>
            <Pagination.Link href="#">2</Pagination.Link>
          </Pagination.Item>
          <Pagination.Item>
            <Pagination.Link href="#">3</Pagination.Link>
          </Pagination.Item>
          <Pagination.Item>
            <Pagination.Link href="#">
              <ChevronRight className="size-4" />
            </Pagination.Link>
          </Pagination.Item>
        </Pagination.Content>
      </Pagination>
    </div>
  );
}

Circle

The shape="circle" prop on Pagination renders rounded page links.

tsx

import { Pagination } from "@hummingbirdui/react";
import { ChevronLeft, ChevronRight } from "lucide-react";

export default function PaginationCircle() {
  return (
    <Pagination shape="circle">
      <Pagination.Content>
        <Pagination.Item disabled>
          <Pagination.Link href="#">
            <ChevronLeft className="size-4" />
          </Pagination.Link>
        </Pagination.Item>
        <Pagination.Item>
          <Pagination.Link href="#">1</Pagination.Link>
        </Pagination.Item>
        <Pagination.Item active>
          <Pagination.Link href="#">2</Pagination.Link>
        </Pagination.Item>
        <Pagination.Item>
          <Pagination.Link href="#">3</Pagination.Link>
        </Pagination.Item>
        <Pagination.Item>
          <Pagination.Link href="#">
            <ChevronRight className="size-4" />
          </Pagination.Link>
        </Pagination.Item>
      </Pagination.Content>
    </Pagination>
  );
}

Variants

The variant prop on Pagination sets the active-page treatment: filled (default), subtle, or outlined.

tsx

import { Pagination } from "@hummingbirdui/react";

export default function PaginationVariants() {
  return (
    <div className="flex flex-col gap-3">
      <Pagination variant="filled">
        <Pagination.Content>
          <Pagination.Item>
            <Pagination.Link href="#">1</Pagination.Link>
          </Pagination.Item>
          <Pagination.Item active>
            <Pagination.Link href="#">2</Pagination.Link>
          </Pagination.Item>
          <Pagination.Item>
            <Pagination.Link href="#">3</Pagination.Link>
          </Pagination.Item>
        </Pagination.Content>
      </Pagination>
      <Pagination variant="subtle">
        <Pagination.Content>
          <Pagination.Item>
            <Pagination.Link href="#">1</Pagination.Link>
          </Pagination.Item>
          <Pagination.Item active>
            <Pagination.Link href="#">2</Pagination.Link>
          </Pagination.Item>
          <Pagination.Item>
            <Pagination.Link href="#">3</Pagination.Link>
          </Pagination.Item>
        </Pagination.Content>
      </Pagination>
      <Pagination variant="outlined">
        <Pagination.Content>
          <Pagination.Item>
            <Pagination.Link href="#">1</Pagination.Link>
          </Pagination.Item>
          <Pagination.Item active>
            <Pagination.Link href="#">2</Pagination.Link>
          </Pagination.Item>
          <Pagination.Item>
            <Pagination.Link href="#">3</Pagination.Link>
          </Pagination.Item>
        </Pagination.Content>
      </Pagination>
    </div>
  );
}

Colors

The color prop on Pagination conveys intent with primary (default), secondary, info, success, warning, danger, or neutral.

tsx

import { Pagination } from "@hummingbirdui/react";

const colors = [
  "primary",
  "secondary",
  "info",
  "success",
  "warning",
  "danger",
  "neutral",
] as const;

export default function PaginationColors() {
  return (
    <div className="flex flex-col gap-3">
      {colors.map((color) => (
        <Pagination key={color} color={color}>
          <Pagination.Content>
            <Pagination.Item>
              <Pagination.Link href="#">1</Pagination.Link>
            </Pagination.Item>
            <Pagination.Item active>
              <Pagination.Link href="#">2</Pagination.Link>
            </Pagination.Item>
            <Pagination.Item>
              <Pagination.Link href="#">3</Pagination.Link>
            </Pagination.Item>
          </Pagination.Content>
        </Pagination>
      ))}
    </div>
  );
}

Disabled

The disabled prop on Pagination.Item mutes and deactivates a control such as the previous link.

tsx

import { Pagination } from "@hummingbirdui/react";

export default function PaginationDisabled() {
  return (
    <Pagination>
      <Pagination.Content>
        <Pagination.Item disabled>
          <Pagination.Link href="#">Prev</Pagination.Link>
        </Pagination.Item>
        <Pagination.Item active>
          <Pagination.Link href="#">1</Pagination.Link>
        </Pagination.Item>
        <Pagination.Item>
          <Pagination.Link href="#">2</Pagination.Link>
        </Pagination.Item>
        <Pagination.Item>
          <Pagination.Link href="#">3</Pagination.Link>
        </Pagination.Item>
        <Pagination.Item>
          <Pagination.Link href="#">Next</Pagination.Link>
        </Pagination.Item>
      </Pagination.Content>
    </Pagination>
  );
}

API Reference

Pagination

The accessible <nav> wrapper. Variant props set here apply to the whole pagination.

PropTypeDefault
size"sm" | "md" | "lg""md"
shape"default" | "circle""default"
variant"filled" | "subtle" | "outlined""filled"
color"primary" | "secondary" | "info" | "success" | "warning" | "danger" | "neutral""primary"
classNamestring

Pagination.Content

The <ul> list of page items.

Pagination.Item

PropTypeDefault
activebooleanfalse
disabledbooleanfalse
classNamestring

Inherits the current-page state from its parent Pagination.Item and sets aria-current="page" automatically.

PropTypeDefault
asChildbooleanfalse
classNamestring

Styling

Hummingbird React pagination is styled entirely through Hummingbird's utility classes and CSS variables.

  • See the full list of available pagination classes in the Class overview.
  • Visit the CSS Variables documentation to explore all available variables.