2be8e18 Thanks @lucianoedipo! - - feat: adiciona suporte a posicionamento e offset configuráveis no banner de consentimento
2be8e18]:
#145 2d772bc Thanks @lucianoedipo! - feat: adiciona posicionamento configurável do banner e aprimora textos de consentimento
position, anchor e offset em cookieBannerProps permitem ajustar a posição do banner para evitar colisões com footers fixos, chat widgets e outros elementos flutuantesoffset em floatingPreferencesButtonProps possibilita afastar o botão flutuante de outros elementos da UIrun-typedoc.mjs para compatibilidade multiplataformareact-lgpd-consent/package.json@mui/icons-material@7.3.7 para resolver problemas de compatibilidade com exportsQUICKSTART.md e API.mdCONFORMIDADE.md com ênfase na comunicação clara de categoriasDesignContext.tsxcookieUtils.test.tscookieDiscovery.tsdeveloperGuidance.ts2d772bc]:
#142 29b4464 Thanks @lucianoedipo! - ### Correcoes
29b4464]:
#133 33bc0eb Thanks @lucianoedipo! - # 🧩 Fundamento Crítico de Consentimento — SUPER TASK v0.7.1
Persistência + Loader + Consent Mode v2
Esta release estabelece o núcleo legal, técnico e funcional da biblioteca react-lgpd-consent, garantindo um contrato sólido, seguro e auditável para uso institucional e governamental.
Nova API completa no ConsentProvider:
<ConsentProvider
cookie={{
name: 'lgpd-consent',
domain: '.example.com', // Compartilha entre subdomínios
path: '/',
sameSite: 'Lax', // Default seguro
secure: true, // Auto em HTTPS
maxAge: 31536000, // Segundos (substitui maxAgeDays)
}}
>
Regras Implementadas:
SameSite=Lax, Secure=true em HTTPSnecessary sempre forçada como truedomainmaxAge (segundos, padrão moderno)maxAgeDays deprecated mas mantida para compatibilidadeAmbientes Suportados:
localhost (desenvolvimento)dev / staging (domínios customizados)production (HTTPS obrigatório)Nenhum script não necessário executa antes do consentimento correspondente.
Implementado ConsentScriptLoader com:
registerScript({
id: 'google-analytics',
category: 'analytics',
priority: 1, // Ordem de execução
execute: () => {
// Seu script aqui
},
onConsentUpdate: (granted) => {
// Reagir a mudanças de consentimento
},
})
Recursos Implementados:
necessary → analytics → marketing, etc.)necessary executam imediatamenteonConsentUpdate para reconfiguração dinâmicaintegrations={[createGoogleAnalyticsIntegration(...)]}). Sistema mantém hash estrutural para detectar mudanças reais e prevenir múltiplas inicializações do mesmo script.Observabilidade em DEV:
Zero configuração manual necessária!
import { createGoogleAnalyticsIntegration } from '@react-lgpd-consent/core'
const ga4 = createGoogleAnalyticsIntegration({
measurementId: 'G-XXXXXXXXXX'
})
<ConsentScriptLoader integrations={[ga4]} />
O que a biblioteca faz automaticamente:
dataLayer se não existirgtag('consent', 'default', denied) antes de qualquer taganalytics → analytics_storagemarketing → ad_storage, ad_user_data, ad_personalizationgtag('consent', 'update') quando usuário escolhe preferências{ event: 'consent_initialized' }
{ event: 'consent_updated', preferences: {...} }
Factories Implementadas:
createGoogleAnalyticsIntegration (GA4)createGoogleTagManagerIntegration (GTM)bootstrap() para inicialização pré-consentimentoonConsentUpdate() para reconfiguração dinâmicaFluxo garantido pela implementação:
1. dataLayer criado
2. gtag('consent', 'default', denied)
3. Loader bloqueia tags
4. Usuário consente
5. gtag('consent', 'update', granted/denied)
6. Tags disparam conforme consentimento
window fora de useEffectclient-only quando necessário@react-lgpd-consent/core):// Registro de scripts
registerScript(config: RegisteredScript): void
// Factories de integrações
createGoogleAnalyticsIntegration(config): ScriptIntegration
createGoogleTagManagerIntegration(config): ScriptIntegration
// Utilitários de cookie
readConsentCookie(name?: string): ConsentState | null
writeConsentCookie(state: ConsentState, options?: CookieOptions): void
// Novos tipos
type RegisteredScript = { ... }
type ScriptIntegration = { ... }
interface LoadScriptOptions = { ... }
registerScript e Consent Mode v2Nenhum! Esta release é 100% backward-compatible:
maxAgeDays deprecated mas funcionalSistema básico de internacionalização para mensagens de peer dependencies:
setPeerDepsLocale(), setPeerDepsMessages()integrations prop muda referência (inline array). Sistema agora usa hash estrutural para detectar mudanças reais e manter scripts já registrados estáveis.Updated dependencies [33bc0eb]:
#124 7669c4f Thanks @lucianoedipo! - # v0.7.0 - Código Limpo, Testes Aprimorados e Qualidade de Código
Esta release é parte do trabalho nas issues: #60, #63, #64, #65, #68, #70, #71, #72
window e global para globalThis.window e globalThis (compatibilidade SSR/universal)replace() com regex global para replaceAll() (ES2021)Object.prototype.hasOwnProperty.call() para Object.hasOwn() (ES2022)Number.parseInt() em vez de parseInt() globalES2021.String ao lib do tsconfig para suportar String.replaceAll()ES2022.Object ao lib do tsconfig para suportar Object.hasOwn()ES2020ℹ️ Atenção à Compatibilidade com Browsers
Esta versão faz uso de recursos ES2021/ES2022 (
String.replaceAll(),Object.hasOwn(), etc.), que não estão disponíveis em todos os navegadores (especialmente versões antigas do Safari, Edge ou Firefox). Se você utiliza este pacote em aplicações web que precisam suportar navegadores legados, é recomendado configurar um transpiler (como Babel) e/ou polyfills apropriados para garantir compatibilidade.
matchPattern movida para outer scope (evita recriação)categories não é fornecida| Arquivo | Antes | Depois | Melhoria |
|---|---|---|---|
| theme.ts | 83.33% | 100% ✅ | +16.67% |
| cookieDiscovery.ts | 88.13% | 96.61% | +8.48% |
| peerDepsCheck.ts | 74.19% | 80.64% | +6.45% |
| validation.ts | 96.87% | 98.24% | +1.37% |
logWarnings=trueensureDataLayer criar dataLayer quando undefined__LGPD_DISCOVERED_COOKIES__)registerOverrides=true chamando setCookieCatalogOverridesbuildConsentStorageKey com caracteres especiaiscreateConsentAuditEntry com estado mínimoremoveConsentCookiedefaultConsentTheme()pnpm test:coveragesrc/utils/scriptIntegrations.ts: globalThis, Date.now()src/utils/peerDepsCheck.ts: globalThis, Number.parseInt()src/utils/dataLayerEvents.ts: globalThis, ??= operatorsrc/utils/cookieUtils.ts: replaceAll(), globalThis, condição invertidasrc/utils/cookieDiscovery.ts: matchPattern outer scopesrc/utils/validation.ts: warning categories undefinedsrc/context/ConsentContext.tsx: Object.hasOwn(), state depssrc/context/__tests__/CategoriesContext.test.tsx: globalThis__tests__/*: +25 novos testessrc/utils/theme.ts: 100% coveragesrc/utils/__tests__/theme.test.ts: +8 novos testestsconfig.base.json: ES2021.String, ES2022.Object no libDEVELOPMENT.md: seção de cobertura de testesBreaking Changes: Nenhuma Migration Required: Não
Esta release foca em qualidade de código, testes robustos e aderência a padrões modernos do JavaScript/TypeScript.
7669c4f]:
#115 2a54bae Thanks @lucianoedipo! - Adiciona RECIPES.md com 8 receitas práticas, WORKFLOWS.md documentando CI/CD completo, novos workflows de versionamento/publicação/docs, correção de versão do TypeDoc e atualização da documentação em inglês.
Updated dependencies [2a54bae]:
#113 b51e1f8 Thanks @lucianoedipo! - feat: Compatibilidade completa com React 19 StrictMode
LOADING_SCRIPTS em scriptLoader.ts para prevenir injeções duplicadas de scripts durante double-invoking de efeitossetTimeout com cleanup adequado em ConsentScriptLoader.tsx para prevenir race conditionsloadScript é idempotente: múltiplas chamadas simultâneas retornam a mesma PromiseloadScript agora aguarda dinamicamente o consentimento em vez de rejeitar imediatamente, permitindo que scripts carreguem quando preferências mudaremConsentScriptLoader.strictmode.test.tsx e scriptLoader.strictmode.test.tsREACT19-STRICTMODE.mdBreaking Changes: Nenhuma - totalmente retrocompatível
Updated dependencies [b51e1f8]:
#105 1deb3bb Thanks @lucianoedipo! - chore: sincronizar pnpm-lock.yaml com versões bumpeadas
Updated dependencies [1deb3bb]:
4c9ebf2 Thanks @lucianoedipo! - feat: adicionar diagnósticos de peer dependencies e sistema de troubleshooting
4c9ebf2]:
Para histórico completo detalhado de todas as versões, consulte:
v0.5.0 (25/10/2025) - Arquitetura Modular
@react-lgpd-consent/core, @react-lgpd-consent/mui, react-lgpd-consenttheme do ConsentProviderv0.4.5 (25/10/2025) - DataLayer Events
consent_initialized, consent_updated)v0.4.4 (06/10/2025) - CI/CD e Codecov
v0.4.3 (06/10/2025) - Performance
v0.4.2 (06/10/2025) - SSR e Validação
v0.4.1 (21/09/2025) - Expansão de Integrações
setPreference e ScriptIntegration.category aceitam string (suporte a categorias customizadas)v0.4.0 (09/09/2025) - Categorias Customizadas
customCategories no ConsentProviderv0.3.7 (08/09/2025) - Testes de UI
v0.3.6 (28/08/2025) - Correção Crítica
v0.3.1 (13/08/2025) - Compatibilidade
v0.3.0 (12/08/2025) - DX Aprimorada
v0.2.x (12/08/2025) - Conformidade LGPD
v0.1.x (09/08/2025) - Lançamento Inicial
O formato deste changelog é baseado em Keep a Changelog, e este projeto adere ao Semantic Versioning.