react-lgpd-consent 0.3.1 → 0.3.3

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.js CHANGED
@@ -1,10 +1,16 @@
1
1
  import {
2
2
  ConsentProvider,
3
+ CookieBanner,
3
4
  DEFAULT_PROJECT_CATEGORIES,
5
+ FloatingPreferencesButton,
4
6
  LogLevel,
5
7
  PreferencesModal,
6
8
  analyzeDeveloperConfiguration,
9
+ createProjectPreferences,
7
10
  defaultConsentTheme,
11
+ defaultTexts,
12
+ getAllProjectCategories,
13
+ logger,
8
14
  openPreferencesModal,
9
15
  setDebugLogging,
10
16
  useCategories,
@@ -12,8 +18,9 @@ import {
12
18
  useConsent,
13
19
  useConsentHydration,
14
20
  useConsentTexts,
15
- useOpenPreferencesModal
16
- } from "./chunk-VFAOBR3X.js";
21
+ useOpenPreferencesModal,
22
+ validateProjectPreferences
23
+ } from "./chunk-GPLNN3FD.js";
17
24
 
18
25
  // src/utils/ConsentGate.tsx
19
26
  import { Fragment, jsx } from "react/jsx-runtime";
@@ -87,7 +94,7 @@ function ConsentScriptLoader({
87
94
  }
88
95
  loadedScripts.current.add(integration.id);
89
96
  } catch (error) {
90
- console.error(`\u274C Failed to load script: ${integration.id}`, error);
97
+ logger.error(`\u274C Failed to load script: ${integration.id}`, error);
91
98
  }
92
99
  }
93
100
  });
