Logo

Pagination

Pagination enables navigation through large datasets by dividing content into pages. It provides controls for page navigation and can display current page information.

Standalone

If the itemCount property is provided, the component shows information about the number of entries shown per page, the total number of entries, as well as the current page index:
<App>
  <Pagination itemCount="100" pageSize="10" />
</App>
<App>
  <Pagination itemCount="100" pageSize="10" />
</App>
If not, the hasPrevPage and hasNextPage properties can be used to control the enabled/disabled state of the previous and next buttons, while only the previous and next buttons are displayed:
<App>
  <Pagination hasPrevPage="true" hasNextPage="true" />
</App>
<App>
  <Pagination hasPrevPage="true" hasNextPage="true" />
</App>

Integrations

Table

Pagination has first-class support in the Table component. Pagination is controlled via the isPaginated, pageSize, pageSizeOptions and paginationControlsLocation properties.
<Table data="/api" isPaginated pageSize="5" pageSizeOptions="{[5, 10, 20]}">
  <Column header="ID" bindTo="elem" width="80px">
    <!-- ... -->
  </Column>
  <!-- ... -->
</Table>
See the Table reference for a working example.

List

The List is a perfect example of a component that does not implement its own pagination. Thus, use the Pagination with a Datasource component and connect them to the List:
<DataSource id="ds" url="/api" queryParams="{{ from: before, to: after }}" />
<Pagination
  itemCount="20"
  pageSize="{pageSize}"
  pageIndex="{currentPage}"
  onPageDidChange="(page, size, total) => {
    currentPage = page;
    before = page * size;
    after = before + size - 1;
  }"
/>
<List data="{ds}" />
For a comprehensive example, see How to paginate a List.

Properties

buttonRowPosition (default: "center")

Determines where to place the pagination button row in the layout.
Available values: start, center (default), end

enabled (default: true)

This boolean property value indicates whether the component responds to user events (true) or not (false).

hasNextPage

Whether to disable the next page button. Only takes effect if itemCount is not provided.

hasPrevPage

Whether to disable the previous page button. Only takes effect if itemCount is not provided.

itemCount

Total number of items to paginate. If not provided, the component renders simplified pagination controls that are enabled/disabled using the hasPrevPage and hasNextPage props.

maxVisiblePages (default: 1)

Maximum number of page buttons to display

orientation

Layout orientation of the pagination component
Available values:
ValueDescription
horizontalThe component will fill the available space horizontally
verticalThe component will fill the available space vertically

pageIndex (default: 0)

Current page index (0-based)

pageInfoPosition

Determines where to place the page information in the layout.

pageSize (default: 10)

Number of items per page

pageSizeOptions

Array of page sizes the user can select from. If provided, shows a page size selector dropdown

pageSizeSelectorPosition

Determines where to place the page size selector in the layout.

showCurrentPage (default: true)

Whether to show the current page indicator

showPageInfo (default: true)

Whether to show page information

showPageSizeSelector (default: true)

Whether to show the page size selector

Events

pageDidChange

Fired when the current page changes

pageSizeDidChange

Fired when the page size changes

Exposed Methods

currentPage

Gets the current page number (1-based)

currentPageSize

Gets the current page size

moveFirst

Moves to the first page
Signature: moveFirst(): void

moveLast

Moves to the last page
Signature: moveLast(): void

moveNext

Moves to the next page
Signature: moveNext(): void

movePrev

Moves to the previous page
Signature: movePrev(): void

Styling

Theme Variables

VariableDefault Value (Light)Default Value (Dark)
backgroundColor-Paginationtransparenttransparent
backgroundColor-selector-Paginationtransparenttransparent
borderColor-Pagination$color-gray-300$color-gray-300
borderRadius-selector-Pagination$borderRadius$borderRadius
gap-buttonRow-Pagination$space-2$space-2
padding-Pagination$space-4$space-4
textColor-Pagination$color-gray-600$color-gray-600
textColor-selector-Pagination$color-gray-600$color-gray-600
This site is an XMLUI™ app.