v1.0.0
15 Sep 2026First release.
Added
- Announcements at milestones rather than every second: the digits sit in an
aria-hidden<time datetime>and a separate polite region speaks when the leading unit changes and at an hour, ten minutes, five, one, thirty seconds, ten and the last five. Over two minutes that is fewer than fifteen announcements instead of a hundred and twenty.announceAtsets your own. - Every value derived from
deadline − now()rather than accumulated from ticks, so a tab that slept for an hour is right the moment it wakes. serverClock(), which works out the offset between the visitor's clock and your server's once and applies it from then on.- Ticks scheduled to land just after the display next changes rather than every thousand milliseconds, and nothing scheduled at all while the tab is hidden.
onCompletefired exactly once, however the deadline is passed — including by a clock that jumped over it.- Formatting through
Intlthroughout: the locale's own digits, the Arabic dual, and correct plurals in languages with more than two of them. - Three shapes — a box per unit, a clock, or a sentence — with leading zero units
dropped, optional labels,
daysInHours, sub-secondprecisionandovertimecounting upwards past the deadline. setDeadline()to move it without rebuilding anything.- React, Vue, Svelte,
<dx-countdown>and a CDN build over one core. - Theming through CSS variables,
classNameson every part,theme: 'auto'and a@layer devixstylesheet. - 3.2 kB gzip, zero dependencies.