chore: alinhar projeto às regras do agent

This commit is contained in:
Luiz Silva 2026-01-02 21:16:50 -03:00
parent 86d451efa1
commit 51a48eee70
36 changed files with 485 additions and 208 deletions

View file

@ -0,0 +1,166 @@
<template>
<v-container>
<v-card class="mx-auto" max_width="400">
<v-card-title>
<EliBadge :badge="'Novo'" offset-x="-15" location="right center">
Olá Mundo!
</EliBadge>
</v-card-title>
<v-card-text>
Este é um componente de exemplo integrado com Vuetify.
<div class="grid-example">
<!-- text normal -->
<EliInput
v-model="nome"
label="Nome"
placeholder="Digite o nome"
density="compact"
/>
<EliInput
v-model="idade"
type="numericoInteiro"
label="Idade"
density="default"
/>
<EliInput
v-model="altura"
type="numericoDecimal"
label="Altura"
density="comfortable"
/>
<EliInput v-model="valor" type="numericoMoeda" label="Valor" />
<EliInput v-model="telefone" type="telefone" label="Telefone" />
<EliInput
v-model="cep"
type="cep"
label="CEP"
placeholder="00000-000"
/>
<EliInput
type="select"
label="Estado"
:options="[
{ label: 'São Paulo', value: 'SP' },
{ label: 'Rio de Janeiro', value: 'RJ' }
]"
v-model="estado"
multiple
/>
<EliInput v-model="documento" type="cpfCnpj" label="CPF / CNPJ" />
<EliInput
v-model="email"
label="Email"
placeholder="email@exemplo.com"
/>
<EliInput
v-model="senha"
label="Senha"
type="password"
:showPasswordToggle="true"
placeholder="Digite sua senha"
/>
<!-- textarea -->
<EliInput
type="textarea"
v-model="mensagem"
label="Mensagem"
:rows="5"
/>
<!-- radio -->
<EliInput
type="radio"
v-model="cor"
label="Cor favorita"
:options="[
{ label: 'Azul', value: 'azul' },
{ label: 'Verde', value: 'verde' },
]"
/>
<!-- checkbox group -->
<EliInput
type="checkbox"
v-model="habilidades"
:options="[
{ label: 'Vue', value: 'vue' },
{ label: 'React', value: 'react' },
]"
/>
<!-- erro -->
<EliInput
v-model="nome"
label="Nome"
:error="true"
:error-messages="['Obrigatório']"
/>
</div>
</v-card-text>
<v-card-actions>
<EliBotao color="primary" variant="elevated" block>
Botão Vuetify
</EliBotao>
</v-card-actions>
</v-card>
</v-container>
</template>
<script lang="ts">
import { defineComponent, ref } from "vue";
import EliBotao from "../botao/EliBotao.vue";
import EliBadge from "../indicador/EliBadge.vue";
import EliInput from "../campo/EliInput.vue";
type Habilidade = "vue" | "react";
export default defineComponent({
name: "EliOlaMundo",
components: {
EliBotao,
EliBadge,
EliInput,
},
setup() {
const nome = ref("");
const estado = ref<string[]>([]);
const cep = ref("");
const telefone = ref("");
const idade = ref("");
const altura = ref("");
const valor = ref("");
const email = ref("");
const mensagem = ref("");
const senha = ref("");
const documento = ref("");
const cor = ref<"azul" | "verde" | null>(null);
const habilidades = ref<Habilidade[]>([]);
return {
nome,
email,
documento,
estado,
telefone,
mensagem,
senha,
cor,
habilidades,
idade,
altura,
cep,
valor,
};
},
});
</script>

View file

@ -0,0 +1,34 @@
# EliOlaMundo (componente de demonstração)
O `EliOlaMundo` é um componente **de exemplo** usado para validar rapidamente o Design System no playground.
> Ele não é um componente “de produto”; ele existe para demonstrar integração com Vuetify e mostrar variações de uso de `EliInput`, `EliBotao` e `EliBadge`.
## Estrutura do repositório (padrão)
Neste Design System:
- **Pastas e arquivos** (quando aplicável) preferem português: `botao/`, `campo/`, `indicador/`, etc.
- **Componentes** mantêm prefixo técnico `Eli` (PascalCase): `EliBotao`, `EliInput`.
Exemplo:
```
src/componentes/
botao/
EliBotao.vue
index.ts
README.md
campo/
EliInput.vue
index.ts
README.md
```
## Playground
O playground deve conter arquivos `*.playground.vue` para cada componente, com no mínimo:
- 3 variações visuais/estados
- interações (v-model/click)
- casos de borda relevantes

View file

@ -0,0 +1 @@
export { default as EliOlaMundo } from "./EliOlaMundo.vue";