Notificaciones
La sección Notificaciones de los ajustes de un producto de IA. Una cuadrícula de canal por evento con toggles por fila, por columna y para todo, horas de silencio con una línea en vivo del próximo silencio, un resumen por correo, envíos de prueba reales para escritorio, correo, push y Slack, gestión de permisos del navegador y un flujo para conectar Slack. Se integra en cualquier sección de Ajustes.
Todo producto de IA acaba teniendo la misma página de notificaciones: una lista de cosas que pueden pasar, una lista de lugares donde pueden avisarte y una forma de que pare por la noche. NotificationSettings es esa página como una sola sección. Se integra en un SettingsSection y usa el mismo borrador, barra de guardado y protección contra cambios sin guardar que el resto de Settings.
El núcleo es una cuadrícula de eventos por canales. La fila superior activa o desactiva un canal para todos los eventos, la primera columna activa o desactiva un evento en todas partes y la casilla de la esquina lo hace todo. Cada una muestra un guion cuando solo algunas están activadas. Con el teclado la cuadrícula es una sola parada de tabulación: las teclas de flecha se mueven entre casillas, Home y End saltan a lo largo de una fila y Space alterna. Los lectores de pantalla oyen cada una como «Email for Agent finished». En un móvil la cuadrícula se convierte en una tarjeta por evento con chips de canal grandes.
Cada canal tiene un Send test que realmente envía. Desktop y push muestran un banner de notificación sobre la página, y desktop también lanza una notificación real del sistema cuando el navegador lo permite. Email abre una vista previa del mensaje en una bandeja de entrada, la versión de resumen cuando los correos se agrupan. Slack muestra el mensaje tal como lo ve tu equipo en el canal.
Desktop lee el permiso del navegador. Cuando no se ha preguntado, Allow lo pide; cuando está bloqueado, indica dónde cambiarlo; cuando el navegador no puede mostrar notificaciones, lo dice. Slack empieza desconectado: su columna está desactivada y Connect abre un diálogo para elegir un espacio de trabajo y un canal. Si la conexión falla, el motivo se muestra en el diálogo y no se pierde nada.
Las horas de silencio retienen las alertas de escritorio y push entre dos horas en los días que elijas, en la zona horaria que elijas, con una línea que indica cuándo empieza el siguiente periodo de silencio o que ahora hay silencio. Los eventos urgentes como las aprobaciones aún pueden pasar.
Añade el registro Pro a components.json
components.json Añade tu token
Crea un token en tu página de cuenta y colócalo en
.env.localcomoHEXTAUI_PRO_TOKEN.Añade el bloque
pnpm dlx shadcn@latest add @hextaui-pro/notifications
Conéctalo a tu API
Pasa las preferencias guardadas y un onSave asíncrono. Las ediciones permanecen en un borrador hasta que alguien guarda desde la barra de guardado o con ⌘S. Devuelve errores de campo para mostrarlos bajo el campo, o lanza un error para mostrar el mensaje en la barra de guardado. onSendTest envía una prueba real antes de que aparezca la vista previa.
Tus propios eventos y canales
Pasa events para añadir o quitar filas y channels para elegir columnas. Cada evento puede llevar un sample para las vistas previas de prueba y urgent para dejarlo pasar durante las horas de silencio. onSlackConnect recibe el espacio de trabajo y el canal elegidos; lanza un error para mostrar por qué falló, y el diálogo permanece abierto.
Anatomía
Las partes que compones, de fuera hacia dentro.
| Parte | Descripción |
|---|---|
NotificationSettings | La sección completa: la cuadrícula de eventos, los canales con pruebas, las horas de silencio y el resumen por correo. |
notificationEvents | Los eventos predeterminados: Agent finished, Needs approval, Run failed, Mentions, Weekly summary y Billing. |
notificationChannels | Los canales predeterminados: desktop, email, push y slack. |
NotificationSettings
Debe estar dentro de un SettingsSection.
| Prop | Tipo | Predeterminado |
|---|---|---|
preferencesLo guardado ahora: { matrix, quietHours, quietFrom, quietTo, quietDays, timeZone, quietUrgent, digest }. matrix asigna cada id de evento a los canales que están activados. Cuando cambia y no hay ediciones, el borrador lo sigue. | NotificationPreferences | – |
onSaveGuarda el borrador. Devuelve { quietDays: "…" } y similares para mostrar errores de campo, o lanza un error para mostrar el mensaje en la barra de guardado. | (preferences) => void | errors | Promise<void | errors> | – |
eventsFilas de la cuadrícula: { id, label, description?, urgent?, sample? }. sample es { title, body, subject, action } para las vistas previas de prueba. Los eventos urgent pueden pasar durante las horas de silencio. | NotificationEvent[] | notificationEvents |
channelsColumnas de la cuadrícula y filas bajo Channels, en orden. Cualquiera de "desktop", "email", "push" y "slack". | NotificationChannel[] | notificationChannels |
emailA dónde va el correo. Se muestra bajo Email y en el correo de prueba. | string | "[email protected]" |
deviceEl teléfono que recibe las notificaciones push. | string | "your phone" |
slackEl canal de Slack conectado. Mientras es null, la columna de Slack está desactivada. | { workspace, channel } | null | null |
slackWorkspacesEspacios de trabajo entre los que elegir al conectar: { id, name, channels: { id, name, private? }[] }. | SlackWorkspace[] | [] |
onSlackConnectConecta el canal elegido. Lanza un error para mostrar el mensaje en el diálogo. | ({ workspace, channel }) => void | Promise<void> | – |
onSlackDisconnectDesconecta Slack después de que la persona lo confirme. | () => void | Promise<void> | – |
onSendTestEnvía una prueba real. La vista previa se muestra cuando se resuelve, y el botón ofrece reintentar si lanza un error. event es el primero que está activado para ese canal. | ({ channel, event }) => void | Promise<void> | – |
| Key | Acción |
|---|---|
| Tab | Entra en la cuadrícula una vez, en la última casilla que usaste, y luego pasa a los canales. |
| ↑↓←→ | En la cuadrícula, se mueve entre casillas. Izquierda y derecha siguen la dirección de lectura. |
| HomeEnd | En la cuadrícula, salta al inicio o al final de la fila. Con Ctrl o ⌘, a la primera o última casilla. |
| Space | Activa o desactiva la casilla enfocada. En una casilla de fila, columna o esquina, activa todas, o desactiva cuando todas están activadas. |
| Esc | Descarta un banner de notificación de prueba mientras tiene el foco. |
- La cuadrícula es una ARIA grid con encabezados de columna y de fila, y cada casilla se nombra con su canal y evento, como «Mobile push for Run failed».
- Las casillas de fila, columna y esquina son mixtas cuando solo algunas están activadas, así que los lectores de pantalla oyen «partially checked».
- Los envíos de prueba, los resultados de permisos y los cambios de Slack se anuncian de forma polite. El siguiente periodo de silencio es una línea de estado que se actualiza mientras editas.
- Los banners de prueba se pausan al pasar el cursor o con el foco, tienen un botón de descartar y se desvanecen en lugar de deslizarse con movimiento reducido.
- En móviles, cada chip de canal es un objetivo de 44px.
Construido con
Los componentes gratuitos de HextaUI con los que está hecho Notifications. Cada uno se instala por separado.
Código
5 archivos, añadidos a components/blocks/notifications.