Paginacja

href to funkcja z numeru strony na URL, więc paginacja działa zarówno dla /blog/2, jak i dla /blog?page=2. To sprawia, że każda strona jest prawdziwym odnośnikiem — indeksowalnym, otwieralnym w nowej karcie i działającym bez JavaScriptu, czyli tym, czego chce witryna statyczna.

Podstawowa paginacja

pagination({ page: 1, count: 5, href: (page) => '#page-' + page })

Okienko

Pierwsza i ostatnia strona są pokazane zawsze, plus okienko wokół bieżącej, z wielokropkiem wszędzie tam, gdzie ciąg przeskakuje.

stack({ gap: 'md' },
  pagination({ page: 1, count: 12, href: (page) => '#a-' + page }),
  pagination({ page: 6, count: 12, href: (page) => '#b-' + page }),
  pagination({ page: 12, count: 12, href: (page) => '#c-' + page }),
)

Sąsiedzi

siblings to liczba stron po obu stronach bieżącej.

stack({ gap: 'md' },
  pagination({ page: 6, count: 12, siblings: 0, href: (page) => '#d-' + page }),
  pagination({ page: 6, count: 12, siblings: 1, href: (page) => '#e-' + page }),
  pagination({ page: 6, count: 12, siblings: 3, href: (page) => '#f-' + page }),
)

Końce

Poprzednia jest wyłączona na pierwszej stronie, a następna na ostatniej, więc kontrolka nigdy nie proponuje strony, która nie istnieje.

stack({ gap: 'md' },
  pagination({ page: 1, count: 3, href: (page) => '#g-' + page }),
  pagination({ page: 3, count: 3, href: (page) => '#h-' + page }),
  pagination({ page: 1, count: 1, href: (page) => '#i-' + page }),
)

Kolory i etykiety

stack({ gap: 'md' },
  pagination({ page: 3, count: 6, color: 'neutral', href: (page) => '#j-' + page }),
  pagination({
    page: 3,
    count: 6,
    color: 'success',
    previousLabel: 'Nowsze',
    nextLabel: 'Starsze',
    href: (page) => '#k-' + page,
  }),
)

Bez href

Bez href numery renderują się jako przyciski niosące data-su-page — dla strony, która filtruje w miejscu własnym skryptem. Gdy możesz, wybieraj odnośniki: przeżyją wyłączony JavaScript.

pagination({ page: 2, count: 4 })

Na blogu

Typowy kształt na witrynie statycznej: generateStaticParams tworzy po jednej stronie na wycinek, a href na nie wskazuje.

Pokazano 21–30 z 47

return (() => {
  const posts = 47
  const perPage = 10
  const current = 3

  return stack({ gap: 'md', align: 'center' },
    text({ variant: 'small', tone: 'muted' },
      'Pokazano ' + ((current - 1) * perPage + 1) + '–' + Math.min(current * perPage, posts) + ' z ' + posts,
    ),
    pagination({
      page: current,
      count: Math.ceil(posts / perPage),
      href: (page) => page === 1 ? '#blog' : '#blog-' + page,
    }),
  )
})()

Propsy

PropTypDomyślnieOpis
pagenumber1Bieżąca strona. Przycinana do zakresu.
countnumber1Ile jest stron.
href(page: number) => string—Z numeru strony na URL. Bez tego strony renderują się jako przyciski.
siblingsnumber1Strony pokazane po obu stronach bieżącej.
color'primary' | 'neutral' | 'success' | 'warning' | 'danger''primary'Kolor bieżącej strony.
labelstring'Pagination'Dostępna nazwa punktu orientacyjnego nav.
previousLabelChild'‹'Treść kontrolki wstecz.
nextLabelChild'›'Treść kontrolki naprzód.