Empty
Core Idea
Componente padronizado para estados vazios (sem dados, 404, offline, sem notificações), combinando ícone/avatar, título, descrição e ações em uma estrutura consistente.
Key Concepts
EmptyMedia variant="icon" | "default": "icon" estiliza um container circular/quadrado para ícone; "default" é usado para conteúdo livre como Avatar ou grupo de avatares.
- Composição:
Empty > EmptyHeader (EmptyMedia, EmptyTitle, EmptyDescription), EmptyContent.
EmptyContent: área para ações (botões, InputGroup, links) abaixo do header.
- Elementos extras (ex. um
Button variant="link") podem ficar fora de EmptyContent, direto como filho de Empty.
Code Examples
<Empty>
<EmptyHeader>
<EmptyMedia variant="icon">
<IconFolderCode />
</EmptyMedia>
<EmptyTitle>No Projects Yet</EmptyTitle>
<EmptyDescription>
You haven't created any projects yet. Get started by creating your first project.
</EmptyDescription>
</EmptyHeader>
<EmptyContent className="flex-row justify-center gap-2">
<Button>Create Project</Button>
<Button variant="outline">Import Project</Button>
</EmptyContent>
<Button variant="link" render={<a href="#" />} className="text-muted-foreground" size="sm" nativeButton={false}>
Learn More <ArrowUpRightIcon />
</Button>
</Empty>
- O que demonstra: estado vazio completo com duas ações primárias e um link secundário fora do
EmptyContent.
<Empty>
<EmptyHeader>
<EmptyTitle>404 - Not Found</EmptyTitle>
<EmptyDescription>
The page you're looking for doesn't exist. Try searching for what you need below.
</EmptyDescription>
</EmptyHeader>
<EmptyContent>
<InputGroup className="sm:w-3/4">
<InputGroupInput placeholder="Try searching for pages..." />
<InputGroupAddon><SearchIcon /></InputGroupAddon>
<InputGroupAddon align="inline-end"><Kbd>/</Kbd></InputGroupAddon>
</InputGroup>
</EmptyContent>
</Empty>
- O que demonstra: página 404 usando
InputGroup de busca dentro de EmptyContent, sem EmptyMedia.
Reference Tables
Empty
| Prop | Type | Default |
|---|
className | string | |
EmptyMedia
| Prop | Type | Default |
|---|
variant | "default" | "icon" | default |
EmptyHeader / EmptyTitle / EmptyDescription / EmptyContent
| Prop | Type | Default |
|---|
className | string | |
Anti-patterns
- Colocar
Avatar dentro de EmptyMedia variant="icon": use variant="default" para avatar/imagem; "icon" é estilizado especificamente para ícones simples.
- Empty sem
EmptyDescription: título sozinho raramente comunica a ação esperada do usuário.
Key Takeaways
EmptyMedia tem dois modos visuais distintos: icon (ícone simples) vs default (avatar, avatar group, imagem).
EmptyContent é o lugar certo para CTAs; conteúdo secundário (links "saiba mais") pode ficar fora dele.
- Empty é reaproveitável para 404, "sem notificações", "offline", "sem resultados de busca" — mesma estrutura, conteúdo diferente.
- Use
border border-dashed ou bg-muted/30 no Empty para variações visuais (outline, tela cheia).
Connects To
- Spinner (ch059): usado dentro de
EmptyMedia como estado de "processando" em vez de vazio.
- Avatar (ch063):
EmptyMedia variant="default" frequentemente envolve um Avatar ou AvatarGroup.
- Item (ch071): ambos seguem o mesmo padrão de composição Header/Content/Media do design system Base UI.