diff --git a/.cursorrules b/.agent similarity index 62% rename from .cursorrules rename to .agent index 2ae1843..26c9b8e 100644 --- a/.cursorrules +++ b/.agent @@ -22,38 +22,8 @@ Construir um Design System de componentes em **Vue 3** para reutilização em m - TypeScript (modo estrito e tipagem forte) - **defineComponent** (obrigatório) - Sem TSX (padrão: ` - diff --git a/src/componentes/indicador/index.ts b/src/componentes/indicador/index.ts index 24222f4..9f5ca63 100644 --- a/src/componentes/indicador/index.ts +++ b/src/componentes/indicador/index.ts @@ -1 +1 @@ -export { default as EliBadge } from "./EliBadge.vue" +export { default as EliBadge } from "./EliBadge.vue"; diff --git a/src/componentes/ola_mundo/EliOlaMundo.vue b/src/componentes/ola_mundo/EliOlaMundo.vue index e622481..7289172 100644 --- a/src/componentes/ola_mundo/EliOlaMundo.vue +++ b/src/componentes/ola_mundo/EliOlaMundo.vue @@ -11,31 +11,100 @@
- - - - - + + + + - + + + + + + + + + + + + + + + + + +
@@ -49,31 +118,49 @@ diff --git a/src/componentes/ola_mundo/README.md b/src/componentes/ola_mundo/README.md index a4de0bb..7c057d9 100644 --- a/src/componentes/ola_mundo/README.md +++ b/src/componentes/ola_mundo/README.md @@ -2,14 +2,14 @@ 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 `EliEntradaTexto`, `EliEntradaNumero`, `EliBotao` e `EliBadge`. +> 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/`, `EliEntrada/`, `indicador/`, etc. -- **Componentes** mantêm prefixo técnico `Eli` (PascalCase): `EliBotao`, `EliEntradaTexto`. +- **Pastas e arquivos** (quando aplicável) preferem português: `botao/`, `campo/`, `indicador/`, etc. +- **Componentes** mantêm prefixo técnico `Eli` (PascalCase): `EliBotao`, `EliInput`. Exemplo: @@ -19,10 +19,9 @@ src/componentes/ EliBotao.vue index.ts README.md - EliEntrada/ - EliEntradaTexto.vue - EliEntradaNumero.vue - EliEntradaDataHora.vue + campo/ + EliInput.vue + index.ts README.md ``` diff --git a/src/componentes/ola_mundo/index.ts b/src/componentes/ola_mundo/index.ts index 6ee02e3..fa786f4 100644 --- a/src/componentes/ola_mundo/index.ts +++ b/src/componentes/ola_mundo/index.ts @@ -1 +1 @@ -export { default as EliOlaMundo } from "./EliOlaMundo.vue" +export { default as EliOlaMundo } from "./EliOlaMundo.vue"; diff --git a/src/constantes.ts b/src/constantes.ts deleted file mode 100644 index 5c234c6..0000000 --- a/src/constantes.ts +++ /dev/null @@ -1 +0,0 @@ -export const gif_quero_quero = "https://paiol.idz.one/estaticos/quero-quero.gif" diff --git a/src/index.ts b/src/index.ts index 7e895bd..79864d1 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,43 +1,21 @@ -import type { App, Plugin } from "vue" -import "./styles/eli-vue-fonts.css" -import { EliBotao } from "./componentes/botao" -import { EliCartao } from "./componentes/cartao" -import { - EliEntradaDataHora, - EliEntradaNumero, - EliEntradaParagrafo, - EliEntradaSelecao, - EliEntradaTexto, -} from "./componentes/EliEntrada" -import { EliTabela } from "./componentes/EliTabela" -import { EliBadge } from "./componentes/indicador" -import { EliOlaMundo } from "./componentes/ola_mundo" +import type { App, Plugin } from "vue"; +import { EliOlaMundo } from "./componentes/ola_mundo"; +import { EliBotao } from "./componentes/botao"; +import { EliBadge } from "./componentes/indicador"; +import { EliInput } from "./componentes/campo"; -export { EliOlaMundo } -export { EliBotao } -export { EliBadge } -export { EliCartao } - -export { criarFiltro26 } from "p-comuns" -export * from "./componentes/EliEntrada" -// Exportar tudo (componentes + types + helpers) de Tabela e Entrada -export * from "./componentes/EliTabela" -// Exportar tipos compartilhados (ex: CartaoStatus) -export * from "./tipos" +export { EliOlaMundo }; +export { EliBotao }; +export { EliBadge }; +export { EliInput }; const EliVue: Plugin = { install(app: App) { - app.component("EliOlaMundo", EliOlaMundo) - app.component("EliBotao", EliBotao) - app.component("EliBadge", EliBadge) - app.component("EliCartao", EliCartao) - app.component("EliTabela", EliTabela) - app.component("EliEntradaTexto", EliEntradaTexto) - app.component("EliEntradaNumero", EliEntradaNumero) - app.component("EliEntradaDataHora", EliEntradaDataHora) - app.component("EliEntradaParagrafo", EliEntradaParagrafo) - app.component("EliEntradaSelecao", EliEntradaSelecao) + app.component("EliOlaMundo", EliOlaMundo); + app.component("EliBotao", EliBotao); + app.component("EliBadge", EliBadge); + app.component("EliInput", EliInput); }, -} +}; -export default EliVue +export default EliVue; diff --git a/src/playground/App.vue b/src/playground/App.vue index dde1d02..b4463e7 100644 --- a/src/playground/App.vue +++ b/src/playground/App.vue @@ -2,15 +2,10 @@

Playground — eli-vue

- - Botão Indicador - Cartão - Entradas - Data e hora - Tabela + Campo Demo @@ -18,134 +13,30 @@ - - - - +
diff --git a/src/playground/api_simulador.ts b/src/playground/api_simulador.ts deleted file mode 100644 index e2e5dfb..0000000 --- a/src/playground/api_simulador.ts +++ /dev/null @@ -1,445 +0,0 @@ -import { respostaComuns, type tipoResposta } from "p-respostas" -import type { tipoFiltro } from "@/componentes/EliTabela/types-eli-tabela" - -export type Linha = { - codigo: string - empreendedor: string - empreendimento: string - documento: string - email: string - telefone: string - faturamento: number - peso_kg: number - criado_em: string - atualizado_em: string -} - -// == SIMULAÇÃO DE API (CRUD) == -// Dados isolados (simulando um banco de dados no servidor) -const _bancoDeDados: Linha[] = [ - { - codigo: String(Math.random()), - empreendedor: "Maria Silva", - empreendimento: "Doces da Maria", - documento: "12.345.678/0001-90", - email: - "contato.comercial.super.longo@doces-da-maria-exemplo-muito-grande.com.br", - telefone: "(11) 91234-5678", - faturamento: 12500.5, - peso_kg: 12.4, - criado_em: "2026-01-09T16:15:00Z", - atualizado_em: "2026-01-29T15:30:00-03:00", - }, - { - codigo: String(Math.random()), - empreendedor: "João Pereira", - empreendimento: "Café Peregrino", - documento: "98.765.432/0001-12", - email: "contato@cafeperegrino.com", - telefone: "(11) 93456-7810", - faturamento: 8000, - peso_kg: 6.2, - criado_em: "2026-01-02T10:00:00-03:00", - atualizado_em: "2026-01-20T08:10:00-03:00", - }, - { - codigo: String(Math.random()), - empreendedor: "Ana Costa", - empreendimento: "Flor de Sal Gastronomia", - documento: "45.678.912/0001-55", - email: "ana@flordesal.com", - telefone: "(21) 99876-5432", - faturamento: 3200.75, - peso_kg: 4.8, - criado_em: "2025-12-10T09:30:00-03:00", - atualizado_em: "2026-01-15T19:20:00-03:00", - }, - { - codigo: String(Math.random()), - empreendedor: "Rafael Lima", - empreendimento: "Tech Agro Solutions", - documento: "07.654.321/0001-00", - email: "rafael@techagro.com", - telefone: "(31) 94567-8899", - faturamento: 15999.9, - peso_kg: 9.1, - criado_em: "2026-01-12T12:00:00-03:00", - atualizado_em: "2026-01-28T11:00:00-03:00", - }, - { - codigo: String(Math.random()), - empreendedor: "Juliana Torres", - empreendimento: "Torres Moda Sustentável", - documento: "33.210.987/0001-44", - email: "juliana@torresmoda.com", - telefone: "(71) 97766-5544", - faturamento: 4500, - peso_kg: 3.3, - criado_em: "2026-01-01T00:00:00Z", - atualizado_em: "2026-01-10T13:45:00-03:00", - }, - { - codigo: String(Math.random()), - empreendedor: "Marcos Vieira", - empreendimento: "Padaria Pão Quentinho", - documento: "21.109.876/0001-32", - email: "marcos@paoquentinho.com", - telefone: "(48) 99654-3210", - faturamento: 2200.4, - peso_kg: 15.7, - criado_em: "2026-01-05T07:25:00-03:00", - atualizado_em: "2026-01-23T20:15:00-03:00", - }, - { - codigo: String(Math.random()), - empreendedor: "Bianca Rocha", - empreendimento: "Studio Beleza em Casa", - documento: "54.321.098/0001-21", - email: "contato@belezaemcasa.com", - telefone: "(85) 98877-1122", - faturamento: 990, - peso_kg: 1.9, - criado_em: "2026-01-03T14:00:00-03:00", - atualizado_em: "2026-01-29T09:00:00-03:00", - }, - { - codigo: String(Math.random()), - empreendedor: "Caio Albuquerque", - empreendimento: "Albuquerque Engenharia Verde", - documento: "65.432.109/0001-09", - email: "caio@engenhariaverde.com", - telefone: "(61) 98123-4567", - faturamento: 100000, - peso_kg: 21.3, - criado_em: "2025-11-18T16:10:00-03:00", - atualizado_em: "2026-01-25T10:40:00-03:00", - }, - { - codigo: String(Math.random()), - empreendedor: "Fernanda Almeida", - empreendimento: "Faz Bem Produtos Naturais", - documento: "87.654.210/0001-98", - email: "fernanda@fazbem.com", - telefone: "(41) 99777-6655", - faturamento: 5600.2, - peso_kg: 8.6, - criado_em: "2026-01-08T12:12:00-03:00", - atualizado_em: "2026-01-21T17:55:00-03:00", - }, - { - codigo: String(Math.random()), - empreendedor: "Gabriel Martins", - empreendimento: "Martins Tech Repair", - documento: "19.876.543/0001-76", - email: "suporte@martinstech.com", - telefone: "(19) 98888-9090", - faturamento: 7550, - peso_kg: 7.7, - criado_em: "2026-01-11T11:00:00-03:00", - atualizado_em: "2026-01-18T11:30:00-03:00", - }, - { - codigo: String(Math.random()), - empreendedor: "Helena Duarte", - empreendimento: "Ateliê Costura Criativa", - documento: "23.456.789/0001-65", - email: "helena@costuracriativa.com", - telefone: "(51) 98765-4433", - faturamento: 2700, - peso_kg: 2.5, - criado_em: "2026-01-07T08:00:00-03:00", - atualizado_em: "2026-01-16T14:10:00-03:00", - }, - { - codigo: String(Math.random()), - empreendedor: "Igor Santos", - empreendimento: "Santos Consultoria Financeira", - documento: "43.219.876/0001-54", - email: "igor@santosconsultoria.com", - telefone: "(31) 99332-1100", - faturamento: 12000, - peso_kg: 5.4, - criado_em: "2026-01-06T10:30:00-03:00", - atualizado_em: "2026-01-22T18:30:00-03:00", - }, - { - codigo: String(Math.random()), - empreendedor: "Jéssica Nunes", - empreendimento: "Nunes Eventos & Decoração", - documento: "09.876.543/0001-33", - email: "jessica@nunesdecora.com", - telefone: "(62) 99922-3344", - faturamento: 3300.1, - peso_kg: 4.1, - criado_em: "2026-01-04T13:30:00-03:00", - atualizado_em: "2026-01-26T09:20:00-03:00", - }, - { - codigo: String(Math.random()), - empreendedor: "Leonardo Prado", - empreendimento: "Prado Bike Courier", - documento: "72.345.098/0001-27", - email: "contato@pradobike.com", - telefone: "(47) 98444-6677", - faturamento: 4100, - peso_kg: 6.8, - criado_em: "2026-01-02T18:40:00-03:00", - atualizado_em: "2026-01-27T12:00:00-03:00", - }, - { - codigo: String(Math.random()), - empreendedor: "Marina Lopes", - empreendimento: "Lopes Design Digital", - documento: "56.789.012/0001-11", - email: "marina@lopesdesign.com", - telefone: "(27) 99911-2233", - faturamento: 2100, - peso_kg: 3.7, - criado_em: "2026-01-09T09:00:00-03:00", - atualizado_em: "2026-01-19T15:35:00-03:00", - }, - { - codigo: String(Math.random()), - empreendedor: "Nicolas Teixeira", - empreendimento: "QualiVida Fitness", - documento: "34.567.890/0001-02", - email: "nicolas@qualivida.com", - telefone: "(92) 99456-7788", - faturamento: 8600.9, - peso_kg: 11.2, - criado_em: "2026-01-12T19:15:00-03:00", - atualizado_em: "2026-01-29T10:50:00-03:00", - }, - { - codigo: String(Math.random()), - empreendedor: "Olívia Azevedo", - empreendimento: "Azevedo Pet Care", - documento: "88.901.234/0001-45", - email: "olivia@petcare.com", - telefone: "(16) 99788-6655", - faturamento: 1900.3, - peso_kg: 2.2, - criado_em: "2026-01-10T15:00:00-03:00", - atualizado_em: "2026-01-14T16:00:00-03:00", - }, - { - codigo: String(Math.random()), - empreendedor: "Paulo Henrique", - empreendimento: "Henrique Soluções Elétricas", - documento: "44.556.778/0001-90", - email: "paulo@solucoeseletricas.com", - telefone: "(13) 98810-2020", - faturamento: 50000, - peso_kg: 17.9, - criado_em: "2026-01-13T10:10:00-03:00", - atualizado_em: "2026-01-24T21:00:00-03:00", - }, - { - codigo: String(Math.random()), - empreendedor: "Renata Souza", - empreendimento: "Souza Traduções Especializadas", - documento: "11.223.344/0001-08", - email: "renata@souzatraducoes.com", - telefone: "(24) 99661-7788", - faturamento: 6400, - peso_kg: 9.9, - criado_em: "2026-01-08T07:00:00-03:00", - atualizado_em: "2026-01-28T09:05:00-03:00", - }, - { - codigo: String(Math.random()), - empreendedor: "Tiago Moura", - empreendimento: "Moura Agro Sustentável", - documento: "78.912.345/0001-67", - email: "tiago@mouraagro.com", - telefone: "(68) 99999-4545", - faturamento: 7200, - peso_kg: 13.5, - criado_em: "2026-01-03T12:00:00-03:00", - atualizado_em: "2026-01-23T12:45:00-03:00", - }, - { - codigo: String(Math.random()), - empreendedor: "Viviane Castro", - empreendimento: "Castro Arte & Cerâmica", - documento: "32.165.498/0001-87", - email: "viviane@castroarte.com", - telefone: "(81) 98787-1212", - faturamento: 2800, - peso_kg: 4.6, - criado_em: "2026-01-01T09:00:00-03:00", - atualizado_em: "2026-01-17T09:30:00-03:00", - }, -] - -// Helpers internos da API (não expostos) -const _filtrarPorBusca = (lista: Linha[], texto?: string) => { - const termo = texto?.trim().toLowerCase() - if (!termo) return [...lista] - return lista.filter((linha) => - [linha.empreendedor, linha.empreendimento].some((v) => - v.toLowerCase().includes(termo), - ), - ) -} - -const _comparar = ( - op: string, - valLine: unknown, - valFiltro: unknown, -): boolean => { - switch (op) { - case "=": - return valLine == valFiltro - case "!=": - return valLine != valFiltro - case ">": - return Number(valLine) > Number(valFiltro) - case ">=": - return Number(valLine) >= Number(valFiltro) - case "<": - return Number(valLine) < Number(valFiltro) - case "<=": - return Number(valLine) <= Number(valFiltro) - case "like": - return String(valLine ?? "") - .toLowerCase() - .includes(String(valFiltro ?? "").toLowerCase()) - case "in": { - const arr = Array.isArray(valFiltro) - ? valFiltro - : String(valFiltro ?? "") - .split(",") - .map((s) => s.trim()) - .filter(Boolean) - return arr.includes(String(valLine)) - } - case "isNull": - return valLine === null || valLine === undefined || valLine === "" - default: - return true - } -} - -const _filtrarAvancado = (lista: Linha[], filtros?: tipoFiltro[]) => { - if (!filtros?.length) return [...lista] - - return lista.filter((linha) => - filtros.every((f) => { - // f é um objeto { [coluna]: { [op]: valor } } - // Percorremos as colunas (chaves) - return Object.entries(f).every(([coluna, condicoes]) => { - // Ignorar chaves de lógica complexa por enquanto no playground - if (coluna === "AND" || coluna === "OR") return true - - const valLinha = linha[coluna as keyof Linha] - - // Se condicoes for objeto { op: val } - if (typeof condicoes === "object" && condicoes !== null) { - return Object.entries(condicoes).every(([op, val]) => - _comparar(op, valLinha, val), - ) - } - // Se for valor direto (igualdade implícita? ou erro?) - // Vamos assumir igualdade se não for objeto - return _comparar("=", valLinha, condicoes) - }) - }), - ) -} - -const _ordenar = ( - lista: Linha[], - p?: { coluna_ordem?: keyof Linha; direcao_ordem?: "asc" | "desc" }, -) => { - if (!p?.coluna_ordem) return [...lista] - const dir = p.direcao_ordem === "desc" ? -1 : 1 - const key = p.coluna_ordem - return [...lista].sort((a, b) => { - const va = String(a[key] ?? "") - const vb = String(b[key] ?? "") - return dir * va.localeCompare(vb, "pt-BR", { sensitivity: "base" }) - }) -} - -const delay = (ms: number) => - new Promise((r) => setTimeout(r, ms * Math.random() + 2000)) - -// -- API PÚBLICA SIMULADA -- - -export async function api_ler(params: { - texto_busca?: string - filtros?: tipoFiltro[] - coluna_ordem?: keyof Linha - direcao_ordem?: "asc" | "desc" - limit?: number - offSet?: number -}) { - await delay(600) // simula latência de rede - - // 1. Filtro - let resultado = params.texto_busca - ? _filtrarPorBusca(_bancoDeDados, params.texto_busca) - : _filtrarAvancado(_bancoDeDados, params.filtros) - - // 2. Ordenação - resultado = _ordenar(resultado, params) - - // 3. Paginação - const limit = Math.max(1, Number(params.limit ?? 10)) - const offset = Math.max(0, Number(params.offSet ?? 0)) - const paginado = resultado.slice(offset, offset + limit) - - return { - total: resultado.length, - dados: paginado, - } -} - -export async function api_criar( - dados: Partial, -): Promise> { - await delay(1500) // simula tempo de salvar - - if (!dados.empreendedor) { - return respostaComuns.erro("Empreendedor é obrigatório") - } - - const novo: Linha = { - codigo: Math.random().toString(), - empreendedor: dados.empreendedor || "Novo", - empreendimento: dados.empreendimento || "Novo Emp", - documento: dados.documento || "00.000.000/0000-00", - email: dados.email || "novo@email.com", - telefone: dados.telefone || "(00) 0000-0000", - faturamento: dados.faturamento || 0, - peso_kg: dados.peso_kg || 0, - criado_em: new Date().toISOString(), - atualizado_em: new Date().toISOString(), - } - _bancoDeDados.unshift(novo) - return respostaComuns.valor(novo) -} - -export async function api_editar( - codigo: string, - novosDados: Partial, -): Promise> { - await delay(1000) - const idx = _bancoDeDados.find((l) => l.codigo === codigo) - if (!idx) return respostaComuns.erro("Registro não encontrado") - Object.assign(idx, novosDados) - return respostaComuns.valor(idx) -} - -export async function api_deletar( - codigo: string, -): Promise> { - await delay(800) - const idx = _bancoDeDados.findIndex((l) => l.codigo === codigo) - if (idx !== -1) { - _bancoDeDados.splice(idx, 1) - return respostaComuns.valor("Registro deletado com sucesso") - } - return respostaComuns.erro("Registro não encontrado") -} diff --git a/src/playground/botao.playground.vue b/src/playground/botao.playground.vue index 33601c5..2fd1c33 100644 --- a/src/playground/botao.playground.vue +++ b/src/playground/botao.playground.vue @@ -17,17 +17,17 @@ diff --git a/src/playground/cartao.playground.vue b/src/playground/cartao.playground.vue deleted file mode 100644 index 31b171a..0000000 --- a/src/playground/cartao.playground.vue +++ /dev/null @@ -1,201 +0,0 @@ - - - - - - diff --git a/src/playground/data_hora.playground.vue b/src/playground/data_hora.playground.vue deleted file mode 100644 index b8aab99..0000000 --- a/src/playground/data_hora.playground.vue +++ /dev/null @@ -1,182 +0,0 @@ - - - - - \ No newline at end of file diff --git a/src/playground/entradas.playground.vue b/src/playground/entradas.playground.vue deleted file mode 100644 index 0e4eb8f..0000000 --- a/src/playground/entradas.playground.vue +++ /dev/null @@ -1,152 +0,0 @@ - - - diff --git a/src/playground/indicador.playground.vue b/src/playground/indicador.playground.vue index 9730b12..7971f1f 100644 --- a/src/playground/indicador.playground.vue +++ b/src/playground/indicador.playground.vue @@ -29,18 +29,18 @@ diff --git a/src/styles/eli-vue-fonts.css b/src/styles/eli-vue-fonts.css deleted file mode 100644 index 47258a2..0000000 --- a/src/styles/eli-vue-fonts.css +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Fonte padrão global da biblioteca: Google Sans - * - * Observação: - * - As fontes são servidas a partir do MinIO (paiol.idz.one) - * - Mantemos variável (normal/italic) para cobrir múltiplos pesos/estilos - */ - -@font-face { - font-family: "Google Sans"; - font-style: normal; - font-weight: 100 900; - font-display: swap; - src: url("https://paiol.idz.one/estaticos/GoogleSans/GoogleSans-VariableFont_GRAD,opsz,wght.ttf") format("truetype"); -} - -@font-face { - font-family: "Google Sans"; - font-style: italic; - font-weight: 100 900; - font-display: swap; - src: url("https://paiol.idz.one/estaticos/GoogleSans/GoogleSans-Italic-VariableFont_GRAD,opsz,wght.ttf") - format("truetype"); -} - -/* - * Default global - * - Inclui fallbacks para sistemas comuns. - * - Forçamos herança em elementos de formulário, pois alguns frameworks - * aplicam font-family própria. - */ -:root { - --eli-font-family: "Google Sans", system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, - "Noto Sans", "Liberation Sans", sans-serif; - - /* - * Vuetify v3 usa `--v-font-family` como fonte base (aplicada em `.v-application`). - * Ao mapear para a fonte da lib, garantimos que componentes Vuetify renderizados - * na aplicação usem Google Sans quando o CSS da lib for carregado. - */ - --v-font-family: var(--eli-font-family); -} - -html, -body { - font-family: var(--eli-font-family); -} - -/* - * Component-scope fallback: - * - * Em aplicações consumidoras, é comum existir um `body { font-family: ... }` - * carregado DEPOIS do CSS da lib, o que sobrescreve a fonte global acima. - * - * Para garantir que os componentes da biblioteca usem a fonte padrão, - * aplicamos o font-family também em qualquer elemento com classe - * namespaced `eli-` (ex.: `.eli-tabela`, `.eli-botao`, etc.). - */ -:where([class^="eli-"], [class*=" eli-"]) { - font-family: var(--eli-font-family); - /* - * Vuetify v3 usa `--v-font-family` (aplicado em `.v-application`) como fonte - * padrão. Ao definir aqui, garantimos que qualquer componente Vuetify - * renderizado dentro de um wrapper `eli-*` use Google Sans. - */ - --v-font-family: var(--eli-font-family); -} - -button, -input, -select, -textarea { - font-family: inherit; -} diff --git a/src/tipos/botao.ts b/src/tipos/botao.ts index 186a28a..69b9412 100644 --- a/src/tipos/botao.ts +++ b/src/tipos/botao.ts @@ -3,6 +3,7 @@ * Mantidos separados do componente para facilitar reuso e padronização. */ -export type BotaoVariante = "elevated" | "flat" | "outlined" | "text" | "tonal" +export type BotaoVariante = "elevated" | "flat" | "outlined" | "text" | "tonal"; + +export type BotaoTamanho = "x-small" | "small" | "default" | "large"; -export type BotaoTamanho = "x-small" | "small" | "default" | "large" diff --git a/src/tipos/campo.ts b/src/tipos/campo.ts new file mode 100644 index 0000000..6cefc14 --- /dev/null +++ b/src/tipos/campo.ts @@ -0,0 +1,52 @@ +/** + * Tipos do componente EliInput (campo). + */ + +export type CampoValor = string | number | boolean | null; +export type CampoValorMultiplo = CampoValor[]; + +export type CampoOpcao = { + label: string; + value: TValor; + disabled?: boolean; +}; + +export type CampoOpcaoBruta = + | TValor + | { + label?: string; + value: TValor; + disabled?: boolean; + }; + +export type CampoVariante = + | "outlined" + | "filled" + | "plain" + | "solo" + | "solo-filled" + | "solo-inverted" + | "underlined"; + +export type CampoDensidade = "default" | "comfortable" | "compact"; + +export type CampoTipoNumerico = + | "numericoInteiro" + | "numericoDecimal" + | "numericoMoeda"; + +export type CampoTipo = + | "text" + | "password" + | "email" + | "search" + | "url" + | "textarea" + | "radio" + | "checkbox" + | "telefone" + | "cpfCnpj" + | "cep" + | "select" + | CampoTipoNumerico; + diff --git a/src/tipos/cartao.ts b/src/tipos/cartao.ts deleted file mode 100644 index 7a61550..0000000 --- a/src/tipos/cartao.ts +++ /dev/null @@ -1,5 +0,0 @@ -/** - * Tipos do componente EliCartao. - */ - -export type CartaoStatus = "novo" | "rascunho" | "vendido" | "cancelado" diff --git a/src/tipos/entrada.ts b/src/tipos/entrada.ts deleted file mode 100644 index 63923f3..0000000 --- a/src/tipos/entrada.ts +++ /dev/null @@ -1,18 +0,0 @@ -/** - * Tipos compartilhados para componentes de entrada (EliEntrada*). - * - * OBS: Estes tipos existiam anteriormente em `tipos/campo.ts` junto do componente - * `EliInput`. Como o `EliInput` foi removido, mantemos aqui apenas o que ainda - * é relevante para padronização visual/props do Vuetify. - */ - -export type CampoVariante = - | "outlined" - | "filled" - | "plain" - | "solo" - | "solo-filled" - | "solo-inverted" - | "underlined" - -export type CampoDensidade = "default" | "comfortable" | "compact" diff --git a/src/tipos/index.ts b/src/tipos/index.ts index 23022f0..e274731 100644 --- a/src/tipos/index.ts +++ b/src/tipos/index.ts @@ -1,4 +1,4 @@ -export * from "./botao" -export * from "./cartao" -export * from "./entrada" -export * from "./indicador" +export * from "./botao"; +export * from "./campo"; +export * from "./indicador"; + diff --git a/src/tipos/indicador.ts b/src/tipos/indicador.ts index c9660a6..47b0c37 100644 --- a/src/tipos/indicador.ts +++ b/src/tipos/indicador.ts @@ -10,7 +10,7 @@ export type IndicadorLocalizacao = | "bottom center" | "top left" | "left center" - | "bottom left" + | "bottom left"; export type IndicadorOffset = | "-20" @@ -21,8 +21,9 @@ export type IndicadorOffset = | "20" | "15" | "10" - | "5" + | "5"; -export type IndicadorPresetRaio = "suave" | "pill" +export type IndicadorPresetRaio = "suave" | "pill"; + +export type CssLength = `${number}px` | `${number}rem` | `${number}%` | "0"; -export type CssLength = `${number}px` | `${number}rem` | `${number}%` | "0" diff --git a/tsconfig.json b/tsconfig.json index d62fc22..fe4029d 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -26,6 +26,6 @@ /* Vue */ "types": ["vite/client"] }, - "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.vue", "src/componentes/EliEntrada"], + "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.vue"], "exclude": ["dist", "node_modules"] } diff --git a/vite.config.ts b/vite.config.ts index db1fd77..cbc3b41 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -4,24 +4,18 @@ import { defineConfig } from "vite" import vue from "@vitejs/plugin-vue" import vuetify from "vite-plugin-vuetify" -import cssInjectedByJsPlugin from "vite-plugin-css-injected-by-js" import path from "node:path" export default defineConfig({ plugins: [ vue(), vuetify({ autoImport: true }), - cssInjectedByJsPlugin(), ], resolve: { alias: { "@": path.resolve(__dirname, "./src"), }, }, - server: { - port: 5555, - strictPort: true, - }, build: { lib: { entry: path.resolve(__dirname, "src/index.ts"),