react-lgpd-consent 0.1.11 → 0.1.13
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 +0 -487
- package/dist/{PreferencesModal-IHXZDNYT.js → PreferencesModal-2V2W3262.js} +1 -1
- package/dist/{chunk-LRMSFSP2.js → chunk-XIHO7M77.js} +3 -6
- package/dist/index.cjs +4 -8
- package/dist/index.d.cts +135 -7
- package/dist/index.d.ts +135 -7
- package/dist/index.js +3 -4
- package/package.json +4 -4
package/README.md
CHANGED
|
@@ -1,487 +0,0 @@
|
|
|
1
|
-
# react-lgpd-consent 🍪
|
|
2
|
-
|
|
3
|
-
[](https://www.npmjs.com/package/react-lgpd-consent)
|
|
4
|
-
[](https://github.com/lucianoedipo/react-lgpd-consent/blob/main/LICENSE)
|
|
5
|
-
[
|
|
37
|
-
|
|
38
|
-
[](https://reactjs.org/)
|
|
39
|
-
[](https://mui.com/)
|
|
40
|
-
|
|
41
|
-
> **Biblioteca completa de consentimento de cookies para React e Next.js em conformidade com a LGPD**
|
|
42
|
-
|
|
43
|
-
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.
|
|
44
|
-
|
|
45
|
-
## ✨ Características Principais
|
|
46
|
-
|
|
47
|
-
- 🇧🇷 **Conformidade LGPD**: Respeita totalmente a legislação brasileira de proteção de dados
|
|
48
|
-
- ⚡ **SSR/Next.js Ready**: Suporte nativo a Server-Side Rendering sem flash de conteúdo
|
|
49
|
-
- 🎨 **Material-UI Integration**: Componentes prontos e customizáveis com MUI
|
|
50
|
-
- ♿ **Acessibilidade**: Navegação por teclado e leitores de tela nativamente suportados
|
|
51
|
-
- 🌐 **Internacionalização**: Textos totalmente customizáveis (padrão pt-BR)
|
|
52
|
-
- 🚀 **TypeScript**: API completamente tipada para melhor DX
|
|
53
|
-
- 📦 **Zero Config**: Funciona out-of-the-box com configurações sensatas
|
|
54
|
-
- 🎯 **Granular Control**: Controle individual de categorias (analytics, marketing, etc.)
|
|
55
|
-
- 🚫 **Banner Bloqueante**: Modo opcional para exigir interação antes de continuar
|
|
56
|
-
- 🎨 **Sistema de Temas**: Temas customizáveis para integração visual perfeita
|
|
57
|
-
- ⚡ **Carregamento Condicional**: Scripts só executam após consentimento explícito
|
|
58
|
-
- 🔌 **Modal Automático**: Modal de preferências incluído automaticamente com lazy loading
|
|
59
|
-
- 🎛️ **Botão Flutuante**: Componente opcional para acesso fácil às preferências
|
|
60
|
-
|
|
61
|
-
## 🚀 Instalação
|
|
62
|
-
|
|
63
|
-
```bash
|
|
64
|
-
npm install react-lgpd-consent
|
|
65
|
-
# ou
|
|
66
|
-
yarn add react-lgpd-consent
|
|
67
|
-
# ou
|
|
68
|
-
pnpm add react-lgpd-consent
|
|
69
|
-
```
|
|
70
|
-
|
|
71
|
-
### Dependências
|
|
72
|
-
|
|
73
|
-
```bash
|
|
74
|
-
npm install @mui/material js-cookie
|
|
75
|
-
```
|
|
76
|
-
|
|
77
|
-
## � Exemplo Completo
|
|
78
|
-
|
|
79
|
-
```tsx
|
|
80
|
-
import {
|
|
81
|
-
ConsentProvider,
|
|
82
|
-
CookieBanner,
|
|
83
|
-
FloatingPreferencesButton,
|
|
84
|
-
} from 'react-lgpd-consent'
|
|
85
|
-
|
|
86
|
-
function App() {
|
|
87
|
-
return (
|
|
88
|
-
<ConsentProvider>
|
|
89
|
-
<div>
|
|
90
|
-
<h1>Meu Site</h1>
|
|
91
|
-
<p>Conteúdo do site...</p>
|
|
92
|
-
|
|
93
|
-
{/* Banner de cookies - Modal incluído automaticamente! */}
|
|
94
|
-
<CookieBanner policyLinkUrl="/privacy-policy" blocking={true} />
|
|
95
|
-
|
|
96
|
-
{/* Botão flutuante opcional para acesso às preferências */}
|
|
97
|
-
<FloatingPreferencesButton position="bottom-right" />
|
|
98
|
-
</div>
|
|
99
|
-
</ConsentProvider>
|
|
100
|
-
)
|
|
101
|
-
}
|
|
102
|
-
```
|
|
103
|
-
|
|
104
|
-
## �📖 Uso Básico
|
|
105
|
-
|
|
106
|
-
### 1. Setup do Provider
|
|
107
|
-
|
|
108
|
-
```tsx
|
|
109
|
-
import { ConsentProvider } from 'react-lgpd-consent'
|
|
110
|
-
|
|
111
|
-
function App() {
|
|
112
|
-
return (
|
|
113
|
-
<ConsentProvider>
|
|
114
|
-
<YourApp />
|
|
115
|
-
</ConsentProvider>
|
|
116
|
-
)
|
|
117
|
-
}
|
|
118
|
-
```
|
|
119
|
-
|
|
120
|
-
### 2. Banner de Consentimento
|
|
121
|
-
|
|
122
|
-
```tsx
|
|
123
|
-
import { CookieBanner } from 'react-lgpd-consent'
|
|
124
|
-
|
|
125
|
-
function Layout() {
|
|
126
|
-
return (
|
|
127
|
-
<>
|
|
128
|
-
<YourContent />
|
|
129
|
-
<CookieBanner
|
|
130
|
-
policyLinkUrl="/politica-privacidade"
|
|
131
|
-
blocking={true} // Padrão: bloqueia até decisão
|
|
132
|
-
/>
|
|
133
|
-
{/* Modal de preferências incluído automaticamente! */}
|
|
134
|
-
</>
|
|
135
|
-
)
|
|
136
|
-
}
|
|
137
|
-
```
|
|
138
|
-
|
|
139
|
-
### 3. Uso do Hook
|
|
140
|
-
|
|
141
|
-
```tsx
|
|
142
|
-
import { useConsent } from 'react-lgpd-consent'
|
|
143
|
-
|
|
144
|
-
function MyComponent() {
|
|
145
|
-
const { consented, preferences, acceptAll, openPreferences } = useConsent()
|
|
146
|
-
|
|
147
|
-
return (
|
|
148
|
-
<div>
|
|
149
|
-
<p>Consentimento: {consented ? 'Dado' : 'Pendente'}</p>
|
|
150
|
-
<button onClick={acceptAll}>Aceitar Todos</button>
|
|
151
|
-
<button onClick={openPreferences}>Gerenciar Preferências</button>
|
|
152
|
-
</div>
|
|
153
|
-
)
|
|
154
|
-
}
|
|
155
|
-
```
|
|
156
|
-
|
|
157
|
-
> ✅ **O modal de preferências é incluído automaticamente pelo ConsentProvider!** Não é mais necessário renderizá-lo manualmente.
|
|
158
|
-
|
|
159
|
-
````
|
|
160
|
-
|
|
161
|
-
### 4. Carregamento Condicional de Scripts
|
|
162
|
-
|
|
163
|
-
```tsx
|
|
164
|
-
import { ConsentGate, loadScript } from 'react-lgpd-consent'
|
|
165
|
-
|
|
166
|
-
function Analytics() {
|
|
167
|
-
return (
|
|
168
|
-
<ConsentGate category="analytics">
|
|
169
|
-
<GoogleAnalytics />
|
|
170
|
-
</ConsentGate>
|
|
171
|
-
)
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
// Ou carregando scripts que aguardam consentimento
|
|
175
|
-
function MyComponent() {
|
|
176
|
-
const { preferences, consented } = useConsent()
|
|
177
|
-
|
|
178
|
-
useEffect(() => {
|
|
179
|
-
if (consented && preferences.analytics) {
|
|
180
|
-
loadConditionalScript(
|
|
181
|
-
'ga',
|
|
182
|
-
'https://www.googletagmanager.com/gtag/js?id=GA_ID',
|
|
183
|
-
() => preferences.analytics, // Condição que aguarda
|
|
184
|
-
)
|
|
185
|
-
}
|
|
186
|
-
}, [preferences, consented])
|
|
187
|
-
}
|
|
188
|
-
````
|
|
189
|
-
|
|
190
|
-
## 🎨 Customização
|
|
191
|
-
|
|
192
|
-
### Banner Bloqueante vs Não-bloqueante
|
|
193
|
-
|
|
194
|
-
```tsx
|
|
195
|
-
// Banner bloqueante (padrão) - impede interação até decisão
|
|
196
|
-
<CookieBanner blocking={true} />
|
|
197
|
-
|
|
198
|
-
// Banner não-intrusivo - permite navegação
|
|
199
|
-
<CookieBanner blocking={false} />
|
|
200
|
-
```
|
|
201
|
-
|
|
202
|
-
### Tema Personalizado
|
|
203
|
-
|
|
204
|
-
```tsx
|
|
205
|
-
import { ConsentProvider, defaultConsentTheme } from 'react-lgpd-consent'
|
|
206
|
-
import { createTheme } from '@mui/material/styles'
|
|
207
|
-
|
|
208
|
-
const meuTema = createTheme({
|
|
209
|
-
...defaultConsentTheme,
|
|
210
|
-
palette: {
|
|
211
|
-
...defaultConsentTheme.palette,
|
|
212
|
-
primary: {
|
|
213
|
-
main: '#1976d2', // Sua cor principal
|
|
214
|
-
},
|
|
215
|
-
},
|
|
216
|
-
})
|
|
217
|
-
|
|
218
|
-
<ConsentProvider theme={meuTema}>
|
|
219
|
-
<App />
|
|
220
|
-
</ConsentProvider>
|
|
221
|
-
```
|
|
222
|
-
|
|
223
|
-
### Textos Personalizados
|
|
224
|
-
|
|
225
|
-
```tsx
|
|
226
|
-
<ConsentProvider
|
|
227
|
-
texts={{
|
|
228
|
-
bannerMessage: "Utilizamos cookies para melhorar sua experiência.",
|
|
229
|
-
acceptAll: "Aceitar Todos",
|
|
230
|
-
declineAll: "Recusar Opcionais",
|
|
231
|
-
preferences: "Configurar"
|
|
232
|
-
}}
|
|
233
|
-
>
|
|
234
|
-
```
|
|
235
|
-
|
|
236
|
-
### Configuração do Cookie
|
|
237
|
-
|
|
238
|
-
```tsx
|
|
239
|
-
<ConsentProvider
|
|
240
|
-
cookie={{
|
|
241
|
-
name: 'meuSiteConsent',
|
|
242
|
-
maxAgeDays: 180,
|
|
243
|
-
sameSite: 'Strict'
|
|
244
|
-
}}
|
|
245
|
-
>
|
|
246
|
-
```
|
|
247
|
-
|
|
248
|
-
### Callbacks
|
|
249
|
-
|
|
250
|
-
```tsx
|
|
251
|
-
<ConsentProvider
|
|
252
|
-
onConsentGiven={(state) => {
|
|
253
|
-
console.log('Consentimento dado:', state)
|
|
254
|
-
// Inicializar analytics, etc.
|
|
255
|
-
}}
|
|
256
|
-
onPreferencesSaved={(prefs) => {
|
|
257
|
-
console.log('Preferências salvas:', prefs)
|
|
258
|
-
}}
|
|
259
|
-
>
|
|
260
|
-
```
|
|
261
|
-
|
|
262
|
-
## � Banner Bloqueante
|
|
263
|
-
|
|
264
|
-
Para cenários onde é necessário bloquear o acesso até obter consentimento explícito:
|
|
265
|
-
|
|
266
|
-
```tsx
|
|
267
|
-
<CookieBanner blocking />
|
|
268
|
-
```
|
|
269
|
-
|
|
270
|
-
Com `blocking={true}`, o banner:
|
|
271
|
-
|
|
272
|
-
- Cria um overlay escuro sobre todo o conteúdo
|
|
273
|
-
- Impede interação com o resto da página
|
|
274
|
-
- É útil para casos críticos onde consentimento é obrigatório
|
|
275
|
-
|
|
276
|
-
## 🎨 Sistema de Temas
|
|
277
|
-
|
|
278
|
-
### Tema Personalizado
|
|
279
|
-
|
|
280
|
-
```tsx
|
|
281
|
-
import { createTheme } from '@mui/material/styles'
|
|
282
|
-
|
|
283
|
-
const meuTema = createTheme({
|
|
284
|
-
palette: {
|
|
285
|
-
primary: { main: '#2196f3' },
|
|
286
|
-
secondary: { main: '#f50057' },
|
|
287
|
-
},
|
|
288
|
-
})
|
|
289
|
-
|
|
290
|
-
<ConsentProvider theme={meuTema}>
|
|
291
|
-
<App />
|
|
292
|
-
</ConsentProvider>
|
|
293
|
-
```
|
|
294
|
-
|
|
295
|
-
### Tema Padrão
|
|
296
|
-
|
|
297
|
-
O tema padrão do react-lgpd-consent está disponível para customização:
|
|
298
|
-
|
|
299
|
-
```tsx
|
|
300
|
-
import { defaultConsentTheme } from 'react-lgpd-consent'
|
|
301
|
-
|
|
302
|
-
const temaCustomizado = createTheme({
|
|
303
|
-
...defaultConsentTheme,
|
|
304
|
-
palette: {
|
|
305
|
-
...defaultConsentTheme.palette,
|
|
306
|
-
primary: { main: '#your-color' },
|
|
307
|
-
},
|
|
308
|
-
})
|
|
309
|
-
```
|
|
310
|
-
|
|
311
|
-
## ⚡ Carregamento Inteligente de Scripts
|
|
312
|
-
|
|
313
|
-
### Função loadScript
|
|
314
|
-
|
|
315
|
-
Scripts aguardam automaticamente o **consentimento finalizado** (banner fechado ou preferências salvas):
|
|
316
|
-
|
|
317
|
-
```tsx
|
|
318
|
-
import { loadScript } from 'react-lgpd-consent'
|
|
319
|
-
|
|
320
|
-
// Carrega script apenas após consentimento para analytics
|
|
321
|
-
await loadScript(
|
|
322
|
-
'gtag',
|
|
323
|
-
'https://www.googletagmanager.com/gtag/js?id=GA_ID',
|
|
324
|
-
'analytics', // Categoria obrigatória
|
|
325
|
-
)
|
|
326
|
-
|
|
327
|
-
// Script geral (sempre carrega após consentimento)
|
|
328
|
-
await loadScript('custom-script', 'https://example.com/script.js')
|
|
329
|
-
```
|
|
330
|
-
|
|
331
|
-
### Comportamento Inteligente
|
|
332
|
-
|
|
333
|
-
- **Aguarda decisão final**: Não executa durante mudanças no modal de preferências
|
|
334
|
-
- **Só executa após salvar**: Scripts só rodam quando o usuário finaliza as preferências
|
|
335
|
-
- **Baseado em categoria**: Respeita as permissões por categoria
|
|
336
|
-
|
|
337
|
-
## 🎨 Personalização Total
|
|
338
|
-
|
|
339
|
-
### Modal de Preferências Customizado
|
|
340
|
-
|
|
341
|
-
Substitua completamente o modal padrão com seu próprio componente:
|
|
342
|
-
|
|
343
|
-
```tsx
|
|
344
|
-
import { ConsentProvider, useConsent } from 'react-lgpd-consent'
|
|
345
|
-
import MeuModalCustomizado from './MeuModalCustomizado'
|
|
346
|
-
|
|
347
|
-
function App() {
|
|
348
|
-
return (
|
|
349
|
-
<ConsentProvider
|
|
350
|
-
PreferencesModalComponent={MeuModalCustomizado}
|
|
351
|
-
preferencesModalProps={{ variant: 'custom' }}
|
|
352
|
-
>
|
|
353
|
-
<MeuApp />
|
|
354
|
-
</ConsentProvider>
|
|
355
|
-
)
|
|
356
|
-
}
|
|
357
|
-
|
|
358
|
-
// Seu componente customizado
|
|
359
|
-
function MeuModalCustomizado({ variant }) {
|
|
360
|
-
const { isModalOpen, closePreferences, setPreference } = useConsent()
|
|
361
|
-
|
|
362
|
-
return (
|
|
363
|
-
<MyCustomDialog open={isModalOpen} onClose={closePreferences}>
|
|
364
|
-
{/* Seu design personalizado aqui */}
|
|
365
|
-
</MyCustomDialog>
|
|
366
|
-
)
|
|
367
|
-
}
|
|
368
|
-
```
|
|
369
|
-
|
|
370
|
-
### Desabilitar Modal Automático
|
|
371
|
-
|
|
372
|
-
Para controle total, desabilite o modal automático:
|
|
373
|
-
|
|
374
|
-
```tsx
|
|
375
|
-
<ConsentProvider disableAutomaticModal>
|
|
376
|
-
<MeuApp />
|
|
377
|
-
{/* Renderize seus componentes customizados onde quiser */}
|
|
378
|
-
<MeuModalTotalmenteCustomizado />
|
|
379
|
-
</ConsentProvider>
|
|
380
|
-
```
|
|
381
|
-
|
|
382
|
-
## �🔧 API Completa
|
|
383
|
-
|
|
384
|
-
### Components
|
|
385
|
-
|
|
386
|
-
| Componente | Descrição | Props Principais |
|
|
387
|
-
| --------------------------- | ------------------------------------------------ | ---------------------------------------------------------------------------------------- |
|
|
388
|
-
| `ConsentProvider` | Provider principal do contexto | `initialState`, `texts`, `theme`, `hideBranding`, `PreferencesModalComponent`, callbacks |
|
|
389
|
-
| `CookieBanner` | Banner de consentimento | `policyLinkUrl`, `blocking`, `hideBranding`, `debug`, pass-through MUI props |
|
|
390
|
-
| `PreferencesModal` | Modal de preferências (incluído automaticamente) | `DialogProps`, `hideBranding` - **Opcional** |
|
|
391
|
-
| `FloatingPreferencesButton` | Botão flutuante para abrir preferências | `position`, `hideWhenConsented`, `tooltip`, `icon`, `FabProps` |
|
|
392
|
-
| `ConsentGate` | Renderização condicional por categoria | `category`, `children` |
|
|
393
|
-
|
|
394
|
-
### Hook `useConsent()`
|
|
395
|
-
|
|
396
|
-
```typescript
|
|
397
|
-
interface ConsentContextValue {
|
|
398
|
-
consented: boolean // usuário já consentiu?
|
|
399
|
-
preferences: ConsentPreferences // preferências atuais
|
|
400
|
-
isModalOpen: boolean // estado do modal de preferências
|
|
401
|
-
acceptAll(): void // aceitar todas as categorias
|
|
402
|
-
rejectAll(): void // recusar opcionais
|
|
403
|
-
setPreference(cat: Category, value: boolean): void // definir categoria específica
|
|
404
|
-
openPreferences(): void // abrir modal de preferências
|
|
405
|
-
closePreferences(): void // fechar modal
|
|
406
|
-
resetConsent(): void // resetar tudo
|
|
407
|
-
}
|
|
408
|
-
```
|
|
409
|
-
|
|
410
|
-
### Hook `useConsentTexts()`
|
|
411
|
-
|
|
412
|
-
```typescript
|
|
413
|
-
// Acesso aos textos contextuais
|
|
414
|
-
const texts = useConsentTexts()
|
|
415
|
-
console.log(texts.banner.title) // "Política de Cookies"
|
|
416
|
-
```
|
|
417
|
-
|
|
418
|
-
### Utilitários
|
|
419
|
-
|
|
420
|
-
- `loadScript(id, src, category?, attrs?)` - Carrega scripts com consentimento inteligente
|
|
421
|
-
- `defaultConsentTheme` - Tema padrão do Material-UI
|
|
422
|
-
- Tipos TypeScript completos exportados## 🌐 SSR / Next.js
|
|
423
|
-
|
|
424
|
-
Para evitar flash de conteúdo em SSR:
|
|
425
|
-
|
|
426
|
-
```tsx
|
|
427
|
-
// pages/_app.tsx (Next.js)
|
|
428
|
-
function MyApp({ Component, pageProps }) {
|
|
429
|
-
return (
|
|
430
|
-
<ConsentProvider
|
|
431
|
-
initialState={{
|
|
432
|
-
consented: false,
|
|
433
|
-
preferences: { analytics: false, marketing: false },
|
|
434
|
-
}}
|
|
435
|
-
>
|
|
436
|
-
<Component {...pageProps} />
|
|
437
|
-
</ConsentProvider>
|
|
438
|
-
)
|
|
439
|
-
}
|
|
440
|
-
```
|
|
441
|
-
|
|
442
|
-
## ♿ Acessibilidade
|
|
443
|
-
|
|
444
|
-
A biblioteca segue as melhores práticas de acessibilidade:
|
|
445
|
-
|
|
446
|
-
- ✅ Navegação por teclado (Tab, Enter, Escape)
|
|
447
|
-
- ✅ Leitores de tela (`aria-labelledby`, `aria-describedby`)
|
|
448
|
-
- ✅ Foco gerenciado automaticamente
|
|
449
|
-
- ✅ Contrastes adequados
|
|
450
|
-
- ✅ Estrutura semântica correta
|
|
451
|
-
|
|
452
|
-
## 📚 Exemplos
|
|
453
|
-
|
|
454
|
-
Confira exemplos completos no repositório:
|
|
455
|
-
|
|
456
|
-
- [Básico com React](./examples/basic)
|
|
457
|
-
- [Next.js com SSR](./examples/nextjs)
|
|
458
|
-
- [Customização avançada](./examples/advanced)
|
|
459
|
-
- [Integração com analytics](./examples/analytics)
|
|
460
|
-
|
|
461
|
-
## 🤝 Contribuição
|
|
462
|
-
|
|
463
|
-
Contribuições são bem-vindas! Por favor:
|
|
464
|
-
|
|
465
|
-
1. Faça fork do projeto
|
|
466
|
-
2. Crie uma branch para sua feature (`git checkout -b feature/AmazingFeature`)
|
|
467
|
-
3. Commit suas mudanças (`git commit -m 'Add some AmazingFeature'`)
|
|
468
|
-
4. Push para a branch (`git push origin feature/AmazingFeature`)
|
|
469
|
-
5. Abra um Pull Request
|
|
470
|
-
|
|
471
|
-
## 📄 Licença
|
|
472
|
-
|
|
473
|
-
Este projeto está licenciado sob a Licença MIT - veja o arquivo [LICENSE](LICENSE) para detalhes.
|
|
474
|
-
|
|
475
|
-
## 🙋♀️ Suporte
|
|
476
|
-
|
|
477
|
-
- 📖 [Documentação](./docs)
|
|
478
|
-
- 🐛 [Issues](https://github.com/lucianoedipo/react-lgpd-consent/issues)
|
|
479
|
-
- 💬 [Discussões](https://github.com/lucianoedipo/react-lgpd-consent/discussions)
|
|
480
|
-
|
|
481
|
-
---
|
|
482
|
-
|
|
483
|
-
<div align="center">
|
|
484
|
-
|
|
485
|
-
**Feito com ❤️ para a comunidade React brasileira**
|
|
486
|
-
|
|
487
|
-
</div>
|
|
@@ -55,12 +55,10 @@ var defaultConsentTheme = createTheme({
|
|
|
55
55
|
palette: {
|
|
56
56
|
primary: {
|
|
57
57
|
main: "#1976d2",
|
|
58
|
-
// Azul institucional
|
|
59
58
|
contrastText: "#ffffff"
|
|
60
59
|
},
|
|
61
60
|
secondary: {
|
|
62
61
|
main: "#dc004e",
|
|
63
|
-
// Rosa/vermelho para ações importantes
|
|
64
62
|
contrastText: "#ffffff"
|
|
65
63
|
},
|
|
66
64
|
background: {
|
|
@@ -84,7 +82,6 @@ var defaultConsentTheme = createTheme({
|
|
|
84
82
|
button: {
|
|
85
83
|
fontWeight: 500,
|
|
86
84
|
textTransform: "none"
|
|
87
|
-
// Manter capitalização original
|
|
88
85
|
}
|
|
89
86
|
},
|
|
90
87
|
components: {
|
|
@@ -123,7 +120,7 @@ var defaultConsentTheme = createTheme({
|
|
|
123
120
|
// src/context/ConsentContext.tsx
|
|
124
121
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
125
122
|
var PreferencesModal = React.lazy(
|
|
126
|
-
() => import("./PreferencesModal-
|
|
123
|
+
() => import("./PreferencesModal-2V2W3262.js").then((m) => ({
|
|
127
124
|
default: m.PreferencesModal
|
|
128
125
|
}))
|
|
129
126
|
);
|
|
@@ -228,7 +225,7 @@ function ConsentProvider({
|
|
|
228
225
|
const [state, dispatch] = React.useReducer(reducer, boot);
|
|
229
226
|
const [isHydrated, setIsHydrated] = React.useState(false);
|
|
230
227
|
React.useEffect(() => {
|
|
231
|
-
if (
|
|
228
|
+
if (!initialState) {
|
|
232
229
|
const saved = readConsentCookie(cookie.name);
|
|
233
230
|
if (saved?.consented) {
|
|
234
231
|
console.log("\u{1F680} Immediate hydration: Cookie found", saved);
|
|
@@ -371,7 +368,7 @@ function Branding({ variant, hidden = false }) {
|
|
|
371
368
|
/* @__PURE__ */ jsx2(
|
|
372
369
|
Link,
|
|
373
370
|
{
|
|
374
|
-
href: "https://ledipo.eti.br",
|
|
371
|
+
href: "https://www.ledipo.eti.br",
|
|
375
372
|
target: "_blank",
|
|
376
373
|
rel: "noopener noreferrer",
|
|
377
374
|
sx: (theme) => ({
|
package/dist/index.cjs
CHANGED
|
@@ -81,12 +81,10 @@ var init_theme = __esm({
|
|
|
81
81
|
palette: {
|
|
82
82
|
primary: {
|
|
83
83
|
main: "#1976d2",
|
|
84
|
-
// Azul institucional
|
|
85
84
|
contrastText: "#ffffff"
|
|
86
85
|
},
|
|
87
86
|
secondary: {
|
|
88
87
|
main: "#dc004e",
|
|
89
|
-
// Rosa/vermelho para ações importantes
|
|
90
88
|
contrastText: "#ffffff"
|
|
91
89
|
},
|
|
92
90
|
background: {
|
|
@@ -110,7 +108,6 @@ var init_theme = __esm({
|
|
|
110
108
|
button: {
|
|
111
109
|
fontWeight: 500,
|
|
112
110
|
textTransform: "none"
|
|
113
|
-
// Manter capitalização original
|
|
114
111
|
}
|
|
115
112
|
},
|
|
116
113
|
components: {
|
|
@@ -165,7 +162,7 @@ function Branding({ variant, hidden = false }) {
|
|
|
165
162
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
166
163
|
import_Link.default,
|
|
167
164
|
{
|
|
168
|
-
href: "https://ledipo.eti.br",
|
|
165
|
+
href: "https://www.ledipo.eti.br",
|
|
169
166
|
target: "_blank",
|
|
170
167
|
rel: "noopener noreferrer",
|
|
171
168
|
sx: (theme) => ({
|
|
@@ -403,7 +400,7 @@ function ConsentProvider({
|
|
|
403
400
|
const [state, dispatch] = React.useReducer(reducer, boot);
|
|
404
401
|
const [isHydrated, setIsHydrated] = React.useState(false);
|
|
405
402
|
React.useEffect(() => {
|
|
406
|
-
if (
|
|
403
|
+
if (!initialState) {
|
|
407
404
|
const saved = readConsentCookie(cookie.name);
|
|
408
405
|
if (saved?.consented) {
|
|
409
406
|
console.log("\u{1F680} Immediate hydration: Cookie found", saved);
|
|
@@ -671,16 +668,16 @@ function CookieBanner({
|
|
|
671
668
|
init_PreferencesModal();
|
|
672
669
|
|
|
673
670
|
// src/components/FloatingPreferencesButton.tsx
|
|
671
|
+
var import_CookieOutlined = __toESM(require("@mui/icons-material/CookieOutlined"), 1);
|
|
674
672
|
var import_Fab = __toESM(require("@mui/material/Fab"), 1);
|
|
675
673
|
var import_Tooltip = __toESM(require("@mui/material/Tooltip"), 1);
|
|
676
|
-
var import_Settings = __toESM(require("@mui/icons-material/Settings"), 1);
|
|
677
674
|
var import_styles3 = require("@mui/material/styles");
|
|
678
675
|
init_useConsent();
|
|
679
676
|
var import_jsx_runtime5 = require("react/jsx-runtime");
|
|
680
677
|
function FloatingPreferencesButton({
|
|
681
678
|
position = "bottom-right",
|
|
682
679
|
offset = 24,
|
|
683
|
-
icon = /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
680
|
+
icon = /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_CookieOutlined.default, {}),
|
|
684
681
|
tooltip,
|
|
685
682
|
FabProps,
|
|
686
683
|
hideWhenConsented = false
|
|
@@ -695,7 +692,6 @@ function FloatingPreferencesButton({
|
|
|
695
692
|
const styles = {
|
|
696
693
|
position: "fixed",
|
|
697
694
|
zIndex: 1200
|
|
698
|
-
// Abaixo do modal mas acima do conteúdo
|
|
699
695
|
};
|
|
700
696
|
switch (position) {
|
|
701
697
|
case "bottom-left":
|
package/dist/index.d.cts
CHANGED
|
@@ -6,6 +6,16 @@ import { FabProps } from '@mui/material/Fab';
|
|
|
6
6
|
import * as React$1 from 'react';
|
|
7
7
|
import * as _mui_material_styles from '@mui/material/styles';
|
|
8
8
|
|
|
9
|
+
/**
|
|
10
|
+
* Props para o componente CookieBanner.
|
|
11
|
+
*
|
|
12
|
+
* @property policyLinkUrl URL da política de privacidade (opcional).
|
|
13
|
+
* @property debug Força exibição do banner para QA/debug (opcional).
|
|
14
|
+
* @property blocking Se true, bloqueia interação até decisão do usuário (default: true).
|
|
15
|
+
* @property hideBranding Se true, oculta o branding "fornecido por LÉdipO.eti.br" (opcional).
|
|
16
|
+
* @property SnackbarProps Props adicionais para o componente MUI Snackbar (opcional).
|
|
17
|
+
* @property PaperProps Props adicionais para o componente MUI Paper (opcional).
|
|
18
|
+
*/
|
|
9
19
|
interface CookieBannerProps {
|
|
10
20
|
policyLinkUrl?: string;
|
|
11
21
|
debug?: boolean;
|
|
@@ -14,29 +24,79 @@ interface CookieBannerProps {
|
|
|
14
24
|
SnackbarProps?: Partial<SnackbarProps>;
|
|
15
25
|
PaperProps?: Partial<PaperProps>;
|
|
16
26
|
}
|
|
27
|
+
/**
|
|
28
|
+
* Banner de consentimento de cookies conforme LGPD.
|
|
29
|
+
*
|
|
30
|
+
* Exibe mensagem informativa, botões de ação e link para política de privacidade.
|
|
31
|
+
* Compatível com modo bloqueante (overlay) e não bloqueante (Snackbar).
|
|
32
|
+
*
|
|
33
|
+
* - Textos em pt-BR, customizáveis via contexto.
|
|
34
|
+
* - Acessível e responsivo.
|
|
35
|
+
* - Branding opcional.
|
|
36
|
+
*
|
|
37
|
+
* @param props Propriedades do banner de consentimento.
|
|
38
|
+
*/
|
|
17
39
|
declare function CookieBanner({ policyLinkUrl, debug, blocking, // Por padrão, bloqueia até decisão
|
|
18
40
|
hideBranding, SnackbarProps, PaperProps, }: Readonly<CookieBannerProps>): react_jsx_runtime.JSX.Element | null;
|
|
19
41
|
|
|
42
|
+
/**
|
|
43
|
+
* Props para o componente PreferencesModal.
|
|
44
|
+
*
|
|
45
|
+
* @property DialogProps Props opcionais para customizar o Dialog do Material-UI.
|
|
46
|
+
* @property hideBranding Se true, oculta o branding "fornecido por LÉdipO.eti.br".
|
|
47
|
+
*/
|
|
20
48
|
interface PreferencesModalProps {
|
|
21
49
|
DialogProps?: Partial<DialogProps>;
|
|
22
50
|
hideBranding?: boolean;
|
|
23
51
|
}
|
|
52
|
+
/**
|
|
53
|
+
* Modal de preferências de cookies.
|
|
54
|
+
*
|
|
55
|
+
* Permite ao usuário ajustar suas preferências de consentimento para cookies analíticos e de marketing.
|
|
56
|
+
* Utiliza Material-UI Dialog, switches para cada categoria e textos customizáveis via contexto.
|
|
57
|
+
* Acessível, responsivo e compatível com SSR.
|
|
58
|
+
*
|
|
59
|
+
* @param props Props do modal, incluindo customização do Dialog e opção de ocultar branding.
|
|
60
|
+
*/
|
|
24
61
|
declare function PreferencesModal({ DialogProps, hideBranding, }: Readonly<PreferencesModalProps>): react_jsx_runtime.JSX.Element;
|
|
25
62
|
|
|
63
|
+
/**
|
|
64
|
+
* Props para o componente FloatingPreferencesButton.
|
|
65
|
+
*
|
|
66
|
+
* Permite configurar posição, ícone, tooltip, e comportamento de exibição do botão flutuante
|
|
67
|
+
* para abrir o modal de preferências de cookies LGPD.
|
|
68
|
+
*
|
|
69
|
+
* Todos os campos são opcionais e possuem valores padrão.
|
|
70
|
+
*/
|
|
26
71
|
interface FloatingPreferencesButtonProps {
|
|
27
72
|
/** Posição do botão flutuante. Padrão: 'bottom-right' */
|
|
28
73
|
position?: 'bottom-left' | 'bottom-right' | 'top-left' | 'top-right';
|
|
29
74
|
/** Offset da borda em pixels. Padrão: 24 */
|
|
30
75
|
offset?: number;
|
|
31
|
-
/** Ícone customizado. Padrão:
|
|
76
|
+
/** Ícone customizado. Padrão: CookieOutlined */
|
|
32
77
|
icon?: React.ReactNode;
|
|
33
|
-
/** Tooltip customizado */
|
|
78
|
+
/** Tooltip customizado exibido ao passar o mouse */
|
|
34
79
|
tooltip?: string;
|
|
35
|
-
/** Props
|
|
80
|
+
/** Props adicionais para o Fab do MUI */
|
|
36
81
|
FabProps?: Partial<FabProps>;
|
|
37
82
|
/** Se deve esconder quando consentimento já foi dado. Padrão: false */
|
|
38
83
|
hideWhenConsented?: boolean;
|
|
39
84
|
}
|
|
85
|
+
/**
|
|
86
|
+
* Botão flutuante para abrir o modal de preferências de cookies.
|
|
87
|
+
*
|
|
88
|
+
* Permite ao usuário acessar rapidamente as configurações de consentimento LGPD.
|
|
89
|
+
* Pode ser posicionado em qualquer canto da tela e customizado via props.
|
|
90
|
+
*
|
|
91
|
+
* @param position Posição do botão na tela. Padrão: 'bottom-right'.
|
|
92
|
+
* @param offset Distância da borda em pixels. Padrão: 24.
|
|
93
|
+
* @param icon Ícone customizado para o botão. Padrão: CookieOutlined.
|
|
94
|
+
* @param tooltip Texto do tooltip exibido ao passar o mouse. Padrão: 'Gerenciar Preferências de Cookies'.
|
|
95
|
+
* @param FabProps Props adicionais para o componente Fab do MUI.
|
|
96
|
+
* @param hideWhenConsented Se verdadeiro, esconde o botão após consentimento. Padrão: false.
|
|
97
|
+
*
|
|
98
|
+
* @returns JSX.Element | null
|
|
99
|
+
*/
|
|
40
100
|
declare function FloatingPreferencesButton({ position, offset, icon, tooltip, FabProps, hideWhenConsented, }: Readonly<FloatingPreferencesButtonProps>): react_jsx_runtime.JSX.Element | null;
|
|
41
101
|
|
|
42
102
|
/**
|
|
@@ -62,6 +122,25 @@ interface ConsentState {
|
|
|
62
122
|
}
|
|
63
123
|
/**
|
|
64
124
|
* Textos utilizados na interface de consentimento.
|
|
125
|
+
*
|
|
126
|
+
* @remarks
|
|
127
|
+
* Esta interface define todos os textos exibidos na UI do banner e modal de consentimento.
|
|
128
|
+
* Os campos opcionais permitem adequação à ANPD e customização conforme necessidade do projeto.
|
|
129
|
+
*
|
|
130
|
+
* @property bannerMessage - Mensagem principal exibida no banner de consentimento.
|
|
131
|
+
* @property acceptAll - Texto do botão para aceitar todos os cookies.
|
|
132
|
+
* @property declineAll - Texto do botão para recusar todos os cookies.
|
|
133
|
+
* @property preferences - Texto do botão para abrir preferências.
|
|
134
|
+
* @property policyLink - (Opcional) Link para política de privacidade.
|
|
135
|
+
* @property modalTitle - Título do modal de preferências.
|
|
136
|
+
* @property modalIntro - Texto introdutório do modal.
|
|
137
|
+
* @property save - Texto do botão para salvar preferências.
|
|
138
|
+
* @property necessaryAlwaysOn - Texto explicativo para cookies necessários.
|
|
139
|
+
* @property controllerInfo - (Opcional) Informação sobre o controlador dos dados.
|
|
140
|
+
* @property dataTypes - (Opcional) Tipos de dados coletados.
|
|
141
|
+
* @property thirdPartySharing - (Opcional) Compartilhamento com terceiros.
|
|
142
|
+
* @property userRights - (Opcional) Direitos do titular dos dados.
|
|
143
|
+
* @property contactInfo - (Opcional) Informações de contato do DPO.
|
|
65
144
|
*/
|
|
66
145
|
interface ConsentTexts {
|
|
67
146
|
bannerMessage: string;
|
|
@@ -142,8 +221,44 @@ interface ConsentContextValue {
|
|
|
142
221
|
resetConsent: () => void;
|
|
143
222
|
}
|
|
144
223
|
|
|
224
|
+
/**
|
|
225
|
+
* Provider principal do contexto de consentimento LGPD.
|
|
226
|
+
*
|
|
227
|
+
* Gerencia o estado global de consentimento de cookies, preferências do usuário,
|
|
228
|
+
* textos customizáveis e integração com SSR. Permite customização do modal de preferências,
|
|
229
|
+
* callbacks externos e opções de cookie.
|
|
230
|
+
*
|
|
231
|
+
* @param props Propriedades do ConsentProvider (ver ConsentProviderProps)
|
|
232
|
+
* @returns JSX.Element
|
|
233
|
+
*
|
|
234
|
+
* @example
|
|
235
|
+
* <ConsentProvider>
|
|
236
|
+
* <App />
|
|
237
|
+
* </ConsentProvider>
|
|
238
|
+
*/
|
|
145
239
|
declare function ConsentProvider({ initialState, texts: textsProp, theme, PreferencesModalComponent, preferencesModalProps, disableAutomaticModal, hideBranding, onConsentGiven, onPreferencesSaved, cookie: cookieOpts, children, }: Readonly<ConsentProviderProps>): react_jsx_runtime.JSX.Element;
|
|
146
240
|
|
|
241
|
+
/**
|
|
242
|
+
* Hook principal para acessar e manipular o estado de consentimento de cookies.
|
|
243
|
+
*
|
|
244
|
+
* Retorna o estado atual do consentimento, preferências do usuário e métodos para
|
|
245
|
+
* aceitar, recusar, modificar ou resetar consentimentos. Ideal para integração
|
|
246
|
+
* com componentes customizados ou lógica de negócio.
|
|
247
|
+
*
|
|
248
|
+
* @returns {ConsentContextValue} Estado e ações do consentimento.
|
|
249
|
+
*
|
|
250
|
+
* @example
|
|
251
|
+
* const {
|
|
252
|
+
* consented,
|
|
253
|
+
* preferences,
|
|
254
|
+
* acceptAll,
|
|
255
|
+
* rejectAll,
|
|
256
|
+
* setPreference,
|
|
257
|
+
* openPreferences,
|
|
258
|
+
* closePreferences,
|
|
259
|
+
* resetConsent,
|
|
260
|
+
* } = useConsent();
|
|
261
|
+
*/
|
|
147
262
|
declare function useConsent(): ConsentContextValue;
|
|
148
263
|
/**
|
|
149
264
|
* Hook para acessar textos customizados do ConsentProvider.
|
|
@@ -162,14 +277,27 @@ declare function ConsentGate(props: Readonly<{
|
|
|
162
277
|
}>): react_jsx_runtime.JSX.Element | null;
|
|
163
278
|
|
|
164
279
|
/**
|
|
165
|
-
* Carrega um script
|
|
166
|
-
*
|
|
280
|
+
* Carrega dinamicamente um script externo após o consentimento do usuário ser finalizado.
|
|
281
|
+
*
|
|
282
|
+
* Aguarda até que o usuário tome uma decisão definitiva (banner fechado ou preferências salvas)
|
|
283
|
+
* antes de inserir o script na página. Permite restringir o carregamento por categoria de consentimento.
|
|
284
|
+
*
|
|
285
|
+
* @param id - Identificador único do elemento script a ser criado.
|
|
286
|
+
* @param src - URL do script externo.
|
|
287
|
+
* @param category - Categoria de consentimento exigida para o script ('analytics', 'marketing' ou null).
|
|
288
|
+
* @param attrs - Atributos adicionais a serem aplicados ao elemento script.
|
|
289
|
+
* @returns Promise que resolve quando o script é carregado ou rejeita se o consentimento não for dado.
|
|
167
290
|
*/
|
|
168
291
|
declare function loadScript(id: string, src: string, category?: 'analytics' | 'marketing' | null, attrs?: Record<string, string>): Promise<void>;
|
|
169
292
|
|
|
170
293
|
/**
|
|
171
|
-
* Tema padrão
|
|
172
|
-
*
|
|
294
|
+
* Tema padrão utilizado pelos componentes de consentimento da biblioteca.
|
|
295
|
+
*
|
|
296
|
+
* Inclui configurações de cores, tipografia e estilos para componentes Material-UI,
|
|
297
|
+
* garantindo aparência consistente e acessível conforme guidelines LGPD.
|
|
298
|
+
*
|
|
299
|
+
* @remarks
|
|
300
|
+
* Pode ser sobrescrito via ThemeProvider externo se necessário.
|
|
173
301
|
*/
|
|
174
302
|
declare const defaultConsentTheme: _mui_material_styles.Theme;
|
|
175
303
|
|
package/dist/index.d.ts
CHANGED
|
@@ -6,6 +6,16 @@ import { FabProps } from '@mui/material/Fab';
|
|
|
6
6
|
import * as React$1 from 'react';
|
|
7
7
|
import * as _mui_material_styles from '@mui/material/styles';
|
|
8
8
|
|
|
9
|
+
/**
|
|
10
|
+
* Props para o componente CookieBanner.
|
|
11
|
+
*
|
|
12
|
+
* @property policyLinkUrl URL da política de privacidade (opcional).
|
|
13
|
+
* @property debug Força exibição do banner para QA/debug (opcional).
|
|
14
|
+
* @property blocking Se true, bloqueia interação até decisão do usuário (default: true).
|
|
15
|
+
* @property hideBranding Se true, oculta o branding "fornecido por LÉdipO.eti.br" (opcional).
|
|
16
|
+
* @property SnackbarProps Props adicionais para o componente MUI Snackbar (opcional).
|
|
17
|
+
* @property PaperProps Props adicionais para o componente MUI Paper (opcional).
|
|
18
|
+
*/
|
|
9
19
|
interface CookieBannerProps {
|
|
10
20
|
policyLinkUrl?: string;
|
|
11
21
|
debug?: boolean;
|
|
@@ -14,29 +24,79 @@ interface CookieBannerProps {
|
|
|
14
24
|
SnackbarProps?: Partial<SnackbarProps>;
|
|
15
25
|
PaperProps?: Partial<PaperProps>;
|
|
16
26
|
}
|
|
27
|
+
/**
|
|
28
|
+
* Banner de consentimento de cookies conforme LGPD.
|
|
29
|
+
*
|
|
30
|
+
* Exibe mensagem informativa, botões de ação e link para política de privacidade.
|
|
31
|
+
* Compatível com modo bloqueante (overlay) e não bloqueante (Snackbar).
|
|
32
|
+
*
|
|
33
|
+
* - Textos em pt-BR, customizáveis via contexto.
|
|
34
|
+
* - Acessível e responsivo.
|
|
35
|
+
* - Branding opcional.
|
|
36
|
+
*
|
|
37
|
+
* @param props Propriedades do banner de consentimento.
|
|
38
|
+
*/
|
|
17
39
|
declare function CookieBanner({ policyLinkUrl, debug, blocking, // Por padrão, bloqueia até decisão
|
|
18
40
|
hideBranding, SnackbarProps, PaperProps, }: Readonly<CookieBannerProps>): react_jsx_runtime.JSX.Element | null;
|
|
19
41
|
|
|
42
|
+
/**
|
|
43
|
+
* Props para o componente PreferencesModal.
|
|
44
|
+
*
|
|
45
|
+
* @property DialogProps Props opcionais para customizar o Dialog do Material-UI.
|
|
46
|
+
* @property hideBranding Se true, oculta o branding "fornecido por LÉdipO.eti.br".
|
|
47
|
+
*/
|
|
20
48
|
interface PreferencesModalProps {
|
|
21
49
|
DialogProps?: Partial<DialogProps>;
|
|
22
50
|
hideBranding?: boolean;
|
|
23
51
|
}
|
|
52
|
+
/**
|
|
53
|
+
* Modal de preferências de cookies.
|
|
54
|
+
*
|
|
55
|
+
* Permite ao usuário ajustar suas preferências de consentimento para cookies analíticos e de marketing.
|
|
56
|
+
* Utiliza Material-UI Dialog, switches para cada categoria e textos customizáveis via contexto.
|
|
57
|
+
* Acessível, responsivo e compatível com SSR.
|
|
58
|
+
*
|
|
59
|
+
* @param props Props do modal, incluindo customização do Dialog e opção de ocultar branding.
|
|
60
|
+
*/
|
|
24
61
|
declare function PreferencesModal({ DialogProps, hideBranding, }: Readonly<PreferencesModalProps>): react_jsx_runtime.JSX.Element;
|
|
25
62
|
|
|
63
|
+
/**
|
|
64
|
+
* Props para o componente FloatingPreferencesButton.
|
|
65
|
+
*
|
|
66
|
+
* Permite configurar posição, ícone, tooltip, e comportamento de exibição do botão flutuante
|
|
67
|
+
* para abrir o modal de preferências de cookies LGPD.
|
|
68
|
+
*
|
|
69
|
+
* Todos os campos são opcionais e possuem valores padrão.
|
|
70
|
+
*/
|
|
26
71
|
interface FloatingPreferencesButtonProps {
|
|
27
72
|
/** Posição do botão flutuante. Padrão: 'bottom-right' */
|
|
28
73
|
position?: 'bottom-left' | 'bottom-right' | 'top-left' | 'top-right';
|
|
29
74
|
/** Offset da borda em pixels. Padrão: 24 */
|
|
30
75
|
offset?: number;
|
|
31
|
-
/** Ícone customizado. Padrão:
|
|
76
|
+
/** Ícone customizado. Padrão: CookieOutlined */
|
|
32
77
|
icon?: React.ReactNode;
|
|
33
|
-
/** Tooltip customizado */
|
|
78
|
+
/** Tooltip customizado exibido ao passar o mouse */
|
|
34
79
|
tooltip?: string;
|
|
35
|
-
/** Props
|
|
80
|
+
/** Props adicionais para o Fab do MUI */
|
|
36
81
|
FabProps?: Partial<FabProps>;
|
|
37
82
|
/** Se deve esconder quando consentimento já foi dado. Padrão: false */
|
|
38
83
|
hideWhenConsented?: boolean;
|
|
39
84
|
}
|
|
85
|
+
/**
|
|
86
|
+
* Botão flutuante para abrir o modal de preferências de cookies.
|
|
87
|
+
*
|
|
88
|
+
* Permite ao usuário acessar rapidamente as configurações de consentimento LGPD.
|
|
89
|
+
* Pode ser posicionado em qualquer canto da tela e customizado via props.
|
|
90
|
+
*
|
|
91
|
+
* @param position Posição do botão na tela. Padrão: 'bottom-right'.
|
|
92
|
+
* @param offset Distância da borda em pixels. Padrão: 24.
|
|
93
|
+
* @param icon Ícone customizado para o botão. Padrão: CookieOutlined.
|
|
94
|
+
* @param tooltip Texto do tooltip exibido ao passar o mouse. Padrão: 'Gerenciar Preferências de Cookies'.
|
|
95
|
+
* @param FabProps Props adicionais para o componente Fab do MUI.
|
|
96
|
+
* @param hideWhenConsented Se verdadeiro, esconde o botão após consentimento. Padrão: false.
|
|
97
|
+
*
|
|
98
|
+
* @returns JSX.Element | null
|
|
99
|
+
*/
|
|
40
100
|
declare function FloatingPreferencesButton({ position, offset, icon, tooltip, FabProps, hideWhenConsented, }: Readonly<FloatingPreferencesButtonProps>): react_jsx_runtime.JSX.Element | null;
|
|
41
101
|
|
|
42
102
|
/**
|
|
@@ -62,6 +122,25 @@ interface ConsentState {
|
|
|
62
122
|
}
|
|
63
123
|
/**
|
|
64
124
|
* Textos utilizados na interface de consentimento.
|
|
125
|
+
*
|
|
126
|
+
* @remarks
|
|
127
|
+
* Esta interface define todos os textos exibidos na UI do banner e modal de consentimento.
|
|
128
|
+
* Os campos opcionais permitem adequação à ANPD e customização conforme necessidade do projeto.
|
|
129
|
+
*
|
|
130
|
+
* @property bannerMessage - Mensagem principal exibida no banner de consentimento.
|
|
131
|
+
* @property acceptAll - Texto do botão para aceitar todos os cookies.
|
|
132
|
+
* @property declineAll - Texto do botão para recusar todos os cookies.
|
|
133
|
+
* @property preferences - Texto do botão para abrir preferências.
|
|
134
|
+
* @property policyLink - (Opcional) Link para política de privacidade.
|
|
135
|
+
* @property modalTitle - Título do modal de preferências.
|
|
136
|
+
* @property modalIntro - Texto introdutório do modal.
|
|
137
|
+
* @property save - Texto do botão para salvar preferências.
|
|
138
|
+
* @property necessaryAlwaysOn - Texto explicativo para cookies necessários.
|
|
139
|
+
* @property controllerInfo - (Opcional) Informação sobre o controlador dos dados.
|
|
140
|
+
* @property dataTypes - (Opcional) Tipos de dados coletados.
|
|
141
|
+
* @property thirdPartySharing - (Opcional) Compartilhamento com terceiros.
|
|
142
|
+
* @property userRights - (Opcional) Direitos do titular dos dados.
|
|
143
|
+
* @property contactInfo - (Opcional) Informações de contato do DPO.
|
|
65
144
|
*/
|
|
66
145
|
interface ConsentTexts {
|
|
67
146
|
bannerMessage: string;
|
|
@@ -142,8 +221,44 @@ interface ConsentContextValue {
|
|
|
142
221
|
resetConsent: () => void;
|
|
143
222
|
}
|
|
144
223
|
|
|
224
|
+
/**
|
|
225
|
+
* Provider principal do contexto de consentimento LGPD.
|
|
226
|
+
*
|
|
227
|
+
* Gerencia o estado global de consentimento de cookies, preferências do usuário,
|
|
228
|
+
* textos customizáveis e integração com SSR. Permite customização do modal de preferências,
|
|
229
|
+
* callbacks externos e opções de cookie.
|
|
230
|
+
*
|
|
231
|
+
* @param props Propriedades do ConsentProvider (ver ConsentProviderProps)
|
|
232
|
+
* @returns JSX.Element
|
|
233
|
+
*
|
|
234
|
+
* @example
|
|
235
|
+
* <ConsentProvider>
|
|
236
|
+
* <App />
|
|
237
|
+
* </ConsentProvider>
|
|
238
|
+
*/
|
|
145
239
|
declare function ConsentProvider({ initialState, texts: textsProp, theme, PreferencesModalComponent, preferencesModalProps, disableAutomaticModal, hideBranding, onConsentGiven, onPreferencesSaved, cookie: cookieOpts, children, }: Readonly<ConsentProviderProps>): react_jsx_runtime.JSX.Element;
|
|
146
240
|
|
|
241
|
+
/**
|
|
242
|
+
* Hook principal para acessar e manipular o estado de consentimento de cookies.
|
|
243
|
+
*
|
|
244
|
+
* Retorna o estado atual do consentimento, preferências do usuário e métodos para
|
|
245
|
+
* aceitar, recusar, modificar ou resetar consentimentos. Ideal para integração
|
|
246
|
+
* com componentes customizados ou lógica de negócio.
|
|
247
|
+
*
|
|
248
|
+
* @returns {ConsentContextValue} Estado e ações do consentimento.
|
|
249
|
+
*
|
|
250
|
+
* @example
|
|
251
|
+
* const {
|
|
252
|
+
* consented,
|
|
253
|
+
* preferences,
|
|
254
|
+
* acceptAll,
|
|
255
|
+
* rejectAll,
|
|
256
|
+
* setPreference,
|
|
257
|
+
* openPreferences,
|
|
258
|
+
* closePreferences,
|
|
259
|
+
* resetConsent,
|
|
260
|
+
* } = useConsent();
|
|
261
|
+
*/
|
|
147
262
|
declare function useConsent(): ConsentContextValue;
|
|
148
263
|
/**
|
|
149
264
|
* Hook para acessar textos customizados do ConsentProvider.
|
|
@@ -162,14 +277,27 @@ declare function ConsentGate(props: Readonly<{
|
|
|
162
277
|
}>): react_jsx_runtime.JSX.Element | null;
|
|
163
278
|
|
|
164
279
|
/**
|
|
165
|
-
* Carrega um script
|
|
166
|
-
*
|
|
280
|
+
* Carrega dinamicamente um script externo após o consentimento do usuário ser finalizado.
|
|
281
|
+
*
|
|
282
|
+
* Aguarda até que o usuário tome uma decisão definitiva (banner fechado ou preferências salvas)
|
|
283
|
+
* antes de inserir o script na página. Permite restringir o carregamento por categoria de consentimento.
|
|
284
|
+
*
|
|
285
|
+
* @param id - Identificador único do elemento script a ser criado.
|
|
286
|
+
* @param src - URL do script externo.
|
|
287
|
+
* @param category - Categoria de consentimento exigida para o script ('analytics', 'marketing' ou null).
|
|
288
|
+
* @param attrs - Atributos adicionais a serem aplicados ao elemento script.
|
|
289
|
+
* @returns Promise que resolve quando o script é carregado ou rejeita se o consentimento não for dado.
|
|
167
290
|
*/
|
|
168
291
|
declare function loadScript(id: string, src: string, category?: 'analytics' | 'marketing' | null, attrs?: Record<string, string>): Promise<void>;
|
|
169
292
|
|
|
170
293
|
/**
|
|
171
|
-
* Tema padrão
|
|
172
|
-
*
|
|
294
|
+
* Tema padrão utilizado pelos componentes de consentimento da biblioteca.
|
|
295
|
+
*
|
|
296
|
+
* Inclui configurações de cores, tipografia e estilos para componentes Material-UI,
|
|
297
|
+
* garantindo aparência consistente e acessível conforme guidelines LGPD.
|
|
298
|
+
*
|
|
299
|
+
* @remarks
|
|
300
|
+
* Pode ser sobrescrito via ThemeProvider externo se necessário.
|
|
173
301
|
*/
|
|
174
302
|
declare const defaultConsentTheme: _mui_material_styles.Theme;
|
|
175
303
|
|
package/dist/index.js
CHANGED
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
useConsent,
|
|
7
7
|
useConsentHydration,
|
|
8
8
|
useConsentTexts
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-XIHO7M77.js";
|
|
10
10
|
|
|
11
11
|
// src/components/CookieBanner.tsx
|
|
12
12
|
import Button from "@mui/material/Button";
|
|
@@ -115,15 +115,15 @@ function CookieBanner({
|
|
|
115
115
|
}
|
|
116
116
|
|
|
117
117
|
// src/components/FloatingPreferencesButton.tsx
|
|
118
|
+
import CookieOutlined from "@mui/icons-material/CookieOutlined";
|
|
118
119
|
import Fab from "@mui/material/Fab";
|
|
119
120
|
import Tooltip from "@mui/material/Tooltip";
|
|
120
|
-
import SettingsIcon from "@mui/icons-material/Settings";
|
|
121
121
|
import { useTheme } from "@mui/material/styles";
|
|
122
122
|
import { jsx as jsx2 } from "react/jsx-runtime";
|
|
123
123
|
function FloatingPreferencesButton({
|
|
124
124
|
position = "bottom-right",
|
|
125
125
|
offset = 24,
|
|
126
|
-
icon = /* @__PURE__ */ jsx2(
|
|
126
|
+
icon = /* @__PURE__ */ jsx2(CookieOutlined, {}),
|
|
127
127
|
tooltip,
|
|
128
128
|
FabProps,
|
|
129
129
|
hideWhenConsented = false
|
|
@@ -138,7 +138,6 @@ function FloatingPreferencesButton({
|
|
|
138
138
|
const styles = {
|
|
139
139
|
position: "fixed",
|
|
140
140
|
zIndex: 1200
|
|
141
|
-
// Abaixo do modal mas acima do conteúdo
|
|
142
141
|
};
|
|
143
142
|
switch (position) {
|
|
144
143
|
case "bottom-left":
|
package/package.json
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-lgpd-consent",
|
|
3
|
-
"version": "0.1.
|
|
4
|
-
"description": "Biblioteca de consentimento de cookies (LGPD) para React
|
|
3
|
+
"version": "0.1.13",
|
|
4
|
+
"description": "Biblioteca de consentimento de cookies (LGPD) para React client-side, com contexto, banner e modal personalizáveis usando MUI.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"lgpd",
|
|
7
7
|
"cookie",
|
|
8
8
|
"consent",
|
|
9
9
|
"react",
|
|
10
|
-
"
|
|
10
|
+
"client-side",
|
|
11
|
+
"spa",
|
|
11
12
|
"material-ui",
|
|
12
13
|
"mui",
|
|
13
14
|
"typescript",
|
|
14
|
-
"ssr",
|
|
15
15
|
"js-cookie",
|
|
16
16
|
"consentimento",
|
|
17
17
|
"privacidade",
|