「这里还什么都没有」的那一块:EmptyHeader 装媒体、标题、描述,EmptyContent
装按钮、输入框或链接 —— 把用户带出空态的动作。六个部件底下全是纯 <div>,没有
Base UI state,className 只收字符串,其余原生属性(含 ref)原样透传;
布局只烘了居中、间距和 border-dashed,边框和背景都留给 className,
见描边与背景。
母版的「Avatar」「Avatar Group」两节本页省去:Avatar 尚未提升为公开组件。
使用
import { Empty, EmptyContent, EmptyDescription, EmptyHeader, EmptyMedia, EmptyTitle } from '@gedatou/cadenza-ui'<Empty>
<EmptyHeader>
<EmptyMedia variant="icon">
<IconInbox aria-hidden />
</EmptyMedia>
<EmptyTitle>没有数据</EmptyTitle>
<EmptyDescription>还没有任何记录。</EmptyDescription>
</EmptyHeader>
<EmptyContent>
<Button>新建</Button>
</EmptyContent>
</Empty>组成
Empty
├── EmptyHeader
│ ├── EmptyMedia
│ ├── EmptyTitle
│ └── EmptyDescription
└── EmptyContent部件不写就不渲染:只要标题的空态就只放 EmptyTitle,没有动作就省掉
EmptyContent。
描边
根部件自带 border-dashed 和 rounded-xl 但没有边框宽度,一个 border 就能画出
虚线框。
背景
背景同样是根部件的 className:bg-* 和渐变工具类与烘进去的布局类互不干扰。
InputGroup
EmptyContent 收任意控件,不限于按钮 —— 放一个
InputGroup 就把空态变成下一次搜索的起点。
什么时候用 Empty
Empty 只负责画一块空态,不知道数据有没有到。库里带数据的组件各有自己的空态
槽位,Empty 是塞进槽位里的内容,不是槽位的替代品:
状态与 className
纯 DOM 家族,没有 Base UI state;唯一的状态属性挂在 EmptyMedia 上:
六个 data-slot 可以当选择器用:
Props
顺序规则:必填 → 非受控默认值 → 受控值 → 回调 → 行为开关 → 外观 → className。
六个部件全是纯 <div>,className 一律字符串,原生 <div> 的 props(含 ref)透传。
Empty
根容器:flex-col 居中、gap-4、p-6、rounded-xl border-dashed、文字居中。
<Empty className="border">
<EmptyHeader />
<EmptyContent />
</Empty>EmptyHeader
媒体、标题、描述的竖排组,max-w-sm。
<EmptyHeader>
<EmptyMedia />
<EmptyTitle />
<EmptyDescription />
</EmptyHeader>EmptyMedia
图标、图片或任何别的东西的位置。
<EmptyMedia variant="icon">
<IconInbox aria-hidden />
</EmptyMedia>EmptyTitle
text-sm font-medium 的标题。
<EmptyTitle>没有数据</EmptyTitle>EmptyDescription
text-muted-foreground 的描述;直接子级的 <a> 自带下划线,悬停变主色。
上游把它声明成 <p> 却渲染成 <div>,seam 已把类型改回 <div>,ref 和事件
处理器按 HTMLDivElement 写。
<EmptyDescription>
还没有任何记录,<a href="/docs">看看文档</a>。
</EmptyDescription>EmptyContent
动作区:按钮、输入框、链接,max-w-sm 竖排 gap-2.5。
<EmptyContent>
<Button>新建</Button>
</EmptyContent>7 个类型一并导出:EmptyProps / EmptyHeaderProps / EmptyMediaProps /
EmptyMediaVariant / EmptyTitleProps / EmptyDescriptionProps /
EmptyContentProps。