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.js CHANGED
@@ -1,15 +1,26 @@
1
1
  import {
2
2
  ConsentProvider,
3
+ CookieBanner,
3
4
  DEFAULT_PROJECT_CATEGORIES,
5
+ FloatingPreferencesButton,
6
+ LogLevel,
4
7
  PreferencesModal,
5
8
  analyzeDeveloperConfiguration,
9
+ createProjectPreferences,
6
10
  defaultConsentTheme,
11
+ defaultTexts,
12
+ getAllProjectCategories,
13
+ logger,
14
+ openPreferencesModal,
15
+ setDebugLogging,
7
16
  useCategories,
8
17
  useCategoryStatus,
9
18
  useConsent,
10
19
  useConsentHydration,
11
- useConsentTexts
12
- } from "./chunk-R3IKVZBC.js";
20
+ useConsentTexts,
21
+ useOpenPreferencesModal,
22
+ validateProjectPreferences
23
+ } from "./chunk-JUZQJHQW.js";
13
24
 
14
25
  // src/utils/ConsentGate.tsx
15
26
  import { Fragment, jsx } from "react/jsx-runtime";
@@ -83,7 +94,7 @@ function ConsentScriptLoader({
83
94
  }
84
95
  loadedScripts.current.add(integration.id);
85
96
  } catch (error) {
86
- console.error(`\u274C Failed to load script: ${integration.id}`, error);
97
+ logger.error(`\u274C Failed to load script: ${integration.id}`, error);
87
98
  }
88
99
  }
89
100
  });
@@ -95,14 +106,12 @@ function useConsentScriptLoader() {
95
106
  return React.useCallback(
96
107
  async (integration) => {
97
108
  if (!consented) {
98
- console.warn(
99
- `\u26A0\uFE0F Cannot load script ${integration.id}: No consent given`
100
- );
109
+ logger.warn(`\u26A0\uFE0F Cannot load script ${integration.id}: No consent given`);
101
110
  return false;
102
111
  }
103
112
  const shouldLoad = preferences[integration.category];
104
113
  if (!shouldLoad) {
105
- console.warn(
114
+ logger.warn(
106
115
  `\u26A0\uFE0F Cannot load script ${integration.id}: Category '${integration.category}' not consented`
107
116
  );
108
117
  return false;
@@ -120,7 +129,7 @@ function useConsentScriptLoader() {
120
129
  }
121
130
  return true;
122
131
  } catch (error) {
123
- console.error(`\u274C Failed to load script: ${integration.id}`, error);
132
+ logger.error(`\u274C Failed to load script: ${integration.id}`, error);
124
133
  return false;
125
134
  }
126
135
  },
@@ -170,8 +179,7 @@ function createUserWayIntegration(config) {
170
179
  return {
171
180
  id: "userway",
172
181
  category: "functional",
173
- // Categoria mais apropriada para acessibilidade
174
- src: `https://cdn.userway.org/widget.js`,
182
+ src: "https://cdn.userway.org/widget.js",
175
183
  init: () => {
176
184
  if (typeof window !== "undefined") {
177
185
  window.UserWayWidgetApp = window.UserWayWidgetApp || {};
@@ -191,18 +199,28 @@ export {
191
199
  ConsentGate,
192
200
  ConsentProvider,
193
201
  ConsentScriptLoader,
202
+ CookieBanner,
194
203
  DEFAULT_PROJECT_CATEGORIES,
204
+ FloatingPreferencesButton,
205
+ LogLevel,
195
206
  PreferencesModal,
196
207
  analyzeDeveloperConfiguration,
197
208
  createGoogleAnalyticsIntegration,
198
209
  createGoogleTagManagerIntegration,
210
+ createProjectPreferences,
199
211
  createUserWayIntegration,
200
212
  defaultConsentTheme,
213
+ defaultTexts,
214
+ getAllProjectCategories,
201
215
  loadScript,
216
+ openPreferencesModal,
217
+ setDebugLogging,
202
218
  useCategories,
203
219
  useCategoryStatus,
204
220
  useConsent,
205
221
  useConsentHydration,
206
222
  useConsentScriptLoader,
207
- useConsentTexts
223
+ useConsentTexts,
224
+ useOpenPreferencesModal,
225
+ validateProjectPreferences
208
226
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-lgpd-consent",
3
- "version": "0.3.0",
3
+ "version": "0.3.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",
@@ -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,21 +48,22 @@
48
48
  "dist",
49
49
  "README.md",
50
50
  "LICENSE",
51
- "COMPLIANCE.md"
51
+ "CHANGELOG.md"
52
52
  ],
53
53
  "engines": {
54
54
  "node": ">=18.18"
55
55
  },
56
- "packageManager": "pnpm@9.0.0",
56
+ "packageManager": "npm@10.0.0",
57
57
  "scripts": {
58
- "clean": "rimraf dist",
58
+ "clean": "rimraf node_modules package-lock.json dist",
59
59
  "build": "cross-env NODE_ENV=production tsup src/index.ts --format esm,cjs --dts --clean",
60
60
  "dev": "cross-env NODE_ENV=development tsup src/index.ts --format esm,cjs --dts --watch",
61
61
  "lint": "eslint . --ext .ts,.tsx",
62
62
  "format": "prettier --write \"src/**/*.{ts,tsx,json,md}\" \"eslint.config.js\"",
63
63
  "type-check": "tsc --noEmit",
64
- "test": "jest",
65
- "prepublishOnly": "npm run build"
64
+ "test": "jest --config jest.config.ts",
65
+ "prepublishOnly": "npm run build",
66
+ "docs:generate": "typedoc --out docs"
66
67
  },
67
68
  "repository": {
68
69
  "type": "git",
@@ -92,12 +93,14 @@
92
93
  "@eslint/compat": "^1.3.2",
93
94
  "@mui/icons-material": "^7.3.1",
94
95
  "@mui/material": "^7.3.1",
95
- "@testing-library/jest-dom": "^6.6.4",
96
+ "@testing-library/dom": "^10.4.1",
97
+ "@testing-library/jest-dom": "^6.7.0",
96
98
  "@testing-library/react": "^16.3.0",
97
99
  "@testing-library/user-event": "^14.6.1",
98
- "@types/jest": "^30.0.0",
100
+ "@types/jest": "^29.5.14",
99
101
  "@types/js-cookie": "^3.0.6",
100
- "@types/react": "^19.1.9",
102
+ "@types/node": "^24.2.1",
103
+ "@types/react": "^19.1.10",
101
104
  "@types/react-dom": "^19.1.7",
102
105
  "@typescript-eslint/eslint-plugin": "^8.39.1",
103
106
  "@typescript-eslint/parser": "^8.39.1",
@@ -106,14 +109,16 @@
106
109
  "eslint-config-prettier": "^10.1.8",
107
110
  "eslint-plugin-jest": "^29.0.1",
108
111
  "eslint-plugin-react-hooks": "^5.2.0",
109
- "jest": "^30.0.5",
110
- "jest-environment-jsdom": "^30.0.5",
112
+ "jest": "^29.7.0",
113
+ "jest-environment-jsdom": "^29.7.0",
111
114
  "prettier": "^3.6.2",
112
115
  "react": "^19.1.1",
113
116
  "react-dom": "^19.1.1",
114
117
  "rimraf": "^6.0.1",
115
118
  "ts-jest": "^29.4.1",
119
+ "ts-node": "^10.9.2",
116
120
  "tsup": "^8.5.0",
121
+ "typedoc": "^0.28.10",
117
122
  "typescript": "^5.9.2",
118
123
  "typescript-eslint": "^8.39.1"
119
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.