UNPKG

@liveblocks/react-ui

Version:

A set of React pre-built components for the Liveblocks products. Liveblocks is the all-in-one toolkit to build collaborative products like Figma, Notion, and more.

1 lines 2.43 kB
{"version":3,"file":"use-index.cjs","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":["useMemo","wrap","clamp","useState","useEffect","index","useCallback"],"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,GAAIA,cAAQ,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,GAAYA,cAAQ,MAAO,UAAA,GAAaC,YAAOC,WAAQ,EAAA,CAAC,UAAU,CAAC,CAAA,CAAA;AACzE,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIC,eAAS,OAAO,CAAA,CAAA;AAE1C,EAAAC,eAAA,CAAU,MAAM;AACd,IAAS,QAAA,CAAA,CAACC,MAAU,KAAAH,WAAA,CAAMG,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,GAAgBC,kBAAY,MAAM;AACtC,IAAS,QAAA,CAAA,CAACD,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,GAAYC,kBAAY,MAAM;AAClC,IAAS,QAAA,CAAA,CAACD,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;;;;"}