react-lgpd-consent 0.4.4 → 0.5.1

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