import Link from 'next/link'; import { ChevronLeft, ChevronRight } from 'lucide-react'; import { cn } from '@/lib/format'; /** URL-driven pagination: keeps every other search param. Touch targets ≥ 44 px on mobile. */ export function Pagination({ page, pageSize, total, basePath, params, className }: { page: number; pageSize: number; total: number; basePath: string; params: Record; className?: string }) { const pages = Math.max(1, Math.ceil(total / pageSize)); if (pages <= 1) return null; const href = (p: number) => { const sp = new URLSearchParams(); for (const [k, v] of Object.entries(params)) if (v) sp.set(k, v); if (p > 1) sp.set('page', String(p)); else sp.delete('page'); const qs = sp.toString(); return qs ? `${basePath}?${qs}` : basePath; }; const from = (page - 1) * pageSize + 1; const to = Math.min(total, page * pageSize); const btn = 'inline-flex h-10 min-w-[44px] items-center justify-center gap-1 rounded-md border border-border bg-elevated px-3 text-xs font-medium hover:bg-sunken aria-disabled:pointer-events-none aria-disabled:opacity-40 md:h-8 md:min-w-0'; const around: number[] = []; for (let p = Math.max(1, page - 2); p <= Math.min(pages, page + 2); p++) around.push(p); return ( ); }