UNPKG

flowbite-react

Version:

Official React components built for Flowbite and Tailwind CSS

1 lines 8.61 kB
{"version":3,"file":"Pagination.cjs","sources":["../../../src/components/Pagination/Pagination.tsx"],"sourcesContent":["\"use client\";\n\nimport { forwardRef, type ComponentProps, type ReactNode } from \"react\";\nimport { get } from \"../../helpers/get\";\nimport { resolveProps } from \"../../helpers/resolve-props\";\nimport { useResolveTheme } from \"../../helpers/resolve-theme\";\nimport { twMerge } from \"../../helpers/tailwind-merge\";\nimport { ChevronLeftIcon } from \"../../icons/chevron-left-icon\";\nimport { ChevronRightIcon } from \"../../icons/chevron-right-icon\";\nimport { useThemeProvider } from \"../../theme/provider\";\nimport type { ThemingProps } from \"../../types\";\nimport { range } from \"./helpers\";\nimport type { PaginationButtonProps, PaginationButtonTheme } from \"./PaginationButton\";\nimport { PaginationButton, PaginationNavigation } from \"./PaginationButton\";\nimport { paginationTheme } from \"./theme\";\n\nexport interface PaginationTheme {\n base: string;\n layout: PaginationLayoutTheme;\n pages: PaginationPagesTheme;\n}\n\nexport interface PaginationRootTheme {\n base: string;\n}\n\nexport interface PaginationLayoutTheme {\n table: {\n base: string;\n span: string;\n };\n}\n\nexport interface PaginationPagesTheme {\n base: string;\n showIcon: string;\n previous: PaginationNavigationTheme;\n next: PaginationNavigationTheme;\n selector: PaginationButtonTheme;\n}\n\nexport interface PaginationNavigationTheme {\n base: string;\n icon: string;\n}\n\nexport interface PaginationProps extends ComponentProps<\"nav\">, ThemingProps<PaginationTheme> {\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 totalPages: number;\n}\n\nexport const Pagination = forwardRef<HTMLElement, PaginationProps>((props, ref) => {\n const provider = useThemeProvider();\n const theme = useResolveTheme(\n [paginationTheme, provider.theme?.pagination, props.theme],\n [get(provider.clearTheme, \"pagination\"), props.clearTheme],\n [get(provider.applyTheme, \"pagination\"), props.applyTheme],\n );\n\n const {\n className,\n currentPage,\n layout = \"pagination\",\n nextLabel = \"Next\",\n onPageChange,\n previousLabel = \"Previous\",\n renderPaginationButton = (props: PaginationButtonProps) => <PaginationButton {...props} />,\n showIcons: showIcon = false,\n totalPages,\n ...restProps\n } = resolveProps(props, provider.props?.pagination);\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 function goToNextPage() {\n onPageChange(Math.min(currentPage + 1, totalPages));\n }\n\n function goToPreviousPage() {\n onPageChange(Math.max(currentPage - 1, 1));\n }\n\n return (\n <nav ref={ref} className={twMerge(theme.base, className)} {...restProps}>\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 && <ChevronLeftIcon 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 && <ChevronRightIcon aria-hidden className={theme.pages.next.icon} />}\n </PaginationNavigation>\n </li>\n </ul>\n </nav>\n );\n});\n\nPagination.displayName = \"Pagination\";\n"],"names":["forwardRef","provider","useThemeProvider","theme","useResolveTheme","paginationTheme","get","jsx","PaginationButton","resolveProps","jsxs","twMerge","PaginationNavigation","ChevronLeftIcon","range","ChevronRightIcon"],"mappings":"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"}