{"version":3,"file":"index9.cjs","sources":["../src/components/pagination/index.tsx"],"sourcesContent":["import React, { useState } from \"react\";\nimport PaginationAtom from \"../../atoms/pagination\";\nimport styles from \"./Pagination.module.css\";\nimport {\n  LabelPairedChevronLeftSmBoldIcon,\n  LabelPairedChevronLeftSmRegularIcon,\n  LabelPairedChevronRightSmRegularIcon,\n} from \"@deriv/quill-icons\";\n\nexport type PaginationVariant = \"number\" | \"bullet\";\n\nexport interface PaginationProps<T> {\n  data: T[];\n  itemsPerPage?: number;\n  currentPage?: number; // controlled\n  defaultPage?: number; // uncontrolled\n  onPageChange?: (page: number) => void;\n  variant?: PaginationVariant;\n  renderItem: (item: T, index: number) => React.ReactNode;\n  className?: string;\n  itemsClassName?: string;\n}\n\nexport const Pagination = <T,>({\n  data,\n  itemsPerPage = 10,\n  currentPage,\n  defaultPage = 1,\n  onPageChange,\n  variant = \"number\",\n  renderItem,\n  className = \"\",\n  itemsClassName = \"\",\n}: PaginationProps<T>) => {\n  const totalPages = Math.ceil(data.length / itemsPerPage);\n  const isControlled = currentPage !== undefined;\n  const [internalPage, setInternalPage] = useState(defaultPage);\n  const page = isControlled ? currentPage! : internalPage;\n\n  const handlePageChange = (newPage: number) => {\n    if (!isControlled) setInternalPage(newPage);\n    onPageChange?.(newPage);\n  };\n\n  const startIdx = (page - 1) * itemsPerPage;\n  const endIdx = startIdx + itemsPerPage;\n  const pageData = data.slice(startIdx, endIdx);\n\n  const getPageButtons = () => {\n    if (variant === \"bullet\" || totalPages <= 5) {\n      return Array.from({ length: totalPages }, (_, i) => i + 1);\n    }\n    const pages: (number | string)[] = [];\n    if (page <= 3) {\n      pages.push(1, 2, 3, 4, 5, '...', totalPages);\n    } else if (page >= totalPages - 2) {\n      pages.push(1, '...', totalPages - 4, totalPages - 3, totalPages - 2, totalPages - 1, totalPages);\n    } else {\n      pages.push(1, '...', page - 1, page, page + 1, '...', totalPages);\n    }\n    return pages;\n  };\n\n  return (\n    <div\n      className={[styles.root, className, \"quill-ui-next-component\"]\n        .filter(Boolean)\n        .join(\" \")}\n    >\n      <div className={[styles.items, itemsClassName].filter(Boolean).join(\" \")}>\n        {pageData.map((item, idx) => renderItem(item, startIdx + idx))}\n      </div>\n      <div className={styles.controls}>\n        <PaginationAtom\n          variant=\"button\"\n          icon={<LabelPairedChevronLeftSmRegularIcon />}\n          state={page === 1 ? \"disabled\" : \"default\"}\n          onClick={page > 1 ? () => handlePageChange(page - 1) : undefined}\n        />\n        {getPageButtons().map((btn, idx) => {\n          if (btn === '...') {\n            if (variant !== 'number') return null;\n            return (\n              <PaginationAtom\n                key={`ellipsis-${idx}`}\n                variant=\"page\"\n                label={\"...\"}\n                state={\"disabled\"}\n                onClick={undefined}\n              />\n            );\n          }\n          const pageNum = btn as number;\n          return (\n            <PaginationAtom\n              key={pageNum}\n              variant={variant === \"number\" ? \"page\" : variant}\n              label={variant === \"number\" ? String(pageNum) : undefined}\n              state={page === pageNum ? \"selected\" : \"default\"}\n              onClick={page !== pageNum ? () => handlePageChange(pageNum) : undefined}\n            />\n          );\n        })}\n        <PaginationAtom\n          variant=\"button\"\n          icon={<LabelPairedChevronRightSmRegularIcon />}\n          state={page === totalPages ? \"disabled\" : \"default\"}\n          onClick={\n            page < totalPages ? () => handlePageChange(page + 1) : undefined\n          }\n        />\n      </div>\n    </div>\n  );\n};\n\nPagination.displayName = \"Pagination\";\n\nexport default Pagination;\n"],"names":["useState","jsxs","styles","jsx","PaginationAtom","LabelPairedChevronLeftSmRegularIcon","LabelPairedChevronRightSmRegularIcon"],"mappings":"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"}