Skip to main content

Banner

Una franja de notificación de ancho completo para anuncios a nivel de página.

default.tsx
1'use client';
2
3import { Banner } from '@/components/ui/banner';
4
5export function Default() {
6 return (
7 <Banner>
8 <Banner.Content>
9 <Banner.Title>New feature available</Banner.Title>
10 <Banner.Description>Check out the latest updates we just shipped.</Banner.Description>
11 </Banner.Content>
12 <Banner.Action href="#changelog">Learn more</Banner.Action>
13 </Banner>
14 );
15}

Instalación

pnpm dlx nachui add banner

Anatomía

1import { Banner } from '@/components/ui/banner';
1<Banner variant="info">
2 <Banner.Content>
3 <Banner.Title>Anuncio</Banner.Title>
4 <Banner.Description>Algo importante sucedió.</Banner.Description>
5 </Banner.Content>
6 <Banner.Action href="/changelog">Saber más</Banner.Action>
7</Banner>

Variantes

info

info.tsx
1'use client';
2
3import { Banner } from '@/components/ui/banner';
4
5export function Info() {
6 return (
7 <Banner variant="info">
8 <Banner.Content>
9 <Banner.Title>Info</Banner.Title>
10 <Banner.Description>This is an informational banner.</Banner.Description>
11 </Banner.Content>
12 </Banner>
13 );
14}

warning

warning.tsx
1'use client';
2
3import { Banner } from '@/components/ui/banner';
4
5export function Warning() {
6 return (
7 <Banner variant="warning">
8 <Banner.Content>
9 <Banner.Title>Warning</Banner.Title>
10 <Banner.Description>This is a warning banner.</Banner.Description>
11 </Banner.Content>
12 </Banner>
13 );
14}

danger

danger.tsx
1'use client';
2
3import { Banner } from '@/components/ui/banner';
4
5export function Danger() {
6 return (
7 <Banner variant="danger">
8 <Banner.Content>
9 <Banner.Title>Danger</Banner.Title>
10 <Banner.Description>This is a danger banner.</Banner.Description>
11 </Banner.Content>
12 </Banner>
13 );
14}

success

success.tsx
1'use client';
2
3import { Banner } from '@/components/ui/banner';
4
5export function Success() {
6 return (
7 <Banner variant="success">
8 <Banner.Content>
9 <Banner.Title>Success</Banner.Title>
10 <Banner.Description>This is a success banner.</Banner.Description>
11 </Banner.Content>
12 </Banner>
13 );
14}

Descartable

dismissible.tsx
1'use client';
2
3import { useState } from 'react';
4import { Banner } from '@/components/ui/banner';
5
6export function Dismissible() {
7 const [key, setKey] = useState(0);
8
9 return (
10 <div className="flex w-full flex-col gap-3">
11 <Banner key={key} variant="info" onClose={() => {}}>
12 <Banner.Content>
13 <Banner.Title>Dismissible banner</Banner.Title>
14 <Banner.Description>Click the close button to dismiss this banner.</Banner.Description>
15 </Banner.Content>
16 </Banner>
17 <button
18 type="button"
19 onClick={() => setKey((k) => k + 1)}
20 className="text-muted-foreground hover:text-foreground w-fit text-sm underline transition-colors"
21 >
22 Reset banner
23 </button>
24 </div>
25 );
26}

Referencia de API

PropiedadTipoPor defectoDescripción
variant"default" | "info" | "warning" | "danger" | "success""default"Controla el estilo visual y los colores de superficie.
iconReact.ReactNodeIcono personalizado que reemplaza el icono de variante.
onClose() => voidCallback que se dispara al descartar el banner.
stickybooleanfalseFija el banner en la parte superior del viewport.
classNamestringNombres de clases adicionales.
childrenReact.ReactNodeCompone el banner con Content, Title y Action.

Banner.Content

PropiedadTipoPor defectoDescripción
childrenReact.ReactNodeEnvuelve el título y la descripción.
classNamestringNombres de clases adicionales.

Banner.Title

PropiedadTipoPor defectoDescripción
childrenReact.ReactNodeTexto del título del banner.
classNamestringNombres de clases adicionales.

Banner.Description

PropiedadTipoPor defectoDescripción
childrenReact.ReactNodeTexto de soporte del banner.
classNamestringNombres de clases adicionales.

Banner.Action

PropiedadTipoPor defectoDescripción
hrefstringDestino del enlace.
childrenReact.ReactNodeTexto de la acción.
classNamestringNombres de clases adicionales.