react-lgpd-consent 0.2.4 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,752 +1,171 @@
1
1
  # react-lgpd-consent 🍪
2
2
 
3
- [![NPM Version](https://img.shields.io/npm/v/react-lgpd-consent?style=for-the-badge&color=blue)](http### 🚨 Sistema de Orientações para Desenvolvedores (v0.2.2)
3
+ [![NPM Version](https://img.shields.io/npm/v/react-lgpd-consent/v0.3.0?style=for-the-badge&color=blue)](https://www.npmjs.com/package/react-lgpd-consent)
4
+ [![Bundle Size](https://img.shields.io/bundlephobia/minzip/react-lgpd-consent?style=for-the-badge&color=green)](https://bundlephobia.com/package/react-lgpd-consent)
5
+ [![Downloads](https://img.shields.io/npm/dm/react-lgpd-consent?style=for-the-badge&color=orange)](https://www.npmjs.com/package/react-lgpd-consent)
6
+ [![TypeScript](https://img.shields.io/badge/TypeScript-Ready-blue?style=for-the-badge&logo=typescript)](https://www.typescriptlang.org/)
7
+ [![License](https://img.shields.io/npm/l/react-lgpd-consent?style=for-the-badge&color=lightgrey)](https://github.com/lucianoedipo/react-lgpd-consent/blob/main/LICENSE)
8
+
9
+ > **Biblioteca completa de consentimento de cookies para React, em conformidade com a LGPD.**
4
10
 
5
- A v0.2.2 inclui sistema inteligente que **orienta developers sobre configuração adequada para compliance LGPD**:
11
+ Solução moderna, acessível e personalizável para gerenciar o consentimento de cookies em aplicações React, com suporte a SSR, Material-UI, e um sistema inteligente de orientações para desenvolvedores.
6
12
 
7
- - 🧠 **Console Automático**: Avisos e sugestões sobre configuração
8
- - 🎯 **UI Dinâmica**: Componentes se adaptam à configuração do projeto
9
- - 🛡️ **Compliance por Design**: Previne problemas de conformidade LGPD
10
- - 🔧 **Hooks Avançados**: `useCategories()` e `useCategoryStatus()` para controle total
13
+ ## Características Principais
11
14
 
12
- **Desativando os Avisos:**
15
+ - 🇧🇷 **Conformidade com a LGPD**: Desenvolvido seguindo as diretrizes da ANPD.
16
+ - 🧠 **Orientações para Desenvolvedores**: Avisos e sugestões automáticas no console para garantir uma configuração adequada.
17
+ - 🎯 **UI Dinâmica e Inteligente**: Os componentes se adaptam automaticamente às categorias de cookies que você realmente utiliza.
18
+ - 🛡️ **Minimização de Dados**: O cookie de consentimento armazena apenas as informações estritamente necessárias.
19
+ - 🚀 **Integrações Nativas**: Carregue scripts como Google Analytics e GTM automaticamente após o consentimento.
20
+ - ⏰ **Auditoria**: O cookie armazena metadados essenciais como data do consentimento, versão e origem.
21
+ - 🎨 **Customizável**: Personalize textos, tema (Material-UI) e componentes.
22
+ - ♿ **Acessibilidade**: Suporte para navegação por teclado e leitores de tela.
23
+ - 📦 **Leve e Otimizado**: Performance em foco, com tree-shaking.
24
+ - ✨ **Renderização Automática de UI**: O `ConsentProvider` agora gerencia a exibição do banner e do botão flutuante por padrão.
25
+ - 🎨 **Componentes UI Sobrescrevíveis**: Forneça seus próprios componentes de UI com tipagem clara para total personalização.
13
26
 
14
- Por padrão, os avisos são desativados automaticamente em builds de produção (`process.env.NODE_ENV === 'production'`). Para desativá-los explicitamente em desenvolvimento, você pode usar a prop `disableDeveloperGuidance` no `ConsentProvider`:
27
+ ## 🚀 Instalação
15
28
 
16
- ```tsx
17
- <ConsentProvider disableDeveloperGuidance={true}>
18
- {/* Sua aplicação */}
19
- </ConsentProvider>
29
+ ```bash
30
+ npm install react-lgpd-consent
20
31
  ```
21
32
 
22
- A forma anterior de desativar os avisos via `window.__LGPD_DISABLE_GUIDANCE__ = true` ainda funciona, mas o uso da prop é a forma **preferencial e mais idiomática** em React.
33
+ Você também precisará das dependências `peer`, caso ainda não as tenha:
23
34
 
35
+ ```bash
36
+ npm install react react-dom @mui/material js-cookie
37
+ ```
24
38
 
25
- ## 📖 Uso Básico - Configuração Consciente (v0.2.2)
39
+ ## 📖 Uso Básico
26
40
 
27
- ### 1. Setup Básico (Compliance LGPD Automática)
41
+ O exemplo abaixo mostra como implementar um banner de consentimento funcional com o mínimo de configuração.
28
42
 
29
- ````tsx
30
- import { ConsentProvider, CookieBanner } from 'react-lgpd-consent'
43
+ ```tsx
44
+ // Em seu componente principal, como App.tsx
45
+ import { ConsentProvider } from 'react-lgpd-consent'
31
46
 
32
47
  function App() {
33
48
  return (
34
49
  <ConsentProvider
35
- // 🛡️ Especificar apenas categorias necessárias (Minimização de Dados LGPD)
50
+ // 1. Especifique as categorias que seu site utiliza
36
51
  categories={{
37
- enabledCategories: ['analytics'], // Apenas analytics + necessary
52
+ enabledCategories: ['analytics', 'marketing'],
38
53
  }}
39
-
40
- // � Textos ANPD para compliance (opcionais)
54
+ // 2. (Opcional) Adicione textos para total transparência
41
55
  texts={{
42
- bannerMessage: "Utilizamos cookies conforme LGPD...",
43
- controllerInfo: "Controlado por: Empresa XYZ - CNPJ: 00.000.000/0001-00",
44
- dataTypes: "Coletamos: dados de navegação para análise estatística",
45
- userRights: "Direitos: acessar, corrigir, excluir dados (dpo@empresa.com)"
56
+ controllerInfo: 'Controlado por: Sua Empresa LTDA',
57
+ userRights: 'Você tem o direito de acessar e corrigir seus dados.',
46
58
  }}
47
-
48
- // 🔔 Callbacks para auditoria (opcionais)
49
- onConsentGiven={(state) => console.log('Consentimento registrado:', state)}
59
+ // 3. (Opcional) Adicione callbacks para auditoria
60
+ onConsentGiven={(state) => console.log('Consentimento dado:', state)}
50
61
  >
51
- <CookieBanner policyLinkUrl="/politica-de-privacidade" />
52
- <YourApp />
62
+ {/* O resto da sua aplicação */}
63
+ <h1>Meu Site</h1>
64
+ <p>Bem-vindo ao meu site.</p>
65
+
66
+ {/* O ConsentProvider agora renderiza automaticamente o banner e o botão flutuante */}
67
+ {/* Você pode sobrescrevê-los usando as props CookieBannerComponent e FloatingPreferencesButtonComponent */}
53
68
  </ConsentProvider>
54
69
  )
55
70
  }
56
- ```eact-lgpd-consent?style=for-the-badge)](https://github.com/lucianoedipo/react-lgpd-consent/blob/main/LICENSE)
57
- [![TypeScript](https://img.shields.io/badge/TypeScript-Ready-blue?style=for-the-badge&logo=typescript)](https://www.typescriptlang.org/)
58
- [![React](https://img.shields.io/badge/React-18%2B-61DAFB?style=for-the-badge&logo=react)](https://reactjs.org/)
59
- [![Material-UI](https://img.shields.io/badge/MUI-Ready-007FFF?style=for-the-badge&logo=mui)](https://mui.com/)
60
- [![Bundle Size](https://img.shields.io/bundlephobia/minzip/react-lgpd-consent?style=for-the-badge&color=green)](https://bundlephobia.com/package/react-lgpd-consent)
61
- [![Downloads](https://img.shields.io/npm/dm/react-lgpd-consent?style=for-the-badge&color=orange)](https://www.npmjs.com/package/react-lgpd-consent)
62
-
63
- [![React](https://img.shields.io/badge/React-18%2B-61DAFB?style=for-the-badge&logo=react)](https://reactjs.org/)
64
- [![Material-UI](https://img.shields.io/badge/MUI-Ready-007FFF?style=for-the-badge&logo=mui)](https://mui.com/)
65
-
66
- > **Biblioteca completa de consentimento de cookies para React e Next.js em conformidade com a LGPD**
67
-
68
- Solução moderna, acessível e personalizável para gerenciar consentimento de cookies em aplicações React, com suporte completo a SSR, Material-UI e TypeScript.
69
-
70
- ## ✨ Características Principais
71
-
72
- - 🇧🇷 **Conformidade LGPD + ANPD**: Cookie otimizado conforme Guia Orientativo da ANPD
73
- - 🍪 **Categorias Configuráveis**: Sistema dinâmico - apenas categorias necessárias ao projeto
74
- - 🛡️ **Princípio da Minimização**: Cookie contém apenas dados essenciais para compliance
75
- - 🚀 **Integrações Nativas**: Google Analytics, Tag Manager, UserWay automatizados
76
- - ⏰ **Auditoria Completa**: Timestamps e rastreabilidade para prestação de contas
77
- - ⚡ **Client-Side First**: Arquitetura otimizada para SPA com zero-flash
78
- - 🎨 **Material-UI Integration**: Componentes prontos e customizáveis com MUI
79
- - ♿ **Acessibilidade**: Navegação por teclado e leitores de tela nativamente suportados
80
- - 🌐 **Internacionalização**: Textos totalmente customizáveis (padrão pt-BR)
81
- - 🚀 **TypeScript**: API completamente tipada para melhor DX
82
- - 📦 **Zero Config**: Funciona out-of-the-box com configurações sensatas
83
- - 🎯 **Granular Control**: Controle individual por categoria ativa
84
- - 🚫 **Banner Bloqueante**: Modo opcional para exigir interação antes de continuar
85
- - 🎨 **Sistema de Temas**: Temas customizáveis para integração visual perfeita
86
- - ⚡ **Carregamento Automático**: Scripts só executam após consentimento explícito
87
- - 🔌 **Modal Automático**: Modal de preferências incluído automaticamente com lazy loading
88
- - 🎛️ **Botão Flutuante**: Componente opcional para acesso fácil às preferências
89
-
90
- ## 🚀 Instalação
91
-
92
- ```bash
93
- npm install react-lgpd-consent
94
- # ou
95
- yarn add react-lgpd-consent
96
- # ou
97
- pnpm add react-lgpd-consent
98
- ````
99
-
100
- ### Dependências
101
71
 
102
- ```bash
103
- npm install @mui/material js-cookie
104
- ```
105
-
106
- ## 🆕 Novidades v0.2.0 - Adequação ANPD Completa
107
-
108
- ### 🍪 Categorias Baseadas no Guia da ANPD
109
-
110
- A biblioteca agora inclui **6 categorias** baseadas no Guia Orientativo da ANPD:
111
-
112
- - **`necessary`**: Cookies essenciais (sempre ativos)
113
- - **`analytics`**: Análise e estatísticas de uso
114
- - **`functional`**: Funcionalidades extras (preferências, idioma)
115
- - **`marketing`**: Publicidade e marketing direcionado
116
- - **`social`**: Integração com redes sociais
117
- - **`personalization`**: Personalização de conteúdo
118
-
119
- ### 🛡️ Conformidade LGPD Rigorosa (v0.2.1)
120
-
121
- **Princípio da Minimização**: Cookie contém apenas categorias realmente utilizadas:
122
-
123
- ```tsx
124
- <ConsentProvider
125
- categories={{
126
- enabledCategories: ['analytics'], // Apenas analytics + necessary
127
- customCategories: [{
128
- id: 'governo',
129
- name: 'Integração Governamental',
130
- description: 'Cookies para sistemas gov.br',
131
- essential: false
132
- }]
133
- }}
134
- blocking={true} // Banner bloqueia até decisão explícita
135
- >
136
- ```
137
-
138
- **Cookie resultante** (apenas dados essenciais):
139
-
140
- ```json
141
- {
142
- "version": "1.0",
143
- "consented": true,
144
- "preferences": { "necessary": true, "analytics": false, "governo": true },
145
- "consentDate": "2025-08-12T14:30:00.000Z",
146
- "lastUpdate": "2025-08-12T14:30:00.000Z",
147
- "source": "banner"
148
- }
72
+ export default App
149
73
  ```
150
74
 
151
- > 📋 **[Guia Completo de Conformidade LGPD](./docs/CONFORMIDADE-LGPD.md)**
75
+ ## 🔧 API e Funcionalidades
152
76
 
153
- ### Sistema de Orientações para Desenvolvedores
77
+ ### Configuração Consciente
154
78
 
155
- A v0.2.1 inclui sistema inteligente que **orienta developers sobre configuração adequada**:
79
+ A prop `categories` no `ConsentProvider` é o ponto central da biblioteca. Ela força o desenvolvedor a declarar quais categorias de cookies são utilizadas, em linha com o princípio de minimização de dados da LGPD.
156
80
 
157
81
  ```tsx
158
- // ⚠️ Sem configuração - usa padrão e avisa
159
- <ConsentProvider>
160
- <App />
161
- </ConsentProvider>
162
- // Console: "Usando padrão: necessary + analytics. Especificar para produção."
163
-
164
- // ✅ Configuração explícita - recomendado
165
82
  <ConsentProvider
166
83
  categories={{
167
- enabledCategories: ['analytics', 'marketing'],
168
- customCategories: [...]
84
+ // Habilita as categorias padrão 'analytics' e 'functional'
85
+ enabledCategories: ['analytics', 'functional'],
169
86
  }}
170
87
  >
171
- <App />
172
- </ConsentProvider>
173
- ```
174
-
175
- **Console de desenvolvimento** mostra automaticamente:
176
-
177
- - 🟨 **Avisos**: Configuração faltante ou inconsistente
178
- - 💡 **Sugestões**: Melhorias para compliance
179
- - 🔧 **Tabela de categorias ativas**: Para UI customizada
180
-
181
- > 📋 **[Sistema de Orientações Completo](./docs/ORIENTACOES-DESENVOLVIMENTO.md)**
182
-
183
- ### 🔧 Categorias Customizadas (API Legacy)
184
-
185
- ```tsx
186
- // LEGACY: ainda suportado, mas deprecated
187
- const customCategories = [
188
- {
189
- id: 'governo',
190
- name: 'Integração Governo',
191
- description: 'Cookies para integração com sistemas governamentais.',
192
- essential: false,
193
- cookies: ['gov_session', 'cpf_hash']
194
- }
195
- ]
196
-
197
- <ConsentProvider customCategories={customCategories}>
198
- {/* Sua aplicação */}
88
+ {/*...*/}
199
89
  </ConsentProvider>
200
90
  ```
201
91
 
202
- ### 🎨 Componentes UI Dinâmicos (v0.2.2)
203
-
204
- Os componentes agora **renderizam automaticamente** baseado na configuração:
205
-
206
- ```tsx
207
- import { useCategories, useCategoryStatus } from 'react-lgpd-consent'
208
-
209
- // ✅ Modal customizado que se adapta às categorias ativas
210
- function CustomPreferencesModal() {
211
- const { toggleableCategories } = useCategories()
212
- const { preferences, setPreferences } = useConsent()
213
-
214
- return (
215
- <dialog>
216
- {/* Renderiza APENAS categorias configuradas no projeto */}
217
- {toggleableCategories.map((category) => (
218
- <label key={category.id}>
219
- <input
220
- type="checkbox"
221
- checked={preferences[category.id] ?? false} // ✅ Controlado
222
- onChange={(e) =>
223
- setPreferences({
224
- ...preferences,
225
- [category.id]: e.target.checked,
226
- })
227
- }
228
- />
229
- <strong>{category.name}</strong>
230
- <p>{category.description}</p>
231
- </label>
232
- ))}
233
- </dialog>
234
- )
235
- }
236
-
237
- // ✅ Feature condicional baseada em configuração
238
- function AnalyticsDashboard() {
239
- const analytics = useCategoryStatus('analytics')
240
-
241
- if (!analytics.isActive) {
242
- return null // Categoria não configurada - não renderiza
243
- }
244
-
245
- return <div>Dashboard só aparece se analytics estiver configurado!</div>
246
- }
247
- ```
248
-
249
- **Benefícios:**
92
+ ### Carregamento de Scripts (`ConsentScriptLoader`)
250
93
 
251
- - **Zero bugs**: UI sempre consistente com configuração
252
- - ✅ **Performance**: Não renderiza categorias não utilizadas
253
- - ✅ **Manutenibilidade**: Mudou configuração? UI atualiza automaticamente
254
- - ✅ **Orientação**: Console avisa sobre inconsistências
255
-
256
- ### 🚀 Integrações Automáticas
94
+ Evite carregar scripts de rastreamento antes do consentimento. O `ConsentScriptLoader` faz isso automaticamente.
257
95
 
258
96
  ```tsx
259
97
  import {
98
+ ConsentProvider,
260
99
  ConsentScriptLoader,
261
100
  createGoogleAnalyticsIntegration,
262
- createUserWayIntegration,
263
101
  } from 'react-lgpd-consent'
264
102
 
265
103
  const integrations = [
266
104
  createGoogleAnalyticsIntegration({
267
- measurementId: 'GA_MEASUREMENT_ID',
268
- }),
269
- createUserWayIntegration({
270
- accountId: 'USERWAY_ACCOUNT_ID',
105
+ measurementId: 'G-XXXXXXXXXX',
271
106
  }),
272
107
  ]
273
108
 
274
109
  function App() {
275
110
  return (
276
- <ConsentProvider>
277
- {/* Scripts carregam automaticamente quando categoria é aceita */}
111
+ <ConsentProvider categories={{ enabledCategories: ['analytics'] }}>
112
+ {/* Este componente carrega os scripts para você quando o consentimento é dado */}
278
113
  <ConsentScriptLoader integrations={integrations} />
279
114
 
280
- <CookieBanner policyLinkUrl="/privacy-policy" />
281
- </ConsentProvider>
282
- )
283
- }
284
- ```
285
-
286
- ### 📝 Textos ANPD Expandidos
287
-
288
- ```tsx
289
- <ConsentProvider
290
- texts={{
291
- bannerMessage: 'Utilizamos cookies para melhorar sua experiência.',
292
- // Textos ANPD opcionais
293
- controllerInfo: 'Controlado por Empresa LTDA (CNPJ: 00.000.000/0001-00)',
294
- dataTypes: 'Coletamos dados de navegação, preferências e interações.',
295
- thirdPartySharing: 'Compartilhamos com: Google Analytics, Facebook Pixel',
296
- userRights: 'Você tem direito a acesso, correção e exclusão dos dados.',
297
- contactInfo: 'Contato DPO: dpo@empresa.com.br | (11) 9999-9999',
298
- retentionPeriod: 'Dados armazenados por até 12 meses.',
299
- lawfulBasis: 'Base legal: consentimento do titular dos dados.',
300
- transferCountries: 'Dados podem ser transferidos para: EUA, Irlanda.',
301
- }}
302
- >
303
- {/* Os textos são exibidos condicionalmente apenas se definidos */}
304
- </ConsentProvider>
305
- ```
306
-
307
- ## � Exemplo Completo
308
-
309
- ```tsx
310
- import {
311
- ConsentProvider,
312
- CookieBanner,
313
- FloatingPreferencesButton,
314
- } from 'react-lgpd-consent'
315
-
316
- function App() {
317
- return (
318
- <ConsentProvider>
319
- <div>
320
- <h1>Meu Site</h1>
321
- <p>Conteúdo do site...</p>
322
-
323
- {/* Banner de cookies - Modal incluído automaticamente! */}
324
- <CookieBanner policyLinkUrl="/privacy-policy" blocking={true} />
325
-
326
- {/* Botão flutuante opcional para acesso às preferências */}
327
- <FloatingPreferencesButton position="bottom-right" />
328
- </div>
329
- </ConsentProvider>
330
- )
331
- }
332
- ```
333
-
334
- ## �📖 Uso Básico
335
-
336
- ### 1. Setup do Provider
337
-
338
- ```tsx
339
- import { ConsentProvider } from 'react-lgpd-consent'
340
-
341
- function App() {
342
- return (
343
- <ConsentProvider>
344
- <YourApp />
115
+ {/* ... resto do app */}
345
116
  </ConsentProvider>
346
117
  )
347
118
  }
348
119
  ```
349
120
 
350
- ### 2. Banner de Consentimento
351
-
352
- ```tsx
353
- import { CookieBanner } from 'react-lgpd-consent'
354
-
355
- function Layout() {
356
- return (
357
- <>
358
- <YourContent />
359
- <CookieBanner
360
- policyLinkUrl="/politica-privacidade"
361
- blocking={true} // Padrão: bloqueia até decisão
362
- />
363
- {/* Modal de preferências incluído automaticamente! */}
364
- </>
365
- )
366
- }
367
- ```
121
+ ### Renderização Condicional (`ConsentGate`)
368
122
 
369
- ### 3. Uso do Hook
123
+ Renderize componentes ou partes da sua UI apenas se o usuário consentiu com uma categoria específica.
370
124
 
371
125
  ```tsx
372
- import { useConsent } from 'react-lgpd-consent'
373
-
374
- function MyComponent() {
375
- const { consented, preferences, acceptAll, openPreferences } = useConsent()
126
+ import { ConsentGate } from 'react-lgpd-consent'
376
127
 
128
+ function MarketingPixel() {
377
129
  return (
378
- <div>
379
- <p>Consentimento: {consented ? 'Dado' : 'Pendente'}</p>
380
- <button onClick={acceptAll}>Aceitar Todos</button>
381
- <button onClick={openPreferences}>Gerenciar Preferências</button>
382
- </div>
383
- )
384
- }
385
- ```
386
-
387
- > ✅ **O modal de preferências é incluído automaticamente pelo ConsentProvider!** Não é mais necessário renderizá-lo manualmente.
388
-
389
- ````
390
-
391
- ### 4. Carregamento Condicional de Scripts
392
-
393
- ```tsx
394
- import { ConsentGate, loadScript } from 'react-lgpd-consent'
395
-
396
- function Analytics() {
397
- return (
398
- <ConsentGate category="analytics">
399
- <GoogleAnalytics />
130
+ <ConsentGate category="marketing">
131
+ {/* Este componente será renderizado se o usuário aceitar cookies de marketing */}
132
+ <img src="/pixel.gif" alt="Marketing Pixel" />
400
133
  </ConsentGate>
401
134
  )
402
135
  }
403
-
404
- // Ou carregando scripts que aguardam consentimento
405
- function MyComponent() {
406
- const { preferences, consented } = useConsent()
407
-
408
- useEffect(() => {
409
- if (consented && preferences.analytics) {
410
- loadConditionalScript(
411
- 'ga',
412
- 'https://www.googletagmanager.com/gtag/js?id=GA_ID',
413
- () => preferences.analytics, // Condição que aguarda
414
- )
415
- }
416
- }, [preferences, consented])
417
- }
418
- ````
419
-
420
- ## 🎨 Customização
421
-
422
- ### Banner Bloqueante vs Não-bloqueante
423
-
424
- ```tsx
425
- // Banner bloqueante (padrão) - impede interação até decisão
426
- <CookieBanner blocking={true} />
427
-
428
- // Banner não-intrusivo - permite navegação
429
- <CookieBanner blocking={false} />
430
- ```
431
-
432
- ### Tema Personalizado
433
-
434
- ```tsx
435
- import { ConsentProvider, defaultConsentTheme } from 'react-lgpd-consent'
436
- import { createTheme } from '@mui/material/styles'
437
-
438
- const meuTema = createTheme({
439
- ...defaultConsentTheme,
440
- palette: {
441
- ...defaultConsentTheme.palette,
442
- primary: {
443
- main: '#1976d2', // Sua cor principal
444
- },
445
- },
446
- })
447
-
448
- <ConsentProvider theme={meuTema}>
449
- <App />
450
- </ConsentProvider>
451
- ```
452
-
453
- ### Textos Personalizados
454
-
455
- ```tsx
456
- <ConsentProvider
457
- texts={{
458
- bannerMessage: "Utilizamos cookies para melhorar sua experiência.",
459
- acceptAll: "Aceitar Todos",
460
- declineAll: "Recusar Opcionais",
461
- preferences: "Configurar"
462
- }}
463
- >
464
- ```
465
-
466
- ### Configuração do Cookie
467
-
468
- ```tsx
469
- <ConsentProvider
470
- cookie={{
471
- name: 'meuSiteConsent',
472
- maxAgeDays: 180,
473
- sameSite: 'Strict'
474
- }}
475
- >
476
- ```
477
-
478
- ### Callbacks
479
-
480
- ```tsx
481
- <ConsentProvider
482
- onConsentGiven={(state) => {
483
- console.log('Consentimento dado:', state)
484
- // Inicializar analytics, etc.
485
- }}
486
- onPreferencesSaved={(prefs) => {
487
- console.log('Preferências salvas:', prefs)
488
- }}
489
- >
490
- ```
491
-
492
- ## � Banner Bloqueante
493
-
494
- Para cenários onde é necessário bloquear o acesso até obter consentimento explícito:
495
-
496
- ```tsx
497
- <CookieBanner blocking />
498
- ```
499
-
500
- Com `blocking={true}`, o banner:
501
-
502
- - Cria um overlay escuro sobre todo o conteúdo
503
- - Impede interação com o resto da página
504
- - É útil para casos críticos onde consentimento é obrigatório
505
-
506
- ## 🎨 Sistema de Temas
507
-
508
- ### Tema Personalizado
509
-
510
- ```tsx
511
- import { createTheme } from '@mui/material/styles'
512
-
513
- const meuTema = createTheme({
514
- palette: {
515
- primary: { main: '#2196f3' },
516
- secondary: { main: '#f50057' },
517
- },
518
- })
519
-
520
- <ConsentProvider theme={meuTema}>
521
- <App />
522
- </ConsentProvider>
523
- ```
524
-
525
- ### Tema Padrão
526
-
527
- O tema padrão do react-lgpd-consent está disponível para customização:
528
-
529
- ```tsx
530
- import { defaultConsentTheme } from 'react-lgpd-consent'
531
-
532
- const temaCustomizado = createTheme({
533
- ...defaultConsentTheme,
534
- palette: {
535
- ...defaultConsentTheme.palette,
536
- primary: { main: '#your-color' },
537
- },
538
- })
539
136
  ```
540
137
 
541
- ## Carregamento Inteligente de Scripts
138
+ ### API e Funcionalidades
542
139
 
543
- ### Função loadScript
140
+ A versão `v0.3.0` simplifica a API e melhora a experiência do desenvolvedor.
544
141
 
545
- Scripts aguardam automaticamente o **consentimento finalizado** (banner fechado ou preferências salvas):
142
+ - **Componentes UI Sobrescrevíveis com Tipagem Clara**: Agora você pode fornecer seus próprios componentes para o banner, modal e botão flutuante, com props tipadas para garantir a compatibilidade. Consulte `CustomCookieBannerProps`, `CustomPreferencesModalProps` e `CustomFloatingPreferencesButtonProps` para detalhes.
143
+ - **Controle Simplificado do Modal**: A prop `disableAutomaticModal` foi removida. A visibilidade do modal é controlada internamente.
144
+ - **Remoção de Hooks Internos**: O hook `useConsentComponentProps` foi removido para simplificar a API. Use `useConsent()` e `useConsentTexts()` diretamente.
546
145
 
547
- ```tsx
548
- import { loadScript } from 'react-lgpd-consent'
146
+ ### Hooks
549
147
 
550
- // Carrega script apenas após consentimento para analytics
551
- await loadScript(
552
- 'gtag',
553
- 'https://www.googletagmanager.com/gtag/js?id=GA_ID',
554
- 'analytics', // Categoria obrigatória
555
- )
148
+ A biblioteca exporta hooks para controle total e criação de UIs customizadas:
556
149
 
557
- // Script geral (sempre carrega após consentimento)
558
- await loadScript('custom-script', 'https://example.com/script.js')
559
- ```
150
+ - `useConsent()`: O hook principal para interagir com o estado de consentimento.
151
+ - `useCategories()`: Retorna a lista de todas as categorias ativas no projeto.
152
+ - `useCategoryStatus('id')`: Verifica se uma categoria específica está ativa e configurada.
560
153
 
561
- ### Comportamento Inteligente
154
+ ## 🛡️ Conformidade e LGPD
562
155
 
563
- - **Aguarda decisão final**: Não executa durante mudanças no modal de preferências
564
- - **Só executa após salvar**: Scripts só rodam quando o usuário finaliza as preferências
565
- - **Baseado em categoria**: Respeita as permissões por categoria
156
+ Esta biblioteca foi projetada para auxiliar na conformidade com a LGPD, implementando princípios como:
566
157
 
567
- ## 🎨 Personalização Total
158
+ - **Consentimento Granular**: O usuário pode escolher quais categorias aceitar.
159
+ - **Minimização de Dados**: Apenas as categorias declaradas são gerenciadas e armazenadas no cookie.
160
+ - **Transparência**: O sistema de textos e o cookie de auditoria fornecem informações claras.
161
+ - **Facilidade de Revogação**: O usuário pode alterar suas preferências a qualquer momento.
568
162
 
569
- ### Modal de Preferências Customizado
163
+ Para mais detalhes, consulte o nosso **[Guia de Conformidade](docs/CONFORMIDADE-LGPD.md)**.
570
164
 
571
- Substitua completamente o modal padrão com seu próprio componente:
165
+ ## 🤝 Contribuições
572
166
 
573
- ```tsx
574
- import { ConsentProvider, useConsent } from 'react-lgpd-consent'
575
- import MeuModalCustomizado from './MeuModalCustomizado'
576
-
577
- function App() {
578
- return (
579
- <ConsentProvider
580
- PreferencesModalComponent={MeuModalCustomizado}
581
- preferencesModalProps={{ variant: 'custom' }}
582
- >
583
- <MeuApp />
584
- </ConsentProvider>
585
- )
586
- }
587
-
588
- // Seu componente customizado
589
- function MeuModalCustomizado({ variant }) {
590
- const { isModalOpen, closePreferences, setPreference } = useConsent()
591
-
592
- return (
593
- <MyCustomDialog open={isModalOpen} onClose={closePreferences}>
594
- {/* Seu design personalizado aqui */}
595
- </MyCustomDialog>
596
- )
597
- }
598
- ```
599
-
600
- ### Desabilitar Modal Automático
601
-
602
- Para controle total, desabilite o modal automático:
603
-
604
- ```tsx
605
- <ConsentProvider disableAutomaticModal>
606
- <MeuApp />
607
- {/* Renderize seus componentes customizados onde quiser */}
608
- <MeuModalTotalmenteCustomizado />
609
- </ConsentProvider>
610
- ```
611
-
612
- ## �🔧 API Completa
613
-
614
- ### Components
615
-
616
- | Componente | Descrição | Props Principais |
617
- | --------------------------- | ------------------------------------------------ | ---------------------------------------------------------------------------------------- |
618
- | `ConsentProvider` | Provider principal do contexto | `initialState`, `texts`, `theme`, `hideBranding`, `PreferencesModalComponent`, `disableDeveloperGuidance`, callbacks |
619
- | `CookieBanner` | Banner de consentimento | `policyLinkUrl`, `blocking`, `hideBranding`, `debug`, pass-through MUI props |
620
- | `PreferencesModal` | Modal de preferências (incluído automaticamente) | `DialogProps`, `hideBranding` - **Opcional** |
621
- | `FloatingPreferencesButton` | Botão flutuante para abrir preferências | `position`, `hideWhenConsented`, `tooltip`, `icon`, `FabProps` |
622
- | `ConsentGate` | Renderização condicional por categoria | `category`, `children` |
623
-
624
- ### Hook `useConsent()`
625
-
626
- ```typescript
627
- interface ConsentContextValue {
628
- consented: boolean // usuário já consentiu?
629
- preferences: ConsentPreferences // preferências atuais
630
- isModalOpen: boolean // estado do modal de preferências
631
- acceptAll(): void // aceitar todas as categorias
632
- rejectAll(): void // recusar opcionais
633
- setPreference(cat: Category, value: boolean): void // definir categoria específica
634
- openPreferences(): void // abrir modal de preferências
635
- closePreferences(): void // fechar modal
636
- resetConsent(): void // resetar tudo
637
- }
638
- ```
639
-
640
- ### Hook `useConsentTexts()`
641
-
642
- ```typescript
643
- // Acesso aos textos contextuais
644
- const texts = useConsentTexts()
645
- console.log(texts.banner.title) // "Política de Cookies"
646
- ```
647
-
648
- ### Utilitários
649
-
650
- - `loadScript(id, src, category?, attrs?)` - Carrega scripts com consentimento inteligente
651
- - `defaultConsentTheme` - Tema padrão do Material-UI
652
- - Tipos TypeScript completos exportados## 🌐 SSR / Next.js
653
-
654
- Para evitar flash de conteúdo em SSR:
655
-
656
- ```tsx
657
- // pages/_app.tsx (Next.js)
658
- function MyApp({ Component, pageProps }) {
659
- return (
660
- <ConsentProvider
661
- initialState={{
662
- consented: false,
663
- preferences: { analytics: false, marketing: false },
664
- }}
665
- >
666
- <Component {...pageProps} />
667
- </ConsentProvider>
668
- )
669
- }
670
- ```
671
-
672
- ## ♿ Acessibilidade
673
-
674
- A biblioteca segue as melhores práticas de acessibilidade:
675
-
676
- - ✅ Navegação por teclado (Tab, Enter, Escape)
677
- - ✅ Leitores de tela (`aria-labelledby`, `aria-describedby`)
678
- - ✅ Foco gerenciado automaticamente
679
- - ✅ Contrastes adequados
680
- - ✅ Estrutura semântica correta
681
-
682
- ## 📚 Exemplos
683
-
684
- Confira exemplos completos no repositório:
685
-
686
- - [Básico com React](./examples/basic)
687
- - [Next.js com SSR](./examples/nextjs)
688
- - [Customização avançada](./examples/advanced)
689
- - [Integração com analytics](./examples/analytics)
690
-
691
- ## 🤝 Contribuição
692
-
693
- Contribuições são bem-vindas! Por favor:
694
-
695
- 1. Faça fork do projeto
696
- 2. Crie uma branch para sua feature (`git checkout -b feature/AmazingFeature`)
697
- 3. Commit suas mudanças (`git commit -m 'Add some AmazingFeature'`)
698
- 4. Push para a branch (`git push origin feature/AmazingFeature`)
699
- 5. Abra um Pull Request
167
+ Contribuições são bem-vindas! Sinta-se à vontade para abrir uma _issue_ ou um _pull request_.
700
168
 
701
169
  ## 📄 Licença
702
170
 
703
- Este projeto está licenciado sob a Licença MIT - veja o arquivo [LICENSE](LICENSE) para detalhes.
704
-
705
- ## 🙋‍♀️ Suporte
706
-
707
- - 📖 [Documentação](./docs)
708
- - 🐛 [Issues](https://github.com/lucianoedipo/react-lgpd-consent/issues)
709
- - 💬 [Discussões](https://github.com/lucianoedipo/react-lgpd-consent/discussions)
710
-
711
- ## 🔮 Roadmap
712
-
713
- ### ✅ v0.2.2 - Sistema de Orientações (Lançado!)
714
-
715
- **Implementado: Sistema inteligente de orientação para desenvolvedores**
716
-
717
- - ✅ **Console de Desenvolvimento**: Avisos automáticos e orientações
718
- - ✅ **UI Dinâmica**: Componentes se adaptam à configuração do projeto
719
- - ✅ **Hooks Avançados**: `useCategories()` e `useCategoryStatus()`
720
- - ✅ **Validação Automática**: Prevenção de bugs de configuração vs UI
721
-
722
- ### v0.2.3 - Compliance Avançado (Próxima Release)
723
-
724
- **Baseado em feedback de uso real em projetos governamentais:**
725
-
726
- - 📋 **Sistema de Logs de Auditoria**: Rastreamento completo para prestação de contas
727
- - 📜 **Templates Setoriais**: Textos pré-configurados (governo, saúde, educação)
728
- - 🎨 **Presets Visuais**: Identidade visual por setor (acessibilidade WCAG AAA)
729
- - 📊 **Dashboard para DPOs**: Relatórios automáticos de compliance
730
- - 🔌 **Mais Integrações**: Microsoft Clarity, Hotjar, Intercom, LinkedIn
731
-
732
- ### v0.3.0 - Multi-Regulamentação
733
-
734
- - 🌍 **Suporte GDPR/CCPA**: Detecção automática por geolocalização
735
- - 🏗️ **Sistema de Plugins**: Extensões de terceiros
736
- - 🎭 **Temas Avançados**: Design system tokens
737
-
738
- ### v0.4.0 - Enterprise
739
-
740
- - 📈 **Analytics Avançadas**: Dashboards completos
741
- - 🔄 **Sync Multi-Domínio**: Consentimento compartilhado
742
- - 🛡️ **Segurança Empresarial**: Criptografia, audit logs remotos
743
-
744
- > 📋 **Implementado na v0.2.2**: Sistema de orientações para developers e UI dinâmica
745
-
746
- ---
747
-
748
- <div align="center">
749
-
750
- **Feito com ❤️ para a comunidade React brasileira**
751
-
752
- </div>
171
+ Este projeto está sob a licença MIT. Veja o arquivo [LICENSE](LICENSE) para mais detalhes.