{"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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"}