"use client"; import * as React from "react"; import { cn } from "./lib/utils"; export interface PaginationV2Props extends React.HTMLAttributes { totalPages: number; page?: number; defaultPage?: number; onPageChange?: (page: number) => void; /** Show infinite scroll indicator */ infiniteHint?: boolean; } /** Hybrid pagination: page numbers + infinite scroll indicator. */ export function PaginationV2({ totalPages, page, defaultPage = 1, onPageChange, infiniteHint, className, ...props }: PaginationV2Props) { const [internal, setInternal] = React.useState(defaultPage); const current = page ?? internal; const go = (p: number) => { const clamped = Math.max(1, Math.min(totalPages, p)); setInternal(clamped); onPageChange?.(clamped); }; const pages = React.useMemo(() => { if (totalPages <= 7) return Array.from({ length: totalPages }, (_, i) => i + 1); const set = new Set([1, 2, current - 1, current, current + 1, totalPages - 1, totalPages]); const sorted = [...set].filter((p) => p >= 1 && p <= totalPages).sort((a, b) => a - b); const out: (number | "…")[] = []; let prev = 0; for (const p of sorted) { if (p - prev > 1) out.push("…"); out.push(p); prev = p; } return out; }, [totalPages, current]); return ( ); }