react-lgpd-consent 0.2.0 → 0.2.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
@@ -183,25 +183,48 @@ interface CategoryDefinition {
183
183
  cookies?: string[];
184
184
  }
185
185
  /**
186
- * Preferências de consentimento do usuário para cada categoria.
187
- * Baseado nas categorias do Guia da ANPD, mas extensível.
186
+ * Configuração de categorias ativas no projeto.
187
+ * Define quais categorias fixas serão usadas (além de necessary)
188
+ * e quais categorias customizadas serão adicionadas.
189
+ */
190
+ interface ProjectCategoriesConfig {
191
+ /** Categorias padrão que serão ativadas (necessary sempre incluída automaticamente) */
192
+ enabledCategories?: Category[];
193
+ /** Categorias customizadas específicas do projeto */
194
+ customCategories?: CategoryDefinition[];
195
+ }
196
+ /**
197
+ * Preferências de consentimento do usuário.
198
+ * Contém apenas as categorias realmente utilizadas no projeto.
188
199
  */
189
200
  interface ConsentPreferences {
190
201
  necessary: boolean;
191
- analytics: boolean;
192
- functional: boolean;
193
- marketing: boolean;
194
- social: boolean;
195
- personalization: boolean;
196
202
  [key: string]: boolean;
197
203
  }
198
204
  /**
199
- * Estado geral do consentimento, incluindo se o usuário consentiu,
200
- * suas preferências e se o modal está aberto.
205
+ * Dados do cookie de consentimento em conformidade com LGPD/ANPD.
206
+ * Contém apenas informações essenciais para compliance e funcionamento.
201
207
  */
