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