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