{"version":3,"sources":["../src/hooks/useTimer.ts"],"names":["useTimer","initialTime","step","countDown","time","setTime","useState","isRunning","setIsRunning","intervalRef","useRef","start","useCallback","prevTime","newTime","pause","reset","useEffect"],"mappings":"0DAgBO,SAASA,EAASC,CAAqBC,CAAAA,CAAAA,CAAe,CAAGC,CAAAA,CAAAA,CAAqB,GAAgC,CACnH,GAAM,CAACC,CAAAA,CAAMC,CAAO,CAAIC,CAAAA,QAAAA,CAASL,CAAW,CAAA,CACtC,CAACM,CAAWC,CAAAA,CAAY,CAAIF,CAAAA,QAAAA,CAAS,EAAK,CAC1CG,CAAAA,CAAAA,CAAcC,QAEdC,CAAAA,CAAAA,CAAQC,YAAY,IAAM,CACzBL,CACHC,GAAAA,CAAAA,CAAa,EAAI,CACjBC,CAAAA,CAAAA,CAAY,OAAU,CAAA,WAAA,CAAY,IAAM,CACtCJ,CAAAA,CAASQ,CAAa,EAAA,CACpB,IAAMC,CAAUX,CAAAA,CAAAA,CAAYU,CAAWX,CAAAA,CAAAA,CAAOW,EAAWX,CACzD,CAAA,OAAIC,CAAaW,EAAAA,CAAAA,EAAW,GAC1B,aAAcL,CAAAA,CAAAA,CAAY,OAAO,CAAA,CACjCD,EAAa,CAAK,CAAA,CAAA,CACX,CAEFM,EAAAA,CACT,CAAC,EACH,CAAA,CAAGZ,EAAO,GAAI,CAAA,EAElB,EAAG,CAACK,CAAAA,CAAWL,CAAMC,CAAAA,CAAS,CAAC,CAEzBY,CAAAA,CAAAA,CAAQH,WAAY,CAAA,IAAM,CAC1BL,CAAaE,EAAAA,CAAAA,CAAY,OAC3B,GAAA,aAAA,CAAcA,EAAY,OAAO,CAAA,CACjCA,CAAY,CAAA,OAAA,CAAU,OACtBD,CAAa,CAAA,CAAA,CAAK,CAEtB,EAAA,CAAA,CAAG,CAACD,CAAS,CAAC,CAERS,CAAAA,CAAAA,CAAQJ,YAAY,IAAM,CAC1BH,CAAY,CAAA,OAAA,GACd,cAAcA,CAAY,CAAA,OAAO,EACjCA,CAAY,CAAA,OAAA,CAAU,QAExBD,CAAa,CAAA,CAAA,CAAK,CAClBH,CAAAA,CAAAA,CAAQJ,CAAW,EACrB,CAAA,CAAG,CAACA,CAAW,CAAC,CAEhB,CAAA,OAAAgB,SAAU,CAAA,IACD,IAAM,CACPR,CAAAA,CAAY,OACd,GAAA,aAAA,CAAcA,EAAY,OAAO,CAAA,CACjCA,CAAY,CAAA,OAAA,CAAU,QAE1B,CACC,CAAA,EAAE,CAAA,CAEE,CACLL,CACA,CAAA,CACE,KAAAO,CAAAA,CAAAA,CACA,MAAAI,CACA,CAAA,KAAA,CAAAC,EACA,SAAAT,CAAAA,CACF,CACF,CACF","file":"useTimer.mjs","sourcesContent":["import { useState, useEffect, useCallback, useRef } from \"react\";\n\ninterface TimerControls {\n  start: () => void;\n  pause: () => void;\n  reset: () => void;\n  isRunning: boolean;\n}\n\n/**\n * Hook that provides a timer with controls\n * @param initialTime - Initial time in seconds\n * @param step - Time step in seconds (default: 1)\n * @param countDown - Whether to count down instead of up (default: false)\n * @returns [currentTime, controls]\n */\nexport function useTimer(initialTime: number, step: number = 1, countDown: boolean = false): [number, TimerControls] {\n  const [time, setTime] = useState(initialTime);\n  const [isRunning, setIsRunning] = useState(false);\n  const intervalRef = useRef<ReturnType<typeof setInterval>>();\n\n  const start = useCallback(() => {\n    if (!isRunning) {\n      setIsRunning(true);\n      intervalRef.current = setInterval(() => {\n        setTime((prevTime) => {\n          const newTime = countDown ? prevTime - step : prevTime + step;\n          if (countDown && newTime <= 0) {\n            clearInterval(intervalRef.current);\n            setIsRunning(false);\n            return 0;\n          }\n          return newTime;\n        });\n      }, step * 1000);\n    }\n  }, [isRunning, step, countDown]);\n\n  const pause = useCallback(() => {\n    if (isRunning && intervalRef.current) {\n      clearInterval(intervalRef.current);\n      intervalRef.current = undefined;\n      setIsRunning(false);\n    }\n  }, [isRunning]);\n\n  const reset = useCallback(() => {\n    if (intervalRef.current) {\n      clearInterval(intervalRef.current);\n      intervalRef.current = undefined;\n    }\n    setIsRunning(false);\n    setTime(initialTime);\n  }, [initialTime]);\n\n  useEffect(() => {\n    return () => {\n      if (intervalRef.current) {\n        clearInterval(intervalRef.current);\n        intervalRef.current = undefined;\n      }\n    };\n  }, []);\n\n  return [\n    time,\n    {\n      start,\n      pause,\n      reset,\n      isRunning,\n    },\n  ];\n}\n"]}