Countdown
The time left until a moment, in tabular figures, turning urgent under a threshold.
Web et mobile — le même composant pour React et React Native. Stable : son API ne change qu’à une version majeure.
Pourquoi il est là. Used by Orochia, krizaka.com.
Quand l’utiliser
- For a deadline the user acts against: an auction, an offer, a live event about to start.
- With the server's clock (
skewMs) when the end is decided by the server.
Quand ne pas l’utiliser
- For a date far away: write the date (“Ends on 12 May”).
- For the progress of a task.À la place : Progress
- For an elapsed time that keeps growing: format a duration in the text.
Installation
Installer
npm install @krizaka/ui @krizaka/tailwind @krizaka/tokens tailwindcssStyles
@import "tailwindcss";
@import "@krizaka/tailwind";
@import "@krizaka/ui/tailwind.css";Importer
import { Countdown } from "@krizaka/ui/countdown";Exemples
Hours
Hours, minutes and seconds.
Days
Days appear when there are some.
Sizes
sm, md (default), lg.
Urgent
Under a minute: the danger text role, the last segment pulses.
With its label
showLabel: the label written before the segments.
Ended
Past the target: zeros and data-ended.
Props
Time left until a moment, as segments (2d 04h 13m 09s — days only when there are some) in tabular figures. Under
urgentBelowMs it turns to the danger text role and its last segment pulses (no motion under prefers-reduced-motion).
Words come from the app: units are the short unit labels. role="timer" without live announcements — the app
announces what matters. State: data-urgent, data-ended.
The urgent colour is --kz-danger-text (≥ 4.5:1 on every surface in both themes), so size="sm" is safe too.
| Prop | Type | Défaut | Description |
|---|---|---|---|
labelrequis | string | — | Accessible name, e.g. "Ends in". |
targetrequis | string | number | Date | — | The moment it counts down to: a Date, an ISO string or epoch milliseconds. |
unitsrequis | CountdownUnits | — | The short unit labels, passed translated. |
className | string | — | Classes merged last, over the primitive's. |
showLabel | boolean | false | Also show label before the segments, in the secondary text role (default: only read by screen readers). |
size | "sm" | "md" | "lg" | md | sm · md · lg — the danger text role reads at 4.5:1 at every size, in both themes. |
skewMs | number | 0 | Server clock − this clock, in milliseconds. |
urgentBelowMs | number | 60000 | Below this many milliseconds it turns urgent (text-fg-danger, the last segment pulses). Default 60 s. |
Accessibilité
role="timer"named bylabel, without live announcements: a screen reader is not interrupted every second.- Announce the end yourself (a toast, a status) if it matters.
- The pulse of the last segment stops under
prefers-reduced-motion.
Bonnes pratiques
- Pass
unitsandlabeltranslated: they are the app's words. - Use
size="md"or larger when it can turn urgent: the danger colour is large-text safe frommd. - Say what happens at zero next to it: the countdown only shows zeros.
Composants liés
Générée depuis le code de @krizaka/ui 3.9.0 : son meta.ts, ses exemples et ses types.Modifier cette documentation sur GitHub