react-lgpd-consent 0.6.4 → 0.7.0

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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,136 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.7.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#124](https://github.com/lucianoedipo/react-lgpd-consent/pull/124) [`7669c4f`](https://github.com/lucianoedipo/react-lgpd-consent/commit/7669c4fba84b5cfea8f7da8ab65468110d3e77f7) Thanks [@lucianoedipo](https://github.com/lucianoedipo)! - # v0.7.0 - Código Limpo, Testes Aprimorados e Qualidade de Código
8
+
9
+ Esta release é parte do trabalho nas issues: [#60](https://github.com/lucianoedipo/react-lgpd-consent/issues/60), [#63](https://github.com/lucianoedipo/react-lgpd-consent/issues/63), [#64](https://github.com/lucianoedipo/react-lgpd-consent/issues/64), [#65](https://github.com/lucianoedipo/react-lgpd-consent/issues/65), [#68](https://github.com/lucianoedipo/react-lgpd-consent/issues/68), [#70](https://github.com/lucianoedipo/react-lgpd-consent/issues/70), [#71](https://github.com/lucianoedipo/react-lgpd-consent/issues/71), [#72](https://github.com/lucianoedipo/react-lgpd-consent/issues/72)
10
+
11
+ ## 🧹 Correções de Lint e Code Quality
12
+
13
+ ### Migração para APIs Modernas
14
+ - **globalThis**: Convertidos ~50+ usos de `window` e `global` para `globalThis.window` e `globalThis` (compatibilidade SSR/universal)
15
+ - **String.replaceAll()**: Migrado de `replace()` com regex global para `replaceAll()` (ES2021)
16
+ - **Object.hasOwn()**: Migrado de `Object.prototype.hasOwnProperty.call()` para `Object.hasOwn()` (ES2022)
17
+ - **Number.parseInt()**: Padronizado uso de `Number.parseInt()` em vez de `parseInt()` global
18
+
19
+ ### TypeScript Configuration
20
+ - Adicionado `ES2021.String` ao lib do tsconfig para suportar `String.replaceAll()`
21
+ - Adicionado `ES2022.Object` ao lib do tsconfig para suportar `Object.hasOwn()`
22
+ - Mantida compatibilidade com target `ES2020`
23
+
24
+ > **ℹ️ Atenção à Compatibilidade com Browsers**
25
+ >
26
+ > Esta versão faz uso de recursos ES2021/ES2022 (`String.replaceAll()`, `Object.hasOwn()`, etc.), que não estão disponíveis em todos os navegadores (especialmente versões antigas do Safari, Edge ou Firefox). Se você utiliza este pacote em aplicações web que precisam suportar navegadores legados, é recomendado configurar um transpiler (como Babel) e/ou polyfills apropriados para garantir compatibilidade.
27
+
28
+ ### Melhorias de Código
29
+ - **cookieDiscovery.ts**: Função `matchPattern` movida para outer scope (evita recriação)
30
+ - **validation.ts**: Adicionado warning quando prop `categories` não é fornecida
31
+ - **Condições**: Invertidas condições negadas para melhor legibilidade
32
+ - **Type Safety**: Correções de type assertions em testes
33
+
34
+ ## 🧪 Aumento Significativo de Cobertura de Testes
35
+
36
+ ### Cobertura Geral: 94.82% → 95.46% (+0.64%)
37
+
38
+ | Arquivo | Antes | Depois | Melhoria |
39
+ | ---------------------- | ------ | ----------- | -------- |
40
+ | **theme.ts** | 83.33% | **100%** ✅ | +16.67% |
41
+ | **cookieDiscovery.ts** | 88.13% | **96.61%** | +8.48% |
42
+ | **peerDepsCheck.ts** | 74.19% | **80.64%** | +6.45% |
43
+ | **validation.ts** | 96.87% | **98.24%** | +1.37% |
44
+
45
+ ### Novos Testes Adicionados (+33 testes: 318 → 351)
46
+
47
+ #### peerDepsCheck.ts
48
+ - Testes para detecção de múltiplas instâncias React via DevTools hook
49
+ - Testes para verificação de versões React no limite inferior/superior do range
50
+ - Testes para logging de erros e warnings quando `logWarnings=true`
51
+ - Cobertura de edge cases de versão semver complexa
52
+
53
+ #### dataLayerEvents.ts
54
+ - Testes para `ensureDataLayer` criar dataLayer quando undefined
55
+ - Testes para preservação de eventos existentes no dataLayer
56
+ - Testes para origins programmatic/reset
57
+ - Testes para previousCategories vazias/undefined
58
+ - Testes de SSR safety (window parcialmente definido)
59
+ - Testes para falha silenciosa de dataLayer.push
60
+
61
+ #### cookieDiscovery.ts
62
+ - Testes para uso de cookies descobertos globalmente (`__LGPD_DISCOVERED_COOKIES__`)
63
+ - Testes para `registerOverrides=true` chamando `setCookieCatalogOverrides`
64
+ - Testes para cookies sem nome ou duplicados
65
+ - Testes para match de padrões wildcard
66
+
67
+ #### cookieUtils.ts
68
+ - Testes para JSON malformado e objetos vazios
69
+ - Testes para `buildConsentStorageKey` com caracteres especiais
70
+ - Testes para `createConsentAuditEntry` com estado mínimo
71
+ - Testes para uso de nomes customizados em `removeConsentCookie`
72
+
73
+ #### theme.ts (100% coverage)
74
+ - Testes completos para palette, typography e component overrides
75
+ - Testes para button contained hover shadows
76
+ - Testes para Paper e Dialog border radius
77
+ - Testes para função deprecada `defaultConsentTheme()`
78
+ - Verificação de novas instâncias a cada chamada
79
+
80
+ ## 📚 Documentação
81
+
82
+ ### DEVELOPMENT.md
83
+ - Adicionada seção **"Cobertura de Testes"** com tabela de métricas por módulo
84
+ - Comando para rodar testes com cobertura: `pnpm test:coverage`
85
+ - Tabela detalhada mostrando Statements/Branches/Functions/Lines por pacote
86
+
87
+ ### TypeDoc
88
+ - Documentação regenerada com todas as APIs atualizadas
89
+ - 15 warnings aceitáveis sobre links relativos para pacotes do monorepo
90
+
91
+ ## ✅ Validação
92
+ - ✅ **type-check**: Todos os tipos válidos (ES2021/ES2022 APIs suportadas)
93
+ - ✅ **lint**: Código limpo sem erros
94
+ - ✅ **test**: 351/351 testes passando (100%)
95
+ - ✅ **build**: Build limpo de todos os pacotes
96
+ - ✅ **docs**: TypeDoc gerado com sucesso
97
+
98
+ ## 🔧 Arquivos Modificados
99
+
100
+ ### Core Package
101
+ - `src/utils/scriptIntegrations.ts`: globalThis, Date.now()
102
+ - `src/utils/peerDepsCheck.ts`: globalThis, Number.parseInt()
103
+ - `src/utils/dataLayerEvents.ts`: globalThis, ??= operator
104
+ - `src/utils/cookieUtils.ts`: replaceAll(), globalThis, condição invertida
105
+ - `src/utils/cookieDiscovery.ts`: matchPattern outer scope
106
+ - `src/utils/validation.ts`: warning categories undefined
107
+ - `src/context/ConsentContext.tsx`: Object.hasOwn(), state deps
108
+ - `src/context/__tests__/CategoriesContext.test.tsx`: globalThis
109
+ - `__tests__/*`: +25 novos testes
110
+
111
+ ### MUI Package
112
+ - `src/utils/theme.ts`: 100% coverage
113
+ - `src/utils/__tests__/theme.test.ts`: +8 novos testes
114
+
115
+ ### Configuration
116
+ - `tsconfig.base.json`: ES2021.String, ES2022.Object no lib
117
+
118
+ ### Documentation
119
+ - `DEVELOPMENT.md`: seção de cobertura de testes
120
+
121
+ ***
122
+
123
+ **Breaking Changes:** Nenhuma
124
+ **Migration Required:** Não
125
+
126
+ Esta release foca em qualidade de código, testes robustos e aderência a padrões modernos do JavaScript/TypeScript.
127
+
128
+ ### Patch Changes
129
+
130
+ - Updated dependencies [[`7669c4f`](https://github.com/lucianoedipo/react-lgpd-consent/commit/7669c4fba84b5cfea8f7da8ab65468110d3e77f7)]:
131
+ - @react-lgpd-consent/core@0.7.0
132
+ - @react-lgpd-consent/mui@0.7.0
133
+
3
134
  ## 0.6.3
4
135
 
5
136
  ### Patch Changes
@@ -10,6 +141,27 @@
10
141
  - @react-lgpd-consent/core@0.6.3
11
142
  - @react-lgpd-consent/mui@0.6.3
12
143
 
144
+ ## 0.6.2
145
+
146
+ ### Patch Changes
147
+
148
+ - [#113](https://github.com/lucianoedipo/react-lgpd-consent/pull/113) [`b51e1f8`](https://github.com/lucianoedipo/react-lgpd-consent/commit/b51e1f8dcac35907e3a30471135da14160c95213) Thanks [@lucianoedipo](https://github.com/lucianoedipo)! - feat: Compatibilidade completa com React 19 StrictMode
149
+ - Implementado registro global `LOADING_SCRIPTS` em `scriptLoader.ts` para prevenir injeções duplicadas de scripts durante double-invoking de efeitos
150
+ - Adicionado `setTimeout` com cleanup adequado em `ConsentScriptLoader.tsx` para prevenir race conditions
151
+ - Scripts agora carregam apenas uma vez mesmo em desenvolvimento com StrictMode ativo
152
+ - Função `loadScript` é idempotente: múltiplas chamadas simultâneas retornam a mesma Promise
153
+ - **Correção crítica**: `loadScript` agora aguarda dinamicamente o consentimento em vez de rejeitar imediatamente, permitindo que scripts carreguem quando preferências mudarem
154
+ - Cleanup automático do registro ao completar/falhar carregamento
155
+ - Adicionados testes extensivos: `ConsentScriptLoader.strictmode.test.tsx` e `scriptLoader.strictmode.test.ts`
156
+ - Documentação completa em `docs/REACT19-STRICTMODE.md`
157
+ - Todos os 302 testes passando, incluindo 5 novos testes de StrictMode
158
+
159
+ **Breaking Changes:** Nenhuma - totalmente retrocompatível
160
+
161
+ - Updated dependencies [[`b51e1f8`](https://github.com/lucianoedipo/react-lgpd-consent/commit/b51e1f8dcac35907e3a30471135da14160c95213)]:
162
+ - @react-lgpd-consent/core@0.6.2
163
+ - @react-lgpd-consent/mui@0.6.1
164
+
13
165
  ## 0.6.1
14
166
 
15
167
  ### Patch Changes
@@ -39,1036 +191,91 @@
39
191
  - @react-lgpd-consent/core@0.6.0
40
192
  - @react-lgpd-consent/mui@0.6.0
41
193
 
42
- Todas as mudanças notáveis neste projeto serão documentadas neste arquivo.
43
-
44
- # Changelog
45
-
46
- Todas as mudanças notáveis neste projeto serão documentadas neste arquivo.
47
-
48
- O formato é baseado em [Keep a Changelog](https://keepachangelog.com/pt-BR/1.0.0/),
49
- e este projeto adere ao [Semantic Versioning](https://semver.org/lang/pt-BR/).
50
-
51
- ## [0.5.0] - 2025-10-25
52
-
53
- ### 🏗️ Arquitetura Modular - MAJOR REFACTOR
54
-
55
- Esta versão introduz uma **arquitetura modular** que separa a lógica de consentimento (core) dos componentes UI (mui).
56
-
57
- ### ✨ Added
58
-
59
- - **Três pacotes independentes**:
60
- - `@react-lgpd-consent/core` (86 KB ESM) - Lógica headless sem dependências de UI
61
- - `@react-lgpd-consent/mui` (18 KB ESM) - Componentes UI completos usando Material-UI
62
- - `react-lgpd-consent` (104 KB ESM) - Pacote agregador mantido para compatibilidade
63
-
64
- - **Tree-shaking eficiente**: Instale apenas o que você precisa
65
- - Core isolado permite uso com qualquer biblioteca de UI
66
- - MUI opcional como peer dependency
67
- - **Workspace PNPM**: Monorepo organizado com builds independentes
68
- - **Guia de migração completo**: [MIGRATION.md](../../MIGRATION.md) documentando todos os cenários
69
- - **Scripts de publicação**: Suporte para publicar pacotes independentemente
70
-
71
- ### ⚠️ Breaking Changes
72
-
73
- - **Removida prop `theme` do `ConsentProvider`**
74
- - **Antes**: `<ConsentProvider theme={createTheme({...})} />`
75
- - **Depois**: Use `<ThemeProvider>` do Material-UI diretamente
76
- - **Razão**: Separação de responsabilidades - tema do MUI gerenciado pelo MUI
77
- - **Migração**: Ver [MIGRATION.md](../../MIGRATION.md) seção "Breaking Changes"
78
-
79
- ### 🔄 Changed
80
-
81
- - Estrutura de pacotes reorganizada em monorepo
82
- - Imports atualizados para usar workspace dependencies
83
- - TypeScript paths configurados para resolução de módulos
84
- - Jest configurado para resolver tsconfig corretamente
85
- - Stories refatoradas para usar `ThemeProvider` explicitamente
86
-
87
- ### 📦 Package Structure
88
-
89
- ```
90
- packages/
91
- ├── core/ # @react-lgpd-consent/core
92
- │ ├── src/
93
- │ │ ├── context/ # ConsentProvider, CategoriesContext
94
- │ │ ├── hooks/ # useConsent, useCategories
95
- │ │ ├── utils/ # scriptIntegrations, logger
96
- │ │ └── types/ # TypeScript definitions
97
- │ └── package.json
98
-
99
- ├── mui/ # @react-lgpd-consent/mui
100
- │ ├── src/
101
- │ │ ├── components/ # CookieBanner, PreferencesModal, etc.
102
- │ │ └── index.ts # Re-exports core + UI components
103
- │ └── package.json
104
-
105
- └── react-lgpd-consent/ # Aggregator (compatibilidade)
106
- └── package.json # Re-exports @react-lgpd-consent/mui
107
- ```
108
-
109
- ### 📊 Bundle Sizes
110
-
111
- | Pacote | ESM | CJS | DTS | Dependências |
112
- | -------------------------- | -------- | -------- | --------- | --------------------------- |
113
- | `@react-lgpd-consent/core` | 86.04 KB | 89.12 KB | 125.82 KB | React, js-cookie, zod |
114
- | `@react-lgpd-consent/mui` | 17.69 KB | 20.95 KB | 11.78 KB | core + @mui/material (peer) |
115
- | `react-lgpd-consent` | 104 KB\* | 110 KB\* | 138 KB\* | mui (workspace) |
116
-
117
- \* Bundle final = core + mui (~104 KB total)
118
-
119
- ### 🎯 Migration Paths
120
-
121
- 1. **Uso de componentes UI** (maioria dos usuários):
122
-
123
- ```bash
124
- # Opção A: Pacote agregador (zero mudanças)
125
- npm install react-lgpd-consent@0.5.0
126
-
127
- # Opção B: Pacote MUI direto (recomendado)
128
- npm install @react-lgpd-consent/mui
129
- ```
130
-
131
- 2. **Headless/UI customizada**:
132
-
133
- ```bash
134
- npm uninstall react-lgpd-consent @mui/material
135
- npm install @react-lgpd-consent/core
136
- ```
137
-
138
- 3. **NextJS App Router**:
139
- ```tsx
140
- // Separação clara client/server
141
- 'use client'
142
- import { ConsentProvider } from '@react-lgpd-consent/mui'
143
- ```
144
-
145
- ### ✅ Maintained (Sem Breaking Changes)
146
-
147
- - Todas as APIs públicas do `useConsent`
148
- - Props de `ConsentProvider` (exceto `theme`)
149
- - Componentes `CookieBanner`, `PreferencesModal`, `FloatingPreferencesButton`
150
- - Sistema de textos e templates (`TEXT_TEMPLATES`, `resolveTexts`)
151
- - Sistema de design tokens (`designTokens`)
152
- - Integrações (Google Analytics, GTM, UserWay, etc.)
153
- - SSR/NextJS support
154
- - TypeScript types completos
155
-
156
- ### 🔧 Fixed
157
-
158
- - Jest configuração: tsconfig path resolution
159
- - Stories: uso correto de ThemeProvider
160
- - Type-check: todos os pacotes passam sem erros
161
- - Tests: 207 testes passando em todos os pacotes
162
-
163
- ### 📚 Documentation
164
-
165
- - Novo [MIGRATION.md](../../MIGRATION.md) com:
166
- - 3 cenários de migração detalhados
167
- - Comparativo de bundles
168
- - Troubleshooting completo
169
- - Exemplos antes/depois
170
- - README atualizado com:
171
- - 3 opções de instalação
172
- - Comparativo de pacotes
173
- - Guia de escolha
174
- - READMEs específicos para core e mui packages
175
-
176
- ### 🚀 Development
177
-
178
- - PNPM workspaces configurados
179
- - Scripts: `build:core`, `build:mui`, `build:main`
180
- - Scripts: `publish:core`, `publish:mui`, `publish:main`, `publish:all`
181
- - Type-check executado em todos os pacotes
182
- - Tests executados em todos os pacotes
183
- - Node >= 20.0.0 requerido
184
-
185
194
  ---
186
195
 
187
- ## [0.4.5] - 2025-10-25 — DataLayer Events e CI/CD
188
-
189
- ### 📊 **DataLayer Events para Google Tag Manager**
190
-
191
- - **Eventos Padronizados**: Implementado contrato de eventos `consent_initialized` e `consent_updated` no `window.dataLayer`
192
- - `consent_initialized`: Disparado após hidratação inicial do `ConsentProvider`
193
- - `consent_updated`: Disparado quando usuário altera preferências via banner, modal ou API
194
- - Payload inclui: `event`, `consent_version`, `timestamp` (ISO 8601), `categories`, `origin`, `changed_categories`
195
- - **Rastreamento de Origem**: Campo `origin` identifica fonte da mudança de consentimento
196
- - `'banner'`: Decisão feita no CookieBanner
197
- - `'modal'`: Ajuste feito no PreferencesModal
198
- - `'reset'`: Reset programático via API
199
- - `'programmatic'`: Mudança via `setPreference()` ou `acceptAll()`
200
-
201
- - **API Pública**: Novas funções exportadas para uso customizado
202
- - `pushConsentInitializedEvent(categories: ConsentPreferences)`
203
- - `pushConsentUpdatedEvent(categories: ConsentPreferences, origin: ConsentEventOrigin, previousCategories?: ConsentPreferences)`
204
- - Tipos: `ConsentEventOrigin`, `ConsentInitializedEvent`, `ConsentUpdatedEvent`, `ConsentEvent`
205
-
206
- - **Integração Automática**: Eventos disparados automaticamente pelo `ConsentContext`
207
- - Ref `previousPreferencesRef` rastreia estado anterior para calcular `changed_categories`
208
- - Logger integrado para debug de eventos em desenvolvimento
209
- - SSR-safe: não quebra quando `window` é undefined
210
-
211
- - **Documentação GTM**: Seção completa adicionada em `INTEGRACOES.md`
212
- - Schemas dos eventos com exemplos
213
- - Passo a passo de configuração do Google Tag Manager
214
- - Exemplos TypeScript de triggers e tags customizados
215
- - Casos de uso: auditoria LGPD, análise de conversão, triggers condicionais
216
-
217
- ### 🔧 **CI/CD e Build**
218
-
219
- - **Migração para pnpm**: Workflows atualizados de npm para pnpm
220
- - `ci.yml`: Adicionado `pnpm/action-setup@v4`, substituído `npm ci` por `pnpm install --frozen-lockfile`
221
- - `package-check.yml`: Migrado para pnpm
222
- - `publish-github-packages.yml`: Migrado para pnpm
223
- - `deploy-docs.yml`: Migrado para pnpm
224
- - **Problema Resolvido**: Conflitos `ERESOLVE` com `@eslint/js` eliminados
225
- - `.gitignore`: Adicionado `package-lock.json` para evitar conflitos
226
-
227
- - **Dependências**: Adicionado `@eslint/js@9.38.0` para resolver missing dependency error
228
-
229
- ### 🧪 **Testes**
230
-
231
- - **dataLayerEvents.test.ts**: 10 novos testes cobrindo eventos dataLayer
232
- - Push de eventos `consent_initialized` e `consent_updated`
233
- - Cálculo correto de `changed_categories`
234
- - Diferentes origens (banner, modal, reset, programmatic)
235
- - Inicialização do dataLayer se não existir
236
- - SSR-safety (não quebra quando window é undefined)
237
- - Formato ISO 8601 de timestamps
238
- - **Solução de Isolamento**: Testes usam estratégia de "pegar último evento" para evitar acúmulo entre testes
239
-
240
- ### 📚 **Documentação**
241
-
242
- - **INTEGRACOES.md**: Nova seção "Eventos dataLayer (Google Tag Manager)" com 200+ linhas
243
- - **README.md**: Seção "Novidades v0.4.5" com resumo de features
244
- - **README.en.md**: Tradução da seção "What's New in v0.4.5"
245
- - **tsconfig.typedoc.json**: Corrigido para excluir `*.test.ts` (além de `*.test.tsx`)
246
- - **API Pública**: Exportações documentadas com TSDoc completo
247
-
248
- ### 📦 **Build**
249
-
250
- - **Versão**: Bump de `0.4.4` → `0.4.5`
251
- - **Tamanho**: Build otimizado mantém tree-shaking e SSR-safety
252
- - ESM: `dist/index.js` ~32.59 KB
253
- - CJS: `dist/index.cjs` ~38.17 KB
254
- - Types: `dist/index.d.ts` ~132.13 KB
255
-
256
- ---
257
-
258
- ## [0.4.4] - 2025-10-06 — Correções de CI/CD e Publicação
259
-
260
- ### 🔧 **Correções de CI/CD**
261
-
262
- - **Workflow de Publicação npm**: Corrigido bug que impedia publicação mesmo quando tag estava na `main`
263
- - **Problema**: `git fetch --depth=1` limitava histórico e falhava verificação de ancestralidade
264
- - **Solução**: Removido `--depth=1` do fetch, aproveitando `fetch-depth: 0` do checkout
265
- - **Impacto**: Tags criadas após merge para `main` agora são publicadas corretamente no npm
266
-
267
- ### 📊 **Integração com Codecov**
268
-
269
- - **Upload de Coverage**: Adicionado `codecov/codecov-action@v5` ao workflow CI
270
- - Envia relatórios de cobertura automaticamente para Codecov
271
- - Token configurado via `secrets.CODECOV_TOKEN`
272
- - Integração com badge de coverage no README
273
-
274
- ### 📚 **Documentação**
275
-
276
- - **Badges**: Badge de coverage já configurado no README (v0.4.3) agora recebe dados em tempo real
277
- - **Workflows**: Documentação inline sobre fetch depth e verificação de ancestralidade
278
-
279
- ## [0.4.3] - 2025-10-06 — Otimizações de Performance e Qualidade
280
-
281
- ### 🚀 **Melhorias de Performance**
282
-
283
- - **React.memo**: Adicionado memoização em componentes puros (`Branding`, `FloatingPreferencesButton`)
284
- - **useMemo**: Otimizado cálculo de `positionStyles` no `FloatingPreferencesButton`
285
- - **Lazy Loading Expandido**: `FloatingPreferencesButton` agora é carregado sob demanda
286
- - **Logger em Produção**: `warn()`, `info()`, `debug()` suprimidos em `NODE_ENV=production`
287
- - Reduz overhead em bundle de produção
288
- - `error()` permanece ativo para debugging crítico
289
-
290
- ### 🐛 **Correções Críticas**
291
-
292
- - **ConsentProvider Suspense Bug**: Corrigido crash silencioso quando `consented=true`
293
- - Adicionado `<React.Suspense>` ausente ao redor do `FloatingPreferencesButton` lazy
294
- - Sintoma: Provider renderizava `<div />` vazio ao invés de `children`
295
- - Impacto: Testes com `initialState.consented=true` agora passam
296
-
297
- ### 🧪 **Testes de Acessibilidade (A11y)**
298
-
299
- - **jest-axe**: Integração completa com validação WCAG automática
300
- - **CookieBanner.a11y.test.tsx**: 3 cenários de acessibilidade validados
301
- - **PreferencesModal.a11y.test.tsx**: 3 cenários de acessibilidade validados
302
- - **TypeScript**: Definições `jest-axe.d.ts` para matcher `toHaveNoViolations()`
303
- - **Script**: Adicionado `npm run test:a11y` para testes focados
304
-
305
- ### 📦 **Exports Modulares**
306
-
307
- - **`./integrations`**: Novo export separado para tree-shaking otimizado
308
- - Permite `import { createGoogleAnalyticsIntegration } from 'react-lgpd-consent/integrations'`
309
- - Reduz bundle para consumidores que não usam integrações
310
- - Suporte ESM + CJS + TypeScript definitions
311
-
312
- ### 🔧 **CI/CD**
313
-
314
- - **Node.js 20**: Atualizado de Node 18 para Node 20 LTS em todos os workflows
315
- - **Cache TypeScript**: Adicionado cache de builds para acelerar CI (~20% mais rápido)
316
- - Cache de `.tsbuildinfo`, `node_modules/.cache`, `.eslintcache`
317
- - Workflows atualizados: `ci.yml`, `codeql.yml`, `deploy-docs.yml`, `package-check.yml`
318
-
319
- ### 📚 **Documentação**
320
-
321
- - **Badges**: Adicionados 3 badges ao README (Coverage, Bundle Size, Node Version)
322
- - Codecov para visualização de cobertura
323
- - Bundlephobia para tamanho de bundle
324
- - Node.js badge para requisitos de ambiente
325
-
326
- ### ✅ **Validação de Qualidade**
327
-
328
- - **222 testes passando**: 100% de sucesso sem skips
329
- - **94.85% cobertura**: Mantida cobertura alta
330
- - **0 warnings de lint**: ESLint limpo
331
- - **Build otimizado**: ESM 32.52 KB + lazy chunks (95B + 86B)
332
-
333
- ### 📦 **Otimizações de Bundle**
334
-
335
- - **tsup.config.ts**: Configuração otimizada para tree-shaking e code-splitting
336
- - **ESM Bundle**: 33.26 KB → 32.52 KB (-740B, -2.2%)
337
- - **CJS Bundle**: 118.51 KB → 37.71 KB (CJS principal) + chunks (-68%, muito mais eficiente!)
338
- - **Brotli Compressed**:
339
- - ESM: 17.06 KB → 16.95 KB (-110B)
340
- - CJS: 68.72 KB → 18.02 KB (-74%, -50.7 KB!)
341
- - **Side-effects**: Configuração refinada para preservar code-splitting sem warnings
342
- - **Tree-shaking**: Agressivo com external de peer dependencies
343
-
344
- ### 🎯 **Decisões de Design**
345
-
346
- - **ConsentGate não usa memo**: Decisão intencional - estado de preferências é dinâmico
347
- - Re-renders necessários quando usuário altera consentimento
348
- - Lógica leve o suficiente para não justificar memoização
349
-
350
- ### 📋 **Dependências**
351
-
352
- - **Adicionadas**:
353
- - `@axe-core/react@^4.10.2` (dev)
354
- - `jest-axe@^10.0.0` (dev)
355
- - `@types/jest-axe@^3.5.9` (dev)
356
-
357
- ## [0.4.1] - 2025-09-21 — Expansão das Integrações Nativas de Scripts
358
-
359
- ### 🚀 **Integrações Nativas Expandidas**
360
-
361
- - **Facebook Pixel**: `createFacebookPixelIntegration()` com auto-tracking e advanced matching
362
- - **Hotjar**: `createHotjarIntegration()` para heatmaps e session recordings
363
- - **Mixpanel**: `createMixpanelIntegration()` com configuração avançada de eventos
364
- - **Microsoft Clarity**: `createClarityIntegration()` para analytics de comportamento
365
- - **Intercom**: `createIntercomIntegration()` para chat e suporte ao cliente
366
- - **Zendesk Chat**: `createZendeskChatIntegration()` para atendimento integrado
367
- - **Drift**: `createDriftIntegration()` para conversational marketing
368
- - **Freshchat**: `createFreshchatIntegration()` para customer support
369
-
370
- ### 🎯 **Sistema de Configuração em Lote**
371
-
372
- - **Templates de negócio**: `createECommerceIntegrations()`, `createSaaSIntegrations()`, `createCorporateIntegrations()`
373
- - **Categorização inteligente**: `suggestCategoryForScript()` para sugestão automática de categorias
374
- - **Configuração unificada**: Setup simplificado para múltiplas ferramentas com um comando
375
- - **Padrões de mercado**: Templates baseados em necessidades reais do mercado brasileiro
376
-
377
- ### 🔧 **Melhorias no Sistema de Scripts**
378
-
379
- - **Validação robusta**: `validateNecessaryClassification()` corrigida para evitar falsos positivos
380
- - **Auto-configuração**: `autoConfigureCategories()` com detecção inteligente de categorias necessárias
381
- - **Error handling**: Melhor tratamento de erros em carregamento de scripts
382
- - **Performance**: Carregamento otimizado e lazy loading de integrações
383
-
384
- ### 🔍 **Descoberta Automática de Cookies (Experimental)**
385
-
386
- - **discoverRuntimeCookies()**: Escaneamento de cookies em tempo real no navegador
387
- - **detectConsentCookieName()**: Detecção automática do cookie de consentimento
388
- - **categorizeDiscoveredCookies()**: Categorização inteligente usando padrões LGPD
389
- - **Integração nativa**: Suporte a `setCookieCatalogOverrides` automático
390
- - **SSR-safe**: Funciona corretamente em ambientes server-side rendering
391
-
392
- ### 🎨 **Design Tokens Expandidos**
393
-
394
- - **200+ pontos de customização**: Expansão dramática do sistema de design tokens
395
- - **Sistema responsivo**: Breakpoints, spacing responsivo, typography hierarchy
396
- - **Acessibilidade nativa**: Contrast ratios, focus states, motion preferences
397
- - **Tokens por componente**: Customização granular para cada elemento UI
398
-
399
- ### 📝 **Sistema Avançado de Textos**
400
-
401
- - **Templates pré-configurados**: Ecommerce, SaaS, Governo com contextos específicos
402
- - **Multilingual**: Português, inglês, espanhol com fallbacks inteligentes
403
- - **Função resolveTexts**: Resolução automática de textos baseada em contexto
404
-
405
- ### 🧪 **Melhorias de Testes e Qualidade**
406
-
407
- - **193 testes passando**: Cobertura substancialmente melhorada
408
- - **19 novos testes**: Especificamente para `cookieRegistry` (antes 45.83% → 100% branches)
409
- - **Test realism**: Testes adaptados ao comportamento real vs ideal
410
- - **Edge cases**: Performance, boundary testing, state management
411
- - **Lint compliance**: Configuração ESLint mais rigorosa e aderente
412
-
413
- ### 🔧 **Melhorias de API e Developer Experience**
414
-
415
- - **Exports organizados**: Melhor estruturação das exportações públicas
416
- - **TypeScript strict**: Tipagem mais rigorosa e descritiva
417
- - **Documentação TSDoc**: Comentários expandidos com exemplos práticos
418
- - **Error handling**: Tratamento de erros mais robusto e informativo
419
- - **Performance**: Otimizações em carregamento e renderização
420
-
421
- ### 📚 **Exemplos e Migração**
422
-
423
- - **MigrationDemo-v0.4.1.tsx**: Exemplo completo mostrando todas as novidades
424
- - **Remoção**: TestV0.3.1.tsx removido (obsoleto)
425
- - **Compatibilidade**: Guias de migração antes/depois
426
- - **Best practices**: Demonstrações de uso avançado
427
-
428
- ### 🏗️ **Build e Infraestrutura**
429
-
430
- - **Bundle otimizado**: ESM 34.36 KB, CJS 102.74 KB
431
- - **Tree-shaking**: Configuração `sideEffects: false` otimizada
432
- - **Docs geradas**: TypeDoc atualizado com novas funcionalidades
433
- - **Pipeline robusto**: Type-check + tests + lint + build + docs
434
-
435
- ### ⚠️ **Breaking Changes**
436
-
437
- #### 🔧 **`setPreference` Type Change**
438
-
439
- - **Mudança**: `setPreference(cat: Category, value: boolean)` → `setPreference(cat: string, value: boolean)`
440
- - **Motivo**: Suporte a categorias customizadas além das predefinidas
441
- - **Impacto**: Código TypeScript com tipo `Category` explícito pode precisar ajustes
442
- - **Migração**:
443
- - ✅ **Nenhuma mudança necessária** se usando strings literais (`'analytics'`, `'marketing'`)
444
- - ⚠️ **Ajuste necessário** apenas se estava usando explicitamente o tipo `Category`
445
- - 📚 **Guia**: Use `string` para suportar categorias customizadas ou continue usando os valores padrão
446
-
447
- #### 🔧 **`ScriptIntegration.category` Type Change**
448
-
449
- - **Mudança**: `category: Category` → `category: string`
450
- - **Motivo**: Suporte a categorias customizadas nas integrações de script
451
- - **Impacto**: Integrações customizadas com tipo `Category` explícito
452
- - **Migração**: Mesmas diretrizes do `setPreference` acima
453
-
454
- ### 🎯 **Categorias Suportadas**
455
-
456
- - `necessary` (sempre ativo)
457
- - `analytics` (Google Analytics, etc.)
458
- - `marketing` (Facebook Pixel, Google Ads)
459
- - `functional` (Chat, mapas, widgets)
460
- - `social` (Redes sociais, compartilhamento)
461
- - `personalization` (Preferências, customização)
462
-
463
- ### 📈 **Estatísticas de Melhoria**
464
-
465
- - **Design Tokens**: 4 → 200+ pontos de customização (+4900%)
466
- - **Testes**: 174 → 193 testes (+11% cobertura)
467
- - **Funcionalidades**: +15 novas funções exportadas
468
- - **Documentação**: +3 templates de texto, +6 contextos específicos
469
- - **Developer APIs**: +8 utilitários para descoberta de cookies
470
-
471
- ## [0.4.0] - 2025-09-09 — Custom categories
472
-
473
- ### Added
474
-
475
- - Support for `customCategories` in `ConsentProvider.categories`.
476
- - Included in preferences initialization and validation.
477
- - Shown in the Preferences modal (with name/description).
478
- - Exposed via developer guidance/context for custom UIs.
479
- - Quickstart PT/EN sections with `customCategories` examples.
480
- - Storybook story: WithCustomCategories.
481
-
482
- ### Notes
483
-
484
- - Non-breaking change; existing configurations continue to work.
485
-
486
- ## [0.3.7] - 2025-09-08 - Testes de UI e carregamento de scripts
487
-
488
- ### 🧪 Novos testes e cobertura
489
-
490
- - CookieBanner
491
- - Testes para renderização condicional em modos bloqueante (overlay) e não-bloqueante (Snackbar)
492
- - Verificação de abertura do modal ao clicar em “Preferências” e persistência ao clicar em “Recusar”
493
- - ConsentScriptLoader / Hook
494
- - Gating por consentimento e categoria; não carrega scripts quando não consentido ou categoria desabilitada
495
- - Tratamento de erros (log `logger.error` quando `loadScript` rejeita)
496
- - `reloadOnChange` reexecuta o carregamento ao reabilitar a categoria; default não recarrega
497
- - Integrações de script
498
- - Verificação de `attrs` em integrações (GA define `async: 'true'`)
499
-
500
- ### 🔧 Interno
501
-
502
- - Aumento da estabilidade para refatorações futuras na camada de UI e utilitários de carregamento.
503
-
504
- ## [0.3.6] - 2025-08-28 - Correção crítica: Herança de ThemeProvider
505
-
506
- ### ✨ Novas funcionalidades e melhorias
507
-
508
- - Storybook
509
- - Adicionado e aprimorado suporte ao Storybook com controles (`args`/`argTypes`) para componentes-chave (`FloatingPreferencesButton`, `PreferencesModal`) e suporte a tema escuro nas histórias.
510
- - Isolamento entre stories via reset de estado (remoção/limpeza de cookie entre stories) e ajustes em `.storybook/preview.tsx` para compatibilidade com Vite/ESM.
511
-
512
- - ConsentProvider
513
- - `blockingStrategy` (opt-in) adicionado para permitir overlays de bloqueio controlados pelo provider.
514
- - Melhor encaminhamento de props: `floatingPreferencesButtonProps` agora são repassadas corretamente quando o `FloatingPreferencesButton` é instanciado automaticamente.
515
-
516
- - Testes e qualidade
517
- - Suíte de testes ampliada: novos testes para `DesignContext`, `useConsent`, `CategoriesContext`, `ConsentScriptLoader`, `cookieUtils`, `scriptLoader`, `scriptIntegrations`, `SafeThemeProvider`, `logger`, `ConsentGate`, `PreferencesModal` e `FloatingPreferencesButton`.
518
- - Configuração inicial de mutation testing com Stryker.
519
- - Setup de testes atualizado para suprimir logs do `developerGuidance` durante execução normal e permitir testes dedicados que verifiquem esses logs.
520
-
521
- - Integração e DX
522
- - Quickstart PT/EN e melhorias no `README` para facilitar adoção e contribuições.
523
- - Notas de troubleshooting e documentação adicional sobre Storybook e integração de componentes.
524
-
525
- ### 🐛 Correções importantes
526
-
527
- - `FloatingPreferencesButton` — props forward
528
- - Sintoma: props (`tooltip`, `hideWhenConsented`, etc.) não eram aplicadas quando o botão era renderizado automaticamente pelo `ConsentProvider`.
529
- - Solução: `ConsentProvider` agora encaminha `floatingPreferencesButtonProps` corretamente para o componente padrão. Stories atualizadas.
530
-
531
- - Storybook fixes
532
- - Removidos arquivos `preview.ts` que continham JSX; migrado para `preview.tsx` e ajustadas exports para evitar erros com o bundler (esbuild/vite).
533
-
534
- ### 🧪 Testes e estabilidade
535
-
536
- - Cobertura e robustez
537
- - Adicionados testes que validam uso de hooks fora do `ConsentProvider` (erros esperados), hidratação a partir de cookie, callbacks (`onConsentGiven`, `onPreferencesSaved`) e fluxos de UI (abrir/fechar modal, accept/reject).
538
- - Ajustes no `jest.setup` e um `jest.console-setup.ts` para garantir suprimir logs antes da coleta de módulos, mantendo testes determinísticos.
539
-
540
- ### 📚 Documentação
541
-
542
- - Quickstart & README
543
- - Novo Quickstart em PT/EN e simplificações no `README` com foco em `QUICKSTART`.
544
- - Documentação de uso do Storybook e troubleshooting adicionada em `docs`.
545
-
546
- ### 🛠️ Correção crítica
547
-
548
- - **Corrigido:** A biblioteca não deve criar ou impor um `ThemeProvider` global por si só. O `ConsentProvider` agora herda o theme do app consumidor quando um `ThemeProvider` do MUI estiver presente. O Provider só envolverá com `ThemeProvider` se a prop `theme` for explicitamente fornecida.
549
- - **Motivação:** Evitar conflitos de contexto MUI/Emotion, regressões visuais e problemas em SSR causados por criação de tema no escopo de módulo.
550
- - **Export:** `createDefaultConsentTheme()` foi adicionada como fábrica para quem precisar de um fallback explícito. Mantemos também um getter de compatibilidade (deprecated) `defaultConsentTheme()` que retorna uma nova instância quando chamada, evitando side-effects no import.
551
- - **Compatibilidade:** Uso padrão continua igual — se seu app já fornece um `ThemeProvider` o `ConsentProvider` usará o theme existente. Para quem precisa de um fallback explícito, passe `theme={createDefaultConsentTheme()}` ao `ConsentProvider`.
552
-
553
- > Nota: originalmente essa correção foi marcada como v0.3.5; devido a conflito de publicação a versão foi bumpada localmente para v0.3.6 e a entrada foi gravada nesta release.
554
-
555
- - Limpeza de arquivos redundantes e ajustes de ESLint/preview para Storybook.
556
-
557
- ### Commits representativos
196
+ ## Versões Anteriores (< 0.6.0)
558
197
 
559
- - Testes e supressão de logs: `fce823a`, `333ce0a`, `a1eea7e`
560
- - Storybook / docs: `8f8c388`, `6e09058`, `329682c`, `9b1d977`, `adf0d49`
561
- - Provider features: `967d278` (blockingStrategy)
562
- - Quickstart / README: `db03ae3`
563
- - Dependências / chores: `27339e7`, `3b7fdba`, `11c3602`
198
+ Para histórico completo detalhado de todas as versões, consulte:
564
199
 
565
- ## [0.3.1] - 2025-08-13 - CORREÇÕES DE PRODUÇÃO E MELHORIAS DE COMPATIBILIDADE
200
+ - [Releases no GitHub](https://github.com/lucianoedipo/react-lgpd-consent/releases)
201
+ - [Git tags](https://github.com/lucianoedipo/react-lgpd-consent/tags)
566
202
 
567
- ### 🛡️ **Corrigido - Critical Production Fixes**
203
+ ### Resumo de Marcos Importantes:
568
204
 
569
- #### A) Compatibilidade com ThemeProvider
205
+ **v0.5.0** (25/10/2025) - **Arquitetura Modular**
570
206
 
571
- - **Erro "Cannot read properties of undefined (reading 'duration')"**: Implementado sistema de fallbacks seguros para propriedades de tema MUI inexistentes ou indefinidas
572
- - **Componentes internos não renderizavam**: Adicionado `SafeThemeProvider` interno que garante compatibilidade com diferentes configurações de ThemeProvider do usuário
573
- - **Conflitos de tema**: `FloatingPreferencesButton` e outros componentes agora usam `useThemeWithFallbacks()` para acessar propriedades de tema com valores padrão
207
+ - Separação em 3 pacotes: `@react-lgpd-consent/core`, `@react-lgpd-consent/mui`, `react-lgpd-consent`
208
+ - Tree-shaking eficiente e suporte headless
209
+ - **Breaking Change**: Removida prop `theme` do ConsentProvider
574
210
 
575
- #### B) API do FloatingPreferencesButton
211
+ **v0.4.5** (25/10/2025) - **DataLayer Events**
576
212
 
577
- - **"Element type is invalid: expected string but got object"**: Corrigido erro de renderização no `FloatingPreferencesButton`
578
- - **Falta de controle sobre botão flutuante**: Adicionada prop `disableFloatingPreferencesButton?: boolean` no `ConsentProvider`
579
- - **Sem API para abrir modal programaticamente**:
580
- - Novo hook `useOpenPreferencesModal()` para componentes React
581
- - Nova função `openPreferencesModal()` para uso em JavaScript puro
582
- - Integração automática com sistema global para acesso fora do contexto React
213
+ - Eventos padronizados para Google Tag Manager (`consent_initialized`, `consent_updated`)
214
+ - API pública para eventos customizados
215
+ - Rastreamento de origem de mudanças de consentimento
583
216
 
584
- #### C) Exports de TypeScript Ausentes
217
+ **v0.4.4** (06/10/2025) - **CI/CD e Codecov**
585
218
 
586
- - Adicionados exports públicos para melhor Developer Experience:
587
- - `CustomCookieBannerProps` - para componentes de banner customizados
588
- - `CustomPreferencesModalProps` - para modal de preferências customizado
589
- - `CustomFloatingPreferencesButtonProps` - para botão flutuante customizado
590
- - `ConsentProviderProps` - para tipagem das props do provider principal
219
+ - Correção de workflow de publicação npm
220
+ - Integração com Codecov para coverage reports
591
221
 
592
- ### **Novas Funcionalidades**
222
+ **v0.4.3** (06/10/2025) - **Performance**
593
223
 
594
- #### Sistema de Debug e Troubleshooting
224
+ - React.memo em componentes puros
225
+ - Logger otimizado para produção
226
+ - Lazy loading de FloatingPreferencesButton
227
+ - Testes de acessibilidade com jest-axe
595
228
 
596
- - **`setDebugLogging(enabled: boolean, level?: LogLevel)`**: Função para habilitar logs detalhados em produção quando necessário
597
- - **Logs automáticos**: Sistema de logging que inclui:
598
- - Compatibilidade de tema (detection de propriedades MUI faltantes)
599
- - Mudanças de estado de consentimento
600
- - Operações de cookie (leitura/escrita/remoção)
601
- - Renderização de componentes (props e estados)
602
- - Integrações de scripts (carregamento/falhas)
603
- - Chamadas de API internas
604
- - **Detecção automática de ambiente**: Logs desabilitados automaticamente em produção, habilitados em desenvolvimento
229
+ **v0.4.2** (06/10/2025) - **SSR e Validação**
605
230
 
606
- #### API Melhorada para Controle Programático
231
+ - Quickstarts executáveis (Next.js App Router, Vite)
232
+ - Guia completo SSR/Next.js
233
+ - Validação de configuração com Zod (desenvolvimento)
607
234
 
608
- - **`useOpenPreferencesModal()`**: Hook que retorna função para abrir modal de preferências
609
- - **`openPreferencesModal()`**: Função utilitária para acesso global (fora de componentes React)
610
- - **Integração com AccessibilityDock**: Exemplos de uso em dock de acessibilidade customizado
235
+ **v0.4.1** (21/09/2025) - **Expansão de Integrações**
611
236
 
612
- ### 📚 **Documentação**
237
+ - 9 integrações nativas: GA4, GTM, UserWay, Facebook Pixel, Hotjar, Mixpanel, Clarity, Intercom, Zendesk
238
+ - Sistema completo de design tokens (200+ pontos de customização)
239
+ - Templates de texto: eCommerce, SaaS, Governo, Multilingual
240
+ - **Breaking Change**: `setPreference` e `ScriptIntegration.category` aceitam `string` (suporte a categorias customizadas)
613
241
 
614
- #### Guia de API v0.3.1+
242
+ **v0.4.0** (09/09/2025) - **Categorias Customizadas**
615
243
 
616
- - **Novo arquivo**: `docs/API-v0.3.1.md` com exemplos completos
617
- - **Casos de uso**: Next.js 14+, Material-UI, componentes totalmente customizados
618
- - **Troubleshooting**: Guia de resolução dos problemas mais comuns
619
- - **Migration Guide**: Instruções de atualização (sem breaking changes)
244
+ - Suporte a `customCategories` no ConsentProvider
245
+ - Integração completa com UI (modal de preferências)
620
246
 
621
- #### Exemplos de Implementação
247
+ **v0.3.7** (08/09/2025) - **Testes de UI**
622
248
 
623
- - **Componentes customizados**: Exemplos completos de `CustomCookieBanner`, `CustomPreferencesModal`
624
- - **Integração com AccessibilityDock**: Implementação de botão de preferências em dock customizado
625
- - **SSR/Next.js**: Configuração para evitar flash de conteúdo e hidratação adequada
626
- - **Debug em produção**: Como habilitar logs para troubleshooting quando necessário
249
+ - Cobertura de testes para CookieBanner (bloqueante/não-bloqueante)
250
+ - Testes de gating e lifecycle de scripts
627
251
 
628
- ### 🔧 **Melhorias Técnicas**
252
+ **v0.3.6** (28/08/2025) - **Correção Crítica**
629
253
 
630
- #### Robustez e Estabilidade
254
+ - Herança correta de ThemeProvider do Material-UI
255
+ - Previne redefinição de tema em composição de provedores
631
256
 
632
- - **SafeThemeProvider**: Componente interno que evita erros de tema em diferentes configurações de Material-UI
633
- - **Fallbacks automáticos**: Valores padrão para todas as propriedades de tema acessadas pelos componentes
634
- - **Detecção de ambiente**: Melhorada para funcionar em diferentes build systems e ambientes de execução
635
- - **Compatibilidade**: Testado com Material-UI v5 e Next.js 14+
257
+ **v0.3.1** (13/08/2025) - **Compatibilidade**
636
258
 
637
- #### Developer Experience
259
+ - Correções de produção e compatibilidade com diferentes setups
638
260
 
639
- - **Tipos mais precisos**: Exports de todos os tipos necessários para customização
640
- - **Logs informativos**: Sistema de debug que facilita identificação de problemas
641
- - **Documentação expandida**: Exemplos práticos e casos de uso reais
642
- - **Zero breaking changes**: Atualização segura desde v0.3.0
261
+ **v0.3.0** (12/08/2025) - **DX Aprimorada**
643
262
 
644
- ### 🛠️ **Contexto de Correção**
263
+ - UI automática com CookieBanner e PreferencesModal
264
+ - Sistema de orientações para desenvolvedores
645
265
 
646
- Estas correções abordam problemas identificados em produção com:
266
+ **v0.2.x** (12/08/2025) - **Conformidade LGPD**
647
267
 
648
- - **Apps Next.js 14+ usando Material-UI**: Conflitos de ThemeProvider resolvidos
649
- - **Componentes customizados**: APIs claras para substituição completa da UI
650
- - **AccessibilityDock integrations**: Controle programático do modal de preferências
651
- - **Troubleshooting**: Sistema de logs para diagnóstico de problemas em produção
268
+ - Sistema de orientações rigoroso
269
+ - Documentação de compliance
652
270
 
653
- ### 📋 **Migration from v0.3.0**
271
+ **v0.1.x** (09/08/2025) - **Lançamento Inicial**
654
272
 
655
- **Zero Breaking Changes**: Atualização direta sem modificações necessárias
656
-
657
- **Novos recursos opcionais**:
658
-
659
- ```tsx
660
- // Desabilitar botão flutuante padrão
661
- ;<ConsentProvider
662
- disableFloatingPreferencesButton={true}
663
- // ... outras props
664
- />
665
-
666
- // Usar controle programático
667
- const openModal = useOpenPreferencesModal()
668
-
669
- // Habilitar debug se necessário
670
- setDebugLogging(true, LogLevel.DEBUG)
671
- ```
672
-
673
- ## [0.3.0] - 2025-08-12 - DX APRIMORADA E UI AUTOMÁTICA
674
-
675
- ### 🚨 **MUDANÇAS QUE QUEBRAM A COMPATIBILIDADE**
676
-
677
- - **Remoção de Exports Diretos de Componentes UI**: `CookieBanner` e `FloatingPreferencesButton` não são mais exportados diretamente. Eles agora são gerenciados e renderizados automaticamente pelo `ConsentProvider`.
678
- - **Remoção da Prop `disableAutomaticModal`**: Esta prop foi removida do `ConsentProvider`. O modal de preferências agora é sempre renderizado (seja o padrão ou um componente customizado fornecido) e sua visibilidade é controlada internamente pelo estado `isModalOpen`.
679
- - **Tipagem Estrita para Componentes UI Customizados**: As props para `PreferencesModalComponent`, `CookieBannerComponent` e `FloatingPreferencesButtonComponent` agora exigem tipos específicos (`CustomPreferencesModalProps`, `CustomCookieBannerProps`, `CustomFloatingPreferencesButtonProps`). Componentes customizados que usavam `React.ComponentType<any>` precisarão ser atualizados.
680
- - **Remoção do Hook `useConsentComponentProps`**: Este hook utilitário foi removido, pois os componentes internos agora usam `useConsent` e `useConsentTexts` diretamente.
681
-
682
- ### ✨ **Novas Funcionalidades e Melhorias**
683
-
684
- - **Renderização Automática de Componentes UI Padrão**: O `ConsentProvider` agora renderiza automaticamente o `CookieBanner` (quando necessário) e o `FloatingPreferencesButton` (após consentimento), reduzindo o boilerplate.
685
- - **Componentes UI Sobrescrevíveis com Tipagem Clara**: Permite que desenvolvedores forneçam seus próprios componentes de banner, modal e botão flutuante com total segurança de tipo.
686
- - **Controle Simplificado do Modal**: A visibilidade do modal é controlada exclusivamente pelo estado interno, eliminando a necessidade da prop `disableAutomaticModal`.
687
- - **Carregamento Imediato de Banner e Botão Flutuante**: Removido o lazy loading para `CookieBanner` e `FloatingPreferencesButton` para garantir visibilidade imediata e evitar falhas de carregamento.
688
- - **Prop `disableDeveloperGuidance`**: Permite desabilitar os avisos e sugestões para desenvolvedores no console.
689
- - **Prop `reloadOnChange` para `ConsentScriptLoader`**: Permite recarregar scripts de integração quando as preferências de consentimento mudam.
690
- - **Ajuste de Posição da Marca**: A marca "fornecido por LÉdipO.eti.br" agora é exibida no canto inferior direito do banner e modal.
691
-
692
- ## [0.2.6] - 2025-08-12 - ESTABILIZAÇÃO E CONFORMIDADE
693
-
694
- ### 🛡️ **Modificado**
695
-
696
- - **Gerenciamento de Estado Unificado**: O `ConsentProvider` foi refatorado para usar uma lógica centralizada (`categoryUtils.ts`) para criar e validar as preferências de consentimento. Isso elimina inconsistências e garante que o estado do consentimento sempre reflita a configuração do projeto (`ProjectCategoriesConfig`).
697
- - **Validação na Hidratação**: Ao carregar o estado de um cookie existente, as preferências agora são validadas contra a configuração atual do projeto. Categorias que não existem mais na configuração são removidas, evitando estados inválidos.
698
-
699
- ### ✨ **Adicionado**
700
-
701
- - **Metadados de Auditoria no Cookie**: O cookie de consentimento agora armazena um snapshot da configuração de categorias (`projectConfig`) que estava ativa no momento em que o consentimento foi dado. Isso fortalece a capacidade de auditoria e a conformidade com a LGPD.
702
-
703
- ### 📚 **Documentação**
704
-
705
- - **Consolidação**: A pasta `docs` foi significativamente limpa, com a remoção de múltiplos arquivos redundantes e temporários.
706
- - **README.md Melhorado**: O arquivo `README.md` principal foi completamente reescrito para seguir um padrão profissional, com estrutura clara, exemplos de código atualizados e badges de status do projeto.
707
- - **Guia de Conformidade Unificado**: O arquivo `COMPLIANCE.md` agora centraliza as informações sobre as funcionalidades de conformidade da biblioteca e as orientações para desenvolvedores, incorporando conteúdo de outros documentos que foram removidos.
708
-
709
- ### 🐛 **Corrigido**
710
-
711
- - **Consistência do Consentimento**: Corrigido o problema onde as ações `ACCEPT_ALL` e `REJECT_ALL` não consideravam a configuração completa do projeto, podendo levar a um estado de preferências incorreto.
712
-
713
- ## [0.2.2] - 2025-08-12 - SISTEMA DE ORIENTAÇÕES PARA DESENVOLVEDORES
714
-
715
- ### ✨ **Adicionado**
716
-
717
- #### **🚨 Sistema Inteligente de Orientações**
718
-
719
- - **Console de Desenvolvimento**: Avisos automáticos sobre configuração
720
- - ⚠️ **Avisos**: Detecta configuração faltante, inconsistente ou problemática
721
- - 💡 **Sugestões**: Recomendações para melhor compliance e UX
722
- - 🔧 **Tabela de Categorias**: Lista categorias ativas para orientar UI customizada
723
-
724
- - **Novos Hooks para Componentes Customizados**:
725
- - `useCategories()`: Informações completas sobre categorias ativas no projeto
726
- - `useCategoryStatus(id)`: Verifica se categoria específica está configurada
727
- - **Prevenção de Bugs**: Evita inconsistências entre configuração e UI
728
-
729
- #### **🎨 UI Dinâmica e Inteligente**
730
-
731
- - **PreferencesModal Aprimorado**: Renderiza automaticamente apenas categorias configuradas
732
- - **Componentes Adaptativos**: UI se ajusta dinamicamente à configuração do projeto
733
- - **Renderização Condicional**: Não exibe categorias não utilizadas no projeto
734
-
735
- #### **📋 Configuração Padrão Defensiva**
736
-
737
- - **Padrão Inteligente**: Quando nenhuma categoria especificada, usa `necessary + analytics`
738
- - **Orientação Automática**: Avisa sobre uso de configuração padrão em desenvolvimento
739
- - **Migração Transparente**: API de categorias funciona perfeitamente
740
-
741
- #### **🔍 Análise e Validação de Configuração**
742
-
743
- - **Função `analyzeDeveloperConfiguration()`**: Valida e orienta sobre configuração
744
- - **Constante `DEFAULT_PROJECT_CATEGORIES`**: Configuração padrão baseada em casos reais
745
- - **Detecção Automática**: Identifica muitas categorias, descrições inadequadas, etc.
746
-
747
- ### 🔧 **Modificado**
748
-
749
- #### **ConsentProvider Expandido**
750
-
751
- - **Suporte Completo**: Prop `categories` com configuração de categorias padrão e personalizadas
752
- - **Sistema de Orientações**: Log automático de orientações em modo desenvolvimento
753
- - **Configuração Moderna**: Nova estrutura da prop `categories` para maior flexibilidade
754
-
755
- #### **Componentes UI Inteligentes**
756
-
757
- - **Inicialização Segura**: `tempPreferences` inicializado corretamente com valores padrão
758
- - **Sincronização Dinâmica**: Estado local sincroniza apenas com categorias ativas
759
- - **Renderização Otimizada**: Loops baseados em `toggleableCategories` ao invés de hardcode
760
-
761
- ### 🐛 **Corrigido**
762
-
763
- - **React Warning**: Eliminado "A component is changing an uncontrolled input to be controlled"
764
- - **Estado de Input**: `PreferencesModal` inicializa switches com valores controlados
765
- - **Sincronização**: Preferências temporárias sincronizam corretamente com categorias ativas
766
- - **Performance**: Não renderiza componentes para categorias não configuradas
767
-
768
- ### 📚 **Documentação**
769
-
770
- - **Novo arquivo**: `docs/ORIENTACOES-DESENVOLVIMENTO.md` - Guia completo do sistema
771
- - **README expandido**: Exemplos práticos da nova API e componentes dinâmicos
772
- - **Exemplos de uso**: Demonstração de hooks para validação condicional de categorias
773
- - **Guias de migração**: Como usar nova API mantendo compatibilidade
774
-
775
- ### 🎯 **Benefícios da v0.2.2**
776
-
777
- #### **Para Desenvolvedores**
778
-
779
- - 🚨 **Orientação Proativa**: Console indica exatamente quais categorias implementar na UI
780
- - 🐛 **Prevenção de Bugs**: Validação automática de consistência Configuração ↔ UI
781
- - 🔧 **Flexibilidade Total**: APIs antigas funcionam, nova API oferece mais controle
782
- - 📋 **TypeScript Completo**: Tipos específicos para cada hook e configuração
783
-
784
- #### **Para Compliance LGPD**
785
-
786
- - 🎯 **Configuração Consciente**: Sistema força reflexão sobre quais dados realmente coletar
787
- - 📝 **Documentação Automática**: Orientações baseadas na configuração real do projeto
788
- - 🔍 **Auditabilidade**: Logs claros mostram decisões de configuração
789
- - 🛡️ **Conformidade Ativa**: Alinhamento dinâmico com princípios da ANPD
790
-
791
- #### **Para Usuários Finais**
792
-
793
- - ⚡ **Performance Superior**: Interface otimizada mostra apenas categorias relevantes
794
- - 🎯 **Experiência Focada**: Usuários não veem opções irrelevantes para o projeto
795
- - 🔒 **Transparência Máxima**: Descrições claras apenas de categorias realmente utilizadas
796
-
797
- ---
798
-
799
- ## [0.2.1] - 2025-08-12 - CONFORMIDADE LGPD RIGOROSA + SISTEMA DE ORIENTAÇÕES
800
-
801
- ### 🚨 **NOVO: Sistema de Orientações para Desenvolvedores**
802
-
803
- A v0.2.1 introduz um **sistema inteligente de orientações** que guia desenvolvedores sobre configuração adequada e previne inconsistências entre configuração e UI customizada.
804
-
805
- ### 🛡️ **BREAKING CHANGES - Conformidade ANPD**
806
-
807
- #### **Cookie de Consentimento Reestruturado**
808
-
809
- - **🍪 Estrutura do Cookie**: Novo formato com campos obrigatórios para compliance
810
- - `version`: Controle de migração de schema
811
- - `consentDate`: Timestamp da primeira interação
812
- - `lastUpdate`: Timestamp da última modificação
813
- - `source`: Origem da decisão (`banner`, `modal`, `programmatic`)
814
- - **Removido**: `isModalOpen` (estado de UI não deve ser persistido)
815
-
816
- #### **Sistema de Categorias por Projeto**
817
-
818
- - **🔧 Nova Prop**: `categories` no `ConsentProvider` para especificar apenas categorias ativas
819
- - **📦 Principio da Minimização**: Cookie contém apenas categorias realmente utilizadas
820
- - **⚡ Performance**: Redução significativa do tamanho do cookie
821
-
822
- ### ✨ **Adicionado**
823
-
824
- #### **Configuração de Categorias Ativas**
825
-
826
- ```tsx
827
- <ConsentProvider
828
- categories={{
829
- enabledCategories: ['analytics', 'functional'], // Apenas essas + necessary
830
- }}
831
- >
832
- ```
833
-
834
- #### **Comportamento LGPD Rigoroso**
835
-
836
- - **🚫 Banner Bloqueante**: Prop `blocking={true}` para exigir decisão explícita
837
- - **📵 Padrão "Rejeitar Todos"**: Conformidade com interpretação rigorosa da LGPD
838
- - **⏰ Timestamps Automáticos**: Auditoria completa de interações
839
-
840
- #### **Utilitários de Compliance**
841
-
842
- - **🔧 `validateCategoriesConfig()`**: Validação de configuração de categorias
843
- - **📊 `createProjectPreferences()`**: Geração de preferências baseada na config
844
- - **🧹 Migração Automática**: Cookies v0.2.0 migrados automaticamente
845
-
846
- ### 🔧 **Corrigido**
847
-
848
- - **README.md**: Badges duplicados e links quebrados corrigidos
849
- - **TypeScript**: Tipos mais rigorosos para `ConsentState` e `ConsentCookieData`
850
- - **Cookie Utils**: Separação clara entre dados persistidos e estado de UI
851
- - **Conformidade**: Remoção automática de campos não-compliance do cookie
852
-
853
- ### 📋 **Documentação**
854
-
855
- - **📋 CONFORMIDADE.md**: Guia completo de implementação conforme ANPD
856
- - **🔄 Migração**: Instruções detalhadas v0.2.0 → v0.2.1
857
- - **🏛️ Exemplos**: Casos de uso governamentais e corporativos
858
-
859
- ### ⚠️ **Migração v0.2.0 → v0.2.1**
860
-
861
- #### **Automática (Recomendada)**
862
-
863
- - Cookies existentes migrados automaticamente
864
- - API v0.2.0 mantém compatibilidade
865
-
866
- #### **Manual (Para Máxima Conformidade)**
867
-
868
- ```tsx
869
- // Especificar apenas categorias necessárias
870
- <ConsentProvider
871
- categories={{ enabledCategories: ['analytics'] }}
872
- blocking={true} // Para compliance rigorosa
873
- >
874
- ```
875
-
876
- ### 📊 **Impacto**
877
-
878
- - **📦 Bundle Size**: Mantido (~11KB ESM)
879
- - **🔄 Backward Compatibility**: 95% (quebras apenas em casos edge)
880
- - **🛡️ Compliance**: 100% LGPD/ANPD conforme Guia Orientativo
881
- - **⚡ Performance**: Cookies até 70% menores em projetos típicos
882
-
883
- ## [0.2.0] - 2025-08-12
884
-
885
- ### 🎉 MAJOR UPDATE - Adequação ANPD Completa
886
-
887
- ### ✨ Adicionado
888
-
889
- - **🍪 Categorias ANPD Expandidas**: Sistema baseado no Guia Orientativo da ANPD
890
- - `necessary`: Cookies essenciais (sempre ativos)
891
- - `analytics`: Análise e estatísticas
892
- - `functional`: Funcionalidades extras
893
- - `marketing`: Publicidade e marketing
894
- - `social`: Integração com redes sociais
895
- - `personalization`: Personalização de conteúdo
896
-
897
- - **🔧 Sistema de Categorias Flexível**
898
- - Nova interface `CategoryDefinition` para definições de categorias
899
- - Suporte a categorias essenciais vs opcionais
900
- - Prop `categories` com configuração granular
901
-
902
- - **📝 Textos ANPD Expandidos** (todos opcionais para backward compatibility)
903
- - `controllerInfo`: Identificação do controlador dos dados
904
- - `dataTypes`: Tipos de dados coletados
905
- - `thirdPartySharing`: Compartilhamento com terceiros
906
- - `userRights`: Direitos do titular dos dados
907
- - `contactInfo`: Contato do DPO/responsável
908
- - `retentionPeriod`: Prazo de armazenamento
909
- - `lawfulBasis`: Base legal (consentimento/interesse legítimo)
910
- - `transferCountries`: Países de transferência internacional
911
-
912
- - **🚀 Integrações Nativas de Scripts**
913
- - `createGoogleAnalyticsIntegration()`: GA4 configurado automaticamente
914
- - `createGoogleTagManagerIntegration()`: GTM configurado automaticamente
915
- - `createUserWayIntegration()`: UserWay para acessibilidade
916
- - `ConsentScriptLoader`: Componente para carregamento automático
917
- - `useConsentScriptLoader`: Hook para carregamento programático
918
- - Interface `ScriptIntegration` para scripts customizados
919
-
920
- - **🎛️ Sistema de Categorias Dinâmico**
921
- - Context `CategoriesProvider` separado para melhor organização
922
- - Preferências expandidas com suporte a `[key: string]: boolean`
923
- - Reducer atualizado para categorias customizadas
924
-
925
- ### 🔧 Melhorado
926
-
927
- - **Preferências padrão**: Agora incluem todas as 6 categorias ANPD
928
- - **Tipagem expandida**: `Category` type agora inclui todas as categorias
929
- - **Context arquitetura**: Separação de responsabilidades mais clara
930
- - **Documentação**: Guias detalhados para cada nova funcionalidade
931
-
932
- ### 📦 Interno
933
-
934
- - Context `CategoriesCtx` para categorias customizadas
935
- - Função `createInitialPreferences()` para inicialização dinâmica
936
- - Reducer com suporte a ações com categorias customizadas
937
- - Exports expandidos no `index.ts`
938
-
939
- ### 🎯 Compatibilidade
940
-
941
- - ✅ **100% Backward Compatible**: Todas as APIs existentes funcionam
942
- - ✅ **Opt-in Features**: Novas funcionalidades são opcionais
943
- - ✅ **Progressive Enhancement**: Funciona do simples ao complexo
944
-
945
- ### 📊 Bundle Size
946
-
947
- - **Antes**: 6.65 KB ESM + 14.08 KB chunk
948
- - **Agora**: 10.84 KB ESM + 15.90 KB chunk
949
- - **Crescimento**: +4.19 KB (+64% de funcionalidades)
950
-
951
- ## [0.1.3] - 2025-08-09
952
-
953
- ### 🎉 Adicionado
954
-
955
- - **Banner bloqueante**: Nova prop `blocking` no `CookieBanner` (padrão: `true`)
956
- - Quando `blocking=true`, exibe overlay escuro que impede interação até decisão
957
- - Quando `blocking=false`, usa o comportamento Snackbar não intrusivo
958
- - **Sistema de temas**: Suporte completo a temas Material-UI
959
- - Tema padrão institucional (`defaultConsentTheme`) baseado nas cores da ANPD
960
- - Prop `theme` no `ConsentProvider` para temas customizados
961
- - ThemeProvider automático para todos os componentes filhos
962
- - **Modal de preferências funcional**:
963
- - Estado `isModalOpen` agora conectado ao contexto
964
- - Botão "Preferências" no banner abre corretamente o modal
965
- - Hook `useConsent()` expõe `isModalOpen`
966
- - **Script loader aprimorado**:
967
- - Nova função `loadConditionalScript()` que aguarda consentimento
968
- - Callbacks com delay de 150ms para permitir animações de fechamento
969
- - Melhor integração com `ConsentGate`
970
- - **Hook adicional**: `useConsentTexts()` para acessar textos customizados
971
-
972
- ### 🔧 Corrigido
973
-
974
- - **Textos customizados**: Props `texts` do `ConsentProvider` agora funcionam corretamente
975
- - Componentes `CookieBanner` e `PreferencesModal` usam textos do contexto
976
- - Remoção da dependência direta de `defaultTexts`
977
- - **Estado do modal**: `isModalOpen` integrado ao reducer e hooks
978
- - **Conexão de ações**: Todas as ações (`openPreferences`, `closePreferences`, etc.) funcionais
979
-
980
- ### 📦 Interno
981
-
982
- - Context `TextsCtx` para disponibilizar textos customizados
983
- - Reducer atualizado com estado `isModalOpen`
984
- - ThemeProvider integrado ao ConsentProvider
985
- - Delays nos callbacks para melhor UX
986
-
987
- ### 🎨 Design
988
-
989
- - Banner bloqueante com overlay `rgba(0, 0, 0, 0.5)`
990
- - zIndex 1300 (acima de modais MUI)
991
- - Tema padrão com bordas arredondadas e sombras suaves
992
- - Transições suaves para melhor experiência visual
993
-
994
- ## [0.1.0] - 2025-08-09
995
-
996
- ### 🎉 Lançamento Inicial
997
-
998
- - **Contexto de consentimento** com `ConsentProvider`
999
- - **Banner básico** com botões Aceitar/Recusar/Preferências
1000
- - **Modal de preferências** para categorias analytics e marketing
1001
- - **Hook `useConsent()`** para interação com estado
1002
- - **Componente `ConsentGate`** para renderização condicional
1003
- - **Utilitários**:
1004
- - `loadScript()` para carregamento dinâmico de scripts
1005
- - `cookieUtils` para persistência
1006
- - **Suporte SSR** via prop `initialState`
1007
- - **Acessibilidade** com ARIA e navegação por teclado
1008
- - **TypeScript** completo com tipos exportados
1009
-
1010
- ### 🏗️ Arquitetura
1011
-
1012
- - Context API com reducer pattern
1013
- - Cookies seguros (`SameSite=Lax`, `secure=true`)
1014
- - API pública em inglês, UI padrão em português
1015
- - Zero dependências extras (apenas `js-cookie`)
273
+ - ConsentProvider, hooks, componentes básicos
274
+ - Modal de preferências
275
+ - Utilitários de cookie e script loading
276
+ - Suporte SSR inicial
1016
277
 
1017
278
  ---
1018
279
 
1019
- ### 🔮 Futuro (v0.4.0+)
1020
-
1021
- - [ ] Modal detalhado com lista de cookies
1022
- - [ ] Base legal por categoria
1023
- - [ ] Relatórios de compliance
1024
- - [ ] Templates por setor
1025
-
1026
- ## [0.4.2] - 06/10/2025 — Quickstarts + SSR Guide + Validação (DEV)
1027
-
1028
- ### ✨ Quickstarts executáveis
1029
-
1030
- - Next.js (App Router) e Vite com Consent Mode v2 integrado e bloqueio real de scripts (GTM/GA4 não carregam antes do consentimento).
1031
- - Seções no QUICKSTART.md com passos copy‑paste e validação do comportamento esperado.
1032
-
1033
- ### 🧱 Guia SSR/Next.js (App Router)
1034
-
1035
- - Padrões seguros para evitar hydration mismatch: wrapper client‑only com `'use client'` e `dynamic({ ssr: false })`, efeitos que acessam `window/document` apenas no cliente.
1036
- - Ordem de provedores/estilos (Emotion/MUI) e z-index/portals documentados (overlay 1299, modais ≥ 1300).
1037
-
1038
- ### ✅ Validação de configuração do ConsentProvider (DEV)
1039
-
1040
- - Validação com Zod em desenvolvimento (import dinâmico) e sanitização leve em produção.
1041
- - Mensagens amigáveis: alerta quando `categories` não é fornecida; remove `'necessary'` de `enabledCategories`; detecta duplicidades/valores inválidos; valida `customCategories`.
1042
- - Testes cobrindo casos inválidos e asserts de mensagens.
1043
-
1044
- ### 📚 Categorias — definição, uso e exemplos
1045
-
1046
- - Fonte única de verdade: `ConsentProvider.categories`. UI, hooks e integrações leem a mesma definição.
1047
- - Esclarecimento: apenas “necessários” é obrigatório; demais categorias são opcionais conforme o negócio.
1048
- - Exemplos mínimo (somente necessários) e completo (analytics/marketing/functional).
1049
-
1050
- ### 🔧 Dependências
1051
-
1052
- - Adicionado: `zod@^3.23.8` (usado somente em DEV via import dinâmico; não impacta o bundle de produção).
1053
-
1054
- ### 🧩 Sem breaking changes
1055
-
1056
- - Alterações são compatíveis; padrões seguros preservados.
1057
-
1058
- ## [0.5.0] - 25/10/2025 — Modularização inicial do workspace
1059
-
1060
- ### 🧱 Estrutura modular
1061
-
1062
- - Repositório convertido em workspace PNPM com três pacotes: `@react-lgpd-consent/core`, `@react-lgpd-consent/mui` e `react-lgpd-consent`.
1063
- - Pacote agregador passa a construir entradas adicionais (`core` e `mui`) expondo subpath exports oficiais.
1064
-
1065
- ### 🎨 Camada MUI dedicada
1066
-
1067
- - Publicação inicial de `@react-lgpd-consent/mui` como _proxy_ dos componentes padrão.
1068
- - Metadados de peer dependencies ajustados para reforçar que Material-UI é opcional (requerido apenas para a camada visual).
1069
-
1070
- ### 🧰 Ferramentas & DX
1071
-
1072
- - Scripts de lint/test/build convertidos para `pnpm --filter react-lgpd-consent <comando>`.
1073
- - Jest e TypeDoc atualizados para apontar para `packages/core` e `packages/react-lgpd-consent`.
1074
- - Documentação (README, QUICKSTART, DEVELOPMENT) revisada para explicar a nova arquitetura e o processo de migração gradual.
280
+ O formato deste changelog é baseado em [Keep a Changelog](https://keepachangelog.com/pt-BR/1.0.0/),
281
+ e este projeto adere ao [Semantic Versioning](https://semver.org/lang/pt-BR/).