Todos los componentes (204)
Cuenta atrás
Fechas y hora · Countdown · .amset-count
Qué es y cuándo usarlo
Una cuenta atrás en segundos: «Reenviar el código en 29 s», «1:30» a partir del minuto y «1:02:05» a partir de la hora, con las cifras del idioma. Para lo que se agota: reenviar un código, el fin de una reserva, un carrito guardado.
Cuándo usarlo
- Una espera corta que la persona tiene que ver bajar.
labeldice de qué es la cuenta («Reenviar el código») ytextcambia la frase que se ve mientras corre.endContentpara lo que aparece al llegar a cero (normalmente el botón que ya se puede pulsar),finalAnnouncementpara lo que se dice entonces yonFinishpara enterarse desde el código.active={false}para pararla donde esté (al volver atruesigue desde ahí); al cambiarsecondsvuelve a empezar.tonepara cuando apremia:warningen una reserva que está a punto de caducar.
Cuándo no
- Avisar de que la sesión va a caducar, con las salidas a mano:
IdleWarning. - Una fecha que ya pasó o que está por venir («hace 3 minutos»):
RelativeTime.
Teclado: no es interactiva y no entra en el orden del Tab; lo que se ponga en endContent, sí.
Accesibilidad: el número se ve cambiar cada segundo, pero no se anuncia cada segundo, que taparía cualquier otra cosa que estuviera leyendo el lector de pantalla. Una región status oculta lo dice cuando los segundos que quedan son múltiplo de announceEvery (10 por defecto), y con palabras: «Reenviar el código en 1 minuto y 30 segundos», porque «1:30» leído en voz alta suena a una hora. Al llegar a cero la misma región dice finalAnnouncement («Reenviar el código: la cuenta atrás ha terminado», por defecto) y se pinta endContent en lugar de la cuenta. La región está desde el principio: una que naciera ya con el texto dentro podría no leerse.
Reloj: cuenta contra la hora de verdad, no restando uno por latido. Una pestaña en segundo plano recibe sus temporizadores tarde (hasta uno por minuto); al volver, la cuenta dice lo que queda de verdad.
Tamaños: letra de 12, 13 o 14 px, y reserva el alto de un control de su tamaño (30, 36 o 44 px), para que al llegar a cero el botón de endContent ocupe el mismo sitio y no salte nada. Ponle un botón del mismo tamaño.
Variantes (variant):
roll(por defecto): cada cifra va en su ventana y solo ruedan las que cambian; la que se va baja y la nueva entra por arriba, como un tambor. De 1:30 a 1:29 se mueven dos cifras, no el número entero.ring: un anillo que se vacía de forma continua, sin saltos de segundo, con el número dentro ylabelal lado. Es una sola animación de CSS que dura la cuenta entera y la lleva el reloj del navegador; conactive={false}se para donde esté. Ahí no se usatext.text: el número entero cambia de golpe con un fundido corto, el aspecto de antes.
Movimiento: las cifras ruedan en la duración lenta del tema y lo de endContent entra con un fundido. Con movimiento reducido las cifras cambian sin rodar, pero el anillo sigue vaciándose a su ritmo: es lo que queda, no un adorno.
Aspecto fino: --amset-count-font, -height (el que reserva; auto si va dentro de una frase), -slot, -color (el texto), -number-color y -number-weight. En ring, --amset-count-ring (el lado: 44, 56 o 72 px según el tamaño) y --amset-count-ring-track (el color de lo ya gastado); el arco va del color del número.
Contexto: va dentro de LocaleProvider (o de AmsetProvider), que decide cómo se escriben las cifras.
Cómo se ve
{/* Por defecto (roll): ruedan solo las cifras que cambian */}
<Countdown label="La oferta acaba" seconds={3600} />
{/* Un anillo que se vacia sin saltos, con el numero dentro */}
<Countdown label="Tu reserva caduca" seconds={90} variant="ring" tone="warning" />Props
Se importa con import { Countdown } from '@amset/ui'. Las obligatorias van marcadas.
| Prop | Tipo | Para qué sirve |
|---|---|---|
labelobligatoria | string | De qué es la cuenta: "Reenviar el código". Obligatorio. |
secondsobligatoria | number | — |
active | boolean | Arranca sola. Con `false` se queda parada donde esté y sigue desde ahí al volver a `true`. |
announceEvery | number | Cada cuántos segundos se anuncia. Anunciar cada segundo es ruido puro para quien usa lector de pantalla. |
className | string | Se une a las clases de la biblioteca, no las sustituye. |
endContent | ReactNode | Lo que se ve al llegar a cero, en lugar de la cuenta: normalmente un botón. |
finalAnnouncement | string | Lo que se anuncia al llegar a cero. Por defecto: "Reenviar el código: la cuenta atrás ha terminado". |
onFinish | () => void | — |
size | "sm" | "md" | "lg" | Letra y alto reservado: el de un control `sm`, `md` o `lg` (30, 36 o 44 px). |
text | (remaining: ReactNode, seconds: number) => ReactNode | Lo que se ve mientras corre. Por defecto: "Reenviar el código en 0:29". Recibe el número ya escrito, en su propio elemento (el que se mueve al cambiar), y los segundos que quedan por si hace falta la cifra a secas. |
tone | "neutral" | "accent" | "secondary" | "tertiary" | "info" | "success" | "warning" | "error" | El color del texto y del número. `neutral` por defecto; `warning` o `error` cuando se agota algo que importa. |
variant | CountdownVariant | Como se ve: `roll` (por defecto, las cifras ruedan), `ring` (un anillo que se vacia, con el numero dentro y `label` al lado; ahi `text` no se usa) o `text` (el numero salta entero, como antes). |
Acepta además los atributos del elemento que pinta: className, style, data-*, aria-* y sus eventos.
Mandos
Estas variables CSS son la forma de adaptarlo. Se declaran sobre el selector del componente, no en :root: la hoja las redeclara en la propia regla y una declaración en el mismo elemento gana siempre.
| Variable | Por defecto |
|---|---|
--amset-count-color | var(--amset-ink-2) |
--amset-count-number-color | var(--amset-ink) |
--amset-count-number-weight | var(--amset-weight-medium) |
--amset-count-font | var(--amset-text-sm) |
--amset-count-height | var(--amset-height-control) |
--amset-count-slot | var(--amset-space-2) |
Cómo se cambia
.amset-count {
--amset-count-color: ...;
--amset-count-number-color: ...;
}En el banco de pruebas
Cada estado y cada variante, para tocarlos de uno en uno, en su ficha de ui.amset.tech:
