Update available
A new version is ready to install.
Session expiring
Your session will expire in 5 minutes.
Save failed
We couldn't save your changes. Please try again.
import { Banner } from "@cloudflare/kumo";
import { Info, WarningCircle, Warning } from "@phosphor-icons/react";
/** Shows all banner variants with structured title and description. */
export function BannerVariantsDemo() {
return (
<div className="w-full space-y-3">
<Banner
icon={<Info weight="fill" />}
title="Update available"
description="A new version is ready to install."
/>
<Banner
icon={<Warning weight="fill" />}
variant="alert"
title="Session expiring"
description="Your session will expire in 5 minutes."
/>
<Banner
icon={<WarningCircle weight="fill" />}
variant="error"
title="Save failed"
description="We couldn't save your changes. Please try again."
/>
</div>
);
} Installation
Barrel
import { Banner } from "@cloudflare/kumo"; Granular
import { Banner } from "@cloudflare/kumo/components/banner"; Usage
import { Banner } from "@cloudflare/kumo";
import { Info } from "@phosphor-icons/react";
export default function Example() {
return (
<Banner
icon={<Info weight="fill" />}
title="Update available"
description="A new version is ready to install."
/>
);
} Examples
Variants
Default
Update available
A new version is ready to install.
import { Banner } from "@cloudflare/kumo";
import { Info } from "@phosphor-icons/react";
/** Default informational banner with title and description. */
export function BannerDefaultDemo() {
return (
<Banner
icon={<Info weight="fill" />}
title="Update available"
description="A new version is ready to install."
/>
);
} Alert
Session expiring
Your session will expire in 5 minutes.
import { Banner } from "@cloudflare/kumo";
import { Warning } from "@phosphor-icons/react";
/** Alert banner for warnings that need attention. */
export function BannerAlertDemo() {
return (
<Banner
icon={<Warning weight="fill" />}
variant="alert"
title="Session expiring"
description="Your session will expire in 5 minutes."
/>
);
} Error
Save failed
We couldn't save your changes. Please try again.
import { Banner } from "@cloudflare/kumo";
import { WarningCircle } from "@phosphor-icons/react";
/** Error banner for critical issues. */
export function BannerErrorDemo() {
return (
<Banner
icon={<WarningCircle weight="fill" />}
variant="error"
title="Save failed"
description="We couldn't save your changes. Please try again."
/>
);
} With icon
Review required
Please review your billing information before proceeding.
import { Banner } from "@cloudflare/kumo";
import { Warning } from "@phosphor-icons/react";
/** Banner with custom icon and structured content. */
export function BannerWithIconDemo() {
return (
<Banner
icon={<Warning weight="fill" />}
variant="alert"
title="Review required"
description="Please review your billing information before proceeding."
/>
);
} With action
Update available
A new version is ready to install.
Update available
A new version is ready to install.
import { Banner, Button } from "@cloudflare/kumo";
import { Info, X } from "@phosphor-icons/react";
/** Banner with action buttons: CTA and dismissable. */
export function BannerWithActionDemo() {
return (
<div className="w-full space-y-3">
<Banner
icon={<Info weight="fill" />}
title="Update available"
description="A new version is ready to install."
action={<Button size="sm">Update now</Button>}
/>
<Banner
icon={<Info weight="fill" />}
title="Update available"
description="A new version is ready to install."
action={
<Button
size="sm"
variant="ghost"
shape="square"
icon={X}
aria-label="Dismiss"
/>
}
/>
</div>
);
} With multiple actions
Session expiring
Your session will expire in 5 minutes.
import { Banner, Button } from "@cloudflare/kumo";
import { Warning } from "@phosphor-icons/react";
/** Banner with multiple action buttons. */
export function BannerWithActionsDemo() {
return (
<Banner
icon={<Warning weight="fill" />}
variant="alert"
title="Session expiring"
description="Your session will expire in 5 minutes."
action={
<>
<Button size="sm" variant="secondary">
Dismiss
</Button>
<Button size="sm">Extend session</Button>
</>
}
/>
);
} Custom content
Custom content supported
This banner supports custom content with Text.
import { Banner, Text } from "@cloudflare/kumo";
import { Info } from "@phosphor-icons/react";
/** Banner with custom React content in description. */
export function BannerCustomContentDemo() {
return (
<Banner
icon={<Info weight="fill" />}
title="Custom content supported"
description={
<Text DANGEROUS_className="text-inherit">
This banner supports <strong>custom content</strong> with Text.
</Text>
}
/>
);
} API Reference
| Prop | Type | Default | Description |
|---|---|---|---|
| icon | ReactNode | - | Icon element rendered before the banner content (e.g. from `@phosphor-icons/react`). |
| title | string | - | Primary heading text for the banner. Use for i18n string injection. |
| description | ReactNode | - | Secondary description text displayed below the title. Use for i18n string injection. |
| action | ReactNode | - | Action slot rendered at the trailing end of the banner (e.g. a CTA button or link). Only used in structured mode (with `title` or `description`). |
| text | string | - | - |
| children | ReactNode | - | - |
| variant | "default" | "alert" | "error" | "default" | Visual style of the banner. - `"default"` — Informational blue banner for general messages - `"alert"` — Warning yellow banner for cautionary messages - `"error"` — Error red banner for critical issues |
| className | string | - | Additional CSS classes merged via `cn()`. |