202
- interface ConsentState {
208
+ interface ConsentCookieData {
209
+ /** Versão do esquema do cookie para migração futura */
210
+ version: string;
211
+ /** Se o usuário já prestou consentimento */
203
212
  consented: boolean;
213
+ /** Preferências por categoria (apenas categorias ativas) */
204
214
  preferences: ConsentPreferences;
215
+ /** Timestamp ISO da primeira interação com o banner */
216
+ consentDate: string;
217
+ /** Timestamp ISO da última modificação das preferências */
218
+ lastUpdate: string;
219
+ /** Origem da decisão de consentimento */
220
+ source: 'banner' | 'modal' | 'programmatic';
221
+ }
222
+ /**
223
+ * Estado interno completo do consentimento (memória + UI).
224
+ * Inclui dados persistidos + estado da interface.
225
+ */
226
+ interface ConsentState extends ConsentCookieData {
227
+ /** Se o modal de preferências está aberto (NÃO persistido) */
205
228
  isModalOpen?: boolean;
206
229
  }
207
230
  /**
@@ -264,13 +287,18 @@ interface ConsentCookieOptions {
264
287
  * Propriedades aceitas pelo componente ConsentProvider.
265
288
  */
266
289
  interface ConsentProviderProps {
267
- /** Estado inicial do consentimento. */
290
+ /** Estado inicial do consentimento (para SSR). */
268
291
  initialState?: ConsentState;
292
+ /** Configuração de categorias ativas no projeto. */
293
+ categories?: ProjectCategoriesConfig;
269
294
  /** Textos customizados para a interface. */
270
295
  texts?: Partial<ConsentTexts>;
271
296
  /** Tema customizado para os componentes MUI. Aceita qualquer propriedade. */
272
297
  theme?: any;
273
- /** Categorias customizadas de cookies (complementa as padrão). */
298
+ /**
299
+ * @deprecated Use `categories.customCategories` em vez disso.
300
+ * Categorias customizadas de cookies (complementa as padrão).
301
+ */
274
302
  customCategories?: CategoryDefinition[];
275
303
  /** Integrações nativas de scripts (Google Analytics, etc.). */
276
304
  scriptIntegrations?: ScriptIntegration[];
@@ -280,6 +308,8 @@ interface ConsentProviderProps {
280
308
  preferencesModalProps?: Record<string, any>;
281
309
  /** Desabilita o modal automático (para usar componente totalmente customizado). */
282
310
  disableAutomaticModal?: boolean;
311
+ /** Comportamento do banner: true = bloqueia até decisão, false = não bloqueia */
312
+ blocking?: boolean;
283
313
  /** Esconde branding "fornecido por LÉdipO.eti.br". */
284
314
  hideBranding?: boolean;
285
315
  /** Callback chamado quando o consentimento é dado. */
@@ -332,7 +362,9 @@ interface ConsentContextValue {
332
362
  * <App />
333
363
  * </ConsentProvider>
334
364
  */
335
- declare function ConsentProvider({ initialState, texts: textsProp, theme, customCategories, scriptIntegrations, PreferencesModalComponent, preferencesModalProps, disableAutomaticModal, hideBranding, onConsentGiven, onPreferencesSaved, cookie: cookieOpts, children, }: Readonly<ConsentProviderProps>): react_jsx_runtime.JSX.Element;
365
+ declare function ConsentProvider({ initialState, categories, // NOVO: configuração completa de categorias
366
+ texts: textsProp, theme, customCategories, // LEGACY: compatibilidade
367
+ scriptIntegrations, PreferencesModalComponent, preferencesModalProps, disableAutomaticModal, hideBranding, onConsentGiven, onPreferencesSaved, cookie: cookieOpts, children, }: Readonly<ConsentProviderProps>): react_jsx_runtime.JSX.Element;
336
368
 
337
369
  /**
338
370
  * Hook principal para acessar e manipular o estado de consentimento de cookies.
@@ -368,14 +400,73 @@ declare function useConsentTexts(): ConsentTexts;
368
400
  declare function useConsentHydration(): boolean;
369
401
 
370
402
  /**
371
- * Hook para acessar as categorias customizadas.
372
- * Retorna apenas as categorias customizadas (não as padrão analytics/marketing).
403
+ * Sistema de orientações para developers sobre configuração de categorias.
404
+ * Ajuda a manter coerência entre configuração da lib e componentes customizados.
405
+ */
406
+ interface DeveloperGuidance {
407
+ /** Avisos sobre configuração inconsistente */
408
+ warnings: string[];
409
+ /** Sugestões de melhoria */
410
+ suggestions: string[];
411
+ /** Informações sobre categorias ativas */
412
+ activeCategoriesInfo: {
413
+ id: string;
414
+ name: string;
415
+ description: string;
416
+ essential: boolean;
417
+ uiRequired: boolean;
418
+ }[];
419
+ /** Se usa configuração padrão (não explícita) */
420
+ usingDefaults: boolean;
421
+ }
422
+ /**
423
+ * Configuração padrão quando developer não especifica categorias.
424
+ * Baseado nas necessidades mais comuns em conformidade LGPD.
373
425
  */
374
- declare function useCustomCategories(): CategoryDefinition[];
426
+ declare const DEFAULT_PROJECT_CATEGORIES: ProjectCategoriesConfig;
427
+ /**
428
+ * Analisa configuração do projeto e retorna orientações para o developer.
429
+ */
430
+ declare function analyzeDeveloperConfiguration(config?: ProjectCategoriesConfig): DeveloperGuidance;
431
+
432
+ /**
433
+ * Context para informações sobre categorias ativas no projeto.
434
+ * Fornece orientações e validações para components UI.
435
+ */
436
+ interface CategoriesContextValue {
437
+ /** Configuração final das categorias (com padrão aplicado) */
438
+ config: ProjectCategoriesConfig;
439
+ /** Análise e orientações para developers */
440
+ guidance: DeveloperGuidance;
441
+ /** Categorias que precisam de toggle na UI */
442
+ toggleableCategories: DeveloperGuidance['activeCategoriesInfo'];
443
+ /** Todas as categorias ativas */
444
+ allCategories: DeveloperGuidance['activeCategoriesInfo'];
445
+ /** LEGACY: Apenas categorias customizadas (backward compatibility) */
446
+ legacyCategories: CategoryDefinition[];
447
+ }
448
+ /**
449
+ * Hook para acessar informações sobre categorias ativas.
450
+ * Usado por componentes UI para renderizar adequadamente.
451
+ */
452
+ declare function useCategories(): CategoriesContextValue;
375
453
  /**
376
- * Hook para obter todas as categorias (padrão + customizadas).
454
+ * Hook de conveniência para verificar se uma categoria específica está ativa.
377
455
  */
378
- declare function useAllCategories(): CategoryDefinition[];
456
+ declare function useCategoryStatus(categoryId: string): {
457
+ isActive: boolean;
458
+ isEssential: boolean;
459
+ needsToggle: boolean;
460
+ name: string | undefined;
461
+ description: string | undefined;
462
+ };
463
+ /**
464
+ * LEGACY: Hook para acessar as categorias customizadas.
465
+ * Mantido para backward compatibility.
466
+ *
467
+ * @deprecated Use useCategories() ao invés disso para acesso completo às categorias.
468
+ */
469
+ declare function useCustomCategories(): CategoryDefinition[];
379
470
 
380
471
  declare function ConsentGate(props: Readonly<{
381
472
  category: string;
@@ -452,4 +543,4 @@ declare function ConsentScriptLoader({ integrations, reloadOnChange, }: Readonly
452
543
  */
453
544
  declare function useConsentScriptLoader(): (integration: ScriptIntegration) => Promise<boolean>;
454
545
 
455
- export { COMMON_INTEGRATIONS, type Category, type CategoryDefinition, type ConsentCookieOptions, ConsentGate, type ConsentPreferences, ConsentProvider, ConsentScriptLoader, type ConsentState, type ConsentTexts, CookieBanner, FloatingPreferencesButton, type GoogleAnalyticsConfig, type GoogleTagManagerConfig, PreferencesModal, type ScriptIntegration, type UserWayConfig, createGoogleAnalyticsIntegration, createGoogleTagManagerIntegration, createUserWayIntegration, defaultConsentTheme, loadScript, useAllCategories, useConsent, useConsentHydration, useConsentScriptLoader, useConsentTexts, useCustomCategories };
546
+ export { COMMON_INTEGRATIONS, type Category, type CategoryDefinition, type ConsentCookieOptions, ConsentGate, type ConsentPreferences, ConsentProvider, ConsentScriptLoader, type ConsentState, type ConsentTexts, CookieBanner, DEFAULT_PROJECT_CATEGORIES, type DeveloperGuidance, FloatingPreferencesButton, type GoogleAnalyticsConfig, type GoogleTagManagerConfig, PreferencesModal, type ProjectCategoriesConfig, type ScriptIntegration, type UserWayConfig, analyzeDeveloperConfiguration, createGoogleAnalyticsIntegration, createGoogleTagManagerIntegration, createUserWayIntegration, defaultConsentTheme, loadScript, useCategories, useCategoryStatus, useConsent, useConsentHydration, useConsentScriptLoader, useConsentTexts, useCustomCategories };
package/dist/index.d.ts CHANGED
@@ -183,25 +183,48 @@ interface CategoryDefinition {
183
183
  cookies?: string[];
184
184
  }
185
185
  /**
186
- * Preferências de consentimento do usuário para cada categoria.
187
- * Baseado nas categorias do Guia da ANPD, mas extensível.
186
+ * Configuração de categorias ativas no projeto.
187
+ * Define quais categorias fixas serão usadas (além de necessary)
188
+ * e quais categorias customizadas serão adicionadas.
189
+ */
190
+ interface ProjectCategoriesConfig {
191
+ /** Categorias padrão que serão ativadas (necessary sempre incluída automaticamente) */
192
+ enabledCategories?: Category[];
193
+ /** Categorias customizadas específicas do projeto */
194
+ customCategories?: CategoryDefinition[];
195
+ }
196
+ /**
197
+ * Preferências de consentimento do usuário.
198
+ * Contém apenas as categorias realmente utilizadas no projeto.
188
199
  */
189
200
  interface ConsentPreferences {
190
201
  necessary: boolean;
191
- analytics: boolean;
192
- functional: boolean;
193
- marketing: boolean;
194
- social: boolean;
195
- personalization: boolean;
196
202
  [key: string]: boolean;
197
203
  }
198
204
  /**
199
- * Estado geral do consentimento, incluindo se o usuário consentiu,
200
- * suas preferências e se o modal está aberto.
205
+ * Dados do cookie de consentimento em conformidade com LGPD/ANPD.
206
+ * Contém apenas informações essenciais para compliance e funcionamento.
201
207
  */
202
- interface ConsentState {
208
+ interface ConsentCookieData {
209
+ /** Versão do esquema do cookie para migração futura */
210
+ version: string;
211
+ /** Se o usuário já prestou consentimento */
203
212
  consented: boolean;
213
+ /** Preferências por categoria (apenas categorias ativas) */
204
214
  preferences: ConsentPreferences;
215
+ /** Timestamp ISO da primeira interação com o banner */
216
+ consentDate: string;
217
+ /** Timestamp ISO da última modificação das preferências */
218
+ lastUpdate: string;
219
+ /** Origem da decisão de consentimento */
220
+ source: 'banner' | 'modal' | 'programmatic';
221
+ }
222
+ /**
223
+ * Estado interno completo do consentimento (memória + UI).
224
+ * Inclui dados persistidos + estado da interface.
225
+ */
226
+ interface ConsentState extends ConsentCookieData {
227
+ /** Se o modal de preferências está aberto (NÃO persistido) */
205
228
  isModalOpen?: boolean;
206
229
  }
207
230
  /**
@@ -264,13 +287,18 @@ interface ConsentCookieOptions {
264
287
  * Propriedades aceitas pelo componente ConsentProvider.
265
288
  */
266
289
  interface ConsentProviderProps {
267
- /** Estado inicial do consentimento. */
290
+ /** Estado inicial do consentimento (para SSR). */
268
291
  initialState?: ConsentState;
292
+ /** Configuração de categorias ativas no projeto. */
293
+ categories?: ProjectCategoriesConfig;
269
294
  /** Textos customizados para a interface. */
270
295
  texts?: Partial<ConsentTexts>;
271
296
  /** Tema customizado para os componentes MUI. Aceita qualquer propriedade. */
272
297
  theme?: any;
273
- /** Categorias customizadas de cookies (complementa as padrão). */
298
+ /**
299
+ * @deprecated Use `categories.customCategories` em vez disso.
300
+ * Categorias customizadas de cookies (complementa as padrão).
301
+ */
274
302
  customCategories?: CategoryDefinition[];
275
303
  /** Integrações nativas de scripts (Google Analytics, etc.). */
276
304
  scriptIntegrations?: ScriptIntegration[];
@@ -280,6 +308,8 @@ interface ConsentProviderProps {
280
308
  preferencesModalProps?: Record<string, any>;
281
309
  /** Desabilita o modal automático (para usar componente totalmente customizado). */
282
310
  disableAutomaticModal?: boolean;
311
+ /** Comportamento do banner: true = bloqueia até decisão, false = não bloqueia */
312
+ blocking?: boolean;
283
313
  /** Esconde branding "fornecido por LÉdipO.eti.br". */
284
314
  hideBranding?: boolean;
285
315
  /** Callback chamado quando o consentimento é dado. */
@@ -332,7 +362,9 @@ interface ConsentContextValue {
332
362
  * <App />
333
363
  * </ConsentProvider>
334
364
  */
335
- declare function ConsentProvider({ initialState, texts: textsProp, theme, customCategories, scriptIntegrations, PreferencesModalComponent, preferencesModalProps, disableAutomaticModal, hideBranding, onConsentGiven, onPreferencesSaved, cookie: cookieOpts, children, }: Readonly<ConsentProviderProps>): react_jsx_runtime.JSX.Element;
365
+ declare function ConsentProvider({ initialState, categories, // NOVO: configuração completa de categorias
366
+ texts: textsProp, theme, customCategories, // LEGACY: compatibilidade
367
+ scriptIntegrations, PreferencesModalComponent, preferencesModalProps, disableAutomaticModal, hideBranding, onConsentGiven, onPreferencesSaved, cookie: cookieOpts, children, }: Readonly<ConsentProviderProps>): react_jsx_runtime.JSX.Element;
336
368
 
337
369
  /**
338
370
  * Hook principal para acessar e manipular o estado de consentimento de cookies.
@@ -368,14 +400,73 @@ declare function useConsentTexts(): ConsentTexts;
368
400
  declare function useConsentHydration(): boolean;
369
401
 
370
402
  /**
371
- * Hook para acessar as categorias customizadas.
372
- * Retorna apenas as categorias customizadas (não as padrão analytics/marketing).
403
+ * Sistema de orientações para developers sobre configuração de categorias.
404
+ * Ajuda a manter coerência entre configuração da lib e componentes customizados.
405
+ */
406
+ interface DeveloperGuidance {
407
+ /** Avisos sobre configuração inconsistente */
408
+ warnings: string[];
409
+ /** Sugestões de melhoria */
410
+ suggestions: string[];
411
+ /** Informações sobre categorias ativas */
412
+ activeCategoriesInfo: {
413
+ id: string;
414
+ name: string;
415
+ description: string;
416
+ essential: boolean;
417
+ uiRequired: boolean;
418
+ }[];
419
+ /** Se usa configuração padrão (não explícita) */
420
+ usingDefaults: boolean;
421
+ }
422
+ /**
423
+ * Configuração padrão quando developer não especifica categorias.
424
+ * Baseado nas necessidades mais comuns em conformidade LGPD.
373
425
  */
374
- declare function useCustomCategories(): CategoryDefinition[];
426
+ declare const DEFAULT_PROJECT_CATEGORIES: ProjectCategoriesConfig;
427
+ /**
428
+ * Analisa configuração do projeto e retorna orientações para o developer.
429
+ */
430
+ declare function analyzeDeveloperConfiguration(config?: ProjectCategoriesConfig): DeveloperGuidance;
431
+
432
+ /**
433
+ * Context para informações sobre categorias ativas no projeto.
434
+ * Fornece orientações e validações para components UI.
435
+ */
436
+ interface CategoriesContextValue {
437
+ /** Configuração final das categorias (com padrão aplicado) */
438
+ config: ProjectCategoriesConfig;
439
+ /** Análise e orientações para developers */
440
+ guidance: DeveloperGuidance;
441
+ /** Categorias que precisam de toggle na UI */
442
+ toggleableCategories: DeveloperGuidance['activeCategoriesInfo'];
443
+ /** Todas as categorias ativas */
444
+ allCategories: DeveloperGuidance['activeCategoriesInfo'];
445
+ /** LEGACY: Apenas categorias customizadas (backward compatibility) */
446
+ legacyCategories: CategoryDefinition[];
447
+ }
448
+ /**
449
+ * Hook para acessar informações sobre categorias ativas.
450
+ * Usado por componentes UI para renderizar adequadamente.
451
+ */
452
+ declare function useCategories(): CategoriesContextValue;
375
453
  /**
376
- * Hook para obter todas as categorias (padrão + customizadas).
454
+ * Hook de conveniência para verificar se uma categoria específica está ativa.
377
455
  */
378
- declare function useAllCategories(): CategoryDefinition[];
456
+ declare function useCategoryStatus(categoryId: string): {
457
+ isActive: boolean;
458
+ isEssential: boolean;
459
+ needsToggle: boolean;
460
+ name: string | undefined;
461
+ description: string | undefined;
462
+ };
463
+ /**
464
+ * LEGACY: Hook para acessar as categorias customizadas.
465
+ * Mantido para backward compatibility.
466
+ *
467
+ * @deprecated Use useCategories() ao invés disso para acesso completo às categorias.
468
+ */
469
+ declare function useCustomCategories(): CategoryDefinition[];
379
470
 
380
471
  declare function ConsentGate(props: Readonly<{
381
472
  category: string;
@@ -452,4 +543,4 @@ declare function ConsentScriptLoader({ integrations, reloadOnChange, }: Readonly
452
543
  */
453
544
  declare function useConsentScriptLoader(): (integration: ScriptIntegration) => Promise<boolean>;
454
545
 
455
- export { COMMON_INTEGRATIONS, type Category, type CategoryDefinition, type ConsentCookieOptions, ConsentGate, type ConsentPreferences, ConsentProvider, ConsentScriptLoader, type ConsentState, type ConsentTexts, CookieBanner, FloatingPreferencesButton, type GoogleAnalyticsConfig, type GoogleTagManagerConfig, PreferencesModal, type ScriptIntegration, type UserWayConfig, createGoogleAnalyticsIntegration, createGoogleTagManagerIntegration, createUserWayIntegration, defaultConsentTheme, loadScript, useAllCategories, useConsent, useConsentHydration, useConsentScriptLoader, useConsentTexts, useCustomCategories };
546
+ export { COMMON_INTEGRATIONS, type Category, type CategoryDefinition, type ConsentCookieOptions, ConsentGate, type ConsentPreferences, ConsentProvider, ConsentScriptLoader, type ConsentState, type ConsentTexts, CookieBanner, DEFAULT_PROJECT_CATEGORIES, type DeveloperGuidance, FloatingPreferencesButton, type GoogleAnalyticsConfig, type GoogleTagManagerConfig, PreferencesModal, type ProjectCategoriesConfig, type ScriptIntegration, type UserWayConfig, analyzeDeveloperConfiguration, createGoogleAnalyticsIntegration, createGoogleTagManagerIntegration, createUserWayIntegration, defaultConsentTheme, loadScript, useCategories, useCategoryStatus, useConsent, useConsentHydration, useConsentScriptLoader, useConsentTexts, useCustomCategories };
package/dist/index.js CHANGED
@@ -1,14 +1,17 @@
1
1
  import {
2
2
  Branding,
3
3
  ConsentProvider,
4
+ DEFAULT_PROJECT_CATEGORIES,
4
5
  PreferencesModal,
6
+ analyzeDeveloperConfiguration,
5
7
  defaultConsentTheme,
6
- useAllCategories,
8
+ useCategories,
9
+ useCategoryStatus,
7
10
  useConsent,
8
11
  useConsentHydration,
9
12
  useConsentTexts,
10
13
  useCustomCategories
11
- } from "./chunk-JTPCDTOQ.js";
14
+ } from "./chunk-JAX63PBG.js";
12
15
 
13
16
  // src/components/CookieBanner.tsx
14
17
  import Button from "@mui/material/Button";
@@ -361,14 +364,17 @@ export {
361
364
  ConsentProvider,
362
365
  ConsentScriptLoader,
363
366
  CookieBanner,
367
+ DEFAULT_PROJECT_CATEGORIES,
364
368
  FloatingPreferencesButton,
365
369
  PreferencesModal,
370
+ analyzeDeveloperConfiguration,
366
371
  createGoogleAnalyticsIntegration,
367
372
  createGoogleTagManagerIntegration,
368
373
  createUserWayIntegration,
369
374
  defaultConsentTheme,
370
375
  loadScript,
371
- useAllCategories,
376
+ useCategories,
377
+ useCategoryStatus,
372
378
  useConsent,
373
379
  useConsentHydration,
374
380
  useConsentScriptLoader,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-lgpd-consent",
3
- "version": "0.2.0",
3
+ "version": "0.2.2",
4
4
  "description": "Biblioteca completa de consentimento LGPD com 6 categorias ANPD, integrações nativas e sistema extensível para React.",
5
5
  "keywords": [
6
6
  "lgpd",