react-lgpd-consent 0.2.2 → 0.2.4

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.ts CHANGED
@@ -284,41 +284,198 @@ interface ConsentCookieOptions {
284
284
  path: string;
285
285
  }
286
286
  /**
287
- * Propriedades aceitas pelo componente ConsentProvider.
287
+ * Propriedades do componente ConsentProvider - configuração principal da biblioteca.
288
+ *
289
+ * @example Uso básico (configuração mínima):
290
+ * ```tsx
291
+ * <ConsentProvider
292
+ * categories={{ enabledCategories: ['analytics'] }}
293
+ * >
294
+ * <App />
295
+ * </ConsentProvider>
296
+ * ```
297
+ *
298
+ * @example Configuração completa com textos ANPD:
299
+ * ```tsx
300
+ * <ConsentProvider
301
+ * categories={{
302
+ * enabledCategories: ['analytics', 'functional'],
303
+ * customCategories: [{
304
+ * id: 'governo',
305
+ * name: 'Cookies Governamentais',
306
+ * description: 'Coleta para estatísticas públicas',
307
+ * essential: false
308
+ * }]
309
+ * }}
310
+ * texts={{
311
+ * bannerMessage: 'Utilizamos cookies conforme LGPD...',
312
+ * controllerInfo: 'Controlado por: Ministério XYZ - CNPJ: 00.000.000/0001-00',
313
+ * dataTypes: 'Coletamos: dados de navegação para análise estatística',
314
+ * userRights: 'Direitos: acessar, corrigir, excluir dados',
315
+ * contactInfo: 'DPO: dpo@ministerio.gov.br'
316
+ * }}
317
+ * onConsentGiven={(state) => console.log('Consentimento:', state)}
318
+ * >
319
+ * <App />
320
+ * </ConsentProvider>
321
+ * ```
288
322
  */
