{"version":3,"file":"use-index.mjs","sources":["../../src/utils/use-index.ts"],"sourcesContent":["import { useCallback, useEffect, useMemo, useState } from \"react\";\n\nimport { clamp } from \"./clamp\";\nimport { wrap } from \"./wrap\";\n\ntype Options = {\n  wrap: boolean;\n};\n\nconst defaultOptions: Options = {\n  wrap: true,\n};\n\nexport function useIndex(\n  initial: number,\n  length: number,\n  options?: Partial<Options>\n) {\n  const { wrap: shouldWrap } = useMemo(() => {\n    return {\n      ...defaultOptions,\n      ...options,\n    };\n  }, [options]);\n  const transform = useMemo(() => (shouldWrap ? wrap : clamp), [shouldWrap]);\n  const [index, setIndex] = useState(initial);\n\n  useEffect(() => {\n    setIndex((index) => clamp(index, 0, Math.max(length - 1, 0)));\n  }, [length]);\n\n  const previousIndex = useCallback(() => {\n    setIndex((index) => transform(index - 1, 0, Math.max(length, 0)));\n  }, [length, transform]);\n\n  const nextIndex = useCallback(() => {\n    setIndex((index) => transform(index + 1, 0, Math.max(length, 0)));\n  }, [length, transform]);\n\n  return [index, previousIndex, nextIndex, setIndex] as const;\n}\n"],"names":["index"],"mappings":";;;;AASA,MAAM,cAA0B,GAAA;AAAA,EAC9B,IAAM,EAAA,IAAA;AACR,CAAA,CAAA;AAEgB,SAAA,QAAA,CACd,OACA,EAAA,MAAA,EACA,OACA,EAAA;AACA,EAAA,MAAM,EAAE,IAAA,EAAM,UAAW,EAAA,GAAI,QAAQ,MAAM;AACzC,IAAO,OAAA;AAAA,MACL,GAAG,cAAA;AAAA,MACH,GAAG,OAAA;AAAA,KACL,CAAA;AAAA,GACF,EAAG,CAAC,OAAO,CAAC,CAAA,CAAA;AACZ,EAAM,MAAA,SAAA,GAAY,QAAQ,MAAO,UAAA,GAAa,OAAO,KAAQ,EAAA,CAAC,UAAU,CAAC,CAAA,CAAA;AACzE,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,SAAS,OAAO,CAAA,CAAA;AAE1C,EAAA,SAAA,CAAU,MAAM;AACd,IAAS,QAAA,CAAA,CAACA,MAAU,KAAA,KAAA,CAAMA,MAAO,EAAA,CAAA,EAAG,IAAK,CAAA,GAAA,CAAI,MAAS,GAAA,CAAA,EAAG,CAAC,CAAC,CAAC,CAAA,CAAA;AAAA,GAC9D,EAAG,CAAC,MAAM,CAAC,CAAA,CAAA;AAEX,EAAM,MAAA,aAAA,GAAgB,YAAY,MAAM;AACtC,IAAS,QAAA,CAAA,CAACA,MAAU,KAAA,SAAA,CAAUA,MAAQ,GAAA,CAAA,EAAG,CAAG,EAAA,IAAA,CAAK,GAAI,CAAA,MAAA,EAAQ,CAAC,CAAC,CAAC,CAAA,CAAA;AAAA,GAC/D,EAAA,CAAC,MAAQ,EAAA,SAAS,CAAC,CAAA,CAAA;AAEtB,EAAM,MAAA,SAAA,GAAY,YAAY,MAAM;AAClC,IAAS,QAAA,CAAA,CAACA,MAAU,KAAA,SAAA,CAAUA,MAAQ,GAAA,CAAA,EAAG,CAAG,EAAA,IAAA,CAAK,GAAI,CAAA,MAAA,EAAQ,CAAC,CAAC,CAAC,CAAA,CAAA;AAAA,GAC/D,EAAA,CAAC,MAAQ,EAAA,SAAS,CAAC,CAAA,CAAA;AAEtB,EAAA,OAAO,CAAC,KAAA,EAAO,aAAe,EAAA,SAAA,EAAW,QAAQ,CAAA,CAAA;AACnD;;;;"}