@@ -99,14 +106,12 @@ function useConsentScriptLoader() {
99
106
  return React.useCallback(
100
107
  async (integration) => {
101
108
  if (!consented) {
102
- console.warn(
103
- `\u26A0\uFE0F Cannot load script ${integration.id}: No consent given`
104
- );
109
+ logger.warn(`\u26A0\uFE0F Cannot load script ${integration.id}: No consent given`);
105
110
  return false;
106
111
  }
107
112
  const shouldLoad = preferences[integration.category];
108
113
  if (!shouldLoad) {
109
- console.warn(
114
+ logger.warn(
110
115
  `\u26A0\uFE0F Cannot load script ${integration.id}: Category '${integration.category}' not consented`
111
116
  );
112
117
  return false;
@@ -124,7 +129,7 @@ function useConsentScriptLoader() {
124
129
  }
125
130
  return true;
126
131
  } catch (error) {
127
- console.error(`\u274C Failed to load script: ${integration.id}`, error);
132
+ logger.error(`\u274C Failed to load script: ${integration.id}`, error);
128
133
  return false;
129
134
  }
130
135
  },
@@ -174,8 +179,7 @@ function createUserWayIntegration(config) {
174
179
  return {
175
180
  id: "userway",
176
181
  category: "functional",
177
- // Categoria mais apropriada para acessibilidade
178
- src: `https://cdn.userway.org/widget.js`,
182
+ src: "https://cdn.userway.org/widget.js",
179
183
  init: () => {
180
184
  if (typeof window !== "undefined") {
181
185
  window.UserWayWidgetApp = window.UserWayWidgetApp || {};
@@ -195,14 +199,19 @@ export {
195
199
  ConsentGate,
196
200
  ConsentProvider,
197
201
  ConsentScriptLoader,
202
+ CookieBanner,
198
203
  DEFAULT_PROJECT_CATEGORIES,
204
+ FloatingPreferencesButton,
199
205
  LogLevel,
200
206
  PreferencesModal,
201
207
  analyzeDeveloperConfiguration,
202
208
  createGoogleAnalyticsIntegration,
203
209
  createGoogleTagManagerIntegration,
210
+ createProjectPreferences,
204
211
  createUserWayIntegration,
205
212
  defaultConsentTheme,
213
+ defaultTexts,
214
+ getAllProjectCategories,
206
215
  loadScript,
207
216
  openPreferencesModal,
208
217
  setDebugLogging,
@@ -212,5 +221,6 @@ export {
212
221
  useConsentHydration,
213
222
  useConsentScriptLoader,
214
223
  useConsentTexts,
215
- useOpenPreferencesModal
224
+ useOpenPreferencesModal,
225
+ validateProjectPreferences
216
226
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-lgpd-consent",
3
- "version": "0.3.1",
3
+ "version": "0.3.3",
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",
@@ -33,7 +33,7 @@
33
33
  "license": "MIT",
34
34
  "type": "module",
35
35
  "main": "dist/index.cjs",
36
- "module": "dist/index.mjs",
36
+ "module": "dist/index.js",
37
37
  "types": "dist/index.d.ts",
38
38
  "exports": {
39
39
  ".": {
@@ -48,22 +48,22 @@
48
48
  "dist",
49
49
  "README.md",
50
50
  "LICENSE",
51
- "COMPLIANCE.md",
52
51
  "CHANGELOG.md"
53
52
  ],
54
53
  "engines": {
55
54
  "node": ">=18.18"
56
55
  },
57
- "packageManager": "pnpm@9.15.9",
56
+ "packageManager": "npm@10.0.0",
58
57
  "scripts": {
59
- "clean": "rimraf dist",
58
+ "clean": "rimraf node_modules package-lock.json dist",
60
59
  "build": "cross-env NODE_ENV=production tsup src/index.ts --format esm,cjs --dts --clean",
61
60
  "dev": "cross-env NODE_ENV=development tsup src/index.ts --format esm,cjs --dts --watch",
62
61
  "lint": "eslint . --ext .ts,.tsx",
63
62
  "format": "prettier --write \"src/**/*.{ts,tsx,json,md}\" \"eslint.config.js\"",
64
63
  "type-check": "tsc --noEmit",
65
- "test": "jest",
66
- "prepublishOnly": "npm run build"
64
+ "test": "jest --config jest.config.ts",
65
+ "prepublishOnly": "npm run build",
66
+ "docs:generate": "typedoc --out docs"
67
67
  },
68
68
  "repository": {
69
69
  "type": "git",
@@ -72,7 +72,7 @@
72
72
  "bugs": {
73
73
  "url": "https://github.com/lucianoedipo/react-lgpd-consent/issues"
74
74
  },
75
- "homepage": "https://github.com/lucianoedipo/react-lgpd-consent#readme",
75
+ "homepage": "https://lucianoedipo.github.io/react-lgpd-consent/",
76
76
  "peerDependencies": {
77
77
  "@mui/icons-material": "^7.0.0 || ^6.0.0 || ^5.15.0",
78
78
  "@mui/material": "^7.0.0 || ^6.0.0 || ^5.15.0",
@@ -93,11 +93,13 @@
93
93
  "@eslint/compat": "^1.3.2",
94
94
  "@mui/icons-material": "^7.3.1",
95
95
  "@mui/material": "^7.3.1",
96
- "@testing-library/jest-dom": "^6.6.4",
96
+ "@testing-library/dom": "^10.4.1",
97
+ "@testing-library/jest-dom": "^6.7.0",
97
98
  "@testing-library/react": "^16.3.0",
98
99
  "@testing-library/user-event": "^14.6.1",
99
- "@types/jest": "^30.0.0",
100
+ "@types/jest": "^29.5.14",
100
101
  "@types/js-cookie": "^3.0.6",
102
+ "@types/node": "^24.2.1",
101
103
  "@types/react": "^19.1.10",
102
104
  "@types/react-dom": "^19.1.7",
103
105
  "@typescript-eslint/eslint-plugin": "^8.39.1",
@@ -107,14 +109,16 @@
107
109
  "eslint-config-prettier": "^10.1.8",
108
110
  "eslint-plugin-jest": "^29.0.1",
109
111
  "eslint-plugin-react-hooks": "^5.2.0",
110
- "jest": "^30.0.5",
111
- "jest-environment-jsdom": "^30.0.5",
112
+ "jest": "^29.7.0",
113
+ "jest-environment-jsdom": "^29.7.0",
112
114
  "prettier": "^3.6.2",
113
115
  "react": "^19.1.1",
114
116
  "react-dom": "^19.1.1",
115
117
  "rimraf": "^6.0.1",
116
118
  "ts-jest": "^29.4.1",
119
+ "ts-node": "^10.9.2",
117
120
  "tsup": "^8.5.0",
121
+ "typedoc": "^0.28.10",
118
122
  "typescript": "^5.9.2",
119
123
  "typescript-eslint": "^8.39.1"
120
124
  }
package/COMPLIANCE.md DELETED
@@ -1,107 +0,0 @@
1
- # Guia de Conformidade e Funcionalidades - react-lgpd-consent v0.3.0
2
-
3
- ## 📜 Objetivo
4
-
5
- Este documento descreve as medidas de conformidade da biblioteca **react-lgpd-consent** com a Lei Geral de Proteção de Dados (LGPD) e o Guia Orientativo da ANPD, além de detalhar as ferramentas que auxiliam os desenvolvedores a manter essa conformidade.
6
-
7
- ## ✅ Conformidade com a LGPD
8
-
9
- A biblioteca implementa os seguintes princípios e requisitos da LGPD:
10
-
11
- - **Consentimento Granular**: O usuário tem controle sobre cada categoria de cookie não essencial.
12
- - **Minimização de Dados**: Apenas as categorias de cookies ativas no projeto são armazenadas no cookie de consentimento.
13
- - **Transparência**: O cookie de consentimento armazena metadados de auditoria, como data, versão e origem da decisão.
14
- - **Facilidade de Revogação**: O usuário pode alterar suas preferências a qualquer momento através do modal.
15
- - **Segurança**: O cookie é configurado com `SameSite=Lax` e `secure=true` (em HTTPS) por padrão.
16
-
17
- ## 🧠 Sistema de Orientações para Desenvolvedores
18
-
19
- A biblioteca inclui um sistema inteligente que **orienta os desenvolvedores sobre a configuração adequada**, garantindo que a implementação final esteja em conformidade com a LGPD.
20
-
21
- ### Console de Desenvolvimento
22
-
23
- Em ambiente de desenvolvimento, a biblioteca exibe automaticamente no console:
24
-
25
- - **⚠️ Avisos**: Sobre configurações ausentes ou inconsistentes.
26
- - **💡 Sugestões**: Recomendações para melhorar a conformidade e a experiência do usuário.
27
- - **🔧 Tabela de Categorias Ativas**: Uma lista clara de quais categorias estão em uso, para auxiliar na construção de UIs customizadas.
28
-
29
- ```
30
- [🍪 LGPD-CONSENT] ⚠️ Avisos de Configuração
31
- [🍪 LGPD-CONSENT] Nenhuma configuração de categorias especificada. Usando padrão: necessary + analytics.
32
-
33
- [🍪 LGPD-CONSENT] 🔧 Categorias Ativas (para UI customizada)
34
- ┌─────────────┬──────────────────────┬─────────────┬─────────────┐
35
- │ ID │ Nome │ Toggle UI? │ Essencial? │
36
- ├─────────────┼──────────────────────┼─────────────┼─────────────┤
37
- │ necessary │ Cookies Necessários │ ❌ NÃO │ 🔒 SIM │
38
- │ analytics │ Cookies Analíticos │ ✅ SIM │ ⚙️ NÃO │
39
- └─────────────┴──────────────────────┴─────────────┴─────────────┘
40
- ```
41
-
42
- **Para desabilitar estas mensagens**, use a prop `disableDeveloperGuidance={true}` no `ConsentProvider`.
43
-
44
- ### Configuração Consciente
45
-
46
- Para evitar avisos e garantir a conformidade, especifique explicitamente as categorias de cookies que seu projeto utiliza através da prop `categories`:
47
-
48
- ```tsx
49
- <ConsentProvider
50
- categories={{
51
- // Habilita apenas as categorias padrão que você realmente usa
52
- enabledCategories: ['analytics'],
53
- }}
54
- >
55
- <App />
56
- </ConsentProvider>
57
- ```
58
-
59
- ### Hooks de Validação
60
-
61
- Para construir componentes de UI customizados que reagem à configuração, utilize os hooks:
62
-
63
- - `useCategories()`: Fornece uma lista completa das categorias ativas no projeto.
64
- - `useCategoryStatus('id')`: Verifica o status de uma categoria específica (se está ativa, se é essencial, etc.).
65
-
66
- ```tsx
67
- import { useCategoryStatus } from 'react-lgpd-consent'
68
-
69
- function AnalyticsFeature() {
70
- const analytics = useCategoryStatus('analytics')
71
-
72
- // Não renderiza o componente se a categoria 'analytics' não estiver configurada no ConsentProvider
73
- if (!analytics.isActive) {
74
- return null
75
- }
76
-
77
- return <AnalyticsDashboard />
78
- }
79
- ```
80
-
81
- ## 🚀 Roadmap de Funcionalidades
82
-
83
- O foco da biblioteca é estabilidade e conformidade.
84
-
85
- ### v0.3.0 (Atual)
86
-
87
- - **Foco**: Refatoração da arquitetura, melhoria da experiência do desenvolvedor (DX) e quebra de compatibilidade para simplificação.
88
- - **Status**: Implementado.
89
-
90
- ### Próximas Versões (Pseudo-Versioning)
91
-
92
- - **v0.+1.0 (Multi-Regulamentação e Conformidade Avançada)**:
93
- - **Geolocalização-based Consent**: Detecção automática da região do usuário para aplicar a regulamentação relevante (LGPD, GDPR, CCPA).
94
- - **Configurable Regulation Profiles**: Definição de perfis de regulamentação com requisitos específicos.
95
- - **Dynamic Text Adaptation**: Textos adaptáveis com base na regulamentação ativa.
96
- - **Modal Detalhado de Cookies**: Exibição de informações técnicas sobre cada cookie (nome, duração, provedor).
97
- - **Logs de Auditoria**: Sistema de log client-side para registrar todas as interações de consentimento do usuário.
98
- - **Templates Setoriais**: Configurações e textos pré-definidos para setores específicos (governo, saúde, e-commerce).
99
- - **Plugin System**: Sistema de plugins para extensibilidade de integrações e lógica customizada.
100
- - **Improved `ConsentGate`**: Controle mais granular (e.g., `analytics AND functional`).
101
- - **Enhanced Developer Guidance**: Mais avisos e sugestões detalhadas.
102
-
103
- ## 🔒 Segurança e Privacidade
104
-
105
- - **Armazenamento**: O consentimento é armazenado exclusivamente no cliente (`localStorage` ou `cookie`).
106
- - **Minimização**: O cookie de consentimento contém apenas as preferências para as categorias ativas no projeto, a versão da configuração e os timestamps necessários para auditoria.
107
- - **Sem Coleta de Dados Pessoais**: A biblioteca em si não coleta ou transmite dados pessoais.