{"version":3,"sources":["../src/utils/date.ts","../src/hooks/date-range/presets.ts","../src/hooks/date-range/utils.ts","../src/hooks/date-range/useDateRange.ts","../src/hooks/filtering/utils.ts","../src/hooks/filtering/useFilters.ts","../src/hooks/multi-select/utils.ts","../src/hooks/multi-select/useMultiSelect.ts","../src/utils/debounce.ts","../src/utils/validation.ts","../src/hooks/pagination/utils.ts","../src/hooks/pagination/usePagination.ts","../src/hooks/search/useSearch.ts","../src/hooks/sorting/utils.ts","../src/hooks/sorting/useSorting.ts","../src/hooks/tabs/useTabs.ts"],"names":["startOfDay","date","newDate","endOfDay","addDays","days","result","startOfMonth","endOfMonth","daysBetween","start","end","getTodayRange","today","getYesterdayRange","yesterday","getLast7DaysRange","getLast30DaysRange","getThisMonthRange","getLastMonthRange","lastMonth","parseDate","value","format","timestamp","serializeDate","isValidRange","minDate","maxDate","maxDays","PRESETS","useDateRange","options","defaultPreset","startKey","endKey","presetKey","history","scroll","shallow","state","setState","useQueryStates","parseAsString","parseAsStringLiteral","startDate","useMemo","endDate","preset","isValid","daysDifference","setStartDate","useCallback","setEndDate","setRange","setPreset","newPreset","range","clearRange","presets","countActiveFilters","filters","useFilters","parsers","onChange","setFiltersState","hasFilters","activeCount","setFilter","key","newFilters","setFilters","updates","merged","removeFilter","clearFilters","toggleFilter","getFilterValues","isFilterActive","currentValue","parseSelection","separator","item","serializeSelection","items","addItem","maxSelection","removeItem","i","useMultiSelect","defaultSelected","allItems","rawValue","setRawValue","useQueryState","selected","count","isEmpty","isAllSelected","setSelected","ids","limitedIds","select","id","newSelection","deselect","toggle","selectAll","itemsToSelect","deselectAll","isSelected","useDebounce","delay","debouncedValue","setDebouncedValue","useState","useEffect","handler","clamp","min","max","isValidNumber","isValidDate","calculateTotalPages","totalItems","pageSize","calculateOffset","page","normalizePage","totalPages","getPageNumbers","currentPage","maxVisible","_","halfVisible","usePagination","defaultPage","defaultPageSize","initialTotalItems","pageKey","pageSizeKey","resetPageOnSizeChange","setTotalItems","parseAsInteger","normalizedPage","offset","hasPrevPage","hasNextPage","isFirstPage","isLastPage","setPage","newPage","validPage","setPageSize","newSize","validSize","nextPage","prevPage","firstPage","lastPage","goToPage","targetPage","getPageNumbersCallback","useSearch","defaultQuery","debounce","minLength","trim","queryKey","onSearch","rawQuery","setRawQuery","query","debouncedQuery","isSearching","isDebouncing","setQuery","newQuery","clearQuery","getNextSortOrder","currentColumn","targetColumn","currentOrder","getSortIndicator","order","useSorting","columns","defaultColumn","defaultOrder","sortByKey","sortOrderKey","sortBy","sortOrder","isSorted","setSort","column","toggleSort","next","clearSort","getSortDirection","direction","isSortedBy","useTabs","tabs","defaultTab","tabKey","activeTab","setActiveTab","activeIndex","setTab","tab","setTabByIndex","index","nextTab","nextIndex","prevTab","prevIndex","isActive","getTabIndex"],"mappings":"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","file":"index.cjs","sourcesContent":["export function startOfDay(date: Date): Date {\n  const newDate = new Date(date)\n  newDate.setHours(0, 0, 0, 0)\n  return newDate\n}\n\nexport function endOfDay(date: Date): Date {\n  const newDate = new Date(date)\n  newDate.setHours(23, 59, 59, 999)\n  return newDate\n}\n\nexport function addDays(date: Date, days: number): Date {\n  const result = new Date(date)\n  result.setDate(result.getDate() + days)\n  return result\n}\n\nexport function startOfMonth(date: Date): Date {\n  return new Date(date.getFullYear(), date.getMonth(), 1)\n}\n\nexport function endOfMonth(date: Date): Date {\n  return new Date(date.getFullYear(), date.getMonth() + 1, 0, 23, 59, 59, 999)\n}\n\nexport function daysBetween(start: Date, end: Date): number {\n  const msPerDay = 24 * 60 * 60 * 1000\n  return Math.round(Math.abs((end.getTime() - start.getTime()) / msPerDay))\n}\n","import { addDays, endOfDay, endOfMonth, startOfDay, startOfMonth } from '../../utils/date'\n\nexport function getTodayRange(): [Date, Date] {\n  const today = new Date()\n  return [startOfDay(today), endOfDay(today)]\n}\n\nexport function getYesterdayRange(): [Date, Date] {\n  const yesterday = addDays(new Date(), -1)\n  return [startOfDay(yesterday), endOfDay(yesterday)]\n}\n\nexport function getLast7DaysRange(): [Date, Date] {\n  const end = new Date()\n  const start = addDays(end, -6)\n  return [startOfDay(start), endOfDay(end)]\n}\n\nexport function getLast30DaysRange(): [Date, Date] {\n  const end = new Date()\n  const start = addDays(end, -29)\n  return [startOfDay(start), endOfDay(end)]\n}\n\nexport function getThisMonthRange(): [Date, Date] {\n  const today = new Date()\n  return [startOfMonth(today), endOfMonth(today)]\n}\n\nexport function getLastMonthRange(): [Date, Date] {\n  const today = new Date()\n  const lastMonth = new Date(today.getFullYear(), today.getMonth() - 1, 1)\n  return [startOfMonth(lastMonth), endOfMonth(lastMonth)]\n}\n","import type { DateFormat } from './types'\n\nexport function parseDate(value: string | null, format: DateFormat): Date | null {\n  if (!value) return null\n\n  if (format === 'timestamp') {\n    const timestamp = Number(value)\n    if (Number.isNaN(timestamp)) return null\n    return new Date(timestamp)\n  }\n\n  const date = new Date(value)\n  return Number.isNaN(date.getTime()) ? null : date\n}\n\nexport function serializeDate(date: Date | null, format: DateFormat): string | null {\n  if (!date) return null\n\n  if (format === 'timestamp') {\n    return String(date.getTime())\n  }\n\n  return date.toISOString()\n}\n\nexport function isValidRange(\n  start: Date | null,\n  end: Date | null,\n  minDate?: Date,\n  maxDate?: Date,\n  maxDays?: number\n): boolean {\n  if (!start || !end) return false\n  if (start > end) return false\n  if (minDate && start < minDate) return false\n  if (maxDate && end > maxDate) return false\n\n  if (maxDays !== undefined) {\n    const daysDiff = Math.ceil((end.getTime() - start.getTime()) / (1000 * 60 * 60 * 24))\n    if (daysDiff > maxDays) return false\n  }\n\n  return true\n}\n","import { parseAsString, parseAsStringLiteral, useQueryStates } from 'nuqs'\nimport { useCallback, useMemo } from 'react'\nimport { daysBetween } from '../../utils/date'\nimport {\n  getLast7DaysRange,\n  getLast30DaysRange,\n  getLastMonthRange,\n  getThisMonthRange,\n  getTodayRange,\n  getYesterdayRange,\n} from './presets'\nimport type { DatePreset, UseDateRangeOptions, UseDateRangeResult } from './types'\nimport { isValidRange, parseDate, serializeDate } from './utils'\n\nconst PRESETS = [\n  'today',\n  'yesterday',\n  'last7days',\n  'last30days',\n  'thisMonth',\n  'lastMonth',\n  'custom',\n] as const\n\nexport function useDateRange(options: UseDateRangeOptions = {}): UseDateRangeResult {\n  const {\n    defaultPreset = 'last7days',\n    minDate,\n    maxDate,\n    maxDays,\n    startKey = 'from',\n    endKey = 'to',\n    presetKey = 'range',\n    format = 'iso',\n    history = 'replace',\n    scroll = false,\n    shallow = true,\n  } = options\n\n  const [state, setState] = useQueryStates(\n    {\n      [startKey]: parseAsString,\n      [endKey]: parseAsString,\n      [presetKey]: parseAsStringLiteral(PRESETS).withDefault(defaultPreset),\n    },\n    {\n      history,\n      scroll,\n      shallow,\n    }\n  )\n\n  const startDate = useMemo(\n    () => parseDate(state[startKey] ?? null, format),\n    [state, startKey, format]\n  )\n\n  const endDate = useMemo(() => parseDate(state[endKey] ?? null, format), [state, endKey, format])\n\n  const preset = (state[presetKey] ?? defaultPreset) as DatePreset\n\n  const isValid = useMemo(\n    () => isValidRange(startDate, endDate, minDate, maxDate, maxDays),\n    [startDate, endDate, minDate, maxDate, maxDays]\n  )\n\n  const daysDifference = useMemo(() => {\n    if (!startDate || !endDate) return 0\n    return daysBetween(startDate, endDate)\n  }, [startDate, endDate])\n\n  const setStartDate = useCallback(\n    (date: Date | null) => {\n      setState({\n        [startKey]: serializeDate(date, format),\n        [presetKey]: 'custom',\n      })\n    },\n    [setState, startKey, presetKey, format]\n  )\n\n  const setEndDate = useCallback(\n    (date: Date | null) => {\n      setState({\n        [endKey]: serializeDate(date, format),\n        [presetKey]: 'custom',\n      })\n    },\n    [setState, endKey, presetKey, format]\n  )\n\n  const setRange = useCallback(\n    (start: Date, end: Date) => {\n      setState({\n        [startKey]: serializeDate(start, format),\n        [endKey]: serializeDate(end, format),\n        [presetKey]: 'custom',\n      })\n    },\n    [setState, startKey, endKey, presetKey, format]\n  )\n\n  const setPreset = useCallback(\n    (newPreset: DatePreset) => {\n      let range: [Date, Date] | null = null\n\n      switch (newPreset) {\n        case 'today':\n          range = getTodayRange()\n          break\n        case 'yesterday':\n          range = getYesterdayRange()\n          break\n        case 'last7days':\n          range = getLast7DaysRange()\n          break\n        case 'last30days':\n          range = getLast30DaysRange()\n          break\n        case 'thisMonth':\n          range = getThisMonthRange()\n          break\n        case 'lastMonth':\n          range = getLastMonthRange()\n          break\n        case 'custom':\n          setState({ [presetKey]: 'custom' })\n          return\n      }\n\n      if (range) {\n        setState({\n          [startKey]: serializeDate(range[0], format),\n          [endKey]: serializeDate(range[1], format),\n          [presetKey]: newPreset,\n        })\n      }\n    },\n    [setState, startKey, endKey, presetKey, format]\n  )\n\n  const clearRange = useCallback(() => {\n    setState({\n      [startKey]: null,\n      [endKey]: null,\n      [presetKey]: null,\n    })\n  }, [setState, startKey, endKey, presetKey])\n\n  const presets = useMemo(\n    () => ({\n      today: () => setPreset('today'),\n      yesterday: () => setPreset('yesterday'),\n      last7days: () => setPreset('last7days'),\n      last30days: () => setPreset('last30days'),\n      thisMonth: () => setPreset('thisMonth'),\n      lastMonth: () => setPreset('lastMonth'),\n      custom: () => setPreset('custom'),\n    }),\n    [setPreset]\n  )\n\n  return {\n    startDate,\n    endDate,\n    preset,\n    isValid,\n    daysDifference,\n    setStartDate,\n    setEndDate,\n    setRange,\n    setPreset,\n    clearRange,\n    presets,\n    isPending: false,\n  }\n}\n","export function countActiveFilters(filters: Record<string, unknown>): number {\n  return Object.values(filters).filter(\n    (value) =>\n      value !== undefined &&\n      value !== null &&\n      value !== '' &&\n      !(Array.isArray(value) && value.length === 0)\n  ).length\n}\n","import { useQueryStates } from 'nuqs'\nimport { useCallback, useMemo } from 'react'\nimport type { UseFiltersOptions, UseFiltersResult, Values } from './types'\nimport { countActiveFilters } from './utils'\n\n// biome-ignore lint/suspicious/noExplicitAny: parsers can be any nuqs parser type\nexport function useFilters<TParsers extends Record<string, any>>(\n  options: UseFiltersOptions<TParsers>\n): UseFiltersResult<Values<TParsers>> {\n  const { parsers, onChange, history = 'replace', scroll = false, shallow = true } = options\n\n  const [filters, setFiltersState] = useQueryStates(parsers, {\n    history,\n    scroll,\n    shallow,\n  })\n\n  const hasFilters = useMemo(() => countActiveFilters(filters) > 0, [filters])\n\n  const activeCount = useMemo(() => countActiveFilters(filters), [filters])\n\n  const setFilter = useCallback(\n    (key: keyof Values<TParsers>, value: unknown) => {\n      // biome-ignore lint/suspicious/noExplicitAny: dynamic filter updates\n      setFiltersState({ [key]: value === undefined ? null : value } as any)\n\n      if (onChange) {\n        const newFilters = { ...filters, [key]: value } as Values<TParsers>\n        onChange(newFilters)\n      }\n    },\n    [setFiltersState, filters, onChange]\n  )\n\n  const setFilters = useCallback(\n    (newFilters: Partial<Values<TParsers>>) => {\n      const updates: Record<string, unknown> = {}\n      for (const [key, value] of Object.entries(newFilters)) {\n        updates[key] = value === undefined ? null : value\n      }\n      // biome-ignore lint/suspicious/noExplicitAny: dynamic filter updates\n      setFiltersState(updates as any)\n\n      if (onChange) {\n        const merged = { ...filters, ...newFilters } as Values<TParsers>\n        onChange(merged)\n      }\n    },\n    [setFiltersState, filters, onChange]\n  )\n\n  const removeFilter = useCallback(\n    (key: keyof Values<TParsers>) => {\n      // biome-ignore lint/suspicious/noExplicitAny: dynamic filter updates\n      setFiltersState({ [key]: null } as any)\n\n      if (onChange) {\n        const newFilters = { ...filters } as Values<TParsers>\n        delete newFilters[key as keyof typeof newFilters]\n        onChange(newFilters)\n      }\n    },\n    [setFiltersState, filters, onChange]\n  )\n\n  const clearFilters = useCallback(() => {\n    const updates: Record<string, null> = {}\n    for (const key of Object.keys(filters)) {\n      updates[key] = null\n    }\n    // biome-ignore lint/suspicious/noExplicitAny: dynamic filter updates\n    setFiltersState(updates as any)\n\n    if (onChange) {\n      onChange({} as Values<TParsers>)\n    }\n  }, [setFiltersState, filters, onChange])\n\n  const toggleFilter = useCallback(\n    (key: keyof Values<TParsers>, value: unknown) => {\n      const currentValue = filters[key]\n      if (currentValue === value) {\n        removeFilter(key)\n      } else {\n        setFilter(key, value)\n      }\n    },\n    [filters, setFilter, removeFilter]\n  )\n\n  const getFilterValues = useCallback(\n    (key: keyof Values<TParsers>): unknown[] => {\n      const value = filters[key]\n      if (Array.isArray(value)) return value\n      if (value !== undefined && value !== null) return [value]\n      return []\n    },\n    [filters]\n  )\n\n  const isFilterActive = useCallback(\n    (key: keyof Values<TParsers>, value?: unknown): boolean => {\n      const currentValue = filters[key]\n      if (value !== undefined) {\n        if (Array.isArray(currentValue)) {\n          return currentValue.includes(value)\n        }\n        return currentValue === value\n      }\n      return currentValue !== undefined && currentValue !== null\n    },\n    [filters]\n  )\n\n  return {\n    filters: filters as Values<TParsers>,\n    hasFilters,\n    activeCount,\n    setFilter: setFilter as <K extends keyof Values<TParsers>>(\n      key: K,\n      value: Values<TParsers>[K]\n    ) => void,\n    setFilters,\n    removeFilter,\n    clearFilters,\n    toggleFilter: toggleFilter as <K extends keyof Values<TParsers>>(\n      key: K,\n      value: Values<TParsers>[K]\n    ) => void,\n    getFilterValues,\n    isFilterActive: isFilterActive as <K extends keyof Values<TParsers>>(\n      key: K,\n      value?: Values<TParsers>[K]\n    ) => boolean,\n    isPending: false,\n  }\n}\n","export function parseSelection(value: string | null, separator: string): string[] {\n  if (!value) return []\n  return value.split(separator).filter((item) => item.trim() !== '')\n}\n\nexport function serializeSelection(items: string[], separator: string): string | null {\n  if (items.length === 0) return null\n  return items.join(separator)\n}\n\nexport function toggleItem(items: string[], item: string): string[] {\n  const index = items.indexOf(item)\n  if (index === -1) {\n    return [...items, item]\n  }\n  return items.filter((i) => i !== item)\n}\n\nexport function addItem(items: string[], item: string, maxSelection?: number): string[] {\n  if (items.includes(item)) return items\n\n  if (maxSelection !== undefined && items.length >= maxSelection) {\n    return items\n  }\n\n  return [...items, item]\n}\n\nexport function removeItem(items: string[], item: string): string[] {\n  return items.filter((i) => i !== item)\n}\n","import { parseAsString, useQueryState } from 'nuqs'\nimport { useCallback, useMemo } from 'react'\nimport type { UseMultiSelectOptions, UseMultiSelectResult } from './types'\nimport { addItem, parseSelection, removeItem, serializeSelection } from './utils'\n\nexport function useMultiSelect(options: UseMultiSelectOptions = {}): UseMultiSelectResult {\n  const {\n    defaultSelected = [],\n    allItems = [],\n    key = 'selected',\n    separator = ',',\n    maxSelection,\n    history = 'replace',\n    scroll = false,\n    shallow = true,\n  } = options\n\n  const [rawValue, setRawValue] = useQueryState(\n    key,\n    parseAsString.withDefault(serializeSelection(defaultSelected, separator) ?? '').withOptions({\n      history,\n      scroll,\n      shallow,\n    })\n  )\n\n  const selected = useMemo(() => parseSelection(rawValue, separator), [rawValue, separator])\n\n  const count = selected.length\n  const isEmpty = count === 0\n  const isAllSelected = useMemo(\n    () => allItems.length > 0 && allItems.every((item) => selected.includes(item)),\n    [allItems, selected]\n  )\n\n  const setSelected = useCallback(\n    (ids: string[]) => {\n      const limitedIds = maxSelection !== undefined ? ids.slice(0, maxSelection) : ids\n      setRawValue(serializeSelection(limitedIds, separator))\n    },\n    [setRawValue, separator, maxSelection]\n  )\n\n  const select = useCallback(\n    (id: string) => {\n      const newSelection = addItem(selected, id, maxSelection)\n      setRawValue(serializeSelection(newSelection, separator))\n    },\n    [selected, setRawValue, separator, maxSelection]\n  )\n\n  const deselect = useCallback(\n    (id: string) => {\n      const newSelection = removeItem(selected, id)\n      setRawValue(serializeSelection(newSelection, separator))\n    },\n    [selected, setRawValue, separator]\n  )\n\n  const toggle = useCallback(\n    (id: string) => {\n      if (selected.includes(id)) {\n        deselect(id)\n      } else if (maxSelection === undefined || selected.length < maxSelection) {\n        select(id)\n      }\n    },\n    [selected, select, deselect, maxSelection]\n  )\n\n  const selectAll = useCallback(() => {\n    const itemsToSelect = maxSelection !== undefined ? allItems.slice(0, maxSelection) : allItems\n    setRawValue(serializeSelection(itemsToSelect, separator))\n  }, [allItems, setRawValue, separator, maxSelection])\n\n  const deselectAll = useCallback(() => {\n    setRawValue(null)\n  }, [setRawValue])\n\n  const isSelected = useCallback(\n    (id: string): boolean => {\n      return selected.includes(id)\n    },\n    [selected]\n  )\n\n  return {\n    selected,\n    count,\n    isEmpty,\n    isAllSelected,\n    select,\n    deselect,\n    toggle,\n    selectAll,\n    deselectAll,\n    setSelected,\n    isSelected,\n    isPending: false,\n  }\n}\n","import { useEffect, useState } from 'react'\n\nexport function useDebounce<T>(value: T, delay: number): T {\n  const [debouncedValue, setDebouncedValue] = useState<T>(value)\n\n  useEffect(() => {\n    const handler = setTimeout(() => {\n      setDebouncedValue(value)\n    }, delay)\n\n    return () => {\n      clearTimeout(handler)\n    }\n  }, [value, delay])\n\n  return debouncedValue\n}\n","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","import { parseAsString, useQueryState } from 'nuqs'\nimport { useCallback, useEffect, useMemo } from 'react'\nimport { useDebounce } from '../../utils'\nimport type { UseSearchOptions, UseSearchResult } from './types'\n\nexport function useSearch(options: UseSearchOptions = {}): UseSearchResult {\n  const {\n    defaultQuery = '',\n    debounce = 300,\n    minLength = 0,\n    trim = true,\n    queryKey = 'q',\n    onSearch,\n    history = 'replace',\n    scroll = false,\n    shallow = true,\n  } = options\n\n  const [rawQuery, setRawQuery] = useQueryState(\n    queryKey,\n    parseAsString.withDefault(defaultQuery).withOptions({\n      history,\n      scroll,\n      shallow,\n    })\n  )\n\n  const query = useMemo(() => {\n    if (trim && rawQuery) return rawQuery.trim()\n    return rawQuery ?? defaultQuery\n  }, [rawQuery, trim, defaultQuery])\n\n  const debouncedQuery = useDebounce(query, debounce)\n\n  const isSearching = useMemo(\n    () => query.length > 0 && query.length >= minLength,\n    [query, minLength]\n  )\n\n  const isDebouncing = useMemo(() => query !== debouncedQuery, [query, debouncedQuery])\n\n  const isValid = useMemo(() => query.length >= minLength, [query, minLength])\n\n  const setQuery = useCallback(\n    (newQuery: string) => {\n      setRawQuery(newQuery)\n    },\n    [setRawQuery]\n  )\n\n  const clearQuery = useCallback(() => {\n    setRawQuery(null)\n  }, [setRawQuery])\n\n  useEffect(() => {\n    if (onSearch && isValid && !isDebouncing) {\n      onSearch(debouncedQuery)\n    }\n  }, [onSearch, debouncedQuery, isValid, isDebouncing])\n\n  return {\n    query,\n    debouncedQuery,\n    isSearching,\n    isDebouncing,\n    isValid,\n    setQuery,\n    clearQuery,\n    isPending: false,\n  }\n}\n","import type { SortOrder } from './types'\n\nexport function getNextSortOrder(\n  currentColumn: string | null,\n  targetColumn: string,\n  currentOrder: SortOrder | null\n): { column: string | null; order: SortOrder | null } {\n  if (currentColumn !== targetColumn) {\n    return { column: targetColumn, order: 'asc' }\n  }\n\n  if (currentOrder === 'asc') {\n    return { column: targetColumn, order: 'desc' }\n  }\n\n  return { column: targetColumn, order: 'asc' }\n}\n\nexport function getSortIndicator(order: SortOrder | null): '↑' | '↓' | '' {\n  if (order === 'asc') return '↑'\n  if (order === 'desc') return '↓'\n  return ''\n}\n","import { parseAsStringLiteral, useQueryStates } from 'nuqs'\nimport { useCallback } from 'react'\nimport type { SortOrder, UseSortingOptions, UseSortingResult } from './types'\nimport { getSortIndicator as getIndicator, getNextSortOrder } from './utils'\n\nexport function useSorting<TColumns extends readonly string[]>(\n  options: UseSortingOptions<TColumns> = {}\n): UseSortingResult<TColumns[number]> {\n  const {\n    columns = [] as unknown as TColumns,\n    defaultColumn,\n    defaultOrder,\n    sortByKey = 'sortBy',\n    sortOrderKey = 'order',\n    history = 'replace',\n    scroll = false,\n    shallow = true,\n  } = options\n\n  const [state, setState] = useQueryStates(\n    {\n      [sortByKey]: parseAsStringLiteral(columns as unknown as string[]),\n      [sortOrderKey]: parseAsStringLiteral(['asc', 'desc'] as const),\n    },\n    {\n      history,\n      scroll,\n      shallow,\n    }\n  )\n\n  const sortBy =\n    (state[sortByKey] as TColumns[number]) ?? (defaultColumn as TColumns[number]) ?? null\n  const sortOrder = (state[sortOrderKey] as SortOrder) ?? defaultOrder ?? null\n\n  const isSorted = sortBy !== null && sortOrder !== null\n\n  const setSort = useCallback(\n    (column: TColumns[number], order: SortOrder = 'asc') => {\n      setState({\n        [sortByKey]: column as string,\n        [sortOrderKey]: order,\n      })\n    },\n    [setState, sortByKey, sortOrderKey]\n  )\n\n  const toggleSort = useCallback(\n    (column: TColumns[number]) => {\n      const next = getNextSortOrder(sortBy as string | null, column as string, sortOrder)\n      setState({\n        [sortByKey]: next.column,\n        [sortOrderKey]: next.order,\n      })\n    },\n    [setState, sortBy, sortOrder, sortByKey, sortOrderKey]\n  )\n\n  const clearSort = useCallback(() => {\n    setState({\n      [sortByKey]: null,\n      [sortOrderKey]: null,\n    })\n  }, [setState, sortByKey, sortOrderKey])\n\n  const getSortDirection = useCallback(\n    (column: TColumns[number]): SortOrder | null => {\n      if (sortBy === column) return sortOrder\n      return null\n    },\n    [sortBy, sortOrder]\n  )\n\n  const getSortIndicator = useCallback(\n    (column: TColumns[number]): '↑' | '↓' | '' => {\n      const direction = getSortDirection(column)\n      return getIndicator(direction)\n    },\n    [getSortDirection]\n  )\n\n  const isSortedBy = useCallback(\n    (column: TColumns[number]): boolean => {\n      return sortBy === column\n    },\n    [sortBy]\n  )\n\n  return {\n    sortBy,\n    sortOrder,\n    isSorted,\n    setSort,\n    toggleSort,\n    clearSort,\n    getSortDirection,\n    getSortIndicator,\n    isSortedBy,\n    isPending: false,\n  }\n}\n","import { parseAsStringLiteral, useQueryState } from 'nuqs'\nimport { useCallback, useMemo } from 'react'\nimport type { UseTabsOptions, UseTabsResult } from './types'\n\nexport function useTabs<TTabs extends readonly string[]>(\n  tabs: TTabs,\n  options: UseTabsOptions<TTabs> = {}\n): UseTabsResult<TTabs[number]> {\n  const {\n    defaultTab = tabs[0],\n    tabKey = 'tab',\n    history = 'replace',\n    scroll = false,\n    shallow = true,\n  } = options\n\n  const [activeTab, setActiveTab] = useQueryState(\n    tabKey,\n    parseAsStringLiteral(tabs as unknown as string[])\n      .withDefault(defaultTab as string)\n      .withOptions({\n        history,\n        scroll,\n        shallow,\n      })\n  )\n\n  const activeIndex = useMemo(() => tabs.indexOf(activeTab as TTabs[number]), [tabs, activeTab])\n\n  const setTab = useCallback(\n    (tab: TTabs[number]) => {\n      setActiveTab(tab as string)\n    },\n    [setActiveTab]\n  )\n\n  const setTabByIndex = useCallback(\n    (index: number) => {\n      if (index >= 0 && index < tabs.length) {\n        setActiveTab(tabs[index] as string)\n      }\n    },\n    [setActiveTab, tabs]\n  )\n\n  const nextTab = useCallback(() => {\n    const nextIndex = (activeIndex + 1) % tabs.length\n    setTabByIndex(nextIndex)\n  }, [activeIndex, tabs.length, setTabByIndex])\n\n  const prevTab = useCallback(() => {\n    const prevIndex = (activeIndex - 1 + tabs.length) % tabs.length\n    setTabByIndex(prevIndex)\n  }, [activeIndex, tabs.length, setTabByIndex])\n\n  const isActive = useCallback(\n    (tab: TTabs[number]): boolean => {\n      return activeTab === tab\n    },\n    [activeTab]\n  )\n\n  const getTabIndex = useCallback(\n    (tab: TTabs[number]): number => {\n      return tabs.indexOf(tab)\n    },\n    [tabs]\n  )\n\n  return {\n    activeTab: activeTab as TTabs[number],\n    tabs,\n    activeIndex,\n    setTab,\n    setTabByIndex,\n    nextTab,\n    prevTab,\n    isActive,\n    getTabIndex,\n    isPending: false,\n  }\n}\n"]}