import { createSignal, onCleanup } from 'solid-js' export function useTimer(durationMs: number) { const [remainingMs, setRemainingMs] = createSignal(durationMs) const [isExpired, setIsExpired] = createSignal(false) let t: number | undefined let startedAt: number | undefined const tick = () => { if (startedAt == null) return const elapsed = Date.now() - startedAt const remain = Math.max(0, durationMs - elapsed) setRemainingMs(remain) if (remain === 0) setIsExpired(true) } const start = () => { if (t != null) return startedAt = Date.now() tick() t = window.setInterval(tick, 250) } const stop = () => { if (t != null) { window.clearInterval(t) t = undefined } } onCleanup(() => stop()) return { remainingMs, isExpired, start, stop } }