Data Table
Tabela com cabeçalho de ação, colunas ordenáveis, checkboxes via peer/sr-only e ações no hover. Fix v2.2: checkboxes agora usam o padrão peer/sr-only (consistente com A07).
Usuários
3 registros
| Status | Plano | Criado em | Ações | ||
|---|---|---|---|---|---|
AB Ana Barros ana@empresa.com |
Ativo | Pro | 12 jan 2025 | ||
CS Carlos Silva carlos@empresa.com |
Pendente | Free | 03 fev 2025 | ||
MF Maria Ferreira maria@empresa.com |
Inativo | Enterprise | 17 mar 2024 |
Exibindo 3 de 3 registros
<!-- FIX v2.2: checkboxes = peer/sr-only, não accent-zinc-900 --> <label class="flex items-center justify-center cursor-pointer"> <input type="checkbox" class="peer sr-only" /> <span class="w-[18px] h-[18px] flex items-center justify-center border border-zinc-300 bg-white peer-checked:bg-zinc-900 peer-checked:border-zinc-900 peer-focus-visible:ring-2 peer-focus-visible:ring-zinc-900 peer-focus-visible:ring-offset-2 transition-all"> <!-- SVG checkmark — opacity-0 / peer-checked:opacity-100 --> </span> </label> <!-- Coluna ordenável --> <th aria-sort="ascending"> <button class="flex items-center gap-1 mono text-[10px] font-semibold uppercase tracking-widest text-zinc-400 hover:text-zinc-700"> Nome <!-- SVG sort --> </button> </th> <!-- Ações hover --> <tr class="hover:bg-zinc-50 group"> <td class="px-5 py-3.5 text-right"> <div class="flex items-center justify-end gap-1 opacity-0 group-hover:opacity-100 transition-opacity"> <!-- btn editar + btn excluir --> </div> </td> </tr>
Modal / Dialog
Use <dialog> nativo ou role="dialog". Sempre: aria-modal="true", foco trapped, fechar no Escape.
Estrutura (preview estático)
Excluir projeto
Esta ação não pode ser desfeita.
Você está prestes a excluir "Projeto Alpha". Todos os dados serão permanentemente removidos.
<!-- Backdrop --> <div class="fixed inset-0 bg-zinc-900/50 z-40" aria-hidden="true"></div> <!-- Centering wrapper --> <div class="fixed inset-0 z-50 flex items-center justify-center p-4"> <div role="dialog" aria-modal="true" aria-labelledby="modal-title" class="bg-white border border-zinc-200 shadow-xl w-full max-w-md"> <!-- Header --> <div class="flex items-start justify-between px-6 py-4 border-b border-zinc-100"> <h2 id="modal-title" class="text-base font-semibold text-zinc-900"> Título </h2> <button aria-label="Fechar modal" class="p-1 -mr-1 text-zinc-400 hover:text-zinc-700 hover:bg-zinc-100 transition-colors flex-shrink-0"> <!-- SVG X 20×20 --> </button> </div> <!-- Body: px-6 py-5 --> <!-- Footer: flex justify-end gap-2 px-6 py-4 border-t bg-zinc-50 --> </div> </div> <!-- Regras: - Fechar no backdrop (JS) - Fechar no Escape (JS) - Foco no primeiro elemento focável - Trap focus dentro do modal -->
Auth Form — Login
Formulário de autenticação completo. Logo + campos + CTA + link de registro.
Entrar
Acesse sua conta para continuar
Não tem conta? Criar conta
<div class="min-h-screen bg-zinc-50 flex items-center justify-center p-4"> <div class="w-full max-w-sm"> <!-- Logo + título (text-center mb-8) --> <form class="space-y-4" method="post" action="/auth/login"> <!-- Field e-mail --> <!-- Field senha + link "Esqueceu?" --> <!-- Checkbox lembrar (peer trick) --> <!-- Submit: w-full py-2.5 --> <!-- Divider "ou" --> <!-- Botão OAuth: border border-zinc-300 --> </form> <p class="text-center text-sm text-zinc-500 mt-6"> Não tem conta? <a href="/registro" class="text-zinc-900 font-medium underline underline-offset-2 hover:text-zinc-700"> Criar conta </a> </p> </div> </div>
Settings Section
Padrão de configurações: título à esquerda, campos à direita. Responsivo: empilha em mobile.
Informações pessoais
Nome, e-mail e foto que aparecem no seu perfil público.
Usado para login e comunicações.
Notificações
Controle quais avisos você quer receber.
<div class="grid grid-cols-1 md:grid-cols-3 gap-8 p-6 border-b border-zinc-100"> <!-- Esquerda: título + desc --> <div> <h3 class="text-sm font-semibold text-zinc-900 mb-1"> Seção </h3> <p class="text-xs text-zinc-500 leading-relaxed"> Descrição. </p> </div> <!-- Direita: formulário --> <div class="md:col-span-2 space-y-4"> <!-- campos --> </div> </div> <!-- Footer de ações --> <div class="flex items-center justify-end gap-2 px-6 py-4 bg-zinc-50"> <!-- Cancelar + Salvar --> </div>
Pricing Block
Grid de planos com destaque no plano recomendado. Estrutura: nome + preço + features + CTA.
Free
Para começar sem custo.
- Até 3 projetos
- 1 GB de armazenamento
- Exportação PDF
- Suporte prioritário
Pro
Para profissionais e times pequenos.
- Projetos ilimitados
- 50 GB de armazenamento
- Exportação PDF
- Suporte prioritário
Enterprise
Para times com necessidades avançadas.
- Tudo do Pro
- SSO / SAML
- Armazenamento ilimitado
- Suporte 24/7
<div class="grid grid-cols-1 md:grid-cols-3 gap-px bg-zinc-200"> <!-- Plano padrão: bg-white --> <div class="bg-white p-6 flex flex-col"> <!-- Feature inclusa: SVG check text-zinc-400 --> <!-- Feature ausente: SVG × text-zinc-300 + text-zinc-400 --> <!-- CTA: border border-zinc-300 --> </div> <!-- Plano destacado: bg-zinc-900 --> <div class="bg-zinc-900 p-6 flex flex-col relative"> <!-- Badge "Recomendado" --> <div class="absolute top-0 left-1/2 -translate-x-1/2 -translate-y-1/2"> <span class="inline-flex items-center px-2.5 py-0.5 text-[10px] font-semibold bg-green-500 text-white uppercase tracking-widest mono"> Recomendado </span> </div> <!-- Texto: text-white / text-zinc-400 Checks: text-green-400 CTA: bg-white text-zinc-900 --> </div> </div>
Notification Panel
Painel de notificações com indicador de leitura (dot azul + bg tonal), agrupamento temporal e ações.
Notificações
3Hoje
Carlos Silva comentou no projeto Refactor API.
14 min atrás
Deploy v2.4.1 concluído com sucesso em produção.
1 hora atrás
Uso do armazenamento acima de 85%.
3 horas atrás
Ontem
Ana Barros adicionou você ao projeto Design System.
ontem às 14:32
<div class="border border-zinc-200 bg-white"> <!-- Header: título + badge + "Marcar todas" --> <div class="flex items-center justify-between px-4 py-3 border-b border-zinc-100"></div> <!-- Grupo temporal --> <p class="px-4 py-2 text-[10px] font-semibold uppercase tracking-widest text-zinc-400 mono bg-zinc-50 border-b border-zinc-100"> Hoje </p> <!-- Item não lido --> <div class="flex items-start gap-3 px-4 py-3.5 bg-blue-50/40 border-b border-zinc-100 hover:bg-zinc-50 transition-colors relative"> <!-- Dot indicador --> <div class="absolute left-1.5 top-1/2 -translate-y-1/2 w-1.5 h-1.5 rounded-full bg-blue-500"></div> <!-- Avatar --> <div class="flex-1 min-w-0"> <p class="text-sm text-zinc-900 leading-snug"> Mensagem. </p> <p class="mono text-[10px] text-zinc-400 mt-1"> 14 min atrás </p> </div> </div> <!-- Item lido: sem bg azul, sem dot --> <!-- Ícone sistema: bg-green-50 border-green-200 SVG text-green-600 (sucesso) bg-yellow-50 border-yellow-200 SVG text-yellow-600 (warning) --> <!-- Footer --> <div class="px-4 py-2.5 border-t border-zinc-100 bg-zinc-50"> <a href="#" class="text-xs text-zinc-500 hover:text-zinc-900 font-medium"> Ver todas → </a> </div> </div>
Calendar Picker
Seletor de data. Use aria-current="date" no dia atual e aria-pressed="true" no dia selecionado.
Março 2026
<div class="border border-zinc-200 bg-white"> <!-- Header: nav + mês --> <div class="flex items-center justify-between px-4 py-3 border-b border-zinc-200"> <button aria-label="Mês anterior" class="w-8 h-8 flex items-center justify-center text-zinc-500 hover:bg-zinc-100 hover:text-zinc-900 transition-colors"> <!-- SVG chevron-left --> </button> <p class="text-sm font-semibold text-zinc-900" aria-live="polite">Março 2026</p> <!-- botão próximo mês --> </div> <div class="p-3"> <!-- Dias da semana: grid-cols-7 --> <!-- Grid de dias --> <div class="grid grid-cols-7"> <!-- Dia de outro mês: text-zinc-300 tabindex="-1" --> <!-- Dia normal --> <button type="button" class="h-8 w-8 mx-auto flex items-center justify-center text-xs text-zinc-700 hover:bg-zinc-100 focus:outline-none focus:ring-2 focus:ring-zinc-900 transition-colors"> 15 </button> <!-- Hoje --> <button type="button" aria-current="date" class="h-8 w-8 mx-auto flex items-center justify-center text-xs font-bold bg-zinc-900 text-white focus:outline-none focus:ring-2 focus:ring-zinc-900 focus:ring-offset-2"> 25 </button> <!-- Selecionado --> <button type="button" aria-pressed="true" class="h-8 w-8 mx-auto flex items-center justify-center text-xs font-semibold bg-zinc-200 text-zinc-900 focus:outline-none focus:ring-2 focus:ring-zinc-900"> 26 </button> <!-- Com evento (dot) --> <button type="button" class="h-8 w-8 mx-auto flex flex-col items-center justify-center hover:bg-zinc-100 relative transition-colors"> <span class="text-xs text-zinc-700">15</span> <span class="absolute bottom-1 w-1 h-1 bg-blue-500 rounded-full"></span> </button> </div> </div> <!-- Footer: botão "Hoje" + legenda --> <div class="border-t border-zinc-100 px-4 py-2.5 flex items-center justify-between"> <button type="button" class="text-xs font-medium text-zinc-700 hover:text-zinc-900 underline underline-offset-2"> Hoje </button> </div> </div>
Hero Section
Seção de entrada de produto/landing page. Headline + subline + CTAs + eyebrow opcional.
Construa interfaces
sem fricção.
Kit de componentes HTML + Tailwind. Copie, cole, customize. Sem dependências, sem configuração.
<section class="bg-white border-b border-zinc-200"> <div class="max-w-4xl mx-auto px-8 py-20 text-center"> <!-- Eyebrow --> <div class="inline-flex items-center gap-2 px-3 py-1 border border-zinc-200 bg-zinc-50 mb-8"> <span class="w-1.5 h-1.5 rounded-full bg-green-500"></span> <span class="mono text-[10px] font-semibold uppercase tracking-widest text-zinc-600"> novidade </span> </div> <!-- Headline --> <h1 class="text-5xl md:text-6xl font-bold tracking-tight text-zinc-900 leading-none mb-6"> Headline principal<br/> <span class="text-zinc-400">Complemento muted.</span> </h1> <p class="text-lg text-zinc-500 leading-relaxed max-w-xl mx-auto mb-10">Subline.</p> <!-- CTAs: flex gap-3, primary + secondary --> <!-- Social proof: flex gap-6 mt-12 text-xs --> </div> </section>
Onboarding Wizard
Fluxo de configuração inicial em múltiplos passos. Stepped progress + conteúdo de etapa + navegação linear.
Etapa 2 de 4
Configure seu espaço
Personalize como seu workspace aparece para a equipe.
Você pode alterar essas informações a qualquer momento em Configurações → Workspace.
<div class="border border-zinc-200 bg-white overflow-hidden"> <!-- Header: progresso + título --> <div class="px-8 pt-8 pb-6 border-b border-zinc-100"> <div class="flex items-center gap-1 mb-6" role="progressbar" aria-valuenow="2" aria-valuemin="0" aria-valuemax="4"> <!-- Concluído → flex-1 h-1 bg-zinc-900 --> <!-- Pendente → flex-1 h-1 bg-zinc-200 --> </div> <p class="mono text-[10px] font-semibold uppercase tracking-widest text-zinc-400 mb-2"> Etapa 2 de 4 </p> <h2 class="text-xl font-bold text-zinc-900 mb-1">Título</h2> <p class="text-sm text-zinc-500">Subtítulo.</p> </div> <!-- Body: px-8 py-6 space-y-4 --> <!-- Footer: prev + next --> <div class="px-8 pb-8 flex items-center justify-between"> <!-- Ghost "Anterior" com chevron --> <!-- Primary "Continuar" / "Concluir" --> </div> </div>
Kanban Board
Board de tarefas em colunas. Estrutura estática — drag-and-drop via biblioteca da sua stack. Cards com meta-info compacta.
A fazer
3Revisar documentação da API
Criar testes E2E para login
Atualizar dependências npm
Em progresso
2Redesign tela de configurações
Integração com Stripe
Revisão
1PR #142 — Refactor auth module
Concluído
1Setup CI/CD pipeline
<!-- Board: scroll horizontal --> <div class="flex gap-4 overflow-x-auto min-w-max"> <!-- Coluna --> <div class="w-64 flex-shrink-0"> <!-- Header: dot + label + count + btn+ --> <div class="flex items-center justify-between mb-3"> <div class="flex items-center gap-2"> <!-- Dot: w-2 h-2 rounded-full bg-{color} --> <p class="text-xs font-semibold text-zinc-600"> A fazer </p> <span class="mono text-[10px] text-zinc-400 bg-zinc-100 px-1.5 py-0.5">3</span> </div> </div> <!-- Cards: space-y-2 --> <div class="space-y-2"> <!-- Card padrão --> <div class="bg-white border border-zinc-200 p-3 hover:border-zinc-400 transition-colors cursor-grab"> <p class="text-xs font-medium text-zinc-900 mb-2 leading-snug">Título</p> <!-- Meta: badge + avatar --> </div> <!-- Card ativo: border-zinc-900 --> <!-- Card concluído: bg-zinc-50 opacity-75 line-through --> </div> </div> </div> <!-- Dots de coluna: A fazer → bg-zinc-300 Em progresso → bg-yellow-400 Revisão → bg-blue-400 Concluído → bg-green-400 Bloqueado → bg-red-400 -->