{"version":3,"sources":["../../../src/utils/debounce.ts","../../../src/hooks/search/useSearch.ts"],"names":["useDebounce","value","delay","debouncedValue","setDebouncedValue","useState","useEffect","handler","useSearch","options","defaultQuery","debounce","minLength","trim","queryKey","onSearch","history","scroll","shallow","rawQuery","setRawQuery","useQueryState","parseAsString","query","useMemo","debouncedQuery","isSearching","isDebouncing","isValid","setQuery","useCallback","newQuery","clearQuery"],"mappings":"6DAEO,SAASA,CAAAA,CAAeC,CAAAA,CAAUC,CAAAA,CAAkB,CACzD,GAAM,CAACC,CAAAA,CAAgBC,CAAiB,CAAA,CAAIC,cAAAA,CAAYJ,CAAK,CAAA,CAE7D,OAAAK,eAAAA,CAAU,IAAM,CACd,IAAMC,CAAAA,CAAU,UAAA,CAAW,IAAM,CAC/BH,CAAAA,CAAkBH,CAAK,EACzB,CAAA,CAAGC,CAAK,CAAA,CAER,OAAO,IAAM,CACX,YAAA,CAAaK,CAAO,EACtB,CACF,CAAA,CAAG,CAACN,CAAAA,CAAOC,CAAK,CAAC,CAAA,CAEVC,CACT,CCXO,SAASK,CAAAA,CAAUC,CAAAA,CAA4B,EAAC,CAAoB,CACzE,GAAM,CACJ,YAAA,CAAAC,CAAAA,CAAe,GACf,QAAA,CAAAC,CAAAA,CAAW,GAAA,CACX,SAAA,CAAAC,CAAAA,CAAY,CAAA,CACZ,IAAA,CAAAC,CAAAA,CAAO,IAAA,CACP,QAAA,CAAAC,CAAAA,CAAW,GAAA,CACX,QAAA,CAAAC,CAAAA,CACA,QAAAC,CAAAA,CAAU,SAAA,CACV,MAAA,CAAAC,CAAAA,CAAS,KAAA,CACT,OAAA,CAAAC,CAAAA,CAAU,IACZ,CAAA,CAAIT,CAAAA,CAEE,CAACU,CAAAA,CAAUC,CAAW,CAAA,CAAIC,mBAC9BP,CAAAA,CACAQ,kBAAAA,CAAc,WAAA,CAAYZ,CAAY,CAAA,CAAE,WAAA,CAAY,CAClD,OAAA,CAAAM,CAAAA,CACA,MAAA,CAAAC,CAAAA,CACA,OAAA,CAAAC,CACF,CAAC,CACH,CAAA,CAEMK,CAAAA,CAAQC,aAAAA,CAAQ,IAChBX,CAAAA,EAAQM,CAAAA,CAAiBA,CAAAA,CAAS,IAAA,EAAK,CACpCA,CAAAA,EAAYT,CAAAA,CAClB,CAACS,CAAAA,CAAUN,CAAAA,CAAMH,CAAY,CAAC,CAAA,CAE3Be,CAAAA,CAAiBzB,CAAAA,CAAYuB,CAAAA,CAAOZ,CAAQ,CAAA,CAE5Ce,CAAAA,CAAcF,aAAAA,CAClB,IAAMD,CAAAA,CAAM,MAAA,CAAS,CAAA,EAAKA,CAAAA,CAAM,QAAUX,CAAAA,CAC1C,CAACW,CAAAA,CAAOX,CAAS,CACnB,CAAA,CAEMe,CAAAA,CAAeH,aAAAA,CAAQ,IAAMD,CAAAA,GAAUE,CAAAA,CAAgB,CAACF,CAAAA,CAAOE,CAAc,CAAC,CAAA,CAE9EG,CAAAA,CAAUJ,aAAAA,CAAQ,IAAMD,CAAAA,CAAM,MAAA,EAAUX,CAAAA,CAAW,CAACW,CAAAA,CAAOX,CAAS,CAAC,CAAA,CAErEiB,CAAAA,CAAWC,iBAAAA,CACdC,GAAqB,CACpBX,CAAAA,CAAYW,CAAQ,EACtB,CAAA,CACA,CAACX,CAAW,CACd,CAAA,CAEMY,CAAAA,CAAaF,iBAAAA,CAAY,IAAM,CACnCV,CAAAA,CAAY,IAAI,EAClB,CAAA,CAAG,CAACA,CAAW,CAAC,CAAA,CAEhB,OAAAd,eAAAA,CAAU,IAAM,CACVS,CAAAA,EAAYa,CAAAA,EAAW,CAACD,CAAAA,EAC1BZ,EAASU,CAAc,EAE3B,CAAA,CAAG,CAACV,CAAAA,CAAUU,CAAAA,CAAgBG,CAAAA,CAASD,CAAY,CAAC,CAAA,CAE7C,CACL,KAAA,CAAAJ,CAAAA,CACA,cAAA,CAAAE,EACA,WAAA,CAAAC,CAAAA,CACA,YAAA,CAAAC,CAAAA,CACA,OAAA,CAAAC,CAAAA,CACA,QAAA,CAAAC,CAAAA,CACA,UAAA,CAAAG,CAAAA,CACA,SAAA,CAAW,KACb,CACF","file":"index.cjs","sourcesContent":["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","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"]}