{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "use-pagination",
  "title": "UsePagination",
  "description": "Hook for controlling list pagination.",
  "files": [
    {
      "path": "registry/hooks/use-pagination.tsx",
      "content": "'use client';\n\nimport { useCallback, useEffect, useMemo, useState } from 'react';\n\n// Types for options and return value\ninterface UsePaginationOptions {\n  initialPage?: number;\n  initialPageSize?: number;\n}\n\nexport interface UsePaginationResult {\n  page: number;\n  pageSize: number;\n  totalPages: number;\n  setPage: (page: number) => void;\n  nextPage: () => void;\n  prevPage: () => void;\n  setPageSize: (size: number) => void;\n}\n\nexport function usePagination(\n  totalItems: number,\n  options: UsePaginationOptions = {},\n): UsePaginationResult {\n  const { initialPage = 1, initialPageSize = 10 } = options;\n\n  const [page, setPageState] = useState<number>(initialPage);\n  const [pageSize, setPageSizeState] = useState<number>(initialPageSize);\n\n  const totalPages = useMemo(\n    () => Math.max(1, Math.ceil(totalItems / pageSize)),\n    [totalItems, pageSize],\n  );\n\n  useEffect(() => {\n    // Ensure current page is within bounds when totalPages changes\n    setPageState((current) => Math.min(current, totalPages));\n  }, [totalPages]);\n\n  const setPage = useCallback(\n    (newPage: number) => {\n      setPageState((prev) => Math.max(1, Math.min(newPage, totalPages)));\n    },\n    [totalPages],\n  );\n\n  const nextPage = useCallback(() => {\n    setPage(page + 1);\n  }, [page, setPage]);\n\n  const prevPage = useCallback(() => {\n    setPage(page - 1);\n  }, [page, setPage]);\n\n  const setPageSize = useCallback((newSize: number) => {\n    setPageSizeState(newSize);\n  }, []);\n\n  return {\n    page,\n    pageSize,\n    totalPages,\n    setPage,\n    nextPage,\n    prevPage,\n    setPageSize,\n  };\n}\n",
      "type": "registry:hook",
      "target": "hooks/guarahooks/use-pagination.tsx"
    }
  ],
  "categories": [
    "state-management"
  ],
  "type": "registry:hook"
}