Skip to main content
You are viewing Pre-Alpha documentation.
Vuetify0 Logo
Theme
Mode
Accessibility
Vuetify

Pagination

A headless component for creating page navigation with proper ARIA support.


Renders elementIntermediate100% coverageJan 30, 2026

Usage

The Pagination component provides a compound component pattern for building page navigation interfaces. It uses the createPagination and createOverflow composable internally.

<script setup lang="ts">
  import { Pagination } from '@vuetify/v0'
  import { shallowRef } from 'vue'

  const model = shallowRef(4)
</script>

<template>
  <Pagination.Root
    v-slot="{ items }"
    v-model="model"
    class="flex items-center justify-center gap-1"
    :size="200"
  >
    <Pagination.First class="w-9 h-9 rounded border border-divider flex items-center justify-center bg-surface hover:bg-surface-tint data-[disabled]:opacity-50 data-[disabled]:cursor-not-allowed">
      «
    </Pagination.First>

    <Pagination.Prev class="w-9 h-9 rounded border border-divider flex items-center justify-center bg-surface hover:bg-surface-tint data-[disabled]:opacity-50 data-[disabled]:cursor-not-allowed">
      ‹
    </Pagination.Prev>

    <template v-for="(item, index) in items" :key="index">
      <Pagination.Ellipsis
        v-if="item.type === 'ellipsis'"
        class="w-9 h-9 flex items-center justify-center text-on-surface opacity-60"
      />

      <Pagination.Item
        v-else
        class="w-9 h-9 rounded border border-divider flex items-center justify-center bg-surface hover:bg-surface-tint data-[selected]:bg-primary data-[selected]:text-on-primary data-[selected]:border-primary data-[selected]:hover:bg-primary"
        :value="item.value as number"
      >
        {{ item.value }}
      </Pagination.Item>
    </template>

    <Pagination.Next class="w-9 h-9 rounded border border-divider flex items-center justify-center bg-surface hover:bg-surface-tint data-[disabled]:opacity-50 data-[disabled]:cursor-not-allowed">
      ›
    </Pagination.Next>

    <Pagination.Last class="w-9 h-9 rounded border border-divider flex items-center justify-center bg-surface hover:bg-surface-tint data-[disabled]:opacity-50 data-[disabled]:cursor-not-allowed">
      »
    </Pagination.Last>
  </Pagination.Root>
</template>

Anatomy

Anatomy
<script setup lang="ts">
  import { Pagination } from '@vuetify/v0'
</script>

<template>
  <Pagination.Root>
    <Pagination.Status />

    <Pagination.First />

    <Pagination.Prev />

    <Pagination.Ellipsis />

    <Pagination.Item />

    <Pagination.Next />

    <Pagination.Last />
  </Pagination.Root>
</template>
Warning

For responsive sizing to work accurately, all pagination buttons must have the same width. The component measures a sample button and uses that width to calculate how many buttons fit. If buttons have variable widths (e.g., single-digit “1” vs double-digit “50”), the calculation will be inaccurate and items may overflow or leave excess space.

API Reference

The following API details are for all variations of the Pagination component.

Pagination.Root

Props

namespace

string

Namespace for dependency injection

Default: "v0:pagination"

size

number

Total number of items

Default: 1

totalVisible

number

Number of visible page buttons. If undefined, auto-calculates based on container width.

itemsPerPage

number

Number of items per page

Default: 10

ellipsis

string | false

Ellipsis character

Default: "..."

modelValue

number

Default: 1

Events

Slots

default

PaginationRootSlotProps

Pagination.Ellipsis

Props

namespace

string

Namespace for dependency injection

Default: "v0:pagination"

ellipsis

string

Ellipsis character to display (overrides context)

id

string

Unique identifier for registration

Default: useId()

Slots

default

PaginationEllipsisSlotProps

Pagination.First

Props

namespace

string

Namespace for dependency injection

Default: "v0:pagination"

disabled

boolean

Override disabled state

id

string

Unique identifier for registration

Default: useId()

Slots

default

PaginationFirstSlotProps

Pagination.Item

Props

namespace

string

Namespace for dependency injection

Default: "v0:pagination"

value required

number

Page number this item represents

disabled

boolean

Override disabled state

Default: false

id

string

Unique identifier for registration

Default: useId()

Slots

default

PaginationItemSlotProps

Pagination.Last

Props

namespace

string

Namespace for dependency injection

Default: "v0:pagination"

disabled

boolean

Override disabled state

id

string

Unique identifier for registration

Default: useId()

Slots

default

PaginationLastSlotProps

Pagination.Next

Props

namespace

string

Namespace for dependency injection

Default: "v0:pagination"

disabled

boolean

Override disabled state

id

string

Unique identifier for registration

Default: useId()

Slots

default

PaginationNextSlotProps

Pagination.Prev

Props

namespace

string

Namespace for dependency injection

Default: "v0:pagination"

disabled

boolean

Override disabled state

id

string

Unique identifier for registration

Default: useId()

Slots

default

PaginationPrevSlotProps

Pagination.Status

Props

namespace

string

Namespace for dependency injection

Default: "v0:pagination"

Slots

default

PaginationStatusSlotProps
Was this page helpful?

© 2016-1970 Vuetify, LLC
Ctrl+/