Alert Banner
Inline semantic status callout with live-region announcement for feedback that stays on screen.
Identity
Section titled “Identity”- Category: Overlays & feedback
- Status: stable public Registry/export-map component family
- Targets: iOS · Android · Web, subject to the compatibility contract
- Prerequisites:
@beemvp/beeui-uiinstalled (or this component’s source copied via the Registry CLI below) and, on Web, the BeeUI Tailwind/Uniwind theme CSS loaded — see Start for full platform setup. - Source:
packages/ui/src/components/alert-banner.tsx
Import
Section titled “Import”import { AlertBanner, alertBannerVariants } from '@beemvp/beeui-ui';There is no documented deep/private source import. For source ownership from a BeeUI checkout:
pnpm beeui add alert-bannerRegistry (used throughout this page) is BeeUI’s source-ownership manifest — registry/registry.json — that the pnpm beeui/@beemvp/beeui-cli CLI reads to copy a component’s real source into your app and rewrite its internal imports; it is not an npm package index. This component’s own Registry entry: registry/registry.json.
Composition and public API
Section titled “Composition and public API”- Family exports:
AlertBanneralertBannerVariants- Also routed here, outside the Registry family:
alert-banner
- Package export subpath:
@beemvp/beeui-ui/alert-banner
- Also routed here, outside the Registry family:
Exported types: AlertBannerProps
The generated API inventory is mechanically joined to packages/ui/src/index.ts, Registry metadata, and the component reference contract. Each type’s field table below is parsed directly from that source, not a second hand-maintained copy; for the fuller behavior narrative see the canonical component behavior catalog.
State and behavior contract
Section titled “State and behavior contract”Stateless inline callout with no open/close or controlled prop; it live-announces (Android live-region, iOS AccessibilityInfo) whenever mounted with new content, with an optional explicit announcement override for complex children.
AlertBannerProps
Section titled “AlertBannerProps”| Prop | Type | Default | Description |
|---|---|---|---|
action |
React.ReactNode |
— | Rendered below the description, indented to align with it (e.g. a retry or dismiss button). |
announcement |
string |
— | Overrides the text announced to screen readers on iOS when the banner appears; by default the title and description are joined and announced, but only while neither holds element content — an element in either slot drops the announcement rather than announcing the other. live="none" suppresses it entirely. |
className |
string |
— | Extra utility classes, merged after the component’s own via cn(...), so they win on conflict. An escape hatch for source-owned and application work, not a cross-engine portability guarantee. |
description |
React.ReactNode |
— | Secondary supporting text rendered beneath the primary label or title. |
live |
'none' | 'polite' | 'assertive' |
'polite' |
Sets accessibilityLiveRegion and, on iOS, whether the announcement queues (polite) or interrupts (assertive); none suppresses the announcement entirely. Defaults to polite. |
title (required) |
React.ReactNode |
— | The primary heading text for this surface. |
variant |
'neutral' | 'info' | 'success' | 'warning' | 'destructive' |
'neutral' |
Chooses this element’s variant from alertBannerVariants’s presets, declared in packages/ui/src/components/alert-banner.tsx — the classes each value applies are there. |
Also carries every prop of Omit<ViewProps, 'children'> — that upstream contract is not reproduced here.
The executable fixtures below are the source-grounded usage examples; consumers should not infer state ownership from DOM structure or another UI library.
Provider and dependencies
Section titled “Provider and dependencies”- No additional provider is required by this family.
BeeUIProviderremains the recommended application root. - Peer/native dependencies visible to this Registry item:
react,react-native - Registry dependency closure:
box,core-cn,text,theme - Safe-area ownership remains explicit: shell surfaces touching system edges opt into
SafeArea; components do not silently invent app-shell insets. - Web consumers load the BeeUI semantic theme CSS as documented in Web onboarding.
Platform behavior
Section titled “Platform behavior”This family ships no platform-specific file, but its source branches on Platform, so some behavior differs by target.
The same public family is exposed across the supported target matrix; meaningful platform differences remain governed by the compatibility contract.
Evidence classes are not equal and this page does not blur them: Web behavior is exercised in a real browser, while iOS and Android carry package/export and native-compile evidence, which is not device-runtime proof. The compatibility contract records which class each claim rests on.
Accessibility
Section titled “Accessibility”- Roles this family assigns: none set in
alert-banner.tsx. - Accessibility states and properties it sets:
accessibilityLiveRegion— read fromalert-banner.tsx.
Keyboard/focus behavior, announcements, Dynamic Type/Web zoom, RTL and reduced-motion expectations are not derived here — see Accessibility overview, Keyboard & focus, RTL/localization and Large text & zoom. BeeUI does not claim universal accessibility certification from automated tests.
Styling and theming
Section titled “Styling and theming”- Style axes:
variant(5 values) — the values are in the props tables above. - Class-name surfaces:
className.
Colors, spacing and typography come from semantic tokens rather than from values written here — see Theming and Density. A className is an escape hatch for source-owned and application work, not a cross-engine portability guarantee.
Executable examples
Section titled “Executable examples”- Primary executable fixture:
apps/showcase/__tests__/component-contracts.test.tsx - Additional fixture:
apps/showcase/__tests__/dynamic-type-contract.test.tsx - Additional fixture:
apps/showcase/__tests__/issue-7-runtime-a11y.test.tsx - Additional fixture:
apps/showcase/component-gallery/component-gallery.tsx
Addressable examples
Section titled “Addressable examples”Each link below opens the Showcase at that exact example, not at the top of the gallery:
basic— smallest meaningful complete usage
The Showcase links demonstrate Web behavior; use the native-preview guide for real simulator/emulator/device paths.
Live Web preview
Section titled “Live Web preview”This frame loads the real BeeUI Web Showcase on demand; it is not a second docs-only implementation. It proves browser behavior only. Use native preview for iOS/Android simulator, emulator or device paths.
Composition anatomy
Section titled “Composition anatomy”- Family root / primary export:
AlertBanner- Public composition parts / helpers:
alertBannerVariants
- Exported type surface:
AlertBannerProps
- Public composition parts / helpers:
The tree above is ordinary document structure so it remains readable with keyboard and assistive technology; it is derived from the real public export family rather than a canvas-only diagram.
Verified example source
Section titled “Verified example source”These are the parts of the typechecked runtime Showcase fixture behind this live preview — apps/showcase/component-gallery/component-gallery.tsx, 1103 lines — where Alert Banner is actually used: 5 lines in 1 place. Each block is copied verbatim from the line range named above it, so it is the same executable source, not a retelling of it. The rest of that file exercises other families and is not reproduced here.
Imports the examples below need (a filtered subset of the fixture’s own top-level imports):
import { AlertBanner, Switch } from '@beemvp/beeui-ui'; <AlertBanner description="Everything below is rendered from the public @beemvp/beeui-ui API. Switch themes, open overlays, change form state, and resize the web window to exercise the same contracts used on native." title="Hands-on playground" variant="info" />Open the fixture itself for the full surrounding component. For a smaller app-specific example, start from the imports and fixture-state blocks above and keep only the state your screen owns.
Limitations
Section titled “Limitations”The spoken announcement is iOS-only — on Android and Web the banner sets a live region and nothing more — and even on iOS it is skipped when live is set to "none", or when a supplied title or description is element content rather than a plain string or number and no announcement overrides it. There is no dismiss affordance: the banner stays until the caller unmounts it, and any close control has to be passed through action.