react-lgpd-consent 0.3.0 → 0.3.2
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 +468 -0
- package/README.md +92 -117
- package/dist/{PreferencesModal-XCTM6WJN.js → PreferencesModal-7RSEEVUK.js} +1 -1
- package/dist/chunk-JUZQJHQW.js +1406 -0
- package/dist/index.cjs +678 -311
- package/dist/index.d.cts +1683 -268
- package/dist/index.d.ts +1683 -268
- package/dist/index.js +29 -11
- package/package.json +17 -12
- package/COMPLIANCE.md +0 -107
- package/dist/chunk-R3IKVZBC.js +0 -1070
package/dist/index.d.ts
CHANGED
|
@@ -2,174 +2,457 @@ import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
|
2
2
|
import { DialogProps } from '@mui/material/Dialog';
|
|
3
3
|
import * as React$1 from 'react';
|
|
4
4
|
import * as _mui_material_styles from '@mui/material/styles';
|
|
5
|
+
import { PaperProps } from '@mui/material/Paper';
|
|
6
|
+
import { SnackbarProps } from '@mui/material/Snackbar';
|
|
7
|
+
import { FabProps } from '@mui/material/Fab';
|
|
5
8
|
|
|
6
9
|
/**
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* @property DialogProps Props opcionais para customizar o Dialog do Material-UI.
|
|
10
|
-
* @property hideBranding Se true, oculta o branding "fornecido por LÉdipO.eti.br".
|
|
10
|
+
* @interface PreferencesModalProps
|
|
11
|
+
* Propriedades para customizar o componente `PreferencesModal`.
|
|
11
12
|
*/
|
|
12
13
|
interface PreferencesModalProps {
|
|
14
|
+
/** Propriedades opcionais para customizar o componente `Dialog` do Material-UI. */
|
|
13
15
|
DialogProps?: Partial<DialogProps>;
|
|
16
|
+
/** Se `true`, oculta a marca "fornecido por LÉdipO.eti.br" no modal. Padrão: `false`. */
|
|
14
17
|
hideBranding?: boolean;
|
|
15
18
|
}
|
|
16
19
|
/**
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
20
|
+
* O `PreferencesModal` é o componente de UI que permite ao usuário ajustar suas preferências de consentimento.
|
|
21
|
+
* @component
|
|
22
|
+
* @category Components
|
|
23
|
+
* @since 0.1.0
|
|
24
|
+
* @remarks
|
|
25
|
+
* Este modal é renderizado automaticamente pelo `ConsentProvider` quando o usuário clica para gerenciar as preferências.
|
|
26
|
+
* Você pode substituí-lo passando seu próprio componente para a prop `PreferencesModalComponent`
|
|
27
|
+
* no `ConsentProvider` para ter controle total sobre a aparência e o comportamento do modal.
|
|
28
|
+
* @param {Readonly<PreferencesModalProps>} props As propriedades para customizar o modal.
|
|
29
|
+
* @returns {JSX.Element} O componente do modal de preferências.
|
|
30
|
+
* @example
|
|
31
|
+
* ```tsx
|
|
32
|
+
* <PreferencesModal DialogProps={{ maxWidth: 'md' }} hideBranding={true} />
|
|
33
|
+
* ```
|
|
24
34
|
*/
|
|
25
35
|
declare function PreferencesModal({ DialogProps, hideBranding, }: Readonly<PreferencesModalProps>): react_jsx_runtime.JSX.Element;
|
|
26
36
|
|
|
27
37
|
/**
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
*/
|
|
31
|
-
interface ScriptIntegration {
|
|
32
|
-
/** ID único da integração */
|
|
33
|
-
id: string;
|
|
34
|
-
/** Categoria de consentimento necessária */
|
|
35
|
-
category: string;
|
|
36
|
-
/** URL do script */
|
|
37
|
-
src: string;
|
|
38
|
-
/** Função de inicialização após carregamento */
|
|
39
|
-
init?: () => void;
|
|
40
|
-
/** Atributos adicionais do script */
|
|
41
|
-
attrs?: Record<string, string>;
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
* Configuração para Google Analytics 4.
|
|
45
|
-
*/
|
|
46
|
-
interface GoogleAnalyticsConfig {
|
|
47
|
-
measurementId: string;
|
|
48
|
-
config?: any;
|
|
49
|
-
}
|
|
50
|
-
/**
|
|
51
|
-
* Configuração para Google Tag Manager.
|
|
52
|
-
*/
|
|
53
|
-
interface GoogleTagManagerConfig {
|
|
54
|
-
containerId: string;
|
|
55
|
-
dataLayerName?: string;
|
|
56
|
-
}
|
|
57
|
-
/**
|
|
58
|
-
* Configuração para UserWay (acessibilidade).
|
|
59
|
-
*/
|
|
60
|
-
interface UserWayConfig {
|
|
61
|
-
accountId: string;
|
|
62
|
-
}
|
|
63
|
-
/**
|
|
64
|
-
* Cria integração para Google Analytics 4.
|
|
65
|
-
*
|
|
66
|
-
* @param config Configuração do Google Analytics, contendo o `measurementId`.
|
|
67
|
-
* @returns Um objeto de integração de script para ser usado com `ConsentScriptLoader`.
|
|
68
|
-
*/
|
|
69
|
-
declare function createGoogleAnalyticsIntegration(config: GoogleAnalyticsConfig): ScriptIntegration;
|
|
70
|
-
/**
|
|
71
|
-
* Cria integração para Google Tag Manager.
|
|
38
|
+
* @fileoverview
|
|
39
|
+
* Definições de tipos TypeScript para o sistema de consentimento LGPD/ANPD.
|
|
72
40
|
*
|
|
73
|
-
*
|
|
74
|
-
*
|
|
75
|
-
|
|
76
|
-
declare function createGoogleTagManagerIntegration(config: GoogleTagManagerConfig): ScriptIntegration;
|
|
77
|
-
/**
|
|
78
|
-
* Cria integração para UserWay (widget de acessibilidade).
|
|
79
|
-
* A categoria padrão foi alterada para 'functional', por ser mais apropriada.
|
|
41
|
+
* Este arquivo contém todas as interfaces, tipos e estruturas de dados utilizadas
|
|
42
|
+
* pela biblioteca react-lgpd-consent, incluindo definições de categorias,
|
|
43
|
+
* estado de consentimento, configurações e textos da interface.
|
|
80
44
|
*
|
|
81
|
-
* @
|
|
82
|
-
* @
|
|
45
|
+
* @author Luciano Édipo
|
|
46
|
+
* @since 0.1.0
|
|
83
47
|
*/
|
|
84
|
-
declare function createUserWayIntegration(config: UserWayConfig): ScriptIntegration;
|
|
85
|
-
/**
|
|
86
|
-
* Integrações pré-configuradas mais comuns.
|
|
87
|
-
*/
|
|
88
|
-
declare const COMMON_INTEGRATIONS: {
|
|
89
|
-
googleAnalytics: typeof createGoogleAnalyticsIntegration;
|
|
90
|
-
googleTagManager: typeof createGoogleTagManagerIntegration;
|
|
91
|
-
userway: typeof createUserWayIntegration;
|
|
92
|
-
};
|
|
93
|
-
|
|
94
48
|
/**
|
|
95
49
|
* Tipos de categorias padrão de consentimento para cookies, conforme definido pela ANPD.
|
|
50
|
+
* @category Types
|
|
51
|
+
* @since 0.2.0
|
|
96
52
|
*
|
|
97
53
|
* @remarks
|
|
98
54
|
* Use este tipo para identificar as categorias principais de cookies suportadas nativamente pela biblioteca.
|
|
55
|
+
* Cada categoria representa um tipo específico de processamento de dados:
|
|
56
|
+
*
|
|
99
57
|
* - `'necessary'`: Cookies essenciais para funcionamento do site (sempre ativos).
|
|
100
58
|
* - `'analytics'`: Cookies para análise e estatísticas de uso.
|
|
101
59
|
* - `'functional'`: Cookies para funcionalidades extras e preferências do usuário.
|
|
102
60
|
* - `'marketing'`: Cookies para publicidade e marketing direcionado.
|
|
103
61
|
* - `'social'`: Cookies para integração com redes sociais.
|
|
104
62
|
* - `'personalization'`: Cookies para personalização de conteúdo e experiência.
|
|
63
|
+
*
|
|
64
|
+
* @example
|
|
65
|
+
* ```typescript
|
|
66
|
+
* const categories: Category[] = ['analytics', 'marketing'];
|
|
67
|
+
* ```
|
|
68
|
+
*
|
|
69
|
+
* @public
|
|
105
70
|
*/
|
|
106
71
|
type Category = 'necessary' | 'analytics' | 'functional' | 'marketing' | 'social' | 'personalization';
|
|
107
72
|
/**
|
|
108
|
-
* Definição detalhada de uma categoria de cookie.
|
|
73
|
+
* Definição detalhada de uma categoria de cookie para uso interno.
|
|
74
|
+
* @category Types
|
|
75
|
+
* @since 0.2.0
|
|
76
|
+
*
|
|
77
|
+
* @remarks
|
|
78
|
+
* Esta interface define a estrutura completa de uma categoria de cookies,
|
|
79
|
+
* incluindo metadados e configurações específicas para processamento
|
|
80
|
+
* e exibição na interface do usuário.
|
|
81
|
+
*
|
|
82
|
+
* @example
|
|
83
|
+
* ```typescript
|
|
84
|
+
* const analyticsCategory: CategoryDefinition = {
|
|
85
|
+
* id: 'analytics',
|
|
86
|
+
* name: 'Cookies Analíticos',
|
|
87
|
+
* description: 'Utilizados para análise de uso do site',
|
|
88
|
+
* essential: false,
|
|
89
|
+
* cookies: ['_ga', '_ga_*', '_gid']
|
|
90
|
+
* };
|
|
91
|
+
* ```
|
|
92
|
+
*
|
|
93
|
+
* @public
|
|
109
94
|
*/
|
|
110
95
|
interface CategoryDefinition {
|
|
111
|
-
/**
|
|
96
|
+
/**
|
|
97
|
+
* Identificador único da categoria.
|
|
98
|
+
* @example 'analytics'
|
|
99
|
+
*/
|
|
112
100
|
id: string;
|
|
113
|
-
/**
|
|
101
|
+
/**
|
|
102
|
+
* Nome amigável exibido na interface do usuário.
|
|
103
|
+
* @example 'Cookies Analíticos'
|
|
104
|
+
*/
|
|
114
105
|
name: string;
|
|
115
|
-
/**
|
|
106
|
+
/**
|
|
107
|
+
* Descrição detalhada da finalidade da categoria.
|
|
108
|
+
* @example 'Utilizados para análise de uso e comportamento no site'
|
|
109
|
+
*/
|
|
116
110
|
description: string;
|
|
117
|
-
/**
|
|
111
|
+
/**
|
|
112
|
+
* Indica se é uma categoria essencial que não pode ser desabilitada pelo usuário.
|
|
113
|
+
* @defaultValue false
|
|
114
|
+
*/
|
|
118
115
|
essential?: boolean;
|
|
119
|
-
/**
|
|
116
|
+
/**
|
|
117
|
+
* Lista de nomes de cookies ou padrões específicos desta categoria.
|
|
118
|
+
* @example ['_ga', '_ga_*', '_gid']
|
|
119
|
+
*/
|
|
120
120
|
cookies?: string[];
|
|
121
121
|
}
|
|
122
122
|
/**
|
|
123
123
|
* Configuração de categorias ativas no projeto.
|
|
124
|
-
*
|
|
125
|
-
*
|
|
124
|
+
* @category Types
|
|
125
|
+
* @since 0.2.0
|
|
126
|
+
*
|
|
127
|
+
* @remarks
|
|
128
|
+
* Define quais categorias fixas serão usadas (além de 'necessary' que é sempre incluída)
|
|
129
|
+
* e permite extensão com categorias customizadas específicas do projeto.
|
|
130
|
+
*
|
|
131
|
+
* A categoria 'necessary' é sempre incluída automaticamente e não precisa ser
|
|
132
|
+
* especificada em `enabledCategories`.
|
|
133
|
+
*
|
|
134
|
+
* @example
|
|
135
|
+
* ```typescript
|
|
136
|
+
* // Configuração básica
|
|
137
|
+
* const config: ProjectCategoriesConfig = {
|
|
138
|
+
* enabledCategories: ['analytics', 'marketing']
|
|
139
|
+
* };
|
|
140
|
+
* ```
|
|
141
|
+
*
|
|
142
|
+
* @example
|
|
143
|
+
* ```typescript
|
|
144
|
+
* // Configuração com categorias customizadas
|
|
145
|
+
* const config: ProjectCategoriesConfig = {
|
|
146
|
+
* enabledCategories: ['analytics'],
|
|
147
|
+
* customCategories: [{
|
|
148
|
+
* id: 'support',
|
|
149
|
+
* name: 'Suporte',
|
|
150
|
+
* description: 'Cookies para sistema de suporte ao cliente'
|
|
151
|
+
* }]
|
|
152
|
+
* };
|
|
153
|
+
* ```
|
|
154
|
+
*
|
|
155
|
+
* @public
|
|
126
156
|
*/
|
|
127
157
|
interface ProjectCategoriesConfig {
|
|
128
|
-
/**
|
|
158
|
+
/**
|
|
159
|
+
* Categorias padrão que serão ativadas.
|
|
160
|
+
* A categoria 'necessary' é sempre incluída automaticamente.
|
|
161
|
+
* @example ['analytics', 'marketing']
|
|
162
|
+
*/
|
|
129
163
|
enabledCategories?: Category[];
|
|
164
|
+
/**
|
|
165
|
+
* Categorias customizadas específicas do projeto.
|
|
166
|
+
* Permite extensão além das categorias padrão da biblioteca.
|
|
167
|
+
*/
|
|
168
|
+
customCategories?: CategoryDefinition[];
|
|
130
169
|
}
|
|
131
170
|
/**
|
|
132
|
-
* Preferências de consentimento do usuário.
|
|
133
|
-
*
|
|
171
|
+
* Preferências de consentimento do usuário por categoria.
|
|
172
|
+
* @category Types
|
|
173
|
+
* @since 0.1.0
|
|
174
|
+
*
|
|
175
|
+
* @remarks
|
|
176
|
+
* Contém o estado de consentimento para cada categoria ativa no projeto.
|
|
177
|
+
* A categoria 'necessary' está sempre presente e definida como `true`,
|
|
178
|
+
* pois cookies essenciais não podem ser desabilitados pelo usuário.
|
|
179
|
+
*
|
|
180
|
+
* ### Comportamento Dinâmico
|
|
181
|
+
* - As chaves são determinadas pela configuração de `enabledCategories` no `ConsentProvider`
|
|
182
|
+
* - Categorias não habilitadas no projeto não aparecem no objeto
|
|
183
|
+
* - TypeScript infere automaticamente as chaves baseado na configuração
|
|
184
|
+
* - Estado é persistido no cookie e restaurado em novas sessões
|
|
185
|
+
*
|
|
186
|
+
* ### Valores e Significados
|
|
187
|
+
* - `true`: Usuário consentiu explicitamente para a categoria
|
|
188
|
+
* - `false`: Usuário rejeitou explicitamente a categoria
|
|
189
|
+
* - Ausência da chave: Categoria não está habilitada no projeto
|
|
190
|
+
*
|
|
191
|
+
* ### Integração com Scripts
|
|
192
|
+
* - Use com `ConsentScriptLoader` para carregamento condicional
|
|
193
|
+
* - Estado é automaticamente reativo - mudanças atualizam scripts
|
|
194
|
+
* - Compatível com Google Analytics Enhanced Consent Mode
|
|
195
|
+
* - Suporta integração com ferramentas de tag management
|
|
196
|
+
*
|
|
197
|
+
* @example Configuração típica
|
|
198
|
+
* ```typescript
|
|
199
|
+
* const preferences: ConsentPreferences = {
|
|
200
|
+
* necessary: true, // Sempre true (cookies essenciais)
|
|
201
|
+
* analytics: false, // Usuário rejeitou análise
|
|
202
|
+
* marketing: true // Usuário aceitou marketing
|
|
203
|
+
* };
|
|
204
|
+
* ```
|
|
205
|
+
*
|
|
206
|
+
* @example Integração condicional com features
|
|
207
|
+
* ```typescript
|
|
208
|
+
* function MyComponent() {
|
|
209
|
+
* const { preferences } = useConsent();
|
|
210
|
+
*
|
|
211
|
+
* return (
|
|
212
|
+
* <div>
|
|
213
|
+
* {preferences.analytics && <AnalyticsComponent />}
|
|
214
|
+
* {preferences.marketing && <PersonalizationEngine />}
|
|
215
|
+
* {preferences.functional && <ChatWidget />}
|
|
216
|
+
* </div>
|
|
217
|
+
* );
|
|
218
|
+
* }
|
|
219
|
+
* ```
|
|
220
|
+
*
|
|
221
|
+
* @example Verificação programática de múltiplas categorias
|
|
222
|
+
* ```typescript
|
|
223
|
+
* function hasConsentForFeature(preferences: ConsentPreferences): boolean {
|
|
224
|
+
* // Feature requer analytics OU marketing
|
|
225
|
+
* return preferences.analytics || preferences.marketing;
|
|
226
|
+
* }
|
|
227
|
+
*
|
|
228
|
+
* function hasFullConsent(preferences: ConsentPreferences): boolean {
|
|
229
|
+
* // Verificar se todas as categorias opcionais foram aceitas
|
|
230
|
+
* const optionalCategories = Object.keys(preferences).filter(key => key !== 'necessary');
|
|
231
|
+
* return optionalCategories.every(key => preferences[key] === true);
|
|
232
|
+
* }
|
|
233
|
+
* ```
|
|
234
|
+
*
|
|
235
|
+
* @public
|
|
134
236
|
*/
|
|
135
237
|
interface ConsentPreferences {
|
|
238
|
+
/**
|
|
239
|
+
* Categoria de cookies necessários - sempre presente e verdadeira.
|
|
240
|
+
* Cookies essenciais não podem ser desabilitados pelo usuário.
|
|
241
|
+
*/
|
|
136
242
|
necessary: boolean;
|
|
243
|
+
/**
|
|
244
|
+
* Estado de consentimento para outras categorias ativas no projeto.
|
|
245
|
+
* As chaves correspondem aos IDs das categorias configuradas.
|
|
246
|
+
*/
|
|
137
247
|
[key: string]: boolean;
|
|
138
248
|
}
|
|
139
249
|
/**
|
|
140
|
-
*
|
|
141
|
-
*
|
|
250
|
+
* Estrutura do cookie de consentimento em conformidade com LGPD/ANPD.
|
|
251
|
+
* @category Types
|
|
252
|
+
* @since 0.2.1
|
|
253
|
+
*
|
|
254
|
+
* @remarks
|
|
255
|
+
* Esta interface define o formato do cookie persistido no navegador do usuário,
|
|
256
|
+
* contendo todas as informações necessárias para compliance com a LGPD e
|
|
257
|
+
* para o funcionamento correto da biblioteca.
|
|
258
|
+
*
|
|
259
|
+
* **Importante**: A estrutura utiliza um formato JSON simples e legível, projetado
|
|
260
|
+
* para ser autoexplicativo e atender diretamente aos requisitos da LGPD para sites
|
|
261
|
+
* de primeira parte (first-party contexts).
|
|
262
|
+
*
|
|
263
|
+
* **Não implementa IAB TCF**: Este formato **não** segue o padrão IAB Transparency
|
|
264
|
+
* and Consent Framework (TCF), que é mais complexo e voltado para o ecossistema
|
|
265
|
+
* de publicidade programática (ad-tech). A adoção do TCF pode ser uma evolução
|
|
266
|
+
* futura da biblioteca.
|
|
267
|
+
*
|
|
268
|
+
* @example
|
|
269
|
+
* ```typescript
|
|
270
|
+
* const cookieData: ConsentCookieData = {
|
|
271
|
+
* version: '1.0',
|
|
272
|
+
* consented: true,
|
|
273
|
+
* preferences: {
|
|
274
|
+
* necessary: true,
|
|
275
|
+
* analytics: true,
|
|
276
|
+
* marketing: false
|
|
277
|
+
* },
|
|
278
|
+
* consentDate: '2024-01-15T10:30:00.000Z',
|
|
279
|
+
* lastUpdate: '2024-01-15T10:30:00.000Z',
|
|
280
|
+
* source: 'banner',
|
|
281
|
+
* projectConfig: {
|
|
282
|
+
* enabledCategories: ['analytics', 'marketing']
|
|
283
|
+
* }
|
|
284
|
+
* };
|
|
285
|
+
* ```
|
|
286
|
+
*
|
|
287
|
+
* @see {@link https://www.planalto.gov.br/ccivil_03/_ato2015-2018/2018/lei/l13709.htm | LGPD - Lei 13.709/2018}
|
|
288
|
+
* @see {@link https://www.gov.br/anpd/pt-br/documentos-e-publicacoes/guia-orientativo-cookies-e-protecao-de-dados-pessoais.pdf | Guia de Cookies ANPD}
|
|
289
|
+
*
|
|
290
|
+
* @public
|
|
142
291
|
*/
|
|
143
292
|
interface ConsentCookieData {
|
|
144
|
-
/**
|
|
293
|
+
/**
|
|
294
|
+
* Versão do esquema do cookie para compatibilidade e migração futura.
|
|
295
|
+
* @example '1.0'
|
|
296
|
+
*/
|
|
145
297
|
version: string;
|
|
146
|
-
/**
|
|
298
|
+
/**
|
|
299
|
+
* Indica se o usuário já prestou consentimento explícito.
|
|
300
|
+
* @example true
|
|
301
|
+
*/
|
|
147
302
|
consented: boolean;
|
|
148
|
-
/**
|
|
303
|
+
/**
|
|
304
|
+
* Preferências detalhadas por categoria de cookies.
|
|
305
|
+
* Contém apenas as categorias ativas no projeto.
|
|
306
|
+
*/
|
|
149
307
|
preferences: ConsentPreferences;
|
|
150
|
-
/**
|
|
308
|
+
/**
|
|
309
|
+
* Timestamp ISO 8601 da primeira interação com o banner de consentimento.
|
|
310
|
+
* @example '2024-01-15T10:30:00.000Z'
|
|
311
|
+
*/
|
|
151
312
|
consentDate: string;
|
|
152
|
-
/**
|
|
313
|
+
/**
|
|
314
|
+
* Timestamp ISO 8601 da última modificação das preferências.
|
|
315
|
+
* Atualizado sempre que o usuário muda suas preferências.
|
|
316
|
+
* @example '2024-01-15T10:30:00.000Z'
|
|
317
|
+
*/
|
|
153
318
|
lastUpdate: string;
|
|
154
|
-
/**
|
|
319
|
+
/**
|
|
320
|
+
* Origem da decisão de consentimento para auditoria.
|
|
321
|
+
* - 'banner': Decisão tomada no banner principal
|
|
322
|
+
* - 'modal': Decisão tomada no modal de preferências
|
|
323
|
+
* - 'programmatic': Decisão tomada via API programática
|
|
324
|
+
*/
|
|
155
325
|
source: 'banner' | 'modal' | 'programmatic';
|
|
156
|
-
/**
|
|
326
|
+
/**
|
|
327
|
+
* Snapshot da configuração de categorias no momento do consentimento.
|
|
328
|
+
* Útil para detectar mudanças na configuração e solicitar novo consentimento.
|
|
329
|
+
*/
|
|
157
330
|
projectConfig?: ProjectCategoriesConfig;
|
|
158
331
|
}
|
|
159
332
|
/**
|
|
160
|
-
* Estado interno completo do
|
|
161
|
-
*
|
|
333
|
+
* Estado interno completo do sistema de consentimento.
|
|
334
|
+
* @category Types
|
|
335
|
+
* @since 0.1.0
|
|
336
|
+
*
|
|
337
|
+
* @remarks
|
|
338
|
+
* Estende {@link ConsentCookieData} com informações de estado da interface
|
|
339
|
+
* que não são persistidas no cookie, como o estado de abertura do modal.
|
|
340
|
+
*
|
|
341
|
+
* Este é o estado completo mantido em memória pelo React Context e
|
|
342
|
+
* utilizado por todos os componentes da biblioteca.
|
|
343
|
+
*
|
|
344
|
+
* ### Dados Persistidos vs. Temporários
|
|
345
|
+
* - **Persistidos**: Herdados de `ConsentCookieData` - salvos no cookie
|
|
346
|
+
* - **Temporários**: `isModalOpen` - apenas em memória durante a sessão
|
|
347
|
+
*
|
|
348
|
+
* ### Ciclo de Vida do Estado
|
|
349
|
+
* 1. **Inicialização**: Estado padrão ou lido do cookie
|
|
350
|
+
* 2. **Hidratação**: Restauração do cookie no lado cliente (SSR)
|
|
351
|
+
* 3. **Interação**: Usuário modifica preferências via UI
|
|
352
|
+
* 4. **Persistência**: Estado é salvo no cookie automaticamente
|
|
353
|
+
* 5. **Sincronização**: Componentes reagem às mudanças via Context
|
|
354
|
+
*
|
|
355
|
+
* ### Performance e Reatividade
|
|
356
|
+
* - Estado é imutável - mudanças criam novo objeto
|
|
357
|
+
* - Optimized com `useMemo` para evitar re-renders desnecessários
|
|
358
|
+
* - Subscriber pattern para notificações de mudança
|
|
359
|
+
* - Integração automática com React DevTools
|
|
360
|
+
*
|
|
361
|
+
* @example Estado típico com consentimento dado
|
|
362
|
+
* ```typescript
|
|
363
|
+
* const state: ConsentState = {
|
|
364
|
+
* version: '1.0',
|
|
365
|
+
* consented: true,
|
|
366
|
+
* preferences: { necessary: true, analytics: true, marketing: false },
|
|
367
|
+
* consentDate: '2024-01-15T10:30:00.000Z',
|
|
368
|
+
* lastUpdate: '2024-01-15T10:30:00.000Z',
|
|
369
|
+
* source: 'banner',
|
|
370
|
+
* projectConfig: { enabledCategories: ['analytics', 'marketing'] },
|
|
371
|
+
* isModalOpen: false // Estado da UI não persistido
|
|
372
|
+
* };
|
|
373
|
+
* ```
|
|
374
|
+
*
|
|
375
|
+
* @example Estado inicial antes do consentimento
|
|
376
|
+
* ```typescript
|
|
377
|
+
* const initialState: ConsentState = {
|
|
378
|
+
* version: '1.0',
|
|
379
|
+
* consented: false,
|
|
380
|
+
* preferences: { necessary: true }, // Apenas essenciais
|
|
381
|
+
* isModalOpen: false
|
|
382
|
+
* // consentDate, lastUpdate, source serão definidos após consentimento
|
|
383
|
+
* };
|
|
384
|
+
* ```
|
|
385
|
+
*
|
|
386
|
+
* @example Uso em componente para verificação de estado
|
|
387
|
+
* ```typescript
|
|
388
|
+
* function ConsentAwareComponent() {
|
|
389
|
+
* const { consented, preferences, isModalOpen } = useConsent();
|
|
390
|
+
*
|
|
391
|
+
* if (!consented) {
|
|
392
|
+
* return <div>Aguardando decisão do usuário sobre cookies...</div>;
|
|
393
|
+
* }
|
|
394
|
+
*
|
|
395
|
+
* if (isModalOpen) {
|
|
396
|
+
* return <div>Modal de preferências está aberto</div>;
|
|
397
|
+
* }
|
|
398
|
+
*
|
|
399
|
+
* return (
|
|
400
|
+
* <div>
|
|
401
|
+
* Analytics ativo: {preferences.analytics ? 'Sim' : 'Não'}
|
|
402
|
+
* Marketing ativo: {preferences.marketing ? 'Sim' : 'Não'}
|
|
403
|
+
* </div>
|
|
404
|
+
* );
|
|
405
|
+
* }
|
|
406
|
+
* ```
|
|
407
|
+
*
|
|
408
|
+
* @see {@link ConsentCookieData} - Interface base com dados persistidos
|
|
409
|
+
* @see {@link useConsent} - Hook para acessar este estado
|
|
410
|
+
* @see {@link ConsentProvider} - Provider que mantém este estado
|
|
411
|
+
*
|
|
412
|
+
* @public
|
|
162
413
|
*/
|
|
163
414
|
interface ConsentState extends ConsentCookieData {
|
|
164
|
-
/**
|
|
415
|
+
/**
|
|
416
|
+
* Estado de abertura do modal de preferências.
|
|
417
|
+
* Esta informação não é persistida no cookie, apenas mantida em memória.
|
|
418
|
+
* @defaultValue false
|
|
419
|
+
*/
|
|
165
420
|
isModalOpen?: boolean;
|
|
166
421
|
}
|
|
167
422
|
/**
|
|
168
|
-
*
|
|
423
|
+
* Interface de textos personalizáveis para todos os componentes da UI de consentimento LGPD.
|
|
424
|
+
* @category Types
|
|
425
|
+
* @since 0.1.0
|
|
169
426
|
*
|
|
170
427
|
* @remarks
|
|
171
428
|
* Esta interface define todos os textos exibidos na UI do banner e modal de consentimento.
|
|
172
|
-
* Os campos opcionais permitem adequação
|
|
429
|
+
* Os campos opcionais permitem adequação completa aos requisitos da ANPD e customização
|
|
430
|
+
* conforme necessidade específica do projeto. Todos os campos possuem valores padrão em português.
|
|
431
|
+
*
|
|
432
|
+
* A interface é dividida em três seções:
|
|
433
|
+
* - **Textos básicos**: Elementos essenciais do banner e modal (obrigatórios)
|
|
434
|
+
* - **Textos alternativos**: Variações para UI customizada (opcionais)
|
|
435
|
+
* - **Textos ANPD expandidos**: Informações de compliance com LGPD (opcionais)
|
|
436
|
+
*
|
|
437
|
+
* @example Configuração básica em inglês
|
|
438
|
+
* ```typescript
|
|
439
|
+
* const customTexts: Partial<ConsentTexts> = {
|
|
440
|
+
* bannerMessage: 'We use cookies to enhance your experience.',
|
|
441
|
+
* acceptAll: 'Accept All',
|
|
442
|
+
* declineAll: 'Reject All',
|
|
443
|
+
* preferences: 'Preferences'
|
|
444
|
+
* };
|
|
445
|
+
* ```
|
|
446
|
+
*
|
|
447
|
+
* @example Configuração completa ANPD
|
|
448
|
+
* ```typescript
|
|
449
|
+
* const anpdTexts: Partial<ConsentTexts> = {
|
|
450
|
+
* controllerInfo: 'Controlado por: Empresa XYZ - CNPJ: 12.345.678/0001-90',
|
|
451
|
+
* dataTypes: 'Coletamos: endereço IP, preferências de navegação, dados de uso',
|
|
452
|
+
* userRights: 'Você pode solicitar acesso, correção ou exclusão dos seus dados',
|
|
453
|
+
* contactInfo: 'DPO: dpo@empresa.com.br | Tel: (11) 1234-5678'
|
|
454
|
+
* };
|
|
455
|
+
* ```
|
|
173
456
|
*
|
|
174
457
|
* @property bannerMessage - Mensagem principal exibida no banner de consentimento.
|
|
175
458
|
* @property acceptAll - Texto do botão para aceitar todos os cookies.
|
|
@@ -180,11 +463,26 @@ interface ConsentState extends ConsentCookieData {
|
|
|
180
463
|
* @property modalIntro - Texto introdutório do modal.
|
|
181
464
|
* @property save - Texto do botão para salvar preferências.
|
|
182
465
|
* @property necessaryAlwaysOn - Texto explicativo para cookies necessários.
|
|
466
|
+
* @property preferencesButton - (Opcional) Texto alternativo para botão de preferências.
|
|
467
|
+
* @property preferencesTitle - (Opcional) Título alternativo do modal.
|
|
468
|
+
* @property preferencesDescription - (Opcional) Descrição do modal.
|
|
469
|
+
* @property close - (Opcional) Texto do botão fechar.
|
|
470
|
+
* @property accept - (Opcional) Texto alternativo aceitar.
|
|
471
|
+
* @property reject - (Opcional) Texto alternativo rejeitar.
|
|
472
|
+
* @property brandingPoweredBy - (Opcional) Texto "fornecido por".
|
|
183
473
|
* @property controllerInfo - (Opcional) Informação sobre o controlador dos dados.
|
|
184
474
|
* @property dataTypes - (Opcional) Tipos de dados coletados.
|
|
185
475
|
* @property thirdPartySharing - (Opcional) Compartilhamento com terceiros.
|
|
186
476
|
* @property userRights - (Opcional) Direitos do titular dos dados.
|
|
187
477
|
* @property contactInfo - (Opcional) Informações de contato do DPO.
|
|
478
|
+
* @property retentionPeriod - (Opcional) Prazo de armazenamento dos dados.
|
|
479
|
+
* @property lawfulBasis - (Opcional) Base legal para o processamento.
|
|
480
|
+
* @property transferCountries - (Opcional) Países para transferência de dados.
|
|
481
|
+
*
|
|
482
|
+
* @see {@link ConsentProvider} - Para usar os textos personalizados
|
|
483
|
+
* @see {@link useConsentTexts} - Hook para acessar textos no contexto
|
|
484
|
+
*
|
|
485
|
+
* @public
|
|
188
486
|
*/
|
|
189
487
|
interface ConsentTexts {
|
|
190
488
|
bannerMessage: string;
|
|
@@ -196,6 +494,13 @@ interface ConsentTexts {
|
|
|
196
494
|
modalIntro: string;
|
|
197
495
|
save: string;
|
|
198
496
|
necessaryAlwaysOn: string;
|
|
497
|
+
preferencesButton?: string;
|
|
498
|
+
preferencesTitle?: string;
|
|
499
|
+
preferencesDescription?: string;
|
|
500
|
+
close?: string;
|
|
501
|
+
accept?: string;
|
|
502
|
+
reject?: string;
|
|
503
|
+
brandingPoweredBy?: string;
|
|
199
504
|
controllerInfo?: string;
|
|
200
505
|
dataTypes?: string;
|
|
201
506
|
thirdPartySharing?: string;
|
|
@@ -207,6 +512,8 @@ interface ConsentTexts {
|
|
|
207
512
|
}
|
|
208
513
|
/**
|
|
209
514
|
* Opções para configuração do cookie de consentimento.
|
|
515
|
+
* @category Types
|
|
516
|
+
* @since 0.1.0
|
|
210
517
|
*/
|
|
211
518
|
interface ConsentCookieOptions {
|
|
212
519
|
/** Nome do cookie. Padrão: 'cookieConsent' */
|
|
@@ -222,6 +529,8 @@ interface ConsentCookieOptions {
|
|
|
222
529
|
}
|
|
223
530
|
/**
|
|
224
531
|
* Tokens de design para customização visual avançada dos componentes.
|
|
532
|
+
* @category Types
|
|
533
|
+
* @since 0.1.3
|
|
225
534
|
* Permite um controle mais direto sobre a aparência sem a necessidade de `sx` props complexas.
|
|
226
535
|
*/
|
|
227
536
|
interface DesignTokens {
|
|
@@ -263,6 +572,8 @@ interface DesignTokens {
|
|
|
263
572
|
}
|
|
264
573
|
/**
|
|
265
574
|
* Propriedades do componente ConsentProvider - configuração principal da biblioteca.
|
|
575
|
+
* @category Types
|
|
576
|
+
* @since 0.1.0
|
|
266
577
|
*
|
|
267
578
|
* @example Uso básico (configuração mínima):
|
|
268
579
|
* ```tsx
|
|
@@ -368,20 +679,6 @@ interface ConsentProviderProps {
|
|
|
368
679
|
* ```
|
|
369
680
|
*/
|
|
370
681
|
designTokens?: DesignTokens;
|
|
371
|
-
/**
|
|
372
|
-
* Integrações nativas de scripts terceiros (Google Analytics, etc.).
|
|
373
|
-
* Scripts são carregados automaticamente baseado no consentimento.
|
|
374
|
-
*
|
|
375
|
-
* @example
|
|
376
|
-
* ```tsx
|
|
377
|
-
* import { createGoogleAnalyticsIntegration } from 'react-lgpd-consent'
|
|
378
|
-
*
|
|
379
|
-
* scriptIntegrations={[
|
|
380
|
-
* createGoogleAnalyticsIntegration('GA_MEASUREMENT_ID')
|
|
381
|
-
* ]}
|
|
382
|
-
* ```
|
|
383
|
-
*/
|
|
384
|
-
scriptIntegrations?: ScriptIntegration[];
|
|
385
682
|
/**
|
|
386
683
|
* Componente customizado para substituir o modal padrão de preferências.
|
|
387
684
|
* Deve implementar a lógica de consentimento usando as props definidas em `CustomPreferencesModalProps`.
|
|
@@ -469,6 +766,8 @@ interface ConsentProviderProps {
|
|
|
469
766
|
}
|
|
470
767
|
/**
|
|
471
768
|
* Props esperadas por um componente customizado de CookieBanner.
|
|
769
|
+
* @category Types
|
|
770
|
+
* @since 0.3.1
|
|
472
771
|
* Fornece acesso ao estado de consentimento e ações necessárias para o banner.
|
|
473
772
|
*/
|
|
474
773
|
interface CustomCookieBannerProps {
|
|
@@ -480,6 +779,8 @@ interface CustomCookieBannerProps {
|
|
|
480
779
|
}
|
|
481
780
|
/**
|
|
482
781
|
* Props esperadas por um componente customizado de PreferencesModal.
|
|
782
|
+
* @category Types
|
|
783
|
+
* @since 0.3.1
|
|
483
784
|
*
|
|
484
785
|
* Fornece acesso às preferências atuais do usuário, funções para atualizar e salvar preferências,
|
|
485
786
|
* fechar o modal e textos customizados da interface.
|
|
@@ -499,6 +800,8 @@ interface CustomPreferencesModalProps {
|
|
|
499
800
|
}
|
|
500
801
|
/**
|
|
501
802
|
* Props esperadas por um componente customizado de FloatingPreferencesButton.
|
|
803
|
+
* @category Types
|
|
804
|
+
* @since 0.3.1
|
|
502
805
|
* Fornece acesso às ações de abertura do modal e ao estado de consentimento.
|
|
503
806
|
*/
|
|
504
807
|
interface CustomFloatingPreferencesButtonProps {
|
|
@@ -507,6 +810,8 @@ interface CustomFloatingPreferencesButtonProps {
|
|
|
507
810
|
}
|
|
508
811
|
/**
|
|
509
812
|
* Valor do contexto de consentimento, incluindo estado e métodos de manipulação.
|
|
813
|
+
* @category Types
|
|
814
|
+
* @since 0.1.0
|
|
510
815
|
*/
|
|
511
816
|
interface ConsentContextValue {
|
|
512
817
|
/** Indica se o usuário consentiu. */
|
|
@@ -532,190 +837,1300 @@ interface ConsentContextValue {
|
|
|
532
837
|
}
|
|
533
838
|
|
|
534
839
|
/**
|
|
535
|
-
*
|
|
840
|
+
* @component
|
|
841
|
+
* @category Context
|
|
842
|
+
* @since 0.1.0
|
|
843
|
+
* Provider principal da biblioteca. Envolva sua aplicação com este componente para habilitar o gerenciamento de consentimento.
|
|
536
844
|
*
|
|
537
|
-
*
|
|
538
|
-
*
|
|
539
|
-
*
|
|
845
|
+
* @remarks
|
|
846
|
+
* Este provider gerencia o estado de consentimento, renderiza a UI (banner, modal) e fornece o contexto para todos os hooks, como o `useConsent`.
|
|
847
|
+
* A configuração é feita através de props, permitindo desde um uso "zero-config" (além da prop obrigatória `categories`) até customizações avançadas.
|
|
540
848
|
*
|
|
541
|
-
* @param props
|
|
542
|
-
* @
|
|
849
|
+
* @param {Readonly<ConsentProviderProps>} props - As propriedades para configurar o provider.
|
|
850
|
+
* @param {ProjectCategoriesConfig} props.categories - **Obrigatório**. Define as categorias de cookies que seu projeto utiliza, em conformidade com o princípio de minimização da LGPD.
|
|
851
|
+
* @param {Partial<ConsentTexts>} [props.texts] - Objeto para customizar todos os textos exibidos na UI.
|
|
852
|
+
* @param {boolean} [props.blocking=false] - Se `true`, exibe um overlay que impede a interação com o site até uma decisão do usuário.
|
|
853
|
+
* @param {(state: ConsentState) => void} [props.onConsentGiven] - Callback executado na primeira vez que o usuário dá o consentimento.
|
|
854
|
+
* @param {(prefs: ConsentPreferences) => void} [props.onPreferencesSaved] - Callback executado sempre que o usuário salva novas preferências.
|
|
855
|
+
* @param {boolean} [props.disableDeveloperGuidance=false] - Desativa as mensagens de orientação no console em ambiente de desenvolvimento.
|
|
856
|
+
* @param {boolean} [props.disableFloatingPreferencesButton=false] - Desabilita o botão flutuante para reabrir as preferências.
|
|
857
|
+
* @param {React.ComponentType<CustomCookieBannerProps>} [props.CookieBannerComponent] - Permite substituir o componente de banner padrão por um customizado.
|
|
858
|
+
* @param {React.ComponentType<CustomPreferencesModalProps>} [props.PreferencesModalComponent] - Permite substituir o modal de preferências padrão por um customizado.
|
|
859
|
+
* @param {any} [props.theme] - Objeto de tema do Material-UI para estilizar os componentes padrão.
|
|
860
|
+
* @param {ConsentState} [props.initialState] - Estado inicial para hidratação em SSR, evitando o "flash" do banner.
|
|
861
|
+
* @param {Partial<ConsentCookieOptions>} [props.cookie] - Opções para customizar o nome, duração e outros atributos do cookie de consentimento.
|
|
862
|
+
* @param {React.ReactNode} props.children - A aplicação ou parte dela que terá acesso ao contexto de consentimento.
|
|
543
863
|
*
|
|
544
864
|
* @example
|
|
545
|
-
*
|
|
546
|
-
*
|
|
865
|
+
* ```tsx
|
|
866
|
+
* // Uso básico
|
|
867
|
+
* <ConsentProvider categories={{ enabledCategories: ['analytics'] }}>
|
|
868
|
+
* <MyApp />
|
|
547
869
|
* </ConsentProvider>
|
|
548
|
-
|
|
549
|
-
declare function ConsentProvider({ initialState, categories, // Nova prop para configuração de categorias
|
|
550
|
-
texts: textsProp, theme, designTokens, scriptIntegrations, // eslint-disable-line no-unused-vars
|
|
551
|
-
PreferencesModalComponent, preferencesModalProps, CookieBannerComponent, cookieBannerProps, FloatingPreferencesButtonComponent, floatingPreferencesButtonProps, disableFloatingPreferencesButton, hideBranding, onConsentGiven, onPreferencesSaved, cookie: cookieOpts, disableDeveloperGuidance, children, }: Readonly<ConsentProviderProps>): react_jsx_runtime.JSX.Element;
|
|
552
|
-
|
|
553
|
-
/**
|
|
554
|
-
* Hook principal para acessar e manipular o estado de consentimento de cookies.
|
|
555
|
-
*
|
|
556
|
-
* Retorna o estado atual do consentimento, preferências do usuário e métodos para
|
|
557
|
-
* aceitar, recusar, modificar ou resetar consentimentos. Ideal para integração
|
|
558
|
-
* com componentes customizados ou lógica de negócio.
|
|
559
|
-
*
|
|
560
|
-
* @returns {ConsentContextValue} Estado e ações do consentimento.
|
|
870
|
+
* ```
|
|
561
871
|
*
|
|
562
872
|
* @example
|
|
563
|
-
*
|
|
564
|
-
*
|
|
565
|
-
*
|
|
566
|
-
*
|
|
567
|
-
*
|
|
568
|
-
*
|
|
569
|
-
*
|
|
570
|
-
*
|
|
571
|
-
*
|
|
572
|
-
*
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
/**
|
|
576
|
-
* Hook para acessar textos customizados do ConsentProvider.
|
|
577
|
-
* Útil para componentes personalizados que precisam dos textos configurados.
|
|
578
|
-
*/
|
|
579
|
-
declare function useConsentTexts(): ConsentTexts;
|
|
580
|
-
/**
|
|
581
|
-
* Hook para verificar se a hidratação do cookie foi concluída.
|
|
582
|
-
* Útil para evitar flash do banner antes de verificar cookies existentes.
|
|
583
|
-
*/
|
|
584
|
-
declare function useConsentHydration(): boolean;
|
|
585
|
-
|
|
586
|
-
/**
|
|
587
|
-
* Sistema de orientações para developers sobre configuração de categorias.
|
|
588
|
-
* Ajuda a manter coerência entre configuração da lib e componentes customizados.
|
|
589
|
-
*/
|
|
590
|
-
interface DeveloperGuidance {
|
|
591
|
-
/** Avisos sobre configuração inconsistente */
|
|
592
|
-
warnings: string[];
|
|
593
|
-
/** Sugestões de melhoria */
|
|
594
|
-
suggestions: string[];
|
|
595
|
-
/** Informações sobre categorias ativas */
|
|
596
|
-
activeCategoriesInfo: {
|
|
597
|
-
id: string;
|
|
598
|
-
name: string;
|
|
599
|
-
description: string;
|
|
600
|
-
essential: boolean;
|
|
601
|
-
uiRequired: boolean;
|
|
602
|
-
}[];
|
|
603
|
-
/** Se usa configuração padrão (não explícita) */
|
|
604
|
-
usingDefaults: boolean;
|
|
605
|
-
}
|
|
606
|
-
/**
|
|
607
|
-
* Configuração padrão quando developer não especifica categorias.
|
|
608
|
-
* Baseado nas necessidades mais comuns em conformidade LGPD.
|
|
609
|
-
*/
|
|
610
|
-
declare const DEFAULT_PROJECT_CATEGORIES: ProjectCategoriesConfig;
|
|
611
|
-
/**
|
|
612
|
-
* Analisa configuração do projeto e retorna orientações para o developer.
|
|
613
|
-
*/
|
|
614
|
-
declare function analyzeDeveloperConfiguration(config?: ProjectCategoriesConfig): DeveloperGuidance;
|
|
615
|
-
|
|
616
|
-
/**
|
|
617
|
-
* Context para informações sobre categorias ativas no projeto.
|
|
618
|
-
* Fornece orientações e validações para components UI.
|
|
619
|
-
*/
|
|
620
|
-
interface CategoriesContextValue {
|
|
621
|
-
/** Configuração final das categorias (com padrão aplicado) */
|
|
622
|
-
config: ProjectCategoriesConfig;
|
|
623
|
-
/** Análise e orientações para developers */
|
|
624
|
-
guidance: DeveloperGuidance;
|
|
625
|
-
/** Categorias que precisam de toggle na UI */
|
|
626
|
-
toggleableCategories: DeveloperGuidance['activeCategoriesInfo'];
|
|
627
|
-
/** Todas as categorias ativas */
|
|
628
|
-
allCategories: DeveloperGuidance['activeCategoriesInfo'];
|
|
629
|
-
}
|
|
630
|
-
/**
|
|
631
|
-
* Hook para acessar informações sobre categorias ativas.
|
|
632
|
-
* Usado por componentes UI para renderizar adequadamente.
|
|
633
|
-
*/
|
|
634
|
-
declare function useCategories(): CategoriesContextValue;
|
|
635
|
-
/**
|
|
636
|
-
* Hook de conveniência para verificar se uma categoria específica está ativa.
|
|
873
|
+
* ```tsx
|
|
874
|
+
* // Uso avançado com UI customizada e callbacks
|
|
875
|
+
* <ConsentProvider
|
|
876
|
+
* categories={{ enabledCategories: ['analytics', 'marketing'] }}
|
|
877
|
+
* blocking={true}
|
|
878
|
+
* texts={{ bannerMessage: 'Usamos cookies!' }}
|
|
879
|
+
* onPreferencesSaved={(prefs) => console.log('Preferências salvas:', prefs)}
|
|
880
|
+
* CookieBannerComponent={MeuBannerCustomizado}
|
|
881
|
+
* >
|
|
882
|
+
* <MyApp />
|
|
883
|
+
* </ConsentProvider>
|
|
884
|
+
* ```
|
|
637
885
|
*/
|
|
638
|
-
declare function
|
|
639
|
-
|
|
640
|
-
isEssential: boolean;
|
|
641
|
-
needsToggle: boolean;
|
|
642
|
-
name: string | undefined;
|
|
643
|
-
description: string | undefined;
|
|
644
|
-
};
|
|
645
|
-
|
|
646
|
-
declare function ConsentGate(props: Readonly<{
|
|
647
|
-
category: string;
|
|
648
|
-
children: React$1.ReactNode;
|
|
649
|
-
}>): react_jsx_runtime.JSX.Element | null;
|
|
886
|
+
declare function ConsentProvider({ initialState, categories, texts: textsProp, theme, designTokens, PreferencesModalComponent, preferencesModalProps, CookieBannerComponent, cookieBannerProps, FloatingPreferencesButtonComponent, floatingPreferencesButtonProps, disableFloatingPreferencesButton, hideBranding, onConsentGiven, onPreferencesSaved, cookie: cookieOpts, disableDeveloperGuidance, children, }: Readonly<ConsentProviderProps>): react_jsx_runtime.JSX.Element;
|
|
887
|
+
declare const defaultTexts: ConsentTexts;
|
|
650
888
|
|
|
651
889
|
/**
|
|
652
|
-
*
|
|
890
|
+
* @fileoverview
|
|
891
|
+
* Hooks públicos para interação com o sistema de consentimento LGPD.
|
|
653
892
|
*
|
|
654
|
-
*
|
|
655
|
-
*
|
|
893
|
+
* Este módulo exporta os hooks principais que devem ser usados pelos desenvolvedores
|
|
894
|
+
* para acessar e manipular o estado de consentimento em seus componentes React.
|
|
656
895
|
*
|
|
657
|
-
* @
|
|
658
|
-
* @
|
|
659
|
-
* @param category - Categoria de consentimento exigida para o script ('analytics', 'marketing' ou null).
|
|
660
|
-
* @param attrs - Atributos adicionais a serem aplicados ao elemento script.
|
|
661
|
-
* @returns Promise que resolve quando o script é carregado ou rejeita se o consentimento não for dado.
|
|
896
|
+
* @author Luciano Édipo
|
|
897
|
+
* @since 0.1.0
|
|
662
898
|
*/
|
|
663
|
-
declare function loadScript(id: string, src: string, category?: 'analytics' | 'marketing' | null, attrs?: Record<string, string>): Promise<void>;
|
|
664
899
|
|
|
665
900
|
/**
|
|
666
|
-
*
|
|
667
|
-
*
|
|
668
|
-
* Inclui configurações de cores, tipografia e estilos para componentes Material-UI,
|
|
669
|
-
* garantindo aparência consistente e acessível conforme guidelines LGPD.
|
|
901
|
+
* Hook principal para acessar e manipular o estado de consentimento de cookies LGPD.
|
|
670
902
|
*
|
|
671
903
|
* @remarks
|
|
672
|
-
*
|
|
673
|
-
|
|
674
|
-
declare const defaultConsentTheme: _mui_material_styles.Theme;
|
|
675
|
-
|
|
676
|
-
/**
|
|
677
|
-
* Componente que carrega scripts automaticamente baseado no consentimento.
|
|
678
|
-
* Facilita integração com ferramentas como Google Analytics, Tag Manager, etc.
|
|
679
|
-
*/
|
|
680
|
-
|
|
681
|
-
interface ConsentScriptLoaderProps {
|
|
682
|
-
/** Lista de integrações de scripts para carregar baseado no consentimento */
|
|
683
|
-
integrations: ScriptIntegration[];
|
|
684
|
-
/** Se true, força recarregamento se consentimento mudar */
|
|
685
|
-
reloadOnChange?: boolean;
|
|
686
|
-
}
|
|
687
|
-
/**
|
|
688
|
-
* Componente para carregamento automático de scripts baseado no consentimento.
|
|
904
|
+
* Este é o hook mais importante da biblioteca para interagir com o sistema de consentimento.
|
|
905
|
+
* Ele provê acesso completo ao estado atual do consentimento e às funções para modificar esse estado.
|
|
689
906
|
*
|
|
690
|
-
*
|
|
691
|
-
*
|
|
692
|
-
*
|
|
693
|
-
*
|
|
694
|
-
*
|
|
695
|
-
*
|
|
907
|
+
* ### Estado Disponível
|
|
908
|
+
* - **`consented`**: `boolean` - Indica se o usuário já deu alguma resposta (aceitar/rejeitar)
|
|
909
|
+
* - **`preferences`**: `CategoryPreferences` - Objeto com estado de cada categoria de cookie
|
|
910
|
+
* - **`isModalOpen`**: `boolean` - Indica se o modal de preferências está aberto
|
|
911
|
+
*
|
|
912
|
+
* ### Ações Disponíveis
|
|
913
|
+
* - **`acceptAll()`**: Aceita todas as categorias configuradas
|
|
914
|
+
* - **`rejectAll()`**: Rejeita todas as categorias (exceto necessary)
|
|
915
|
+
* - **`setPreference(category, enabled)`**: Define uma categoria específica
|
|
916
|
+
* - **`setPreferences(preferences)`**: Define múltiplas categorias de uma vez
|
|
917
|
+
* - **`openPreferences()`**: Abre o modal de preferências
|
|
918
|
+
* - **`closePreferences()`**: Fecha o modal de preferências
|
|
919
|
+
* - **`resetConsent()`**: Limpa todo consentimento (volta ao estado inicial)
|
|
920
|
+
*
|
|
921
|
+
* ### Performance e SSR
|
|
922
|
+
* - O hook é otimizado com `useMemo` interno para evitar re-renders desnecessários
|
|
923
|
+
* - Compatível com SSR (Next.js, Remix) - estado é hidratado após montagem no cliente
|
|
924
|
+
* - Estado inicial é sempre `{ consented: false }` no servidor para evitar hydration mismatches
|
|
925
|
+
*
|
|
926
|
+
* ### Integração com Scripts
|
|
927
|
+
* - Use junto com `ConsentScriptLoader` para carregamento condicional de scripts
|
|
928
|
+
* - Estado `preferences` pode ser usado para ativar/desativar recursos condicionalmente
|
|
929
|
+
* - Mudanças no consentimento são automaticamente persistidas em cookies
|
|
930
|
+
*
|
|
931
|
+
* @returns Um objeto contendo o estado completo e as ações de consentimento
|
|
932
|
+
*
|
|
933
|
+
* @throws {Error} Se usado fora do ConsentProvider - verifique se o componente está dentro de `<ConsentProvider>`
|
|
934
|
+
*
|
|
935
|
+
* @example Hook básico para verificar consentimento
|
|
936
|
+
* ```tsx
|
|
937
|
+
* function MyComponent() {
|
|
938
|
+
* const { consented, preferences, acceptAll, rejectAll } = useConsent();
|
|
939
|
+
*
|
|
940
|
+
* if (!consented) {
|
|
941
|
+
* return <p>Aguardando decisão do usuário...</p>;
|
|
942
|
+
* }
|
|
943
|
+
*
|
|
944
|
+
* return (
|
|
945
|
+
* <div>
|
|
946
|
+
* <p>Analytics: {preferences.analytics ? 'Ativo' : 'Inativo'}</p>
|
|
947
|
+
* <button onClick={rejectAll}>Rejeitar Todos</button>
|
|
948
|
+
* </div>
|
|
949
|
+
* );
|
|
950
|
+
* }
|
|
951
|
+
* ```
|
|
952
|
+
*
|
|
953
|
+
* @example Controle granular de categorias
|
|
954
|
+
* ```tsx
|
|
955
|
+
* function AdvancedSettings() {
|
|
956
|
+
* const { preferences, setPreference } = useConsent();
|
|
957
|
+
*
|
|
958
|
+
* return (
|
|
959
|
+
* <div>
|
|
960
|
+
* <label>
|
|
961
|
+
* <input
|
|
962
|
+
* type="checkbox"
|
|
963
|
+
* checked={preferences.marketing}
|
|
964
|
+
* onChange={(e) => setPreference('marketing', e.target.checked)}
|
|
965
|
+
* />
|
|
966
|
+
* Cookies de Marketing
|
|
967
|
+
* </label>
|
|
968
|
+
* </div>
|
|
969
|
+
* );
|
|
970
|
+
* }
|
|
971
|
+
* ```
|
|
972
|
+
*
|
|
973
|
+
* @example Integração condicional com Google Analytics
|
|
974
|
+
* ```tsx
|
|
975
|
+
* function AnalyticsComponent() {
|
|
976
|
+
* const { consented, preferences } = useConsent();
|
|
977
|
+
*
|
|
978
|
+
* React.useEffect(() => {
|
|
979
|
+
* if (consented && preferences.analytics) {
|
|
980
|
+
* // Inicializar Google Analytics
|
|
981
|
+
* gtag('config', 'GA_MEASUREMENT_ID');
|
|
982
|
+
* gtag('event', 'consent_granted', {
|
|
983
|
+
* ad_storage: preferences.marketing ? 'granted' : 'denied',
|
|
984
|
+
* analytics_storage: 'granted'
|
|
985
|
+
* });
|
|
986
|
+
* }
|
|
987
|
+
* }, [consented, preferences]);
|
|
988
|
+
*
|
|
989
|
+
* return null; // Componente só para lógica
|
|
990
|
+
* }
|
|
991
|
+
* ```
|
|
992
|
+
*
|
|
993
|
+
* @example Uso avançado com múltiplas preferências
|
|
994
|
+
* ```tsx
|
|
995
|
+
* function BulkPreferencesControl() {
|
|
996
|
+
* const { setPreferences, preferences, consented } = useConsent();
|
|
997
|
+
*
|
|
998
|
+
* const handleSavePreferences = () => {
|
|
999
|
+
* setPreferences({
|
|
1000
|
+
* necessary: true, // Sempre true
|
|
1001
|
+
* analytics: true,
|
|
1002
|
+
* marketing: false,
|
|
1003
|
+
* functional: true,
|
|
1004
|
+
* performance: false
|
|
1005
|
+
* });
|
|
1006
|
+
* };
|
|
1007
|
+
*
|
|
1008
|
+
* return (
|
|
1009
|
+
* <button onClick={handleSavePreferences} disabled={!consented}>
|
|
1010
|
+
* Salvar Minhas Preferências
|
|
1011
|
+
* </button>
|
|
1012
|
+
* );
|
|
1013
|
+
* }
|
|
1014
|
+
* ```
|
|
1015
|
+
*
|
|
1016
|
+
* @example Componente com estado de carregamento
|
|
1017
|
+
* ```tsx
|
|
1018
|
+
* function ConsentAwareFeature() {
|
|
1019
|
+
* const { consented, preferences } = useConsent();
|
|
1020
|
+
* const canShowFeature = consented && preferences.functional;
|
|
1021
|
+
*
|
|
1022
|
+
* if (!consented) {
|
|
1023
|
+
* return <div>⏳ Aguardando decisão sobre cookies...</div>;
|
|
1024
|
+
* }
|
|
1025
|
+
*
|
|
1026
|
+
* if (!preferences.functional) {
|
|
1027
|
+
* return (
|
|
1028
|
+
* <div>
|
|
1029
|
+
* ❌ Este recurso requer cookies funcionais.
|
|
1030
|
+
* <button onClick={() => window.openPreferencesModal?.()}>
|
|
1031
|
+
* Alterar Preferências
|
|
1032
|
+
* </button>
|
|
1033
|
+
* </div>
|
|
1034
|
+
* );
|
|
1035
|
+
* }
|
|
1036
|
+
*
|
|
1037
|
+
* return <div>✅ Recurso ativo com consentimento!</div>;
|
|
1038
|
+
* }
|
|
1039
|
+
* ```
|
|
1040
|
+
*
|
|
1041
|
+
* @see {@link ConsentProvider} - Provider que deve envolver os componentes
|
|
1042
|
+
* @see {@link ConsentContextValue} - Tipo do valor retornado
|
|
1043
|
+
*
|
|
1044
|
+
* @public
|
|
1045
|
+
* @since 0.1.0
|
|
1046
|
+
*/
|
|
1047
|
+
declare function useConsent(): ConsentContextValue;
|
|
1048
|
+
/**
|
|
1049
|
+
* Hook para acessar os textos personalizáveis da interface de consentimento.
|
|
1050
|
+
*
|
|
1051
|
+
* @remarks
|
|
1052
|
+
* Este hook retorna o objeto completo de textos configurados no `ConsentProvider`.
|
|
1053
|
+
* Os textos incluem tanto os valores padrão em português quanto as customizações
|
|
1054
|
+
* fornecidas via prop `texts`. É útil para criar componentes personalizados
|
|
1055
|
+
* que mantêm consistência com a configuração de textos do projeto.
|
|
1056
|
+
*
|
|
1057
|
+
* ### Textos Básicos Incluídos
|
|
1058
|
+
* - `bannerMessage`: Mensagem principal do banner
|
|
1059
|
+
* - `acceptAll`, `declineAll`, `preferences`: Textos dos botões
|
|
1060
|
+
* - `modalTitle`, `modalIntro`: Cabeçalho do modal
|
|
1061
|
+
* - `save`, `close`: Ações do modal
|
|
1062
|
+
*
|
|
1063
|
+
* ### Textos de Conformidade LGPD/ANPD (Opcionais)
|
|
1064
|
+
* - `controllerInfo`: Informações do controlador de dados
|
|
1065
|
+
* - `dataTypes`: Tipos de dados coletados
|
|
1066
|
+
* - `thirdPartySharing`: Compartilhamento com terceiros
|
|
1067
|
+
* - `userRights`: Direitos do titular dos dados
|
|
1068
|
+
* - `contactInfo`: Contato do DPO (Data Protection Officer)
|
|
1069
|
+
*
|
|
1070
|
+
* ### Personalização e Internacionalização
|
|
1071
|
+
* - Padrão em português brasileiro
|
|
1072
|
+
* - Suporte completo a customização via `ConsentProvider.texts`
|
|
1073
|
+
* - Tipagem TypeScript completa para IntelliSense
|
|
1074
|
+
* - Fallback automático para textos padrão quando não customizados
|
|
1075
|
+
*
|
|
1076
|
+
* @returns O objeto completo de textos da interface, mesclando padrões com customizações
|
|
1077
|
+
*
|
|
1078
|
+
* @throws {Error} Se usado fora do ConsentProvider - verifique se está dentro de `<ConsentProvider>`
|
|
1079
|
+
*
|
|
1080
|
+
* @example Usar textos em componente customizado
|
|
1081
|
+
* ```tsx
|
|
1082
|
+
* function CustomBanner() {
|
|
1083
|
+
* const texts = useConsentTexts();
|
|
1084
|
+
*
|
|
1085
|
+
* return (
|
|
1086
|
+
* <div className="custom-banner">
|
|
1087
|
+
* <p>{texts.bannerMessage}</p>
|
|
1088
|
+
* <button>{texts.acceptAll}</button>
|
|
1089
|
+
* <button>{texts.declineAll}</button>
|
|
1090
|
+
* </div>
|
|
1091
|
+
* );
|
|
1092
|
+
* }
|
|
1093
|
+
* ```
|
|
1094
|
+
*
|
|
1095
|
+
* @example Acessar textos ANPD específicos
|
|
1096
|
+
* ```tsx
|
|
1097
|
+
* function ComplianceInfo() {
|
|
1098
|
+
* const texts = useConsentTexts();
|
|
1099
|
+
*
|
|
1100
|
+
* return (
|
|
1101
|
+
* <div>
|
|
1102
|
+
* {texts.controllerInfo && <p>{texts.controllerInfo}</p>}
|
|
1103
|
+
* {texts.userRights && <p>{texts.userRights}</p>}
|
|
1104
|
+
* {texts.contactInfo && <p>{texts.contactInfo}</p>}
|
|
1105
|
+
* </div>
|
|
1106
|
+
* );
|
|
1107
|
+
* }
|
|
1108
|
+
* ```
|
|
1109
|
+
*
|
|
1110
|
+
* @example Modal customizado com textos consistentes
|
|
1111
|
+
* ```tsx
|
|
1112
|
+
* function CustomPreferencesModal() {
|
|
1113
|
+
* const texts = useConsentTexts();
|
|
1114
|
+
* const { preferences, setPreference, closePreferences } = useConsent();
|
|
1115
|
+
*
|
|
1116
|
+
* return (
|
|
1117
|
+
* <div className="custom-modal">
|
|
1118
|
+
* <h2>{texts.preferencesTitle || texts.modalTitle}</h2>
|
|
1119
|
+
* <p>{texts.preferencesDescription || texts.modalIntro}</p>
|
|
1120
|
+
*
|
|
1121
|
+
* <label>
|
|
1122
|
+
* <input
|
|
1123
|
+
* type="checkbox"
|
|
1124
|
+
* checked={preferences.analytics}
|
|
1125
|
+
* onChange={(e) => setPreference('analytics', e.target.checked)}
|
|
1126
|
+
* />
|
|
1127
|
+
* Cookies Analíticos
|
|
1128
|
+
* </label>
|
|
1129
|
+
*
|
|
1130
|
+
* <div className="modal-actions">
|
|
1131
|
+
* <button onClick={closePreferences}>{texts.close}</button>
|
|
1132
|
+
* <button>{texts.save}</button>
|
|
1133
|
+
* </div>
|
|
1134
|
+
* </div>
|
|
1135
|
+
* );
|
|
1136
|
+
* }
|
|
1137
|
+
* ```
|
|
1138
|
+
*
|
|
1139
|
+
* @example Componente multilíngue com fallbacks
|
|
1140
|
+
* ```tsx
|
|
1141
|
+
* function MultiLanguageBanner() {
|
|
1142
|
+
* const texts = useConsentTexts();
|
|
1143
|
+
* const [language, setLanguage] = useState('pt');
|
|
1144
|
+
*
|
|
1145
|
+
* // Usar textos customizados baseado no idioma
|
|
1146
|
+
* const message = language === 'en'
|
|
1147
|
+
* ? 'We use cookies to improve your experience'
|
|
1148
|
+
* : texts.bannerMessage;
|
|
1149
|
+
*
|
|
1150
|
+
* const acceptText = language === 'en' ? 'Accept All' : texts.acceptAll;
|
|
1151
|
+
*
|
|
1152
|
+
* return (
|
|
1153
|
+
* <div>
|
|
1154
|
+
* <select onChange={(e) => setLanguage(e.target.value)}>
|
|
1155
|
+
* <option value="pt">Português</option>
|
|
1156
|
+
* <option value="en">English</option>
|
|
1157
|
+
* </select>
|
|
1158
|
+
* <p>{message}</p>
|
|
1159
|
+
* <button>{acceptText}</button>
|
|
1160
|
+
* </div>
|
|
1161
|
+
* );
|
|
1162
|
+
* }
|
|
1163
|
+
* ```
|
|
1164
|
+
*
|
|
1165
|
+
* @see {@link ConsentTexts} - Interface completa dos textos
|
|
1166
|
+
* @see {@link ConsentProvider} - Para configurar textos personalizados
|
|
1167
|
+
*
|
|
1168
|
+
* @public
|
|
1169
|
+
* @since 0.1.0
|
|
1170
|
+
*/
|
|
1171
|
+
declare function useConsentTexts(): ConsentTexts;
|
|
1172
|
+
/**
|
|
1173
|
+
* Hook para verificar se a hidratação do estado de consentimento foi concluída.
|
|
1174
|
+
*
|
|
1175
|
+
* @remarks
|
|
1176
|
+
* Em aplicações com Server-Side Rendering (SSR) como Next.js, o estado inicial
|
|
1177
|
+
* é sempre `false` no servidor para evitar diferenças de hidratação. Este hook
|
|
1178
|
+
* permite saber quando a biblioteca já leu o cookie do navegador e atualizou
|
|
1179
|
+
* o estado, evitando o "flash" do banner ou comportamentos inconsistentes.
|
|
1180
|
+
*
|
|
1181
|
+
* ### Casos de Uso Principais
|
|
1182
|
+
* - **Mostrar loading states** enquanto carrega o estado real do cookie
|
|
1183
|
+
* - **Evitar flash of unstyled content (FOUC)** com banners aparecendo/sumindo
|
|
1184
|
+
* - **Sincronizar componentes** que dependem do estado de consentimento
|
|
1185
|
+
* - **Inicializar scripts condicionalmente** apenas após hidratação
|
|
1186
|
+
*
|
|
1187
|
+
* ### Funcionamento Técnico
|
|
1188
|
+
* - No servidor (SSR): sempre retorna `false`
|
|
1189
|
+
* - No cliente: retorna `false` até o `useEffect` ler o cookie
|
|
1190
|
+
* - Após leitura do cookie: retorna `true` permanentemente
|
|
1191
|
+
* - Performance: otimizado para evitar re-renders desnecessários
|
|
1192
|
+
*
|
|
1193
|
+
* ### Frameworks Suportados
|
|
1194
|
+
* - **Next.js**: App Router e Pages Router
|
|
1195
|
+
* - **Remix**: SSR completo
|
|
1196
|
+
* - **Gatsby**: Static Generation + hidratação
|
|
1197
|
+
* - **Vite SSR**: Server-side rendering
|
|
1198
|
+
* - **Create React App**: Client-side only (sempre `true`)
|
|
1199
|
+
*
|
|
1200
|
+
* @returns `true` se a hidratação do cookie foi concluída, `false` durante SSR ou antes da hidratação
|
|
1201
|
+
*
|
|
1202
|
+
* @example Evitar flash do banner
|
|
1203
|
+
* ```tsx
|
|
1204
|
+
* function App() {
|
|
1205
|
+
* const { consented } = useConsent();
|
|
1206
|
+
* const isHydrated = useConsentHydration();
|
|
1207
|
+
*
|
|
1208
|
+
* // Não mostrar nada até hidratar
|
|
1209
|
+
* if (!isHydrated) {
|
|
1210
|
+
* return <div>Carregando...</div>;
|
|
1211
|
+
* }
|
|
1212
|
+
*
|
|
1213
|
+
* return (
|
|
1214
|
+
* <div>
|
|
1215
|
+
* {!consented && <span>Banner aparecerá agora</span>}
|
|
1216
|
+
* </div>
|
|
1217
|
+
* );
|
|
1218
|
+
* }
|
|
1219
|
+
* ```
|
|
1220
|
+
*
|
|
1221
|
+
* @example Controlar carregamento de scripts
|
|
1222
|
+
* ```tsx
|
|
1223
|
+
* function Analytics() {
|
|
1224
|
+
* const { preferences } = useConsent();
|
|
1225
|
+
* const isHydrated = useConsentHydration();
|
|
1226
|
+
*
|
|
1227
|
+
* React.useEffect(() => {
|
|
1228
|
+
* if (isHydrated && preferences.analytics) {
|
|
1229
|
+
* // Só carrega analytics após hidratação
|
|
1230
|
+
* loadGoogleAnalytics();
|
|
1231
|
+
* }
|
|
1232
|
+
* }, [isHydrated, preferences.analytics]);
|
|
1233
|
+
*
|
|
1234
|
+
* return null;
|
|
1235
|
+
* }
|
|
1236
|
+
* ```
|
|
1237
|
+
*
|
|
1238
|
+
* @example Componente com loading state elegante
|
|
1239
|
+
* ```tsx
|
|
1240
|
+
* function ConsentDependentFeature() {
|
|
1241
|
+
* const { consented, preferences } = useConsent();
|
|
1242
|
+
* const isHydrated = useConsentHydration();
|
|
1243
|
+
*
|
|
1244
|
+
* // Estados de loading
|
|
1245
|
+
* if (!isHydrated) {
|
|
1246
|
+
* return <div className="shimmer">Carregando preferências...</div>;
|
|
1247
|
+
* }
|
|
1248
|
+
*
|
|
1249
|
+
* // Estado não consentido
|
|
1250
|
+
* if (!consented) {
|
|
1251
|
+
* return (
|
|
1252
|
+
* <div className="consent-required">
|
|
1253
|
+
* <p>Configure suas preferências de cookies para usar este recurso.</p>
|
|
1254
|
+
* </div>
|
|
1255
|
+
* );
|
|
1256
|
+
* }
|
|
1257
|
+
*
|
|
1258
|
+
* // Estado com consentimento específico
|
|
1259
|
+
* if (!preferences.functional) {
|
|
1260
|
+
* return (
|
|
1261
|
+
* <div className="consent-partial">
|
|
1262
|
+
* <p>Este recurso requer cookies funcionais.</p>
|
|
1263
|
+
* <button onClick={() => window.openPreferencesModal?.()}>
|
|
1264
|
+
* Alterar Preferências
|
|
1265
|
+
* </button>
|
|
1266
|
+
* </div>
|
|
1267
|
+
* );
|
|
1268
|
+
* }
|
|
1269
|
+
*
|
|
1270
|
+
* return <div>🚀 Recurso funcionando com consentimento!</div>;
|
|
1271
|
+
* }
|
|
1272
|
+
* ```
|
|
1273
|
+
*
|
|
1274
|
+
* @example Next.js - Prevenção de hydration mismatch
|
|
1275
|
+
* ```typescript
|
|
1276
|
+
* // pages/_app.tsx
|
|
1277
|
+
* function MyApp(props: any) {
|
|
1278
|
+
* const isHydrated = useConsentHydration();
|
|
1279
|
+
*
|
|
1280
|
+
* // Só renderiza componentes de consentimento após hidratação
|
|
1281
|
+
* // para evitar diferenças entre servidor e cliente
|
|
1282
|
+
* return (
|
|
1283
|
+
* // ConsentProvider envolve tudo
|
|
1284
|
+
* // Component com props normalmente
|
|
1285
|
+
* // CookieBanner só se isHydrated for true
|
|
1286
|
+
* // FloatingPreferencesButton só se isHydrated for true
|
|
1287
|
+
* );
|
|
1288
|
+
* }
|
|
1289
|
+
* ```
|
|
1290
|
+
*
|
|
1291
|
+
* @example Hook customizado para features condicionais
|
|
1292
|
+
* ```tsx
|
|
1293
|
+
* function useConsentAwareFeature(requiredCategory: string) {
|
|
1294
|
+
* const { consented, preferences } = useConsent();
|
|
1295
|
+
* const isHydrated = useConsentHydration();
|
|
1296
|
+
*
|
|
1297
|
+
* const isEnabled = React.useMemo(() => {
|
|
1298
|
+
* if (!isHydrated) return false; // Loading
|
|
1299
|
+
* if (!consented) return false; // No consent
|
|
1300
|
+
* return preferences[requiredCategory] === true;
|
|
1301
|
+
* }, [isHydrated, consented, preferences, requiredCategory]);
|
|
1302
|
+
*
|
|
1303
|
+
* return {
|
|
1304
|
+
* isEnabled,
|
|
1305
|
+
* isLoading: !isHydrated,
|
|
1306
|
+
* hasConsented: consented,
|
|
1307
|
+
* preferences
|
|
1308
|
+
* };
|
|
1309
|
+
* }
|
|
1310
|
+
*
|
|
1311
|
+
* // Uso do hook customizado
|
|
1312
|
+
* function MyFeature() {
|
|
1313
|
+
* const { isEnabled, isLoading } = useConsentAwareFeature('analytics');
|
|
1314
|
+
*
|
|
1315
|
+
* if (isLoading) return <Skeleton />;
|
|
1316
|
+
* if (!isEnabled) return <ConsentRequired />;
|
|
1317
|
+
*
|
|
1318
|
+
* return <AnalyticsChart />;
|
|
1319
|
+
* }
|
|
1320
|
+
* ```
|
|
1321
|
+
*
|
|
1322
|
+
* @see {@link ConsentProvider} - Para configuração SSR
|
|
1323
|
+
*
|
|
1324
|
+
* @public
|
|
1325
|
+
* @since 0.1.0
|
|
1326
|
+
*/
|
|
1327
|
+
declare function useConsentHydration(): boolean;
|
|
1328
|
+
/**
|
|
1329
|
+
* Hook que retorna uma função para abrir o modal de preferências de forma programática.
|
|
1330
|
+
* @hook
|
|
1331
|
+
* @category Hooks
|
|
1332
|
+
* @since 0.3.1+
|
|
1333
|
+
* @remarks
|
|
1334
|
+
* Este hook oferece uma maneira ReactJS-idiomática de abrir o modal de preferências
|
|
1335
|
+
* em qualquer lugar da aplicação. Diferente do botão flutuante padrão, permite
|
|
1336
|
+
* controle total sobre quando e como o modal é acionado.
|
|
1337
|
+
*
|
|
1338
|
+
* ### Casos de Uso Principais
|
|
1339
|
+
* - **Links no footer/header**: "Configurações de Cookies", "Preferências"
|
|
1340
|
+
* - **Botões customizados**: Design próprio para abrir preferências
|
|
1341
|
+
* - **Fluxos condicionais**: Abrir modal baseado em ações do usuário
|
|
1342
|
+
* - **Integração com menus**: Adicionar item de menu para configurações
|
|
1343
|
+
*
|
|
1344
|
+
* ### Vantagens sobre função global
|
|
1345
|
+
* - **Type-safe**: TypeScript com tipagem completa
|
|
1346
|
+
* - **React-friendly**: Integra com ciclo de vida dos componentes
|
|
1347
|
+
* - **Automático**: Sem necessidade de verificar se ConsentProvider existe
|
|
1348
|
+
* - **Testável**: Fácil de mockar em testes unitários
|
|
1349
|
+
*
|
|
1350
|
+
* ### Performance
|
|
1351
|
+
* - Função estável: não causa re-renders quando usada como dependency
|
|
1352
|
+
* - Memoizada internamente para otimização
|
|
1353
|
+
* - Sem overhead: apenas proxy para ação interna do contexto
|
|
1354
|
+
*
|
|
1355
|
+
* @returns Uma função estável que abre o modal de preferências quando chamada
|
|
1356
|
+
*
|
|
1357
|
+
* @throws {Error} Se usado fora do ConsentProvider - verifique se está dentro de `<ConsentProvider>`
|
|
1358
|
+
*
|
|
1359
|
+
* @example Hook básico no footer
|
|
1360
|
+
* ```tsx
|
|
1361
|
+
* function MeuFooter() {
|
|
1362
|
+
* const abrirModal = useOpenPreferencesModal();
|
|
1363
|
+
*
|
|
1364
|
+
* return (
|
|
1365
|
+
* <footer>
|
|
1366
|
+
* <a href="#" onClick={abrirModal}>
|
|
1367
|
+
* Configurações de Cookies
|
|
1368
|
+
* </a>
|
|
1369
|
+
* </footer>
|
|
1370
|
+
* );
|
|
1371
|
+
* }
|
|
1372
|
+
* ```
|
|
1373
|
+
*
|
|
1374
|
+
* @example Botão customizado com ícone
|
|
1375
|
+
* ```tsx
|
|
1376
|
+
* import { Settings } from '@mui/icons-material';
|
|
1377
|
+
*
|
|
1378
|
+
* function CustomPreferencesButton() {
|
|
1379
|
+
* const openModal = useOpenPreferencesModal();
|
|
1380
|
+
*
|
|
1381
|
+
* return (
|
|
1382
|
+
* <button
|
|
1383
|
+
* onClick={openModal}
|
|
1384
|
+
* className="preferences-btn"
|
|
1385
|
+
* aria-label="Configurar cookies"
|
|
1386
|
+
* >
|
|
1387
|
+
* <Settings /> Cookies
|
|
1388
|
+
* </button>
|
|
1389
|
+
* );
|
|
1390
|
+
* }
|
|
1391
|
+
* ```
|
|
1392
|
+
*
|
|
1393
|
+
* @example Menu dropdown com opções
|
|
1394
|
+
* ```tsx
|
|
1395
|
+
* function UserMenu() {
|
|
1396
|
+
* const openPreferences = useOpenPreferencesModal();
|
|
1397
|
+
* const [menuOpen, setMenuOpen] = useState(false);
|
|
1398
|
+
*
|
|
1399
|
+
* return (
|
|
1400
|
+
* <div className="user-menu">
|
|
1401
|
+
* <button onClick={() => setMenuOpen(!menuOpen)}>
|
|
1402
|
+
* Menu ▼
|
|
1403
|
+
* </button>
|
|
1404
|
+
* {menuOpen && (
|
|
1405
|
+
* <ul>
|
|
1406
|
+
* <li><a href="/profile">Meu Perfil</a></li>
|
|
1407
|
+
* <li><a href="/settings">Configurações</a></li>
|
|
1408
|
+
* <li>
|
|
1409
|
+
* <button onClick={openPreferences}>
|
|
1410
|
+
* Preferências de Cookies
|
|
1411
|
+
* </button>
|
|
1412
|
+
* </li>
|
|
1413
|
+
* </ul>
|
|
1414
|
+
* )}
|
|
1415
|
+
* </div>
|
|
1416
|
+
* );
|
|
1417
|
+
* }
|
|
1418
|
+
* ```
|
|
1419
|
+
*
|
|
1420
|
+
* @example Integração com router para mudança de página
|
|
1421
|
+
* ```tsx
|
|
1422
|
+
* function CookieSettingsPage() {
|
|
1423
|
+
* const openModal = useOpenPreferencesModal();
|
|
1424
|
+
* const navigate = useNavigate(); // React Router
|
|
1425
|
+
*
|
|
1426
|
+
* React.useEffect(() => {
|
|
1427
|
+
* // Abre modal automaticamente na página de configurações
|
|
1428
|
+
* openModal();
|
|
1429
|
+
* }, [openModal]);
|
|
1430
|
+
*
|
|
1431
|
+
* const handleModalClose = () => {
|
|
1432
|
+
* // Volta para página anterior quando modal fechar
|
|
1433
|
+
* navigate(-1);
|
|
1434
|
+
* };
|
|
1435
|
+
*
|
|
1436
|
+
* return <div>Configurações de cookies carregando...</div>;
|
|
1437
|
+
* }
|
|
1438
|
+
* ```
|
|
1439
|
+
*
|
|
1440
|
+
* @example Hook condicional com verificação de consentimento
|
|
1441
|
+
* ```tsx
|
|
1442
|
+
* function SmartCookieButton() {
|
|
1443
|
+
* const { consented } = useConsent();
|
|
1444
|
+
* const openPreferences = useOpenPreferencesModal();
|
|
1445
|
+
*
|
|
1446
|
+
* // Se usuário já deu consentimento, mostra "Alterar"
|
|
1447
|
+
* // Se não deu consentimento, mostra "Configurar"
|
|
1448
|
+
* const buttonText = consented ? 'Alterar Preferências' : 'Configurar Cookies';
|
|
1449
|
+
* const buttonIcon = consented ? '⚙️' : '🍪';
|
|
1450
|
+
*
|
|
1451
|
+
* return (
|
|
1452
|
+
* <button
|
|
1453
|
+
* onClick={openPreferences}
|
|
1454
|
+
* className={consented ? 'modify-btn' : 'setup-btn'}
|
|
1455
|
+
* >
|
|
1456
|
+
* {buttonIcon} {buttonText}
|
|
1457
|
+
* </button>
|
|
1458
|
+
* );
|
|
1459
|
+
* }
|
|
1460
|
+
* ```
|
|
1461
|
+
*/
|
|
1462
|
+
declare function useOpenPreferencesModal(): () => void;
|
|
1463
|
+
declare function openPreferencesModal(): void;
|
|
1464
|
+
|
|
1465
|
+
/**
|
|
1466
|
+
* @interface DeveloperGuidance
|
|
1467
|
+
* Define a estrutura do objeto de orientação para desenvolvedores, contendo avisos, sugestões e informações sobre categorias ativas.
|
|
1468
|
+
*/
|
|
1469
|
+
interface DeveloperGuidance {
|
|
1470
|
+
/** Um array de strings, cada uma representando um aviso sobre a configuração. */
|
|
1471
|
+
warnings: string[];
|
|
1472
|
+
/** Um array de strings, cada uma representando uma sugestão para melhorar a conformidade ou UX. */
|
|
1473
|
+
suggestions: string[];
|
|
1474
|
+
/** Um array de objetos, cada um descrevendo uma categoria de cookie ativa e suas propriedades relevantes para a UI. */
|
|
1475
|
+
activeCategoriesInfo: {
|
|
1476
|
+
id: string;
|
|
1477
|
+
name: string;
|
|
1478
|
+
description: string;
|
|
1479
|
+
essential: boolean;
|
|
1480
|
+
uiRequired: boolean;
|
|
1481
|
+
}[];
|
|
1482
|
+
/** Indica se a configuração padrão da biblioteca está sendo utilizada (quando nenhuma configuração explícita é fornecida). */
|
|
1483
|
+
usingDefaults: boolean;
|
|
1484
|
+
}
|
|
1485
|
+
/**
|
|
1486
|
+
* @constant
|
|
1487
|
+
* @category Utils
|
|
1488
|
+
* @since 0.2.2
|
|
1489
|
+
* Configuração padrão de categorias de cookies utilizada quando o desenvolvedor não especifica nenhuma configuração.
|
|
1490
|
+
* Inclui apenas a categoria 'analytics' além da 'necessary' (que é sempre incluída).
|
|
1491
|
+
*/
|
|
1492
|
+
declare const DEFAULT_PROJECT_CATEGORIES: ProjectCategoriesConfig;
|
|
1493
|
+
/**
|
|
1494
|
+
* @function
|
|
1495
|
+
* @category Utils
|
|
1496
|
+
* @since 0.2.2
|
|
1497
|
+
* Analisa a configuração de categorias do projeto e gera um objeto de orientação para o desenvolvedor.
|
|
1498
|
+
* Este objeto contém avisos, sugestões e informações detalhadas sobre as categorias ativas.
|
|
1499
|
+
*
|
|
1500
|
+
* @param {ProjectCategoriesConfig} [config] A configuração de categorias fornecida pelo desenvolvedor. Se não for fornecida, a configuração padrão será utilizada.
|
|
1501
|
+
* @returns {DeveloperGuidance} Um objeto `DeveloperGuidance` com a análise da configuração.
|
|
1502
|
+
*/
|
|
1503
|
+
declare function analyzeDeveloperConfiguration(config?: ProjectCategoriesConfig): DeveloperGuidance;
|
|
1504
|
+
|
|
1505
|
+
/**
|
|
1506
|
+
* @interface CategoriesContextValue
|
|
1507
|
+
* O valor fornecido pelo `CategoriesContext`, contendo informações sobre as categorias de cookies ativas no projeto.
|
|
1508
|
+
*/
|
|
1509
|
+
interface CategoriesContextValue {
|
|
1510
|
+
/** A configuração final das categorias, incluindo padrões aplicados. */
|
|
1511
|
+
config: ProjectCategoriesConfig;
|
|
1512
|
+
/** Análise e orientações para desenvolvedores, incluindo avisos e sugestões. */
|
|
1513
|
+
guidance: DeveloperGuidance;
|
|
1514
|
+
/** Um array de categorias que requerem um toggle na UI de preferências (não essenciais). */
|
|
1515
|
+
toggleableCategories: DeveloperGuidance['activeCategoriesInfo'];
|
|
1516
|
+
/** Um array contendo todas as categorias ativas no projeto (essenciais e não essenciais). */
|
|
1517
|
+
allCategories: DeveloperGuidance['activeCategoriesInfo'];
|
|
1518
|
+
}
|
|
1519
|
+
/**
|
|
1520
|
+
* @hook
|
|
1521
|
+
* @category Hooks
|
|
1522
|
+
* @since 0.2.2
|
|
1523
|
+
* Hook para acessar informações sobre as categorias de cookies ativas no projeto.
|
|
1524
|
+
*
|
|
1525
|
+
* @remarks
|
|
1526
|
+
* Este hook deve ser usado dentro do `ConsentProvider` (que internamente renderiza o `CategoriesProvider`).
|
|
1527
|
+
* Ele é útil para construir componentes de UI customizados que precisam se adaptar dinamicamente às categorias configuradas.
|
|
1528
|
+
*
|
|
1529
|
+
* @returns {CategoriesContextValue} Um objeto contendo a configuração, orientações e listas de categorias.
|
|
1530
|
+
*
|
|
1531
|
+
* @throws {Error} Se usado fora do `CategoriesProvider`.
|
|
1532
|
+
*/
|
|
1533
|
+
declare function useCategories(): CategoriesContextValue;
|
|
1534
|
+
/**
|
|
1535
|
+
* @hook
|
|
1536
|
+
* @category Hooks
|
|
1537
|
+
* @since 0.2.2
|
|
1538
|
+
* Hook de conveniência para verificar o status de uma categoria de cookie específica.
|
|
1539
|
+
*
|
|
1540
|
+
* @param {string} categoryId O ID da categoria a ser verificada (ex: 'analytics', 'necessary').
|
|
1541
|
+
* @returns {object} Um objeto com o status da categoria:
|
|
1542
|
+
* - `isActive`: `true` se a categoria está configurada e ativa no projeto.
|
|
1543
|
+
* - `isEssential`: `true` se a categoria é essencial (não pode ser desativada pelo usuário).
|
|
1544
|
+
* - `needsToggle`: `true` se a categoria requer um controle (switch) na UI de preferências.
|
|
1545
|
+
* - `name`: O nome amigável da categoria.
|
|
1546
|
+
* - `description`: A descrição da categoria.
|
|
1547
|
+
* @example
|
|
1548
|
+
* ```tsx
|
|
1549
|
+
* const analyticsStatus = useCategoryStatus('analytics')
|
|
1550
|
+
* if (analyticsStatus.isActive && analyticsStatus.needsToggle) {
|
|
1551
|
+
* // Renderizar switch para analytics
|
|
1552
|
+
* }
|
|
1553
|
+
* ```
|
|
1554
|
+
*/
|
|
1555
|
+
declare function useCategoryStatus(categoryId: string): {
|
|
1556
|
+
isActive: boolean;
|
|
1557
|
+
isEssential: boolean;
|
|
1558
|
+
needsToggle: boolean;
|
|
1559
|
+
name: string | undefined;
|
|
1560
|
+
description: string | undefined;
|
|
1561
|
+
};
|
|
1562
|
+
|
|
1563
|
+
declare function ConsentGate(props: Readonly<{
|
|
1564
|
+
category: string;
|
|
1565
|
+
children: React$1.ReactNode;
|
|
1566
|
+
}>): react_jsx_runtime.JSX.Element | null;
|
|
1567
|
+
|
|
1568
|
+
/**
|
|
1569
|
+
* @function
|
|
1570
|
+
* @category Utils
|
|
1571
|
+
* @since 0.1.0
|
|
1572
|
+
* Carrega dinamicamente um script externo no DOM.
|
|
1573
|
+
*
|
|
1574
|
+
* @remarks
|
|
1575
|
+
* Esta função é utilizada internamente pela biblioteca para carregar scripts de integração
|
|
1576
|
+
* após o consentimento do usuário. Ela garante que o script só seja inserido na página
|
|
1577
|
+
* se o consentimento for dado e o contexto estiver disponível.
|
|
1578
|
+
*
|
|
1579
|
+
* @param {string} id Um identificador único para o elemento `<script>` a ser criado.
|
|
1580
|
+
* @param {string} src A URL do script externo a ser carregado.
|
|
1581
|
+
* @param {'analytics' | 'marketing' | null} [category=null] A categoria de consentimento exigida para o script. Se o consentimento para esta categoria não for dado, o script não será carregado.
|
|
1582
|
+
* @param {Record<string, string>} [attrs={}] Atributos adicionais a serem aplicados ao elemento `<script>` (ex: `{ async: 'true' }`).
|
|
1583
|
+
* @returns {Promise<void>} Uma Promise que resolve quando o script é carregado com sucesso, ou rejeita se o consentimento não for dado ou ocorrer um erro de carregamento.
|
|
1584
|
+
* @example
|
|
1585
|
+
* ```ts
|
|
1586
|
+
* // Carregar um script de analytics após o consentimento
|
|
1587
|
+
* loadScript('my-analytics-script', 'https://example.com/analytics.js', 'analytics')
|
|
1588
|
+
* .then(() => console.log('Script de analytics carregado!'))
|
|
1589
|
+
* .catch(error => console.error('Erro ao carregar script:', error))
|
|
1590
|
+
* ```
|
|
1591
|
+
*/
|
|
1592
|
+
declare function loadScript(id: string, src: string, category?: 'analytics' | 'marketing' | null, attrs?: Record<string, string>): Promise<void>;
|
|
1593
|
+
|
|
1594
|
+
/**
|
|
1595
|
+
* @constant
|
|
1596
|
+
* @category Utils
|
|
1597
|
+
* @since 0.1.0
|
|
1598
|
+
* Tema padrão utilizado pelos componentes de consentimento da biblioteca.
|
|
1599
|
+
*
|
|
1600
|
+
* Inclui configurações de cores, tipografia e estilos para componentes Material-UI,
|
|
1601
|
+
* garantindo aparência consistente e acessível conforme guidelines LGPD.
|
|
1602
|
+
*
|
|
1603
|
+
* @remarks
|
|
1604
|
+
* Pode ser sobrescrito via ThemeProvider externo se necessário.
|
|
1605
|
+
*/
|
|
1606
|
+
declare const defaultConsentTheme: _mui_material_styles.Theme;
|
|
1607
|
+
|
|
1608
|
+
/**
|
|
1609
|
+
* @interface ScriptIntegration
|
|
1610
|
+
* Define a estrutura de um objeto de integração de script, usado para carregar scripts de terceiros condicionalmente.
|
|
1611
|
+
*/
|
|
1612
|
+
interface ScriptIntegration {
|
|
1613
|
+
/** Um ID único para esta integração de script. */
|
|
1614
|
+
id: string;
|
|
1615
|
+
/** A categoria de consentimento necessária para que este script seja carregado (ex: 'analytics', 'marketing'). */
|
|
1616
|
+
category: string;
|
|
1617
|
+
/** A URL do script a ser carregado. */
|
|
1618
|
+
src: string;
|
|
1619
|
+
/** Uma função opcional a ser executada após o script ser carregado e inicializado no DOM. */
|
|
1620
|
+
init?: () => void;
|
|
1621
|
+
/** Um objeto de atributos HTML a serem adicionados à tag `<script>` (ex: `{ async: 'true' }`). */
|
|
1622
|
+
attrs?: Record<string, string>;
|
|
1623
|
+
}
|
|
1624
|
+
/**
|
|
1625
|
+
* @interface GoogleAnalyticsConfig
|
|
1626
|
+
* Configuração específica para a integração com o Google Analytics 4 (GA4).
|
|
1627
|
+
*/
|
|
1628
|
+
interface GoogleAnalyticsConfig {
|
|
1629
|
+
/** O ID de medição do GA4 (ex: 'G-XXXXXXXXXX'). */
|
|
1630
|
+
measurementId: string;
|
|
1631
|
+
/** Um objeto opcional de configuração adicional a ser passado para o comando `gtag('config')`. */
|
|
1632
|
+
config?: any;
|
|
1633
|
+
}
|
|
1634
|
+
/**
|
|
1635
|
+
* @interface GoogleTagManagerConfig
|
|
1636
|
+
* Configuração específica para a integração com o Google Tag Manager (GTM).
|
|
1637
|
+
*/
|
|
1638
|
+
interface GoogleTagManagerConfig {
|
|
1639
|
+
/** O ID do contêiner do GTM (ex: 'GTM-XXXXXXX'). */
|
|
1640
|
+
containerId: string;
|
|
1641
|
+
/** O nome da camada de dados (dataLayer) a ser usada. Padrão: 'dataLayer'. */
|
|
1642
|
+
dataLayerName?: string;
|
|
1643
|
+
}
|
|
1644
|
+
/**
|
|
1645
|
+
* @interface UserWayConfig
|
|
1646
|
+
* Configuração específica para a integração com o widget de acessibilidade UserWay.
|
|
1647
|
+
*/
|
|
1648
|
+
interface UserWayConfig {
|
|
1649
|
+
/** O ID da conta UserWay. */
|
|
1650
|
+
accountId: string;
|
|
1651
|
+
}
|
|
1652
|
+
/**
|
|
1653
|
+
* @function
|
|
1654
|
+
* @category Utils
|
|
1655
|
+
* @since 0.2.0
|
|
1656
|
+
* Cria um objeto de integração para o Google Analytics 4 (GA4).
|
|
1657
|
+
*
|
|
1658
|
+
* @param {GoogleAnalyticsConfig} config A configuração do GA4, incluindo o `measurementId`.
|
|
1659
|
+
* @returns {ScriptIntegration} Um objeto `ScriptIntegration` configurado para o GA4.
|
|
1660
|
+
*/
|
|
1661
|
+
declare function createGoogleAnalyticsIntegration(config: GoogleAnalyticsConfig): ScriptIntegration;
|
|
1662
|
+
/**
|
|
1663
|
+
* @function
|
|
1664
|
+
* @category Utils
|
|
1665
|
+
* @since 0.2.0
|
|
1666
|
+
* Cria um objeto de integração para o Google Tag Manager (GTM).
|
|
1667
|
+
*
|
|
1668
|
+
* @param {GoogleTagManagerConfig} config A configuração do GTM, incluindo o `containerId`.
|
|
1669
|
+
* @returns {ScriptIntegration} Um objeto `ScriptIntegration` configurado para o GTM.
|
|
1670
|
+
*/
|
|
1671
|
+
declare function createGoogleTagManagerIntegration(config: GoogleTagManagerConfig): ScriptIntegration;
|
|
1672
|
+
/**
|
|
1673
|
+
* @function
|
|
1674
|
+
* @category Utils
|
|
1675
|
+
* @since 0.2.0
|
|
1676
|
+
* Cria um objeto de integração para o widget de acessibilidade UserWay.
|
|
1677
|
+
*
|
|
1678
|
+
* @param {UserWayConfig} config A configuração do UserWay, incluindo o `accountId`.
|
|
1679
|
+
* @returns {ScriptIntegration} Um objeto `ScriptIntegration` configurado para o UserWay.
|
|
1680
|
+
*/
|
|
1681
|
+
declare function createUserWayIntegration(config: UserWayConfig): ScriptIntegration;
|
|
1682
|
+
/**
|
|
1683
|
+
* @constant
|
|
1684
|
+
* @category Utils
|
|
1685
|
+
* @since 0.2.0
|
|
1686
|
+
* Objeto contendo as factory functions para as integrações pré-configuradas mais comuns.
|
|
1687
|
+
*
|
|
1688
|
+
* @example
|
|
1689
|
+
* ```tsx
|
|
1690
|
+
* import { COMMON_INTEGRATIONS } from 'react-lgpd-consent';
|
|
1691
|
+
* const gaIntegration = COMMON_INTEGRATIONS.googleAnalytics({ measurementId: 'G-XYZ' });
|
|
1692
|
+
* ```
|
|
1693
|
+
*/
|
|
1694
|
+
declare const COMMON_INTEGRATIONS: {
|
|
1695
|
+
googleAnalytics: typeof createGoogleAnalyticsIntegration;
|
|
1696
|
+
googleTagManager: typeof createGoogleTagManagerIntegration;
|
|
1697
|
+
userway: typeof createUserWayIntegration;
|
|
1698
|
+
};
|
|
1699
|
+
|
|
1700
|
+
/**
|
|
1701
|
+
* Componente que carrega scripts automaticamente baseado no consentimento.
|
|
1702
|
+
* Facilita integração com ferramentas como Google Analytics, Tag Manager, etc.
|
|
1703
|
+
*/
|
|
1704
|
+
|
|
1705
|
+
interface ConsentScriptLoaderProps {
|
|
1706
|
+
/** Lista de integrações de scripts para carregar baseado no consentimento */
|
|
1707
|
+
integrations: ScriptIntegration[];
|
|
1708
|
+
/** Se true, força recarregamento se consentimento mudar */
|
|
1709
|
+
reloadOnChange?: boolean;
|
|
1710
|
+
}
|
|
1711
|
+
/**
|
|
1712
|
+
* @component
|
|
1713
|
+
* @category Utils
|
|
1714
|
+
* @since 0.2.0
|
|
1715
|
+
* Componente que não renderiza UI, mas gerencia o carregamento de scripts de terceiros
|
|
1716
|
+
* (como Google Analytics) com base nas preferências de consentimento do usuário.
|
|
1717
|
+
*
|
|
1718
|
+
* @param props As propriedades do componente.
|
|
1719
|
+
* @param {ScriptIntegration[]} props.integrations Um array de objetos de integração de script. Use as factory functions (`createGoogleAnalyticsIntegration`, etc.) para criar.
|
|
1720
|
+
* @param {boolean} [props.reloadOnChange=false] Se `true`, recarrega os scripts se as preferências de consentimento mudarem.
|
|
1721
|
+
*
|
|
1722
|
+
* @example
|
|
1723
|
+
* ```tsx
|
|
1724
|
+
* const integrations = [
|
|
1725
|
+
* createGoogleAnalyticsIntegration({ measurementId: 'GA_ID' }),
|
|
1726
|
+
* createFacebookPixelIntegration({ pixelId: 'PIXEL_ID' })
|
|
1727
|
+
* ];
|
|
696
1728
|
*
|
|
697
1729
|
* <ConsentScriptLoader integrations={integrations} />
|
|
698
1730
|
* ```
|
|
699
1731
|
*/
|
|
700
1732
|
declare function ConsentScriptLoader({ integrations, reloadOnChange, }: Readonly<ConsentScriptLoaderProps>): null;
|
|
701
1733
|
/**
|
|
702
|
-
*
|
|
1734
|
+
* @hook
|
|
1735
|
+
* @category Hooks
|
|
1736
|
+
* @since 0.2.0
|
|
1737
|
+
* Hook para carregamento programático de um script baseado no consentimento.
|
|
1738
|
+
*
|
|
1739
|
+
* @returns Uma função assíncrona que recebe um objeto de integração de script e tenta carregá-lo.
|
|
1740
|
+
* Retorna `true` em caso de sucesso e `false` em caso de falha (por falta de consentimento ou erro de rede).
|
|
703
1741
|
*
|
|
704
1742
|
* @example
|
|
705
1743
|
* ```tsx
|
|
706
|
-
*
|
|
707
|
-
* const loadConsentScript = useConsentScriptLoader()
|
|
1744
|
+
* const loadScript = useConsentScriptLoader();
|
|
708
1745
|
*
|
|
709
|
-
*
|
|
710
|
-
*
|
|
711
|
-
*
|
|
712
|
-
*
|
|
713
|
-
*
|
|
714
|
-
*
|
|
715
|
-
*
|
|
716
|
-
*
|
|
1746
|
+
* useEffect(() => {
|
|
1747
|
+
* const handleUserAction = async () => {
|
|
1748
|
+
* const hotjarIntegration = { id: 'hotjar', category: 'analytics', src: '...' };
|
|
1749
|
+
* const success = await loadScript(hotjarIntegration);
|
|
1750
|
+
* if (success) {
|
|
1751
|
+
* console.log('Hotjar carregado com sucesso!');
|
|
1752
|
+
* }
|
|
1753
|
+
* };
|
|
1754
|
+
*
|
|
1755
|
+
* // Exemplo: carregar script após uma ação específica do usuário
|
|
1756
|
+
* myButton.addEventListener('click', handleUserAction);
|
|
1757
|
+
* }, [loadScript]);
|
|
717
1758
|
* ```
|
|
718
1759
|
*/
|
|
719
1760
|
declare function useConsentScriptLoader(): (integration: ScriptIntegration) => Promise<boolean>;
|
|
720
1761
|
|
|
721
|
-
|
|
1762
|
+
/**
|
|
1763
|
+
* @enum LogLevel
|
|
1764
|
+
* @category Utils
|
|
1765
|
+
* @since 0.3.1
|
|
1766
|
+
* Define os níveis de severidade para os logs da biblioteca.
|
|
1767
|
+
*/
|
|
1768
|
+
declare enum LogLevel {
|
|
1769
|
+
/** Mensagens de erro críticas. */
|
|
1770
|
+
ERROR = 0,
|
|
1771
|
+
/** Mensagens de aviso sobre possíveis problemas. */
|
|
1772
|
+
WARN = 1,
|
|
1773
|
+
/** Mensagens informativas sobre o fluxo da aplicação. */
|
|
1774
|
+
INFO = 2,
|
|
1775
|
+
/** Mensagens detalhadas para depuração. */
|
|
1776
|
+
DEBUG = 3
|
|
1777
|
+
}
|
|
1778
|
+
/**
|
|
1779
|
+
* @function
|
|
1780
|
+
* @category Utils
|
|
1781
|
+
* @since 0.3.1
|
|
1782
|
+
* Habilita ou desabilita o sistema de logging de debug da biblioteca externamente.
|
|
1783
|
+
* Útil para troubleshooting em produção quando necessário, pois os logs são desabilitados por padrão em builds de produção.
|
|
1784
|
+
*
|
|
1785
|
+
* @param {boolean} enabled Se `true`, os logs serão exibidos; caso contrário, serão suprimidos.
|
|
1786
|
+
* @param {LogLevel} [level=LogLevel.INFO] O nível mínimo de severidade para os logs. Padrão: `LogLevel.INFO`.
|
|
1787
|
+
*
|
|
1788
|
+
* @example
|
|
1789
|
+
* ```typescript
|
|
1790
|
+
* import { setDebugLogging, LogLevel } from 'react-lgpd-consent';
|
|
1791
|
+
*
|
|
1792
|
+
* // Habilitar logs detalhados em desenvolvimento
|
|
1793
|
+
* setDebugLogging(true, LogLevel.DEBUG);
|
|
1794
|
+
*
|
|
1795
|
+
* // Desabilitar todos os logs em produção (já é o padrão, mas pode ser forçado)
|
|
1796
|
+
* setDebugLogging(false);
|
|
1797
|
+
* ```
|
|
1798
|
+
*/
|
|
1799
|
+
declare function setDebugLogging(enabled: boolean, level?: LogLevel): void;
|
|
1800
|
+
|
|
1801
|
+
/**
|
|
1802
|
+
* Propriedades para customizar o comportamento e aparência do componente CookieBanner.
|
|
1803
|
+
*
|
|
1804
|
+
* @remarks
|
|
1805
|
+
* Esta interface permite controle completo sobre o banner de consentimento, desde
|
|
1806
|
+
* o comportamento de exibição até a customização visual avançada. O banner pode
|
|
1807
|
+
* operar em dois modos principais: bloqueante (modal) ou não-bloqueante (snackbar).
|
|
1808
|
+
*
|
|
1809
|
+
* ### Modos de Exibição
|
|
1810
|
+
* - **Bloqueante** (`blocking: true`): Banner como modal sobreposto, impede interação
|
|
1811
|
+
* - **Não-bloqueante** (`blocking: false`): Banner como snackbar, permite navegação
|
|
1812
|
+
*
|
|
1813
|
+
* ### Integração com Material-UI
|
|
1814
|
+
* - Suporte completo a theming via `ThemeProvider`
|
|
1815
|
+
* - Props diretas para componentes internos (`SnackbarProps`, `PaperProps`)
|
|
1816
|
+
* - Compatibilidade com design tokens customizados
|
|
1817
|
+
* - Responsividade automática em diferentes viewport sizes
|
|
1818
|
+
*
|
|
1819
|
+
* ### Debug e Desenvolvimento
|
|
1820
|
+
* - Prop `debug` força exibição independente do estado de consentimento
|
|
1821
|
+
* - Logging automático de interações do usuário quando ativo
|
|
1822
|
+
* - Suporte a React DevTools para inspecionar props
|
|
1823
|
+
*
|
|
1824
|
+
* @example Configuração básica
|
|
1825
|
+
* ```tsx
|
|
1826
|
+
* <CookieBanner
|
|
1827
|
+
* policyLinkUrl="/privacy-policy"
|
|
1828
|
+
* blocking={false}
|
|
1829
|
+
* />
|
|
1830
|
+
* ```
|
|
1831
|
+
*
|
|
1832
|
+
* @example Configuração avançada com customização
|
|
1833
|
+
* ```tsx
|
|
1834
|
+
* <CookieBanner
|
|
1835
|
+
* policyLinkUrl="https://example.com/cookies"
|
|
1836
|
+
* blocking={true}
|
|
1837
|
+
* hideBranding={true}
|
|
1838
|
+
* debug={process.env.NODE_ENV === 'development'}
|
|
1839
|
+
* SnackbarProps={{
|
|
1840
|
+
* anchorOrigin: { vertical: 'top', horizontal: 'center' }
|
|
1841
|
+
* }}
|
|
1842
|
+
* PaperProps={{
|
|
1843
|
+
* elevation: 8,
|
|
1844
|
+
* sx: { borderRadius: 2 }
|
|
1845
|
+
* }}
|
|
1846
|
+
* />
|
|
1847
|
+
* ```
|
|
1848
|
+
*
|
|
1849
|
+
* @public
|
|
1850
|
+
* @since 0.1.0
|
|
1851
|
+
*/
|
|
1852
|
+
interface CookieBannerProps {
|
|
1853
|
+
/**
|
|
1854
|
+
* URL para a política de privacidade ou cookies do site.
|
|
1855
|
+
*
|
|
1856
|
+
* @remarks
|
|
1857
|
+
* Quando fornecida, aparece como link "Política de Privacidade" no banner.
|
|
1858
|
+
* Link abre em nova aba/janela (`target="_blank"`) por segurança.
|
|
1859
|
+
*
|
|
1860
|
+
* @example "/privacy-policy" | "https://example.com/cookies"
|
|
1861
|
+
*/
|
|
1862
|
+
policyLinkUrl?: string;
|
|
1863
|
+
/**
|
|
1864
|
+
* Força exibição do banner em modo de debug, independente do consentimento.
|
|
1865
|
+
*
|
|
1866
|
+
* @remarks
|
|
1867
|
+
* Útil durante desenvolvimento para testar diferentes estados visuais.
|
|
1868
|
+
* **Nunca deixe `true` em produção** - causará exibição permanente do banner.
|
|
1869
|
+
*
|
|
1870
|
+
* @defaultValue false
|
|
1871
|
+
*/
|
|
1872
|
+
debug?: boolean;
|
|
1873
|
+
/**
|
|
1874
|
+
* Controla se o banner bloqueia interação com o restante da página.
|
|
1875
|
+
*
|
|
1876
|
+
* @remarks
|
|
1877
|
+
* - `true`: Banner como modal/overlay, bloqueia interação até decisão
|
|
1878
|
+
* - `false`: Banner como snackbar, permite navegação normal
|
|
1879
|
+
*
|
|
1880
|
+
* Banner bloqueante é mais eficaz para compliance, mas pode afetar UX.
|
|
1881
|
+
*
|
|
1882
|
+
* @defaultValue true
|
|
1883
|
+
*/
|
|
1884
|
+
blocking?: boolean;
|
|
1885
|
+
/**
|
|
1886
|
+
* Oculta a marca "fornecido por LÉdipO.eti.br" no banner.
|
|
1887
|
+
*
|
|
1888
|
+
* @remarks
|
|
1889
|
+
* A biblioteca é open-source e gratuita. O branding é uma forma de apoiar
|
|
1890
|
+
* o projeto, mas pode ser removido se necessário para sua marca.
|
|
1891
|
+
*
|
|
1892
|
+
* @defaultValue false
|
|
1893
|
+
*/
|
|
1894
|
+
hideBranding?: boolean;
|
|
1895
|
+
/**
|
|
1896
|
+
* Propriedades personalizadas para o componente Snackbar (modo não-bloqueante).
|
|
1897
|
+
*
|
|
1898
|
+
* @remarks
|
|
1899
|
+
* Aplica-se apenas quando `blocking={false}`. Permite customização completa
|
|
1900
|
+
* da posição, animação e comportamento do snackbar do Material-UI.
|
|
1901
|
+
*
|
|
1902
|
+
* @example
|
|
1903
|
+
* ```tsx
|
|
1904
|
+
* SnackbarProps={{
|
|
1905
|
+
* anchorOrigin: { vertical: 'top', horizontal: 'center' },
|
|
1906
|
+
* autoHideDuration: null, // Banner fica até decisão do usuário
|
|
1907
|
+
* TransitionComponent: Slide
|
|
1908
|
+
* }}
|
|
1909
|
+
* ```
|
|
1910
|
+
*/
|
|
1911
|
+
SnackbarProps?: Partial<SnackbarProps>;
|
|
1912
|
+
/**
|
|
1913
|
+
* Propriedades personalizadas para o componente Paper que envolve o conteúdo.
|
|
1914
|
+
*
|
|
1915
|
+
* @remarks
|
|
1916
|
+
* Permite customização avançada da aparência: elevação, bordas, cores, etc.
|
|
1917
|
+
* Aplicado em ambos os modos (bloqueante e não-bloqueante).
|
|
1918
|
+
*
|
|
1919
|
+
* @example
|
|
1920
|
+
* ```tsx
|
|
1921
|
+
* PaperProps={{
|
|
1922
|
+
* elevation: 12,
|
|
1923
|
+
* sx: {
|
|
1924
|
+
* borderRadius: '16px',
|
|
1925
|
+
* border: '2px solid',
|
|
1926
|
+
* borderColor: 'primary.main'
|
|
1927
|
+
* }
|
|
1928
|
+
* }}
|
|
1929
|
+
* ```
|
|
1930
|
+
*/
|
|
1931
|
+
PaperProps?: Partial<PaperProps>;
|
|
1932
|
+
}
|
|
1933
|
+
/**
|
|
1934
|
+
* Banner principal de consentimento LGPD que solicita decisão do usuário sobre cookies.
|
|
1935
|
+
* @component
|
|
1936
|
+
* @category Components
|
|
1937
|
+
* @remarks
|
|
1938
|
+
* O CookieBanner é o ponto de entrada principal para interação com o sistema de consentimento.
|
|
1939
|
+
* Aparece automaticamente quando o usuário ainda não tomou decisão sobre cookies,
|
|
1940
|
+
* oferecendo opções claras de aceitar, rejeitar ou personalizar preferências.
|
|
1941
|
+
*
|
|
1942
|
+
* ### Funcionalidades Principais
|
|
1943
|
+
* - **Exibição condicional**: Aparece apenas se usuário não deu consentimento
|
|
1944
|
+
* - **Duas modalidades**: Bloqueante (modal) ou não-bloqueante (snackbar)
|
|
1945
|
+
* - **Ações do usuário**: Aceitar tudo, rejeitar tudo, ou abrir preferências
|
|
1946
|
+
* - **Link para política**: Opção de link para política de privacidade
|
|
1947
|
+
* - **Branding opcional**: Marca discreta "fornecido por LÉdipO.eti.br"
|
|
1948
|
+
* - **Totalmente customizável**: Via props, tokens de design ou componente próprio
|
|
1949
|
+
*
|
|
1950
|
+
* ### Estados de Exibição
|
|
1951
|
+
* - **Não exibido**: Usuário já consentiu ou ainda hidratando (SSR)
|
|
1952
|
+
* - **Snackbar**: Modo não-bloqueante, permite interação com a página
|
|
1953
|
+
* - **Modal**: Modo bloqueante, impede interação até decisão
|
|
1954
|
+
* - **Debug**: Sempre visível independente do estado (desenvolvimento)
|
|
1955
|
+
*
|
|
1956
|
+
* ### Integração com Sistema
|
|
1957
|
+
* - Conecta automaticamente com `ConsentProvider`
|
|
1958
|
+
* - Usa textos do `useConsentTexts()` para i18n
|
|
1959
|
+
* - Aplica design tokens do `useDesignTokens()`
|
|
1960
|
+
* - Registra todas as interações via sistema de logging
|
|
1961
|
+
* - Suporte completo a SSR com hidratação segura
|
|
1962
|
+
*
|
|
1963
|
+
* ### Substituição Personalizada
|
|
1964
|
+
* Para controle total, use `CookieBannerComponent` no ConsentProvider:
|
|
1965
|
+
*
|
|
1966
|
+
* ```tsx
|
|
1967
|
+
* function CustomBanner() {
|
|
1968
|
+
* const { acceptAll, rejectAll } = useConsent();
|
|
1969
|
+
* return <div>Meu banner customizado</div>;
|
|
1970
|
+
* }
|
|
1971
|
+
*
|
|
1972
|
+
* <ConsentProvider CookieBannerComponent={CustomBanner}>
|
|
1973
|
+
* ```
|
|
1974
|
+
*
|
|
1975
|
+
* @param props - Propriedades para customizar comportamento e aparência do banner
|
|
1976
|
+
* @returns Banner de consentimento ou `null` se não deve ser exibido
|
|
1977
|
+
*
|
|
1978
|
+
* @example Uso básico (renderizado automaticamente pelo ConsentProvider)
|
|
1979
|
+
* ```typescript
|
|
1980
|
+
* // ConsentProvider renderiza CookieBanner automaticamente
|
|
1981
|
+
* function App() {
|
|
1982
|
+
* return (
|
|
1983
|
+
* // ConsentProvider envolve a aplicação
|
|
1984
|
+
* // CookieBanner aparece quando necessário
|
|
1985
|
+
* );
|
|
1986
|
+
* }
|
|
1987
|
+
* ```
|
|
1988
|
+
*
|
|
1989
|
+
* @example Customização via props no ConsentProvider
|
|
1990
|
+
* ```typescript
|
|
1991
|
+
* // Configuração com propriedades customizadas
|
|
1992
|
+
* const bannerProps = {
|
|
1993
|
+
* policyLinkUrl: "/privacy",
|
|
1994
|
+
* blocking: false,
|
|
1995
|
+
* hideBranding: true
|
|
1996
|
+
* };
|
|
1997
|
+
*
|
|
1998
|
+
* // ConsentProvider com cookieBannerProps
|
|
1999
|
+
* ```
|
|
2000
|
+
*
|
|
2001
|
+
* @example Uso manual com customização avançada
|
|
2002
|
+
* ```typescript
|
|
2003
|
+
* function App() {
|
|
2004
|
+
* const bannerConfig = {
|
|
2005
|
+
* policyLinkUrl: "https://example.com/cookies",
|
|
2006
|
+
* blocking: true,
|
|
2007
|
+
* PaperProps: { elevation: 8 },
|
|
2008
|
+
* SnackbarProps: { anchorOrigin: { vertical: 'top' as const } }
|
|
2009
|
+
* };
|
|
2010
|
+
*
|
|
2011
|
+
* // Renderização manual com config avançada
|
|
2012
|
+
* return null; // CookieBanner com bannerConfig
|
|
2013
|
+
* }
|
|
2014
|
+
* ```
|
|
2015
|
+
*
|
|
2016
|
+
* @see {@link ConsentProvider} - Provider que renderiza este componente automaticamente
|
|
2017
|
+
* @see {@link useConsent} - Hook para acessar funções de consentimento
|
|
2018
|
+
* @see {@link useConsentTexts} - Hook para textos personalizáveis
|
|
2019
|
+
* @see {@link CookieBannerProps} - Interface completa de propriedades
|
|
2020
|
+
*
|
|
2021
|
+
* @public
|
|
2022
|
+
* @since 0.1.0
|
|
2023
|
+
*/
|
|
2024
|
+
declare function CookieBanner({ policyLinkUrl, debug, blocking, hideBranding, SnackbarProps, PaperProps, }: Readonly<CookieBannerProps>): react_jsx_runtime.JSX.Element | null;
|
|
2025
|
+
|
|
2026
|
+
/**
|
|
2027
|
+
* Props para o componente FloatingPreferencesButton.
|
|
2028
|
+
*
|
|
2029
|
+
* Permite configurar posição, ícone, tooltip, e comportamento de exibição do botão flutuante
|
|
2030
|
+
* para abrir o modal de preferências de cookies LGPD.
|
|
2031
|
+
*
|
|
2032
|
+
* Todos os campos são opcionais e possuem valores padrão.
|
|
2033
|
+
*/
|
|
2034
|
+
interface FloatingPreferencesButtonProps {
|
|
2035
|
+
/** Posição do botão flutuante. Padrão: 'bottom-right' */
|
|
2036
|
+
position?: 'bottom-left' | 'bottom-right' | 'top-left' | 'top-right';
|
|
2037
|
+
/** Offset da borda em pixels. Padrão: 24 */
|
|
2038
|
+
offset?: number;
|
|
2039
|
+
/** Ícone customizado. Padrão: CookieOutlined */
|
|
2040
|
+
icon?: React.ReactNode;
|
|
2041
|
+
/** Tooltip customizado exibido ao passar o mouse */
|
|
2042
|
+
tooltip?: string;
|
|
2043
|
+
/** Props adicionais para o Fab do MUI */
|
|
2044
|
+
FabProps?: Partial<FabProps>;
|
|
2045
|
+
/** Se deve esconder quando consentimento já foi dado. Padrão: false */
|
|
2046
|
+
hideWhenConsented?: boolean;
|
|
2047
|
+
}
|
|
2048
|
+
/**
|
|
2049
|
+
* @component
|
|
2050
|
+
* @category Components
|
|
2051
|
+
* @since 0.3.0
|
|
2052
|
+
* Botão flutuante para abrir o modal de preferências de cookies.
|
|
2053
|
+
*
|
|
2054
|
+
* @remarks
|
|
2055
|
+
* Este componente é renderizado automaticamente pelo `ConsentProvider` após o consentimento inicial.
|
|
2056
|
+
* Ele permite ao usuário acessar rapidamente as configurações de consentimento LGPD a qualquer momento.
|
|
2057
|
+
* Você pode substituí-lo passando seu próprio componente para a prop `FloatingPreferencesButtonComponent`
|
|
2058
|
+
* no `ConsentProvider`.
|
|
2059
|
+
*
|
|
2060
|
+
* @param {Readonly<FloatingPreferencesButtonProps>} props As propriedades para customizar o botão.
|
|
2061
|
+
* @returns {JSX.Element | null} O componente do botão flutuante ou `null` se não for necessário exibi-lo.
|
|
2062
|
+
*/
|
|
2063
|
+
declare function FloatingPreferencesButton({ position, offset, icon, tooltip, FabProps, hideWhenConsented, }: Readonly<FloatingPreferencesButtonProps>): react_jsx_runtime.JSX.Element | null;
|
|
2064
|
+
|
|
2065
|
+
/**
|
|
2066
|
+
* Cria um objeto de preferências de consentimento inicial baseado na configuração de categorias do projeto.
|
|
2067
|
+
* @category Utils
|
|
2068
|
+
* @since 0.2.0
|
|
2069
|
+
* @param config A configuração de categorias do projeto. Se não fornecida, um padrão será usado.
|
|
2070
|
+
* @param defaultValue O valor padrão para categorias não essenciais. Por padrão, `false` para conformidade LGPD (rejeitar por padrão).
|
|
2071
|
+
* @returns Um objeto `ConsentPreferences` com as categorias e seus valores iniciais.
|
|
2072
|
+
* @remarks
|
|
2073
|
+
* Esta função é crucial para inicializar o estado de consentimento. Ela garante que apenas as categorias
|
|
2074
|
+
* definidas no `ConsentProvider` sejam incluídas no objeto de preferências, alinhando-se ao princípio
|
|
2075
|
+
* de minimização de dados da LGPD.
|
|
2076
|
+
* @example
|
|
2077
|
+
* ```ts
|
|
2078
|
+
* // Gera preferências com 'analytics' e 'marketing' desabilitados por padrão
|
|
2079
|
+
* const initialPrefs = createProjectPreferences({
|
|
2080
|
+
* enabledCategories: ['analytics', 'marketing']
|
|
2081
|
+
* })
|
|
2082
|
+
* // Result: { necessary: true, analytics: false, marketing: false }
|
|
2083
|
+
*
|
|
2084
|
+
* // Gera preferências com todas as categorias habilitadas
|
|
2085
|
+
* const allAcceptedPrefs = createProjectPreferences(
|
|
2086
|
+
* { enabledCategories: ['analytics', 'marketing'] },
|
|
2087
|
+
* true
|
|
2088
|
+
* )
|
|
2089
|
+
* // Result: { necessary: true, analytics: true, marketing: true }
|
|
2090
|
+
* ```
|
|
2091
|
+
*/
|
|
2092
|
+
declare function createProjectPreferences(config?: ProjectCategoriesConfig, defaultValue?: boolean): ConsentPreferences;
|
|
2093
|
+
/**
|
|
2094
|
+
* Valida um objeto de preferências de consentimento, removendo categorias que não estão permitidas pela configuração do projeto.
|
|
2095
|
+
* @category Utils
|
|
2096
|
+
* @since 0.2.6
|
|
2097
|
+
* @param preferences O objeto de preferências a ser validado.
|
|
2098
|
+
* @param config A configuração de categorias do projeto. Se não fornecida, um padrão será usado.
|
|
2099
|
+
* @returns Um novo objeto `ConsentPreferences` contendo apenas categorias válidas.
|
|
2100
|
+
* @remarks
|
|
2101
|
+
* Garante a integridade dos dados ao carregar o estado de um cookie. Se a configuração do projeto mudou
|
|
2102
|
+
* (ex: uma categoria foi removida), esta função limpa as preferências obsoletas do estado,
|
|
2103
|
+
* evitando inconsistências.
|
|
2104
|
+
* @example
|
|
2105
|
+
* ```ts
|
|
2106
|
+
* const savedPrefs = { necessary: true, analytics: true, oldCategory: false }
|
|
2107
|
+
* const currentConfig = { enabledCategories: ['analytics'] }
|
|
2108
|
+
*
|
|
2109
|
+
* const validPrefs = validateProjectPreferences(savedPrefs, currentConfig)
|
|
2110
|
+
* // Result: { necessary: true, analytics: true }
|
|
2111
|
+
* ```
|
|
2112
|
+
*/
|
|
2113
|
+
declare function validateProjectPreferences(preferences: ConsentPreferences, config?: ProjectCategoriesConfig): ConsentPreferences;
|
|
2114
|
+
/**
|
|
2115
|
+
* Retorna um array com as definições detalhadas de todas as categorias de cookies ativas no projeto.
|
|
2116
|
+
* @category Utils
|
|
2117
|
+
* @since 0.2.2
|
|
2118
|
+
* @param config A configuração de categorias do projeto. Se não fornecida, um padrão será usado.
|
|
2119
|
+
* @returns Um array de objetos `CategoryDefinition`.
|
|
2120
|
+
* @remarks
|
|
2121
|
+
* Útil para construir UIs de preferência customizadas, pois fornece os nomes e descrições
|
|
2122
|
+
* de todas as categorias que devem ser exibidas ao usuário.
|
|
2123
|
+
* @example
|
|
2124
|
+
* ```ts
|
|
2125
|
+
* const config = { enabledCategories: ['analytics'] }
|
|
2126
|
+
* const categories = getAllProjectCategories(config)
|
|
2127
|
+
* // Result:
|
|
2128
|
+
* // [
|
|
2129
|
+
* // { id: 'necessary', name: 'Necessários', ... },
|
|
2130
|
+
* // { id: 'analytics', name: 'Análise e Estatísticas', ... }
|
|
2131
|
+
* // ]
|
|
2132
|
+
* ```
|
|
2133
|
+
*/
|
|
2134
|
+
declare function getAllProjectCategories(config?: ProjectCategoriesConfig): CategoryDefinition[];
|
|
2135
|
+
|
|
2136
|
+
export { COMMON_INTEGRATIONS, type CategoriesContextValue, type Category, type CategoryDefinition, type ConsentContextValue, type ConsentCookieData, type ConsentCookieOptions, ConsentGate, type ConsentPreferences, ConsentProvider, type ConsentProviderProps, ConsentScriptLoader, type ConsentScriptLoaderProps, type ConsentState, type ConsentTexts, CookieBanner, type CookieBannerProps, type CustomCookieBannerProps, type CustomFloatingPreferencesButtonProps, type CustomPreferencesModalProps, DEFAULT_PROJECT_CATEGORIES, type DesignTokens, type DeveloperGuidance, FloatingPreferencesButton, type FloatingPreferencesButtonProps, type GoogleAnalyticsConfig, type GoogleTagManagerConfig, LogLevel, PreferencesModal, type PreferencesModalProps, type ProjectCategoriesConfig, type ScriptIntegration, type UserWayConfig, analyzeDeveloperConfiguration, createGoogleAnalyticsIntegration, createGoogleTagManagerIntegration, createProjectPreferences, createUserWayIntegration, defaultConsentTheme, defaultTexts, getAllProjectCategories, loadScript, openPreferencesModal, setDebugLogging, useCategories, useCategoryStatus, useConsent, useConsentHydration, useConsentScriptLoader, useConsentTexts, useOpenPreferencesModal, validateProjectPreferences };
|