Skeleton
Placeholders que esperam 150ms antes de aparecer, assumem o tamanho exato do conteúdo que envolvem e o fazem surgir com fade sem mover nada.
pnpm dlx shadcn@latest add https://hextaui.com/r/skeleton.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 cn tw-animate-cssCopie e cole o código a seguir no seu projeto.
components/ui/skeleton.tsx Atualize os caminhos de importação para corresponder à configuração do seu projeto.
O shimmer e o pulse usam duas animações do seu tema. Adicione-as uma vez ao seu arquivo CSS global.
Use um skeleton sozinho como placeholder dimensionado, ou passe loading e envolva o conteúdo real para que o placeholder assuma seu tamanho exato.
Formas
Sozinho, um skeleton é um bloco vazio. Dê a ele tamanho e raio com classes para combinar com o que ele representa.
Animações
animation escolhe um shimmer de varredura, um pulse suave ou none.
Texto
<SkeletonText /> desenha uma barra por linha e segue o tamanho e a altura de linha da fonte do pai, então ocupa o mesmo espaço do texto que substitui. A última linha é mais curta.
Envolver conteúdo real
Com loading, o skeleton renderiza o conteúdo real invisível por baixo, assumindo o tamanho exato, e nada se desloca quando os dados chegam. Quando loading vira false, o conteúdo aparece com fade.
Inline
Passe render={<span />} para colocar um skeleton dentro de uma frase. Ele fica na linha de base do texto.
Carregamento rápido
Um skeleton fica invisível nos primeiros 150ms e depois aparece com fade. Dados que chegam antes nunca fazem um placeholder piscar.
Muitas linhas
Skeletons montados juntos iniciam a animação juntos, então uma lista longa se lê como uma única área de carregamento.
Da direita para a esquerda
Em um layout da direita para a esquerda, o shimmer varre da direita para a esquerda.
- Um skeleton sozinho é decorativo e fica oculto das tecnologias assistivas, assim como
<SkeletonText />. - Um skeleton que envolve conteúdo define
aria-busyenquanto carrega. O conteúdo por baixo fica oculto das tecnologias assistivas e não pode receber foco até carregar. - Skeletons não anunciam nada. Quando as pessoas precisam saber o que está carregando, adicione um rótulo visível ou uma mensagem de status.
- Com movimento reduzido ativado, os skeletons aparecem de imediato, sem shimmer, pulse ou fade.
Aceita todos os atributos do elemento que renderiza.
| Prop | Tipo | Padrão |
|---|---|---|
animation | "shimmer" | "pulse" | "none" | "shimmer" |
loadingQuando definido, o skeleton envolve seus filhos: true mostra o placeholder, false mostra o conteúdo. Omita para um placeholder independente. | boolean | – |
render | ReactElement | (props, state) => ReactElement | <div> |
| Atributo | Descrição |
|---|---|
data-slot="skeleton" | Seleciona os skeletons no CSS. |
data-animation | A animação em uso. Removida quando o conteúdo envolvido terminou de carregar. |
data-loading | "true" ou "false" quando o skeleton envolve conteúdo. |
data-slot="skeleton-content" | Envolve o conteúdo real. Invisível e inerte durante o carregamento. |
--skeleton-dir | 1, ou -1 em layouts da direita para a esquerda. Define a direção do shimmer. |
Aceita todos os atributos de <div>.
| Prop | Tipo | Padrão |
|---|---|---|
linesArredondado para baixo e mantido entre 1 e 50. | number | 3 |
animation | "shimmer" | "pulse" | "none" | "shimmer" |
| Atributo | Descrição |
|---|---|
data-slot="skeleton-text" | O contêiner das linhas. |
- AlertMensagens inline para status e feedback, com uma superfície neutra, um ícone colorido e um botão de dispensar que recolhe suavemente.
- EmptyUm espaço reservado para telas que ainda não têm nada a mostrar, com ícone, mensagem e a próxima ação.
- ProgressUma barra ou anel que mostra o quanto uma tarefa avançou, suaviza entre as atualizações e desliza enquanto o total é desconhecido.
- 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.
- Aspect ratioUma caixa que mantém sua forma antes de a mídia carregar, exibe um shimmer durante o carregamento, faz a mídia aparecer com fade e usa um fallback quando ela falha.
Usado em blocos
Blocos que se baseiam em Skeleton.
- 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.
- ArtifactO painel ao lado de um chat de IA que mostra o que o modelo criou. Páginas web, SVGs, documentos e código chegam em streaming ao vivo e depois passam para uma prévia isolada em sandbox, com versões que você pode comparar e restaurar, uma divisão redimensionável e um bottom sheet no celular.
- BillingPlano e uso para um produto de IA, no estilo de Cursor, Claude e Vercel. Um medidor de uso dividido por modelo que projeta o fim do ciclo e avisa antes de os créditos acabarem, um gráfico diário que você pode percorrer, um limite de gastos com alertas que você pode pré-visualizar no medidor, mudanças de plano com proporcional exato, um formulário de cartão com validação real e faturas que baixam como PDF.
- 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.