react-lgpd-consent 0.4.4 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +72 -0
- package/README.en.md +15 -0
- package/README.md +15 -0
- package/dist/core.cjs +12 -0
- package/dist/core.d.cts +2 -0
- package/dist/core.d.ts +2 -0
- package/dist/core.js +1 -0
- package/dist/index.cjs +6 -1085
- package/dist/index.d.cts +1 -3775
- package/dist/index.d.ts +1 -3775
- package/dist/index.js +1 -930
- package/dist/integrations.cjs +66 -0
- package/dist/integrations.d.cts +1 -0
- package/dist/integrations.d.ts +1 -0
- package/dist/integrations.js +1 -0
- package/dist/mui.cjs +12 -0
- package/dist/mui.d.cts +1 -0
- package/dist/mui.d.ts +1 -0
- package/dist/mui.js +1 -0
- package/package.json +42 -80
- package/dist/FloatingPreferencesButton-4AGBXNHH.cjs +0 -11
- package/dist/FloatingPreferencesButton-IY7TFD7D.js +0 -2
- package/dist/PreferencesModal-5KNHWW57.js +0 -2
- package/dist/PreferencesModal-YBCWCVUI.cjs +0 -11
- package/dist/chunk-25XEI2DZ.cjs +0 -193
- package/dist/chunk-FJKRAERJ.cjs +0 -119
- package/dist/chunk-N3QOW4SA.js +0 -178
- package/dist/chunk-ORI4PLVG.cjs +0 -1899
- package/dist/chunk-PJFGQMCI.js +0 -92
- package/dist/chunk-RWT2ORFE.js +0 -1840
package/dist/index.d.ts
CHANGED
|
@@ -1,3775 +1 @@
|
|
|
1
|
-
|
|
2
|
-
import { DialogProps } from '@mui/material/Dialog';
|
|
3
|
-
import { Theme } from '@mui/material/styles';
|
|
4
|
-
import * as React$1 from 'react';
|
|
5
|
-
import { PaperProps } from '@mui/material/Paper';
|
|
6
|
-
import { SnackbarProps } from '@mui/material/Snackbar';
|
|
7
|
-
import { FabProps } from '@mui/material/Fab';
|
|
8
|
-
|
|
9
|
-
declare global {
|
|
10
|
-
/**
|
|
11
|
-
* @internal
|
|
12
|
-
* Variável global para rastrear integrações usadas.
|
|
13
|
-
* Usado internamente para logging e análise de performance.
|
|
14
|
-
*/
|
|
15
|
-
var __LGPD_USED_INTEGRATIONS__: string[] | undefined;
|
|
16
|
-
}
|
|
17
|
-
/**
|
|
18
|
-
* @interface PreferencesModalProps
|
|
19
|
-
* Propriedades para customizar o componente `PreferencesModal`.
|
|
20
|
-
*/
|
|
21
|
-
interface PreferencesModalProps {
|
|
22
|
-
/** Propriedades opcionais para customizar o componente `Dialog` do Material-UI. */
|
|
23
|
-
DialogProps?: Partial<DialogProps>;
|
|
24
|
-
/** Se `true`, oculta a marca "fornecido por LÉdipO.eti.br" no modal. Padrão: `false`. */
|
|
25
|
-
hideBranding?: boolean;
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* O `PreferencesModal` é o componente de UI que permite ao usuário ajustar suas preferências de consentimento.
|
|
29
|
-
* @component
|
|
30
|
-
* @category Components
|
|
31
|
-
* @since 0.1.0
|
|
32
|
-
* @remarks
|
|
33
|
-
* Este modal é renderizado automaticamente pelo `ConsentProvider` quando o usuário clica para gerenciar as preferências.
|
|
34
|
-
* Você pode substituí-lo passando seu próprio componente para a prop `PreferencesModalComponent`
|
|
35
|
-
* no `ConsentProvider` para ter controle total sobre a aparência e o comportamento do modal.
|
|
36
|
-
* @param {Readonly<PreferencesModalProps>} props As propriedades para customizar o modal.
|
|
37
|
-
* @returns {JSX.Element} O componente do modal de preferências.
|
|
38
|
-
* @example
|
|
39
|
-
* ```tsx
|
|
40
|
-
* <PreferencesModal DialogProps={{ maxWidth: 'md' }} hideBranding={true} />
|
|
41
|
-
* ```
|
|
42
|
-
*/
|
|
43
|
-
declare function PreferencesModal({ DialogProps, hideBranding, }: Readonly<PreferencesModalProps>): react_jsx_runtime.JSX.Element;
|
|
44
|
-
|
|
45
|
-
type GuidanceSeverity = 'info' | 'warning' | 'error';
|
|
46
|
-
interface GuidanceMessage {
|
|
47
|
-
severity: GuidanceSeverity;
|
|
48
|
-
message: string;
|
|
49
|
-
category?: string;
|
|
50
|
-
actionable?: boolean;
|
|
51
|
-
}
|
|
52
|
-
interface GuidanceConfig {
|
|
53
|
-
/** Controla se avisos devem ser exibidos */
|
|
54
|
-
showWarnings?: boolean;
|
|
55
|
-
/** Controla se sugestões devem ser exibidas */
|
|
56
|
-
showSuggestions?: boolean;
|
|
57
|
-
/** Controla se a tabela de categorias deve ser exibida */
|
|
58
|
-
showCategoriesTable?: boolean;
|
|
59
|
-
/** Controla se as boas práticas devem ser exibidas */
|
|
60
|
-
showBestPractices?: boolean;
|
|
61
|
-
/** Controla se deve exibir score de conformidade */
|
|
62
|
-
showComplianceScore?: boolean;
|
|
63
|
-
/** Filtro de severidade mínima para exibir mensagens */
|
|
64
|
-
minimumSeverity?: GuidanceSeverity;
|
|
65
|
-
/** Callback personalizado para processar mensagens */
|
|
66
|
-
messageProcessor?: (messages: GuidanceMessage[]) => void;
|
|
67
|
-
}
|
|
68
|
-
interface DeveloperGuidance {
|
|
69
|
-
warnings: string[];
|
|
70
|
-
suggestions: string[];
|
|
71
|
-
messages: GuidanceMessage[];
|
|
72
|
-
activeCategoriesInfo: {
|
|
73
|
-
id: string;
|
|
74
|
-
name: string;
|
|
75
|
-
description: string;
|
|
76
|
-
essential: boolean;
|
|
77
|
-
uiRequired: boolean;
|
|
78
|
-
cookies?: string[];
|
|
79
|
-
}[];
|
|
80
|
-
usingDefaults: boolean;
|
|
81
|
-
complianceScore?: number;
|
|
82
|
-
}
|
|
83
|
-
declare const DEFAULT_PROJECT_CATEGORIES: ProjectCategoriesConfig;
|
|
84
|
-
/**
|
|
85
|
-
* Analisa configuração e integrações implícitas para orientar o dev.
|
|
86
|
-
*
|
|
87
|
-
* Since v0.4.0: inclui customCategories.
|
|
88
|
-
* Since v0.4.1: considera categorias/integrações implícitas e enriquece cookies por categoria.
|
|
89
|
-
*/
|
|
90
|
-
declare function analyzeDeveloperConfiguration(config?: ProjectCategoriesConfig): DeveloperGuidance;
|
|
91
|
-
declare function logDeveloperGuidance(guidance: DeveloperGuidance, disableGuidanceProp?: boolean, config?: GuidanceConfig): void;
|
|
92
|
-
declare function useDeveloperGuidance(config?: ProjectCategoriesConfig, disableGuidanceProp?: boolean, guidanceConfig?: GuidanceConfig): DeveloperGuidance;
|
|
93
|
-
/**
|
|
94
|
-
* Presets de configuração para diferentes ambientes
|
|
95
|
-
*/
|
|
96
|
-
declare const GUIDANCE_PRESETS: {
|
|
97
|
-
/** Configuração completa para desenvolvimento */
|
|
98
|
-
readonly development: {
|
|
99
|
-
readonly showWarnings: true;
|
|
100
|
-
readonly showSuggestions: true;
|
|
101
|
-
readonly showCategoriesTable: true;
|
|
102
|
-
readonly showBestPractices: true;
|
|
103
|
-
readonly showComplianceScore: true;
|
|
104
|
-
readonly minimumSeverity: "info";
|
|
105
|
-
};
|
|
106
|
-
/** Configuração silenciosa para produção */
|
|
107
|
-
readonly production: {
|
|
108
|
-
readonly showWarnings: false;
|
|
109
|
-
readonly showSuggestions: false;
|
|
110
|
-
readonly showCategoriesTable: false;
|
|
111
|
-
readonly showBestPractices: false;
|
|
112
|
-
readonly showComplianceScore: false;
|
|
113
|
-
readonly minimumSeverity: "error";
|
|
114
|
-
};
|
|
115
|
-
/** Apenas erros críticos */
|
|
116
|
-
readonly minimal: {
|
|
117
|
-
readonly showWarnings: true;
|
|
118
|
-
readonly showSuggestions: false;
|
|
119
|
-
readonly showCategoriesTable: false;
|
|
120
|
-
readonly showBestPractices: false;
|
|
121
|
-
readonly showComplianceScore: false;
|
|
122
|
-
readonly minimumSeverity: "error";
|
|
123
|
-
};
|
|
124
|
-
/** Focado em conformidade LGPD */
|
|
125
|
-
readonly compliance: {
|
|
126
|
-
readonly showWarnings: true;
|
|
127
|
-
readonly showSuggestions: true;
|
|
128
|
-
readonly showCategoriesTable: true;
|
|
129
|
-
readonly showBestPractices: true;
|
|
130
|
-
readonly showComplianceScore: true;
|
|
131
|
-
readonly minimumSeverity: "warning";
|
|
132
|
-
};
|
|
133
|
-
};
|
|
134
|
-
|
|
135
|
-
/**
|
|
136
|
-
* @fileoverview
|
|
137
|
-
* Definições de tipos TypeScript para o sistema de consentimento LGPD/ANPD.
|
|
138
|
-
*
|
|
139
|
-
* Este arquivo contém todas as interfaces, tipos e estruturas de dados utilizadas
|
|
140
|
-
* pela biblioteca react-lgpd-consent, incluindo definições de categorias,
|
|
141
|
-
* estado de consentimento, configurações e textos da interface.
|
|
142
|
-
*
|
|
143
|
-
* @author Luciano Édipo
|
|
144
|
-
* @since 0.1.0
|
|
145
|
-
*/
|
|
146
|
-
/**
|
|
147
|
-
* Tipos de categorias padrão de consentimento para cookies, conforme definido pela ANPD.
|
|
148
|
-
* @category Types
|
|
149
|
-
* @since 0.2.0
|
|
150
|
-
*
|
|
151
|
-
* @remarks
|
|
152
|
-
* Use este tipo para identificar as categorias principais de cookies suportadas nativamente pela biblioteca.
|
|
153
|
-
* Cada categoria representa um tipo específico de processamento de dados:
|
|
154
|
-
*
|
|
155
|
-
* - `'necessary'`: Cookies essenciais para funcionamento do site (sempre ativos).
|
|
156
|
-
* - `'analytics'`: Cookies para análise e estatísticas de uso.
|
|
157
|
-
* - `'functional'`: Cookies para funcionalidades extras e preferências do usuário.
|
|
158
|
-
* - `'marketing'`: Cookies para publicidade e marketing direcionado.
|
|
159
|
-
* - `'social'`: Cookies para integração com redes sociais.
|
|
160
|
-
* - `'personalization'`: Cookies para personalização de conteúdo e experiência.
|
|
161
|
-
*
|
|
162
|
-
* @example
|
|
163
|
-
* ```typescript
|
|
164
|
-
* const categories: Category[] = ['analytics', 'marketing'];
|
|
165
|
-
* ```
|
|
166
|
-
*
|
|
167
|
-
* @public
|
|
168
|
-
*/
|
|
169
|
-
type Category = 'necessary' | 'analytics' | 'functional' | 'marketing' | 'social' | 'personalization';
|
|
170
|
-
/**
|
|
171
|
-
* Definição detalhada de uma categoria de cookie para uso interno.
|
|
172
|
-
* @category Types
|
|
173
|
-
* @since 0.2.0
|
|
174
|
-
*
|
|
175
|
-
* @remarks
|
|
176
|
-
* Esta interface define a estrutura completa de uma categoria de cookies,
|
|
177
|
-
* incluindo metadados e configurações específicas para processamento
|
|
178
|
-
* e exibição na interface do usuário.
|
|
179
|
-
*
|
|
180
|
-
* @example
|
|
181
|
-
* ```typescript
|
|
182
|
-
* // Categoria padrão da biblioteca
|
|
183
|
-
* const analyticsCategory: CategoryDefinition = {
|
|
184
|
-
* id: 'analytics',
|
|
185
|
-
* name: 'Cookies Analíticos',
|
|
186
|
-
* description: 'Utilizados para análise de uso do site',
|
|
187
|
-
* essential: false,
|
|
188
|
-
* cookies: ['_ga', '_ga_*', '_gid']
|
|
189
|
-
* };
|
|
190
|
-
*
|
|
191
|
-
* // Categoria customizada específica do projeto
|
|
192
|
-
* const chatCategory: CategoryDefinition = {
|
|
193
|
-
* id: 'chat',
|
|
194
|
-
* name: 'Chat de Suporte',
|
|
195
|
-
* description: 'Widget de chat para suporte ao cliente',
|
|
196
|
-
* essential: false
|
|
197
|
-
* };
|
|
198
|
-
* ```
|
|
199
|
-
*
|
|
200
|
-
* @public
|
|
201
|
-
*/
|
|
202
|
-
interface CategoryDefinition {
|
|
203
|
-
/**
|
|
204
|
-
* Identificador único da categoria.
|
|
205
|
-
* @example 'analytics'
|
|
206
|
-
*/
|
|
207
|
-
id: string;
|
|
208
|
-
/**
|
|
209
|
-
* Nome amigável exibido na interface do usuário.
|
|
210
|
-
* @example 'Cookies Analíticos'
|
|
211
|
-
*/
|
|
212
|
-
name: string;
|
|
213
|
-
/**
|
|
214
|
-
* Descrição detalhada da finalidade da categoria.
|
|
215
|
-
* @example 'Utilizados para análise de uso e comportamento no site'
|
|
216
|
-
*/
|
|
217
|
-
description: string;
|
|
218
|
-
/**
|
|
219
|
-
* Indica se é uma categoria essencial que não pode ser desabilitada pelo usuário.
|
|
220
|
-
* @defaultValue false
|
|
221
|
-
*/
|
|
222
|
-
essential?: boolean;
|
|
223
|
-
/**
|
|
224
|
-
* Lista de nomes de cookies ou padrões específicos desta categoria.
|
|
225
|
-
* @example ['_ga', '_ga_*', '_gid']
|
|
226
|
-
*/
|
|
227
|
-
cookies?: string[];
|
|
228
|
-
/**
|
|
229
|
-
* Metadados detalhados sobre cookies típicos desta categoria.
|
|
230
|
-
* Não exaustivo; serve para orientar UI e documentação.
|
|
231
|
-
*/
|
|
232
|
-
cookiesInfo?: CookieDescriptor[];
|
|
233
|
-
}
|
|
234
|
-
/**
|
|
235
|
-
* Descritor de cookie com metadados úteis para UI/documentação.
|
|
236
|
-
* @category Types
|
|
237
|
-
* @since 0.2.0
|
|
238
|
-
*
|
|
239
|
-
* @remarks
|
|
240
|
-
* Mantém compatibilidade com abordagens comuns no mercado.
|
|
241
|
-
* Fornece informações detalhadas sobre cookies para exibição em interfaces
|
|
242
|
-
* e documentação de compliance.
|
|
243
|
-
*
|
|
244
|
-
* @example
|
|
245
|
-
* ```typescript
|
|
246
|
-
* const cookieInfo: CookieDescriptor = {
|
|
247
|
-
* name: '_ga',
|
|
248
|
-
* purpose: 'analytics',
|
|
249
|
-
* duration: '2 years',
|
|
250
|
-
* domain: '.example.com',
|
|
251
|
-
* provider: 'Google Analytics'
|
|
252
|
-
* };
|
|
253
|
-
* ```
|
|
254
|
-
*
|
|
255
|
-
* @public
|
|
256
|
-
*/
|
|
257
|
-
interface CookieDescriptor {
|
|
258
|
-
/**
|
|
259
|
-
* Identificador ou padrão do cookie.
|
|
260
|
-
* @example '_ga'
|
|
261
|
-
*/
|
|
262
|
-
name: string;
|
|
263
|
-
/**
|
|
264
|
-
* Finalidade do cookie (opcional).
|
|
265
|
-
* @example 'analytics'
|
|
266
|
-
*/
|
|
267
|
-
purpose?: string;
|
|
268
|
-
/**
|
|
269
|
-
* Tempo de retenção do cookie (opcional).
|
|
270
|
-
* @example '2 years'
|
|
271
|
-
*/
|
|
272
|
-
duration?: string;
|
|
273
|
-
/**
|
|
274
|
-
* Domínio associado ao cookie (opcional).
|
|
275
|
-
* @example '.example.com'
|
|
276
|
-
*/
|
|
277
|
-
domain?: string;
|
|
278
|
-
/**
|
|
279
|
-
* Provedor ou serviço associado ao cookie (opcional).
|
|
280
|
-
* @example 'Google Analytics'
|
|
281
|
-
*/
|
|
282
|
-
provider?: string;
|
|
283
|
-
}
|
|
284
|
-
/**
|
|
285
|
-
* Configuração de categorias ativas no projeto.
|
|
286
|
-
* @category Types
|
|
287
|
-
* @since 0.2.0
|
|
288
|
-
*
|
|
289
|
-
* @remarks
|
|
290
|
-
* Define quais categorias fixas serão usadas (além de 'necessary' que é sempre incluída)
|
|
291
|
-
* e permite extensão com categorias customizadas específicas do projeto.
|
|
292
|
-
*
|
|
293
|
-
* A categoria 'necessary' é sempre incluída automaticamente e não precisa ser
|
|
294
|
-
* especificada em `enabledCategories`.
|
|
295
|
-
*
|
|
296
|
-
* @example
|
|
297
|
-
* ```typescript
|
|
298
|
-
* // Configuração básica
|
|
299
|
-
* const config: ProjectCategoriesConfig = {
|
|
300
|
-
* enabledCategories: ['analytics', 'marketing']
|
|
301
|
-
* };
|
|
302
|
-
* ```
|
|
303
|
-
*
|
|
304
|
-
* @example
|
|
305
|
-
* ```typescript
|
|
306
|
-
* // Configuração com categorias customizadas
|
|
307
|
-
* const config: ProjectCategoriesConfig = {
|
|
308
|
-
* enabledCategories: ['analytics'],
|
|
309
|
-
* customCategories: [
|
|
310
|
-
* {
|
|
311
|
-
* id: 'chat',
|
|
312
|
-
* name: 'Chat de Suporte',
|
|
313
|
-
* description: 'Widget de chat para suporte ao cliente'
|
|
314
|
-
* },
|
|
315
|
-
* {
|
|
316
|
-
* id: 'abTesting',
|
|
317
|
-
* name: 'A/B Testing',
|
|
318
|
-
* description: 'Experimentos de interface e funcionalidades'
|
|
319
|
-
* }
|
|
320
|
-
* ]
|
|
321
|
-
* };
|
|
322
|
-
* ```
|
|
323
|
-
*
|
|
324
|
-
* @public
|
|
325
|
-
*/
|
|
326
|
-
interface ProjectCategoriesConfig {
|
|
327
|
-
/**
|
|
328
|
-
* Categorias padrão que serão ativadas.
|
|
329
|
-
* A categoria 'necessary' é sempre incluída automaticamente.
|
|
330
|
-
* @example ['analytics', 'marketing']
|
|
331
|
-
*/
|
|
332
|
-
enabledCategories?: Category[];
|
|
333
|
-
/**
|
|
334
|
-
* Categorias customizadas específicas do projeto.
|
|
335
|
-
* Permite extensão além das categorias padrão da biblioteca.
|
|
336
|
-
* @example [{ id: 'chat', name: 'Chat de Suporte', description: 'Widget de chat' }]
|
|
337
|
-
*/
|
|
338
|
-
customCategories?: CategoryDefinition[];
|
|
339
|
-
}
|
|
340
|
-
/**
|
|
341
|
-
* Preferências de consentimento do usuário por categoria.
|
|
342
|
-
* @category Types
|
|
343
|
-
* @since 0.1.0
|
|
344
|
-
*
|
|
345
|
-
* @remarks
|
|
346
|
-
* Contém o estado de consentimento para cada categoria ativa no projeto.
|
|
347
|
-
* A categoria 'necessary' está sempre presente e definida como `true`,
|
|
348
|
-
* pois cookies essenciais não podem ser desabilitados pelo usuário.
|
|
349
|
-
*
|
|
350
|
-
* ### Comportamento Dinâmico
|
|
351
|
-
* - As chaves são determinadas pela configuração de `enabledCategories` no `ConsentProvider`
|
|
352
|
-
* - Categorias não habilitadas no projeto não aparecem no objeto
|
|
353
|
-
* - TypeScript infere automaticamente as chaves baseado na configuração
|
|
354
|
-
* - Estado é persistido no cookie e restaurado em novas sessões
|
|
355
|
-
*
|
|
356
|
-
* ### Valores e Significados
|
|
357
|
-
* - `true`: Usuário consentiu explicitamente para a categoria
|
|
358
|
-
* - `false`: Usuário rejeitou explicitamente a categoria
|
|
359
|
-
* - Ausência da chave: Categoria não está habilitada no projeto
|
|
360
|
-
*
|
|
361
|
-
* ### Integração com Scripts
|
|
362
|
-
* - Use com `ConsentScriptLoader` para carregamento condicional
|
|
363
|
-
* - Estado é automaticamente reativo - mudanças atualizam scripts
|
|
364
|
-
* - Compatível com Google Analytics Enhanced Consent Mode
|
|
365
|
-
* - Suporta integração com ferramentas de tag management
|
|
366
|
-
*
|
|
367
|
-
* @example Configuração típica
|
|
368
|
-
* ```typescript
|
|
369
|
-
* const preferences: ConsentPreferences = {
|
|
370
|
-
* necessary: true, // Sempre true (cookies essenciais)
|
|
371
|
-
* analytics: false, // Usuário rejeitou análise
|
|
372
|
-
* marketing: true // Usuário aceitou marketing
|
|
373
|
-
* };
|
|
374
|
-
* ```
|
|
375
|
-
*
|
|
376
|
-
* @example Integração condicional com features
|
|
377
|
-
* ```typescript
|
|
378
|
-
* function MyComponent() {
|
|
379
|
-
* const { preferences } = useConsent();
|
|
380
|
-
*
|
|
381
|
-
* return (
|
|
382
|
-
* <div>
|
|
383
|
-
* {preferences.analytics && <AnalyticsComponent />}
|
|
384
|
-
* {preferences.marketing && <PersonalizationEngine />}
|
|
385
|
-
* {preferences.functional && <ChatWidget />}
|
|
386
|
-
* </div>
|
|
387
|
-
* );
|
|
388
|
-
* }
|
|
389
|
-
* ```
|
|
390
|
-
*
|
|
391
|
-
* @example Verificação programática de múltiplas categorias
|
|
392
|
-
* ```typescript
|
|
393
|
-
* function hasConsentForFeature(preferences: ConsentPreferences): boolean {
|
|
394
|
-
* // Feature requer analytics OU marketing
|
|
395
|
-
* return preferences.analytics || preferences.marketing;
|
|
396
|
-
* }
|
|
397
|
-
*
|
|
398
|
-
* function hasFullConsent(preferences: ConsentPreferences): boolean {
|
|
399
|
-
* // Verificar se todas as categorias opcionais foram aceitas
|
|
400
|
-
* const optionalCategories = Object.keys(preferences).filter(key => key !== 'necessary');
|
|
401
|
-
* return optionalCategories.every(key => preferences[key] === true);
|
|
402
|
-
* }
|
|
403
|
-
* ```
|
|
404
|
-
*
|
|
405
|
-
* @public
|
|
406
|
-
*/
|
|
407
|
-
interface ConsentPreferences {
|
|
408
|
-
/**
|
|
409
|
-
* Categoria de cookies necessários - sempre presente e verdadeira.
|
|
410
|
-
* Cookies essenciais não podem ser desabilitados pelo usuário.
|
|
411
|
-
*/
|
|
412
|
-
necessary: boolean;
|
|
413
|
-
/**
|
|
414
|
-
* Estado de consentimento para outras categorias ativas no projeto.
|
|
415
|
-
* As chaves correspondem aos IDs das categorias configuradas.
|
|
416
|
-
*/
|
|
417
|
-
[key: string]: boolean;
|
|
418
|
-
}
|
|
419
|
-
/**
|
|
420
|
-
* Estrutura do cookie de consentimento em conformidade com LGPD/ANPD.
|
|
421
|
-
* @category Types
|
|
422
|
-
* @since 0.2.1
|
|
423
|
-
*
|
|
424
|
-
* @remarks
|
|
425
|
-
* Esta interface define o formato do cookie persistido no navegador do usuário,
|
|
426
|
-
* contendo todas as informações necessárias para compliance com a LGPD e
|
|
427
|
-
* para o funcionamento correto da biblioteca.
|
|
428
|
-
*
|
|
429
|
-
* **Importante**: A estrutura utiliza um formato JSON simples e legível, projetado
|
|
430
|
-
* para ser autoexplicativo e atender diretamente aos requisitos da LGPD para sites
|
|
431
|
-
* de primeira parte (first-party contexts).
|
|
432
|
-
*
|
|
433
|
-
* **Não implementa IAB TCF**: Este formato **não** segue o padrão IAB Transparency
|
|
434
|
-
* and Consent Framework (TCF), que é mais complexo e voltado para o ecossistema
|
|
435
|
-
* de publicidade programática (ad-tech). A adoção do TCF pode ser uma evolução
|
|
436
|
-
* futura da biblioteca.
|
|
437
|
-
*
|
|
438
|
-
* @example
|
|
439
|
-
* ```typescript
|
|
440
|
-
* const cookieData: ConsentCookieData = {
|
|
441
|
-
* version: '1.0',
|
|
442
|
-
* consented: true,
|
|
443
|
-
* preferences: {
|
|
444
|
-
* necessary: true,
|
|
445
|
-
* analytics: true,
|
|
446
|
-
* marketing: false
|
|
447
|
-
* },
|
|
448
|
-
* consentDate: '2024-01-15T10:30:00.000Z',
|
|
449
|
-
* lastUpdate: '2024-01-15T10:30:00.000Z',
|
|
450
|
-
* source: 'banner',
|
|
451
|
-
* projectConfig: {
|
|
452
|
-
* enabledCategories: ['analytics', 'marketing']
|
|
453
|
-
* }
|
|
454
|
-
* };
|
|
455
|
-
* ```
|
|
456
|
-
*
|
|
457
|
-
* @see {@link https://www.planalto.gov.br/ccivil_03/_ato2015-2018/2018/lei/l13709.htm | LGPD - Lei 13.709/2018}
|
|
458
|
-
* @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}
|
|
459
|
-
*
|
|
460
|
-
* @public
|
|
461
|
-
*/
|
|
462
|
-
interface ConsentCookieData {
|
|
463
|
-
/**
|
|
464
|
-
* Versão do esquema do cookie para compatibilidade e migração futura.
|
|
465
|
-
* @example '1.0'
|
|
466
|
-
*/
|
|
467
|
-
version: string;
|
|
468
|
-
/**
|
|
469
|
-
* Indica se o usuário já prestou consentimento explícito.
|
|
470
|
-
* @example true
|
|
471
|
-
*/
|
|
472
|
-
consented: boolean;
|
|
473
|
-
/**
|
|
474
|
-
* Preferências detalhadas por categoria de cookies.
|
|
475
|
-
* Contém apenas as categorias ativas no projeto.
|
|
476
|
-
*/
|
|
477
|
-
preferences: ConsentPreferences;
|
|
478
|
-
/**
|
|
479
|
-
* Timestamp ISO 8601 da primeira interação com o banner de consentimento.
|
|
480
|
-
* @example '2024-01-15T10:30:00.000Z'
|
|
481
|
-
*/
|
|
482
|
-
consentDate: string;
|
|
483
|
-
/**
|
|
484
|
-
* Timestamp ISO 8601 da última modificação das preferências.
|
|
485
|
-
* Atualizado sempre que o usuário muda suas preferências.
|
|
486
|
-
* @example '2024-01-15T10:30:00.000Z'
|
|
487
|
-
*/
|
|
488
|
-
lastUpdate: string;
|
|
489
|
-
/**
|
|
490
|
-
* Origem da decisão de consentimento para auditoria.
|
|
491
|
-
* - 'banner': Decisão tomada no banner principal
|
|
492
|
-
* - 'modal': Decisão tomada no modal de preferências
|
|
493
|
-
* - 'programmatic': Decisão tomada via API programática
|
|
494
|
-
*/
|
|
495
|
-
source: 'banner' | 'modal' | 'programmatic';
|
|
496
|
-
/**
|
|
497
|
-
* Snapshot da configuração de categorias no momento do consentimento.
|
|
498
|
-
* Útil para detectar mudanças na configuração e solicitar novo consentimento.
|
|
499
|
-
*/
|
|
500
|
-
projectConfig?: ProjectCategoriesConfig;
|
|
501
|
-
}
|
|
502
|
-
/**
|
|
503
|
-
* Estado interno completo do sistema de consentimento.
|
|
504
|
-
* @category Types
|
|
505
|
-
* @since 0.1.0
|
|
506
|
-
*
|
|
507
|
-
* @remarks
|
|
508
|
-
* Estende {@link ConsentCookieData} com informações de estado da interface
|
|
509
|
-
* que não são persistidas no cookie, como o estado de abertura do modal.
|
|
510
|
-
*
|
|
511
|
-
* Este é o estado completo mantido em memória pelo React Context e
|
|
512
|
-
* utilizado por todos os componentes da biblioteca.
|
|
513
|
-
*
|
|
514
|
-
* ### Dados Persistidos vs. Temporários
|
|
515
|
-
* - **Persistidos**: Herdados de `ConsentCookieData` - salvos no cookie
|
|
516
|
-
* - **Temporários**: `isModalOpen` - apenas em memória durante a sessão
|
|
517
|
-
*
|
|
518
|
-
* ### Ciclo de Vida do Estado
|
|
519
|
-
* 1. **Inicialização**: Estado padrão ou lido do cookie
|
|
520
|
-
* 2. **Hidratação**: Restauração do cookie no lado cliente (SSR)
|
|
521
|
-
* 3. **Interação**: Usuário modifica preferências via UI
|
|
522
|
-
* 4. **Persistência**: Estado é salvo no cookie automaticamente
|
|
523
|
-
* 5. **Sincronização**: Componentes reagem às mudanças via Context
|
|
524
|
-
*
|
|
525
|
-
* ### Performance e Reatividade
|
|
526
|
-
* - Estado é imutável - mudanças criam novo objeto
|
|
527
|
-
* - Optimized com `useMemo` para evitar re-renders desnecessários
|
|
528
|
-
* - Subscriber pattern para notificações de mudança
|
|
529
|
-
* - Integração automática com React DevTools
|
|
530
|
-
*
|
|
531
|
-
* @example Estado típico com consentimento dado
|
|
532
|
-
* ```typescript
|
|
533
|
-
* const state: ConsentState = {
|
|
534
|
-
* version: '1.0',
|
|
535
|
-
* consented: true,
|
|
536
|
-
* preferences: { necessary: true, analytics: true, marketing: false },
|
|
537
|
-
* consentDate: '2024-01-15T10:30:00.000Z',
|
|
538
|
-
* lastUpdate: '2024-01-15T10:30:00.000Z',
|
|
539
|
-
* source: 'banner',
|
|
540
|
-
* projectConfig: { enabledCategories: ['analytics', 'marketing'] },
|
|
541
|
-
* isModalOpen: false // Estado da UI não persistido
|
|
542
|
-
* };
|
|
543
|
-
* ```
|
|
544
|
-
*
|
|
545
|
-
* @example Estado inicial antes do consentimento
|
|
546
|
-
* ```typescript
|
|
547
|
-
* const initialState: ConsentState = {
|
|
548
|
-
* version: '1.0',
|
|
549
|
-
* consented: false,
|
|
550
|
-
* preferences: { necessary: true }, // Apenas essenciais
|
|
551
|
-
* isModalOpen: false
|
|
552
|
-
* // consentDate, lastUpdate, source serão definidos após consentimento
|
|
553
|
-
* };
|
|
554
|
-
* ```
|
|
555
|
-
*
|
|
556
|
-
* @example Uso em componente para verificação de estado
|
|
557
|
-
* ```typescript
|
|
558
|
-
* function ConsentAwareComponent() {
|
|
559
|
-
* const { consented, preferences, isModalOpen } = useConsent();
|
|
560
|
-
*
|
|
561
|
-
* if (!consented) {
|
|
562
|
-
* return <div>Aguardando decisão do usuário sobre cookies...</div>;
|
|
563
|
-
* }
|
|
564
|
-
*
|
|
565
|
-
* if (isModalOpen) {
|
|
566
|
-
* return <div>Modal de preferências está aberto</div>;
|
|
567
|
-
* }
|
|
568
|
-
*
|
|
569
|
-
* return (
|
|
570
|
-
* <div>
|
|
571
|
-
* Analytics ativo: {preferences.analytics ? 'Sim' : 'Não'}
|
|
572
|
-
* Marketing ativo: {preferences.marketing ? 'Sim' : 'Não'}
|
|
573
|
-
* </div>
|
|
574
|
-
* );
|
|
575
|
-
* }
|
|
576
|
-
* ```
|
|
577
|
-
*
|
|
578
|
-
* @see {@link ConsentCookieData} - Interface base com dados persistidos
|
|
579
|
-
* @see {@link useConsent} - Hook para acessar este estado
|
|
580
|
-
* @see {@link ConsentProvider} - Provider que mantém este estado
|
|
581
|
-
*
|
|
582
|
-
* @public
|
|
583
|
-
*/
|
|
584
|
-
interface ConsentState extends ConsentCookieData {
|
|
585
|
-
/**
|
|
586
|
-
* Estado de abertura do modal de preferências.
|
|
587
|
-
* Esta informação não é persistida no cookie, apenas mantida em memória.
|
|
588
|
-
* @defaultValue false
|
|
589
|
-
*/
|
|
590
|
-
isModalOpen?: boolean;
|
|
591
|
-
}
|
|
592
|
-
/**
|
|
593
|
-
* Interface de textos personalizáveis para todos os componentes da UI de consentimento LGPD.
|
|
594
|
-
* @category Types
|
|
595
|
-
* @since 0.1.0
|
|
596
|
-
*
|
|
597
|
-
* @remarks
|
|
598
|
-
* Esta interface define todos os textos exibidos na UI do banner e modal de consentimento.
|
|
599
|
-
* Os campos opcionais permitem adequação completa aos requisitos da ANPD e customização
|
|
600
|
-
* conforme necessidade específica do projeto. Todos os campos possuem valores padrão em português.
|
|
601
|
-
*
|
|
602
|
-
* A interface é dividida em três seções:
|
|
603
|
-
* - **Textos básicos**: Elementos essenciais do banner e modal (obrigatórios)
|
|
604
|
-
* - **Textos alternativos**: Variações para UI customizada (opcionais)
|
|
605
|
-
* - **Textos ANPD expandidos**: Informações de compliance com LGPD (opcionais)
|
|
606
|
-
*
|
|
607
|
-
* @example Configuração básica em inglês
|
|
608
|
-
* ```typescript
|
|
609
|
-
* const customTexts: Partial<ConsentTexts> = {
|
|
610
|
-
* bannerMessage: 'We use cookies to enhance your experience.',
|
|
611
|
-
* acceptAll: 'Accept All',
|
|
612
|
-
* declineAll: 'Reject All',
|
|
613
|
-
* preferences: 'Preferences'
|
|
614
|
-
* };
|
|
615
|
-
* ```
|
|
616
|
-
*
|
|
617
|
-
* @example Configuração completa ANPD
|
|
618
|
-
* ```typescript
|
|
619
|
-
* const anpdTexts: Partial<ConsentTexts> = {
|
|
620
|
-
* controllerInfo: 'Controlado por: Empresa XYZ - CNPJ: 12.345.678/0001-90',
|
|
621
|
-
* dataTypes: 'Coletamos: endereço IP, preferências de navegação, dados de uso',
|
|
622
|
-
* userRights: 'Você pode solicitar acesso, correção ou exclusão dos seus dados',
|
|
623
|
-
* contactInfo: 'DPO: dpo@empresa.com.br | Tel: (11) 1234-5678'
|
|
624
|
-
* };
|
|
625
|
-
* ```
|
|
626
|
-
*
|
|
627
|
-
* @property bannerMessage - Mensagem principal exibida no banner de consentimento.
|
|
628
|
-
* @property acceptAll - Texto do botão para aceitar todos os cookies.
|
|
629
|
-
* @property declineAll - Texto do botão para recusar todos os cookies.
|
|
630
|
-
* @property preferences - Texto do botão para abrir preferências.
|
|
631
|
-
* @property policyLink - (Opcional) Link para política de privacidade.
|
|
632
|
-
* @property modalTitle - Título do modal de preferências.
|
|
633
|
-
* @property modalIntro - Texto introdutório do modal.
|
|
634
|
-
* @property save - Texto do botão para salvar preferências.
|
|
635
|
-
* @property necessaryAlwaysOn - Texto explicativo para cookies necessários.
|
|
636
|
-
* @property preferencesButton - (Opcional) Texto alternativo para botão de preferências.
|
|
637
|
-
* @property preferencesTitle - (Opcional) Título alternativo do modal.
|
|
638
|
-
* @property preferencesDescription - (Opcional) Descrição do modal.
|
|
639
|
-
* @property close - (Opcional) Texto do botão fechar.
|
|
640
|
-
* @property accept - (Opcional) Texto alternativo aceitar.
|
|
641
|
-
* @property reject - (Opcional) Texto alternativo rejeitar.
|
|
642
|
-
* @property brandingPoweredBy - (Opcional) Texto "fornecido por".
|
|
643
|
-
* @property controllerInfo - (Opcional) Informação sobre o controlador dos dados.
|
|
644
|
-
* @property dataTypes - (Opcional) Tipos de dados coletados.
|
|
645
|
-
* @property thirdPartySharing - (Opcional) Compartilhamento com terceiros.
|
|
646
|
-
* @property userRights - (Opcional) Direitos do titular dos dados.
|
|
647
|
-
* @property contactInfo - (Opcional) Informações de contato do DPO.
|
|
648
|
-
* @property retentionPeriod - (Opcional) Prazo de armazenamento dos dados.
|
|
649
|
-
* @property lawfulBasis - (Opcional) Base legal para o processamento.
|
|
650
|
-
* @property transferCountries - (Opcional) Países para transferência de dados.
|
|
651
|
-
*
|
|
652
|
-
* @see {@link ConsentProvider} - Para usar os textos personalizados
|
|
653
|
-
* @see {@link useConsentTexts} - Hook para acessar textos no contexto
|
|
654
|
-
*
|
|
655
|
-
* @public
|
|
656
|
-
*/
|
|
657
|
-
interface ConsentTexts {
|
|
658
|
-
bannerMessage: string;
|
|
659
|
-
acceptAll: string;
|
|
660
|
-
declineAll: string;
|
|
661
|
-
preferences: string;
|
|
662
|
-
policyLink?: string;
|
|
663
|
-
modalTitle: string;
|
|
664
|
-
modalIntro: string;
|
|
665
|
-
save: string;
|
|
666
|
-
necessaryAlwaysOn: string;
|
|
667
|
-
preferencesButton?: string;
|
|
668
|
-
preferencesTitle?: string;
|
|
669
|
-
preferencesDescription?: string;
|
|
670
|
-
close?: string;
|
|
671
|
-
accept?: string;
|
|
672
|
-
reject?: string;
|
|
673
|
-
brandingPoweredBy?: string;
|
|
674
|
-
controllerInfo?: string;
|
|
675
|
-
dataTypes?: string;
|
|
676
|
-
thirdPartySharing?: string;
|
|
677
|
-
userRights?: string;
|
|
678
|
-
contactInfo?: string;
|
|
679
|
-
retentionPeriod?: string;
|
|
680
|
-
lawfulBasis?: string;
|
|
681
|
-
transferCountries?: string;
|
|
682
|
-
}
|
|
683
|
-
/**
|
|
684
|
-
* Opções para configuração do cookie de consentimento.
|
|
685
|
-
* @category Types
|
|
686
|
-
* @since 0.1.0
|
|
687
|
-
* @public
|
|
688
|
-
*/
|
|
689
|
-
interface ConsentCookieOptions {
|
|
690
|
-
/** Nome do cookie. Padrão: 'cookieConsent' */
|
|
691
|
-
name: string;
|
|
692
|
-
/** Tempo de expiração em dias. Padrão: 365 */
|
|
693
|
-
maxAgeDays: number;
|
|
694
|
-
/** Política SameSite do cookie. */
|
|
695
|
-
sameSite: 'Lax' | 'Strict';
|
|
696
|
-
/** Se o cookie deve ser seguro (HTTPS). Padrão: true */
|
|
697
|
-
secure: boolean;
|
|
698
|
-
/** Caminho do cookie. Padrão: '/' */
|
|
699
|
-
path: string;
|
|
700
|
-
}
|
|
701
|
-
/**
|
|
702
|
-
* Tipo alias para valores de espaçamento que suportam eixos x/y.
|
|
703
|
-
* @category Types
|
|
704
|
-
* @since 0.1.3
|
|
705
|
-
* @remarks
|
|
706
|
-
* Permite especificar espaçamento como string, número ou objeto com eixos x e y separados.
|
|
707
|
-
* Útil para configurações de padding e margin em design tokens.
|
|
708
|
-
* @example
|
|
709
|
-
* ```typescript
|
|
710
|
-
* const spacing: SpacingValue = { x: 10, y: 20 };
|
|
711
|
-
* ```
|
|
712
|
-
*/
|
|
713
|
-
type SpacingValue = string | number | {
|
|
714
|
-
x?: string | number;
|
|
715
|
-
y?: string | number;
|
|
716
|
-
};
|
|
717
|
-
/**
|
|
718
|
-
* Tipo alias para cores com variações.
|
|
719
|
-
* @category Types
|
|
720
|
-
* @since 0.1.3
|
|
721
|
-
* @remarks
|
|
722
|
-
* Suporta cor simples ou objeto com variações light, main, dark e contrastText.
|
|
723
|
-
* Compatível com sistemas de design que precisam de paletas completas.
|
|
724
|
-
* @example
|
|
725
|
-
* ```typescript
|
|
726
|
-
* const color: ColorVariant = { main: '#1976d2', dark: '#1565c0' };
|
|
727
|
-
* ```
|
|
728
|
-
*/
|
|
729
|
-
type ColorVariant = string | {
|
|
730
|
-
light?: string;
|
|
731
|
-
main?: string;
|
|
732
|
-
dark?: string;
|
|
733
|
-
contrastText?: string;
|
|
734
|
-
};
|
|
735
|
-
/**
|
|
736
|
-
* Tipo alias para altura com auto.
|
|
737
|
-
* @category Types
|
|
738
|
-
* @since 0.1.3
|
|
739
|
-
* @remarks
|
|
740
|
-
* Permite 'auto' ou qualquer string válida para altura CSS, com type safety.
|
|
741
|
-
* Evita valores inválidos através de interseção com Record<never, never>.
|
|
742
|
-
* @example
|
|
743
|
-
* ```typescript
|
|
744
|
-
* const height: HeightValue = 'auto';
|
|
745
|
-
* const customHeight: HeightValue = '100px';
|
|
746
|
-
* ```
|
|
747
|
-
*/
|
|
748
|
-
type HeightValue = 'auto' | (string & Record<never, never>);
|
|
749
|
-
/**
|
|
750
|
-
* Tipo alias para configuração de backdrop.
|
|
751
|
-
* @category Types
|
|
752
|
-
* @since 0.1.3
|
|
753
|
-
* @remarks
|
|
754
|
-
* Define configuração do backdrop como booleano simples, string de cor ou objeto detalhado
|
|
755
|
-
* com propriedades como enabled, color, blur e opacity para controle granular.
|
|
756
|
-
* @example
|
|
757
|
-
* ```typescript
|
|
758
|
-
* const backdrop: BackdropConfig = { enabled: true, color: 'rgba(0,0,0,0.5)', blur: '4px' };
|
|
759
|
-
* ```
|
|
760
|
-
*/
|
|
761
|
-
type BackdropConfig = boolean | string | {
|
|
762
|
-
enabled?: boolean;
|
|
763
|
-
color?: string;
|
|
764
|
-
blur?: string;
|
|
765
|
-
opacity?: number;
|
|
766
|
-
};
|
|
767
|
-
/**
|
|
768
|
-
* Tokens de design para customização visual avançada dos componentes.
|
|
769
|
-
*
|
|
770
|
-
* Sistema robusto de design tokens que permite controle granular sobre todos os aspectos
|
|
771
|
-
* visuais da biblioteca. Suporta responsive design, estados interativos, acessibilidade
|
|
772
|
-
* e temas dark/light.
|
|
773
|
-
*
|
|
774
|
-
* @category Types
|
|
775
|
-
* @since 0.1.3
|
|
776
|
-
* @version 0.4.1 - Expandido substancialmente com novos tokens
|
|
777
|
-
* @public
|
|
778
|
-
*
|
|
779
|
-
* @example Configuração básica
|
|
780
|
-
* ```tsx
|
|
781
|
-
* const tokens: DesignTokens = {
|
|
782
|
-
* colors: {
|
|
783
|
-
* primary: '#1976d2',
|
|
784
|
-
* background: '#ffffff',
|
|
785
|
-
* text: '#333333'
|
|
786
|
-
* }
|
|
787
|
-
* }
|
|
788
|
-
* ```
|
|
789
|
-
*
|
|
790
|
-
* @example Configuração avançada com responsive e estados
|
|
791
|
-
* ```tsx
|
|
792
|
-
* const advancedTokens: DesignTokens = {
|
|
793
|
-
* colors: {
|
|
794
|
-
* primary: { light: '#42a5f5', main: '#1976d2', dark: '#1565c0' },
|
|
795
|
-
* semantic: {
|
|
796
|
-
* error: '#f44336',
|
|
797
|
-
* warning: '#ff9800',
|
|
798
|
-
* success: '#4caf50',
|
|
799
|
-
* info: '#2196f3'
|
|
800
|
-
* }
|
|
801
|
-
* },
|
|
802
|
-
* spacing: {
|
|
803
|
-
* responsive: {
|
|
804
|
-
* mobile: { padding: '12px', margin: '8px' },
|
|
805
|
-
* tablet: { padding: '16px', margin: '12px' },
|
|
806
|
-
* desktop: { padding: '24px', margin: '16px' }
|
|
807
|
-
* }
|
|
808
|
-
* }
|
|
809
|
-
* }
|
|
810
|
-
* ```
|
|
811
|
-
*/
|
|
812
|
-
interface DesignTokens {
|
|
813
|
-
/**
|
|
814
|
-
* Sistema de cores expandido com suporte a variações e semântica
|
|
815
|
-
*/
|
|
816
|
-
colors?: {
|
|
817
|
-
/** Cor primária da aplicação */
|
|
818
|
-
primary?: ColorVariant;
|
|
819
|
-
/** Cor secundária */
|
|
820
|
-
secondary?: ColorVariant;
|
|
821
|
-
/** Cor de fundo principal */
|
|
822
|
-
background?: string | {
|
|
823
|
-
main?: string;
|
|
824
|
-
paper?: string;
|
|
825
|
-
overlay?: string;
|
|
826
|
-
default?: string;
|
|
827
|
-
};
|
|
828
|
-
/** Cor do texto */
|
|
829
|
-
text?: string | {
|
|
830
|
-
primary?: string;
|
|
831
|
-
secondary?: string;
|
|
832
|
-
disabled?: string;
|
|
833
|
-
};
|
|
834
|
-
/** Cor da borda */
|
|
835
|
-
border?: ColorVariant;
|
|
836
|
-
/** Cores semânticas para estados */
|
|
837
|
-
semantic?: {
|
|
838
|
-
error?: string;
|
|
839
|
-
warning?: string;
|
|
840
|
-
success?: string;
|
|
841
|
-
info?: string;
|
|
842
|
-
};
|
|
843
|
-
/** Cores específicas para componentes */
|
|
844
|
-
components?: {
|
|
845
|
-
banner?: {
|
|
846
|
-
background?: string;
|
|
847
|
-
text?: string;
|
|
848
|
-
border?: string;
|
|
849
|
-
shadow?: string;
|
|
850
|
-
};
|
|
851
|
-
modal?: {
|
|
852
|
-
background?: string;
|
|
853
|
-
text?: string;
|
|
854
|
-
overlay?: string;
|
|
855
|
-
border?: string;
|
|
856
|
-
};
|
|
857
|
-
button?: {
|
|
858
|
-
primary?: {
|
|
859
|
-
background?: string;
|
|
860
|
-
text?: string;
|
|
861
|
-
hover?: string;
|
|
862
|
-
};
|
|
863
|
-
secondary?: {
|
|
864
|
-
background?: string;
|
|
865
|
-
text?: string;
|
|
866
|
-
hover?: string;
|
|
867
|
-
};
|
|
868
|
-
outlined?: {
|
|
869
|
-
border?: string;
|
|
870
|
-
text?: string;
|
|
871
|
-
hover?: string;
|
|
872
|
-
};
|
|
873
|
-
};
|
|
874
|
-
};
|
|
875
|
-
};
|
|
876
|
-
/**
|
|
877
|
-
* Sistema tipográfico completo com hierarquia e responsive
|
|
878
|
-
*/
|
|
879
|
-
typography?: {
|
|
880
|
-
/** Família de fontes principal */
|
|
881
|
-
fontFamily?: string | {
|
|
882
|
-
primary?: string;
|
|
883
|
-
secondary?: string;
|
|
884
|
-
monospace?: string;
|
|
885
|
-
};
|
|
886
|
-
/** Tamanhos de fonte com hierarchy */
|
|
887
|
-
fontSize?: {
|
|
888
|
-
/** Tamanhos para banner */
|
|
889
|
-
banner?: {
|
|
890
|
-
title?: string;
|
|
891
|
-
message?: string;
|
|
892
|
-
button?: string;
|
|
893
|
-
};
|
|
894
|
-
/** Tamanhos para modal */
|
|
895
|
-
modal?: {
|
|
896
|
-
title?: string;
|
|
897
|
-
body?: string;
|
|
898
|
-
button?: string;
|
|
899
|
-
caption?: string;
|
|
900
|
-
};
|
|
901
|
-
/** Scale tipográfica */
|
|
902
|
-
scale?: {
|
|
903
|
-
xs?: string;
|
|
904
|
-
sm?: string;
|
|
905
|
-
base?: string;
|
|
906
|
-
lg?: string;
|
|
907
|
-
xl?: string;
|
|
908
|
-
'2xl'?: string;
|
|
909
|
-
'3xl'?: string;
|
|
910
|
-
};
|
|
911
|
-
/** Tamanhos específicos de cabeçalhos */
|
|
912
|
-
h1?: string;
|
|
913
|
-
h2?: string;
|
|
914
|
-
h3?: string;
|
|
915
|
-
h4?: string;
|
|
916
|
-
h5?: string;
|
|
917
|
-
h6?: string;
|
|
918
|
-
};
|
|
919
|
-
/** Pesos de fonte */
|
|
920
|
-
fontWeight?: {
|
|
921
|
-
light?: number;
|
|
922
|
-
normal?: number;
|
|
923
|
-
medium?: number;
|
|
924
|
-
semibold?: number;
|
|
925
|
-
bold?: number;
|
|
926
|
-
};
|
|
927
|
-
/** Altura de linha */
|
|
928
|
-
lineHeight?: {
|
|
929
|
-
tight?: number;
|
|
930
|
-
normal?: number;
|
|
931
|
-
relaxed?: number;
|
|
932
|
-
loose?: number;
|
|
933
|
-
};
|
|
934
|
-
/** Espaçamento de letras */
|
|
935
|
-
letterSpacing?: {
|
|
936
|
-
tight?: string;
|
|
937
|
-
normal?: string;
|
|
938
|
-
wide?: string;
|
|
939
|
-
};
|
|
940
|
-
};
|
|
941
|
-
/**
|
|
942
|
-
* Sistema de espaçamento e dimensões flexível
|
|
943
|
-
*/
|
|
944
|
-
spacing?: {
|
|
945
|
-
/** Valores diretos de espaçamento */
|
|
946
|
-
xs?: string | number;
|
|
947
|
-
sm?: string | number;
|
|
948
|
-
md?: string | number;
|
|
949
|
-
lg?: string | number;
|
|
950
|
-
xl?: string | number;
|
|
951
|
-
/** Escala de espaçamento base */
|
|
952
|
-
scale?: {
|
|
953
|
-
xs?: string | number;
|
|
954
|
-
sm?: string | number;
|
|
955
|
-
md?: string | number;
|
|
956
|
-
lg?: string | number;
|
|
957
|
-
xl?: string | number;
|
|
958
|
-
'2xl'?: string | number;
|
|
959
|
-
'3xl'?: string | number;
|
|
960
|
-
};
|
|
961
|
-
/** Padding específico por componente */
|
|
962
|
-
padding?: {
|
|
963
|
-
banner?: SpacingValue;
|
|
964
|
-
modal?: SpacingValue;
|
|
965
|
-
button?: SpacingValue;
|
|
966
|
-
};
|
|
967
|
-
/** Margem específica por componente */
|
|
968
|
-
margin?: {
|
|
969
|
-
banner?: SpacingValue;
|
|
970
|
-
modal?: SpacingValue;
|
|
971
|
-
button?: SpacingValue;
|
|
972
|
-
};
|
|
973
|
-
/** Bordas arredondadas */
|
|
974
|
-
borderRadius?: {
|
|
975
|
-
banner?: string | number;
|
|
976
|
-
modal?: string | number;
|
|
977
|
-
button?: string | number;
|
|
978
|
-
/** Scale de border radius */
|
|
979
|
-
scale?: {
|
|
980
|
-
none?: string | number;
|
|
981
|
-
sm?: string | number;
|
|
982
|
-
md?: string | number;
|
|
983
|
-
lg?: string | number;
|
|
984
|
-
xl?: string | number;
|
|
985
|
-
full?: string | number;
|
|
986
|
-
};
|
|
987
|
-
};
|
|
988
|
-
/** Configurações responsive */
|
|
989
|
-
responsive?: {
|
|
990
|
-
mobile?: {
|
|
991
|
-
padding?: string | number;
|
|
992
|
-
margin?: string | number;
|
|
993
|
-
borderRadius?: string | number;
|
|
994
|
-
};
|
|
995
|
-
tablet?: {
|
|
996
|
-
padding?: string | number;
|
|
997
|
-
margin?: string | number;
|
|
998
|
-
borderRadius?: string | number;
|
|
999
|
-
};
|
|
1000
|
-
desktop?: {
|
|
1001
|
-
padding?: string | number;
|
|
1002
|
-
margin?: string | number;
|
|
1003
|
-
borderRadius?: string | number;
|
|
1004
|
-
};
|
|
1005
|
-
};
|
|
1006
|
-
};
|
|
1007
|
-
/**
|
|
1008
|
-
* Configurações de layout e posicionamento
|
|
1009
|
-
*/
|
|
1010
|
-
layout?: {
|
|
1011
|
-
/** Posição do banner */
|
|
1012
|
-
position?: 'bottom' | 'top' | 'floating' | 'center';
|
|
1013
|
-
/** Larguras por breakpoint */
|
|
1014
|
-
width?: {
|
|
1015
|
-
mobile?: string;
|
|
1016
|
-
tablet?: string;
|
|
1017
|
-
desktop?: string;
|
|
1018
|
-
max?: string;
|
|
1019
|
-
};
|
|
1020
|
-
/** Alturas específicas */
|
|
1021
|
-
height?: {
|
|
1022
|
-
banner?: HeightValue;
|
|
1023
|
-
modal?: HeightValue;
|
|
1024
|
-
button?: HeightValue;
|
|
1025
|
-
};
|
|
1026
|
-
/** Configuração do backdrop */
|
|
1027
|
-
backdrop?: BackdropConfig;
|
|
1028
|
-
/** Z-index para layering */
|
|
1029
|
-
zIndex?: {
|
|
1030
|
-
banner?: number;
|
|
1031
|
-
modal?: number;
|
|
1032
|
-
backdrop?: number;
|
|
1033
|
-
floatingButton?: number;
|
|
1034
|
-
};
|
|
1035
|
-
/** Breakpoints customizados */
|
|
1036
|
-
breakpoints?: {
|
|
1037
|
-
mobile?: string;
|
|
1038
|
-
tablet?: string;
|
|
1039
|
-
desktop?: string;
|
|
1040
|
-
wide?: string;
|
|
1041
|
-
};
|
|
1042
|
-
/** Border radius para componentes */
|
|
1043
|
-
borderRadius?: string | number | {
|
|
1044
|
-
banner?: string | number;
|
|
1045
|
-
modal?: string | number;
|
|
1046
|
-
button?: string | number;
|
|
1047
|
-
scale?: {
|
|
1048
|
-
none?: string | number;
|
|
1049
|
-
sm?: string | number;
|
|
1050
|
-
md?: string | number;
|
|
1051
|
-
lg?: string | number;
|
|
1052
|
-
xl?: string | number;
|
|
1053
|
-
full?: string | number;
|
|
1054
|
-
};
|
|
1055
|
-
};
|
|
1056
|
-
};
|
|
1057
|
-
/**
|
|
1058
|
-
* Efeitos visuais e interações
|
|
1059
|
-
*/
|
|
1060
|
-
effects?: {
|
|
1061
|
-
/** Sombras */
|
|
1062
|
-
shadow?: {
|
|
1063
|
-
banner?: string;
|
|
1064
|
-
modal?: string;
|
|
1065
|
-
button?: string;
|
|
1066
|
-
/** Scale de sombras */
|
|
1067
|
-
scale?: {
|
|
1068
|
-
none?: string;
|
|
1069
|
-
sm?: string;
|
|
1070
|
-
md?: string;
|
|
1071
|
-
lg?: string;
|
|
1072
|
-
xl?: string;
|
|
1073
|
-
};
|
|
1074
|
-
};
|
|
1075
|
-
/** Transições e animações */
|
|
1076
|
-
transitions?: {
|
|
1077
|
-
duration?: {
|
|
1078
|
-
fast?: string;
|
|
1079
|
-
normal?: string;
|
|
1080
|
-
slow?: string;
|
|
1081
|
-
};
|
|
1082
|
-
easing?: {
|
|
1083
|
-
linear?: string;
|
|
1084
|
-
easeIn?: string;
|
|
1085
|
-
easeOut?: string;
|
|
1086
|
-
easeInOut?: string;
|
|
1087
|
-
};
|
|
1088
|
-
/** Transições específicas */
|
|
1089
|
-
banner?: {
|
|
1090
|
-
enter?: string;
|
|
1091
|
-
exit?: string;
|
|
1092
|
-
};
|
|
1093
|
-
modal?: {
|
|
1094
|
-
enter?: string;
|
|
1095
|
-
exit?: string;
|
|
1096
|
-
};
|
|
1097
|
-
};
|
|
1098
|
-
/** Blur e filtros */
|
|
1099
|
-
filters?: {
|
|
1100
|
-
backdrop?: string;
|
|
1101
|
-
disabled?: string;
|
|
1102
|
-
};
|
|
1103
|
-
};
|
|
1104
|
-
/**
|
|
1105
|
-
* Configurações de acessibilidade
|
|
1106
|
-
*/
|
|
1107
|
-
accessibility?: {
|
|
1108
|
-
/** Contraste mínimo */
|
|
1109
|
-
contrast?: {
|
|
1110
|
-
normal?: number;
|
|
1111
|
-
enhanced?: number;
|
|
1112
|
-
};
|
|
1113
|
-
/** Configurações para motion */
|
|
1114
|
-
motion?: {
|
|
1115
|
-
respectPreferences?: boolean;
|
|
1116
|
-
reducedMotion?: {
|
|
1117
|
-
duration?: string;
|
|
1118
|
-
easing?: string;
|
|
1119
|
-
};
|
|
1120
|
-
};
|
|
1121
|
-
/** Focus indicators */
|
|
1122
|
-
focus?: {
|
|
1123
|
-
color?: string;
|
|
1124
|
-
width?: string;
|
|
1125
|
-
style?: 'solid' | 'dashed' | 'dotted';
|
|
1126
|
-
offset?: string;
|
|
1127
|
-
};
|
|
1128
|
-
};
|
|
1129
|
-
/**
|
|
1130
|
-
* Temas e variações
|
|
1131
|
-
*/
|
|
1132
|
-
themes?: {
|
|
1133
|
-
/** Configurações específicas para tema claro */
|
|
1134
|
-
light?: Partial<Omit<DesignTokens, 'themes'>>;
|
|
1135
|
-
/** Configurações específicas para tema escuro */
|
|
1136
|
-
dark?: Partial<Omit<DesignTokens, 'themes'>>;
|
|
1137
|
-
/** Auto-detecção baseada no sistema */
|
|
1138
|
-
auto?: boolean;
|
|
1139
|
-
};
|
|
1140
|
-
}
|
|
1141
|
-
/**
|
|
1142
|
-
* Propriedades do componente ConsentProvider - configuração principal da biblioteca.
|
|
1143
|
-
* @category Types
|
|
1144
|
-
* @since 0.1.0
|
|
1145
|
-
* @public
|
|
1146
|
-
*
|
|
1147
|
-
* @example Uso básico (configuração mínima):
|
|
1148
|
-
* ```tsx
|
|
1149
|
-
* <ConsentProvider
|
|
1150
|
-
* categories={{ enabledCategories: ['analytics'] }}
|
|
1151
|
-
* >
|
|
1152
|
-
* <App />
|
|
1153
|
-
* </ConsentProvider>
|
|
1154
|
-
* ```
|
|
1155
|
-
*
|
|
1156
|
-
* @example Configuração completa com textos ANPD:
|
|
1157
|
-
* ```tsx
|
|
1158
|
-
* <ConsentProvider
|
|
1159
|
-
* categories={{
|
|
1160
|
-
* enabledCategories: ['analytics', 'functional'],
|
|
1161
|
-
* }}
|
|
1162
|
-
* texts={{
|
|
1163
|
-
* bannerMessage: 'Utilizamos cookies conforme LGPD...',
|
|
1164
|
-
* controllerInfo: 'Controlado por: Ministério XYZ - CNPJ: 00.000.000/0001-00',
|
|
1165
|
-
* dataTypes: 'Coletamos: dados de navegação para análise estatística',
|
|
1166
|
-
* userRights: 'Direitos: acessar, corrigir, excluir dados',
|
|
1167
|
-
* contactInfo: 'DPO: dpo@ministerio.gov.br'
|
|
1168
|
-
* }}
|
|
1169
|
-
* onConsentGiven={(state) => console.log('Consentimento:', state)}
|
|
1170
|
-
* >
|
|
1171
|
-
* <App />
|
|
1172
|
-
* </ConsentProvider>
|
|
1173
|
-
* ```
|
|
1174
|
-
*/
|
|
1175
|
-
interface ConsentProviderProps {
|
|
1176
|
-
/**
|
|
1177
|
-
* Estado inicial do consentimento para hidratação SSR.
|
|
1178
|
-
*
|
|
1179
|
-
* @example
|
|
1180
|
-
* ```tsx
|
|
1181
|
-
* // Em Next.js para evitar flash do banner
|
|
1182
|
-
* <ConsentProvider initialState={{ consented: true, preferences: {...} }}>
|
|
1183
|
-
* ```
|
|
1184
|
-
*/
|
|
1185
|
-
initialState?: ConsentState;
|
|
1186
|
-
/**
|
|
1187
|
-
* Configuração das categorias de cookies utilizadas no projeto.
|
|
1188
|
-
* Define quais categorias padrão serão habilitadas.
|
|
1189
|
-
*
|
|
1190
|
-
* @example Apenas analytics:
|
|
1191
|
-
* ```tsx
|
|
1192
|
-
* categories={{ enabledCategories: ['analytics'] }}
|
|
1193
|
-
* ```
|
|
1194
|
-
*
|
|
1195
|
-
* @example Com categoria padrão apenas:
|
|
1196
|
-
* ```tsx
|
|
1197
|
-
* categories={{ enabledCategories: ['analytics', 'marketing'] }}
|
|
1198
|
-
* ```
|
|
1199
|
-
*/
|
|
1200
|
-
categories?: ProjectCategoriesConfig;
|
|
1201
|
-
/**
|
|
1202
|
-
* Textos customizados da interface (banner e modal).
|
|
1203
|
-
* Todos os campos são opcionais - valores não fornecidos usam o padrão em português.
|
|
1204
|
-
*
|
|
1205
|
-
* @example Textos básicos:
|
|
1206
|
-
* ```tsx
|
|
1207
|
-
* texts={{
|
|
1208
|
-
* bannerMessage: 'We use cookies...',
|
|
1209
|
-
* acceptAll: 'Accept All',
|
|
1210
|
-
* declineAll: 'Reject'
|
|
1211
|
-
* }}
|
|
1212
|
-
* ```
|
|
1213
|
-
*
|
|
1214
|
-
* @example Textos ANPD para compliance:
|
|
1215
|
-
* ```tsx
|
|
1216
|
-
* texts={{
|
|
1217
|
-
* controllerInfo: 'Controlado por: Empresa XYZ - CNPJ: 12.345.678/0001-90',
|
|
1218
|
-
* dataTypes: 'Coletamos: endereço IP, preferências de navegação',
|
|
1219
|
-
* userRights: 'Você pode solicitar acesso, correção ou exclusão dos seus dados'
|
|
1220
|
-
* }}
|
|
1221
|
-
* ```
|
|
1222
|
-
*/
|
|
1223
|
-
texts?: Partial<ConsentTexts>;
|
|
1224
|
-
/**
|
|
1225
|
-
* Tema Material-UI a ser aplicado aos componentes via ThemeProvider.
|
|
1226
|
-
*
|
|
1227
|
-
* Observação importante: a biblioteca NÃO cria/mescla tema automaticamente.
|
|
1228
|
-
* Se você fornecer um `theme` aqui, ele será repassado diretamente ao `ThemeProvider`.
|
|
1229
|
-
* Se não fornecer, a lib não envolverá com `ThemeProvider` e herdará o tema do app.
|
|
1230
|
-
*
|
|
1231
|
-
* @example
|
|
1232
|
-
* ```tsx
|
|
1233
|
-
* import { createTheme } from '@mui/material/styles'
|
|
1234
|
-
* const appTheme = createTheme({ palette: { primary: { main: '#1976d2' } } })
|
|
1235
|
-
*
|
|
1236
|
-
* <ConsentProvider theme={appTheme}>
|
|
1237
|
-
* <App />
|
|
1238
|
-
* </ConsentProvider>
|
|
1239
|
-
* ```
|
|
1240
|
-
*/
|
|
1241
|
-
theme?: Theme;
|
|
1242
|
-
/**
|
|
1243
|
-
* Tokens de design para customização visual avançada.
|
|
1244
|
-
* Oferece controle direto sobre cores, fontes, espaçamento e layout.
|
|
1245
|
-
*
|
|
1246
|
-
* @example
|
|
1247
|
-
* ```tsx
|
|
1248
|
-
* designTokens={{
|
|
1249
|
-
* colors: { background: '#000', text: '#fff' },
|
|
1250
|
-
* typography: { fontFamily: ''Inter', sans-serif' },
|
|
1251
|
-
* spacing: { borderRadius: { banner: 0 } }
|
|
1252
|
-
* }}
|
|
1253
|
-
* ```
|
|
1254
|
-
*/
|
|
1255
|
-
designTokens?: DesignTokens;
|
|
1256
|
-
/**
|
|
1257
|
-
* Componente customizado para substituir o modal padrão de preferências.
|
|
1258
|
-
* Deve implementar a lógica de consentimento usando as props definidas em `CustomPreferencesModalProps`.
|
|
1259
|
-
*/
|
|
1260
|
-
PreferencesModalComponent?: React.ComponentType<CustomPreferencesModalProps>;
|
|
1261
|
-
/** Props adicionais passadas para o modal customizado (repassadas sem transformação). */
|
|
1262
|
-
preferencesModalProps?: Record<string, unknown>;
|
|
1263
|
-
/**
|
|
1264
|
-
* Componente customizado para substituir o banner padrão de cookies.
|
|
1265
|
-
* Se não fornecido, o `CookieBanner` padrão será renderizado.
|
|
1266
|
-
* Deve implementar a lógica de consentimento usando as props definidas em `CustomCookieBannerProps`.
|
|
1267
|
-
*/
|
|
1268
|
-
CookieBannerComponent?: React.ComponentType<CustomCookieBannerProps>;
|
|
1269
|
-
/** Props adicionais passadas para o banner customizado (repassadas sem transformação). */
|
|
1270
|
-
cookieBannerProps?: Record<string, unknown>;
|
|
1271
|
-
/**
|
|
1272
|
-
* Componente customizado para substituir o botão flutuante de preferências.
|
|
1273
|
-
* Se não fornecido, o `FloatingPreferencesButton` padrão será renderizado.
|
|
1274
|
-
* Deve implementar a lógica de consentimento usando as props definidas em `CustomFloatingPreferencesButtonProps`.
|
|
1275
|
-
*/
|
|
1276
|
-
FloatingPreferencesButtonComponent?: React.ComponentType<CustomFloatingPreferencesButtonProps>;
|
|
1277
|
-
/** Props adicionais passadas para o botão flutuante customizado (repassadas sem transformação). */
|
|
1278
|
-
floatingPreferencesButtonProps?: Record<string, unknown>;
|
|
1279
|
-
/**
|
|
1280
|
-
* Desabilita o botão flutuante de preferências.
|
|
1281
|
-
* Útil quando o usuário da lib quer ter controle total sobre o acesso às preferências.
|
|
1282
|
-
*/
|
|
1283
|
-
disableFloatingPreferencesButton?: boolean;
|
|
1284
|
-
/**
|
|
1285
|
-
* Comportamento do banner de consentimento:
|
|
1286
|
-
* - `false` (padrão): Banner não-intrusivo, usuário pode navegar livremente
|
|
1287
|
-
* - `true`: Banner bloqueia interação até decisão (compliance rigorosa)
|
|
1288
|
-
*/
|
|
1289
|
-
blocking?: boolean;
|
|
1290
|
-
/**
|
|
1291
|
-
* Estratégia de bloqueio quando `blocking` estiver habilitado.
|
|
1292
|
-
* - 'auto' (padrão):
|
|
1293
|
-
* - Se usar o banner padrão da lib, o bloqueio visual/funcional fica a cargo do próprio banner.
|
|
1294
|
-
* - Se usar `CookieBannerComponent` custom, o Provider NÃO cria overlay; o bloqueio fica a cargo do componente custom (compatibilidade atual).
|
|
1295
|
-
* - 'provider': o Provider cria um overlay de bloqueio por cima da aplicação (e abaixo do banner),
|
|
1296
|
-
* garantindo que cliques sejam bloqueados, independentemente do banner custom implementar ou não esse comportamento.
|
|
1297
|
-
* - 'component': nenhum overlay do Provider; espera-se que o banner (padrão ou custom) trate o bloqueio.
|
|
1298
|
-
*
|
|
1299
|
-
* Observações:
|
|
1300
|
-
* - Visual do overlay do Provider controlado por `designTokens.layout.backdrop`:
|
|
1301
|
-
* - `false`: overlay transparente (bloqueia cliques sem escurecer — útil quando o app já possui um dark-filter visual próprio).
|
|
1302
|
-
* - `string` (ex.: 'rgba(0,0,0,0.4)'): overlay com escurecimento gerenciado pela lib.
|
|
1303
|
-
* - A11y: recomenda-se que o banner use semântica de diálogo (role="dialog", aria-modal="true") e trap de foco.
|
|
1304
|
-
*/
|
|
1305
|
-
blockingStrategy?: 'auto' | 'provider' | 'component';
|
|
1306
|
-
/** Oculta o branding "fornecido por LÉdipO.eti.br" dos componentes. */
|
|
1307
|
-
hideBranding?: boolean;
|
|
1308
|
-
/**
|
|
1309
|
-
* Callback executado quando usuário dá consentimento pela primeira vez.
|
|
1310
|
-
* Útil para inicializar analytics, registrar evento, etc.
|
|
1311
|
-
*
|
|
1312
|
-
* @example
|
|
1313
|
-
* ```tsx
|
|
1314
|
-
* onConsentGiven={(state) => {
|
|
1315
|
-
* console.log('Consentimento registrado:', state)
|
|
1316
|
-
* // Inicializar Google Analytics, etc.
|
|
1317
|
-
* }}
|
|
1318
|
-
* ```
|
|
1319
|
-
*/
|
|
1320
|
-
onConsentGiven?: (state: ConsentState) => void;
|
|
1321
|
-
/**
|
|
1322
|
-
* Callback executado quando usuário modifica preferências.
|
|
1323
|
-
* Executado após salvar as mudanças.
|
|
1324
|
-
*
|
|
1325
|
-
* @example
|
|
1326
|
-
* ```tsx
|
|
1327
|
-
* onPreferencesSaved={(prefs) => {
|
|
1328
|
-
* console.log('Novas preferências:', prefs)
|
|
1329
|
-
* // Reconfigurar scripts baseado nas preferências
|
|
1330
|
-
* }}
|
|
1331
|
-
* ```
|
|
1332
|
-
*/
|
|
1333
|
-
onPreferencesSaved?: (prefs: ConsentPreferences) => void;
|
|
1334
|
-
/**
|
|
1335
|
-
* Configurações do cookie de consentimento.
|
|
1336
|
-
* Valores não fornecidos usam padrões seguros para LGPD.
|
|
1337
|
-
*
|
|
1338
|
-
* @example
|
|
1339
|
-
* ```tsx
|
|
1340
|
-
* cookie={{
|
|
1341
|
-
* name: 'meuAppConsent',
|
|
1342
|
-
* maxAgeDays: 180,
|
|
1343
|
-
* sameSite: 'Strict'
|
|
1344
|
-
* }}
|
|
1345
|
-
* ```
|
|
1346
|
-
*/
|
|
1347
|
-
cookie?: Partial<ConsentCookieOptions>;
|
|
1348
|
-
/**
|
|
1349
|
-
* Desabilita os avisos e sugestões para desenvolvedores no console.
|
|
1350
|
-
* Útil para ambientes de produção ou quando os avisos não são desejados.
|
|
1351
|
-
* Por padrão, os avisos já são desabilitados em builds de produção.
|
|
1352
|
-
*/
|
|
1353
|
-
disableDeveloperGuidance?: boolean;
|
|
1354
|
-
/**
|
|
1355
|
-
* Desabilita o log automático de descoberta de cookies em modo desenvolvimento.
|
|
1356
|
-
* Mesmo com `disableDeveloperGuidance` ativado, por padrão a descoberta é logada uma vez para ajudar o mapeamento.
|
|
1357
|
-
* Use esta prop para suprimir também esse log experimental.
|
|
1358
|
-
* @since 0.4.1
|
|
1359
|
-
*/
|
|
1360
|
-
disableDiscoveryLog?: boolean;
|
|
1361
|
-
/**
|
|
1362
|
-
* Configuração avançada para o sistema de developer guidance.
|
|
1363
|
-
* Permite controle granular sobre quais tipos de guias são exibidos e como.
|
|
1364
|
-
* @since 0.4.1
|
|
1365
|
-
* @example
|
|
1366
|
-
* ```tsx
|
|
1367
|
-
* // Usar preset de desenvolvimento
|
|
1368
|
-
* guidanceConfig={GUIDANCE_PRESETS.development}
|
|
1369
|
-
*
|
|
1370
|
-
* // Configuração personalizada
|
|
1371
|
-
* guidanceConfig={{
|
|
1372
|
-
* showWarnings: true,
|
|
1373
|
-
* showComplianceScore: true,
|
|
1374
|
-
* minimumSeverity: 'warning'
|
|
1375
|
-
* }}
|
|
1376
|
-
* ```
|
|
1377
|
-
*/
|
|
1378
|
-
guidanceConfig?: GuidanceConfig;
|
|
1379
|
-
/** Elementos filhos - toda a aplicação que precisa de contexto de consentimento. */
|
|
1380
|
-
children: React.ReactNode;
|
|
1381
|
-
}
|
|
1382
|
-
/**
|
|
1383
|
-
* Props esperadas por um componente customizado de CookieBanner.
|
|
1384
|
-
* @category Types
|
|
1385
|
-
* @since 0.3.1
|
|
1386
|
-
* @public
|
|
1387
|
-
* Fornece acesso ao estado de consentimento e ações necessárias para o banner.
|
|
1388
|
-
*/
|
|
1389
|
-
interface CustomCookieBannerProps {
|
|
1390
|
-
consented: boolean;
|
|
1391
|
-
acceptAll: () => void;
|
|
1392
|
-
rejectAll: () => void;
|
|
1393
|
-
openPreferences: () => void;
|
|
1394
|
-
texts: ConsentTexts;
|
|
1395
|
-
/**
|
|
1396
|
-
* Indica se o modo bloqueante está ativo no contexto.
|
|
1397
|
-
* Esta prop é apenas informativa para banners customizados ajustarem sua UI.
|
|
1398
|
-
* O bloqueio funcional pode ser garantido pelo Provider quando `blockingStrategy='provider'`.
|
|
1399
|
-
*/
|
|
1400
|
-
blocking?: boolean;
|
|
1401
|
-
}
|
|
1402
|
-
/**
|
|
1403
|
-
* Props esperadas por um componente customizado de PreferencesModal.
|
|
1404
|
-
* @category Types
|
|
1405
|
-
* @since 0.3.1
|
|
1406
|
-
* @public
|
|
1407
|
-
*
|
|
1408
|
-
* Fornece acesso às preferências atuais do usuário, funções para atualizar e salvar preferências,
|
|
1409
|
-
* fechar o modal e textos customizados da interface.
|
|
1410
|
-
*
|
|
1411
|
-
* @property preferences Preferências atuais de consentimento do usuário.
|
|
1412
|
-
* @property setPreferences Função para atualizar e salvar as preferências.
|
|
1413
|
-
* @property closePreferences Função para fechar o modal de preferências.
|
|
1414
|
-
* @property isModalOpen Indica se o modal está aberto (opcional).
|
|
1415
|
-
* @property texts Textos customizados da interface de consentimento.
|
|
1416
|
-
*/
|
|
1417
|
-
interface CustomPreferencesModalProps {
|
|
1418
|
-
preferences: ConsentPreferences;
|
|
1419
|
-
setPreferences: (preferences: ConsentPreferences) => void;
|
|
1420
|
-
closePreferences: () => void;
|
|
1421
|
-
isModalOpen?: boolean;
|
|
1422
|
-
texts: ConsentTexts;
|
|
1423
|
-
}
|
|
1424
|
-
/**
|
|
1425
|
-
* Props esperadas por um componente customizado de FloatingPreferencesButton.
|
|
1426
|
-
* @category Types
|
|
1427
|
-
* @since 0.3.1
|
|
1428
|
-
* @public
|
|
1429
|
-
* Fornece acesso às ações de abertura do modal e ao estado de consentimento.
|
|
1430
|
-
*/
|
|
1431
|
-
interface CustomFloatingPreferencesButtonProps {
|
|
1432
|
-
openPreferences: () => void;
|
|
1433
|
-
consented: boolean;
|
|
1434
|
-
}
|
|
1435
|
-
/**
|
|
1436
|
-
* Valor do contexto de consentimento, incluindo estado e métodos de manipulação.
|
|
1437
|
-
* @category Types
|
|
1438
|
-
* @since 0.1.0
|
|
1439
|
-
* @public
|
|
1440
|
-
*/
|
|
1441
|
-
interface ConsentContextValue {
|
|
1442
|
-
/** Indica se o usuário consentiu. */
|
|
1443
|
-
consented: boolean;
|
|
1444
|
-
/** Preferências atuais do usuário. */
|
|
1445
|
-
preferences: ConsentPreferences;
|
|
1446
|
-
/** Indica se o modal de preferências está aberto. */
|
|
1447
|
-
isModalOpen?: boolean;
|
|
1448
|
-
/** Aceita todas as categorias de consentimento. */
|
|
1449
|
-
acceptAll: () => void;
|
|
1450
|
-
/** Rejeita todas as categorias de consentimento. */
|
|
1451
|
-
rejectAll: () => void;
|
|
1452
|
-
/**
|
|
1453
|
-
* Define a preferência para uma categoria específica.
|
|
1454
|
-
* Suporta tanto categorias predefinidas quanto customizadas.
|
|
1455
|
-
*
|
|
1456
|
-
* @param cat - ID da categoria (predefinida ou customizada)
|
|
1457
|
-
* @param value - Valor do consentimento para a categoria
|
|
1458
|
-
*
|
|
1459
|
-
* @breakingChange
|
|
1460
|
-
* **v0.4.1**: Parâmetro `cat` mudou de `Category` para `string` para suportar
|
|
1461
|
-
* categorias customizadas. O uso com strings literais continua funcionando.
|
|
1462
|
-
*
|
|
1463
|
-
* @example
|
|
1464
|
-
* ```typescript
|
|
1465
|
-
* // ✅ Continua funcionando (categorias predefinidas)
|
|
1466
|
-
* setPreference('analytics', true)
|
|
1467
|
-
* setPreference('marketing', false)
|
|
1468
|
-
*
|
|
1469
|
-
* // ✅ Novo: categorias customizadas
|
|
1470
|
-
* setPreference('custom-tracking', true)
|
|
1471
|
-
* ```
|
|
1472
|
-
*/
|
|
1473
|
-
setPreference: (cat: string, value: boolean) => void;
|
|
1474
|
-
/** Define múltiplas preferências de uma vez e salva. */
|
|
1475
|
-
setPreferences: (preferences: ConsentPreferences) => void;
|
|
1476
|
-
/** Abre o modal de preferências. */
|
|
1477
|
-
openPreferences: () => void;
|
|
1478
|
-
/** Fecha o modal de preferências. */
|
|
1479
|
-
closePreferences: () => void;
|
|
1480
|
-
/** Reseta o consentimento do usuário. */
|
|
1481
|
-
resetConsent: () => void;
|
|
1482
|
-
}
|
|
1483
|
-
|
|
1484
|
-
/**
|
|
1485
|
-
* @component
|
|
1486
|
-
* @category Context
|
|
1487
|
-
* @since 0.1.0
|
|
1488
|
-
* Provider principal da biblioteca. Envolva sua aplicação com este componente para habilitar o gerenciamento de consentimento.
|
|
1489
|
-
*
|
|
1490
|
-
* @remarks
|
|
1491
|
-
* Este provider gerencia o estado de consentimento, renderiza a UI (banner, modal) e fornece o contexto para todos os hooks, como o `useConsent`.
|
|
1492
|
-
* 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.
|
|
1493
|
-
*
|
|
1494
|
-
* @param {Readonly<ConsentProviderProps>} props - As propriedades para configurar o provider.
|
|
1495
|
-
* @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.
|
|
1496
|
-
* @param {Partial<ConsentTexts>} [props.texts] - Objeto para customizar todos os textos exibidos na UI.
|
|
1497
|
-
* @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.
|
|
1498
|
-
* @param {(state: ConsentState) => void} [props.onConsentGiven] - Callback executado na primeira vez que o usuário dá o consentimento.
|
|
1499
|
-
* @param {(prefs: ConsentPreferences) => void} [props.onPreferencesSaved] - Callback executado sempre que o usuário salva novas preferências.
|
|
1500
|
-
* @param {boolean} [props.disableDeveloperGuidance=false] - Desativa as mensagens de orientação no console em ambiente de desenvolvimento.
|
|
1501
|
-
* @param {boolean} [props.disableFloatingPreferencesButton=false] - Desabilita o botão flutuante para reabrir as preferências.
|
|
1502
|
-
* @param {React.ComponentType<CustomCookieBannerProps>} [props.CookieBannerComponent] - Permite substituir o componente de banner padrão por um customizado.
|
|
1503
|
-
* @param {React.ComponentType<CustomPreferencesModalProps>} [props.PreferencesModalComponent] - Permite substituir o modal de preferências padrão por um customizado.
|
|
1504
|
-
* @param {any} [props.theme] - Objeto de tema do Material-UI para estilizar os componentes padrão.
|
|
1505
|
-
* @param {ConsentState} [props.initialState] - Estado inicial para hidratação em SSR, evitando o "flash" do banner.
|
|
1506
|
-
* @param {Partial<ConsentCookieOptions>} [props.cookie] - Opções para customizar o nome, duração e outros atributos do cookie de consentimento.
|
|
1507
|
-
* @param {React.ReactNode} props.children - A aplicação ou parte dela que terá acesso ao contexto de consentimento.
|
|
1508
|
-
*
|
|
1509
|
-
* @example
|
|
1510
|
-
* ```tsx
|
|
1511
|
-
* // Uso básico
|
|
1512
|
-
* <ConsentProvider categories={{ enabledCategories: ['analytics'] }}>
|
|
1513
|
-
* <MyApp />
|
|
1514
|
-
* </ConsentProvider>
|
|
1515
|
-
* ```
|
|
1516
|
-
*
|
|
1517
|
-
* @example
|
|
1518
|
-
* ```tsx
|
|
1519
|
-
* // Uso avançado com UI customizada e callbacks
|
|
1520
|
-
* <ConsentProvider
|
|
1521
|
-
* categories={{ enabledCategories: ['analytics', 'marketing'] }}
|
|
1522
|
-
* blocking={true}
|
|
1523
|
-
* texts={{ bannerMessage: 'Usamos cookies!' }}
|
|
1524
|
-
* onPreferencesSaved={(prefs) => console.log('Preferências salvas:', prefs)}
|
|
1525
|
-
* CookieBannerComponent={MeuBannerCustomizado}
|
|
1526
|
-
* >
|
|
1527
|
-
* <MyApp />
|
|
1528
|
-
* </ConsentProvider>
|
|
1529
|
-
* ```
|
|
1530
|
-
*/
|
|
1531
|
-
declare function ConsentProvider({ initialState, categories, texts: textsProp, theme, designTokens, PreferencesModalComponent, preferencesModalProps, CookieBannerComponent, cookieBannerProps, FloatingPreferencesButtonComponent, floatingPreferencesButtonProps, disableFloatingPreferencesButton, blocking, blockingStrategy, hideBranding, onConsentGiven, onPreferencesSaved, cookie: cookieOpts, disableDeveloperGuidance, guidanceConfig, children, disableDiscoveryLog, }: Readonly<ConsentProviderProps>): react_jsx_runtime.JSX.Element;
|
|
1532
|
-
declare const defaultTexts: ConsentTexts;
|
|
1533
|
-
|
|
1534
|
-
/**
|
|
1535
|
-
* @fileoverview
|
|
1536
|
-
* Hooks públicos para interação com o sistema de consentimento LGPD.
|
|
1537
|
-
*
|
|
1538
|
-
* Este módulo exporta os hooks principais que devem ser usados pelos desenvolvedores
|
|
1539
|
-
* para acessar e manipular o estado de consentimento em seus componentes React.
|
|
1540
|
-
*
|
|
1541
|
-
* @author Luciano Édipo
|
|
1542
|
-
* @since 0.1.0
|
|
1543
|
-
*/
|
|
1544
|
-
|
|
1545
|
-
/**
|
|
1546
|
-
* Hook principal para acessar e manipular o estado de consentimento de cookies LGPD.
|
|
1547
|
-
*
|
|
1548
|
-
* @remarks
|
|
1549
|
-
* Este é o hook mais importante da biblioteca para interagir com o sistema de consentimento.
|
|
1550
|
-
* Ele provê acesso completo ao estado atual do consentimento e às funções para modificar esse estado.
|
|
1551
|
-
*
|
|
1552
|
-
* ### Estado Disponível
|
|
1553
|
-
* - **`consented`**: `boolean` - Indica se o usuário já deu alguma resposta (aceitar/rejeitar)
|
|
1554
|
-
* - **`preferences`**: `CategoryPreferences` - Objeto com estado de cada categoria de cookie
|
|
1555
|
-
* - **`isModalOpen`**: `boolean` - Indica se o modal de preferências está aberto
|
|
1556
|
-
*
|
|
1557
|
-
* ### Ações Disponíveis
|
|
1558
|
-
* - **`acceptAll()`**: Aceita todas as categorias configuradas
|
|
1559
|
-
* - **`rejectAll()`**: Rejeita todas as categorias (exceto necessary)
|
|
1560
|
-
* - **`setPreference(category, enabled)`**: Define uma categoria específica
|
|
1561
|
-
* - **`setPreferences(preferences)`**: Define múltiplas categorias de uma vez
|
|
1562
|
-
* - **`openPreferences()`**: Abre o modal de preferências
|
|
1563
|
-
* - **`closePreferences()`**: Fecha o modal de preferências
|
|
1564
|
-
* - **`resetConsent()`**: Limpa all consentimento (volta ao estado inicial)
|
|
1565
|
-
*
|
|
1566
|
-
* ### Performance e SSR
|
|
1567
|
-
* - O hook é otimizado com `useMemo` interno para evitar re-renders desnecessários
|
|
1568
|
-
* - Compatível com SSR (Next.js, Remix) - estado é hidratado após montagem no cliente
|
|
1569
|
-
* - Estado inicial é sempre `{ consented: false }` no servidor para evitar hydration mismatches
|
|
1570
|
-
*
|
|
1571
|
-
* ### Integração com Scripts
|
|
1572
|
-
* - Use junto com `ConsentScriptLoader` para carregamento condicional de scripts
|
|
1573
|
-
* - Estado `preferences` pode ser usado para ativar/desativar recursos condicionalmente
|
|
1574
|
-
* - Mudanças no consentimento são automaticamente persistidas em cookies
|
|
1575
|
-
*
|
|
1576
|
-
* @returns Um objeto contendo o estado completo e as ações de consentimento
|
|
1577
|
-
*
|
|
1578
|
-
* @throws {Error} Se usado fora do ConsentProvider - verifique se o componente está dentro de `<ConsentProvider>`
|
|
1579
|
-
*
|
|
1580
|
-
* @example Hook básico para verificar consentimento
|
|
1581
|
-
* ```tsx
|
|
1582
|
-
* function MyComponent() {
|
|
1583
|
-
* const { consented, preferences, acceptAll, rejectAll } = useConsent();
|
|
1584
|
-
*
|
|
1585
|
-
* if (!consented) {
|
|
1586
|
-
* return <p>Aguardando decisão do usuário...</p>;
|
|
1587
|
-
* }
|
|
1588
|
-
*
|
|
1589
|
-
* return (
|
|
1590
|
-
* <div>
|
|
1591
|
-
* <p>Analytics: {preferences.analytics ? 'Ativo' : 'Inativo'}</p>
|
|
1592
|
-
* <button onClick={rejectAll}>Rejeitar Todos</button>
|
|
1593
|
-
* </div>
|
|
1594
|
-
* );
|
|
1595
|
-
* }
|
|
1596
|
-
* ```
|
|
1597
|
-
*
|
|
1598
|
-
* @example Controle granular de categorias
|
|
1599
|
-
* ```tsx
|
|
1600
|
-
* function AdvancedSettings() {
|
|
1601
|
-
* const { preferences, setPreference } = useConsent();
|
|
1602
|
-
*
|
|
1603
|
-
* return (
|
|
1604
|
-
* <div>
|
|
1605
|
-
* <label>
|
|
1606
|
-
* <input
|
|
1607
|
-
* type="checkbox"
|
|
1608
|
-
* checked={preferences.marketing}
|
|
1609
|
-
* onChange={(e) => setPreference('marketing', e.target.checked)}
|
|
1610
|
-
* />
|
|
1611
|
-
* Cookies de Marketing
|
|
1612
|
-
* </label>
|
|
1613
|
-
* </div>
|
|
1614
|
-
* );
|
|
1615
|
-
* }
|
|
1616
|
-
* ```
|
|
1617
|
-
*
|
|
1618
|
-
* @example Integração condicional com Google Analytics
|
|
1619
|
-
* ```tsx
|
|
1620
|
-
* function AnalyticsComponent() {
|
|
1621
|
-
* const { consented, preferences } = useConsent();
|
|
1622
|
-
*
|
|
1623
|
-
* React.useEffect(() => {
|
|
1624
|
-
* if (consented && preferences.analytics) {
|
|
1625
|
-
* // Inicializar Google Analytics
|
|
1626
|
-
* gtag('config', 'GA_MEASUREMENT_ID');
|
|
1627
|
-
* gtag('event', 'consent_granted', {
|
|
1628
|
-
* ad_storage: preferences.marketing ? 'granted' : 'denied',
|
|
1629
|
-
* analytics_storage: 'granted'
|
|
1630
|
-
* });
|
|
1631
|
-
* }
|
|
1632
|
-
* }, [consented, preferences]);
|
|
1633
|
-
*
|
|
1634
|
-
* return null; // Componente só para lógica
|
|
1635
|
-
* }
|
|
1636
|
-
* ```
|
|
1637
|
-
*
|
|
1638
|
-
* @example Uso avançado com múltiplas preferências
|
|
1639
|
-
* ```tsx
|
|
1640
|
-
* function BulkPreferencesControl() {
|
|
1641
|
-
* const { setPreferences, preferences, consented } = useConsent();
|
|
1642
|
-
*
|
|
1643
|
-
* const handleSavePreferences = () => {
|
|
1644
|
-
* setPreferences({
|
|
1645
|
-
* necessary: true, // Sempre true
|
|
1646
|
-
* analytics: true,
|
|
1647
|
-
* marketing: false,
|
|
1648
|
-
* functional: true,
|
|
1649
|
-
* performance: false
|
|
1650
|
-
* });
|
|
1651
|
-
* };
|
|
1652
|
-
*
|
|
1653
|
-
* return (
|
|
1654
|
-
* <button onClick={handleSavePreferences} disabled={!consented}>
|
|
1655
|
-
* Salvar Minhas Preferências
|
|
1656
|
-
* </button>
|
|
1657
|
-
* );
|
|
1658
|
-
* }
|
|
1659
|
-
* ```
|
|
1660
|
-
*
|
|
1661
|
-
* @example Componente com estado de carregamento
|
|
1662
|
-
* ```tsx
|
|
1663
|
-
* function ConsentAwareFeature() {
|
|
1664
|
-
* const { consented, preferences } = useConsent();
|
|
1665
|
-
* const canShowFeature = consented && preferences.functional;
|
|
1666
|
-
*
|
|
1667
|
-
* if (!consented) {
|
|
1668
|
-
* return <div>⏳ Aguardando decisão sobre cookies...</div>;
|
|
1669
|
-
* }
|
|
1670
|
-
*
|
|
1671
|
-
* if (!preferences.functional) {
|
|
1672
|
-
* return (
|
|
1673
|
-
* <div>
|
|
1674
|
-
* ❌ Este recurso requer cookies funcionais.
|
|
1675
|
-
* <button onClick={() => window.openPreferencesModal?.()}>
|
|
1676
|
-
* Alterar Preferências
|
|
1677
|
-
* </button>
|
|
1678
|
-
* </div>
|
|
1679
|
-
* );
|
|
1680
|
-
* }
|
|
1681
|
-
*
|
|
1682
|
-
* return <div>✅ Recurso ativo com consentimento!</div>;
|
|
1683
|
-
* }
|
|
1684
|
-
* ```
|
|
1685
|
-
*
|
|
1686
|
-
* @see {@link ConsentProvider} - Provider que deve envolver os componentes
|
|
1687
|
-
* @see {@link ConsentContextValue} - Tipo do valor retornado
|
|
1688
|
-
*
|
|
1689
|
-
* @public
|
|
1690
|
-
* @since 0.1.0
|
|
1691
|
-
*/
|
|
1692
|
-
declare function useConsent(): ConsentContextValue;
|
|
1693
|
-
/**
|
|
1694
|
-
* Hook para acessar os textos personalizáveis da interface de consentimento.
|
|
1695
|
-
*
|
|
1696
|
-
* @remarks
|
|
1697
|
-
* Este hook retorna o objeto completo de textos configurados no `ConsentProvider`.
|
|
1698
|
-
* Os textos incluem tanto os valores padrão em português quanto as customizações
|
|
1699
|
-
* fornecidas via prop `texts`. É útil para criar componentes personalizados
|
|
1700
|
-
* que mantêm consistência com a configuração de textos do projeto.
|
|
1701
|
-
*
|
|
1702
|
-
* ### Textos Básicos Incluídos
|
|
1703
|
-
* - `bannerMessage`: Mensagem principal do banner
|
|
1704
|
-
* - `acceptAll`, `declineAll`, `preferences`: Textos dos botões
|
|
1705
|
-
* - `modalTitle`, `modalIntro`: Cabeçalho do modal
|
|
1706
|
-
* - `save`, `close`: Ações do modal
|
|
1707
|
-
*
|
|
1708
|
-
* ### Textos de Conformidade LGPD/ANPD (Opcionais)
|
|
1709
|
-
* - `controllerInfo`: Informações do controlador de dados
|
|
1710
|
-
* - `dataTypes`: Tipos de dados coletados
|
|
1711
|
-
* - `thirdPartySharing`: Compartilhamento com terceiros
|
|
1712
|
-
* - `userRights`: Direitos do titular dos dados
|
|
1713
|
-
* - `contactInfo`: Contato do DPO (Data Protection Officer)
|
|
1714
|
-
*
|
|
1715
|
-
* ### Personalização e Internacionalização
|
|
1716
|
-
* - Padrão em português brasileiro
|
|
1717
|
-
* - Suporte completo a customização via `ConsentProvider.texts`
|
|
1718
|
-
* - Tipagem TypeScript completa para IntelliSense
|
|
1719
|
-
* - Fallback automático para textos padrão quando não customizados
|
|
1720
|
-
*
|
|
1721
|
-
* @returns O objeto completo de textos da interface, mesclando padrões com customizações
|
|
1722
|
-
*
|
|
1723
|
-
* @throws {Error} Se usado fora do ConsentProvider - verifique se está dentro de `<ConsentProvider>`
|
|
1724
|
-
*
|
|
1725
|
-
* @example Usar textos em componente customizado
|
|
1726
|
-
* ```tsx
|
|
1727
|
-
* function CustomBanner() {
|
|
1728
|
-
* const texts = useConsentTexts();
|
|
1729
|
-
*
|
|
1730
|
-
* return (
|
|
1731
|
-
* <div className="custom-banner">
|
|
1732
|
-
* <p>{texts.bannerMessage}</p>
|
|
1733
|
-
* <button>{texts.acceptAll}</button>
|
|
1734
|
-
* <button>{texts.declineAll}</button>
|
|
1735
|
-
* </div>
|
|
1736
|
-
* );
|
|
1737
|
-
* }
|
|
1738
|
-
* ```
|
|
1739
|
-
*
|
|
1740
|
-
* @example Acessar textos ANPD específicos
|
|
1741
|
-
* ```tsx
|
|
1742
|
-
* function ComplianceInfo() {
|
|
1743
|
-
* const texts = useConsentTexts();
|
|
1744
|
-
*
|
|
1745
|
-
* return (
|
|
1746
|
-
* <div>
|
|
1747
|
-
* {texts.controllerInfo && <p>{texts.controllerInfo}</p>}
|
|
1748
|
-
* {texts.userRights && <p>{texts.userRights}</p>}
|
|
1749
|
-
* {texts.contactInfo && <p>{texts.contactInfo}</p>}
|
|
1750
|
-
* </div>
|
|
1751
|
-
* );
|
|
1752
|
-
* }
|
|
1753
|
-
* ```
|
|
1754
|
-
*
|
|
1755
|
-
* @example Modal customizado com textos consistentes
|
|
1756
|
-
* ```tsx
|
|
1757
|
-
* function CustomPreferencesModal() {
|
|
1758
|
-
* const texts = useConsentTexts();
|
|
1759
|
-
* const { preferences, setPreference, closePreferences } = useConsent();
|
|
1760
|
-
*
|
|
1761
|
-
* return (
|
|
1762
|
-
* <div className="custom-modal">
|
|
1763
|
-
* <h2>{texts.preferencesTitle || texts.modalTitle}</h2>
|
|
1764
|
-
* <p>{texts.preferencesDescription || texts.modalIntro}</p>
|
|
1765
|
-
*
|
|
1766
|
-
* <label>
|
|
1767
|
-
* <input
|
|
1768
|
-
* type="checkbox"
|
|
1769
|
-
* checked={preferences.analytics}
|
|
1770
|
-
* onChange={(e) => setPreference('analytics', e.target.checked)}
|
|
1771
|
-
* />
|
|
1772
|
-
* Cookies Analíticos
|
|
1773
|
-
* </label>
|
|
1774
|
-
*
|
|
1775
|
-
* <div className="modal-actions">
|
|
1776
|
-
* <button onClick={closePreferences}>{texts.close}</button>
|
|
1777
|
-
* <button>{texts.save}</button>
|
|
1778
|
-
* </div>
|
|
1779
|
-
* </div>
|
|
1780
|
-
* );
|
|
1781
|
-
* }
|
|
1782
|
-
* ```
|
|
1783
|
-
*
|
|
1784
|
-
* @example Componente multilíngue com fallbacks
|
|
1785
|
-
* ```tsx
|
|
1786
|
-
* function MultiLanguageBanner() {
|
|
1787
|
-
* const texts = useConsentTexts();
|
|
1788
|
-
* const [language, setLanguage] = useState('pt');
|
|
1789
|
-
*
|
|
1790
|
-
* // Usar textos customizados baseado no idioma
|
|
1791
|
-
* const message = language === 'en'
|
|
1792
|
-
* ? 'We use cookies to improve your experience'
|
|
1793
|
-
* : texts.bannerMessage;
|
|
1794
|
-
*
|
|
1795
|
-
* const acceptText = language === 'en' ? 'Accept All' : texts.acceptAll;
|
|
1796
|
-
*
|
|
1797
|
-
* return (
|
|
1798
|
-
* <div>
|
|
1799
|
-
* <select onChange={(e) => setLanguage(e.target.value)}>
|
|
1800
|
-
* <option value="pt">Português</option>
|
|
1801
|
-
* <option value="en">English</option>
|
|
1802
|
-
* </select>
|
|
1803
|
-
* <p>{message}</p>
|
|
1804
|
-
* <button>{acceptText}</button>
|
|
1805
|
-
* </div>
|
|
1806
|
-
* );
|
|
1807
|
-
* }
|
|
1808
|
-
* ```
|
|
1809
|
-
*
|
|
1810
|
-
* @see {@link ConsentTexts} - Interface completa dos textos
|
|
1811
|
-
* @see {@link ConsentProvider} - Para configurar textos personalizados
|
|
1812
|
-
*
|
|
1813
|
-
* @public
|
|
1814
|
-
* @since 0.1.0
|
|
1815
|
-
*/
|
|
1816
|
-
declare function useConsentTexts(): ConsentTexts;
|
|
1817
|
-
/**
|
|
1818
|
-
* Hook para verificar se a hidratação do estado de consentimento foi concluída.
|
|
1819
|
-
*
|
|
1820
|
-
* @remarks
|
|
1821
|
-
* Em aplicações com Server-Side Rendering (SSR) como Next.js, o estado inicial
|
|
1822
|
-
* é sempre `false` no servidor para evitar diferenças de hidratação. Este hook
|
|
1823
|
-
* permite saber quando a biblioteca já leu o cookie do navegador e atualizou
|
|
1824
|
-
* o estado, evitando o "flash" do banner ou comportamentos inconsistentes.
|
|
1825
|
-
*
|
|
1826
|
-
* ### Casos de Uso Principais
|
|
1827
|
-
* - **Mostrar loading states** enquanto carrega o estado real do cookie
|
|
1828
|
-
* - **Evitar flash of unstyled content (FOUC)** com banners aparecendo/sumindo
|
|
1829
|
-
* - **Sincronizar componentes** que dependem do estado de consentimento
|
|
1830
|
-
* - **Inicializar scripts condicionalmente** apenas após hidratação
|
|
1831
|
-
*
|
|
1832
|
-
* ### Funcionamento Técnico
|
|
1833
|
-
* - No servidor (SSR): sempre retorna `false`
|
|
1834
|
-
* - No cliente: retorna `false` até o `useEffect` ler o cookie
|
|
1835
|
-
* - Após leitura do cookie: retorna `true` permanentemente
|
|
1836
|
-
* - Performance: otimizado para evitar re-renders desnecessários
|
|
1837
|
-
*
|
|
1838
|
-
* ### Frameworks Suportados
|
|
1839
|
-
* - **Next.js**: App Router e Pages Router
|
|
1840
|
-
* - **Remix**: SSR completo
|
|
1841
|
-
* - **Gatsby**: Static Generation + hidratação
|
|
1842
|
-
* - **Vite SSR**: Server-side rendering
|
|
1843
|
-
* - **Create React App**: Client-side only (sempre `true`)
|
|
1844
|
-
*
|
|
1845
|
-
* @returns `true` se a hidratação do cookie foi concluída, `false` durante SSR ou antes da hidratação
|
|
1846
|
-
*
|
|
1847
|
-
* @example Evitar flash do banner
|
|
1848
|
-
* ```tsx
|
|
1849
|
-
* function App() {
|
|
1850
|
-
* const { consented } = useConsent();
|
|
1851
|
-
* const isHydrated = useConsentHydration();
|
|
1852
|
-
*
|
|
1853
|
-
* // Não mostrar nada até hidratar
|
|
1854
|
-
* if (!isHydrated) {
|
|
1855
|
-
* return <div>Carregando...</div>;
|
|
1856
|
-
* }
|
|
1857
|
-
*
|
|
1858
|
-
* return (
|
|
1859
|
-
* <div>
|
|
1860
|
-
* {!consented && <span>Banner aparecerá agora</span>}
|
|
1861
|
-
* </div>
|
|
1862
|
-
* );
|
|
1863
|
-
* }
|
|
1864
|
-
* ```
|
|
1865
|
-
*
|
|
1866
|
-
* @example Controlar carregamento de scripts
|
|
1867
|
-
* ```tsx
|
|
1868
|
-
* function Analytics() {
|
|
1869
|
-
* const { preferences } = useConsent();
|
|
1870
|
-
* const isHydrated = useConsentHydration();
|
|
1871
|
-
*
|
|
1872
|
-
* React.useEffect(() => {
|
|
1873
|
-
* if (isHydrated && preferences.analytics) {
|
|
1874
|
-
* // Só carrega analytics após hidratação
|
|
1875
|
-
* loadGoogleAnalytics();
|
|
1876
|
-
* }
|
|
1877
|
-
* }, [isHydrated, preferences.analytics]);
|
|
1878
|
-
*
|
|
1879
|
-
* return null;
|
|
1880
|
-
* }
|
|
1881
|
-
* ```
|
|
1882
|
-
*
|
|
1883
|
-
* @example Componente com loading state elegante
|
|
1884
|
-
* ```tsx
|
|
1885
|
-
* function ConsentDependentFeature() {
|
|
1886
|
-
* const { consented, preferences } = useConsent();
|
|
1887
|
-
* const isHydrated = useConsentHydration();
|
|
1888
|
-
*
|
|
1889
|
-
* // Estados de loading
|
|
1890
|
-
* if (!isHydrated) {
|
|
1891
|
-
* return <div className="shimmer">Carregando preferências...</div>;
|
|
1892
|
-
* }
|
|
1893
|
-
*
|
|
1894
|
-
* // Estado não consentido
|
|
1895
|
-
* if (!consented) {
|
|
1896
|
-
* return (
|
|
1897
|
-
* <div className="consent-required">
|
|
1898
|
-
* <p>Configure suas preferências de cookies para usar este recurso.</p>
|
|
1899
|
-
* </div>
|
|
1900
|
-
* );
|
|
1901
|
-
* }
|
|
1902
|
-
*
|
|
1903
|
-
* // Estado com consentimento específico
|
|
1904
|
-
* if (!preferences.functional) {
|
|
1905
|
-
* return (
|
|
1906
|
-
* <div className="consent-partial">
|
|
1907
|
-
* <p>Este recurso requer cookies funcionais.</p>
|
|
1908
|
-
* <button onClick={() => window.openPreferencesModal?.()}>
|
|
1909
|
-
* Alterar Preferências
|
|
1910
|
-
* </button>
|
|
1911
|
-
* </div>
|
|
1912
|
-
* );
|
|
1913
|
-
* }
|
|
1914
|
-
*
|
|
1915
|
-
* return <div>🚀 Recurso funcionando com consentimento!</div>;
|
|
1916
|
-
* }
|
|
1917
|
-
* ```
|
|
1918
|
-
*
|
|
1919
|
-
* @example Next.js - Prevenção de hydration mismatch
|
|
1920
|
-
* ```typescript
|
|
1921
|
-
* // pages/_app.tsx
|
|
1922
|
-
* function MyApp(props: any) {
|
|
1923
|
-
* const isHydrated = useConsentHydration();
|
|
1924
|
-
*
|
|
1925
|
-
* // Só renderiza componentes de consentimento após hidratação
|
|
1926
|
-
* // para evitar diferenças entre servidor e cliente
|
|
1927
|
-
* return (
|
|
1928
|
-
* // ConsentProvider envolve tudo
|
|
1929
|
-
* // Component com props normalmente
|
|
1930
|
-
* // CookieBanner só se isHydrated for true
|
|
1931
|
-
* // FloatingPreferencesButton só se isHydrated for true
|
|
1932
|
-
* );
|
|
1933
|
-
* }
|
|
1934
|
-
* ```
|
|
1935
|
-
*
|
|
1936
|
-
* @example Hook customizado para features condicionais
|
|
1937
|
-
* ```tsx
|
|
1938
|
-
* function useConsentAwareFeature(requiredCategory: string) {
|
|
1939
|
-
* const { consented, preferences } = useConsent();
|
|
1940
|
-
* const isHydrated = useConsentHydration();
|
|
1941
|
-
*
|
|
1942
|
-
* const isEnabled = React.useMemo(() => {
|
|
1943
|
-
* if (!isHydrated) return false; // Loading
|
|
1944
|
-
* if (!consented) return false; // No consent
|
|
1945
|
-
* return preferences[requiredCategory] === true;
|
|
1946
|
-
* }, [isHydrated, consented, preferences, requiredCategory]);
|
|
1947
|
-
*
|
|
1948
|
-
* return {
|
|
1949
|
-
* isEnabled,
|
|
1950
|
-
* isLoading: !isHydrated,
|
|
1951
|
-
* hasConsented: consented,
|
|
1952
|
-
* preferences
|
|
1953
|
-
* };
|
|
1954
|
-
* }
|
|
1955
|
-
*
|
|
1956
|
-
* // Uso do hook customizado
|
|
1957
|
-
* function MyFeature() {
|
|
1958
|
-
* const { isEnabled, isLoading } = useConsentAwareFeature('analytics');
|
|
1959
|
-
*
|
|
1960
|
-
* if (isLoading) return <Skeleton />;
|
|
1961
|
-
* if (!isEnabled) return <ConsentRequired />;
|
|
1962
|
-
*
|
|
1963
|
-
* return <AnalyticsChart />;
|
|
1964
|
-
* }
|
|
1965
|
-
* ```
|
|
1966
|
-
*
|
|
1967
|
-
* @see {@link ConsentProvider} - Para configuração SSR
|
|
1968
|
-
*
|
|
1969
|
-
* @public
|
|
1970
|
-
* @since 0.1.0
|
|
1971
|
-
*/
|
|
1972
|
-
declare function useConsentHydration(): boolean;
|
|
1973
|
-
/**
|
|
1974
|
-
* @function
|
|
1975
|
-
* @category Hooks
|
|
1976
|
-
* @since 0.3.1
|
|
1977
|
-
* Hook para abrir o modal de preferências programaticamente.
|
|
1978
|
-
*
|
|
1979
|
-
* @returns Função para abrir o modal de preferências.
|
|
1980
|
-
*
|
|
1981
|
-
* @remarks
|
|
1982
|
-
* Este hook retorna uma função que pode ser usada para abrir o modal de preferências
|
|
1983
|
-
* de qualquer lugar dentro do contexto do ConsentProvider. É útil para criar botões
|
|
1984
|
-
* customizados ou trigger o modal baseado em eventos específicos.
|
|
1985
|
-
*
|
|
1986
|
-
* @throws {Error} Se usado fora do ConsentProvider
|
|
1987
|
-
*
|
|
1988
|
-
* @example
|
|
1989
|
-
* ```tsx
|
|
1990
|
-
* function CustomButton() {
|
|
1991
|
-
* const openPreferences = useOpenPreferencesModal();
|
|
1992
|
-
*
|
|
1993
|
-
* return (
|
|
1994
|
-
* <button onClick={openPreferences}>
|
|
1995
|
-
* Configurar Cookies
|
|
1996
|
-
* </button>
|
|
1997
|
-
* );
|
|
1998
|
-
* }
|
|
1999
|
-
* ```
|
|
2000
|
-
*/
|
|
2001
|
-
declare function useOpenPreferencesModal(): () => void;
|
|
2002
|
-
/**
|
|
2003
|
-
* @function
|
|
2004
|
-
* @category Utils
|
|
2005
|
-
* @since 0.3.1
|
|
2006
|
-
* Função global para abrir o modal de preferências de fora do contexto React.
|
|
2007
|
-
*
|
|
2008
|
-
* @remarks
|
|
2009
|
-
* Esta função permite abrir o modal de preferências de código JavaScript puro,
|
|
2010
|
-
* sem precisar estar dentro do contexto React. É útil para integração com
|
|
2011
|
-
* código legado ou bibliotecas de terceiros.
|
|
2012
|
-
*
|
|
2013
|
-
* A função é automaticamente registrada pelo ConsentProvider e limpa quando
|
|
2014
|
-
* o provider é desmontado.
|
|
2015
|
-
*
|
|
2016
|
-
* @example
|
|
2017
|
-
* ```javascript
|
|
2018
|
-
* // Em código JavaScript puro
|
|
2019
|
-
* window.openPreferencesModal?.();
|
|
2020
|
-
*
|
|
2021
|
-
* // Ou importando diretamente
|
|
2022
|
-
* import { openPreferencesModal } from 'react-lgpd-consent';
|
|
2023
|
-
* openPreferencesModal();
|
|
2024
|
-
* ```
|
|
2025
|
-
*/
|
|
2026
|
-
declare function openPreferencesModal(): void;
|
|
2027
|
-
|
|
2028
|
-
/**
|
|
2029
|
-
* @interface CategoriesContextValue
|
|
2030
|
-
* O valor fornecido pelo `CategoriesContext`, contendo informações sobre as categorias de cookies ativas no projeto.
|
|
2031
|
-
*/
|
|
2032
|
-
interface CategoriesContextValue {
|
|
2033
|
-
/** A configuração final das categorias, incluindo padrões aplicados. */
|
|
2034
|
-
config: ProjectCategoriesConfig;
|
|
2035
|
-
/** Análise e orientações para desenvolvedores, incluindo avisos e sugestões. */
|
|
2036
|
-
guidance: DeveloperGuidance;
|
|
2037
|
-
/** Um array de categorias que requerem um toggle na UI de preferências (não essenciais). */
|
|
2038
|
-
toggleableCategories: DeveloperGuidance['activeCategoriesInfo'];
|
|
2039
|
-
/** Um array contendo todas as categorias ativas no projeto (essenciais e não essenciais). */
|
|
2040
|
-
allCategories: DeveloperGuidance['activeCategoriesInfo'];
|
|
2041
|
-
}
|
|
2042
|
-
/**
|
|
2043
|
-
* @hook
|
|
2044
|
-
* @category Hooks
|
|
2045
|
-
* @since 0.2.2
|
|
2046
|
-
* Hook para acessar informações sobre as categorias de cookies ativas no projeto.
|
|
2047
|
-
*
|
|
2048
|
-
* @remarks
|
|
2049
|
-
* Este hook deve ser usado dentro do `ConsentProvider` (que internamente renderiza o `CategoriesProvider`).
|
|
2050
|
-
* Ele é útil para construir componentes de UI customizados que precisam se adaptar dinamicamente às categorias configuradas.
|
|
2051
|
-
*
|
|
2052
|
-
* @returns {CategoriesContextValue} Um objeto contendo a configuração, orientações e listas de categorias.
|
|
2053
|
-
*
|
|
2054
|
-
* @throws {Error} Se usado fora do `CategoriesProvider`.
|
|
2055
|
-
*/
|
|
2056
|
-
declare function useCategories(): CategoriesContextValue;
|
|
2057
|
-
/**
|
|
2058
|
-
* @hook
|
|
2059
|
-
* @category Hooks
|
|
2060
|
-
* @since 0.2.2
|
|
2061
|
-
* Hook de conveniência para verificar o status de uma categoria de cookie específica.
|
|
2062
|
-
*
|
|
2063
|
-
* @param {string} categoryId O ID da categoria a ser verificada (ex: 'analytics', 'necessary').
|
|
2064
|
-
* @returns {object} Um objeto com o status da categoria:
|
|
2065
|
-
* - `isActive`: `true` se a categoria está configurada e ativa no projeto.
|
|
2066
|
-
* - `isEssential`: `true` se a categoria é essencial (não pode ser desativada pelo usuário).
|
|
2067
|
-
* - `needsToggle`: `true` se a categoria requer um controle (switch) na UI de preferências.
|
|
2068
|
-
* - `name`: O nome amigável da categoria.
|
|
2069
|
-
* - `description`: A descrição da categoria.
|
|
2070
|
-
* @example
|
|
2071
|
-
* ```tsx
|
|
2072
|
-
* const analyticsStatus = useCategoryStatus('analytics')
|
|
2073
|
-
* if (analyticsStatus.isActive && analyticsStatus.needsToggle) {
|
|
2074
|
-
* // Renderizar switch para analytics
|
|
2075
|
-
* }
|
|
2076
|
-
* ```
|
|
2077
|
-
*/
|
|
2078
|
-
declare function useCategoryStatus(categoryId: string): {
|
|
2079
|
-
isActive: boolean;
|
|
2080
|
-
isEssential: boolean;
|
|
2081
|
-
needsToggle: boolean;
|
|
2082
|
-
name: string | undefined;
|
|
2083
|
-
description: string | undefined;
|
|
2084
|
-
};
|
|
2085
|
-
|
|
2086
|
-
/**
|
|
2087
|
-
* ConsentGate - renderiza children apenas se houver consentimento para a categoria.
|
|
2088
|
-
*
|
|
2089
|
-
* @remarks
|
|
2090
|
-
* Não usa React.memo pois o estado de preferências muda dinamicamente
|
|
2091
|
-
* e o componente precisa re-renderizar quando as preferências mudam.
|
|
2092
|
-
* A lógica é leve o suficiente para não justificar memoização.
|
|
2093
|
-
*/
|
|
2094
|
-
declare function ConsentGate(props: Readonly<{
|
|
2095
|
-
category: string;
|
|
2096
|
-
children: React$1.ReactNode;
|
|
2097
|
-
}>): react_jsx_runtime.JSX.Element | null;
|
|
2098
|
-
|
|
2099
|
-
/** @module src/utils/scriptLoader */
|
|
2100
|
-
/**
|
|
2101
|
-
* @category Utils
|
|
2102
|
-
* @since 0.1.0
|
|
2103
|
-
* Utilitários para carregamento dinâmico e seguro de scripts externos no DOM.
|
|
2104
|
-
*
|
|
2105
|
-
* Fornece funções para carregar scripts de terceiros de forma condicional ao consentimento LGPD,
|
|
2106
|
-
* garantindo compatibilidade SSR e verificações de permissões por categoria.
|
|
2107
|
-
*/
|
|
2108
|
-
/**
|
|
2109
|
-
* @function
|
|
2110
|
-
* @category Utils
|
|
2111
|
-
* @since 0.1.0
|
|
2112
|
-
* Carrega dinamicamente um script externo no DOM.
|
|
2113
|
-
*
|
|
2114
|
-
* @remarks
|
|
2115
|
-
* Esta função é utilizada internamente pela biblioteca para carregar scripts de integração
|
|
2116
|
-
* após o consentimento do usuário. Ela garante que o script só seja inserido na página
|
|
2117
|
-
* se o consentimento for dado e o contexto estiver disponível.
|
|
2118
|
-
*
|
|
2119
|
-
* @param {string} id Um identificador único para o elemento `<script>` a ser criado.
|
|
2120
|
-
* @param {string} src A URL do script externo a ser carregado.
|
|
2121
|
-
* @param {string | null} [category=null] A categoria de consentimento exigida para o script. Suporta tanto categorias predefinidas quanto customizadas. Se o consentimento para esta categoria não for dado, o script não será carregado.
|
|
2122
|
-
* @param {Record<string, string>} [attrs={}] Atributos adicionais a serem aplicados ao elemento `<script>` (ex: `{ async: 'true' }`).
|
|
2123
|
-
* @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.
|
|
2124
|
-
* @example
|
|
2125
|
-
* ```ts
|
|
2126
|
-
* // Carregar um script de analytics após o consentimento
|
|
2127
|
-
* loadScript('my-analytics-script', 'https://example.com/analytics.js', 'analytics')
|
|
2128
|
-
* .then(() => console.log('Script de analytics carregado!'))
|
|
2129
|
-
* .catch(error => console.error('Erro ao carregar script:', error))
|
|
2130
|
-
* ```
|
|
2131
|
-
*/
|
|
2132
|
-
declare function loadScript(id: string, src: string, category?: string | null, attrs?: Record<string, string>): Promise<void>;
|
|
2133
|
-
|
|
2134
|
-
/**
|
|
2135
|
-
* Utilitários para descoberta e categorização de cookies em tempo de execução (experimental).
|
|
2136
|
-
*
|
|
2137
|
-
* Fornece funções para detectar cookies presentes no navegador, identificar o cookie de consentimento
|
|
2138
|
-
* e atribuir cookies descobertos a categorias LGPD usando heurísticas baseadas em padrões conhecidos.
|
|
2139
|
-
*
|
|
2140
|
-
* @category Utils
|
|
2141
|
-
* @since 0.4.1
|
|
2142
|
-
* @remarks Funcionalidades experimentais para auxiliar no mapeamento de cookies em conformidade com LGPD.
|
|
2143
|
-
* Recomenda-se uso em desenvolvimento para inspeção manual e merge com catálogo existente.
|
|
2144
|
-
*/
|
|
2145
|
-
|
|
2146
|
-
/**
|
|
2147
|
-
* Descobre cookies em tempo de execução no navegador (experimental).
|
|
2148
|
-
*
|
|
2149
|
-
* - Lê `document.cookie` com segurança (SSR-safe)
|
|
2150
|
-
* - Retorna lista de cookies detectados (apenas nomes)
|
|
2151
|
-
* - Salva em `globalThis.__LGPD_DISCOVERED_COOKIES__` para inspeção/manual merge
|
|
2152
|
-
*
|
|
2153
|
-
* @category Utils
|
|
2154
|
-
* @since 0.4.1
|
|
2155
|
-
*/
|
|
2156
|
-
declare function discoverRuntimeCookies(): CookieDescriptor[];
|
|
2157
|
-
/**
|
|
2158
|
-
* Tenta detectar o nome do cookie de consentimento pela estrutura JSON armazenada.
|
|
2159
|
-
* Retorna o nome se for encontrado, caso contrário `null`.
|
|
2160
|
-
* @category Utils
|
|
2161
|
-
* @since 0.4.1
|
|
2162
|
-
*/
|
|
2163
|
-
declare function detectConsentCookieName(): string | null;
|
|
2164
|
-
/**
|
|
2165
|
-
* Heurística simples para atribuir cookies descobertos a categorias LGPD (experimental).
|
|
2166
|
-
*
|
|
2167
|
-
* - Usa padrões conhecidos por categoria
|
|
2168
|
-
* - Ignora `cookieConsent` (já tratado como necessary)
|
|
2169
|
-
* - Pode opcionalmente registrar overrides de catálogo por categoria
|
|
2170
|
-
*
|
|
2171
|
-
* @param discovered Lista de cookies descobertos (opcional: usa global se ausente)
|
|
2172
|
-
* @param registerOverrides Se `true`, registra em `setCookieCatalogOverrides`
|
|
2173
|
-
* @returns Mapa categoria -> descritores atribuídos
|
|
2174
|
-
* @category Utils
|
|
2175
|
-
* @since 0.4.1
|
|
2176
|
-
*/
|
|
2177
|
-
declare function categorizeDiscoveredCookies(discovered?: CookieDescriptor[], registerOverrides?: boolean): Record<Category, CookieDescriptor[]>;
|
|
2178
|
-
|
|
2179
|
-
/** @module src/utils/theme */
|
|
2180
|
-
/**
|
|
2181
|
-
* @category Utils
|
|
2182
|
-
* @since 0.1.0
|
|
2183
|
-
* Utilitários para criação e gerenciamento de temas Material-UI para componentes de consentimento LGPD.
|
|
2184
|
-
*
|
|
2185
|
-
* Fornece um tema padrão consistente e acessível, com opções de personalização.
|
|
2186
|
-
*/
|
|
2187
|
-
|
|
2188
|
-
/**
|
|
2189
|
-
* @function
|
|
2190
|
-
* @category Utils
|
|
2191
|
-
* @since 0.1.0
|
|
2192
|
-
* Tema padrão utilizado pelos componentes de consentimento da biblioteca.
|
|
2193
|
-
*
|
|
2194
|
-
* Inclui configurações de cores, tipografia e estilos para componentes Material-UI,
|
|
2195
|
-
* garantindo aparência consistente e acessível conforme guidelines LGPD.
|
|
2196
|
-
*
|
|
2197
|
-
* @returns {Theme} Instância do tema Material-UI configurado.
|
|
2198
|
-
*
|
|
2199
|
-
* @example
|
|
2200
|
-
* ```typescript
|
|
2201
|
-
* import { createDefaultConsentTheme } from 'react-lgpd-consent'
|
|
2202
|
-
*
|
|
2203
|
-
* const theme = createDefaultConsentTheme()
|
|
2204
|
-
* // Use com ThemeProvider
|
|
2205
|
-
* ```
|
|
2206
|
-
*
|
|
2207
|
-
* @remarks
|
|
2208
|
-
* Pode ser sobrescrito via ThemeProvider externo se necessário.
|
|
2209
|
-
*/
|
|
2210
|
-
declare function createDefaultConsentTheme(): Theme;
|
|
2211
|
-
/**
|
|
2212
|
-
* Compatibilidade: getter para o tema padrão.
|
|
2213
|
-
*
|
|
2214
|
-
* @deprecated Use `createDefaultConsentTheme()` em vez de importar um tema criado no escopo do módulo.
|
|
2215
|
-
* Importar um tema já instanciado pode causar side-effects em SSR e conflitos de contexto.
|
|
2216
|
-
* Esta função retorna uma nova instância do tema quando chamada.
|
|
2217
|
-
*
|
|
2218
|
-
* @returns {Theme} Instância do tema Material-UI configurado.
|
|
2219
|
-
*
|
|
2220
|
-
* @example
|
|
2221
|
-
* ```typescript
|
|
2222
|
-
* import { defaultConsentTheme } from 'react-lgpd-consent'
|
|
2223
|
-
*
|
|
2224
|
-
* const theme = defaultConsentTheme()
|
|
2225
|
-
* // Deprecated, use createDefaultConsentTheme instead
|
|
2226
|
-
* ```
|
|
2227
|
-
*/
|
|
2228
|
-
declare const defaultConsentTheme: () => Theme;
|
|
2229
|
-
|
|
2230
|
-
/**
|
|
2231
|
-
* @fileoverview
|
|
2232
|
-
* Integrações nativas de scripts (GA, GTM, Facebook Pixel, Hotjar, Mixpanel, Clarity, Intercom, Zendesk, UserWay)
|
|
2233
|
-
* com categorias LGPD padrão, cookies típicos e pontos de extensão para URLs.
|
|
2234
|
-
*
|
|
2235
|
-
* Princípios:
|
|
2236
|
-
* - Cada integração define uma categoria padrão (mais aderente ao uso no mercado)
|
|
2237
|
-
* - Cada cookie típico aparece em uma única categoria por padrão
|
|
2238
|
-
* - URLs possuem valores default atualizados e podem ser sobrescritos via `scriptUrl`
|
|
2239
|
-
* - SSR-safe: toda execução que toca `window` é protegida
|
|
2240
|
-
*/
|
|
2241
|
-
/**
|
|
2242
|
-
* Integração de script de terceiros condicionada a consentimento.
|
|
2243
|
-
*
|
|
2244
|
-
* @category Utils
|
|
2245
|
-
* @since 0.2.0
|
|
2246
|
-
*
|
|
2247
|
-
* @remarks
|
|
2248
|
-
* **Breaking Change em v0.4.1**: O campo `category` mudou de `Category` para `string`
|
|
2249
|
-
* para suportar categorias customizadas. Código existente usando strings literais
|
|
2250
|
-
* continua funcionando sem alterações.
|
|
2251
|
-
*
|
|
2252
|
-
* @example
|
|
2253
|
-
* ```typescript
|
|
2254
|
-
* const integration: ScriptIntegration = {
|
|
2255
|
-
* id: 'my-script',
|
|
2256
|
-
* category: 'analytics',
|
|
2257
|
-
* src: 'https://example.com/script.js',
|
|
2258
|
-
* cookies: ['_example'],
|
|
2259
|
-
* init: () => console.log('Script initialized')
|
|
2260
|
-
* }
|
|
2261
|
-
* ```
|
|
2262
|
-
*/
|
|
2263
|
-
interface ScriptIntegration {
|
|
2264
|
-
/** Identificador único da integração */
|
|
2265
|
-
id: string;
|
|
2266
|
-
/**
|
|
2267
|
-
* Categoria LGPD à qual o script pertence.
|
|
2268
|
-
* Suporta tanto categorias predefinidas quanto customizadas.
|
|
2269
|
-
*/
|
|
2270
|
-
category: string;
|
|
2271
|
-
/** Nome legível da integração (opcional) */
|
|
2272
|
-
name?: string;
|
|
2273
|
-
/** URL do script a ser carregado */
|
|
2274
|
-
src: string;
|
|
2275
|
-
/** Se o script deve ser carregado de forma assíncrona */
|
|
2276
|
-
async?: boolean;
|
|
2277
|
-
/** Se o script deve ser deferido */
|
|
2278
|
-
defer?: boolean;
|
|
2279
|
-
/** Configuração específica da integração */
|
|
2280
|
-
config?: Record<string, unknown>;
|
|
2281
|
-
/** Função de inicialização executada após carregamento do script */
|
|
2282
|
-
init?: () => void;
|
|
2283
|
-
/** Atributos HTML adicionais para a tag script */
|
|
2284
|
-
attrs?: Record<string, string>;
|
|
2285
|
-
/** Lista de cookies que o script pode definir */
|
|
2286
|
-
cookies?: string[];
|
|
2287
|
-
/** Informações detalhadas dos cookies (nome, finalidade, duração, fornecedor) */
|
|
2288
|
-
cookiesInfo?: Array<{
|
|
2289
|
-
name: string;
|
|
2290
|
-
purpose: string;
|
|
2291
|
-
duration: string;
|
|
2292
|
-
provider: string;
|
|
2293
|
-
}>;
|
|
2294
|
-
}
|
|
2295
|
-
/**
|
|
2296
|
-
* Configuração para integração do Google Analytics (GA4).
|
|
2297
|
-
*
|
|
2298
|
-
* @category Utils
|
|
2299
|
-
* @since 0.2.0
|
|
2300
|
-
*
|
|
2301
|
-
* @example
|
|
2302
|
-
* ```typescript
|
|
2303
|
-
* const config: GoogleAnalyticsConfig = {
|
|
2304
|
-
* measurementId: 'G-XXXXXXXXXX',
|
|
2305
|
-
* config: { anonymize_ip: true }
|
|
2306
|
-
* }
|
|
2307
|
-
* ```
|
|
2308
|
-
*/
|
|
2309
|
-
interface GoogleAnalyticsConfig {
|
|
2310
|
-
/** ID de medição do GA4 (formato: G-XXXXXXXXXX) */
|
|
2311
|
-
measurementId: string;
|
|
2312
|
-
/** Configurações adicionais para o gtag */
|
|
2313
|
-
config?: Record<string, unknown>;
|
|
2314
|
-
/** URL do script GA4. Se omitido usa o padrão oficial. */
|
|
2315
|
-
scriptUrl?: string;
|
|
2316
|
-
}
|
|
2317
|
-
/**
|
|
2318
|
-
* Configuração para integração do Google Tag Manager (GTM).
|
|
2319
|
-
*
|
|
2320
|
-
* @category Utils
|
|
2321
|
-
* @since 0.2.0
|
|
2322
|
-
*
|
|
2323
|
-
* @example
|
|
2324
|
-
* ```typescript
|
|
2325
|
-
* const config: GoogleTagManagerConfig = {
|
|
2326
|
-
* containerId: 'GTM-XXXXXXX',
|
|
2327
|
-
* dataLayerName: 'customDataLayer'
|
|
2328
|
-
* }
|
|
2329
|
-
* ```
|
|
2330
|
-
*/
|
|
2331
|
-
interface GoogleTagManagerConfig {
|
|
2332
|
-
/** ID do container GTM (formato: GTM-XXXXXXX) */
|
|
2333
|
-
containerId: string;
|
|
2334
|
-
/** Nome customizado para o dataLayer. Padrão: 'dataLayer' */
|
|
2335
|
-
dataLayerName?: string;
|
|
2336
|
-
/** URL do script GTM. Se omitido usa o padrão oficial. */
|
|
2337
|
-
scriptUrl?: string;
|
|
2338
|
-
}
|
|
2339
|
-
/**
|
|
2340
|
-
* Configuração para integração do UserWay (Acessibilidade).
|
|
2341
|
-
*
|
|
2342
|
-
* @category Utils
|
|
2343
|
-
* @since 0.2.0
|
|
2344
|
-
*
|
|
2345
|
-
* @example
|
|
2346
|
-
* ```typescript
|
|
2347
|
-
* const config: UserWayConfig = {
|
|
2348
|
-
* accountId: 'XXXXXXXXXX'
|
|
2349
|
-
* }
|
|
2350
|
-
* ```
|
|
2351
|
-
*/
|
|
2352
|
-
interface UserWayConfig {
|
|
2353
|
-
/** ID da conta UserWay */
|
|
2354
|
-
accountId: string;
|
|
2355
|
-
/** URL do script UserWay. Se omitido usa o padrão oficial. */
|
|
2356
|
-
scriptUrl?: string;
|
|
2357
|
-
}
|
|
2358
|
-
/**
|
|
2359
|
-
* Cria integração do Google Analytics (GA4).
|
|
2360
|
-
* Configura o gtag e inicializa o tracking com o measurement ID fornecido.
|
|
2361
|
-
*
|
|
2362
|
-
* @category Utils
|
|
2363
|
-
* @param config - Configuração do Google Analytics
|
|
2364
|
-
* @returns Integração configurada para o GA4
|
|
2365
|
-
* @since 0.2.0
|
|
2366
|
-
*
|
|
2367
|
-
* @example
|
|
2368
|
-
* ```typescript
|
|
2369
|
-
* const ga = createGoogleAnalyticsIntegration({
|
|
2370
|
-
* measurementId: 'G-XXXXXXXXXX',
|
|
2371
|
-
* config: { anonymize_ip: true }
|
|
2372
|
-
* })
|
|
2373
|
-
* ```
|
|
2374
|
-
*
|
|
2375
|
-
* @remarks
|
|
2376
|
-
* - Define cookies: _ga, _ga_*, _gid
|
|
2377
|
-
* - Categoria padrão: 'analytics'
|
|
2378
|
-
* - SSR-safe: verifica disponibilidade do window
|
|
2379
|
-
*/
|
|
2380
|
-
declare function createGoogleAnalyticsIntegration(config: GoogleAnalyticsConfig): ScriptIntegration;
|
|
2381
|
-
/**
|
|
2382
|
-
* Cria integração do Google Tag Manager (GTM).
|
|
2383
|
-
* Configura o dataLayer e inicializa o container GTM.
|
|
2384
|
-
*
|
|
2385
|
-
* @category Utils
|
|
2386
|
-
* @param config - Configuração do Google Tag Manager
|
|
2387
|
-
* @returns Integração configurada para o GTM
|
|
2388
|
-
* @since 0.2.0
|
|
2389
|
-
*
|
|
2390
|
-
* @example
|
|
2391
|
-
* ```typescript
|
|
2392
|
-
* const gtm = createGoogleTagManagerIntegration({
|
|
2393
|
-
* containerId: 'GTM-XXXXXXX',
|
|
2394
|
-
* dataLayerName: 'myDataLayer'
|
|
2395
|
-
* })
|
|
2396
|
-
* ```
|
|
2397
|
-
*
|
|
2398
|
-
* @remarks
|
|
2399
|
-
* - Define cookies: _gcl_au
|
|
2400
|
-
* - Categoria padrão: 'analytics'
|
|
2401
|
-
* - SSR-safe: verifica disponibilidade do window
|
|
2402
|
-
*/
|
|
2403
|
-
declare function createGoogleTagManagerIntegration(config: GoogleTagManagerConfig): ScriptIntegration;
|
|
2404
|
-
/**
|
|
2405
|
-
* Cria integração do UserWay (Acessibilidade).
|
|
2406
|
-
* Configura o widget de acessibilidade UserWay.
|
|
2407
|
-
*
|
|
2408
|
-
* @category Utils
|
|
2409
|
-
* @param config - Configuração do UserWay
|
|
2410
|
-
* @returns Integração configurada para o UserWay
|
|
2411
|
-
* @since 0.2.0
|
|
2412
|
-
*
|
|
2413
|
-
* @example
|
|
2414
|
-
* ```typescript
|
|
2415
|
-
* const userway = createUserWayIntegration({
|
|
2416
|
-
* accountId: 'XXXXXXXXXX'
|
|
2417
|
-
* })
|
|
2418
|
-
* ```
|
|
2419
|
-
*
|
|
2420
|
-
* @remarks
|
|
2421
|
-
* - Define cookies: _userway_*
|
|
2422
|
-
* - Categoria padrão: 'functional'
|
|
2423
|
-
* - SSR-safe: verifica disponibilidade do window
|
|
2424
|
-
*/
|
|
2425
|
-
declare function createUserWayIntegration(config: UserWayConfig): ScriptIntegration;
|
|
2426
|
-
/**
|
|
2427
|
-
* Funções fábricas para integrações comuns.
|
|
2428
|
-
* Fornece acesso direto às funções de criação de integrações pré-configuradas.
|
|
2429
|
-
*
|
|
2430
|
-
* @category Utils
|
|
2431
|
-
* @since 0.2.0
|
|
2432
|
-
*
|
|
2433
|
-
* @example
|
|
2434
|
-
* ```typescript
|
|
2435
|
-
* const ga = COMMON_INTEGRATIONS.googleAnalytics({ measurementId: 'G-XXXXXXXXXX' })
|
|
2436
|
-
* ```
|
|
2437
|
-
*/
|
|
2438
|
-
declare const COMMON_INTEGRATIONS: {
|
|
2439
|
-
googleAnalytics: typeof createGoogleAnalyticsIntegration;
|
|
2440
|
-
googleTagManager: typeof createGoogleTagManagerIntegration;
|
|
2441
|
-
userway: typeof createUserWayIntegration;
|
|
2442
|
-
};
|
|
2443
|
-
/**
|
|
2444
|
-
* Configuração para integração do Facebook Pixel.
|
|
2445
|
-
*
|
|
2446
|
-
* @category Utils
|
|
2447
|
-
* @since 0.4.1
|
|
2448
|
-
*
|
|
2449
|
-
* @example
|
|
2450
|
-
* ```typescript
|
|
2451
|
-
* const config: FacebookPixelConfig = {
|
|
2452
|
-
* pixelId: '1234567890123456',
|
|
2453
|
-
* autoTrack: true,
|
|
2454
|
-
* advancedMatching: { email: 'user@example.com' }
|
|
2455
|
-
* }
|
|
2456
|
-
* ```
|
|
2457
|
-
*/
|
|
2458
|
-
interface FacebookPixelConfig {
|
|
2459
|
-
/** ID do pixel do Facebook */
|
|
2460
|
-
pixelId: string;
|
|
2461
|
-
/** Se deve rastrear PageView automaticamente. Padrão: true */
|
|
2462
|
-
autoTrack?: boolean;
|
|
2463
|
-
/** Configuração de correspondência avançada */
|
|
2464
|
-
advancedMatching?: Record<string, unknown>;
|
|
2465
|
-
/** URL do script do Pixel. Se omitido usa o padrão oficial. */
|
|
2466
|
-
scriptUrl?: string;
|
|
2467
|
-
}
|
|
2468
|
-
/**
|
|
2469
|
-
* Configuração para integração do Hotjar.
|
|
2470
|
-
*
|
|
2471
|
-
* @category Utils
|
|
2472
|
-
* @since 0.4.1
|
|
2473
|
-
*
|
|
2474
|
-
* @example
|
|
2475
|
-
* ```typescript
|
|
2476
|
-
* const config: HotjarConfig = {
|
|
2477
|
-
* siteId: '1234567',
|
|
2478
|
-
* version: 6,
|
|
2479
|
-
* debug: false
|
|
2480
|
-
* }
|
|
2481
|
-
* ```
|
|
2482
|
-
*/
|
|
2483
|
-
interface HotjarConfig {
|
|
2484
|
-
/** ID do site no Hotjar */
|
|
2485
|
-
siteId: string;
|
|
2486
|
-
/** Versão do script Hotjar. Padrão: 6 */
|
|
2487
|
-
version?: number;
|
|
2488
|
-
/** Ativar modo debug. Padrão: false */
|
|
2489
|
-
debug?: boolean;
|
|
2490
|
-
/** URL do script Hotjar. Se omitido usa o padrão oficial. */
|
|
2491
|
-
scriptUrl?: string;
|
|
2492
|
-
}
|
|
2493
|
-
/**
|
|
2494
|
-
* Configuração para integração do Mixpanel.
|
|
2495
|
-
*
|
|
2496
|
-
* @category Utils
|
|
2497
|
-
* @since 0.4.1
|
|
2498
|
-
*
|
|
2499
|
-
* @example
|
|
2500
|
-
* ```typescript
|
|
2501
|
-
* const config: MixpanelConfig = {
|
|
2502
|
-
* token: 'your-project-token',
|
|
2503
|
-
* config: { debug: true },
|
|
2504
|
-
* api_host: 'https://api.mixpanel.com'
|
|
2505
|
-
* }
|
|
2506
|
-
* ```
|
|
2507
|
-
*/
|
|
2508
|
-
interface MixpanelConfig {
|
|
2509
|
-
/** Token do projeto Mixpanel */
|
|
2510
|
-
token: string;
|
|
2511
|
-
/** Configurações adicionais do Mixpanel */
|
|
2512
|
-
config?: Record<string, unknown>;
|
|
2513
|
-
/** Host customizado da API Mixpanel */
|
|
2514
|
-
api_host?: string;
|
|
2515
|
-
/** URL do script Mixpanel. Se omitido usa o padrão oficial. */
|
|
2516
|
-
scriptUrl?: string;
|
|
2517
|
-
}
|
|
2518
|
-
/**
|
|
2519
|
-
* Configuração para integração do Microsoft Clarity.
|
|
2520
|
-
*
|
|
2521
|
-
* @category Utils
|
|
2522
|
-
* @since 0.4.1
|
|
2523
|
-
*
|
|
2524
|
-
* @example
|
|
2525
|
-
* ```typescript
|
|
2526
|
-
* const config: ClarityConfig = {
|
|
2527
|
-
* projectId: 'abcdefghij',
|
|
2528
|
-
* upload: true
|
|
2529
|
-
* }
|
|
2530
|
-
* ```
|
|
2531
|
-
*/
|
|
2532
|
-
interface ClarityConfig {
|
|
2533
|
-
/** ID do projeto no Microsoft Clarity */
|
|
2534
|
-
projectId: string;
|
|
2535
|
-
/** Configuração de upload de dados. Padrão: indefinido */
|
|
2536
|
-
upload?: boolean;
|
|
2537
|
-
/** URL do script Clarity. Se omitido usa o padrão oficial. */
|
|
2538
|
-
scriptUrl?: string;
|
|
2539
|
-
}
|
|
2540
|
-
/**
|
|
2541
|
-
* Configuração para integração do Intercom.
|
|
2542
|
-
*
|
|
2543
|
-
* @category Utils
|
|
2544
|
-
* @since 0.4.1
|
|
2545
|
-
*
|
|
2546
|
-
* @example
|
|
2547
|
-
* ```typescript
|
|
2548
|
-
* const config: IntercomConfig = {
|
|
2549
|
-
* app_id: 'your-app-id'
|
|
2550
|
-
* }
|
|
2551
|
-
* ```
|
|
2552
|
-
*/
|
|
2553
|
-
interface IntercomConfig {
|
|
2554
|
-
/** ID da aplicação Intercom */
|
|
2555
|
-
app_id: string;
|
|
2556
|
-
/** URL do script Intercom. Se omitido usa o padrão oficial. */
|
|
2557
|
-
scriptUrl?: string;
|
|
2558
|
-
}
|
|
2559
|
-
/**
|
|
2560
|
-
* Configuração para integração do Zendesk Chat.
|
|
2561
|
-
*
|
|
2562
|
-
* @category Utils
|
|
2563
|
-
* @since 0.4.1
|
|
2564
|
-
*
|
|
2565
|
-
* @example
|
|
2566
|
-
* ```typescript
|
|
2567
|
-
* const config: ZendeskConfig = {
|
|
2568
|
-
* key: 'your-zendesk-key'
|
|
2569
|
-
* }
|
|
2570
|
-
* ```
|
|
2571
|
-
*/
|
|
2572
|
-
interface ZendeskConfig {
|
|
2573
|
-
/** Chave de identificação do Zendesk */
|
|
2574
|
-
key: string;
|
|
2575
|
-
/** URL do script Zendesk. Se omitido usa o padrão oficial. */
|
|
2576
|
-
scriptUrl?: string;
|
|
2577
|
-
}
|
|
2578
|
-
/**
|
|
2579
|
-
* Cria integração do Facebook Pixel.
|
|
2580
|
-
* Configura o fbq e inicializa o pixel com tracking automático opcional.
|
|
2581
|
-
*
|
|
2582
|
-
* @category Utils
|
|
2583
|
-
* @param config - Configuração do Facebook Pixel
|
|
2584
|
-
* @returns Integração configurada para o Facebook Pixel
|
|
2585
|
-
* @since 0.4.1
|
|
2586
|
-
*
|
|
2587
|
-
* @example
|
|
2588
|
-
* ```typescript
|
|
2589
|
-
* const pixel = createFacebookPixelIntegration({
|
|
2590
|
-
* pixelId: '1234567890123456',
|
|
2591
|
-
* autoTrack: true
|
|
2592
|
-
* })
|
|
2593
|
-
* ```
|
|
2594
|
-
*
|
|
2595
|
-
* @remarks
|
|
2596
|
-
* - Define cookies: _fbp, fr
|
|
2597
|
-
* - Categoria padrão: 'marketing'
|
|
2598
|
-
* - SSR-safe: verifica disponibilidade do window
|
|
2599
|
-
*/
|
|
2600
|
-
declare function createFacebookPixelIntegration(config: FacebookPixelConfig): ScriptIntegration;
|
|
2601
|
-
/**
|
|
2602
|
-
* Cria integração do Hotjar.
|
|
2603
|
-
* Configura as configurações do Hotjar e inicializa o tracking de heatmaps e gravações.
|
|
2604
|
-
*
|
|
2605
|
-
* @category Utils
|
|
2606
|
-
* @param config - Configuração do Hotjar
|
|
2607
|
-
* @returns Integração configurada para o Hotjar
|
|
2608
|
-
* @since 0.4.1
|
|
2609
|
-
*
|
|
2610
|
-
* @example
|
|
2611
|
-
* ```typescript
|
|
2612
|
-
* const hotjar = createHotjarIntegration({
|
|
2613
|
-
* siteId: '1234567',
|
|
2614
|
-
* debug: true
|
|
2615
|
-
* })
|
|
2616
|
-
* ```
|
|
2617
|
-
*
|
|
2618
|
-
* @remarks
|
|
2619
|
-
* - Define cookies: _hjSession_*, _hjSessionUser_*, _hjFirstSeen, _hjIncludedInSessionSample, _hjAbsoluteSessionInProgress
|
|
2620
|
-
* - Categoria padrão: 'analytics'
|
|
2621
|
-
* - SSR-safe: verifica disponibilidade do window
|
|
2622
|
-
*/
|
|
2623
|
-
declare function createHotjarIntegration(config: HotjarConfig): ScriptIntegration;
|
|
2624
|
-
/**
|
|
2625
|
-
* Cria integração do Mixpanel.
|
|
2626
|
-
* Configura e inicializa o Mixpanel para analytics de eventos.
|
|
2627
|
-
*
|
|
2628
|
-
* @category Utils
|
|
2629
|
-
* @param config - Configuração do Mixpanel
|
|
2630
|
-
* @returns Integração configurada para o Mixpanel
|
|
2631
|
-
* @since 0.4.1
|
|
2632
|
-
*
|
|
2633
|
-
* @example
|
|
2634
|
-
* ```typescript
|
|
2635
|
-
* const mixpanel = createMixpanelIntegration({
|
|
2636
|
-
* token: 'your-project-token',
|
|
2637
|
-
* config: { debug: true }
|
|
2638
|
-
* })
|
|
2639
|
-
* ```
|
|
2640
|
-
*
|
|
2641
|
-
* @remarks
|
|
2642
|
-
* - Define cookies: mp_*
|
|
2643
|
-
* - Categoria padrão: 'analytics'
|
|
2644
|
-
* - SSR-safe: verifica disponibilidade do window
|
|
2645
|
-
* - Inclui tratamento de erro na inicialização
|
|
2646
|
-
*/
|
|
2647
|
-
declare function createMixpanelIntegration(config: MixpanelConfig): ScriptIntegration;
|
|
2648
|
-
/**
|
|
2649
|
-
* Cria integração do Microsoft Clarity.
|
|
2650
|
-
* Configura o Microsoft Clarity para heatmaps e analytics de comportamento.
|
|
2651
|
-
*
|
|
2652
|
-
* @category Utils
|
|
2653
|
-
* @param config - Configuração do Microsoft Clarity
|
|
2654
|
-
* @returns Integração configurada para o Clarity
|
|
2655
|
-
* @since 0.4.1
|
|
2656
|
-
*
|
|
2657
|
-
* @example
|
|
2658
|
-
* ```typescript
|
|
2659
|
-
* const clarity = createClarityIntegration({
|
|
2660
|
-
* projectId: 'abcdefghij',
|
|
2661
|
-
* upload: false
|
|
2662
|
-
* })
|
|
2663
|
-
* ```
|
|
2664
|
-
*
|
|
2665
|
-
* @remarks
|
|
2666
|
-
* - Define cookies: _clck, _clsk, CLID, ANONCHK, MR, MUID, SM
|
|
2667
|
-
* - Categoria padrão: 'analytics'
|
|
2668
|
-
* - SSR-safe: verifica disponibilidade do window
|
|
2669
|
-
* - Configuração de upload opcional
|
|
2670
|
-
*/
|
|
2671
|
-
declare function createClarityIntegration(config: ClarityConfig): ScriptIntegration;
|
|
2672
|
-
/**
|
|
2673
|
-
* Cria integração do Intercom.
|
|
2674
|
-
* Configura o widget de chat e suporte do Intercom.
|
|
2675
|
-
*
|
|
2676
|
-
* @category Utils
|
|
2677
|
-
* @param config - Configuração do Intercom
|
|
2678
|
-
* @returns Integração configurada para o Intercom
|
|
2679
|
-
* @since 0.4.1
|
|
2680
|
-
*
|
|
2681
|
-
* @example
|
|
2682
|
-
* ```typescript
|
|
2683
|
-
* const intercom = createIntercomIntegration({
|
|
2684
|
-
* app_id: 'your-app-id'
|
|
2685
|
-
* })
|
|
2686
|
-
* ```
|
|
2687
|
-
*
|
|
2688
|
-
* @remarks
|
|
2689
|
-
* - Define cookies: intercom-id-*, intercom-session-*
|
|
2690
|
-
* - Categoria padrão: 'functional'
|
|
2691
|
-
* - SSR-safe: verifica disponibilidade do window
|
|
2692
|
-
* - Inclui tratamento de erro na inicialização
|
|
2693
|
-
*/
|
|
2694
|
-
declare function createIntercomIntegration(config: IntercomConfig): ScriptIntegration;
|
|
2695
|
-
/**
|
|
2696
|
-
* Cria integração do Zendesk Chat.
|
|
2697
|
-
* Configura o widget de chat e suporte do Zendesk.
|
|
2698
|
-
*
|
|
2699
|
-
* @category Utils
|
|
2700
|
-
* @param config - Configuração do Zendesk Chat
|
|
2701
|
-
* @returns Integração configurada para o Zendesk Chat
|
|
2702
|
-
* @since 0.4.1
|
|
2703
|
-
*
|
|
2704
|
-
* @example
|
|
2705
|
-
* ```typescript
|
|
2706
|
-
* const zendesk = createZendeskChatIntegration({
|
|
2707
|
-
* key: 'your-zendesk-key'
|
|
2708
|
-
* })
|
|
2709
|
-
* ```
|
|
2710
|
-
*
|
|
2711
|
-
* @remarks
|
|
2712
|
-
* - Define cookies: __zlcmid, _zendesk_shared_session
|
|
2713
|
-
* - Categoria padrão: 'functional'
|
|
2714
|
-
* - SSR-safe: verifica disponibilidade do window
|
|
2715
|
-
* - Inclui tratamento de erro na identificação
|
|
2716
|
-
*/
|
|
2717
|
-
declare function createZendeskChatIntegration(config: ZendeskConfig): ScriptIntegration;
|
|
2718
|
-
/**
|
|
2719
|
-
* Configuração para conjunto de integrações de e-commerce.
|
|
2720
|
-
* Define configurações opcionais para múltiplas integrações otimizadas para e-commerce.
|
|
2721
|
-
*
|
|
2722
|
-
* @category Utils
|
|
2723
|
-
* @since 0.4.1
|
|
2724
|
-
*
|
|
2725
|
-
* @example
|
|
2726
|
-
* ```typescript
|
|
2727
|
-
* const config: ECommerceConfig = {
|
|
2728
|
-
* googleAnalytics: { measurementId: 'G-XXXXXXXXXX' },
|
|
2729
|
-
* facebookPixel: { pixelId: '1234567890123456' }
|
|
2730
|
-
* }
|
|
2731
|
-
* ```
|
|
2732
|
-
*/
|
|
2733
|
-
interface ECommerceConfig {
|
|
2734
|
-
/** Configuração do Google Analytics */
|
|
2735
|
-
googleAnalytics?: GoogleAnalyticsConfig;
|
|
2736
|
-
/** Configuração do Facebook Pixel */
|
|
2737
|
-
facebookPixel?: FacebookPixelConfig;
|
|
2738
|
-
/** Configuração do Hotjar */
|
|
2739
|
-
hotjar?: HotjarConfig;
|
|
2740
|
-
/** Configuração do UserWay */
|
|
2741
|
-
userway?: UserWayConfig;
|
|
2742
|
-
}
|
|
2743
|
-
/**
|
|
2744
|
-
* Configuração para conjunto de integrações de SaaS.
|
|
2745
|
-
* Define configurações opcionais para múltiplas integrações otimizadas para SaaS.
|
|
2746
|
-
*
|
|
2747
|
-
* @category Utils
|
|
2748
|
-
* @since 0.4.1
|
|
2749
|
-
*
|
|
2750
|
-
* @example
|
|
2751
|
-
* ```typescript
|
|
2752
|
-
* const config: SaaSConfig = {
|
|
2753
|
-
* googleAnalytics: { measurementId: 'G-XXXXXXXXXX' },
|
|
2754
|
-
* mixpanel: { token: 'your-token' },
|
|
2755
|
-
* intercom: { app_id: 'your-app-id' }
|
|
2756
|
-
* }
|
|
2757
|
-
* ```
|
|
2758
|
-
*/
|
|
2759
|
-
interface SaaSConfig {
|
|
2760
|
-
/** Configuração do Google Analytics */
|
|
2761
|
-
googleAnalytics?: GoogleAnalyticsConfig;
|
|
2762
|
-
/** Configuração do Mixpanel */
|
|
2763
|
-
mixpanel?: MixpanelConfig;
|
|
2764
|
-
/** Configuração do Intercom */
|
|
2765
|
-
intercom?: IntercomConfig;
|
|
2766
|
-
/** Configuração do Hotjar */
|
|
2767
|
-
hotjar?: HotjarConfig;
|
|
2768
|
-
}
|
|
2769
|
-
/**
|
|
2770
|
-
* Configuração para conjunto de integrações corporativas.
|
|
2771
|
-
* Define configurações opcionais para múltiplas integrações otimizadas para ambientes corporativos.
|
|
2772
|
-
*
|
|
2773
|
-
* @category Utils
|
|
2774
|
-
* @since 0.4.1
|
|
2775
|
-
*
|
|
2776
|
-
* @example
|
|
2777
|
-
* ```typescript
|
|
2778
|
-
* const config: CorporateConfig = {
|
|
2779
|
-
* googleAnalytics: { measurementId: 'G-XXXXXXXXXX' },
|
|
2780
|
-
* clarity: { projectId: 'abcdefghij' },
|
|
2781
|
-
* userway: { accountId: 'XXXXXXXXXX' }
|
|
2782
|
-
* }
|
|
2783
|
-
* ```
|
|
2784
|
-
*/
|
|
2785
|
-
interface CorporateConfig {
|
|
2786
|
-
/** Configuração do Google Analytics */
|
|
2787
|
-
googleAnalytics?: GoogleAnalyticsConfig;
|
|
2788
|
-
/** Configuração do Microsoft Clarity */
|
|
2789
|
-
clarity?: ClarityConfig;
|
|
2790
|
-
/** Configuração do Zendesk Chat */
|
|
2791
|
-
zendesk?: ZendeskConfig;
|
|
2792
|
-
/** Configuração do UserWay */
|
|
2793
|
-
userway?: UserWayConfig;
|
|
2794
|
-
}
|
|
2795
|
-
/**
|
|
2796
|
-
* Cria conjunto de integrações otimizado para e-commerce.
|
|
2797
|
-
* Combina analytics de conversão, remarketing e acessibilidade.
|
|
2798
|
-
*
|
|
2799
|
-
* @category Utils
|
|
2800
|
-
* @param cfg - Configuração das integrações de e-commerce
|
|
2801
|
-
* @returns Array de integrações configuradas
|
|
2802
|
-
* @since 0.4.1
|
|
2803
|
-
*
|
|
2804
|
-
* @example
|
|
2805
|
-
* ```typescript
|
|
2806
|
-
* const integrations = createECommerceIntegrations({
|
|
2807
|
-
* googleAnalytics: { measurementId: 'G-XXXXXXXXXX' },
|
|
2808
|
-
* facebookPixel: { pixelId: '1234567890123456' }
|
|
2809
|
-
* })
|
|
2810
|
-
* ```
|
|
2811
|
-
*
|
|
2812
|
-
* @remarks
|
|
2813
|
-
* Combina categorias: analytics, marketing, functional
|
|
2814
|
-
*/
|
|
2815
|
-
declare function createECommerceIntegrations(cfg: ECommerceConfig): ScriptIntegration[];
|
|
2816
|
-
/**
|
|
2817
|
-
* Cria conjunto de integrações otimizado para SaaS.
|
|
2818
|
-
* Combina analytics de produto, suporte ao cliente e comportamento do usuário.
|
|
2819
|
-
*
|
|
2820
|
-
* @category Utils
|
|
2821
|
-
* @param cfg - Configuração das integrações de SaaS
|
|
2822
|
-
* @returns Array de integrações configuradas
|
|
2823
|
-
* @since 0.4.1
|
|
2824
|
-
*
|
|
2825
|
-
* @example
|
|
2826
|
-
* ```typescript
|
|
2827
|
-
* const integrations = createSaaSIntegrations({
|
|
2828
|
-
* googleAnalytics: { measurementId: 'G-XXXXXXXXXX' },
|
|
2829
|
-
* mixpanel: { token: 'your-project-token' },
|
|
2830
|
-
* intercom: { app_id: 'your-app-id' }
|
|
2831
|
-
* })
|
|
2832
|
-
* ```
|
|
2833
|
-
*
|
|
2834
|
-
* @remarks
|
|
2835
|
-
* Combina categorias: analytics, functional
|
|
2836
|
-
*/
|
|
2837
|
-
declare function createSaaSIntegrations(cfg: SaaSConfig): ScriptIntegration[];
|
|
2838
|
-
/**
|
|
2839
|
-
* Cria conjunto de integrações otimizado para ambientes corporativos.
|
|
2840
|
-
* Combina analytics empresariais, compliance e suporte corporativo.
|
|
2841
|
-
*
|
|
2842
|
-
* @category Utils
|
|
2843
|
-
* @param cfg - Configuração das integrações corporativas
|
|
2844
|
-
* @returns Array de integrações configuradas
|
|
2845
|
-
* @since 0.4.1
|
|
2846
|
-
*
|
|
2847
|
-
* @example
|
|
2848
|
-
* ```typescript
|
|
2849
|
-
* const integrations = createCorporateIntegrations({
|
|
2850
|
-
* googleAnalytics: { measurementId: 'G-XXXXXXXXXX' },
|
|
2851
|
-
* clarity: { projectId: 'abcdefghij' },
|
|
2852
|
-
* userway: { accountId: 'XXXXXXXXXX' }
|
|
2853
|
-
* })
|
|
2854
|
-
* ```
|
|
2855
|
-
*
|
|
2856
|
-
* @remarks
|
|
2857
|
-
* Combina categorias: analytics, functional
|
|
2858
|
-
*/
|
|
2859
|
-
declare function createCorporateIntegrations(cfg: CorporateConfig): ScriptIntegration[];
|
|
2860
|
-
/**
|
|
2861
|
-
* Templates pré-configurados de integrações por tipo de negócio.
|
|
2862
|
-
* Define integrações essenciais e opcionais para cada contexto.
|
|
2863
|
-
*
|
|
2864
|
-
* @category Utils
|
|
2865
|
-
* @since 0.4.1
|
|
2866
|
-
*
|
|
2867
|
-
* @example
|
|
2868
|
-
* ```typescript
|
|
2869
|
-
* const template = INTEGRATION_TEMPLATES.ecommerce
|
|
2870
|
-
* console.log(template.essential) // ['google-analytics', 'facebook-pixel']
|
|
2871
|
-
* console.log(template.categories) // ['analytics', 'marketing', 'functional']
|
|
2872
|
-
* ```
|
|
2873
|
-
*
|
|
2874
|
-
* @remarks
|
|
2875
|
-
* Cada template define:
|
|
2876
|
-
* - essential: integrações obrigatórias/recomendadas
|
|
2877
|
-
* - optional: integrações complementares
|
|
2878
|
-
* - categories: categorias LGPD utilizadas
|
|
2879
|
-
*/
|
|
2880
|
-
declare const INTEGRATION_TEMPLATES: {
|
|
2881
|
-
ecommerce: {
|
|
2882
|
-
essential: string[];
|
|
2883
|
-
optional: string[];
|
|
2884
|
-
categories: string[];
|
|
2885
|
-
};
|
|
2886
|
-
saas: {
|
|
2887
|
-
essential: string[];
|
|
2888
|
-
optional: string[];
|
|
2889
|
-
categories: string[];
|
|
2890
|
-
};
|
|
2891
|
-
corporate: {
|
|
2892
|
-
essential: string[];
|
|
2893
|
-
optional: string[];
|
|
2894
|
-
categories: string[];
|
|
2895
|
-
};
|
|
2896
|
-
};
|
|
2897
|
-
/**
|
|
2898
|
-
* Sugere categorias LGPD apropriadas para um script baseado no nome/tipo.
|
|
2899
|
-
* Utiliza heurísticas para classificar scripts desconhecidos.
|
|
2900
|
-
*
|
|
2901
|
-
* @category Utils
|
|
2902
|
-
* @param name - Nome ou identificador do script
|
|
2903
|
-
* @returns Array de categorias sugeridas
|
|
2904
|
-
* @since 0.4.1
|
|
2905
|
-
*
|
|
2906
|
-
* @example
|
|
2907
|
-
* ```typescript
|
|
2908
|
-
* suggestCategoryForScript('facebook-pixel') // ['marketing']
|
|
2909
|
-
* suggestCategoryForScript('hotjar') // ['analytics']
|
|
2910
|
-
* suggestCategoryForScript('intercom-chat') // ['functional']
|
|
2911
|
-
* suggestCategoryForScript('unknown-script') // ['analytics']
|
|
2912
|
-
* ```
|
|
2913
|
-
*
|
|
2914
|
-
* @remarks
|
|
2915
|
-
* Heurísticas aplicadas:
|
|
2916
|
-
* - Scripts de ads/marketing → 'marketing'
|
|
2917
|
-
* - Scripts de analytics/tracking → 'analytics'
|
|
2918
|
-
* - Scripts de chat/suporte → 'functional'
|
|
2919
|
-
* - Padrão para desconhecidos → 'analytics'
|
|
2920
|
-
*/
|
|
2921
|
-
declare function suggestCategoryForScript(name: string): string[];
|
|
2922
|
-
|
|
2923
|
-
/**
|
|
2924
|
-
* Componente que carrega scripts automaticamente baseado no consentimento.
|
|
2925
|
-
* Facilita integração com ferramentas como Google Analytics, Tag Manager, etc.
|
|
2926
|
-
*/
|
|
2927
|
-
|
|
2928
|
-
interface ConsentScriptLoaderProps {
|
|
2929
|
-
/** Lista de integrações de scripts para carregar baseado no consentimento */
|
|
2930
|
-
integrations: ScriptIntegration[];
|
|
2931
|
-
/** Se true, força recarregamento se consentimento mudar */
|
|
2932
|
-
reloadOnChange?: boolean;
|
|
2933
|
-
}
|
|
2934
|
-
/**
|
|
2935
|
-
* @component
|
|
2936
|
-
* @category Utils
|
|
2937
|
-
* @since 0.2.0
|
|
2938
|
-
* Componente que não renderiza UI, mas gerencia o carregamento de scripts de terceiros
|
|
2939
|
-
* (como Google Analytics) com base nas preferências de consentimento do usuário.
|
|
2940
|
-
*
|
|
2941
|
-
* @param props As propriedades do componente.
|
|
2942
|
-
* @param {ScriptIntegration[]} props.integrations Um array de objetos de integração de script. Use as factory functions (`createGoogleAnalyticsIntegration`, etc.) para criar.
|
|
2943
|
-
* @param {boolean} [props.reloadOnChange=false] Se `true`, recarrega os scripts se as preferências de consentimento mudarem.
|
|
2944
|
-
*
|
|
2945
|
-
* @example
|
|
2946
|
-
* ```tsx
|
|
2947
|
-
* const integrations = [
|
|
2948
|
-
* createGoogleAnalyticsIntegration({ measurementId: 'GA_ID' }),
|
|
2949
|
-
* createFacebookPixelIntegration({ pixelId: 'PIXEL_ID' })
|
|
2950
|
-
* ];
|
|
2951
|
-
*
|
|
2952
|
-
* <ConsentScriptLoader integrations={integrations} />
|
|
2953
|
-
* ```
|
|
2954
|
-
*/
|
|
2955
|
-
declare function ConsentScriptLoader({ integrations, reloadOnChange, }: Readonly<ConsentScriptLoaderProps>): null;
|
|
2956
|
-
/**
|
|
2957
|
-
* @hook
|
|
2958
|
-
* @category Hooks
|
|
2959
|
-
* @since 0.2.0
|
|
2960
|
-
* Hook para carregamento programático de um script baseado no consentimento.
|
|
2961
|
-
*
|
|
2962
|
-
* @returns Uma função assíncrona que recebe um objeto de integração de script e tenta carregá-lo.
|
|
2963
|
-
* Retorna `true` em caso de sucesso e `false` em caso de falha (por falta de consentimento ou erro de rede).
|
|
2964
|
-
*
|
|
2965
|
-
* @example
|
|
2966
|
-
* ```tsx
|
|
2967
|
-
* const loadScript = useConsentScriptLoader();
|
|
2968
|
-
*
|
|
2969
|
-
* useEffect(() => {
|
|
2970
|
-
* const handleUserAction = async () => {
|
|
2971
|
-
* const hotjarIntegration = { id: 'hotjar', category: 'analytics', src: '...' };
|
|
2972
|
-
* const success = await loadScript(hotjarIntegration);
|
|
2973
|
-
* if (success) {
|
|
2974
|
-
* console.log('Hotjar carregado com sucesso!');
|
|
2975
|
-
* }
|
|
2976
|
-
* };
|
|
2977
|
-
*
|
|
2978
|
-
* // Exemplo: carregar script após uma ação específica do usuário
|
|
2979
|
-
* myButton.addEventListener('click', handleUserAction);
|
|
2980
|
-
* }, [loadScript]);
|
|
2981
|
-
* ```
|
|
2982
|
-
*/
|
|
2983
|
-
declare function useConsentScriptLoader(): (integration: ScriptIntegration) => Promise<boolean>;
|
|
2984
|
-
|
|
2985
|
-
/**
|
|
2986
|
-
* @file autoConfigureCategories.ts
|
|
2987
|
-
* @description Sistema inteligente de auto-habilitação de categorias baseado nas integrações utilizadas
|
|
2988
|
-
* @since 0.4.1
|
|
2989
|
-
*/
|
|
2990
|
-
|
|
2991
|
-
/**
|
|
2992
|
-
* @interface CategoryAutoConfigResult
|
|
2993
|
-
* Resultado da análise e auto-configuração de categorias
|
|
2994
|
-
*/
|
|
2995
|
-
interface CategoryAutoConfigResult {
|
|
2996
|
-
/** Configuração original fornecida pelo desenvolvedor */
|
|
2997
|
-
originalConfig: ProjectCategoriesConfig;
|
|
2998
|
-
/** Configuração ajustada automaticamente pela biblioteca */
|
|
2999
|
-
adjustedConfig: ProjectCategoriesConfig;
|
|
3000
|
-
/** Categorias que foram automaticamente habilitadas */
|
|
3001
|
-
autoEnabledCategories: string[];
|
|
3002
|
-
/** Categorias requeridas pelas integrações mas não habilitadas */
|
|
3003
|
-
missingCategories: string[];
|
|
3004
|
-
/** Se algum ajuste foi necessário */
|
|
3005
|
-
wasAdjusted: boolean;
|
|
3006
|
-
/** Integrações que requerem cada categoria */
|
|
3007
|
-
categoryIntegrations: Record<string, string[]>;
|
|
3008
|
-
}
|
|
3009
|
-
/**
|
|
3010
|
-
* @function
|
|
3011
|
-
* @category Utils
|
|
3012
|
-
* @since 0.4.1
|
|
3013
|
-
* Analisa as integrações fornecidas e determina quais categorias são necessárias.
|
|
3014
|
-
*
|
|
3015
|
-
* @param integrations Array de integrações de script
|
|
3016
|
-
* @returns Record mapeando categoria para nomes das integrações que a utilizam
|
|
3017
|
-
*/
|
|
3018
|
-
declare function analyzeIntegrationCategories(integrations: ScriptIntegration[]): Record<string, string[]>;
|
|
3019
|
-
/**
|
|
3020
|
-
* @function
|
|
3021
|
-
* @category Utils
|
|
3022
|
-
* @since 0.4.1
|
|
3023
|
-
* Configura automaticamente as categorias necessárias baseado nas integrações utilizadas.
|
|
3024
|
-
*
|
|
3025
|
-
* Esta função implementa o comportamento inteligente da biblioteca:
|
|
3026
|
-
* 1. Detecta categorias requeridas pelas integrações
|
|
3027
|
-
* 2. Auto-habilita categorias em falta (modo padrão)
|
|
3028
|
-
* 3. Ou apenas avisa sobre categorias em falta (modo warning-only)
|
|
3029
|
-
* 4. Loga no console em modo DEV
|
|
3030
|
-
*
|
|
3031
|
-
* @param originalConfig Configuração original do ConsentProvider
|
|
3032
|
-
* @param integrations Array de integrações que serão utilizadas
|
|
3033
|
-
* @param options Opções de comportamento
|
|
3034
|
-
* @returns Resultado da análise e configuração automática
|
|
3035
|
-
*/
|
|
3036
|
-
declare function autoConfigureCategories(originalConfig: ProjectCategoriesConfig | undefined, integrations: ScriptIntegration[], options?: {
|
|
3037
|
-
/** Se true, apenas avisa mas não modifica a config (padrão: false - auto-habilita) */
|
|
3038
|
-
warningOnly?: boolean;
|
|
3039
|
-
/** Se true, desabilita logs no console (padrão: false) */
|
|
3040
|
-
silent?: boolean;
|
|
3041
|
-
}): CategoryAutoConfigResult;
|
|
3042
|
-
/**
|
|
3043
|
-
* @function
|
|
3044
|
-
* @category Utils
|
|
3045
|
-
* @since 0.4.1
|
|
3046
|
-
* Valida se todas as integrações têm suas categorias habilitadas.
|
|
3047
|
-
* Útil para validação em tempo de execução.
|
|
3048
|
-
*
|
|
3049
|
-
* @param integrations Array de integrações
|
|
3050
|
-
* @param enabledCategories Array de categorias habilitadas
|
|
3051
|
-
* @returns true se todas as categorias necessárias estão habilitadas
|
|
3052
|
-
*/
|
|
3053
|
-
declare function validateIntegrationCategories(integrations: ScriptIntegration[], enabledCategories: string[]): boolean;
|
|
3054
|
-
/**
|
|
3055
|
-
* @function
|
|
3056
|
-
* @category Utils
|
|
3057
|
-
* @since 0.4.1
|
|
3058
|
-
* Extrai categorias únicas de um array de integrações
|
|
3059
|
-
*
|
|
3060
|
-
* @param integrations Array de integrações
|
|
3061
|
-
* @returns Array de categorias únicas
|
|
3062
|
-
*/
|
|
3063
|
-
declare function extractCategoriesFromIntegrations(integrations: ScriptIntegration[]): string[];
|
|
3064
|
-
/**
|
|
3065
|
-
* @function
|
|
3066
|
-
* @category Utils
|
|
3067
|
-
* @since 0.4.1
|
|
3068
|
-
* Valida se integrações estão sendo incorretamente classificadas como "necessary".
|
|
3069
|
-
*
|
|
3070
|
-
* Esta função protege contra violações de GDPR/LGPD identificando scripts que
|
|
3071
|
-
* NUNCA devem ser considerados estritamente necessários.
|
|
3072
|
-
*
|
|
3073
|
-
* @param integrations Array de integrações para validar
|
|
3074
|
-
* @param enabledCategories Categorias habilitadas na configuração
|
|
3075
|
-
* @returns Lista de avisos sobre classificações incorretas
|
|
3076
|
-
*
|
|
3077
|
-
* @example
|
|
3078
|
-
* ```typescript
|
|
3079
|
-
* const warnings = validateNecessaryClassification([
|
|
3080
|
-
* createGoogleAnalyticsIntegration({...}), // ❌ NUNCA é necessary
|
|
3081
|
-
* createCustomIntegration({...}) // ✅ Pode ser necessary se apropriado
|
|
3082
|
-
* ], ['necessary', 'analytics'])
|
|
3083
|
-
*
|
|
3084
|
-
* if (warnings.length > 0) {
|
|
3085
|
-
* console.warn('Scripts incorretamente classificados como necessary:', warnings)
|
|
3086
|
-
* }
|
|
3087
|
-
* ```
|
|
3088
|
-
*/
|
|
3089
|
-
declare function validateNecessaryClassification(integrations: ScriptIntegration[], enabledCategories: Category[]): string[];
|
|
3090
|
-
|
|
3091
|
-
/**
|
|
3092
|
-
* @fileoverview
|
|
3093
|
-
* Sistema de textos expandido com suporte avançado a internacionalização,
|
|
3094
|
-
* contextos específicos e variações de tom.
|
|
3095
|
-
*
|
|
3096
|
-
* @author Luciano Édipo
|
|
3097
|
-
* @since 0.4.1
|
|
3098
|
-
*/
|
|
3099
|
-
|
|
3100
|
-
/**
|
|
3101
|
-
* Tipo auxiliar para variações de texto.
|
|
3102
|
-
*
|
|
3103
|
-
* Define um subconjunto opcional dos textos principais do banner e modal,
|
|
3104
|
-
* permitindo variações de t es: {
|
|
3105
|
-
bannerMessage: 'Utilizamos cookies para mejorar su experiencia y mostrar contenido personalizado.', (formal, casual, etc.) sem sobrescrever todos os textos.
|
|
3106
|
-
*
|
|
3107
|
-
* @category Types
|
|
3108
|
-
* @since 0.4.1
|
|
3109
|
-
*/
|
|
3110
|
-
type TextVariant = Partial<Pick<ConsentTexts, 'bannerMessage' | 'acceptAll' | 'declineAll' | 'modalTitle'>>;
|
|
3111
|
-
/**
|
|
3112
|
-
* Tipo auxiliar para textos de idioma.
|
|
3113
|
-
*
|
|
3114
|
-
* Define um subconjunto dos textos principais, excluindo propriedades específicas de internacionalização
|
|
3115
|
-
* e contextos, para uso em configurações multilíngues.
|
|
3116
|
-
*
|
|
3117
|
-
* @category Types
|
|
3118
|
-
* @since 0.4.1
|
|
3119
|
-
*/
|
|
3120
|
-
type LanguageTexts = Partial<Omit<ConsentTexts, 'i18n' | 'variants' | 'contexts'>>;
|
|
3121
|
-
/**
|
|
3122
|
-
* Sistema de textos avançado com suporte a internacionalização e contextos específicos.
|
|
3123
|
-
*
|
|
3124
|
-
* Interface expandida que permite personalização granular de todas as mensagens da biblioteca.
|
|
3125
|
-
* Suporta múltiplos idiomas, contextos específicos (e-commerce, SaaS, governo), variações
|
|
3126
|
-
* de tom, e compliance completo com LGPD/ANPD.
|
|
3127
|
-
*
|
|
3128
|
-
* @category Types
|
|
3129
|
-
* @since 0.4.1
|
|
3130
|
-
* @version 0.4.1 - Nova interface com suporte avançado a i18n e contextos
|
|
3131
|
-
*
|
|
3132
|
-
* @example Configuração multilíngue
|
|
3133
|
-
* ```typescript
|
|
3134
|
-
* const multiLangTexts: AdvancedConsentTexts = {
|
|
3135
|
-
* // Herda de ConsentTexts básico
|
|
3136
|
-
* bannerMessage: 'Utilizamos cookies para melhorar sua experiência.',
|
|
3137
|
-
* acceptAll: 'Aceitar todos',
|
|
3138
|
-
* declineAll: 'Recusar',
|
|
3139
|
-
* preferences: 'Preferências',
|
|
3140
|
-
* modalTitle: 'Preferências de Cookies',
|
|
3141
|
-
* modalIntro: 'Personalize suas preferências de cookies.',
|
|
3142
|
-
* save: 'Salvar',
|
|
3143
|
-
* necessaryAlwaysOn: 'Cookies necessários (sempre ativos)',
|
|
3144
|
-
*
|
|
3145
|
-
* // Textos expandidos
|
|
3146
|
-
* variants: {
|
|
3147
|
-
* formal: {
|
|
3148
|
-
* bannerMessage: 'Este sítio utiliza cookies para otimizar a experiência de navegação.',
|
|
3149
|
-
* acceptAll: 'Concordar com todos os cookies'
|
|
3150
|
-
* },
|
|
3151
|
-
* casual: {
|
|
3152
|
-
* bannerMessage: '🍪 Olá! Usamos cookies para tornar tudo mais gostoso aqui.',
|
|
3153
|
-
* acceptAll: 'Aceitar tudo'
|
|
3154
|
-
* }
|
|
3155
|
-
* },
|
|
3156
|
-
*
|
|
3157
|
-
* // Internacionalização
|
|
3158
|
-
* i18n: {
|
|
3159
|
-
* en: {
|
|
3160
|
-
* bannerMessage: 'We use cookies to enhance your experience.',
|
|
3161
|
-
* acceptAll: 'Accept All',
|
|
3162
|
-
* declineAll: 'Decline'
|
|
3163
|
-
* },
|
|
3164
|
-
* es: {
|
|
3165
|
-
* bannerMessage: 'Utilizamos cookies para mejorar su experiencia.',
|
|
3166
|
-
* acceptAll: 'Aceptar Todo',
|
|
3167
|
-
* declineAll: 'Rechazar'
|
|
3168
|
-
* }
|
|
3169
|
-
* }
|
|
3170
|
-
* }
|
|
3171
|
-
* ```
|
|
3172
|
-
*/
|
|
3173
|
-
interface AdvancedConsentTexts extends ConsentTexts {
|
|
3174
|
-
/** Texto para confirmar ação */
|
|
3175
|
-
confirm?: string;
|
|
3176
|
-
/** Texto para cancelar ação */
|
|
3177
|
-
cancel?: string;
|
|
3178
|
-
/** Texto de carregamento */
|
|
3179
|
-
loading?: string;
|
|
3180
|
-
/** Textos específicos para cada categoria de cookie */
|
|
3181
|
-
categories?: {
|
|
3182
|
-
necessary?: {
|
|
3183
|
-
name?: string;
|
|
3184
|
-
description?: string;
|
|
3185
|
-
examples?: string;
|
|
3186
|
-
};
|
|
3187
|
-
analytics?: {
|
|
3188
|
-
name?: string;
|
|
3189
|
-
description?: string;
|
|
3190
|
-
examples?: string;
|
|
3191
|
-
};
|
|
3192
|
-
marketing?: {
|
|
3193
|
-
name?: string;
|
|
3194
|
-
description?: string;
|
|
3195
|
-
examples?: string;
|
|
3196
|
-
};
|
|
3197
|
-
functional?: {
|
|
3198
|
-
name?: string;
|
|
3199
|
-
description?: string;
|
|
3200
|
-
examples?: string;
|
|
3201
|
-
};
|
|
3202
|
-
performance?: {
|
|
3203
|
-
name?: string;
|
|
3204
|
-
description?: string;
|
|
3205
|
-
examples?: string;
|
|
3206
|
-
};
|
|
3207
|
-
};
|
|
3208
|
-
/** Mensagens de feedback ao usuário */
|
|
3209
|
-
feedback?: {
|
|
3210
|
-
/** Preferências salvas com sucesso */
|
|
3211
|
-
saveSuccess?: string;
|
|
3212
|
-
/** Erro ao salvar preferências */
|
|
3213
|
-
saveError?: string;
|
|
3214
|
-
/** Consentimento atualizado */
|
|
3215
|
-
consentUpdated?: string;
|
|
3216
|
-
/** Cookies rejeitados */
|
|
3217
|
-
cookiesRejected?: string;
|
|
3218
|
-
/** Configurações resetadas */
|
|
3219
|
-
settingsReset?: string;
|
|
3220
|
-
};
|
|
3221
|
-
/** Labels ARIA e textos para leitores de tela */
|
|
3222
|
-
accessibility?: {
|
|
3223
|
-
/** Label do banner para leitores de tela */
|
|
3224
|
-
bannerLabel?: string;
|
|
3225
|
-
/** Label do modal para leitores de tela */
|
|
3226
|
-
modalLabel?: string;
|
|
3227
|
-
/** Instrução de navegação por teclado */
|
|
3228
|
-
keyboardNavigation?: string;
|
|
3229
|
-
/** Estado do toggle de categoria */
|
|
3230
|
-
toggleState?: {
|
|
3231
|
-
enabled?: string;
|
|
3232
|
-
disabled?: string;
|
|
3233
|
-
};
|
|
3234
|
-
/** Região live para anúncios dinâmicos */
|
|
3235
|
-
liveRegion?: string;
|
|
3236
|
-
};
|
|
3237
|
-
/** Textos otimizados para diferentes contextos */
|
|
3238
|
-
contexts?: {
|
|
3239
|
-
/** Contexto e-commerce */
|
|
3240
|
-
ecommerce?: {
|
|
3241
|
-
cartAbandonment?: string;
|
|
3242
|
-
personalizedOffers?: string;
|
|
3243
|
-
paymentSecurity?: string;
|
|
3244
|
-
productRecommendations?: string;
|
|
3245
|
-
};
|
|
3246
|
-
/** Contexto SaaS */
|
|
3247
|
-
saas?: {
|
|
3248
|
-
userAnalytics?: string;
|
|
3249
|
-
performanceMonitoring?: string;
|
|
3250
|
-
featureUsage?: string;
|
|
3251
|
-
customerSupport?: string;
|
|
3252
|
-
};
|
|
3253
|
-
/** Contexto governamental */
|
|
3254
|
-
government?: {
|
|
3255
|
-
citizenServices?: string;
|
|
3256
|
-
dataProtection?: string;
|
|
3257
|
-
transparency?: string;
|
|
3258
|
-
accessibility?: string;
|
|
3259
|
-
};
|
|
3260
|
-
/** Contexto educacional */
|
|
3261
|
-
education?: {
|
|
3262
|
-
studentProgress?: string;
|
|
3263
|
-
learningAnalytics?: string;
|
|
3264
|
-
accessibility?: string;
|
|
3265
|
-
parentalConsent?: string;
|
|
3266
|
-
};
|
|
3267
|
-
};
|
|
3268
|
-
/** Diferentes variações de tom para a mesma mensagem */
|
|
3269
|
-
variants?: {
|
|
3270
|
-
/** Tom formal/profissional */
|
|
3271
|
-
formal?: TextVariant;
|
|
3272
|
-
/** Tom casual/amigável */
|
|
3273
|
-
casual?: TextVariant;
|
|
3274
|
-
/** Tom conciso/direto */
|
|
3275
|
-
concise?: TextVariant;
|
|
3276
|
-
/** Tom detalhado/explicativo */
|
|
3277
|
-
detailed?: TextVariant;
|
|
3278
|
-
};
|
|
3279
|
-
/** Suporte a múltiplos idiomas */
|
|
3280
|
-
i18n?: {
|
|
3281
|
-
/** Textos em inglês */
|
|
3282
|
-
en?: LanguageTexts;
|
|
3283
|
-
/** Textos em espanhol */
|
|
3284
|
-
es?: LanguageTexts;
|
|
3285
|
-
/** Textos em francês */
|
|
3286
|
-
fr?: LanguageTexts;
|
|
3287
|
-
/** Textos em alemão */
|
|
3288
|
-
de?: LanguageTexts;
|
|
3289
|
-
/** Textos em italiano */
|
|
3290
|
-
it?: LanguageTexts;
|
|
3291
|
-
};
|
|
3292
|
-
/** Informações técnicas sobre cookies */
|
|
3293
|
-
technical?: {
|
|
3294
|
-
/** Explicação sobre cookies de sessão */
|
|
3295
|
-
sessionCookies?: string;
|
|
3296
|
-
/** Explicação sobre cookies persistentes */
|
|
3297
|
-
persistentCookies?: string;
|
|
3298
|
-
/** Explicação sobre cookies de terceiros */
|
|
3299
|
-
thirdPartyCookies?: string;
|
|
3300
|
-
/** Como desabilitar cookies no navegador */
|
|
3301
|
-
browserSettings?: string;
|
|
3302
|
-
/** Impacto de desabilitar cookies */
|
|
3303
|
-
disablingImpact?: string;
|
|
3304
|
-
};
|
|
3305
|
-
/** Cabeçalhos para tabela de detalhes de cookies */
|
|
3306
|
-
cookieDetails?: {
|
|
3307
|
-
tableHeaders?: {
|
|
3308
|
-
name?: string;
|
|
3309
|
-
purpose?: string;
|
|
3310
|
-
duration?: string;
|
|
3311
|
-
provider?: string;
|
|
3312
|
-
type?: string;
|
|
3313
|
-
};
|
|
3314
|
-
/** Texto quando não há cookies para mostrar */
|
|
3315
|
-
noCookies?: string;
|
|
3316
|
-
/** Botão para expandir/colapsar detalhes */
|
|
3317
|
-
toggleDetails?: {
|
|
3318
|
-
expand?: string;
|
|
3319
|
-
collapse?: string;
|
|
3320
|
-
};
|
|
3321
|
-
};
|
|
3322
|
-
}
|
|
3323
|
-
/**
|
|
3324
|
-
* Textos padrão expandidos para diferentes contextos e idiomas.
|
|
3325
|
-
*
|
|
3326
|
-
* @category Utils
|
|
3327
|
-
* @since 0.4.1
|
|
3328
|
-
*/
|
|
3329
|
-
declare const EXPANDED_DEFAULT_TEXTS: Partial<AdvancedConsentTexts>;
|
|
3330
|
-
/**
|
|
3331
|
-
* Utilitário para resolver textos baseado em idioma, contexto e variação.
|
|
3332
|
-
*
|
|
3333
|
-
* @category Utils
|
|
3334
|
-
* @since 0.4.1
|
|
3335
|
-
*
|
|
3336
|
-
* @param texts - Textos avançados configurados
|
|
3337
|
-
* @param options - Opções de resolução
|
|
3338
|
-
* @returns Textos resolvidos para o contexto
|
|
3339
|
-
*/
|
|
3340
|
-
declare function resolveTexts(texts: AdvancedConsentTexts, options?: {
|
|
3341
|
-
language?: 'pt' | 'en' | 'es' | 'fr' | 'de' | 'it';
|
|
3342
|
-
context?: 'ecommerce' | 'saas' | 'government' | 'education';
|
|
3343
|
-
variant?: 'formal' | 'casual' | 'concise' | 'detailed';
|
|
3344
|
-
}): ConsentTexts;
|
|
3345
|
-
/**
|
|
3346
|
-
* Templates pré-configurados para diferentes contextos.
|
|
3347
|
-
*
|
|
3348
|
-
* @category Utils
|
|
3349
|
-
* @since 0.4.1
|
|
3350
|
-
*/
|
|
3351
|
-
declare const TEXT_TEMPLATES: {
|
|
3352
|
-
readonly ecommerce: AdvancedConsentTexts;
|
|
3353
|
-
readonly saas: AdvancedConsentTexts;
|
|
3354
|
-
readonly government: AdvancedConsentTexts;
|
|
3355
|
-
};
|
|
3356
|
-
|
|
3357
|
-
/**
|
|
3358
|
-
* @enum LogLevel
|
|
3359
|
-
* @category Utils
|
|
3360
|
-
* @since 0.3.1
|
|
3361
|
-
* Define os níveis de severidade para os logs da biblioteca.
|
|
3362
|
-
*/
|
|
3363
|
-
declare enum LogLevel {
|
|
3364
|
-
/** Mensagens de erro críticas. */
|
|
3365
|
-
ERROR = 0,
|
|
3366
|
-
/** Mensagens de aviso sobre possíveis problemas. */
|
|
3367
|
-
WARN = 1,
|
|
3368
|
-
/** Mensagens informativas sobre o fluxo da aplicação. */
|
|
3369
|
-
INFO = 2,
|
|
3370
|
-
/** Mensagens detalhadas para depuração. */
|
|
3371
|
-
DEBUG = 3
|
|
3372
|
-
}
|
|
3373
|
-
/**
|
|
3374
|
-
* @function
|
|
3375
|
-
* @category Utils
|
|
3376
|
-
* @since 0.3.1
|
|
3377
|
-
* Habilita ou desabilita o sistema de logging de debug da biblioteca externamente.
|
|
3378
|
-
* Útil para troubleshooting em produção quando necessário, pois os logs são desabilitados por padrão em builds de produção.
|
|
3379
|
-
*
|
|
3380
|
-
* @param {boolean} enabled Se `true`, os logs serão exibidos; caso contrário, serão suprimidos.
|
|
3381
|
-
* @param {LogLevel} [level=LogLevel.INFO] O nível mínimo de severidade para os logs. Padrão: `LogLevel.INFO`.
|
|
3382
|
-
*
|
|
3383
|
-
* @example
|
|
3384
|
-
* ```typescript
|
|
3385
|
-
* import { setDebugLogging, LogLevel } from 'react-lgpd-consent';
|
|
3386
|
-
*
|
|
3387
|
-
* // Habilitar logs detalhados em desenvolvimento
|
|
3388
|
-
* setDebugLogging(true, LogLevel.DEBUG);
|
|
3389
|
-
*
|
|
3390
|
-
* // Desabilitar todos os logs em produção (já é o padrão, mas pode ser forçado)
|
|
3391
|
-
* setDebugLogging(false);
|
|
3392
|
-
* ```
|
|
3393
|
-
*/
|
|
3394
|
-
declare function setDebugLogging(enabled: boolean, level?: LogLevel): void;
|
|
3395
|
-
|
|
3396
|
-
interface CookieCatalogOverrides {
|
|
3397
|
-
byCategory?: Record<string, CookieDescriptor[]>;
|
|
3398
|
-
byIntegration?: Record<string, CookieDescriptor[]>;
|
|
3399
|
-
}
|
|
3400
|
-
interface CookieCategoryOverrides {
|
|
3401
|
-
[cookieNameOrPattern: string]: Category;
|
|
3402
|
-
}
|
|
3403
|
-
declare function setCookieCatalogOverrides(overrides: CookieCatalogOverrides): void;
|
|
3404
|
-
declare function setCookieCategoryOverrides(map: CookieCategoryOverrides): void;
|
|
3405
|
-
declare function getCookiesInfoForCategory(categoryId: Category, usedIntegrations: string[]): CookieDescriptor[];
|
|
3406
|
-
|
|
3407
|
-
/**
|
|
3408
|
-
* Propriedades para customizar o comportamento e aparência do componente CookieBanner.
|
|
3409
|
-
*
|
|
3410
|
-
* @remarks
|
|
3411
|
-
* Esta interface permite controle completo sobre o banner de consentimento, desde
|
|
3412
|
-
* o comportamento de exibição até a customização visual avançada. O banner pode
|
|
3413
|
-
* operar em dois modos principais: bloqueante (modal) ou não-bloqueante (snackbar).
|
|
3414
|
-
*
|
|
3415
|
-
* ### Modos de Exibição
|
|
3416
|
-
* - **Bloqueante** (`blocking: true`): Banner como modal sobreposto, impede interação
|
|
3417
|
-
* - **Não-bloqueante** (`blocking: false`): Banner como snackbar, permite navegação
|
|
3418
|
-
*
|
|
3419
|
-
* ### Integração com Material-UI
|
|
3420
|
-
* - Suporte completo a theming via `ThemeProvider`
|
|
3421
|
-
* - Props diretas para componentes internos (`SnackbarProps`, `PaperProps`)
|
|
3422
|
-
* - Compatibilidade com design tokens customizados
|
|
3423
|
-
* - Responsividade automática em diferentes viewport sizes
|
|
3424
|
-
*
|
|
3425
|
-
* ### Debug e Desenvolvimento
|
|
3426
|
-
* - Prop `debug` força exibição independente do estado de consentimento
|
|
3427
|
-
* - Logging automático de interações do usuário quando ativo
|
|
3428
|
-
* - Suporte a React DevTools para inspecionar props
|
|
3429
|
-
*
|
|
3430
|
-
* @example Configuração básica
|
|
3431
|
-
* ```tsx
|
|
3432
|
-
* <CookieBanner
|
|
3433
|
-
* policyLinkUrl="/privacy-policy"
|
|
3434
|
-
* blocking={false}
|
|
3435
|
-
* />
|
|
3436
|
-
* ```
|
|
3437
|
-
*
|
|
3438
|
-
* @example Configuração avançada com customização
|
|
3439
|
-
* ```tsx
|
|
3440
|
-
* <CookieBanner
|
|
3441
|
-
* policyLinkUrl="https://example.com/cookies"
|
|
3442
|
-
* blocking={true}
|
|
3443
|
-
* hideBranding={true}
|
|
3444
|
-
* debug={process.env.NODE_ENV === 'development'}
|
|
3445
|
-
* SnackbarProps={{
|
|
3446
|
-
* anchorOrigin: { vertical: 'top', horizontal: 'center' }
|
|
3447
|
-
* }}
|
|
3448
|
-
* PaperProps={{
|
|
3449
|
-
* elevation: 8,
|
|
3450
|
-
* sx: { borderRadius: 2 }
|
|
3451
|
-
* }}
|
|
3452
|
-
* />
|
|
3453
|
-
* ```
|
|
3454
|
-
*
|
|
3455
|
-
* @public
|
|
3456
|
-
* @since 0.1.0
|
|
3457
|
-
*/
|
|
3458
|
-
interface CookieBannerProps {
|
|
3459
|
-
/**
|
|
3460
|
-
* URL para a política de privacidade ou cookies do site.
|
|
3461
|
-
*
|
|
3462
|
-
* @remarks
|
|
3463
|
-
* Quando fornecida, aparece como link "Política de Privacidade" no banner.
|
|
3464
|
-
* Link abre em nova aba/janela (`target="_blank"`) por segurança.
|
|
3465
|
-
*
|
|
3466
|
-
* @example "/privacy-policy" | "https://example.com/cookies"
|
|
3467
|
-
*/
|
|
3468
|
-
policyLinkUrl?: string;
|
|
3469
|
-
/**
|
|
3470
|
-
* URL para os termos de uso do site (opcional). Quando fornecida, será considerada uma rota "segura"
|
|
3471
|
-
* para não aplicar bloqueio total (overlay) mesmo em modo bloqueante.
|
|
3472
|
-
*/
|
|
3473
|
-
termsLinkUrl?: string;
|
|
3474
|
-
/**
|
|
3475
|
-
* Força exibição do banner em modo de debug, independente do consentimento.
|
|
3476
|
-
*
|
|
3477
|
-
* @remarks
|
|
3478
|
-
* Útil durante desenvolvimento para testar diferentes estados visuais.
|
|
3479
|
-
* **Nunca deixe `true` em produção** - causará exibição permanente do banner.
|
|
3480
|
-
*
|
|
3481
|
-
* @defaultValue false
|
|
3482
|
-
*/
|
|
3483
|
-
debug?: boolean;
|
|
3484
|
-
/**
|
|
3485
|
-
* Controla se o banner bloqueia interação com o restante da página.
|
|
3486
|
-
*
|
|
3487
|
-
* @remarks
|
|
3488
|
-
* - `true`: Banner como modal/overlay, bloqueia interação até decisão
|
|
3489
|
-
* - `false`: Banner como snackbar, permite navegação normal
|
|
3490
|
-
*
|
|
3491
|
-
* Banner bloqueante é mais eficaz para compliance, mas pode afetar UX.
|
|
3492
|
-
*
|
|
3493
|
-
* @defaultValue true
|
|
3494
|
-
*/
|
|
3495
|
-
blocking?: boolean;
|
|
3496
|
-
/**
|
|
3497
|
-
* Oculta a marca "fornecido por LÉdipO.eti.br" no banner.
|
|
3498
|
-
*
|
|
3499
|
-
* @remarks
|
|
3500
|
-
* A biblioteca é open-source e gratuita. O branding é uma forma de apoiar
|
|
3501
|
-
* o projeto, mas pode ser removido se necessário para sua marca.
|
|
3502
|
-
*
|
|
3503
|
-
* @defaultValue false
|
|
3504
|
-
*/
|
|
3505
|
-
hideBranding?: boolean;
|
|
3506
|
-
/**
|
|
3507
|
-
* Propriedades personalizadas para o componente Snackbar (modo não-bloqueante).
|
|
3508
|
-
*
|
|
3509
|
-
* @remarks
|
|
3510
|
-
* Aplica-se apenas quando `blocking={false}`. Permite customização completa
|
|
3511
|
-
* da posição, animação e comportamento do snackbar do Material-UI.
|
|
3512
|
-
*
|
|
3513
|
-
* @example
|
|
3514
|
-
* ```tsx
|
|
3515
|
-
* SnackbarProps={{
|
|
3516
|
-
* anchorOrigin: { vertical: 'top', horizontal: 'center' },
|
|
3517
|
-
* autoHideDuration: null, // Banner fica até decisão do usuário
|
|
3518
|
-
* TransitionComponent: Slide
|
|
3519
|
-
* }}
|
|
3520
|
-
* ```
|
|
3521
|
-
*/
|
|
3522
|
-
SnackbarProps?: Partial<SnackbarProps>;
|
|
3523
|
-
/**
|
|
3524
|
-
* Propriedades personalizadas para o componente Paper que envolve o conteúdo.
|
|
3525
|
-
*
|
|
3526
|
-
* @remarks
|
|
3527
|
-
* Permite customização avançada da aparência: elevação, bordas, cores, etc.
|
|
3528
|
-
* Aplicado em ambos os modos (bloqueante e não-bloqueante).
|
|
3529
|
-
*
|
|
3530
|
-
* @example
|
|
3531
|
-
* ```tsx
|
|
3532
|
-
* PaperProps={{
|
|
3533
|
-
* elevation: 12,
|
|
3534
|
-
* sx: {
|
|
3535
|
-
* borderRadius: '16px',
|
|
3536
|
-
* border: '2px solid',
|
|
3537
|
-
* borderColor: 'primary.main'
|
|
3538
|
-
* }
|
|
3539
|
-
* }}
|
|
3540
|
-
* ```
|
|
3541
|
-
*/
|
|
3542
|
-
PaperProps?: Partial<PaperProps>;
|
|
3543
|
-
}
|
|
3544
|
-
/**
|
|
3545
|
-
* Banner principal de consentimento LGPD que solicita decisão do usuário sobre cookies.
|
|
3546
|
-
* @component
|
|
3547
|
-
* @category Components
|
|
3548
|
-
* @remarks
|
|
3549
|
-
* O CookieBanner é o ponto de entrada principal para interação com o sistema de consentimento.
|
|
3550
|
-
* Aparece automaticamente quando o usuário ainda não tomou decisão sobre cookies,
|
|
3551
|
-
* oferecendo opções claras de aceitar, rejeitar ou personalizar preferências.
|
|
3552
|
-
*
|
|
3553
|
-
* ### Funcionalidades Principais
|
|
3554
|
-
* - **Exibição condicional**: Aparece apenas se usuário não deu consentimento
|
|
3555
|
-
* - **Duas modalidades**: Bloqueante (modal) ou não-bloqueante (snackbar)
|
|
3556
|
-
* - **Ações do usuário**: Aceitar tudo, rejeitar tudo, ou abrir preferências
|
|
3557
|
-
* - **Link para política**: Opção de link para política de privacidade
|
|
3558
|
-
* - **Branding opcional**: Marca discreta "fornecido por LÉdipO.eti.br"
|
|
3559
|
-
* - **Totalmente customizável**: Via props, tokens de design ou componente próprio
|
|
3560
|
-
*
|
|
3561
|
-
* ### Estados de Exibição
|
|
3562
|
-
* - **Não exibido**: Usuário já consentiu ou ainda hidratando (SSR)
|
|
3563
|
-
* - **Snackbar**: Modo não-bloqueante, permite interação com a página
|
|
3564
|
-
* - **Modal**: Modo bloqueante, impede interação até decisão
|
|
3565
|
-
* - **Debug**: Sempre visível independente do estado (desenvolvimento)
|
|
3566
|
-
*
|
|
3567
|
-
* ### Integração com Sistema
|
|
3568
|
-
* - Conecta automaticamente com `ConsentProvider`
|
|
3569
|
-
* - Usa textos do `useConsentTexts()` para i18n
|
|
3570
|
-
* - Aplica design tokens do `useDesignTokens()`
|
|
3571
|
-
* - Registra todas as interações via sistema de logging
|
|
3572
|
-
* - Suporte completo a SSR com hidratação segura
|
|
3573
|
-
*
|
|
3574
|
-
* ### Substituição Personalizada
|
|
3575
|
-
* Para controle total, use `CookieBannerComponent` no ConsentProvider:
|
|
3576
|
-
*
|
|
3577
|
-
* ```tsx
|
|
3578
|
-
* function CustomBanner() {
|
|
3579
|
-
* const { acceptAll, rejectAll } = useConsent();
|
|
3580
|
-
* return <div>Meu banner customizado</div>;
|
|
3581
|
-
* }
|
|
3582
|
-
*
|
|
3583
|
-
* <ConsentProvider CookieBannerComponent={CustomBanner}>
|
|
3584
|
-
* ```
|
|
3585
|
-
*
|
|
3586
|
-
* @param props - Propriedades para customizar comportamento e aparência do banner (tipado via CookieBannerProps)
|
|
3587
|
-
* @returns Banner de consentimento ou `null` se não deve ser exibido
|
|
3588
|
-
*
|
|
3589
|
-
* @example Uso básico (renderizado automaticamente pelo ConsentProvider)
|
|
3590
|
-
* ```typescript
|
|
3591
|
-
* // ConsentProvider renderiza CookieBanner automaticamente
|
|
3592
|
-
* function App() {
|
|
3593
|
-
* return (
|
|
3594
|
-
* // ConsentProvider envolve a aplicação
|
|
3595
|
-
* // CookieBanner aparece quando necessário
|
|
3596
|
-
* );
|
|
3597
|
-
* }
|
|
3598
|
-
* ```
|
|
3599
|
-
*
|
|
3600
|
-
* @example Customização via props no ConsentProvider
|
|
3601
|
-
* ```typescript
|
|
3602
|
-
* // Configuração com propriedades customizadas
|
|
3603
|
-
* const bannerProps = {
|
|
3604
|
-
* policyLinkUrl: "/privacy",
|
|
3605
|
-
* blocking: false,
|
|
3606
|
-
* hideBranding: true
|
|
3607
|
-
* };
|
|
3608
|
-
*
|
|
3609
|
-
* // ConsentProvider com cookieBannerProps
|
|
3610
|
-
* ```
|
|
3611
|
-
*
|
|
3612
|
-
* @example Uso manual com customização avançada
|
|
3613
|
-
* ```typescript
|
|
3614
|
-
* function App() {
|
|
3615
|
-
* const bannerConfig = {
|
|
3616
|
-
* policyLinkUrl: "https://example.com/cookies",
|
|
3617
|
-
* blocking: true,
|
|
3618
|
-
* PaperProps: { elevation: 8 },
|
|
3619
|
-
* SnackbarProps: { anchorOrigin: { vertical: 'top' as const } }
|
|
3620
|
-
* };
|
|
3621
|
-
*
|
|
3622
|
-
* // Renderização manual com config avançada
|
|
3623
|
-
* return null; // CookieBanner com bannerConfig
|
|
3624
|
-
* }
|
|
3625
|
-
* ```
|
|
3626
|
-
*
|
|
3627
|
-
* @see {@link ConsentProvider} - Provider que renderiza este componente automaticamente
|
|
3628
|
-
* @see {@link useConsent} - Hook para acessar funções de consentimento
|
|
3629
|
-
* @see {@link useConsentTexts} - Hook para textos personalizáveis
|
|
3630
|
-
* @see {@link CookieBannerProps} - Interface completa de propriedades
|
|
3631
|
-
*
|
|
3632
|
-
* @public
|
|
3633
|
-
* @since 0.1.0
|
|
3634
|
-
*/
|
|
3635
|
-
declare function CookieBanner({ policyLinkUrl, termsLinkUrl, debug, blocking, hideBranding, SnackbarProps, PaperProps, }: Readonly<CookieBannerProps>): react_jsx_runtime.JSX.Element | null;
|
|
3636
|
-
|
|
3637
|
-
/**
|
|
3638
|
-
* Props para o componente FloatingPreferencesButton.
|
|
3639
|
-
*
|
|
3640
|
-
* Permite configurar posição, ícone, tooltip, e comportamento de exibição do botão flutuante
|
|
3641
|
-
* para abrir o modal de preferências de cookies LGPD.
|
|
3642
|
-
*
|
|
3643
|
-
* Todos os campos são opcionais e possuem valores padrão.
|
|
3644
|
-
*/
|
|
3645
|
-
interface FloatingPreferencesButtonProps {
|
|
3646
|
-
/** Posição do botão flutuante. Padrão: 'bottom-right' */
|
|
3647
|
-
position?: 'bottom-left' | 'bottom-right' | 'top-left' | 'top-right';
|
|
3648
|
-
/** Offset da borda em pixels. Padrão: 24 */
|
|
3649
|
-
offset?: number;
|
|
3650
|
-
/** Ícone customizado. Padrão: CookieOutlined */
|
|
3651
|
-
icon?: React$1.ReactNode;
|
|
3652
|
-
/** Tooltip customizado exibido ao passar o mouse */
|
|
3653
|
-
tooltip?: string;
|
|
3654
|
-
/** Props adicionais para o Fab do MUI */
|
|
3655
|
-
FabProps?: Partial<FabProps>;
|
|
3656
|
-
/** Se deve esconder quando consentimento já foi dado. Padrão: false */
|
|
3657
|
-
hideWhenConsented?: boolean;
|
|
3658
|
-
}
|
|
3659
|
-
/**
|
|
3660
|
-
* @component
|
|
3661
|
-
* @category Components
|
|
3662
|
-
* @since 0.3.0
|
|
3663
|
-
* Botão flutuante para abrir o modal de preferências de cookies.
|
|
3664
|
-
*
|
|
3665
|
-
* @remarks
|
|
3666
|
-
* Este componente é renderizado automaticamente pelo `ConsentProvider` após o consentimento inicial.
|
|
3667
|
-
* Ele permite ao usuário acessar rapidamente as configurações de consentimento LGPD a qualquer momento.
|
|
3668
|
-
* Você pode substituí-lo passando seu próprio componente para a prop `FloatingPreferencesButtonComponent`
|
|
3669
|
-
* no `ConsentProvider`.
|
|
3670
|
-
*
|
|
3671
|
-
* Componente memoizado para otimizar performance - só re-renderiza quando props mudam.
|
|
3672
|
-
*
|
|
3673
|
-
* @param {Readonly<FloatingPreferencesButtonProps>} props As propriedades para customizar o botão.
|
|
3674
|
-
* @returns {JSX.Element | null} O componente do botão flutuante ou `null` se não for necessário exibi-lo.
|
|
3675
|
-
*/
|
|
3676
|
-
declare const FloatingPreferencesButton: React$1.NamedExoticComponent<Readonly<FloatingPreferencesButtonProps>>;
|
|
3677
|
-
|
|
3678
|
-
/** @module src/utils/categoryUtils */
|
|
3679
|
-
/**
|
|
3680
|
-
* @category Utils
|
|
3681
|
-
* @since 0.2.0
|
|
3682
|
-
* Utilitários para gerenciamento de categorias de consentimento LGPD.
|
|
3683
|
-
*
|
|
3684
|
-
* Fornece funções para criar, validar e recuperar definições de categorias de cookies,
|
|
3685
|
-
* garantindo conformidade com a LGPD e suporte a categorias customizadas.
|
|
3686
|
-
*/
|
|
3687
|
-
|
|
3688
|
-
/**
|
|
3689
|
-
* Cria um objeto de preferências de consentimento inicial baseado na configuração de categorias do projeto.
|
|
3690
|
-
* @category Utils
|
|
3691
|
-
* @since 0.2.0
|
|
3692
|
-
* @param config A configuração de categorias do projeto. Se não fornecida, um padrão será usado.
|
|
3693
|
-
* @param defaultValue O valor padrão para categorias não essenciais. Por padrão, `false` para conformidade LGPD (rejeitar por padrão).
|
|
3694
|
-
* @returns Um objeto `ConsentPreferences` com as categorias e seus valores iniciais.
|
|
3695
|
-
* @remarks
|
|
3696
|
-
* Esta função é crucial para inicializar o estado de consentimento. Ela garante que apenas as categorias
|
|
3697
|
-
* definidas no `ConsentProvider` sejam incluídas no objeto de preferências (tanto categorias padrão
|
|
3698
|
-
* em `enabledCategories` quanto `customCategories`), alinhando-se ao princípio de minimização de dados da LGPD.
|
|
3699
|
-
*
|
|
3700
|
-
* Since v0.4.0: inclui categorias de `config.customCategories` na inicialização.
|
|
3701
|
-
* @example
|
|
3702
|
-
* ```ts
|
|
3703
|
-
* // Gera preferências com 'analytics' e 'marketing' desabilitados por padrão
|
|
3704
|
-
* const initialPrefs = createProjectPreferences({
|
|
3705
|
-
* enabledCategories: ['analytics', 'marketing']
|
|
3706
|
-
* })
|
|
3707
|
-
* // Result: { necessary: true, analytics: false, marketing: false }
|
|
3708
|
-
*
|
|
3709
|
-
* // Inclui categorias customizadas
|
|
3710
|
-
* const initialWithCustom = createProjectPreferences({
|
|
3711
|
-
* enabledCategories: ['analytics'],
|
|
3712
|
-
* customCategories: [
|
|
3713
|
-
* { id: 'abTesting', name: 'AB Testing', description: 'Experimentos de interface' },
|
|
3714
|
-
* ],
|
|
3715
|
-
* })
|
|
3716
|
-
* // Result: { necessary: true, analytics: false, abTesting: false }
|
|
3717
|
-
*
|
|
3718
|
-
* // Gera preferências com todas as categorias habilitadas
|
|
3719
|
-
* const allAcceptedPrefs = createProjectPreferences(
|
|
3720
|
-
* { enabledCategories: ['analytics', 'marketing'] },
|
|
3721
|
-
* true
|
|
3722
|
-
* )
|
|
3723
|
-
* // Result: { necessary: true, analytics: true, marketing: true }
|
|
3724
|
-
* ```
|
|
3725
|
-
*/
|
|
3726
|
-
declare function createProjectPreferences(config?: ProjectCategoriesConfig, defaultValue?: boolean): ConsentPreferences;
|
|
3727
|
-
/**
|
|
3728
|
-
* Valida um objeto de preferências de consentimento, removendo categorias que não estão permitidas pela configuração do projeto.
|
|
3729
|
-
* @category Utils
|
|
3730
|
-
* @since 0.2.6
|
|
3731
|
-
* @param preferences O objeto de preferências a ser validado.
|
|
3732
|
-
* @param config A configuração de categorias do projeto. Se não fornecida, um padrão será usado.
|
|
3733
|
-
* @returns Um novo objeto `ConsentPreferences` contendo apenas categorias válidas.
|
|
3734
|
-
* @remarks
|
|
3735
|
-
* Garante a integridade dos dados ao carregar o estado de um cookie. Se a configuração do projeto mudou
|
|
3736
|
-
* (ex: uma categoria foi removida), esta função limpa as preferências obsoletas do estado,
|
|
3737
|
-
* evitando inconsistências.
|
|
3738
|
-
*
|
|
3739
|
-
* Since v0.4.0: reconhece `config.customCategories` como válidas ao validar.
|
|
3740
|
-
* @example
|
|
3741
|
-
* ```ts
|
|
3742
|
-
* const savedPrefs = { necessary: true, analytics: true, oldCategory: false }
|
|
3743
|
-
* const currentConfig = { enabledCategories: ['analytics'] }
|
|
3744
|
-
*
|
|
3745
|
-
* const validPrefs = validateProjectPreferences(savedPrefs, currentConfig)
|
|
3746
|
-
* // Result: { necessary: true, analytics: true }
|
|
3747
|
-
* ```
|
|
3748
|
-
*/
|
|
3749
|
-
declare function validateProjectPreferences(preferences: ConsentPreferences, config?: ProjectCategoriesConfig): ConsentPreferences;
|
|
3750
|
-
/**
|
|
3751
|
-
* Retorna um array com as definições detalhadas de todas as categorias de cookies ativas no projeto.
|
|
3752
|
-
* @category Utils
|
|
3753
|
-
* @since 0.2.2
|
|
3754
|
-
* @param config A configuração de categorias do projeto. Se não fornecida, um padrão será usado.
|
|
3755
|
-
* @returns Um array de objetos `CategoryDefinition`.
|
|
3756
|
-
* @remarks
|
|
3757
|
-
* Útil para construir UIs de preferência customizadas, pois fornece os nomes e descrições
|
|
3758
|
-
* de todas as categorias que devem ser exibidas ao usuário, incluindo quaisquer `customCategories`
|
|
3759
|
-
* definidas no `ConsentProvider`.
|
|
3760
|
-
*
|
|
3761
|
-
* Since v0.4.0: inclui categorias definidas em `config.customCategories`.
|
|
3762
|
-
* @example
|
|
3763
|
-
* ```ts
|
|
3764
|
-
* const config = { enabledCategories: ['analytics'] }
|
|
3765
|
-
* const categories = getAllProjectCategories(config)
|
|
3766
|
-
* // Result:
|
|
3767
|
-
* // [
|
|
3768
|
-
* // { id: 'necessary', name: 'Necessários', ... },
|
|
3769
|
-
* // { id: 'analytics', name: 'Análise e Estatísticas', ... }
|
|
3770
|
-
* // ]
|
|
3771
|
-
* ```
|
|
3772
|
-
*/
|
|
3773
|
-
declare function getAllProjectCategories(config?: ProjectCategoriesConfig): CategoryDefinition[];
|
|
3774
|
-
|
|
3775
|
-
export { type AdvancedConsentTexts, COMMON_INTEGRATIONS, type CategoriesContextValue, type Category, type CategoryAutoConfigResult, type CategoryDefinition, type ClarityConfig, type ConsentContextValue, type ConsentCookieData, type ConsentCookieOptions, ConsentGate, type ConsentPreferences, ConsentProvider, type ConsentProviderProps, ConsentScriptLoader, type ConsentScriptLoaderProps, type ConsentState, type ConsentTexts, CookieBanner, type CookieBannerProps, type CookieDescriptor, type CorporateConfig, type CustomCookieBannerProps, type CustomFloatingPreferencesButtonProps, type CustomPreferencesModalProps, DEFAULT_PROJECT_CATEGORIES, type DesignTokens, type DeveloperGuidance, type ECommerceConfig, EXPANDED_DEFAULT_TEXTS, type FacebookPixelConfig, FloatingPreferencesButton, type FloatingPreferencesButtonProps, GUIDANCE_PRESETS, type GoogleAnalyticsConfig, type GoogleTagManagerConfig, type GuidanceConfig, type GuidanceMessage, type GuidanceSeverity, type HotjarConfig, INTEGRATION_TEMPLATES, type IntercomConfig, LogLevel, type MixpanelConfig, PreferencesModal, type PreferencesModalProps, type ProjectCategoriesConfig, type SaaSConfig, type ScriptIntegration, TEXT_TEMPLATES, type UserWayConfig, type ZendeskConfig, analyzeDeveloperConfiguration, analyzeIntegrationCategories, autoConfigureCategories, categorizeDiscoveredCookies, createClarityIntegration, createCorporateIntegrations, createDefaultConsentTheme, createECommerceIntegrations, createFacebookPixelIntegration, createGoogleAnalyticsIntegration, createGoogleTagManagerIntegration, createHotjarIntegration, createIntercomIntegration, createMixpanelIntegration, createProjectPreferences, createSaaSIntegrations, createUserWayIntegration, createZendeskChatIntegration, defaultConsentTheme, defaultTexts, detectConsentCookieName, discoverRuntimeCookies, extractCategoriesFromIntegrations, getAllProjectCategories, getCookiesInfoForCategory, loadScript, logDeveloperGuidance, openPreferencesModal, resolveTexts, setCookieCatalogOverrides, setCookieCategoryOverrides, setDebugLogging, suggestCategoryForScript, useCategories, useCategoryStatus, useConsent, useConsentHydration, useConsentScriptLoader, useConsentTexts, useDeveloperGuidance, useOpenPreferencesModal, validateIntegrationCategories, validateNecessaryClassification, validateProjectPreferences };
|
|
1
|
+
export * from '@react-lgpd-consent/mui';
|