Empty
Um espaço reservado para telas que ainda não têm nada a mostrar, com ícone, mensagem e a próxima ação.
pnpm dlx shadcn@latest add https://hextaui.com/r/empty.jsonAdiciona o componente, os tokens de tema do HextaUI e quaisquer componentes do HextaUI dos quais ele depende.
Adicione os tokens de tema ao seu CSS global, se ainda não o fez.
Instale as dependências.
pnpm add @base-ui/react class-variance-authority cnCopie e cole o código a seguir no seu projeto.
components/ui/empty.tsx Atualize os caminhos de importação para corresponder à configuração do seu projeto.
Entrada
Quando um estado vazio substitui o conteúdo, suas partes surgem com fade uma após a outra: mídia, título, descrição e depois as ações. Dispense as notificações para ver. Com movimento reduzido, ele apenas aparece. Defina animated={false} para estados vazios que existem desde a primeira pintura.
Outline
variant="outline" desenha uma borda fina tracejada, a forma habitual de marcar uma zona de soltar ou uma área à espera de conteúdo.
Atenuado
variant="muted" fica sobre um preenchimento suave. O bloco do ícone passa para uma superfície branca elevada, para que continue se destacando.
Pequeno
size="sm" reduz o padding, os espaços, o bloco do ícone e o título para sidebars, popovers e painéis estreitos.
Avatar
A variant padrão de EmptyMedia apenas centraliza seu conteúdo, então qualquer avatar, badge ou ilustração se encaixa.
Grupo de avatares
Mostre quem poderia estar aqui, para convites e espaços compartilhados.
Imagem
Dê dimensões explícitas às imagens para que o layout não se desloque enquanto elas carregam.
Sem resultados de busca
Troque os resultados por um estado vazio quando os filtros não encontrarem nada, e ofereça uma saída. Um role="status" visualmente oculto anuncia a contagem, então usuários de leitor de tela ouvem a mudança sem que a lista inteira seja lida.
Em um card
Use size="sm" com a variant muted para preencher um card que ainda não tem dados.
Em uma tabela
Coloque-o em uma única célula que abrange todas as colunas com colSpan, para que o cabeçalho permaneça alinhado.
Em um popover
Um estado vazio compacto para menus e painéis de notificações.
Em uma lista de comandos
<CommandEmpty /> passa a busca atual a uma função como filho, para que a mensagem possa citá-la.
Nível do heading
O título é um <div> para nunca quebrar a estrutura da sua página. Renderize-o com o nível de heading adequado e rotule a região com ele.
Conteúdo longo
Nomes sem quebra e endereços longos quebram dentro do contêiner, e rótulos longos de botão são truncados.
Da direita para a esquerda
Tudo é centralizado e usa propriedades lógicas, então é lido naturalmente em layouts da direita para a esquerda.
<EmptyTitle />renderiza um<div>. Passerender={<h2 />}(ou o nível adequado) quando o estado vazio for uma seção da página.<EmptyMedia variant="icon" />fica oculto para tecnologias assistivas porque o título já diz o que ele significa. Imagens na variant padrão continuam expostas, então dê a elas umaltoualt="".- Quando os resultados desaparecem após uma busca ou filtro, anuncie a mudança com uma mensagem curta de
role="status"ao lado da lista. Não transforme o estado vazio inteiro em uma região live, pois seus botões e links seriam lidos a cada vez.
Cada parte renderiza um elemento simples, aceita seus atributos e suporta a prop render para trocá-lo.
| Prop | Tipo | Padrão |
|---|---|---|
variant | "default" | "outline" | "muted" | "default" |
sizesm reduz o padding, os espaços, o bloco do ícone e o título. | "default" | "sm" | "default" |
animatedFaz as partes surgirem com fade em sequência quando o estado vazio é montado. Ignorado com movimento reduzido. | boolean | true |
render | ReactElement | (props, state) => ReactElement | <div> |
| Atributo | Descrição |
|---|---|
data-slot="empty" | Selecione a raiz no CSS. |
data-variant | A variante atual. |
data-size | O tamanho atual. |
data-animated | Presente quando a animação de entrada está ativada. |
--empty-padding | Padding em todos os lados. Definido por size. |
--empty-gap | Espaço entre o header e o conteúdo. Definido por size. |
| Prop | Tipo | Padrão |
|---|---|---|
render | ReactElement | (props, state) => ReactElement | <div> |
| Atributo | Descrição |
|---|---|
data-slot="empty-header" | Selecione o cabeçalho no CSS. |
| Prop | Tipo | Padrão |
|---|---|---|
varianticon coloca um ícone em um bloco atenuado. stack eleva o bloco sobre dois cards em leque que se abrem quando o mouse passa sobre o estado vazio. Ambos ocultam a mídia para tecnologias assistivas. | "default" | "icon" | "stack" | "default" |
render | ReactElement | (props, state) => ReactElement | <div> |
| Atributo | Descrição |
|---|---|
data-slot="empty-icon" | Seleciona a mídia no CSS. Compatível com o shadcn. |
data-variant | A variante atual. |
| Prop | Tipo | Padrão |
|---|---|---|
renderRenderize um heading, como render={<h2 />}. | ReactElement | (props, state) => ReactElement | <div> |
| Atributo | Descrição |
|---|---|
data-slot="empty-title" | Selecione o título no CSS. |
| Prop | Tipo | Padrão |
|---|---|---|
renderLinks simples dentro dele são sublinhados. Componentes renderizados como links mantêm o próprio estilo. | ReactElement | (props, state) => ReactElement | <div> |
| Atributo | Descrição |
|---|---|
data-slot="empty-description" | Selecione a descrição no CSS. |
| Prop | Tipo | Padrão |
|---|---|---|
render | ReactElement | (props, state) => ReactElement | <div> |
| Atributo | Descrição |
|---|---|
data-slot="empty-content" | Seleciona a área de ações no CSS. |
- AlertMensagens inline para status e feedback, com uma superfície neutra, um ícone colorido e um botão de dispensar que recolhe suavemente.
- ProgressUma barra ou anel que mostra o quanto uma tarefa avançou, suaviza entre as atualizações e desliza enquanto o total é desconhecido.
- SkeletonPlaceholders que esperam 150ms antes de aparecer, assumem o tamanho exato do conteúdo que envolvem e o fazem surgir com fade sem mover nada.
- SpinnerUm indicador de carregamento com tracinhos no estilo Apple ou um anel que "respira", que pode esperar antes de aparecer e permanecer o suficiente para não piscar.
- ToastMensagens breves que se empilham com ordem, expandem no hover, saem com deslize e transformam um estado de carregamento em sucesso ou erro no próprio lugar.
Usado em blocos
Blocos que se baseiam em Empty.
- API keysA página de chaves de API de um produto de IA, como nos consoles da OpenAI e da Anthropic. Crie chaves com permissões restritas e uma expiração, veja o segredo uma única vez com uma cópia que confirma, revogue com desfazer, renomeie no próprio lugar, faça a rotação com um período de tolerância e veja o uso por chave.
- Diff ReviewRevise as edições de um agente em vários arquivos antes que sejam aplicadas. Uma árvore de arquivos com contagens, aceite ou rejeite cada mudança, cada arquivo ou tudo de uma vez, comentários em qualquer linha ou intervalo que voltam para o agente, visões unificada e dividida, destaques por palavra, desfazer, edições em streaming e um resumo "4 arquivos editados" para o chat.
- SecuritySessões e segurança para um produto de IA. Dispositivos ativos com encerramento de sessão que anima a saída das linhas, troca de senha com um medidor de força em tempo real, configuração de autenticação em duas etapas com um QR code real, uma verificação de 6 dígitos e códigos de recuperação para baixar, passkeys via WebAuthn e exclusão de conta protegida por uma confirmação digitada.
- SettingsConfigurações para um produto de IA, organizadas como no Cursor e no Claude. Uma barra lateral preenchida com busca, grupos e links externos, cards de linhas com seletores discretos e opções aninhadas, uma ilha de salvar escura que só sobe quando algo muda, ⌘S para salvar, erros de campo vindos das suas verificações ou do seu servidor e estados de carregamento com o formato do conteúdo.