useCountdown
A reactive countdown timer built on useIntervalFn. Decrements a counter by 1 on each tick, auto-pauses at 0, and provides full Pausable controls plus reset, stop, and start.
60
paused
import { import useCountdown
useCountdown } from "@usels/web";
const { const remaining$: any
remaining$ } = import useCountdown
useCountdown(60);// remaining$.get() → 60, 59, 58, ... 0With callbacks
Section titled “With callbacks”import { import useCountdown
useCountdown } from "@usels/web";
const { const remaining$: any
remaining$ } = import useCountdown
useCountdown(10, { onTick: (remaining: any) => any
onTick: (remaining: any
remaining) => any
console.any
log(`${remaining: any
remaining}s left`), onComplete: () => any
onComplete: () => any
console.any
log("Done!"),});Custom interval
Section titled “Custom interval”import { import useCountdown
useCountdown } from "@usels/web";
// Tick every 500ms instead of the default 1000msconst { const remaining$: any
remaining$ } = import useCountdown
useCountdown(30, { interval: number
interval: 500 });Manual start
Section titled “Manual start”import { import useCountdown
useCountdown } from "@usels/web";
const { const remaining$: any
remaining$, const start: any
start } = import useCountdown
useCountdown(10, { immediate: boolean
immediate: false });// remaining$.get() === 10 (not started)// start() to begin countdownReset / Stop / Start controls
Section titled “Reset / Stop / Start controls”import { import useCountdown
useCountdown } from "@usels/web";
const { const remaining$: any
remaining$, const reset: any
reset, const stop: any
stop, const start: any
start, const pause: any
pause, const resume: any
resume } = import useCountdown
useCountdown(60);
// reset() → remaining$ back to 60 (timer keeps running)// reset(30) → remaining$ set to 30// stop() → pause + reset (fully stop)// start() → reset + resume (restart)// start(30) → reset to 30 + resume// pause() → freeze countdown// resume() → continue from current remaining$Type Declarations
Section titled “Type Declarations”export interface UseCountdownOptions { interval?: number; immediate?: boolean; onTick?: (remaining: number) => void; onComplete?: () => void;}export interface UseCountdownReturn extends Pausable { remaining$: ReadonlyObservable<number>; reset: (count?: number) => void; stop: Fn; start: (count?: number) => void;}export declare function useCountdown(initialCount: MaybeObservable<number>, options?: DeepMaybeObservable<UseCountdownOptions>): UseCountdownReturn;Source
Section titled “Source”Contributors
Section titled “Contributors”- tigerwest
Changelog
Section titled “Changelog”a7392ab2026-03-06 - feat(core,browser): add sync strategy hooks (tigerwest)