Saltar al contenido
Alea
Pro
  1. Alea
  2. Componentes
  3. Avisos
  4. NotificationCenter

Avisos

NotificationCenter

Una campana con el número de notificaciones sin leer que abre la lista: marcar una o todas como leídas, descartar, ir a la acción. Un panel bajo la campana, o un cajón en pantallas pequeñas.

import { NotificationCenter } from '@alea-design/ui';

Ejemplos

Campana de notificaciones

Una campana con el número de sin leer; abre la lista. Marca una o todas como leídas, descarta, o ve a la acción.

Cuatro tonos

Info, éxito, advertencia y peligro definen el icono y su color; los lectores de pantalla oyen el tono antes del título.

Estado vacío

Sin nada que mostrar, el panel lo dice. Cada texto es una etiqueta que puedes cambiar.

Controlado

La lista es tuya. Cada cambio vuelve por onChange y por los callbacks de cada acción; las notificaciones nuevas sin leer se anuncian a los lectores de pantalla.

Estilos con CSS por grupo

Con la importación única de la hoja de estilos, @alea-design/ui/styles.css, no hace falta nada más. Si importas las hojas de estilo por grupo, NotificationCenter tiene su propio grupo: importa @alea-design/ui/css/notification.css junto a base.css. Sin él, el panel se ve sin estilos y roto.

El panel también dibuja un Button, un Badge, un EmptyState y un Popover o Drawer, así que también hay que importar los grupos button, display, data y overlay. dist/css/groups.json los lista en requires del grupo notification, y lista los componentes que estiliza cada grupo.

Tokens

Los tokens de diseño que usa este componente, con su valor en el tema actual. Cambia cualquiera para darle otro estilo.

Color

  • --alea-accent…
  • --alea-accent-subtle…
  • --alea-border…
  • --alea-status-danger…
  • --alea-status-danger-bg…
  • --alea-status-info…
  • --alea-status-info-bg…
  • --alea-status-success…
  • --alea-status-success-bg…
  • --alea-status-warning…
  • --alea-status-warning-bg…
  • --alea-surface-hover…
  • --alea-text…
  • --alea-text-muted…
  • --alea-text-soft…

Space

  • --alea-space-1…
  • --alea-space-2…
  • --alea-space-3…
  • --alea-space-4…
  • --alea-space-6…
  • --alea-space-8…

Radius

  • --alea-radius-full…

Type

  • --alea-font-family-body…
  • --alea-font-size-md…
  • --alea-font-size-sm…
  • --alea-font-size-xs…
  • --alea-font-weight-medium…
  • --alea-font-weight-semibold…

Motion

  • --alea-motion-duration-base…
  • --alea-motion-ease-in…
  • --alea-motion-ease-out…

Component

  • --alea-focus-ring…

Props

NotificationCenter props

Una campana con el número de notificaciones sin leer que abre la lista: leer una o todas, descartar, ir a la acción. Un panel bajo la campana, o un cajón en pantallas pequeñas. La lista es tuya; cada cambio vuelve por onChange. Las flechas se mueven entre notificaciones, Escape cierra y el foco vuelve a la campana, y las notificaciones nuevas sin leer se anuncian.

PropTipoPor defectoDescripción
itemsobligatoriaNotificationItem[]Las notificaciones, la más reciente primero. El componente nunca las cambia: informa de cada cambio.
announcebooleantrueAnuncia las notificaciones nuevas sin leer a los lectores de pantalla. Por defecto true.
classNamestringningunoClases extra para el elemento raíz.
defaultOpenbooleanfalseEmpieza abierto (no controlado).
isOpenbooleanfalseAbre o cierra el panel (controlado).
labelsPartial<NotificationLabels>ningunoTextos propios: la campana, los botones, el estado vacío y los anuncios.
maxnumber99La insignia muestra max+ por encima de este número. Por defecto 99.
motionMotionPropningunoCómo entra y sale el panel: un preajuste, false para ninguno, u opciones.
onAction((item: NotificationItem) => void)ningunoSe llama al pulsar la acción de una notificación.
onChange((items: NotificationItem[]) => void)ningunoSe llama con la lista siguiente tras cualquier cambio (leer, leer todas, descartar).
onDismiss((item: NotificationItem) => void)ningunoSe llama con la notificación que se descartó.
onMarkAllRead((items: NotificationItem[]) => void)ningunoSe llama al pulsar "marcar todas como leídas", con las notificaciones que estaban sin leer.
onMarkRead((item: NotificationItem) => void)ningunoSe llama con la notificación que se marcó como leída.
onOpenChange((isOpen: boolean) => void)ningunoSe llama cuando el panel se abre o se cierra.
placement"bottom end" | "bottom start" | "bottom" | "top" | "top start" | "top end""bottom end"Dónde se abre el popover. Por defecto abajo al final.
presentation"auto" | "popover" | "drawer""auto"popover (un panel bajo la campana), drawer (una hoja desde abajo) o auto: un cajón en pantallas pequeñas. Por defecto auto.

