🌱 Seed

Sistema de Componentes

O Seed oferece dois tipos de componentes: componentes simples (baseados em YAML) e componentes com templates (que encapsulam estrutura HTML complexa).

Ver todos os componentes

Se a sua pergunta é qual componente usar, comece pelo cheatsheet: todos os componentes do tema renderizados numa página só, cada um ao lado do código que o produziu.

Abrir o cheatsheet →Tipografia, formulários, layout, dados e feedback

Se a pergunta é quais props um componente aceita, use o Component Explorer — ele lista tag, variantes e slots de cada um, direto do registry.

O resto desta página explica como o sistema funciona por dentro: como declarar, como sobrescrever e em que ordem os componentes são carregados.

Componentes simples

Definidos por um arquivo YAML, mapeiam um nome para uma tag HTML, classes base e variantes:

```yaml
button:
  tag: button
  class: inline-flex items-center justify-center rounded-lg font-semibold
  variant:
    primary: bg-indigo-600 text-white hover:bg-indigo-700
    secondary: bg-gray-200 text-gray-900 hover:bg-gray-300
```

Uso:

```seed
@button variant=primary
  Clique
```

Resultado:

```html
<button class="inline-flex items-center ... bg-indigo-600 text-white ...">
  Clique
</button>
```

Componentes com Templates

Componentes mais complexos usam arquivos .template para definir sua estrutura interna. Você preenche slots nomeados:

```seed
@card
  @title
    Título do card
  @description
    Subtítulo descritivo.
  @actions
    @button variant=primary
      Saiba mais
```

O arquivo card.template define como esses slots são organizados no HTML:

```seed
@div class=p-6
  @h3 class=text-xl font-semibold mb-2
    {title}
  @p class=text-gray-600 mb-4
    {?description}
  @div class=flex gap-2
    {?actions}
```

Slots opcionais ({?slot}) são omitidos silenciosamente se não preenchidos. Slots obrigatórios ({slot}) geram um bloco de erro amarelo no output se não preenchidos.

Variantes CSS vs. Templates

São conceitos independentes:

```seed
@card variant=featured, template=horizontal
  @title
    Card horizontal e destacado
```

Componentes personalizados

Você pode criar componentes próprios em src/components/. O Seed carrega automaticamente qualquer .yaml e .template dessa pasta:

```yaml
# src/components/meu-card/meu-card.yaml
meu-card:
  tag: div
  class: bg-white rounded-xl shadow-md p-6
  variant:
    destaque: ring-2 ring-indigo-500

# src/components/meu-badge/meu-badge.yaml
meu-badge:
  tag: span
  class: inline-block px-2 py-0.5 rounded text-xs font-bold
  variant:
    verde: bg-green-100 text-green-800
    vermelho: bg-red-100 text-red-800
```

Uso:

```seed
@meu-card variant=destaque
  Conteúdo do card

@meu-badge variant=verde
  Novo
```

Prioridade de carregamento

Os componentes são carregados em duas camadas, da menor para a maior prioridade:

```
themes/<nome>/components/   ← camada base (tema)
src/components/             ← camada do projeto (sobrescreve o tema)
```

Se o mesmo nome existir nas duas camadas, a versão de src/components/ prevalece silenciosamente. Isso permite personalizar qualquer componente do tema sem modificá-lo — basta criar uma versão local com o mesmo nome:

```yaml
# src/components/button/button.yaml
# Substitui o @button do tema com bordas arredondadas e fonte maior
button:
  tag: button
  class: inline-flex items-center justify-center rounded-full font-bold text-base
  variant:
    primary: bg-indigo-600 text-white hover:bg-indigo-700
    secondary: bg-gray-100 text-gray-900 hover:bg-gray-200
```

Duplicata dentro da mesma camada (dois arquivos YAML no tema definindo o mesmo componente) gera um erro explícito no build.

Prop class para customização pontual

Qualquer componente aceita class para adicionar classes extras sem criar uma variante:

```seed
@button variant=primary, class=w-full text-lg
  Botão cheio
```
ℹ️

Classes adicionadas via class têm prioridade máxima e sobrescrevem as classes base e de variante que conflitam no mesmo prefixo CSS.

Component Explorer

Durante o desenvolvimento (seed dev), pressione h no browser para abrir o Component Explorer — um painel que lista todos os componentes disponíveis no projeto, com suas props, variantes e slots.

Para cada componente o explorer exibe:

Use a busca para filtrar por nome, modifier ou slot. Use os botões de camada para ver apenas componentes do tema ou apenas do projeto.

Feche com Esc ou clicando fora do painel. A tecla h também fecha.

ℹ️

O explorer só está disponível no seed dev. No build de produção ele não é incluído.

Feito com ❤️ e Seed