Lunamus
Vitrine pública

Os 16 componentes-base e os tokens do Lunamus

Lunamus é um gerador gratuito e 100% client-side de Design Systems: roda direto no navegador, sem login, sem servidor e sem coleta de dados, e exporta tokens visuais e 16 componentes-base prontos em HTML, CSS puro, JSX ou Tailwind CSS. Esta página mostra o catálogo completo com os valores padrão do produto — cada Design System criado começa a partir deste mesmo conjunto e pode ser customizado livremente.

Tokens gerados automaticamente

Cores

Primária
Secundária
Cinza
Sucesso
Alerta
Erro

Tipografia

Texto: Inter · Título: Space Grotesk

Espaçamento

Bordas

Raio de borda
Espessura de borda
Foco
Campo em foco

Sombras

Os 16 componentes-base

Button
Ver código HTML
<button type="button" class="inline-flex items-center rounded-md bg-primary-500 px-5 py-2.5 text-sm font-semibold text-white hover:bg-primary-600">Salvar alterações</button>
Input
Ver código HTML
<label class="flex max-w-xs flex-col gap-1.5">
  <span class="text-sm font-semibold text-gray-900">Nome completo</span>
  <input type="text" value="Ana Souza" placeholder="Digite seu nome" class="rounded-md border border-gray-300 px-3 py-2 text-sm outline-none focus:border-primary-500 focus:ring-2 focus:ring-primary-500/30" />
  <span class="text-xs text-gray-500">Como aparece no seu documento oficial.</span>
</label>
Textarea
Ver código HTML
<label class="flex max-w-xs flex-col gap-1.5">
  <span class="text-sm font-semibold text-gray-900">Mensagem</span>
  <textarea rows="4" class="resize-y rounded-md border border-gray-300 px-3 py-2 text-sm outline-none focus:border-primary-500 focus:ring-2 focus:ring-primary-500/30">Obrigado pelo retorno rápido!</textarea>
</label>
Select
Ver código HTML
<label class="flex max-w-[200px] flex-col gap-1.5">
  <span class="text-sm font-semibold text-gray-900">País</span>
  <select class="rounded-md border border-gray-300 bg-white px-3 py-2 text-sm outline-none focus:border-primary-500 focus:ring-2 focus:ring-primary-500/30">
    <option>Brasil</option>
    <option>Portugal</option>
    <option>Estados Unidos</option>
  </select>
</label>
Checkbox
Ver código HTML
<label class="inline-flex items-center gap-2 text-sm text-gray-900">
  <input type="checkbox" checked class="size-4 rounded border-gray-300 text-primary-500 focus:ring-primary-500" />
  Aceito os termos de uso
</label>
Radio
Ver código HTML
<fieldset class="flex flex-col gap-2">
  <legend class="mb-1 text-sm font-semibold text-gray-900">Plano</legend>
  <label class="inline-flex items-center gap-2 text-sm text-gray-900">
    <input type="radio" name="tw-plano" checked class="size-4 border-gray-300 text-primary-500 focus:ring-primary-500" /> Mensal
  </label>
  <label class="inline-flex items-center gap-2 text-sm text-gray-900">
    <input type="radio" name="tw-plano" class="size-4 border-gray-300 text-primary-500 focus:ring-primary-500" /> Anual (2 meses grátis)
  </label>
</fieldset>
Switch
Ver código HTML
<label class="inline-flex cursor-pointer items-center gap-2.5">
  <input type="checkbox" checked class="peer sr-only" />
  <span class="relative h-6 w-11 rounded-full bg-gray-300 transition-colors peer-checked:bg-primary-500 after:absolute after:left-0.5 after:top-0.5 after:size-5 after:rounded-full after:bg-white after:transition-transform peer-checked:after:translate-x-5"></span>
  <span class="text-sm text-gray-900">Notificações ativas</span>
</label>
Modal/Dialog
Ver código HTML
<input type="checkbox" id="tw-modal-toggle" class="peer hidden" />
<label for="tw-modal-toggle" class="inline-flex items-center rounded-md bg-primary-500 px-5 py-2.5 text-sm font-semibold text-white hover:bg-primary-600 cursor-pointer">Abrir modal</label>

<div class="fixed inset-0 hidden items-center justify-center bg-black/50 peer-checked:flex">
  <div class="w-full max-w-sm rounded-lg bg-white p-6 shadow-xl">
    <h3 class="mb-2 text-base font-bold text-gray-900">Confirmar exclusão</h3>
    <p class="mb-5 text-sm text-gray-600">Essa ação não pode ser desfeita. Deseja continuar?</p>
    <div class="flex gap-3">
      <label for="tw-modal-toggle" class="inline-flex items-center rounded-md border border-primary-500 px-5 py-2.5 text-sm font-semibold text-primary-500 hover:bg-primary-50 cursor-pointer">Cancelar</label>
      <label for="tw-modal-toggle" class="inline-flex items-center rounded-md bg-primary-500 px-5 py-2.5 text-sm font-semibold text-white hover:bg-primary-600 cursor-pointer">Confirmar</label>
    </div>
  </div>
</div>
Toast
Ver código HTML
<input type="checkbox" id="tw-toast-toggle" class="peer hidden" />
<label for="tw-toast-toggle" class="inline-flex items-center rounded-md bg-primary-500 px-5 py-2.5 text-sm font-semibold text-white hover:bg-primary-600 cursor-pointer">Mostrar notificação</label>

<div class="fixed bottom-4 right-4 hidden items-center gap-2.5 rounded-lg bg-gray-900 px-3.5 py-3 text-sm text-white shadow-xl peer-checked:flex">
  <span class="size-2 rounded-full bg-emerald-500"></span>
  <span>Alterações salvas com sucesso.</span>
  <label for="tw-toast-toggle" class="ml-2 cursor-pointer text-white/70 hover:text-white">×</label>
