react-lgpd-consent 0.6.4 → 0.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,1074 +1,490 @@
1
1
  # Changelog
2
2
 
3
- ## 0.6.3
4
-
5
- ### Patch Changes
6
-
7
- - [#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.
8
-
9
- - Updated dependencies [[`2a54bae`](https://github.com/lucianoedipo/react-lgpd-consent/commit/2a54bae6bbbe068b75e489eae72aa77705353d1e)]:
10
- - @react-lgpd-consent/core@0.6.3
11
- - @react-lgpd-consent/mui@0.6.3
12
-
13
- ## 0.6.1
3
+ ## 0.7.1
14
4
 
15
5
  ### Patch Changes
16
6
 
17
- - [#105](https://github.com/lucianoedipo/react-lgpd-consent/pull/105) [`1deb3bb`](https://github.com/lucianoedipo/react-lgpd-consent/commit/1deb3bb56853165f7ec231e73d7b1d271e51b8f1) Thanks [@lucianoedipo](https://github.com/lucianoedipo)! - chore: sincronizar pnpm-lock.yaml com versões bumpeadas
18
-
19
- - Updated dependencies [[`1deb3bb`](https://github.com/lucianoedipo/react-lgpd-consent/commit/1deb3bb56853165f7ec231e73d7b1d271e51b8f1)]:
20
- - @react-lgpd-consent/core@0.6.1
21
- - @react-lgpd-consent/mui@0.6.1
22
-
23
- ## 0.6.0
24
-
25
- ### Minor Changes
26
-
27
- - [#103](https://github.com/lucianoedipo/react-lgpd-consent/pull/103) [`4c9ebf2`](https://github.com/lucianoedipo/react-lgpd-consent/commit/4c9ebf231ff58168294f2fde405298b7087016ca) Thanks [@lucianoedipo](https://github.com/lucianoedipo)! - feat: adicionar diagnósticos de peer dependencies e sistema de troubleshooting
28
- - ✨ Novo sistema de diagnóstico automático para peer deps
29
- - 🔍 Detecta múltiplas instâncias de React (causa "Invalid hook call")
30
- - 📋 Verifica versões de React (18-19) e MUI (5-7)
31
- - 📖 Nova página TROUBLESHOOTING.md com soluções detalhadas
32
- - 🔧 Mensagens acionáveis no console em modo desenvolvimento
33
- - 🚀 Configuração de Turborepo para builds otimizados
34
- - 📦 Configuração de Changesets para versionamento automatizado
35
-
36
- ### Patch Changes
37
-
38
- - Updated dependencies [[`4c9ebf2`](https://github.com/lucianoedipo/react-lgpd-consent/commit/4c9ebf231ff58168294f2fde405298b7087016ca)]:
39
- - @react-lgpd-consent/core@0.6.0
40
- - @react-lgpd-consent/mui@0.6.0
41
-
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
- ---
186
-
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.
7
+ - [#133](https://github.com/lucianoedipo/react-lgpd-consent/pull/133) [`33bc0eb`](https://github.com/lucianoedipo/react-lgpd-consent/commit/33bc0ebcb40ce65c70b02668d3c0a97efb1854f1) Thanks [@lucianoedipo](https://github.com/lucianoedipo)! - # 🧩 Fundamento Crítico de Consentimento — SUPER TASK v0.7.1
485
8
 
486
- ## [0.3.7] - 2025-09-08 - Testes de UI e carregamento de scripts
9
+ **Persistência + Loader + Consent Mode v2**
487
10
 
488
- ### 🧪 Novos testes e cobertura
11
+ Esta release estabelece o **núcleo legal, técnico e funcional** da biblioteca react-lgpd-consent, garantindo um contrato sólido, seguro e auditável para uso institucional e governamental.
489
12
 
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'`)
13
+ ***
499
14
 
500
- ### 🔧 Interno
15
+ ## 🔹 Bloco A — Persistência de Consentimento por Cookie
501
16
 
502
- - Aumento da estabilidade para refatorações futuras na camada de UI e utilitários de carregamento.
17
+ ### API Consolidada de Persistência
18
+
19
+ Nova API completa no `ConsentProvider`:
20
+
21
+ ```typescript
22
+ <ConsentProvider
23
+ cookie={{
24
+ name: 'lgpd-consent',
25
+ domain: '.example.com', // Compartilha entre subdomínios
26
+ path: '/',
27
+ sameSite: 'Lax', // Default seguro
28
+ secure: true, // Auto em HTTPS
29
+ maxAge: 31536000, // Segundos (substitui maxAgeDays)
30
+ }}
31
+ >
32
+ ```
33
+
34
+ **Regras Implementadas:**
35
+ - ✅ Defaults seguros: `SameSite=Lax`, `Secure=true` em HTTPS
36
+ - ✅ Categoria `necessary` **sempre forçada como true**
37
+ - ✅ Nenhuma gravação de cookie durante SSR
38
+ - ✅ Suporte completo a subdomínios via `domain`
39
+ - ✅ Nova opção `maxAge` (segundos, padrão moderno)
40
+ - ✅ Opção `maxAgeDays` deprecated mas mantida para compatibilidade
41
+
42
+ **Ambientes Suportados:**
43
+ - ✅ `localhost` (desenvolvimento)
44
+ - ✅ `dev` / `staging` (domínios customizados)
45
+ - ✅ `production` (HTTPS obrigatório)
46
+ - ✅ Comportamento **independente de NODE_ENV**
47
+
48
+ ***
49
+
50
+ ## 🔹 Bloco B — ConsentScriptLoader com Bloqueio Real
51
+
52
+ ### 🚫 Contrato de Bloqueio Garantido
53
+
54
+ > **Nenhum script não necessário executa antes do consentimento correspondente.**
55
+
56
+ ### ✨ Sistema de Fila e Priorização
57
+
58
+ Implementado `ConsentScriptLoader` com:
59
+
60
+ ```typescript
61
+ registerScript({
62
+ id: 'google-analytics',
63
+ category: 'analytics',
64
+ priority: 1, // Ordem de execução
65
+ execute: () => {
66
+ // Seu script aqui
67
+ },
68
+ onConsentUpdate: (granted) => {
69
+ // Reagir a mudanças de consentimento
70
+ },
71
+ })
72
+ ```
73
+
74
+ **Recursos Implementados:**
75
+ - ✅ **Fila interna de execução** com ordenação por:
76
+ - 1. Categoria (`necessary` → `analytics` → `marketing`, etc.)
77
+ - 2. Prioridade (numérica)
78
+ - 3. Timestamp (ordem de registro)
79
+ - ✅ Scripts `necessary` executam **imediatamente**
80
+ - ✅ Scripts de outras categorias aguardam **consentimento explícito**
81
+ - ✅ Suporte a `onConsentUpdate` para reconfiguração dinâmica
82
+ - ✅ Snapshot de consentimento para scripts que precisam do estado atual
83
+ - ✅ **Otimização anti-duplicação**: integrações não são reexecutadas a cada render quando criadas inline (ex.: `integrations={[createGoogleAnalyticsIntegration(...)]}`). Sistema mantém hash estrutural para detectar mudanças reais e prevenir múltiplas inicializações do mesmo script.
503
84
 
504
- ## [0.3.6] - 2025-08-28 - Correção crítica: Herança de ThemeProvider
85
+ **Observabilidade em DEV:**
86
+ - ✅ Logs detalhados de ordem de execução
87
+ - ✅ Indicação clara de categoria liberada
88
+ - ✅ Rastreamento de status de cada script
89
+ - ⚠️ **Silencioso em produção** (performance otimizada)
90
+
91
+ ***
505
92
 
506
- ### Novas funcionalidades e melhorias
93
+ ## 🔹 Bloco C Integração Nativa Google Consent Mode v2
507
94
 
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.
95
+ ### 🎯 Implementação Automática
511
96
 
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.
97
+ **Zero configuração manual necessária!**
515
98
 
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.
99
+ ```typescript
100
+ import { createGoogleAnalyticsIntegration } from '@react-lgpd-consent/core'
520
101
 
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.
102
+ const ga4 = createGoogleAnalyticsIntegration({
103
+ measurementId: 'G-XXXXXXXXXX'
104
+ })
105
+
106
+ <ConsentScriptLoader integrations={[ga4]} />
107
+ ```
108
+
109
+ **O que a biblioteca faz automaticamente:**
110
+ 1. ✅ Inicializa `dataLayer` se não existir
111
+ 2. ✅ Define `gtag('consent', 'default', denied)` **antes** de qualquer tag
112
+ 3. ✅ Mapeia categorias corretamente:
113
+ - `analytics` → `analytics_storage`
114
+ - `marketing` → `ad_storage`, `ad_user_data`, `ad_personalization`
115
+ 4. ✅ Envia `gtag('consent', 'update')` quando usuário escolhe preferências
116
+ 5. ✅ Dispara eventos de ciclo de vida:
117
+ ```javascript
118
+ { event: 'consent_initialized' }
119
+ { event: 'consent_updated', preferences: {...} }
120
+ ```
121
+
122
+ **Factories Implementadas:**
123
+ - ✅ `createGoogleAnalyticsIntegration` (GA4)
124
+ - ✅ `createGoogleTagManagerIntegration` (GTM)
125
+ - ✅ Suporte a `bootstrap()` para inicialização pré-consentimento
126
+ - ✅ Suporte a `onConsentUpdate()` para reconfiguração dinâmica
127
+
128
+ ### 🔒 Ordem de Inicialização Segura
129
+
130
+ Fluxo garantido pela implementação:
131
+
132
+ ```
133
+ 1. dataLayer criado
134
+ 2. gtag('consent', 'default', denied)
135
+ 3. Loader bloqueia tags
136
+ 4. Usuário consente
137
+ 5. gtag('consent', 'update', granted/denied)
138
+ 6. Tags disparam conforme consentimento
139
+ ```
524
140
 
525
- ### 🐛 Correções importantes
141
+ ### Compatibilidade Next.js (SSR)
142
+ - ✅ Nenhum acesso a `window` fora de `useEffect`
143
+ - ✅ App Router (Next.js 13+)
144
+ - ✅ Pages Router (Next.js 12+)
145
+ - ✅ **Zero hydration mismatch**
146
+ - ✅ Estratégia de renderização: `client-only` quando necessário
526
147
 
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.
148
+ ***
530
149
 
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).
150
+ ## 🆕 Novas APIs Públicas
533
151
 
534
- ### 🧪 Testes e estabilidade
152
+ ### Core Package (`@react-lgpd-consent/core`):
153
+
154
+ ```typescript
155
+ // Registro de scripts
156
+ registerScript(config: RegisteredScript): void
157
+
158
+ // Factories de integrações
159
+ createGoogleAnalyticsIntegration(config): ScriptIntegration
160
+ createGoogleTagManagerIntegration(config): ScriptIntegration
161
+
162
+ // Utilitários de cookie
163
+ readConsentCookie(name?: string): ConsentState | null
164
+ writeConsentCookie(state: ConsentState, options?: CookieOptions): void
165
+
166
+ // Novos tipos
167
+ type RegisteredScript = { ... }
168
+ type ScriptIntegration = { ... }
169
+ interface LoadScriptOptions = { ... }
170
+ ```
535
171
 
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.
172
+ ***
539
173
 
540
- ### 📚 Documentação
174
+ ## 📚 Documentação Atualizada
175
+ - ✅ **API.md** - Novas APIs de `registerScript` e Consent Mode v2
176
+ - ✅ **INTEGRACOES.md** - Guias completos de GA4, GTM, Facebook Pixel
177
+ - ✅ **MIGRATION.md** - Guia de migração v0.7.0 → v0.7.1
178
+ - ✅ **SUPER_TASK_VALIDATION.md** - Relatório técnico de validação completo
541
179
 
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`.
180
+ ***
545
181
 
546
- ### 🛠️ Correção crítica
182
+ ## 🔄 Breaking Changes
547
183
 
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`.
184
+ **Nenhum!** Esta release é 100% backward-compatible:
185
+ - Opção `maxAgeDays` deprecated mas funcional
186
+ - Comportamento padrão preservado
187
+ - APIs antigas continuam funcionando
188
+ - ✅ Migração gradual suportada
552
189
 
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.
190
+ ***
554
191
 
555
- - Limpeza de arquivos redundantes e ajustes de ESLint/preview para Storybook.
192
+ ## 🎯 Melhorias Complementares
556
193
 
557
- ### Commits representativos
194
+ ### Sistema de i18n para Diagnósticos
558
195
 
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`
196
+ Sistema básico de internacionalização para mensagens de peer dependencies:
197
+ - Suporte a pt-BR (padrão) e en
198
+ - API para customização: `setPeerDepsLocale()`, `setPeerDepsMessages()`
199
+ - Mensagens extraídas para constantes (melhor manutenibilidade)
564
200
 
565
- ## [0.3.1] - 2025-08-13 - CORREÇÕES DE PRODUÇÃO E MELHORIAS DE COMPATIBILIDADE
201
+ ### Refatorações e Otimizações
202
+ - ✅ Strings de mensagens extraídas para constantes
203
+ - ✅ Separação de concerns (lógica vs conteúdo)
204
+ - ✅ Type safety aprimorado em toda API
205
+ - ✅ Performance otimizada (sem logs em produção)
206
+ - ✅ **Fix crítico**: Prevenção de reexecução de integrações a cada render quando `integrations` prop muda referência (inline array). Sistema agora usa hash estrutural para detectar mudanças reais e manter scripts já registrados estáveis.
566
207
 
567
- ### 🛡️ **Corrigido - Critical Production Fixes**
208
+ - Updated dependencies [[`33bc0eb`](https://github.com/lucianoedipo/react-lgpd-consent/commit/33bc0ebcb40ce65c70b02668d3c0a97efb1854f1)]:
209
+ - @react-lgpd-consent/core@0.7.1
210
+ - @react-lgpd-consent/mui@0.7.1
568
211
 
569
- #### A) Compatibilidade com ThemeProvider
212
+ ## 0.7.0
570
213
 
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
574
-
575
- #### B) API do FloatingPreferencesButton
576
-
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
583
-
584
- #### C) Exports de TypeScript Ausentes
585
-
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
591
-
592
- ### ✨ **Novas Funcionalidades**
593
-
594
- #### Sistema de Debug e Troubleshooting
595
-
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
605
-
606
- #### API Melhorada para Controle Programático
607
-
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
611
-
612
- ### 📚 **Documentação**
613
-
614
- #### Guia de API v0.3.1+
615
-
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)
620
-
621
- #### Exemplos de Implementação
622
-
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
627
-
628
- ### 🔧 **Melhorias Técnicas**
629
-
630
- #### Robustez e Estabilidade
631
-
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+
636
-
637
- #### Developer Experience
638
-
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
643
-
644
- ### 🛠️ **Contexto de Correção**
645
-
646
- Estas correções abordam problemas identificados em produção com:
647
-
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
652
-
653
- ### 📋 **Migration from v0.3.0**
654
-
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**
214
+ ### Minor Changes
736
215
 
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
216
+ - [#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
217
+
218
+ 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)
219
+
220
+ ## 🧹 Correções de Lint e Code Quality
221
+
222
+ ### Migração para APIs Modernas
223
+ - **globalThis**: Convertidos ~50+ usos de `window` e `global` para `globalThis.window` e `globalThis` (compatibilidade SSR/universal)
224
+ - **String.replaceAll()**: Migrado de `replace()` com regex global para `replaceAll()` (ES2021)
225
+ - **Object.hasOwn()**: Migrado de `Object.prototype.hasOwnProperty.call()` para `Object.hasOwn()` (ES2022)
226
+ - **Number.parseInt()**: Padronizado uso de `Number.parseInt()` em vez de `parseInt()` global
227
+
228
+ ### TypeScript Configuration
229
+ - Adicionado `ES2021.String` ao lib do tsconfig para suportar `String.replaceAll()`
230
+ - Adicionado `ES2022.Object` ao lib do tsconfig para suportar `Object.hasOwn()`
231
+ - Mantida compatibilidade com target `ES2020`
232
+
233
+ > **ℹ️ Atenção à Compatibilidade com Browsers**
234
+ >
235
+ > 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.
236
+
237
+ ### Melhorias de Código
238
+ - **cookieDiscovery.ts**: Função `matchPattern` movida para outer scope (evita recriação)
239
+ - **validation.ts**: Adicionado warning quando prop `categories` não é fornecida
240
+ - **Condições**: Invertidas condições negadas para melhor legibilidade
241
+ - **Type Safety**: Correções de type assertions em testes
242
+
243
+ ## 🧪 Aumento Significativo de Cobertura de Testes
244
+
245
+ ### Cobertura Geral: 94.82% → 95.46% (+0.64%)
246
+
247
+ | Arquivo | Antes | Depois | Melhoria |
248
+ | ---------------------- | ------ | ----------- | -------- |
249
+ | **theme.ts** | 83.33% | **100%** ✅ | +16.67% |
250
+ | **cookieDiscovery.ts** | 88.13% | **96.61%** | +8.48% |
251
+ | **peerDepsCheck.ts** | 74.19% | **80.64%** | +6.45% |
252
+ | **validation.ts** | 96.87% | **98.24%** | +1.37% |
253
+
254
+ ### Novos Testes Adicionados (+33 testes: 318 → 351)
255
+
256
+ #### peerDepsCheck.ts
257
+ - Testes para detecção de múltiplas instâncias React via DevTools hook
258
+ - Testes para verificação de versões React no limite inferior/superior do range
259
+ - Testes para logging de erros e warnings quando `logWarnings=true`
260
+ - Cobertura de edge cases de versão semver complexa
261
+
262
+ #### dataLayerEvents.ts
263
+ - Testes para `ensureDataLayer` criar dataLayer quando undefined
264
+ - Testes para preservação de eventos existentes no dataLayer
265
+ - Testes para origins programmatic/reset
266
+ - Testes para previousCategories vazias/undefined
267
+ - Testes de SSR safety (window parcialmente definido)
268
+ - Testes para falha silenciosa de dataLayer.push
269
+
270
+ #### cookieDiscovery.ts
271
+ - Testes para uso de cookies descobertos globalmente (`__LGPD_DISCOVERED_COOKIES__`)
272
+ - Testes para `registerOverrides=true` chamando `setCookieCatalogOverrides`
273
+ - Testes para cookies sem nome ou duplicados
274
+ - Testes para match de padrões wildcard
275
+
276
+ #### cookieUtils.ts
277
+ - Testes para JSON malformado e objetos vazios
278
+ - Testes para `buildConsentStorageKey` com caracteres especiais
279
+ - Testes para `createConsentAuditEntry` com estado mínimo
280
+ - Testes para uso de nomes customizados em `removeConsentCookie`
281
+
282
+ #### theme.ts (100% coverage)
283
+ - Testes completos para palette, typography e component overrides
284
+ - Testes para button contained hover shadows
285
+ - Testes para Paper e Dialog border radius
286
+ - Testes para função deprecada `defaultConsentTheme()`
287
+ - Verificação de novas instâncias a cada chamada
288
+
289
+ ## 📚 Documentação
290
+
291
+ ### DEVELOPMENT.md
292
+ - Adicionada seção **"Cobertura de Testes"** com tabela de métricas por módulo
293
+ - Comando para rodar testes com cobertura: `pnpm test:coverage`
294
+ - Tabela detalhada mostrando Statements/Branches/Functions/Lines por pacote
295
+
296
+ ### TypeDoc
297
+ - Documentação regenerada com todas as APIs atualizadas
298
+ - 15 warnings aceitáveis sobre links relativos para pacotes do monorepo
299
+
300
+ ## ✅ Validação
301
+ - ✅ **type-check**: Todos os tipos válidos (ES2021/ES2022 APIs suportadas)
302
+ - ✅ **lint**: Código limpo sem erros
303
+ - ✅ **test**: 351/351 testes passando (100%)
304
+ - ✅ **build**: Build limpo de todos os pacotes
305
+ - ✅ **docs**: TypeDoc gerado com sucesso
306
+
307
+ ## 🔧 Arquivos Modificados
308
+
309
+ ### Core Package
310
+ - `src/utils/scriptIntegrations.ts`: globalThis, Date.now()
311
+ - `src/utils/peerDepsCheck.ts`: globalThis, Number.parseInt()
312
+ - `src/utils/dataLayerEvents.ts`: globalThis, ??= operator
313
+ - `src/utils/cookieUtils.ts`: replaceAll(), globalThis, condição invertida
314
+ - `src/utils/cookieDiscovery.ts`: matchPattern outer scope
315
+ - `src/utils/validation.ts`: warning categories undefined
316
+ - `src/context/ConsentContext.tsx`: Object.hasOwn(), state deps
317
+ - `src/context/__tests__/CategoriesContext.test.tsx`: globalThis
318
+ - `__tests__/*`: +25 novos testes
319
+
320
+ ### MUI Package
321
+ - `src/utils/theme.ts`: 100% coverage
322
+ - `src/utils/__tests__/theme.test.ts`: +8 novos testes
323
+
324
+ ### Configuration
325
+ - `tsconfig.base.json`: ES2021.String, ES2022.Object no lib
326
+
327
+ ### Documentation
328
+ - `DEVELOPMENT.md`: seção de cobertura de testes
329
+
330
+ ***
331
+
332
+ **Breaking Changes:** Nenhuma
333
+ **Migration Required:** Não
334
+
335
+ Esta release foca em qualidade de código, testes robustos e aderência a padrões modernos do JavaScript/TypeScript.
740
336
 
741
- #### **🔍 Análise e Validação de Configuração**
337
+ ### Patch Changes
742
338
 
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.
339
+ - Updated dependencies [[`7669c4f`](https://github.com/lucianoedipo/react-lgpd-consent/commit/7669c4fba84b5cfea8f7da8ab65468110d3e77f7)]:
340
+ - @react-lgpd-consent/core@0.7.0
341
+ - @react-lgpd-consent/mui@0.7.0
746
342
 
747
- ### 🔧 **Modificado**
343
+ ## 0.6.3
748
344
 
749
- #### **ConsentProvider Expandido**
345
+ ### Patch Changes
750
346
 
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
347
+ - [#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.
754
348
 
755
- #### **Componentes UI Inteligentes**
349
+ - Updated dependencies [[`2a54bae`](https://github.com/lucianoedipo/react-lgpd-consent/commit/2a54bae6bbbe068b75e489eae72aa77705353d1e)]:
350
+ - @react-lgpd-consent/core@0.6.3
351
+ - @react-lgpd-consent/mui@0.6.3
756
352
 
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
353
+ ## 0.6.2
760
354
 
761
- ### 🐛 **Corrigido**
355
+ ### Patch Changes
762
356
 
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
357
+ - [#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
358
+ - Implementado registro global `LOADING_SCRIPTS` em `scriptLoader.ts` para prevenir injeções duplicadas de scripts durante double-invoking de efeitos
359
+ - Adicionado `setTimeout` com cleanup adequado em `ConsentScriptLoader.tsx` para prevenir race conditions
360
+ - Scripts agora carregam apenas uma vez mesmo em desenvolvimento com StrictMode ativo
361
+ - Função `loadScript` é idempotente: múltiplas chamadas simultâneas retornam a mesma Promise
362
+ - **Correção crítica**: `loadScript` agora aguarda dinamicamente o consentimento em vez de rejeitar imediatamente, permitindo que scripts carreguem quando preferências mudarem
363
+ - Cleanup automático do registro ao completar/falhar carregamento
364
+ - Adicionados testes extensivos: `ConsentScriptLoader.strictmode.test.tsx` e `scriptLoader.strictmode.test.ts`
365
+ - Documentação completa em `docs/REACT19-STRICTMODE.md`
366
+ - Todos os 302 testes passando, incluindo 5 novos testes de StrictMode
367
+
368
+ **Breaking Changes:** Nenhuma - totalmente retrocompatível
369
+
370
+ - Updated dependencies [[`b51e1f8`](https://github.com/lucianoedipo/react-lgpd-consent/commit/b51e1f8dcac35907e3a30471135da14160c95213)]:
371
+ - @react-lgpd-consent/core@0.6.2
372
+ - @react-lgpd-consent/mui@0.6.1
767
373
 
768
- ### 📚 **Documentação**
374
+ ## 0.6.1
769
375
 
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
376
+ ### Patch Changes
774
377
 
775
- ### 🎯 **Benefícios da v0.2.2**
378
+ - [#105](https://github.com/lucianoedipo/react-lgpd-consent/pull/105) [`1deb3bb`](https://github.com/lucianoedipo/react-lgpd-consent/commit/1deb3bb56853165f7ec231e73d7b1d271e51b8f1) Thanks [@lucianoedipo](https://github.com/lucianoedipo)! - chore: sincronizar pnpm-lock.yaml com versões bumpeadas
776
379
 
777
- #### **Para Desenvolvedores**
380
+ - Updated dependencies [[`1deb3bb`](https://github.com/lucianoedipo/react-lgpd-consent/commit/1deb3bb56853165f7ec231e73d7b1d271e51b8f1)]:
381
+ - @react-lgpd-consent/core@0.6.1
382
+ - @react-lgpd-consent/mui@0.6.1
778
383
 
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
384
+ ## 0.6.0
783
385
 
784
- #### **Para Compliance LGPD**
386
+ ### Minor Changes
785
387
 
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
388
+ - [#103](https://github.com/lucianoedipo/react-lgpd-consent/pull/103) [`4c9ebf2`](https://github.com/lucianoedipo/react-lgpd-consent/commit/4c9ebf231ff58168294f2fde405298b7087016ca) Thanks [@lucianoedipo](https://github.com/lucianoedipo)! - feat: adicionar diagnósticos de peer dependencies e sistema de troubleshooting
389
+ - Novo sistema de diagnóstico automático para peer deps
390
+ - 🔍 Detecta múltiplas instâncias de React (causa "Invalid hook call")
391
+ - 📋 Verifica versões de React (18-19) e MUI (5-7)
392
+ - 📖 Nova página TROUBLESHOOTING.md com soluções detalhadas
393
+ - 🔧 Mensagens acionáveis no console em modo desenvolvimento
394
+ - 🚀 Configuração de Turborepo para builds otimizados
395
+ - 📦 Configuração de Changesets para versionamento automatizado
790
396
 
791
- #### **Para Usuários Finais**
397
+ ### Patch Changes
792
398
 
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
399
+ - Updated dependencies [[`4c9ebf2`](https://github.com/lucianoedipo/react-lgpd-consent/commit/4c9ebf231ff58168294f2fde405298b7087016ca)]:
400
+ - @react-lgpd-consent/core@0.6.0
401
+ - @react-lgpd-consent/mui@0.6.0
796
402
 
797
403
  ---
798
404
 
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.
405
+ ## Versões Anteriores (< 0.6.0)
804
406
 
805
- ### 🛡️ **BREAKING CHANGES - Conformidade ANPD**
407
+ Para histórico completo detalhado de todas as versões, consulte:
806
408
 
807
- #### **Cookie de Consentimento Reestruturado**
409
+ - [Releases no GitHub](https://github.com/lucianoedipo/react-lgpd-consent/releases)
410
+ - [Git tags](https://github.com/lucianoedipo/react-lgpd-consent/tags)
808
411
 
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)
412
+ ### Resumo de Marcos Importantes:
815
413
 
816
- #### **Sistema de Categorias por Projeto**
414
+ **v0.5.0** (25/10/2025) - **Arquitetura Modular**
817
415
 
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
416
+ - Separação em 3 pacotes: `@react-lgpd-consent/core`, `@react-lgpd-consent/mui`, `react-lgpd-consent`
417
+ - Tree-shaking eficiente e suporte headless
418
+ - **Breaking Change**: Removida prop `theme` do ConsentProvider
821
419
 
822
- ### **Adicionado**
420
+ **v0.4.5** (25/10/2025) - **DataLayer Events**
823
421
 
824
- #### **Configuração de Categorias Ativas**
422
+ - Eventos padronizados para Google Tag Manager (`consent_initialized`, `consent_updated`)
423
+ - API pública para eventos customizados
424
+ - Rastreamento de origem de mudanças de consentimento
825
425
 
826
- ```tsx
827
- <ConsentProvider
828
- categories={{
829
- enabledCategories: ['analytics', 'functional'], // Apenas essas + necessary
830
- }}
831
- >
832
- ```
426
+ **v0.4.4** (06/10/2025) - **CI/CD e Codecov**
833
427
 
834
- #### **Comportamento LGPD Rigoroso**
428
+ - Correção de workflow de publicação npm
429
+ - Integração com Codecov para coverage reports
835
430
 
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
431
+ **v0.4.3** (06/10/2025) - **Performance**
839
432
 
840
- #### **Utilitários de Compliance**
433
+ - React.memo em componentes puros
434
+ - Logger otimizado para produção
435
+ - Lazy loading de FloatingPreferencesButton
436
+ - Testes de acessibilidade com jest-axe
841
437
 
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
438
+ **v0.4.2** (06/10/2025) - **SSR e Validação**
845
439
 
846
- ### 🔧 **Corrigido**
440
+ - Quickstarts executáveis (Next.js App Router, Vite)
441
+ - Guia completo SSR/Next.js
442
+ - Validação de configuração com Zod (desenvolvimento)
847
443
 
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
444
+ **v0.4.1** (21/09/2025) - **Expansão de Integrações**
852
445
 
853
- ### 📋 **Documentação**
446
+ - 9 integrações nativas: GA4, GTM, UserWay, Facebook Pixel, Hotjar, Mixpanel, Clarity, Intercom, Zendesk
447
+ - Sistema completo de design tokens (200+ pontos de customização)
448
+ - Templates de texto: eCommerce, SaaS, Governo, Multilingual
449
+ - **Breaking Change**: `setPreference` e `ScriptIntegration.category` aceitam `string` (suporte a categorias customizadas)
854
450
 
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
451
+ **v0.4.0** (09/09/2025) - **Categorias Customizadas**
858
452
 
859
- ### ⚠️ **Migração v0.2.0 v0.2.1**
453
+ - Suporte a `customCategories` no ConsentProvider
454
+ - Integração completa com UI (modal de preferências)
860
455
 
861
- #### **Automática (Recomendada)**
456
+ **v0.3.7** (08/09/2025) - **Testes de UI**
862
457
 
863
- - Cookies existentes migrados automaticamente
864
- - API v0.2.0 mantém compatibilidade
458
+ - Cobertura de testes para CookieBanner (bloqueante/não-bloqueante)
459
+ - Testes de gating e lifecycle de scripts
865
460
 
866
- #### **Manual (Para Máxima Conformidade)**
461
+ **v0.3.6** (28/08/2025) - **Correção Crítica**
867
462
 
868
- ```tsx
869
- // Especificar apenas categorias necessárias
870
- <ConsentProvider
871
- categories={{ enabledCategories: ['analytics'] }}
872
- blocking={true} // Para compliance rigorosa
873
- >
874
- ```
463
+ - Herança correta de ThemeProvider do Material-UI
464
+ - Previne redefinição de tema em composição de provedores
875
465
 
876
- ### 📊 **Impacto**
466
+ **v0.3.1** (13/08/2025) - **Compatibilidade**
877
467
 
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
468
+ - Correções de produção e compatibilidade com diferentes setups
882
469
 
883
- ## [0.2.0] - 2025-08-12
470
+ **v0.3.0** (12/08/2025) - **DX Aprimorada**
884
471
 
885
- ### 🎉 MAJOR UPDATE - Adequação ANPD Completa
472
+ - UI automática com CookieBanner e PreferencesModal
473
+ - Sistema de orientações para desenvolvedores
886
474
 
887
- ### Adicionado
475
+ **v0.2.x** (12/08/2025) - **Conformidade LGPD**
888
476
 
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
477
+ - Sistema de orientações rigoroso
478
+ - Documentação de compliance
896
479
 
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
480
+ **v0.1.x** (09/08/2025) - **Lançamento Inicial**
901
481
 
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`)
482
+ - ConsentProvider, hooks, componentes básicos
483
+ - Modal de preferências
484
+ - Utilitários de cookie e script loading
485
+ - Suporte SSR inicial
1016
486
 
1017
487
  ---
1018
488
 
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.
489
+ O formato deste changelog é baseado em [Keep a Changelog](https://keepachangelog.com/pt-BR/1.0.0/),
490
+ e este projeto adere ao [Semantic Versioning](https://semver.org/lang/pt-BR/).