Especificaciones

Generado desde el código: las variantes de los tipos, los estados y tokens del CSS, y los patrones de motion que aplican. Las grillas muestran el componente real en ambos temas; los números se miden en la página.

Variantes
placementbottom endbottom startbottomtoptop starttop end
presentationautopopoverdrawer
Estados
Keyboard focusHover (CSS)
Motion
Acepta una prop motion para su entrada y salida.
Oscuro y claro
Cada color viene de tokens del tema, así que sigue a data-theme (y a presets como Graphite) en la página o en cualquier contenedor. El contraste se revisa en ambos temas.
Clases para estilos
.alea-notifs.alea-notifs-head.alea-notifs-title.alea-notifs-empty.alea-notifs-list.alea-notif-out.alea-notif.alea-notif-inner.alea-notif-icon.alea-notif-body.alea-notif-title.alea-notif-text
Atributos data
data-tone=successdata-tone=warningdata-tone=dangerdata-unread

Accesibilidad

  • La campana se nombra con el número: "Notificaciones, 3 sin leer". La insignia se oculta a los lectores de pantalla para que el número no se lea dos veces.
  • El panel es un diálogo con su título como nombre; Escape lo cierra y el foco vuelve a la campana.
  • Cada notificación es un elemento de lista que dice si está sin leer y su tono antes del título.
  • Una notificación nueva sin leer se anuncia con cortesía, nunca al cargar y nunca las ya leídas.
  • Las horas son elementos time con la fecha exacta; el texto relativo sigue el idioma y se actualiza mientras el panel está abierto.
  • Al descartar, el foco pasa a la notificación siguiente, o al estado vacío si era la última.

Teclado

TeclaAcción
Enter o EspacioAbre el panel desde la campana
Arriba o Flecha abajoNotificación anterior o siguiente
Inicio o FinPrimera o última notificación
TabRecorre los botones de la notificación actual y luego pasa al siguiente control
EscCierra el panel y vuelve a la campana

Qué hacer y qué evitar

Hacer

  • Mantén los títulos cortos y pon el detalle en la descripción.
  • Da a cada notificación una acción como máximo, redactada como verbo.
  • Guarda la lista en tu propio estado y actualízala desde onChange.

Evitar

  • No lo uses para mensajes que necesitan respuesta ahora: usa Dialog o Alert.
  • No colorees una notificación solo por su importancia; el tono también define el icono y la palabra que se escucha.

En Figma

Las propiedades de los componentes de Figma, generadas desde el kit, así que siempre coinciden con él. La última columna es la prop de React que representa cada una.

Notification item · 8 variantes

Propiedad de FigmaTipoValoresPor defectoProp de React
ToneVariantInfo, Success, Warning, DangerInfosin prop de React
StatusVariantUnread, ReadUnreadsin prop de React
TitleText-Deploy finishedsin prop de React
Description textText-The build is live on production.sin prop de React
TimeText-8 min agosin prop de React
Action labelText-Viewsin prop de React
DescriptionBoolean-truesin prop de React
ActionBoolean-truesin prop de React

Notification bell · 1 variantes

Propiedad de FigmaTipoValoresPor defectoProp de React
BadgeBoolean-trueitems
OpenBoolean-falseisOpen, defaultOpen

Componentes anidados expuestos en él: Trigger, Badge

Notification center · 4 variantes

Propiedad de FigmaTipoValoresPor defectoProp de React
PresentationVariantPopover, DrawerPopoverpresentation
ContentVariantList, EmptyListitems
Empty titleText-You are all caught uplabels
Empty descriptionText-New notifications will show up here.labels
Probado con axe, teclado y roles de lector de pantalla