289
323
  interface ConsentProviderProps {
290
- /** Estado inicial do consentimento (para SSR). */
324
+ /**
325
+ * Estado inicial do consentimento para hidratação SSR.
326
+ *
327
+ * @example
328
+ * ```tsx
329
+ * // Em Next.js para evitar flash do banner
330
+ * <ConsentProvider initialState={{ consented: true, preferences: {...} }}>
331
+ * ```
332
+ */
291
333
  initialState?: ConsentState;
292
- /** Configuração de categorias ativas no projeto. */
334
+ /**
335
+ * Configuração das categorias de cookies utilizadas no projeto.
336
+ * Define quais categorias padrão serão habilitadas e categorias customizadas.
337
+ *
338
+ * @example Apenas analytics:
339
+ * ```tsx
340
+ * categories={{ enabledCategories: ['analytics'] }}
341
+ * ```
342
+ *
343
+ * @example Com categoria customizada:
344
+ * ```tsx
345
+ * categories={{
346
+ * enabledCategories: ['analytics', 'marketing'],
347
+ * customCategories: [{
348
+ * id: 'pesquisa',
349
+ * name: 'Cookies de Pesquisa',
350
+ * description: 'Coleta feedback e opinião dos usuários',
351
+ * essential: false
352
+ * }]
353
+ * }}
354
+ * ```
355
+ */
293
356
  categories?: ProjectCategoriesConfig;
294
- /** Textos customizados para a interface. */
357
+ /**
358
+ * Textos customizados da interface (banner e modal).
359
+ * Todos os campos são opcionais - valores não fornecidos usam o padrão em português.
360
+ *
361
+ * @example Textos básicos:
362
+ * ```tsx
363
+ * texts={{
364
+ * bannerMessage: 'We use cookies...',
365
+ * acceptAll: 'Accept All',
366
+ * declineAll: 'Reject'
367
+ * }}
368
+ * ```
369
+ *
370
+ * @example Textos ANPD para compliance:
371
+ * ```tsx
372
+ * texts={{
373
+ * controllerInfo: 'Controlado por: Empresa XYZ - CNPJ: 12.345.678/0001-90',
374
+ * dataTypes: 'Coletamos: endereço IP, preferências de navegação',
375
+ * userRights: 'Você pode solicitar acesso, correção ou exclusão dos dados'
376
+ * }}
377
+ * ```
378
+ */
295
379
  texts?: Partial<ConsentTexts>;
296
- /** Tema customizado para os componentes MUI. Aceita qualquer propriedade. */
380
+ /**
381
+ * Tema customizado Material-UI aplicado aos componentes.
382
+ * Aceita qualquer objeto que será passado para ThemeProvider.
383
+ *
384
+ * @example
385
+ * ```tsx
386
+ * theme={{
387
+ * palette: { primary: { main: '#1976d2' } },
388
+ * components: { MuiButton: { styleOverrides: { root: { borderRadius: 8 } } } }
389
+ * }}
390
+ * ```
391
+ */
297
392
  theme?: any;
298
393
  /**
299
- * @deprecated Use `categories.customCategories` em vez disso.
300
- * Categorias customizadas de cookies (complementa as padrão).
394
+ * @deprecated Usar `categories.customCategories` em vez disso.
395
+ * Mantido para compatibilidade com v0.1.x
301
396
  */
302
397
  customCategories?: CategoryDefinition[];
303
- /** Integrações nativas de scripts (Google Analytics, etc.). */
398
+ /**
399
+ * Integrações nativas de scripts terceiros (Google Analytics, etc.).
400
+ * Scripts são carregados automaticamente baseado no consentimento.
401
+ *
402
+ * @example
403
+ * ```tsx
404
+ * import { createGoogleAnalyticsIntegration } from 'react-lgpd-consent'
405
+ *
406
+ * scriptIntegrations={[
407
+ * createGoogleAnalyticsIntegration('GA_MEASUREMENT_ID')
408
+ * ]}
409
+ * ```
410
+ */
304
411
  scriptIntegrations?: ScriptIntegration[];
305
- /** Componente customizado para modal de preferências. */
412
+ /**
413
+ * Componente customizado para substituir o modal padrão de preferências.
414
+ * Deve implementar a lógica de consentimento usando os hooks da biblioteca.
415
+ */
306
416
  PreferencesModalComponent?: React.ComponentType<any>;
307
- /** Props adicionais para o modal customizado. */
417
+ /** Props adicionais passadas para o modal customizado. */
308
418
  preferencesModalProps?: Record<string, any>;
309
- /** Desabilita o modal automático (para usar componente totalmente customizado). */
419
+ /**
420
+ * Desabilita o modal automático de preferências.
421
+ * Útil quando se quer controle total sobre quando/como exibir as opções.
422
+ */
310
423
  disableAutomaticModal?: boolean;
311
- /** Comportamento do banner: true = bloqueia até decisão, false = não bloqueia */
424
+ /**
425
+ * Comportamento do banner de consentimento:
426
+ * - `false` (padrão): Banner não-intrusivo, usuário pode navegar livremente
427
+ * - `true`: Banner bloqueia interação até decisão (compliance rigorosa)
428
+ */
312
429
  blocking?: boolean;
313
- /** Esconde branding "fornecido por LÉdipO.eti.br". */
430
+ /** Oculta o branding "fornecido por LÉdipO.eti.br" dos componentes. */
314
431
  hideBranding?: boolean;
315
- /** Callback chamado quando o consentimento é dado. */
432
+ /**
433
+ * Callback executado quando usuário dá consentimento pela primeira vez.
434
+ * Útil para inicializar analytics, registrar evento, etc.
435
+ *
436
+ * @example
437
+ * ```tsx
438
+ * onConsentGiven={(state) => {
439
+ * console.log('Consentimento registrado:', state)
440
+ * // Inicializar Google Analytics, etc.
441
+ * }}
442
+ * ```
443
+ */
316
444
  onConsentGiven?: (state: ConsentState) => void;
317
- /** Callback chamado ao salvar preferências. */
445
+ /**
446
+ * Callback executado quando usuário modifica preferências.
447
+ * Executado após salvar as mudanças.
448
+ *
449
+ * @example
450
+ * ```tsx
451
+ * onPreferencesSaved={(prefs) => {
452
+ * console.log('Novas preferências:', prefs)
453
+ * // Reconfigurar scripts baseado nas preferências
454
+ * }}
455
+ * ```
456
+ */
318
457
  onPreferencesSaved?: (prefs: ConsentPreferences) => void;
319
- /** Configurações customizadas do cookie. */
458
+ /**
459
+ * Configurações do cookie de consentimento.
460
+ * Valores não fornecidos usam padrões seguros para LGPD.
461
+ *
462
+ * @example
463
+ * ```tsx
464
+ * cookie={{
465
+ * name: 'meuAppConsent',
466
+ * maxAgeDays: 180,
467
+ * sameSite: 'Strict'
468
+ * }}
469
+ * ```
470
+ */
320
471
  cookie?: Partial<ConsentCookieOptions>;
321
- /** Elementos filhos do provider. */
472
+ /**
473
+ * Desabilita os avisos e sugestões para desenvolvedores no console.
474
+ * Útil para ambientes de produção ou quando os avisos não são desejados.
475
+ * Por padrão, os avisos já são desabilitados em builds de produção.
476
+ */
477
+ disableDeveloperGuidance?: boolean;
478
+ /** Elementos filhos - toda a aplicação que precisa de contexto de consentimento. */
322
479
  children: React.ReactNode;
323
480
  }
