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/API.md +172 -3
- package/CHANGELOG.md +403 -987
- package/INTEGRACOES.md +142 -10
- package/QUICKSTART.en.md +11 -0
- package/README.en.md +40 -0
- package/README.md +41 -1
- package/package.json +4 -6
package/CHANGELOG.md
CHANGED
|
@@ -1,1074 +1,490 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
-
## 0.
|
|
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
|
-
- [#
|
|
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
|
-
|
|
9
|
+
**Persistência + Loader + Consent Mode v2**
|
|
487
10
|
|
|
488
|
-
|
|
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
|
-
|
|
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
|
-
|
|
15
|
+
## 🔹 Bloco A — Persistência de Consentimento por Cookie
|
|
501
16
|
|
|
502
|
-
|
|
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
|
-
|
|
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
|
-
|
|
93
|
+
## 🔹 Bloco C — Integração Nativa Google Consent Mode v2
|
|
507
94
|
|
|
508
|
-
|
|
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
|
-
|
|
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
|
-
|
|
517
|
-
|
|
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
|
-
|
|
522
|
-
|
|
523
|
-
|
|
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
|
-
###
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
###
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
182
|
+
## 🔄 Breaking Changes
|
|
547
183
|
|
|
548
|
-
|
|
549
|
-
-
|
|
550
|
-
-
|
|
551
|
-
-
|
|
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
|
-
|
|
190
|
+
***
|
|
554
191
|
|
|
555
|
-
|
|
192
|
+
## 🎯 Melhorias Complementares
|
|
556
193
|
|
|
557
|
-
###
|
|
194
|
+
### Sistema de i18n para Diagnósticos
|
|
558
195
|
|
|
559
|
-
|
|
560
|
-
-
|
|
561
|
-
-
|
|
562
|
-
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
212
|
+
## 0.7.0
|
|
570
213
|
|
|
571
|
-
|
|
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
|
-
-
|
|
738
|
-
|
|
739
|
-
-
|
|
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
|
-
|
|
337
|
+
### Patch Changes
|
|
742
338
|
|
|
743
|
-
-
|
|
744
|
-
-
|
|
745
|
-
-
|
|
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
|
-
|
|
343
|
+
## 0.6.3
|
|
748
344
|
|
|
749
|
-
|
|
345
|
+
### Patch Changes
|
|
750
346
|
|
|
751
|
-
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
###
|
|
355
|
+
### Patch Changes
|
|
762
356
|
|
|
763
|
-
-
|
|
764
|
-
-
|
|
765
|
-
-
|
|
766
|
-
-
|
|
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
|
-
|
|
374
|
+
## 0.6.1
|
|
769
375
|
|
|
770
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
386
|
+
### Minor Changes
|
|
785
387
|
|
|
786
|
-
-
|
|
787
|
-
-
|
|
788
|
-
- 🔍
|
|
789
|
-
-
|
|
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
|
-
|
|
397
|
+
### Patch Changes
|
|
792
398
|
|
|
793
|
-
-
|
|
794
|
-
-
|
|
795
|
-
-
|
|
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
|
-
##
|
|
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
|
-
|
|
407
|
+
Para histórico completo detalhado de todas as versões, consulte:
|
|
806
408
|
|
|
807
|
-
|
|
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
|
-
|
|
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
|
-
|
|
414
|
+
**v0.5.0** (25/10/2025) - **Arquitetura Modular**
|
|
817
415
|
|
|
818
|
-
-
|
|
819
|
-
-
|
|
820
|
-
-
|
|
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
|
-
|
|
420
|
+
**v0.4.5** (25/10/2025) - **DataLayer Events**
|
|
823
421
|
|
|
824
|
-
|
|
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
|
-
|
|
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
|
-
|
|
428
|
+
- Correção de workflow de publicação npm
|
|
429
|
+
- Integração com Codecov para coverage reports
|
|
835
430
|
|
|
836
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
453
|
+
- Suporte a `customCategories` no ConsentProvider
|
|
454
|
+
- Integração completa com UI (modal de preferências)
|
|
860
455
|
|
|
861
|
-
|
|
456
|
+
**v0.3.7** (08/09/2025) - **Testes de UI**
|
|
862
457
|
|
|
863
|
-
-
|
|
864
|
-
-
|
|
458
|
+
- Cobertura de testes para CookieBanner (bloqueante/não-bloqueante)
|
|
459
|
+
- Testes de gating e lifecycle de scripts
|
|
865
460
|
|
|
866
|
-
|
|
461
|
+
**v0.3.6** (28/08/2025) - **Correção Crítica**
|
|
867
462
|
|
|
868
|
-
|
|
869
|
-
|
|
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
|
-
|
|
466
|
+
**v0.3.1** (13/08/2025) - **Compatibilidade**
|
|
877
467
|
|
|
878
|
-
-
|
|
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
|
-
|
|
470
|
+
**v0.3.0** (12/08/2025) - **DX Aprimorada**
|
|
884
471
|
|
|
885
|
-
|
|
472
|
+
- UI automática com CookieBanner e PreferencesModal
|
|
473
|
+
- Sistema de orientações para desenvolvedores
|
|
886
474
|
|
|
887
|
-
|
|
475
|
+
**v0.2.x** (12/08/2025) - **Conformidade LGPD**
|
|
888
476
|
|
|
889
|
-
-
|
|
890
|
-
|
|
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
|
-
|
|
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
|
-
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
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
|
-
|
|
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/).
|