import type { IDisposable } from '../functions/disposer.js'; import { type EventHandler, type IEvent } from './event.js'; export type TimerState = { timer: Timer; elapsed: number; left: number; now: number; }; /** * A timer wraps `setInterval` and provides a more convenient API. * It will fire an event every `interval` milliseconds. * It also may have duration which means it will stop when elapsed time is greater than or equal to the duration. */ export declare class Timer implements IDisposable, IEvent { readonly interval: number; private readonly _event; private readonly _onFinished; private _now; private _elapsed; private _left; private _duration; private _handle; /** * @param interval timer firing interval in milliseconds * @param start whether to start the timer immediately. default is `true` */ constructor(interval?: number, start?: boolean); /** the timestamp when the timer last fired */ get now(): number; /** the duration of the timer in milliseconds. If was not set, `Number.MAX_SAFE_INTEGER` */ get duration(): number; /** the elapsed milliseconds since the timer started */ get elapsed(): number; /** left milliseconds for this timer. If duration was not set, `Number.MAX_SAFE_INTEGER` */ get left(): number; /** Fired when the timer has finished by duration, if set */ get onFinished(): IEvent; /** Adds duration in milliseconds for the timer so it will auto-stop when elapsed is >= duration */ withDuration(duration: number): this; on(handler: EventHandler): () => void; off(handler: EventHandler): void; /** (Re-)Starts the timer */ restart(): void; /** Stops the timer but does not clean all counters. */ dispose(): void; }