</div>
Card
Ver código HTML
<article class="max-w-[280px] rounded-xl border border-gray-200 bg-white p-5">
  <header class="flex items-center justify-between gap-2">
    <h3 class="text-base font-bold text-gray-900">Plano Pro</h3>
    <span class="rounded-full bg-primary-100 px-2.5 py-0.5 text-xs font-bold uppercase text-primary-600">Popular</span>
  </header>
  <p class="mt-3 mb-4 text-sm leading-relaxed text-gray-600">Tudo que você precisa para escalar seu projeto, com suporte prioritário.</p>
  <footer>
    <button type="button" class="inline-flex items-center rounded-md bg-primary-500 px-4 py-2 text-sm font-semibold text-white hover:bg-primary-600">Assinar agora</button>
  </footer>
</article>
Table
Ver código HTML
<table class="w-full border-collapse text-sm">
  <thead>
    <tr class="border-b border-gray-200 text-left text-xs uppercase tracking-wide text-gray-500">
      <th class="py-2.5 pr-4 font-medium">Nome</th>
      <th class="py-2.5 pr-4 font-medium">Cargo</th>
      <th class="py-2.5 font-medium">Status</th>
    </tr>
  </thead>
  <tbody>
    <tr class="border-b border-gray-100">
      <td class="py-2.5 pr-4 text-gray-900">Ana Souza</td>
      <td class="py-2.5 pr-4 text-gray-600">Designer</td>
      <td class="py-2.5"><span class="rounded-full bg-emerald-100 px-2.5 py-0.5 text-xs font-semibold text-emerald-700">Ativo</span></td>
    </tr>
    <tr>
      <td class="py-2.5 pr-4 text-gray-900">Bruno Lima</td>
      <td class="py-2.5 pr-4 text-gray-600">Desenvolvedor</td>
      <td class="py-2.5"><span class="rounded-full bg-amber-100 px-2.5 py-0.5 text-xs font-semibold text-amber-700">Pendente</span></td>
    </tr>
  </tbody>
</table>
Badge/Chip
Ver código HTML
<span class="rounded-full bg-primary-100 px-3 py-1 text-xs font-semibold text-primary-600">Novo</span>
Avatar
Ver código HTML
<span class="flex size-9 items-center justify-center rounded-full bg-primary-500 text-xs font-semibold text-white">AS</span>
Tabs
Ver código HTML/CSS
<div class="max-w-sm">
  <input type="radio" name="tw-tabs" id="tw-tab-1" checked class="tw-tab-input hidden" />
  <input type="radio" name="tw-tabs" id="tw-tab-2" class="tw-tab-input hidden" />
  <input type="radio" name="tw-tabs" id="tw-tab-3" class="tw-tab-input hidden" />

  <div class="tw-tab-list flex gap-1 border-b border-gray-200">
    <label for="tw-tab-1" class="cursor-pointer border-b-2 border-transparent px-3.5 py-2 text-sm font-semibold text-gray-500">Visão geral</label>
    <label for="tw-tab-2" class="cursor-pointer border-b-2 border-transparent px-3.5 py-2 text-sm font-semibold text-gray-500">Detalhes</label>
    <label for="tw-tab-3" class="cursor-pointer border-b-2 border-transparent px-3.5 py-2 text-sm font-semibold text-gray-500">Histórico</label>
  </div>

  <div class="tw-tab-panel-1 hidden py-3.5 text-sm text-gray-700">Resumo geral do projeto selecionado.</div>
  <div class="tw-tab-panel-2 hidden py-3.5 text-sm text-gray-700">Informações detalhadas e especificações técnicas.</div>
  <div class="tw-tab-panel-3 hidden py-3.5 text-sm text-gray-700">Linha do tempo das últimas alterações.</div>
</div>
#tw-tab-1:checked ~ .tw-tab-panel-1,
#tw-tab-2:checked ~ .tw-tab-panel-2,
#tw-tab-3:checked ~ .tw-tab-panel-3 { display: block; }
#tw-tab-1:checked ~ .tw-tab-list label[for="tw-tab-1"],
#tw-tab-2:checked ~ .tw-tab-list label[for="tw-tab-2"],
#tw-tab-3:checked ~ .tw-tab-list label[for="tw-tab-3"] { color: #A7CF22; border-bottom-color: #A7CF22; }
Tooltip
Ver código HTML
<span class="group relative inline-block">
  <button type="button" class="inline-flex items-center rounded-md border border-primary-500 px-5 py-2.5 text-sm font-semibold text-primary-500 hover:bg-primary-50">Ajuda</button>
  <span class="absolute bottom-full left-1/2 mb-2 hidden w-max max-w-[200px] -translate-x-1/2 rounded-md bg-gray-900 px-2.5 py-2 text-xs leading-snug text-white group-hover:block group-focus-within:block">Clique para ver mais informações sobre este recurso.</span>
</span>
Alert/Banner
Ver código HTML
<input type="checkbox" id="tw-alert-dismiss" class="peer hidden" />
<div class="flex max-w-md items-center justify-between gap-3 rounded-lg border border-amber-200 bg-amber-50 px-3.5 py-3 text-sm text-amber-800 peer-checked:hidden">
  <span>Sua assinatura vence em 3 dias. Renove para não perder o acesso.</span>
  <label for="tw-alert-dismiss" class="cursor-pointer text-base leading-none text-amber-700/70 hover:text-amber-700">×</label>
</div>

Quer estes componentes com a sua própria marca?

Escolha sua cor, fonte e biblioteca CSS, e exporte o mesmo catálogo em poucos passos.

Criar meu Design System