@mantine/hooks
Version:
A collection of 50+ hooks for state and UI management
1 lines • 2.16 kB
Source Map (JSON)
{"version":3,"file":"use-counter.cjs","names":["clamp"],"sources":["../../src/use-counter/use-counter.ts"],"sourcesContent":["import { useCallback, useState } from 'react';\nimport { clamp } from '../utils';\n\nconst DEFAULT_OPTIONS = {\n min: -Infinity,\n max: Infinity,\n};\n\nexport interface UseCounterOptions {\n min?: number;\n max?: number;\n}\n\nexport interface UseCounterHandlers {\n increment: () => void;\n decrement: () => void;\n set: (value: number) => void;\n reset: () => void;\n}\n\nexport type UseCounterReturnValue = [number, UseCounterHandlers];\n\nexport function useCounter(initialValue = 0, options?: UseCounterOptions): UseCounterReturnValue {\n const { min, max } = { ...DEFAULT_OPTIONS, ...options };\n const [count, setCount] = useState<number>(clamp(initialValue, min, max));\n\n const increment = useCallback(\n () => setCount((current) => clamp(current + 1, min, max)),\n [min, max]\n );\n\n const decrement = useCallback(\n () => setCount((current) => clamp(current - 1, min, max)),\n [min, max]\n );\n\n const set = useCallback((value: number) => setCount(clamp(value, min, max)), [min, max]);\n\n const reset = useCallback(\n () => setCount(clamp(initialValue, min, max)),\n [initialValue, min, max]\n );\n\n return [count, { increment, decrement, set, reset }];\n}\n\nexport namespace useCounter {\n export type Options = UseCounterOptions;\n export type Handlers = UseCounterHandlers;\n export type ReturnValue = UseCounterReturnValue;\n}\n"],"mappings":";;;;AAGA,MAAM,kBAAkB;CACtB,KAAK;CACL,KAAK;CACN;AAgBD,SAAgB,WAAW,eAAe,GAAG,SAAoD;CAC/F,MAAM,EAAE,KAAK,QAAQ;EAAE,GAAG;EAAiB,GAAG;EAAS;CACvD,MAAM,CAAC,OAAO,aAAA,GAAA,MAAA,UAA6BA,cAAAA,MAAM,cAAc,KAAK,IAAI,CAAC;AAmBzE,QAAO,CAAC,OAAO;EAAE,YAAA,GAAA,MAAA,mBAhBT,UAAU,YAAYA,cAAAA,MAAM,UAAU,GAAG,KAAK,IAAI,CAAC,EACzD,CAAC,KAAK,IAAI,CACX;EAc2B,YAAA,GAAA,MAAA,mBAXpB,UAAU,YAAYA,cAAAA,MAAM,UAAU,GAAG,KAAK,IAAI,CAAC,EACzD,CAAC,KAAK,IAAI,CACX;EASsC,MAAA,GAAA,MAAA,cAPd,UAAkB,SAASA,cAAAA,MAAM,OAAO,KAAK,IAAI,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC;EAO5C,QAAA,GAAA,MAAA,mBAJpC,SAASA,cAAAA,MAAM,cAAc,KAAK,IAAI,CAAC,EAC7C;GAAC;GAAc;GAAK;GAAI,CACzB;EAEkD,CAAC"}