{"version":3,"sources":["../../../src/hooks/sorting/utils.ts","../../../src/hooks/sorting/useSorting.ts"],"names":["getNextSortOrder","currentColumn","targetColumn","currentOrder","getSortIndicator","order","useSorting","options","columns","defaultColumn","defaultOrder","sortByKey","sortOrderKey","history","scroll","shallow","state","setState","useQueryStates","parseAsStringLiteral","sortBy","sortOrder","isSorted","setSort","useCallback","column","toggleSort","next","clearSort","getSortDirection","direction","isSortedBy"],"mappings":"6DAEO,SAASA,CAAAA,CACdC,CAAAA,CACAC,EACAC,CAAAA,CACoD,CACpD,OAAIF,CAAAA,GAAkBC,CAAAA,CACb,CAAE,MAAA,CAAQA,CAAAA,CAAc,MAAO,KAAM,CAAA,CAG1CC,CAAAA,GAAiB,KAAA,CACZ,CAAE,MAAA,CAAQD,CAAAA,CAAc,KAAA,CAAO,MAAO,CAAA,CAGxC,CAAE,MAAA,CAAQA,CAAAA,CAAc,KAAA,CAAO,KAAM,CAC9C,CAEO,SAASE,CAAAA,CAAiBC,CAAAA,CAAyC,CACxE,OAAIA,CAAAA,GAAU,KAAA,CAAc,QAAA,CACxBA,IAAU,MAAA,CAAe,QAAA,CACtB,EACT,CCjBO,SAASC,CAAAA,CACdC,CAAAA,CAAuC,GACH,CACpC,GAAM,CACJ,OAAA,CAAAC,CAAAA,CAAU,EAAC,CACX,aAAA,CAAAC,EACA,YAAA,CAAAC,CAAAA,CACA,SAAA,CAAAC,CAAAA,CAAY,QAAA,CACZ,YAAA,CAAAC,CAAAA,CAAe,OAAA,CACf,OAAA,CAAAC,CAAAA,CAAU,SAAA,CACV,MAAA,CAAAC,CAAAA,CAAS,KAAA,CACT,OAAA,CAAAC,CAAAA,CAAU,IACZ,CAAA,CAAIR,CAAAA,CAEE,CAACS,CAAAA,CAAOC,CAAQ,CAAA,CAAIC,mBAAAA,CACxB,CACE,CAACP,CAAS,EAAGQ,yBAAAA,CAAqBX,CAA8B,CAAA,CAChE,CAACI,CAAY,EAAGO,0BAAqB,CAAC,KAAA,CAAO,MAAM,CAAU,CAC/D,CAAA,CACA,CACE,OAAA,CAAAN,CAAAA,CACA,MAAA,CAAAC,CAAAA,CACA,OAAA,CAAAC,CACF,CACF,CAAA,CAEMK,CAAAA,CACHJ,EAAML,CAAS,CAAA,EAA2BF,CAAAA,EAAsC,IAAA,CAC7EY,CAAAA,CAAaL,CAAAA,CAAMJ,CAAY,CAAA,EAAmBF,GAAgB,IAAA,CAElEY,CAAAA,CAAWF,CAAAA,GAAW,IAAA,EAAQC,CAAAA,GAAc,IAAA,CAE5CE,CAAAA,CAAUC,iBAAAA,CACd,CAACC,CAAAA,CAA0BpB,CAAAA,CAAmB,KAAA,GAAU,CACtDY,CAAAA,CAAS,CACP,CAACN,CAAS,EAAGc,CAAAA,CACb,CAACb,CAAY,EAAGP,CAClB,CAAC,EACH,EACA,CAACY,CAAAA,CAAUN,CAAAA,CAAWC,CAAY,CACpC,CAAA,CAEMc,CAAAA,CAAaF,iBAAAA,CAChBC,GAA6B,CAC5B,IAAME,CAAAA,CAAO3B,CAAAA,CAAiBoB,CAAAA,CAAyBK,CAAAA,CAAkBJ,CAAS,CAAA,CAClFJ,EAAS,CACP,CAACN,CAAS,EAAGgB,CAAAA,CAAK,MAAA,CAClB,CAACf,CAAY,EAAGe,CAAAA,CAAK,KACvB,CAAC,EACH,CAAA,CACA,CAACV,CAAAA,CAAUG,EAAQC,CAAAA,CAAWV,CAAAA,CAAWC,CAAY,CACvD,CAAA,CAEMgB,CAAAA,CAAYJ,iBAAAA,CAAY,IAAM,CAClCP,CAAAA,CAAS,CACP,CAACN,CAAS,EAAG,IAAA,CACb,CAACC,CAAY,EAAG,IAClB,CAAC,EACH,CAAA,CAAG,CAACK,CAAAA,CAAUN,CAAAA,CAAWC,CAAY,CAAC,CAAA,CAEhCiB,CAAAA,CAAmBL,iBAAAA,CACtBC,CAAAA,EACKL,CAAAA,GAAWK,CAAAA,CAAeJ,CAAAA,CACvB,KAET,CAACD,CAAAA,CAAQC,CAAS,CACpB,CAAA,CAEMjB,CAAAA,CAAmBoB,iBAAAA,CACtBC,CAAAA,EAA6C,CAC5C,IAAMK,CAAAA,CAAYD,CAAAA,CAAiBJ,CAAM,CAAA,CACzC,OAAOrB,CAAAA,CAAa0B,CAAS,CAC/B,CAAA,CACA,CAACD,CAAgB,CACnB,CAAA,CAEME,CAAAA,CAAaP,iBAAAA,CAChBC,CAAAA,EACQL,IAAWK,CAAAA,CAEpB,CAACL,CAAM,CACT,CAAA,CAEA,OAAO,CACL,MAAA,CAAAA,EACA,SAAA,CAAAC,CAAAA,CACA,QAAA,CAAAC,CAAAA,CACA,OAAA,CAAAC,CAAAA,CACA,UAAA,CAAAG,CAAAA,CACA,UAAAE,CAAAA,CACA,gBAAA,CAAAC,CAAAA,CACA,gBAAA,CAAAzB,CAAAA,CACA,UAAA,CAAA2B,CAAAA,CACA,SAAA,CAAW,KACb,CACF","file":"index.cjs","sourcesContent":["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"]}