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/API.md +144 -0
- package/CHANGELOG.md +216 -999
- package/INTEGRACOES.md +88 -4
- package/QUICKSTART.en.md +11 -0
- package/README.en.md +47 -5
- package/README.md +40 -0
- package/package.json +4 -6
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
|
-
##
|
|
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
|
-
|
|
198
|
+
Para histórico completo detalhado de todas as versões, consulte:
|
|
796
199
|
|
|
797
|
-
|
|
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
|
-
|
|
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
|
-
|
|
205
|
+
**v0.5.0** (25/10/2025) - **Arquitetura Modular**
|
|
807
206
|
|
|
808
|
-
-
|
|
809
|
-
-
|
|
810
|
-
-
|
|
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
|
-
|
|
211
|
+
**v0.4.5** (25/10/2025) - **DataLayer Events**
|
|
813
212
|
|
|
814
|
-
|
|
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
|
-
|
|
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
|
-
|
|
219
|
+
- Correção de workflow de publicação npm
|
|
220
|
+
- Integração com Codecov para coverage reports
|
|
825
221
|
|
|
826
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
244
|
+
- Suporte a `customCategories` no ConsentProvider
|
|
245
|
+
- Integração completa com UI (modal de preferências)
|
|
850
246
|
|
|
851
|
-
|
|
247
|
+
**v0.3.7** (08/09/2025) - **Testes de UI**
|
|
852
248
|
|
|
853
|
-
-
|
|
854
|
-
-
|
|
249
|
+
- Cobertura de testes para CookieBanner (bloqueante/não-bloqueante)
|
|
250
|
+
- Testes de gating e lifecycle de scripts
|
|
855
251
|
|
|
856
|
-
|
|
252
|
+
**v0.3.6** (28/08/2025) - **Correção Crítica**
|
|
857
253
|
|
|
858
|
-
|
|
859
|
-
|
|
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
|
-
|
|
257
|
+
**v0.3.1** (13/08/2025) - **Compatibilidade**
|
|
867
258
|
|
|
868
|
-
-
|
|
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
|
-
|
|
261
|
+
**v0.3.0** (12/08/2025) - **DX Aprimorada**
|
|
874
262
|
|
|
875
|
-
|
|
263
|
+
- UI automática com CookieBanner e PreferencesModal
|
|
264
|
+
- Sistema de orientações para desenvolvedores
|
|
876
265
|
|
|
877
|
-
|
|
266
|
+
**v0.2.x** (12/08/2025) - **Conformidade LGPD**
|
|
878
267
|
|
|
879
|
-
-
|
|
880
|
-
|
|
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
|
-
|
|
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
|
-
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
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
|
-
|
|
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/).
|