react-lgpd-consent 0.4.0 → 0.4.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -4,9 +4,202 @@ Todas as mudanças notáveis neste projeto serão documentadas neste arquivo.
4
4
 
5
5
  O formato é baseado em [Keep a Changelog](https://keepachangelog.com/pt-BR/1.0.0/), e este projeto segue [Semantic Versioning](https://semver.org/lang/pt-BR/).
6
6
 
7
+ ## [0.4.3] - 2025-10-06 — Otimizações de Performance e Qualidade
8
+
9
+ ### 🚀 **Melhorias de Performance**
10
+
11
+ - **React.memo**: Adicionado memoização em componentes puros (`Branding`, `FloatingPreferencesButton`)
12
+ - **useMemo**: Otimizado cálculo de `positionStyles` no `FloatingPreferencesButton`
13
+ - **Lazy Loading Expandido**: `FloatingPreferencesButton` agora é carregado sob demanda
14
+ - **Logger em Produção**: `warn()`, `info()`, `debug()` suprimidos em `NODE_ENV=production`
15
+ - Reduz overhead em bundle de produção
16
+ - `error()` permanece ativo para debugging crítico
17
+
18
+ ### 🐛 **Correções Críticas**
19
+
20
+ - **ConsentProvider Suspense Bug**: Corrigido crash silencioso quando `consented=true`
21
+ - Adicionado `<React.Suspense>` ausente ao redor do `FloatingPreferencesButton` lazy
22
+ - Sintoma: Provider renderizava `<div />` vazio ao invés de `children`
23
+ - Impacto: Testes com `initialState.consented=true` agora passam
24
+
25
+ ### 🧪 **Testes de Acessibilidade (A11y)**
26
+
27
+ - **jest-axe**: Integração completa com validação WCAG automática
28
+ - **CookieBanner.a11y.test.tsx**: 3 cenários de acessibilidade validados
29
+ - **PreferencesModal.a11y.test.tsx**: 3 cenários de acessibilidade validados
30
+ - **TypeScript**: Definições `jest-axe.d.ts` para matcher `toHaveNoViolations()`
31
+ - **Script**: Adicionado `npm run test:a11y` para testes focados
32
+
33
+ ### 📦 **Exports Modulares**
34
+
35
+ - **`./integrations`**: Novo export separado para tree-shaking otimizado
36
+ - Permite `import { createGoogleAnalyticsIntegration } from 'react-lgpd-consent/integrations'`
37
+ - Reduz bundle para consumidores que não usam integrações
38
+ - Suporte ESM + CJS + TypeScript definitions
39
+
40
+ ### 🔧 **CI/CD**
41
+
42
+ - **Node.js 20**: Atualizado de Node 18 para Node 20 LTS em todos os workflows
43
+ - **Cache TypeScript**: Adicionado cache de builds para acelerar CI (~20% mais rápido)
44
+ - Cache de `.tsbuildinfo`, `node_modules/.cache`, `.eslintcache`
45
+ - Workflows atualizados: `ci.yml`, `codeql.yml`, `deploy-docs.yml`, `package-check.yml`
46
+
47
+ ### 📚 **Documentação**
48
+
49
+ - **Badges**: Adicionados 3 badges ao README (Coverage, Bundle Size, Node Version)
50
+ - Codecov para visualização de cobertura
51
+ - Bundlephobia para tamanho de bundle
52
+ - Node.js badge para requisitos de ambiente
53
+
54
+ ### ✅ **Validação de Qualidade**
55
+
56
+ - **222 testes passando**: 100% de sucesso sem skips
57
+ - **94.85% cobertura**: Mantida cobertura alta
58
+ - **0 warnings de lint**: ESLint limpo
59
+ - **Build otimizado**: ESM 32.52 KB + lazy chunks (95B + 86B)
60
+
61
+ ### 📦 **Otimizações de Bundle**
62
+
63
+ - **tsup.config.ts**: Configuração otimizada para tree-shaking e code-splitting
64
+ - **ESM Bundle**: 33.26 KB → 32.52 KB (-740B, -2.2%)
65
+ - **CJS Bundle**: 118.51 KB → 37.71 KB (CJS principal) + chunks (-68%, muito mais eficiente!)
66
+ - **Brotli Compressed**:
67
+ - ESM: 17.06 KB → 16.95 KB (-110B)
68
+ - CJS: 68.72 KB → 18.02 KB (-74%, -50.7 KB!)
69
+ - **Side-effects**: Configuração refinada para preservar code-splitting sem warnings
70
+ - **Tree-shaking**: Agressivo com external de peer dependencies
71
+
72
+ ### 🎯 **Decisões de Design**
73
+
74
+ - **ConsentGate não usa memo**: Decisão intencional - estado de preferências é dinâmico
75
+ - Re-renders necessários quando usuário altera consentimento
76
+ - Lógica leve o suficiente para não justificar memoização
77
+
78
+ ### 📋 **Dependências**
79
+
80
+ - **Adicionadas**:
81
+ - `@axe-core/react@^4.10.2` (dev)
82
+ - `jest-axe@^10.0.0` (dev)
83
+ - `@types/jest-axe@^3.5.9` (dev)
84
+
85
+ ## [0.4.1] - 2025-09-21 — Expansão das Integrações Nativas de Scripts
86
+
87
+ ### 🚀 **Integrações Nativas Expandidas**
88
+
89
+ - **Facebook Pixel**: `createFacebookPixelIntegration()` com auto-tracking e advanced matching
90
+ - **Hotjar**: `createHotjarIntegration()` para heatmaps e session recordings
91
+ - **Mixpanel**: `createMixpanelIntegration()` com configuração avançada de eventos
92
+ - **Microsoft Clarity**: `createClarityIntegration()` para analytics de comportamento
93
+ - **Intercom**: `createIntercomIntegration()` para chat e suporte ao cliente
94
+ - **Zendesk Chat**: `createZendeskChatIntegration()` para atendimento integrado
95
+ - **Drift**: `createDriftIntegration()` para conversational marketing
96
+ - **Freshchat**: `createFreshchatIntegration()` para customer support
97
+
98
+ ### 🎯 **Sistema de Configuração em Lote**
99
+
100
+ - **Templates de negócio**: `createECommerceIntegrations()`, `createSaaSIntegrations()`, `createCorporateIntegrations()`
101
+ - **Categorização inteligente**: `suggestCategoryForScript()` para sugestão automática de categorias
102
+ - **Configuração unificada**: Setup simplificado para múltiplas ferramentas com um comando
103
+ - **Padrões de mercado**: Templates baseados em necessidades reais do mercado brasileiro
104
+
105
+ ### 🔧 **Melhorias no Sistema de Scripts**
106
+
107
+ - **Validação robusta**: `validateNecessaryClassification()` corrigida para evitar falsos positivos
108
+ - **Auto-configuração**: `autoConfigureCategories()` com detecção inteligente de categorias necessárias
109
+ - **Error handling**: Melhor tratamento de erros em carregamento de scripts
110
+ - **Performance**: Carregamento otimizado e lazy loading de integrações
111
+
112
+ ### 🔍 **Descoberta Automática de Cookies (Experimental)**
113
+
114
+ - **discoverRuntimeCookies()**: Escaneamento de cookies em tempo real no navegador
115
+ - **detectConsentCookieName()**: Detecção automática do cookie de consentimento
116
+ - **categorizeDiscoveredCookies()**: Categorização inteligente usando padrões LGPD
117
+ - **Integração nativa**: Suporte a `setCookieCatalogOverrides` automático
118
+ - **SSR-safe**: Funciona corretamente em ambientes server-side rendering
119
+
120
+ ### 🎨 **Design Tokens Expandidos**
121
+
122
+ - **200+ pontos de customização**: Expansão dramática do sistema de design tokens
123
+ - **Sistema responsivo**: Breakpoints, spacing responsivo, typography hierarchy
124
+ - **Acessibilidade nativa**: Contrast ratios, focus states, motion preferences
125
+ - **Tokens por componente**: Customização granular para cada elemento UI
126
+
127
+ ### 📝 **Sistema Avançado de Textos**
128
+
129
+ - **Templates pré-configurados**: Ecommerce, SaaS, Governo com contextos específicos
130
+ - **Multilingual**: Português, inglês, espanhol com fallbacks inteligentes
131
+ - **Função resolveTexts**: Resolução automática de textos baseada em contexto
132
+
133
+ ### 🧪 **Melhorias de Testes e Qualidade**
134
+
135
+ - **193 testes passando**: Cobertura substancialmente melhorada
136
+ - **19 novos testes**: Especificamente para `cookieRegistry` (antes 45.83% → 100% branches)
137
+ - **Test realism**: Testes adaptados ao comportamento real vs ideal
138
+ - **Edge cases**: Performance, boundary testing, state management
139
+ - **Lint compliance**: Configuração ESLint mais rigorosa e aderente
140
+
141
+ ### 🔧 **Melhorias de API e Developer Experience**
142
+
143
+ - **Exports organizados**: Melhor estruturação das exportações públicas
144
+ - **TypeScript strict**: Tipagem mais rigorosa e descritiva
145
+ - **Documentação TSDoc**: Comentários expandidos com exemplos práticos
146
+ - **Error handling**: Tratamento de erros mais robusto e informativo
147
+ - **Performance**: Otimizações em carregamento e renderização
148
+
149
+ ### 📚 **Exemplos e Migração**
150
+
151
+ - **MigrationDemo-v0.4.1.tsx**: Exemplo completo mostrando todas as novidades
152
+ - **Remoção**: TestV0.3.1.tsx removido (obsoleto)
153
+ - **Compatibilidade**: Guias de migração antes/depois
154
+ - **Best practices**: Demonstrações de uso avançado
155
+
156
+ ### 🏗️ **Build e Infraestrutura**
157
+
158
+ - **Bundle otimizado**: ESM 34.36 KB, CJS 102.74 KB
159
+ - **Tree-shaking**: Configuração `sideEffects: false` otimizada
160
+ - **Docs geradas**: TypeDoc atualizado com novas funcionalidades
161
+ - **Pipeline robusto**: Type-check + tests + lint + build + docs
162
+
163
+ ### ⚠️ **Breaking Changes**
164
+
165
+ #### 🔧 **`setPreference` Type Change**
166
+
167
+ - **Mudança**: `setPreference(cat: Category, value: boolean)` → `setPreference(cat: string, value: boolean)`
168
+ - **Motivo**: Suporte a categorias customizadas além das predefinidas
169
+ - **Impacto**: Código TypeScript com tipo `Category` explícito pode precisar ajustes
170
+ - **Migração**:
171
+ - ✅ **Nenhuma mudança necessária** se usando strings literais (`'analytics'`, `'marketing'`)
172
+ - ⚠️ **Ajuste necessário** apenas se estava usando explicitamente o tipo `Category`
173
+ - 📚 **Guia**: Use `string` para suportar categorias customizadas ou continue usando os valores padrão
174
+
175
+ #### 🔧 **`ScriptIntegration.category` Type Change**
176
+
177
+ - **Mudança**: `category: Category` → `category: string`
178
+ - **Motivo**: Suporte a categorias customizadas nas integrações de script
179
+ - **Impacto**: Integrações customizadas com tipo `Category` explícito
180
+ - **Migração**: Mesmas diretrizes do `setPreference` acima
181
+
182
+ ### 🎯 **Categorias Suportadas**
183
+
184
+ - `necessary` (sempre ativo)
185
+ - `analytics` (Google Analytics, etc.)
186
+ - `marketing` (Facebook Pixel, Google Ads)
187
+ - `functional` (Chat, mapas, widgets)
188
+ - `social` (Redes sociais, compartilhamento)
189
+ - `personalization` (Preferências, customização)
190
+
191
+ ### 📈 **Estatísticas de Melhoria**
192
+
193
+ - **Design Tokens**: 4 → 200+ pontos de customização (+4900%)
194
+ - **Testes**: 174 → 193 testes (+11% cobertura)
195
+ - **Funcionalidades**: +15 novas funções exportadas
196
+ - **Documentação**: +3 templates de texto, +6 contextos específicos
197
+ - **Developer APIs**: +8 utilitários para descoberta de cookies
198
+
7
199
  ## [0.4.0] - 2025-09-09 — Custom categories
8
200
 
9
201
  ### Added
202
+
10
203
  - Support for `customCategories` in `ConsentProvider.categories`.
11
204
  - Included in preferences initialization and validation.
12
205
  - Shown in the Preferences modal (with name/description).
@@ -15,6 +208,7 @@ O formato é baseado em [Keep a Changelog](https://keepachangelog.com/pt-BR/1.0.
15
208
  - Storybook story: WithCustomCategories.
16
209
 
17
210
  ### Notes
211
+
18
212
  - Non-breaking change; existing configurations continue to work.
19
213
 
20
214
  ## [0.3.7] - 2025-09-08 - Testes de UI e carregamento de scripts
@@ -556,3 +750,35 @@ A v0.2.1 introduz um **sistema inteligente de orientações** que guia desenvolv
556
750
  - [ ] Base legal por categoria
557
751
  - [ ] Relatórios de compliance
558
752
  - [ ] Templates por setor
753
+
754
+ ## [0.4.2] - 06/10/2025 — Quickstarts + SSR Guide + Validação (DEV)
755
+
756
+ ### ✨ Quickstarts executáveis
757
+
758
+ - Next.js (App Router) e Vite com Consent Mode v2 integrado e bloqueio real de scripts (GTM/GA4 não carregam antes do consentimento).
759
+ - Seções no QUICKSTART.md com passos copy‑paste e validação do comportamento esperado.
760
+
761
+ ### 🧱 Guia SSR/Next.js (App Router)
762
+
763
+ - 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.
764
+ - Ordem de provedores/estilos (Emotion/MUI) e z-index/portals documentados (overlay 1299, modais ≥ 1300).
765
+
766
+ ### ✅ Validação de configuração do ConsentProvider (DEV)
767
+
768
+ - Validação com Zod em desenvolvimento (import dinâmico) e sanitização leve em produção.
769
+ - Mensagens amigáveis: alerta quando `categories` não é fornecida; remove `'necessary'` de `enabledCategories`; detecta duplicidades/valores inválidos; valida `customCategories`.
770
+ - Testes cobrindo casos inválidos e asserts de mensagens.
771
+
772
+ ### 📚 Categorias — definição, uso e exemplos
773
+
774
+ - Fonte única de verdade: `ConsentProvider.categories`. UI, hooks e integrações leem a mesma definição.
775
+ - Esclarecimento: apenas “necessários” é obrigatório; demais categorias são opcionais conforme o negócio.
776
+ - Exemplos mínimo (somente necessários) e completo (analytics/marketing/functional).
777
+
778
+ ### 🔧 Dependências
779
+
780
+ - Adicionado: `zod@^3.23.8` (usado somente em DEV via import dinâmico; não impacta o bundle de produção).
781
+
782
+ ### 🧩 Sem breaking changes
783
+
784
+ - Alterações são compatíveis; padrões seguros preservados.
package/QUICKSTART.en.md CHANGED
@@ -42,6 +42,40 @@ export default App
42
42
  ## 🧩 Custom categories (customCategories)
43
43
  Available since v0.4.0.
44
44
 
45
+ ## 🎨 Style tip: Theme-aware backdrop
46
+
47
+ In blocking mode, the banner uses a backdrop to focus user attention. You can control it via design tokens:
48
+
49
+ ```tsx
50
+ <ConsentProvider
51
+ categories={{ enabledCategories: ['analytics'] }}
52
+ designTokens={{
53
+ layout: {
54
+ // false: transparent | 'auto': adapts to theme | string: custom color (e.g., '#00000088')
55
+ backdrop: 'auto',
56
+ },
57
+ colors: {
58
+ // If omitted, MUI theme palette is used (background.paper, text.primary)
59
+ // background: '#1e1e1e',
60
+ // text: '#ffffff',
61
+ },
62
+ }}
63
+ >
64
+ <App />
65
+ </ConsentProvider>
66
+ ```
67
+
68
+ If `colors.background` or `colors.text` are omitted, the library falls back to `theme.palette.background.paper` and `theme.palette.text.primary`, ensuring dark mode compatibility.
69
+
70
+ ## 🧑‍🏫 Developer Guidance (console)
71
+
72
+ In development, the console shows a helpful guidance panel:
73
+ - Warns when using defaults; suggests making categories explicit
74
+ - Lists active categories and which require UI toggles
75
+ - Detects integrations that require categories and suggests enabling them
76
+ - Shares Brazilian LGPD best practices and flags UX issues (too many categories)
77
+ - Silenced automatically in production; SSR-safe
78
+
45
79
  Add project-specific categories (e.g., support chat, video players, A/B testing):
46
80
 
47
81
  ```tsx