{"version":3,"sources":["../../../src/utils/validation.ts","../../../src/hooks/pagination/utils.ts","../../../src/hooks/pagination/usePagination.ts"],"names":["clamp","value","min","max","calculateTotalPages","totalItems","pageSize","calculateOffset","page","normalizePage","totalPages","getPageNumbers","currentPage","maxVisible","_","i","halfVisible","start","end","usePagination","options","defaultPage","defaultPageSize","initialTotalItems","pageKey","pageSizeKey","resetPageOnSizeChange","history","scroll","shallow","setTotalItems","useState","state","setState","useQueryStates","parseAsInteger","useMemo","normalizedPage","offset","hasPrevPage","hasNextPage","isFirstPage","isLastPage","setPage","useCallback","newPage","validPage","setPageSize","newSize","validSize","updates","nextPage","prevPage","firstPage","lastPage","goToPage","targetPage","getPageNumbersCallback"],"mappings":"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","file":"index.cjs","sourcesContent":["export function clamp(value: number, min: number, max: number): number {\n  return Math.min(Math.max(value, min), max)\n}\n\nexport function isValidNumber(value: unknown): value is number {\n  return typeof value === 'number' && !Number.isNaN(value) && Number.isFinite(value)\n}\n\nexport function isValidDate(date: unknown): date is Date {\n  return date instanceof Date && !Number.isNaN(date.getTime())\n}\n","import { clamp } from '../../utils'\n\nexport function calculateTotalPages(totalItems: number, pageSize: number): number {\n  if (totalItems <= 0 || pageSize <= 0) return 1\n  return Math.ceil(totalItems / pageSize)\n}\n\nexport function calculateOffset(page: number, pageSize: number): number {\n  return (page - 1) * pageSize\n}\n\nexport function normalizePage(page: number, totalPages?: number): number {\n  if (totalPages !== undefined) {\n    return clamp(page, 1, Math.max(1, totalPages))\n  }\n  return Math.max(1, page)\n}\n\nexport function getPageNumbers(currentPage: number, totalPages: number, maxVisible = 7): number[] {\n  if (totalPages <= maxVisible) {\n    return Array.from({ length: totalPages }, (_, i) => i + 1)\n  }\n\n  const halfVisible = Math.floor(maxVisible / 2)\n  let start = currentPage - halfVisible\n  let end = currentPage + halfVisible\n\n  if (start < 1) {\n    end += 1 - start\n    start = 1\n  }\n\n  if (end > totalPages) {\n    start -= end - totalPages\n    end = totalPages\n  }\n\n  start = Math.max(1, start)\n  end = Math.min(totalPages, end)\n\n  return Array.from({ length: end - start + 1 }, (_, i) => start + i)\n}\n","import { parseAsInteger, useQueryStates } from 'nuqs'\nimport { useCallback, useMemo, useState } from 'react'\nimport type { UsePaginationOptions, UsePaginationResult } from './types'\nimport { calculateOffset, calculateTotalPages, getPageNumbers, normalizePage } from './utils'\n\nexport function usePagination(options: UsePaginationOptions = {}): UsePaginationResult {\n  const {\n    defaultPage = 1,\n    defaultPageSize = 10,\n    totalItems: initialTotalItems,\n    pageKey = 'page',\n    pageSizeKey = 'pageSize',\n    resetPageOnSizeChange = true,\n    history = 'replace',\n    scroll = false,\n    shallow = true,\n  } = options\n\n  const [totalItems, setTotalItems] = useState(initialTotalItems)\n\n  const [state, setState] = useQueryStates(\n    {\n      [pageKey]: parseAsInteger.withDefault(defaultPage),\n      [pageSizeKey]: parseAsInteger.withDefault(defaultPageSize),\n    },\n    {\n      history,\n      scroll,\n      shallow,\n    }\n  )\n\n  const page = state[pageKey] ?? defaultPage\n  const pageSize = state[pageSizeKey] ?? defaultPageSize\n\n  const totalPages = useMemo(\n    () => (totalItems !== undefined ? calculateTotalPages(totalItems, pageSize) : undefined),\n    [totalItems, pageSize]\n  )\n\n  const normalizedPage = useMemo(() => normalizePage(page, totalPages), [page, totalPages])\n\n  const offset = useMemo(\n    () => calculateOffset(normalizedPage, pageSize),\n    [normalizedPage, pageSize]\n  )\n\n  const hasPrevPage = normalizedPage > 1\n  const hasNextPage = totalPages !== undefined ? normalizedPage < totalPages : true\n  const isFirstPage = normalizedPage === 1\n  const isLastPage = totalPages !== undefined ? normalizedPage === totalPages : false\n\n  const setPage = useCallback(\n    (newPage: number) => {\n      const validPage = normalizePage(newPage, totalPages)\n      setState({ [pageKey]: validPage })\n    },\n    [setState, totalPages, pageKey]\n  )\n\n  const setPageSize = useCallback(\n    (newSize: number) => {\n      const validSize = Math.max(1, newSize)\n      const updates: Record<string, number> = { [pageSizeKey]: validSize }\n\n      if (resetPageOnSizeChange) {\n        updates[pageKey] = 1\n      }\n\n      setState(updates)\n    },\n    [setState, resetPageOnSizeChange, pageKey, pageSizeKey]\n  )\n\n  const nextPage = useCallback(() => {\n    if (hasNextPage) {\n      setPage(normalizedPage + 1)\n    }\n  }, [hasNextPage, normalizedPage, setPage])\n\n  const prevPage = useCallback(() => {\n    if (hasPrevPage) {\n      setPage(normalizedPage - 1)\n    }\n  }, [hasPrevPage, normalizedPage, setPage])\n\n  const firstPage = useCallback(() => {\n    setPage(1)\n  }, [setPage])\n\n  const lastPage = useCallback(() => {\n    if (totalPages !== undefined) {\n      setPage(totalPages)\n    }\n  }, [totalPages, setPage])\n\n  const goToPage = useCallback(\n    (targetPage: number) => {\n      setPage(targetPage)\n    },\n    [setPage]\n  )\n\n  const getPageNumbersCallback = useCallback(() => {\n    if (totalPages === undefined) return []\n    return getPageNumbers(normalizedPage, totalPages)\n  }, [normalizedPage, totalPages])\n\n  return {\n    page: normalizedPage,\n    pageSize,\n    totalPages,\n    offset,\n    hasNextPage,\n    hasPrevPage,\n    isFirstPage,\n    isLastPage,\n    setPage,\n    setPageSize,\n    setTotalItems,\n    nextPage,\n    prevPage,\n    firstPage,\n    lastPage,\n    goToPage,\n    getPageNumbers: getPageNumbersCallback,\n    isPending: false,\n  }\n}\n"]}