UNPKG

@yamada-ui/react

Version:

React UI components of the Yamada, by the Yamada, for the Yamada built with React and Emotion

55 lines (51 loc) 1.69 kB
"use client"; const require_rolldown_runtime = require('../../_virtual/rolldown_runtime.cjs'); const require_effect = require('../../utils/effect.cjs'); const require_hooks_use_interval_index = require('../../hooks/use-interval/index.cjs'); let react = require("react"); react = require_rolldown_runtime.__toESM(react); //#region src/components/number-input/use-spinner.ts const INTERVAL = 50; const DELAY = 300; const useSpinner = ({ decrement, increment }) => { const [spinning, setSpinning] = (0, react.useState)(false); const [action, setAction] = (0, react.useState)(null); const [once, setOnce] = (0, react.useState)(true); const timeoutRef = (0, react.useRef)(null); require_hooks_use_interval_index.useInterval(() => { if (action === "increment") increment(); if (action === "decrement") decrement(); }, spinning ? INTERVAL : null); const up = (0, react.useCallback)(() => { if (once) increment(); timeoutRef.current = setTimeout(() => { setOnce(false); setSpinning(true); setAction("increment"); }, DELAY); }, [increment, once]); const down = (0, react.useCallback)(() => { if (once) decrement(); timeoutRef.current = setTimeout(() => { setOnce(false); setSpinning(true); setAction("decrement"); }, DELAY); }, [decrement, once]); const removeTimeout = (0, react.useCallback)(() => clearTimeout(timeoutRef.current), []); const stop = (0, react.useCallback)(() => { setOnce(true); setSpinning(false); removeTimeout(); }, [removeTimeout]); require_effect.useUnmountEffect(removeTimeout); return { down, spinning, stop, up }; }; //#endregion exports.useSpinner = useSpinner; //# sourceMappingURL=use-spinner.cjs.map