UNPKG

@transkripid/flowbite-react

Version:

Official React components built for Flowbite and Tailwind CSS - Transkrip.id fork

1 lines 7.27 kB
{"version":3,"file":"Pagination.mjs","sources":["../../../src/components/Pagination/Pagination.tsx"],"sourcesContent":["import type { ComponentProps, FC, ReactNode } from 'react';\nimport { HiChevronLeft, HiChevronRight } from 'react-icons/hi';\nimport { twMerge } from 'tailwind-merge';\nimport { mergeDeep } from '../../helpers/merge-deep';\nimport { getTheme } from '../../theme-store';\nimport type { DeepPartial } from '../../types';\nimport type { FlowbitePaginationButtonTheme, PaginationButtonProps } from './PaginationButton';\nimport { PaginationButton, PaginationNavigation } from './PaginationButton';\nimport { range } from './helpers';\n\nexport interface FlowbitePaginationTheme {\n base: string;\n layout: FlowbitePaginationLayoutTheme;\n pages: FlowbitePaginationPagesTheme;\n}\n\nexport interface FlowbitePaginationRootTheme {\n base: string;\n}\n\nexport interface FlowbitePaginationLayoutTheme {\n table: {\n base: string;\n span: string;\n };\n}\n\nexport interface FlowbitePaginationPagesTheme {\n base: string;\n showIcon: string;\n previous: FlowbitePaginationNavigationTheme;\n next: FlowbitePaginationNavigationTheme;\n selector: FlowbitePaginationButtonTheme;\n}\n\nexport interface FlowbitePaginationNavigationTheme {\n base: string;\n icon: string;\n}\n\nexport interface PaginationProps extends ComponentProps<'nav'> {\n currentPage: number;\n layout?: 'navigation' | 'pagination' | 'table';\n nextLabel?: string;\n onPageChange: (page: number) => void;\n previousLabel?: string;\n renderPaginationButton?: (props: PaginationButtonProps) => ReactNode;\n showIcons?: boolean;\n theme?: DeepPartial<FlowbitePaginationTheme>;\n totalPages: number;\n}\n\nconst PaginationComponent: FC<PaginationProps> = ({\n className,\n currentPage,\n layout = 'pagination',\n nextLabel = 'Next',\n onPageChange,\n previousLabel = 'Previous',\n renderPaginationButton = (props) => <PaginationButton {...props} />,\n showIcons: showIcon = false,\n theme: customTheme = {},\n totalPages,\n ...props\n}) => {\n const theme = mergeDeep(getTheme().pagination, customTheme);\n\n const lastPage = Math.min(Math.max(layout === 'pagination' ? currentPage + 2 : currentPage + 4, 5), totalPages);\n const firstPage = Math.max(1, lastPage - 4);\n\n const goToNextPage = (): void => {\n onPageChange(Math.min(currentPage + 1, totalPages));\n };\n\n const goToPreviousPage = (): void => {\n onPageChange(Math.max(currentPage - 1, 1));\n };\n\n return (\n <nav className={twMerge(theme.base, className)} {...props}>\n {layout === 'table' && (\n <div className={theme.layout.table.base}>\n Showing <span className={theme.layout.table.span}>{firstPage}</span> to&nbsp;\n <span className={theme.layout.table.span}>{lastPage}</span> of&nbsp;\n <span className={theme.layout.table.span}>{totalPages}</span> Entries\n </div>\n )}\n <ul className={theme.pages.base}>\n <li>\n <PaginationNavigation\n className={twMerge(theme.pages.previous.base, showIcon && theme.pages.showIcon)}\n onClick={goToPreviousPage}\n disabled={currentPage === 1}\n >\n {showIcon && <HiChevronLeft aria-hidden className={theme.pages.previous.icon} />}\n {previousLabel}\n </PaginationNavigation>\n </li>\n {layout === 'pagination' &&\n range(firstPage, lastPage).map((page: number) => (\n <li aria-current={page === currentPage ? 'page' : undefined} key={page}>\n {renderPaginationButton({\n className: twMerge(theme.pages.selector.base, currentPage === page && theme.pages.selector.active),\n active: page === currentPage,\n onClick: () => onPageChange(page),\n children: page,\n })}\n </li>\n ))}\n <li>\n <PaginationNavigation\n className={twMerge(theme.pages.next.base, showIcon && theme.pages.showIcon)}\n onClick={goToNextPage}\n disabled={currentPage === totalPages}\n >\n {nextLabel}\n {showIcon && <HiChevronRight aria-hidden className={theme.pages.next.icon} />}\n </PaginationNavigation>\n </li>\n </ul>\n </nav>\n );\n};\n\nPaginationComponent.displayName = 'Pagination';\n\nexport const Pagination = Object.assign(PaginationComponent, {\n Button: PaginationButton,\n});\n"],"names":["PaginationComponent","className","currentPage","layout","nextLabel","onPageChange","previousLabel","renderPaginationButton","props","jsx","PaginationButton","showIcons","showIcon","theme","customTheme","totalPages","mergeDeep","getTheme","pagination","lastPage","Math","min","max","firstPage","goToNextPage","goToPreviousPage","jsxs","twMerge","base","table","span","pages","PaginationNavigation","previous","HiChevronLeft","icon","range","map","page","undefined","selector","active","onClick","children","next","HiChevronRight","displayName","Pagination","Object","assign","Button"],"mappings":"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"}