ads-nuxt 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/README.md +546 -1
  2. package/package.json +2 -2
package/README.md CHANGED
@@ -1 +1,546 @@
1
- "# alquimia-design-system"
1
+ # ads-nuxt
2
+
3
+ **Alquimia Design System (ADS)** para Nuxt, construído sobre o [Nuxt UI](https://ui.nuxt.com) v4 e o Tailwind CSS v4.
4
+
5
+ O pacote é uma **Nuxt Layer**: ao estendê-lo, seu projeto recebe de uma vez os componentes `Ads*`, os tokens de design (cores, espaçamento, raios, sombras, tipografia), o tema do Nuxt UI customizado, os utilitários de formatação em pt-BR e a fonte Inter.
6
+
7
+ [![npm](https://img.shields.io/npm/v/ads-nuxt.svg)](https://www.npmjs.com/package/ads-nuxt)
8
+ [![license](https://img.shields.io/npm/l/ads-nuxt.svg)](./LICENSE)
9
+
10
+ ---
11
+
12
+ ## Sumário
13
+
14
+ - [Recursos](#recursos)
15
+ - [Requisitos](#requisitos)
16
+ - [Instalação](#instalação)
17
+ - [Configuração](#configuração)
18
+ - [Uso rápido](#uso-rápido)
19
+ - [Componentes](#componentes)
20
+ - [Exemplos](#exemplos)
21
+ - [Tokens de design](#tokens-de-design)
22
+ - [Tema do Nuxt UI](#tema-do-nuxt-ui)
23
+ - [Composables](#composables)
24
+ - [Utilitários](#utilitários)
25
+ - [Localização (pt-BR)](#localização-pt-br)
26
+ - [Desenvolvimento](#desenvolvimento)
27
+ - [Estrutura do projeto](#estrutura-do-projeto)
28
+ - [Licença](#licença)
29
+
30
+ ---
31
+
32
+ ## Recursos
33
+
34
+ - **Mais de 50 componentes** prontos para produção, com prefixo `Ads` (auto-importados pelo Nuxt).
35
+ - **Tokens em três camadas** (primitivos → semânticos → de componente), expostos como variáveis CSS `--ads-*` e como cores do Tailwind (`ads-*`).
36
+ - **Tema do Nuxt UI** pré-configurado: botão, input, calendário, select, toast e tooltip já seguem o visual ADS.
37
+ - **Fonte Inter** configurada via `@nuxt/fonts`.
38
+ - **Ícones Lucide** via `@nuxt/icon` (use `i-lucide-*`).
39
+ - **Utilitários pt-BR**: moeda (BRL), porcentagem, datas, notabilidade e filtros.
40
+ - **Playground** com documentação viva de todos os componentes e tokens.
41
+ - Estados “congeláveis” (`state`) nos componentes, pensados para documentação e testes visuais.
42
+
43
+ ## Requisitos
44
+
45
+ | Dependência | Versão |
46
+ | ----------- | --------- |
47
+ | Node.js | 20+ (recomendado 22) |
48
+ | Nuxt | `^4.0.0` |
49
+ | Vue | `^3.5.18` |
50
+
51
+ `nuxt` e `vue` são *peer dependencies*. As demais (`@nuxt/ui`, `@nuxt/fonts`, `@nuxt/icon`, `@vueuse/nuxt`, `tailwindcss`, ícones Lucide) já vêm como dependências do pacote.
52
+
53
+ ## Instalação
54
+
55
+ ```bash
56
+ # pnpm
57
+ pnpm add ads-nuxt
58
+
59
+ # npm
60
+ npm install ads-nuxt
61
+
62
+ # yarn
63
+ yarn add ads-nuxt
64
+ ```
65
+
66
+ ## Configuração
67
+
68
+ Estenda a layer no `nuxt.config.ts` do seu projeto:
69
+
70
+ ```ts
71
+ // nuxt.config.ts
72
+ export default defineNuxtConfig({
73
+ extends: ["ads-nuxt"],
74
+ });
75
+ ```
76
+
77
+ Isso já registra automaticamente:
78
+
79
+ - os módulos `@nuxt/ui`, `@nuxt/fonts`, `@nuxt/icon` e `@vueuse/nuxt`;
80
+ - o CSS global (Tailwind, Nuxt UI, cores e tokens de componente);
81
+ - a fonte **Inter** (pesos 300, 400, 500, 700 e 800);
82
+ - a coleção de ícones **lucide**;
83
+ - o `app.config.ts` com o tema ADS para o Nuxt UI;
84
+ - o plugin de toast e o locale pt-BR.
85
+
86
+ > **Modo de cor:** a layer define `ui.colorMode: false` — o ADS é um sistema de tema claro. Se precisar sobrescrever, redefina no `nuxt.config.ts` do seu projeto.
87
+
88
+ ### Envolva o app com `UApp`
89
+
90
+ O Nuxt UI exige o componente `UApp` para toasts, tooltips e overlays funcionarem:
91
+
92
+ ```vue
93
+ <!-- app/app.vue -->
94
+ <template>
95
+ <UApp :locale="uiLocale" :tooltip="{ delayDuration: 400 }" :toaster="adsToaster">
96
+ <NuxtPage />
97
+ </UApp>
98
+ </template>
99
+
100
+ <script setup lang="ts">
101
+ import { uiLocale } from "ads-nuxt/app/locale/pt-br";
102
+ import { adsToaster } from "ads-nuxt/app/theme/ads-theme";
103
+ </script>
104
+ ```
105
+
106
+ `adsToaster` posiciona os toasts no canto superior direito, sem barra de progresso, no padrão ADS.
107
+
108
+ ## Uso rápido
109
+
110
+ Os componentes são auto-importados, sem `import` manual:
111
+
112
+ ```vue
113
+ <template>
114
+ <AdsCard title="Cadastro" description="Preencha os dados abaixo.">
115
+ <div class="flex flex-col gap-4">
116
+ <AdsInput v-model="nome" label="Nome" placeholder="Digite seu nome" />
117
+ <AdsButton type="filled" label="Salvar" leading icon="i-lucide-save" />
118
+ </div>
119
+ </AdsCard>
120
+ </template>
121
+
122
+ <script setup lang="ts">
123
+ const nome = ref("");
124
+ </script>
125
+ ```
126
+
127
+ ## Componentes
128
+
129
+ ### Ações
130
+
131
+ | Componente | Descrição |
132
+ | ---------------- | --------- |
133
+ | `AdsButton` | Botão (`filled`, `outline`, `unfilled`, `secondary`, `ia`) em 2 tamanhos e 8 cores. Suporta ícones, `loading` e `to` (vira link). |
134
+ | `AdsButtonGroup` | Agrupa botões. |
135
+ | `AdsButtonMenu` | Botão com menu de ações. |
136
+
137
+ ### Formulários
138
+
139
+ | Componente | Descrição |
140
+ | ----------------- | --------- |
141
+ | `AdsInput` | Campo de texto/número com label, hint, erro, info, ícone e sufixo. |
142
+ | `AdsNumberInput` | Campo numérico dedicado. |
143
+ | `AdsTextarea` | Área de texto. |
144
+ | `AdsSearchInput` | Campo de busca. |
145
+ | `AdsCheckbox` | Checkbox com estado indeterminado. |
146
+ | `AdsRadio` | Botão de rádio. |
147
+ | `AdsSwitch` | Alternador (toggle). |
148
+ | `AdsDatePicker` | Seletor de data ou intervalo, com `min`, `max` e `maximumDays`. |
149
+ | `AdsMonthPicker` | Seletor de mês. |
150
+ | `AdsFilterSelect` | Filtro com seleção (checkbox, radio ou mês). |
151
+ | `AdsFilterDropdown` / `AdsFilterOption` | Dropdown de filtros e suas opções. |
152
+
153
+ ### Navegação
154
+
155
+ | Componente | Descrição |
156
+ | ----------------- | --------- |
157
+ | `AdsNavbarDesk` / `AdsNavbarApp` | Barra de navegação desktop e mobile. |
158
+ | `AdsSideMenu` | Menu lateral. |
159
+ | `AdsMenuBar` | Barra de menu. |
160
+ | `AdsTabs` | Abas em formato de link. |
161
+ | `AdsSegmentedTabs`| Abas segmentadas. |
162
+ | `AdsPagination` | Paginação com reticências automáticas (`v-model:page`). |
163
+ | `AdsDropdownMenu` / `AdsListDropdown` | Menus suspensos. |
164
+ | `AdsFooter` | Rodapé. |
165
+
166
+ ### Exibição de dados
167
+
168
+ | Componente | Descrição |
169
+ | ----------------- | --------- |
170
+ | `AdsTable` | Tabela baseada no `UTable`, com densidade, zebra, bordas, degradê por nível, `sticky`, loading e estado vazio. |
171
+ | `AdsTableToolbar` | Barra de ferramentas da tabela. |
172
+ | `AdsCard` | Cartão genérico. |
173
+ | `AdsMetricCard` | Cartão de métrica/indicador. |
174
+ | `AdsFeatureCard` | Cartão de funcionalidade. |
175
+ | `AdsFileCard` | Cartão de arquivo. |
176
+ | `AdsEmptyState` | Estado vazio. |
177
+
178
+ ### Indicadores e status
179
+
180
+ | Componente | Descrição |
181
+ | -------------------- | --------- |
182
+ | `AdsBadge` | Contador ou ponto (`mini`) em 7 cores. |
183
+ | `AdsPill` | Pílula de status (`default`, `success`, `attention`, `warning`, `new`, `blocked`, `innovation`, `neutral`) em tom `primary` ou `secondary`. |
184
+ | `AdsMiniPill` | Versão compacta da pílula. |
185
+ | `AdsNotabilityPill` | Pílula de notabilidade. |
186
+ | `AdsFarmarcasPill` | Pílula de marca Farmarcas. |
187
+ | `AdsProductTag` | Tag de produto. |
188
+
189
+ ### Feedback e overlays
190
+
191
+ | Componente | Descrição |
192
+ | ----------------- | --------- |
193
+ | `AdsModal` | Modal (`dialog` ou `sheet`) com 5 tamanhos, ações padrão e slots. |
194
+ | `AdsToast` | Aviso em faixa (`banner`) ou reporte escuro (`status`). |
195
+ | `AdsBroadcast` | Comunicado em destaque. |
196
+ | `AdsTooltip` | Tooltip. |
197
+ | `AdsSmalltip` / `AdsSteptip` / `AdsCharttip` | Variações de tooltip (compacta, em passos e para gráficos). |
198
+ | `AdsLoading` | Indicador de carregamento. |
199
+ | `ProgressBarLoading` | Barra de progresso. |
200
+ | `OverlayLoading` | Overlay de carregamento/sucesso/erro (usado por `useOverlayLoading`). |
201
+
202
+ ## Exemplos
203
+
204
+ ### Botões
205
+
206
+ ```vue
207
+ <AdsButton type="filled" label="Salvar" />
208
+ <AdsButton type="outline" color="success" label="Aprovar" />
209
+ <AdsButton type="unfilled" size="sm" label="Cancelar" />
210
+ <AdsButton type="ia" label="Gerar com IA" leading icon="i-lucide-sparkles" />
211
+ <AdsButton type="filled" label="Enviando" loading />
212
+ <AdsButton type="filled" label="Ir para o painel" to="/painel" />
213
+ ```
214
+
215
+ | Prop | Valores |
216
+ | ------------ | ------- |
217
+ | `type` | `filled` \| `outline` \| `unfilled` \| `secondary` \| `ia` |
218
+ | `color` | `primary` \| `success` \| `attention` \| `warning` \| `new` \| `innovation` \| `blocked` \| `neutral` |
219
+ | `size` | `md` \| `sm` |
220
+ | `nativeType` | `button` \| `submit` \| `reset` (a prop `type` é o visual do ADS) |
221
+
222
+ ### Campos de formulário
223
+
224
+ ```vue
225
+ <AdsInput
226
+ v-model="preco"
227
+ label="Preço"
228
+ hint="Valor unitário"
229
+ suffix="R$"
230
+ type="number"
231
+ :error="erro"
232
+ />
233
+ ```
234
+
235
+ Estados disponíveis via `state` (útil para documentação): `default`, `active`, `focus`, `error`, `disabled` e `ai`.
236
+
237
+ ### Modal
238
+
239
+ ```vue
240
+ <template>
241
+ <AdsButton label="Excluir" color="warning" @click="aberto = true" />
242
+
243
+ <AdsModal
244
+ v-model:open="aberto"
245
+ title="Excluir item"
246
+ description="Essa ação não pode ser desfeita."
247
+ cancel-label="Cancelar"
248
+ confirm-label="Excluir"
249
+ @confirm="excluir"
250
+ @cancel="aberto = false"
251
+ />
252
+ </template>
253
+
254
+ <script setup lang="ts">
255
+ const aberto = ref(false);
256
+ const excluir = () => {
257
+ /* ... */
258
+ aberto.value = false;
259
+ };
260
+ </script>
261
+ ```
262
+
263
+ Eventos: `confirm`, `cancel` e `dismiss` (com o motivo `"esc"` ou `"outside"`). Slots: `default`, `title` e `footer`.
264
+
265
+ ### Toast
266
+
267
+ Como componente em linha:
268
+
269
+ ```vue
270
+ <AdsToast status="success" title="Tudo certo" message="Alterações salvas." />
271
+ <AdsToast status="error" message="Falha ao salvar." action-label="Tentar novamente" />
272
+ <AdsToast appearance="status" status="neutral" title="Relatório" subtitle="Explicação opcional" />
273
+ ```
274
+
275
+ Como toast flutuante, usando o `useToast` do Nuxt UI (as cores de status e os ícones do ADS são aplicados automaticamente pelo plugin da layer):
276
+
277
+ ```ts
278
+ const toast = useToast();
279
+
280
+ toast.add({
281
+ title: "Salvo",
282
+ description: "Suas alterações foram salvas.",
283
+ color: "success",
284
+ });
285
+ ```
286
+
287
+ ### Pílulas e badges
288
+
289
+ ```vue
290
+ <AdsPill status="success" label="Ativo" />
291
+ <AdsPill status="warning" tone="secondary" label="Atrasado" icon="i-lucide-alert-triangle" />
292
+ <AdsBadge color="primary" :value="5" />
293
+ <AdsBadge color="warning" mini />
294
+ ```
295
+
296
+ ### Paginação e abas
297
+
298
+ ```vue
299
+ <AdsPagination v-model:page="pagina" :total-pages="20" />
300
+
301
+ <AdsTabs v-model="aba" :items="itens" />
302
+ ```
303
+
304
+ ### Tabela
305
+
306
+ ```vue
307
+ <AdsTable
308
+ :data="linhas"
309
+ :columns="colunas"
310
+ density="md"
311
+ striped
312
+ :loading="carregando"
313
+ empty-label="Nenhum resultado encontrado"
314
+ />
315
+ ```
316
+
317
+ Para montar colunas, a layer exporta helpers em `app/utils/ads-table.ts`, como `adsTableColumn`, `adsTablePinned`, `adsTableGroup`, `adsTableVariationClass` e `adsTableTreeIndent`.
318
+
319
+ ### Seletor de datas
320
+
321
+ ```vue
322
+ <!-- Data única -->
323
+ <AdsDatePicker v-model="data" min="2026-01-01" />
324
+
325
+ <!-- Intervalo (máximo de 31 dias) -->
326
+ <AdsDatePicker range v-model:start="inicio" v-model:end="fim" :maximum-days="31" />
327
+ ```
328
+
329
+ As datas trafegam como string `YYYY-MM-DD`.
330
+
331
+ ## Tokens de design
332
+
333
+ Os tokens vêm do Figma do ADS e estão organizados em três camadas:
334
+
335
+ 1. **Primitivos** — valores brutos (escalas de cor, espaçamentos).
336
+ 2. **Semânticos** — intenção de uso (`--ads-surface-*`, `--ads-text-*`, `--ads-border-*`, `--ads-status-*`).
337
+ 3. **De componente** — ajustes finos por componente (`--ads-button-*`, `--ads-modal-*`, `--ads-tooltip-*`…).
338
+
339
+ ### Variáveis CSS
340
+
341
+ ```css
342
+ .meu-card {
343
+ background: var(--ads-surface-main);
344
+ color: var(--ads-text-secondary);
345
+ border-radius: var(--ads-button-radius);
346
+ box-shadow: var(--ads-shadow-level-3);
347
+ }
348
+ ```
349
+
350
+ ### Classes Tailwind
351
+
352
+ As variáveis semânticas também estão mapeadas como cores do Tailwind (`--color-ads-*`):
353
+
354
+ ```html
355
+ <div class="bg-ads-surface-main border-ads-border-width-thin"></div>
356
+ ```
357
+
358
+ ### Escalas de cor
359
+
360
+ | Escala | Uso |
361
+ | ------------------ | --- |
362
+ | `primary` / `secondary` | Azul do Radar Pricing, de 50 a 950 (base `#006ff7`). |
363
+ | `success` | Verde de sucesso (base `#15c57e`). |
364
+ | Neutros | `neutralLight`, `neutralMid` e `neutralDark`. |
365
+ | Status | `success`, `attention`, `warning`, `new`, `innovation`, `blocked`. |
366
+
367
+ ### Espaçamento
368
+
369
+ | Token | px | Token | px | Token | px |
370
+ | ------ | --- | ------ | --- | ------ | --- |
371
+ | quark | 4 | sm | 32 | xxxl | 120 |
372
+ | nano | 8 | rg | 40 | huge | 160 |
373
+ | xxxs | 12 | md | 48 | giant | 200 |
374
+ | xxs | 16 | lg | 56 | | |
375
+ | xs | 24 | xl / xxl | 64 / 80 | | |
376
+
377
+ Os mesmos valores estão disponíveis em TypeScript, em `app/theme/ads-tokens.ts` (`adsSpacing`, `adsRadarPricing`, `adsRadarBase`, `adsNeutralLight`, `adsNeutralMid`, `adsNeutralDark`, `adsSuccess`…).
378
+
379
+ ### Personalizando tokens de componente
380
+
381
+ Os tokens de componente são gerados a partir de `app/theme/component-tokens.json` para `component-tokens.css`. Para ajustar no seu projeto sem editar o pacote, sobrescreva a variável CSS depois do CSS da layer:
382
+
383
+ ```css
384
+ :root {
385
+ --ads-button-radius: 4px;
386
+ --ads-button-primary: #0050b3;
387
+ }
388
+ ```
389
+
390
+ ## Tema do Nuxt UI
391
+
392
+ O `app.config.ts` da layer customiza os seguintes componentes do Nuxt UI para seguir o ADS:
393
+
394
+ `button`, `input`, `inputDate`, `calendar`, `select`, `selectMenu`, `toast`, `toaster` e `tooltip`.
395
+
396
+ Por ser uma layer, você pode estender ou sobrescrever no `app.config.ts` do seu projeto:
397
+
398
+ ```ts
399
+ // app/app.config.ts
400
+ export default defineAppConfig({
401
+ ui: {
402
+ button: {
403
+ slots: {
404
+ base: "rounded-md",
405
+ },
406
+ },
407
+ },
408
+ });
409
+ ```
410
+
411
+ ## Composables
412
+
413
+ ### `useOverlayLoading`
414
+
415
+ Exibe um overlay de tela cheia para carregamento, sucesso, erro, busca ou informação, com barra de progresso opcional.
416
+
417
+ ```ts
418
+ const overlay = useOverlayLoading();
419
+
420
+ overlay.show({
421
+ variant: "loading",
422
+ title: "Processando",
423
+ description: "Isso pode levar alguns segundos.",
424
+ showProgress: true,
425
+ progress: 10,
426
+ });
427
+
428
+ overlay.update({ progress: 60 });
429
+
430
+ overlay.update({ variant: "success", title: "Concluído!" });
431
+
432
+ overlay.close();
433
+ ```
434
+
435
+ | Método | Descrição |
436
+ | ----------------- | --------- |
437
+ | `show(options)` | Abre o overlay (fecha o anterior, se houver) e retorna o id. |
438
+ | `update(options)` | Mescla novas props no overlay aberto. |
439
+ | `close()` | Fecha o overlay. |
440
+ | `isOpen()` | Indica se há overlay aberto. |
441
+ | `getCurrentId()` | Retorna o id do overlay atual. |
442
+
443
+ Opções (`OverlayLoadingOptions`):
444
+
445
+ | Opção | Tipo |
446
+ | ----------------- | ---- |
447
+ | `variant` | `"loading"` \| `"success"` \| `"error"` \| `"search"` \| `"info"` |
448
+ | `title`, `description`, `hint` | `string` |
449
+ | `showProgress`, `progress` | `boolean`, `number` |
450
+ | `iconSrc` | `string` |
451
+ | `actionLabel`, `onAction` | rótulo e callback de ação |
452
+ | `onUserClose` | callback ao usuário fechar |
453
+ | `closableVariants`| `("success" \| "error")[]` — variantes que o usuário pode fechar |
454
+
455
+ ## Utilitários
456
+
457
+ Todos ficam em `app/utils` e são auto-importados pelo Nuxt.
458
+
459
+ | Arquivo | Funções principais |
460
+ | --------------------- | ------------------ |
461
+ | `money.ts` | `numberToBRL`, `numberToCompactBRL`, `parseStringMoneyToFloat`, `formatPriceInput`, `parsePriceInput` |
462
+ | `percentage.ts` | `formatPercentage`, `formatPercentageWithDecimals`, `formatPercentagePtBr` |
463
+ | `parser.ts` | `parseToPercentage`, `parsePercentageToFloat`, `getTodayDateString`, `formatDateOnlyToPtBr`, `formatDateToPtBr`, `daysBetweenDateOnly`, `daysFromTodayToDateOnly`, `normalizePercentage` |
464
+ | `calendar-date.ts` | Conversão entre `string` e `CalendarDate` (`@internationalized/date`) e helpers de intervalo |
465
+ | `notability.ts` | `formatNotability` |
466
+ | `category-role.ts` | `CATEGORY_ROLES`, `formatCategoryRole`, `parseCategoryRole` |
467
+ | `ads-filter-select.ts`| Helpers para `AdsFilterSelect` (agrupamento, seleção, rótulos, meses) |
468
+ | `ads-table.ts` | Helpers e tipos para `AdsTable` |
469
+
470
+ ```ts
471
+ numberToBRL(1234.5); // "R$ 1.234,50"
472
+ numberToBRL(-10); // "R$ -10,00"
473
+ numberToBRL(null); // "-"
474
+ numberToCompactBRL(2_500_000); // valor compacto em milhões
475
+ ```
476
+
477
+ ## Localização (pt-BR)
478
+
479
+ A layer inclui `app/locale/pt-br.ts`, que exporta o locale do Nuxt UI para português do Brasil (calendário, meses e rótulos):
480
+
481
+ ```ts
482
+ import { uiLocale, UI_LOCALE_CODE } from "ads-nuxt/app/locale/pt-br";
483
+ // UI_LOCALE_CODE === "pt-BR"
484
+ ```
485
+
486
+ Passe-o ao `UApp` como mostrado em [Configuração](#configuração).
487
+
488
+ ## Desenvolvimento
489
+
490
+ Este repositório usa **pnpm** e contém um **playground** Nuxt com a documentação interativa dos componentes e dos tokens.
491
+
492
+ ```bash
493
+ git clone https://github.com/jbfarmarcas/alquimia-design-system.git
494
+ cd alquimia-design-system
495
+ pnpm install
496
+
497
+ pnpm dev # playground em http://localhost:3010
498
+ pnpm build # build do playground
499
+ pnpm preview # preview do build
500
+ ```
501
+
502
+ Páginas do playground:
503
+
504
+ | Rota | Conteúdo |
505
+ | ------------------------- | -------- |
506
+ | `/design-system` | Catálogo de componentes com demos e código |
507
+ | `/design-system/tabelas` | Variações de tabela |
508
+ | `/design-system/tokens` | Editor visual dos tokens de componente |
509
+
510
+ ### Docker
511
+
512
+ ```bash
513
+ docker compose up
514
+ ```
515
+
516
+ ### Publicação
517
+
518
+ O pacote publica apenas `app/` e `nuxt.config.ts` (campo `files`), com acesso público:
519
+
520
+ ```bash
521
+ pnpm publish
522
+ ```
523
+
524
+ ## Estrutura do projeto
525
+
526
+ ```
527
+ .
528
+ ├── app/ # Conteúdo publicado no npm (a layer)
529
+ │ ├── app.config.ts # Tema do Nuxt UI
530
+ │ ├── assets/ # CSS, SVGs de marca e animações
531
+ │ ├── components/ # Componentes Ads*
532
+ │ ├── composables/ # useOverlayLoading
533
+ │ ├── constants/ # Constantes (swatches de cor)
534
+ │ ├── locale/ # Locale pt-BR
535
+ │ ├── plugins/ # Plugin de toast
536
+ │ ├── theme/ # Tokens e temas (TS/JSON)
537
+ │ ├── types/ # Tipos compartilhados
538
+ │ └── utils/ # Utilitários de formatação e helpers
539
+ ├── playground/ # App de documentação (não publicado)
540
+ ├── nuxt.config.ts # Entrada da layer
541
+ └── package.json
542
+ ```
543
+
544
+ ## Licença
545
+
546
+ [MIT](./LICENSE) © 2026 Farmarcas
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ads-nuxt",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "license": "MIT",
5
5
  "description": "Alquimia Design System para Nuxt, construído sobre Nuxt UI",
6
6
  "repository": {
@@ -21,7 +21,7 @@
21
21
  "dev": "nuxt dev playground --port 3010",
22
22
  "build": "nuxt build playground",
23
23
  "preview": "nuxt preview playground --port 3010",
24
- "postinstall": "nuxt prepare playground"
24
+ "prepare": "nuxt prepare playground"
25
25
  },
26
26
  "dependencies": {
27
27
  "@iconify-json/lucide": "^1.2.104",