{"version":3,"sources":["../../../src/hooks/tabs/useTabs.ts"],"names":["useTabs","tabs","options","defaultTab","tabKey","history","scroll","shallow","activeTab","setActiveTab","useQueryState","parseAsStringLiteral","activeIndex","useMemo","setTab","useCallback","tab","setTabByIndex","index","nextTab","nextIndex","prevTab","prevIndex","isActive","getTabIndex"],"mappings":"6DAIO,SAASA,CAAAA,CACdC,EACAC,CAAAA,CAAiC,GACH,CAC9B,GAAM,CACJ,UAAA,CAAAC,CAAAA,CAAaF,EAAK,CAAC,CAAA,CACnB,OAAAG,CAAAA,CAAS,KAAA,CACT,QAAAC,CAAAA,CAAU,SAAA,CACV,OAAAC,CAAAA,CAAS,KAAA,CACT,QAAAC,CAAAA,CAAU,IACZ,EAAIL,CAAAA,CAEE,CAACM,EAAWC,CAAY,CAAA,CAAIC,kBAAAA,CAChCN,CAAAA,CACAO,yBAAAA,CAAqBV,CAA2B,EAC7C,WAAA,CAAYE,CAAoB,EAChC,WAAA,CAAY,CACX,QAAAE,CAAAA,CACA,MAAA,CAAAC,EACA,OAAA,CAAAC,CACF,CAAC,CACL,CAAA,CAEMK,EAAcC,aAAAA,CAAQ,IAAMZ,EAAK,OAAA,CAAQO,CAA0B,EAAG,CAACP,CAAAA,CAAMO,CAAS,CAAC,CAAA,CAEvFM,EAASC,iBAAAA,CACZC,CAAAA,EAAuB,CACtBP,CAAAA,CAAaO,CAAa,EAC5B,CAAA,CACA,CAACP,CAAY,CACf,CAAA,CAEMQ,EAAgBF,iBAAAA,CACnBG,CAAAA,EAAkB,CACbA,CAAAA,EAAS,CAAA,EAAKA,CAAAA,CAAQjB,CAAAA,CAAK,MAAA,EAC7BQ,CAAAA,CAAaR,EAAKiB,CAAK,CAAW,EAEtC,CAAA,CACA,CAACT,EAAcR,CAAI,CACrB,EAEMkB,CAAAA,CAAUJ,iBAAAA,CAAY,IAAM,CAChC,IAAMK,GAAaR,CAAAA,CAAc,CAAA,EAAKX,EAAK,MAAA,CAC3CgB,CAAAA,CAAcG,CAAS,EACzB,CAAA,CAAG,CAACR,CAAAA,CAAaX,CAAAA,CAAK,OAAQgB,CAAa,CAAC,EAEtCI,CAAAA,CAAUN,iBAAAA,CAAY,IAAM,CAChC,IAAMO,GAAaV,CAAAA,CAAc,CAAA,CAAIX,EAAK,MAAA,EAAUA,CAAAA,CAAK,OACzDgB,CAAAA,CAAcK,CAAS,EACzB,CAAA,CAAG,CAACV,CAAAA,CAAaX,EAAK,MAAA,CAAQgB,CAAa,CAAC,CAAA,CAEtCM,CAAAA,CAAWR,kBACdC,CAAAA,EACQR,CAAAA,GAAcQ,EAEvB,CAACR,CAAS,CACZ,CAAA,CAEMgB,CAAAA,CAAcT,kBACjBC,CAAAA,EACQf,CAAAA,CAAK,QAAQe,CAAG,CAAA,CAEzB,CAACf,CAAI,CACP,EAEA,OAAO,CACL,UAAWO,CAAAA,CACX,IAAA,CAAAP,EACA,WAAA,CAAAW,CAAAA,CACA,OAAAE,CAAAA,CACA,aAAA,CAAAG,EACA,OAAA,CAAAE,CAAAA,CACA,QAAAE,CAAAA,CACA,QAAA,CAAAE,EACA,WAAA,CAAAC,CAAAA,CACA,SAAA,CAAW,KACb,CACF","file":"index.cjs","sourcesContent":["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"]}