# Design System — Componentes Base
Componentes em `src/components/base/`. São a base de toda a UI — sempre prefira esses componentes a elementos HTML nativos.
---
## BaseButton
**Arquivo:** `src/components/base/BaseButton.vue`
Botão com suporte a variantes, tamanhos e estado de carregamento.
### Props
| Prop | Tipo | Padrão | Valores aceitos |
|---|---|---|---|
| `variant` | `String` | `"primary"` | `"primary"` · `"secondary"` · `"ghost"` · `"danger"` |
| `size` | `String` | `"md"` | `"sm"` · `"md"` · `"lg"` |
| `type` | `String` | `"button"` | `"button"` · `"submit"` · `"reset"` |
| `disabled` | `Boolean` | `false` | — |
| `loading` | `Boolean` | `false` | Exibe spinner e bloqueia cliques |
### Variantes
| Variante | Uso |
|---|---|
| `primary` | Ação principal da tela (submit, confirmar) |
| `secondary` | Ação secundária, menos destaque |
| `ghost` | Ação discreta, sem borda ou fundo visível |
| `danger` | Ações destrutivas (excluir, revogar) |
### Exemplos
```vue
Salvar
Cancelar
Excluir
Enviar
```
---
## BaseInput
**Arquivo:** `src/components/base/BaseInput.vue`
Campo de texto com suporte a label, hint e mensagem de erro. Compatível com `v-model`.
### Props
| Prop | Tipo | Padrão | Descrição |
|---|---|---|---|
| `modelValue` | `String` | `""` | Valor do campo (use com `v-model`) |
| `label` | `String` | `""` | Rótulo exibido acima do input |
| `hint` | `String` | `""` | Texto de ajuda abaixo do campo |
| `error` | `String` | `""` | Mensagem de erro (substitui hint quando preenchida) |
| `id` | `String` | `""` | ID do input; gerado automaticamente se omitido |
Aceita todos os atributos HTML nativos de `` via `v-bind="$attrs"` (ex: `placeholder`, `type`, `autocomplete`).
### Exemplos
```vue
```
---
## BaseBadge
**Arquivo:** `src/components/base/BaseBadge.vue`
Chip/etiqueta para exibir status, categorias ou contadores.
### Props
| Prop | Tipo | Padrão | Valores aceitos |
|---|---|---|---|
| `variant` | `String` | `"default"` | `"default"` · `"success"` · `"danger"` · `"info"` · `"warning"` · `"violet"` |
### Variantes
| Variante | Cor | Uso sugerido |
|---|---|---|
| `default` | Cinza | Status genérico, neutro |
| `success` | Verde | Ativo, aprovado, concluído |
| `danger` | Vermelho | Inativo, erro, bloqueado |
| `info` | Azul | Informação, em andamento |
| `warning` | Âmbar | Alerta, pendente |
| `violet` | Violeta | Destaque especial, admin |
### Exemplos
```vue
Ativo
Inativo
Admin
Padrão
```
---
## Skeletons
**Pasta:** `src/components/skeletons/`
| Componente | Uso |
|---|---|
| `SkeletonConversation.vue` | Placeholder de item de conversa na sidebar |
| `SkeletonDocumentCard.vue` | Placeholder de card de documento na listagem |
Exibidos durante o carregamento assíncrono, substituídos pelo conteúdo real quando os dados chegam.