324
481
  /**
@@ -364,7 +521,9 @@ interface ConsentContextValue {
364
521
  */
365
522
  declare function ConsentProvider({ initialState, categories, // NOVO: configuração completa de categorias
366
523
  texts: textsProp, theme, customCategories, // LEGACY: compatibilidade
367
- scriptIntegrations, PreferencesModalComponent, preferencesModalProps, disableAutomaticModal, hideBranding, onConsentGiven, onPreferencesSaved, cookie: cookieOpts, children, }: Readonly<ConsentProviderProps>): react_jsx_runtime.JSX.Element;
524
+ scriptIntegrations, // eslint-disable-line no-unused-vars
525
+ PreferencesModalComponent, preferencesModalProps, disableAutomaticModal, hideBranding, onConsentGiven, onPreferencesSaved, cookie: cookieOpts, disableDeveloperGuidance, // NOVO: desabilita avisos de dev
526
+ children, }: Readonly<ConsentProviderProps>): react_jsx_runtime.JSX.Element;
368
527
 
369
528
  /**
370
529
  * Hook principal para acessar e manipular o estado de consentimento de cookies.
package/dist/index.js CHANGED
@@ -11,7 +11,7 @@ import {
11
11
  useConsentHydration,
12
12
  useConsentTexts,
13
13
  useCustomCategories
14
- } from "./chunk-JAX63PBG.js";
14
+ } from "./chunk-UKKWGQN7.js";
15
15
 
16
16
  // src/components/CookieBanner.tsx
17
17
  import Button from "@mui/material/Button";
@@ -309,7 +309,7 @@ function createGoogleAnalyticsIntegration(config) {
309
309
  init: () => {
310
310
  if (typeof window !== "undefined") {
311
311
  let gtag2 = function(...args) {
312
- window.dataLayer.push(arguments);
312
+ window.dataLayer.push(...args);
313
313
  };
314
314
  var gtag = gtag2;
315
315
  window.dataLayer = window.dataLayer || [];
package/package.json CHANGED
@@ -1,105 +1,109 @@
1
- {
2
- "name": "react-lgpd-consent",
3
- "version": "0.2.2",
4
- "description": "Biblioteca completa de consentimento LGPD com 6 categorias ANPD, integrações nativas e sistema extensível para React.",
5
- "keywords": [
6
- "lgpd",
7
- "anpd",
8
- "cookie",
9
- "consent",
10
- "react",
11
- "client-side",
12
- "spa",
13
- "material-ui",
14
- "mui",
15
- "typescript",
16
- "js-cookie",
17
- "consentimento",
18
- "privacidade",
19
- "acessibilidade",
20
- "google-analytics",
21
- "tag-manager",
22
- "userway",
23
- "categorias-extensiveis"
24
- ],
25
- "publishConfig": {
26
- "access": "public"
27
- },
28
- "author": {
29
- "name": "Luciano Édipo",
30
- "email": "luciano.psilva@anpd.gov.br",
31
- "url": "https://github.com/lucianoedipo"
32
- },
33
- "license": "MIT",
34
- "type": "module",
35
- "main": "dist/index.cjs",
36
- "module": "dist/index.mjs",
37
- "types": "dist/index.d.ts",
38
- "exports": {
39
- ".": {
40
- "types": "./dist/index.d.ts",
41
- "import": "./dist/index.js",
42
- "require": "./dist/index.cjs"
43
- },
44
- "./package.json": "./package.json"
45
- },
46
- "sideEffects": false,
47
- "files": [
48
- "dist",
49
- "README.md",
50
- "LICENSE",
51
- "COMPLIANCE.md"
52
- ],
53
- "engines": {
54
- "node": ">=18.18"
55
- },
56
- "packageManager": "pnpm@9.0.0",
57
- "scripts": {
58
- "clean": "rimraf dist",
59
- "build": "cross-env NODE_ENV=production tsup src/index.ts --format esm,cjs --dts --clean",
60
- "dev": "cross-env NODE_ENV=development tsup src/index.ts --format esm,cjs --dts --watch",
61
- "lint": "eslint . --ext .ts,.tsx",
62
- "format": "prettier --write \"src/**/*.{ts,tsx,json,md}\"",
63
- "type-check": "tsc --noEmit",
64
- "prepublishOnly": "npm run build"
65
- },
66
- "repository": {
67
- "type": "git",
68
- "url": "git+https://github.com/lucianoedipo/react-lgpd-consent.git"
69
- },
70
- "bugs": {
71
- "url": "https://github.com/lucianoedipo/react-lgpd-consent/issues"
72
- },
73
- "homepage": "https://github.com/lucianoedipo/react-lgpd-consent#readme",
74
- "peerDependencies": {
75
- "@mui/material": "^7.0.0 || ^6.0.0 || ^5.15.0",
76
- "@mui/icons-material": "^7.0.0 || ^6.0.0 || ^5.15.0",
77
- "react": "^18.2.0 || ^19.0.0",
78
- "react-dom": "^18.2.0 || ^19.0.0"
79
- },
80
- "peerDependenciesMeta": {
81
- "@mui/icons-material": {
82
- "optional": true
83
- }
84
- },
85
- "dependencies": {
86
- "js-cookie": "^3.0.5"
87
- },
88
- "devDependencies": {
89
- "@types/js-cookie": "^3.0.6",
90
- "@types/react": "^19.1.9",
91
- "@types/react-dom": "^19.1.7",
92
- "@mui/material": "^7.3.1",
93
- "@mui/icons-material": "^7.3.1",
94
- "react": "^19.1.1",
95
- "react-dom": "^19.1.1",
96
- "cross-env": "^10.0.0",
97
- "eslint": "^9.33.0",
98
- "eslint-config-prettier": "^10.1.8",
99
- "eslint-plugin-react-hooks": "^5.2.0",
100
- "prettier": "^3.6.2",
101
- "rimraf": "^6.0.1",
102
- "tsup": "^8.5.0",
103
- "typescript": "^5.9.2"
104
- }
105
- }
1
+ {
2
+ "name": "react-lgpd-consent",
3
+ "version": "0.2.4",
4
+ "description": "Biblioteca completa de consentimento LGPD com 6 categorias ANPD, integrações nativas e sistema extensível para React.",
5
+ "keywords": [
6
+ "lgpd",
7
+ "anpd",
8
+ "cookie",
9
+ "consent",
10
+ "react",
11
+ "client-side",
12
+ "spa",
13
+ "material-ui",
14
+ "mui",
15
+ "typescript",
16
+ "js-cookie",
17
+ "consentimento",
18
+ "privacidade",
19
+ "acessibilidade",
20
+ "google-analytics",
21
+ "tag-manager",
22
+ "userway",
23
+ "categorias-extensiveis"
24
+ ],
25
+ "publishConfig": {
26
+ "access": "public"
27
+ },
28
+ "author": {
29
+ "name": "Luciano Édipo",
30
+ "email": "luciano.psilva@anpd.gov.br",
31
+ "url": "https://github.com/lucianoedipo"
32
+ },
33
+ "license": "MIT",
34
+ "type": "module",
35
+ "main": "dist/index.cjs",
36
+ "module": "dist/index.mjs",
37
+ "types": "dist/index.d.ts",
38
+ "exports": {
39
+ ".": {
40
+ "types": "./dist/index.d.ts",
41
+ "import": "./dist/index.js",
42
+ "require": "./dist/index.cjs"
43
+ },
44
+ "./package.json": "./package.json"
45
+ },
46
+ "sideEffects": false,
47
+ "files": [
48
+ "dist",
49
+ "README.md",
50
+ "LICENSE",
51
+ "COMPLIANCE.md"
52
+ ],
53
+ "engines": {
54
+ "node": ">=18.18"
55
+ },
56
+ "packageManager": "pnpm@9.0.0",
57
+ "scripts": {
58
+ "clean": "rimraf dist",
59
+ "build": "cross-env NODE_ENV=production tsup src/index.ts --format esm,cjs --dts --clean",
60
+ "dev": "cross-env NODE_ENV=development tsup src/index.ts --format esm,cjs --dts --watch",
61
+ "lint": "eslint . --ext .ts,.tsx",
62
+ "format": "prettier --write \"src/**/*.{ts,tsx,json,md}\" \"eslint.config.js\"",
63
+ "type-check": "tsc --noEmit",
64
+ "prepublishOnly": "npm run build"
65
+ },
66
+ "repository": {
67
+ "type": "git",
68
+ "url": "git+https://github.com/lucianoedipo/react-lgpd-consent.git"
69
+ },
70
+ "bugs": {
71
+ "url": "https://github.com/lucianoedipo/react-lgpd-consent/issues"
72
+ },
73
+ "homepage": "https://github.com/lucianoedipo/react-lgpd-consent#readme",
74
+ "peerDependencies": {
75
+ "@mui/icons-material": "^7.0.0 || ^6.0.0 || ^5.15.0",
76
+ "@mui/material": "^7.0.0 || ^6.0.0 || ^5.15.0",
77
+ "react": "^18.2.0 || ^19.0.0",
78
+ "react-dom": "^18.2.0 || ^19.0.0"
79
+ },
80
+ "peerDependenciesMeta": {
81
+ "@mui/icons-material": {
82
+ "optional": true
83
+ }
84
+ },
85
+ "dependencies": {
86
+ "js-cookie": "^3.0.5"
87
+ },
88
+ "devDependencies": {
89
+ "@eslint/compat": "^1.3.2",
90
+ "@mui/icons-material": "^7.3.1",
91
+ "@mui/material": "^7.3.1",
92
+ "@types/js-cookie": "^3.0.6",
93
+ "@types/react": "^19.1.9",
94
+ "@types/react-dom": "^19.1.7",
95
+ "@typescript-eslint/eslint-plugin": "^8.39.1",
96
+ "@typescript-eslint/parser": "^8.39.1",
97
+ "cross-env": "^10.0.0",
98
+ "eslint": "^9.33.0",
99
+ "eslint-config-prettier": "^10.1.8",
100
+ "eslint-plugin-react-hooks": "^5.2.0",
101
+ "prettier": "^3.6.2",
102
+ "react": "^19.1.1",
103
+ "react-dom": "^19.1.1",
104
+ "rimraf": "^6.0.1",
105
+ "tsup": "^8.5.0",
106
+ "typescript": "^5.9.2",
107
+ "typescript-eslint": "^8.39.1"
108
+ }
109
+ }