import { Banner } from "@lark-ui/core";
import { Info, WarningCircle, Warning } from "@phosphor-icons/react";
/** 展示所有通告栏(Banner)变体,包含结构化的标题和描述。 */
export function BannerVariantsDemo() {
return (
<div className="w-full space-y-3">
<Banner
icon={<Info weight="fill" />}
title="有可用更新"
description="新版本已可安装。"
/>
<Banner
icon={<Warning weight="fill" />}
variant="alert"
title="会话即将过期"
description="您的会话将在 5 分钟后过期。"
/>
<Banner
icon={<WarningCircle weight="fill" />}
variant="error"
title="保存失败"
description="无法保存您的更改,请重试。"
/>
<Banner
icon={<Info weight="fill" />}
variant="secondary"
title="已安排维护"
description="此服务将中断 10 分钟。"
/>
</div>
);
}安装
统一导出
import { Banner } from "@lark-ui/core";按需导出
import { Banner } from "@lark-ui/core/components/banner";用法
import { Banner } from "@lark-ui/core";
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."
/>
);
}示例
变体
默认
import { Banner } from "@lark-ui/core";
import { Info } from "@phosphor-icons/react";
/** 默认的信息类通告栏,包含标题和描述。 */
export function BannerDefaultDemo() {
return (
<Banner
icon={<Info weight="fill" />}
title="有可用更新"
description="新版本已可安装。"
/>
);
}警告
import { Banner } from "@lark-ui/core";
import { Warning } from "@phosphor-icons/react";
/** 警示类通告栏,用于需要用户关注的警告。 */
export function BannerAlertDemo() {
return (
<Banner
icon={<Warning weight="fill" />}
variant="alert"
title="会话即将过期"
description="您的会话将在 5 分钟后过期。"
/>
);
}错误
import { Banner } from "@lark-ui/core";
import { WarningCircle } from "@phosphor-icons/react";
/** 错误类通告栏,用于严重问题。 */
export function BannerErrorDemo() {
return (
<Banner
icon={<WarningCircle weight="fill" />}
variant="error"
title="保存失败"
description="无法保存您的更改,请重试。"
/>
);
}次要
import { Banner } from "@lark-ui/core";
import { Info } from "@phosphor-icons/react";
/** 中性的次要通告栏,用于上下文提示信息。 */
export function BannerSecondaryDemo() {
return (
<Banner
icon={<Info weight="fill" />}
variant="secondary"
title="已安排维护"
description="此服务将中断 10 分钟。"
/>
);
}带图标
import { Banner } from "@lark-ui/core";
import { Warning } from "@phosphor-icons/react";
/** 带自定义图标和结构化内容的通告栏。 */
export function BannerWithIconDemo() {
return (
<Banner
icon={<Warning weight="fill" />}
variant="alert"
title="需要复核"
description="请在继续之前核对您的账单信息。"
/>
);
}描边主题
theme="outlined" 对应飞书 Universe Design 的 ud__notice--outlined:浅色底 + 1px 状态色描边,常用于需要更轻量提示的场合。
import { Banner } from "@lark-ui/core";
import { Info, WarningCircle, Warning } from "@phosphor-icons/react";
/**
* 描边主题:浅色底 + 1px 状态色描边,对应飞书 `ud__notice--outlined`。
*/
export function BannerOutlinedDemo() {
return (
<div className="w-full space-y-3">
<Banner
theme="outlined"
icon={<Info weight="fill" />}
title="有可用更新"
description="新版本已可安装。"
/>
<Banner
theme="outlined"
variant="alert"
icon={<Warning weight="fill" />}
title="会话即将过期"
description="您的会话将在 5 分钟后过期。"
/>
<Banner
theme="outlined"
variant="error"
icon={<WarningCircle weight="fill" />}
title="保存失败"
description="无法保存您的更改,请重试。"
/>
<Banner
theme="outlined"
variant="secondary"
icon={<Info weight="fill" />}
title="已安排维护"
description="此服务将中断 10 分钟。"
/>
</div>
);
}带操作
import { Banner } from "@lark-ui/core";
import { Info, WarningCircle, X } from "@phosphor-icons/react";
/** 带操作按钮的通告栏:主要操作按钮和可关闭按钮。 */
export function BannerWithActionDemo() {
return (
<div className="w-full space-y-3">
<Banner
icon={<Info weight="fill" />}
title="有可用更新"
description="新版本已可安装。"
action={
<>
<Banner.Action>更新</Banner.Action>
<Banner.Action variant="ghost" icon={<X />} aria-label="关闭" />
</>
}
/>
<Banner
variant="error"
icon={<WarningCircle weight="fill" />}
title="保存失败"
description="无法保存您的更改,请重试。"
action={
<>
<Banner.Action>重试</Banner.Action>
<Banner.Action variant="ghost" icon={<X />} aria-label="关闭" />
</>
}
/>
<Banner
variant="alert"
icon={<WarningCircle weight="fill" />}
title="保存失败"
description="无法保存您的更改,请重试。"
action={
<>
<Banner.Action>重试</Banner.Action>
<Banner.Action variant="ghost" icon={<X />} aria-label="关闭" />
</>
}
/>
<Banner
variant="secondary"
icon={<WarningCircle weight="fill" />}
title="保存失败"
description="无法保存您的更改,请重试。"
action={
<>
<Banner.Action>重试</Banner.Action>
<Banner.Action variant="ghost" icon={<X />} aria-label="关闭" />
</>
}
/>
</div>
);
}带多个操作
import { Banner } from "@lark-ui/core";
import { Warning } from "@phosphor-icons/react";
/** 带多个操作按钮的通告栏。 */
export function BannerWithActionsDemo() {
return (
<div className="w-full space-y-3">
<Banner
icon={<Warning weight="fill" />}
variant="error"
title="您的账户已逾期 90 天。"
description="请立即支付以避免服务中断。"
action={
<>
<Banner.Action>立即支付</Banner.Action>
<Banner.Action variant="secondary">前往账单</Banner.Action>
</>
}
/>
</div>
);
}紧凑尺寸
在对话框等空间受限的场景中使用 size="sm"。此时通告栏应服务于周边体验,不与主要操作争夺注意力,因此优先使用与描述文字行内渲染的 Lark Link。需要更强强调时,请使用 Banner.Action,它会渲染在末尾位置。
带行内链接
import { Banner, Link } from "@lark-ui/core";
/**
* 紧凑型 `size="sm"` 通告栏,适用于对话框等空间有限的场景。
*/
export function BannerCompactDemo() {
return (
<Banner
size="sm"
description="此区域中已存在 puppies.cloudflare.dev 的 DNS 记录。"
action={<Link href="#">管理 puppies.cloudflare.dev 的 DNS</Link>}
/>
);
}带行动号召
import { Banner } from "@lark-ui/core";
import { X } from "@phosphor-icons/react";
/** 带尾部主要操作按钮的紧凑型通告栏。 */
export function BannerCompactWithCtaDemo() {
return (
<Banner
size="sm"
description="此区域中已存在 puppies.cloudflare.dev 的 DNS 记录。"
action={
<>
<Banner.Action>管理 DNS</Banner.Action>
<Banner.Action variant="ghost">
<X />
</Banner.Action>
</>
}
/>
);
}不带操作
import { Banner } from "@lark-ui/core";
/** 不带操作按钮的紧凑型通告栏。 */
export function BannerCompactWithoutActionDemo() {
return (
<Banner
size="sm"
description="此区域中已存在 puppies.cloudflare.dev 的 DNS 记录。"
/>
);
}自定义内容
import { Banner, Text } from "@lark-ui/core";
import { Info } from "@phosphor-icons/react";
/** 描述中使用自定义 React 内容的通告栏。 */
export function BannerCustomContentDemo() {
return (
<Banner
icon={<Info weight="fill" />}
title="支持自定义内容"
description={
<Text DANGEROUS_className="text-inherit">
此通告栏支持使用 Text 渲染<strong>自定义内容</strong>。
</Text>
}
/>
);
}API 参考
| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| className | string | - | 通过 `cn()` 合并的额外 CSS 类名。 |
| id | string | - | - |
| lang | string | - | - |
| icon | ReactNode | - | 渲染在通告栏内容之前的图标元素(例如来自 `@phosphor-icons/react`)。 |
| title | string | - | 通告栏的主标题文字。用于注入国际化文案。 |
| description | ReactNode | - | 显示在标题下方的次要描述文字。用于注入国际化文案。 |
| action | ReactNode | - | 用于放置 CTA 按钮或链接的操作插槽。紧凑型通告栏会把 Lark `Link` 内联渲染在描述旁;CTA 则渲染在末尾。使用 `Banner.Action` 可获得随通告栏变体自适应的强调型 CTA;其他节点按原样渲染。可以在 Fragment 中传入多个操作。仅在结构化模式(带 `title` 或 `description`)下使用。 |
| text | string | - | - |
| children | ReactNode | - | - |
| variant | "default" | "alert" | "error" | "secondary" | "default" | 通告栏的视觉样式。 - `"default"` — 用于一般信息的蓝色通告栏 - `"alert"` — 用于警示信息的黄色通告栏 - `"error"` — 用于严重问题的红色通告栏 - `"secondary"` — 用于次要信息的中性通告栏 |
| size | "base" | "sm" | "base" | 通告栏的尺寸。`"sm"` 通告栏使用更紧凑的间距和 `text-sm`,将 Lark `Link` 操作内联渲染在描述旁,并把它内部的 `Banner.Action` 子元素设为 `"xs"` 尺寸——适合对话框等空间紧凑的场景。 |
| theme | "filled" | "outlined" | "filled" | 通告栏的表面处理方式。 - `"filled"` — 平铺的淡色底(默认) - `"outlined"` — 淡色底加 1px 状态色边框 |