import "./Pagination.css"; const getPageNumbers = ( currentPage: number, totalPages: number, siblingCount: number, ): (number | string)[] => { const totalShown = 2 * siblingCount + 5; if (totalPages <= totalShown) { return Array.from({ length: totalPages }, (_, i) => i + 1); } const left = Math.max(2, currentPage - siblingCount); const right = Math.min(totalPages - 1, currentPage + siblingCount); const pages: (number | string)[] = [1]; if (left > 2) pages.push("left-ellipsis"); for (let i = left; i <= right; i++) pages.push(i); if (right < totalPages - 1) pages.push("right-ellipsis"); pages.push(totalPages); return pages; }; interface PaginationProps { currentPage: number; totalPages: number; onPageChange: (page: number) => void; siblingCount?: number; showFirstLast?: boolean; className?: string; } const Pagination = ({ currentPage, totalPages, onPageChange, siblingCount = 1, showFirstLast = true, className, }: PaginationProps) => { if (totalPages < 2) return null; const pages = getPageNumbers(currentPage, totalPages, siblingCount); const classNames = `pagination${className ? ` ${className}` : ""}`; return ( ); }; export default Pagination;