react-lgpd-consent 0.3.0 → 0.3.2

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