{"_id":"@artus-engineering/react-gdpr-cookie-consent","_rev":"5-092a6cb02b8c51434aef0a8ee88780c1","name":"@artus-engineering/react-gdpr-cookie-consent","dist-tags":{"latest":"2.0.2"},"versions":{"1.0.8":{"name":"@artus-engineering/react-gdpr-cookie-consent","version":"1.0.8","keywords":["gdpr","cookie","consent","react","privacy","compliance"],"author":{"name":"Artus Engineering GmbH"},"license":"PolyForm-Noncommercial-1.0.0","_id":"@artus-engineering/react-gdpr-cookie-consent@1.0.8","maintainers":[{"name":"jonas-scholl","email":"jonas@artus-engineering.de"}],"homepage":"https://github.com/artus-engineering/react-gdpr-consent-banner#readme","bugs":{"url":"https://github.com/artus-engineering/react-gdpr-consent-banner/issues"},"dist":{"shasum":"ef6c244387a636168557bfcddca922fc8465e27e","tarball":"https://registry.npmjs.org/@artus-engineering/react-gdpr-cookie-consent/-/react-gdpr-cookie-consent-1.0.8.tgz","fileCount":6,"integrity":"sha512-MqqUHqtjyVm2VjLPTIwyH+euTGFqoR2meEIZrX4pfGrlYrZ+uDZabm4zX8HYPPNpMtbcZ0KL4Jn4kI7PhbspKA==","signatures":[{"sig":"MEQCIALrM3wzbzc+GTw8bkULZG/3iTOIKp/o8Hs3lbVI0xBWAiAEJeGj28qew8pvqorLyz1/SSRR7nHFzJTV2DvYg3N3Ow==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":119739},"jest":{"watchman":false,"testEnvironment":"jsdom","coverageProvider":"v8","coverageDirectory":"coverage","coverageReporters":["text","text-summary","lcov","html"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.ts"],"collectCoverageFrom":["src/**/*.{ts,tsx}","!src/**/*.d.ts","!src/**/*.test.{ts,tsx}","!src/**/*.stories.{ts,tsx}","!src/setupTests.ts","!src/**/index.ts","!src/test-utils/**"],"testPathIgnorePatterns":["/node_modules/","<rootDir>/tests/","<rootDir>/dist/"]},"main":"dist/cjs/index.cjs","type":"module","babel":{"presets":["@babel/preset-env","@babel/preset-typescript",["@babel/preset-react",{"runtime":"automatic"}]]},"types":"dist/index.d.ts","module":"dist/esm/index.js","gitHead":"1fc76f4e3b75102783a0ea8892acd7fbd4e6e1d6","scripts":{"dev":"concurrently \"rollup -c --watch\" \"pnpm --dir example run dev\"","lint":"biome check .","test":"pnpm run test:unit && pnpm run test:import && pnpm run build-storybook && pnpm run test:visual","build":"rollup -c --bundleConfigAsCjs","format":"biome format --write .","dev:lib":"rollup -c --watch","prepare":"node -e \"const on=v=>!!v&&v!=='0'&&v!=='false';if(on(process.env.CI)&&!on(process.env.LEFTHOOK))process.exit(0);try{require('child_process').execSync('lefthook install --reset-hooks-path',{stdio:'inherit'})}catch{}\"","lint:fix":"biome check --write .","storybook":"storybook dev -p 6006","test:unit":"jest --coverage --watchAll=false","dev:example":"pnpm --dir example run dev","test:import":"node tests/import/test-import.js","test:visual":"playwright test","biome:migrate":"biome migrate --write","build-storybook":"storybook build","build:wordpress":"node wordpress/react-gdpr-cookie-consent/esbuild.config.mjs","test:unit:watch":"jest --coverage --watch","test:visual:update":"playwright test --update-snapshots"},"_npmUser":{"name":"jonas-scholl","email":"jonas@artus-engineering.de"},"repository":{"url":"git+https://github.com/artus-engineering/react-gdpr-consent-banner.git","type":"git"},"_npmVersion":"11.19.0","description":"A simple and customizable GDPR cookie consent component for React.","directories":{},"_nodeVersion":"26.7.0","browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"_hasShrinkwrap":false,"packageManager":"pnpm@11.23.0","devDependencies":{"jest":"30.4.2","vite":"8.2.2","tslib":"^2.8.1","rollup":"4.62.5","esbuild":"0.28.2","postcss":"8.5.26","archiver":"^8.0.0","lefthook":"^2.1.10","storybook":"10.5.10","babel-jest":"30.4.1","typescript":"6.0.3","@types/jest":"30.0.0","@types/node":"26.2.0","http-server":"14.1.1","tailwindcss":"4.3.3","@types/react":"19.2.18","autoprefixer":"10.5.4","concurrently":"^10.0.3","jest-get-type":"^29.6.3","@biomejs/biome":"2.5.10","diff-sequences":"^29.6.3","@playwright/test":"1.62.1","@storybook/react":"10.5.10","@types/react-dom":"19.2.4","@babel/preset-env":"7.29.7","@tailwindcss/vite":"4.3.3","rollup-plugin-dts":"6.5.1","@babel/preset-react":"7.29.7","@jest/test-sequencer":"30.4.1","@tailwindcss/postcss":"4.3.3","@testing-library/dom":"10.4.1","@rollup/plugin-terser":"1.0.0","@storybook/addon-docs":"10.5.10","@storybook/react-vite":"10.5.10","rollup-plugin-postcss":"4.0.2","@storybook/addon-links":"10.5.10","@testing-library/react":"16.3.2","jest-environment-jsdom":"30.4.1","rollup-plugin-analyzer":"4.0.0","@rollup/plugin-commonjs":"29.0.3","@babel/preset-typescript":"7.29.7","@chromatic-com/storybook":"5.3.0","baseline-browser-mapping":"^2.10.34","@rollup/plugin-typescript":"12.3.0","@testing-library/jest-dom":"^7.0.0","@testing-library/user-event":"^14.6.6","rollup-plugin-peer-deps-external":"2.2.4"},"peerDependencies":{"react":">=19.0.0","react-dom":">=19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react-gdpr-cookie-consent_1.0.8_1787609129833_0.2921745187911087","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"@artus-engineering/react-gdpr-cookie-consent","version":"2.0.0","keywords":["gdpr","cookie","consent","react","privacy","compliance"],"author":{"name":"Artus Engineering GmbH"},"license":"PolyForm-Noncommercial-1.0.0","_id":"@artus-engineering/react-gdpr-cookie-consent@2.0.0","maintainers":[{"name":"jonas-scholl","email":"jonas@artus-engineering.de"}],"homepage":"https://github.com/artus-engineering/react-gdpr-consent-banner#readme","bugs":{"url":"https://github.com/artus-engineering/react-gdpr-consent-banner/issues"},"dist":{"shasum":"a346733e3e35ffda7dc0903f274d83aa3910e8bf","tarball":"https://registry.npmjs.org/@artus-engineering/react-gdpr-cookie-consent/-/react-gdpr-cookie-consent-2.0.0.tgz","fileCount":9,"integrity":"sha512-BUhjr0EKd9PppdwlM4nGxV0ADa3QHtH2FEUDfh2ZDoemS5e3Eoru17QG8Oho8ksAezkctbOpvN41vPkleMrD9A==","signatures":[{"sig":"MEYCIQCKpiS/eRQ3sh2fsgT6W1jrqfXEMURwps6lV+fuEb7g8AIhALJVPiMBSPt91AjeM0fiwXUKwMPYMX1Drg/NzmwBOO6o","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQD2k1ldNhWSROU8yvt9RwpNhI112ZR0Z82h/6sJVCe4lAIgL/C4YKevuvKTk5z0wLuciTEaOH5HodrcLFWm7oa0FFU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@artus-engineering%2freact-gdpr-cookie-consent@2.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":185948},"jest":{"watchman":false,"testEnvironment":"jsdom","coverageProvider":"v8","coverageDirectory":"coverage","coverageReporters":["text","text-summary","lcov","html"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.ts"],"collectCoverageFrom":["src/**/*.{ts,tsx}","!src/**/*.d.ts","!src/**/*.test.{ts,tsx}","!src/**/*.stories.{ts,tsx}","!src/setupTests.ts","!src/**/index.ts","!src/test-utils/**"],"testPathIgnorePatterns":["/node_modules/","<rootDir>/tests/","<rootDir>/dist/"]},"main":"dist/cjs/index.cjs","type":"module","babel":{"presets":["@babel/preset-env","@babel/preset-typescript",["@babel/preset-react",{"runtime":"automatic"}]]},"types":"dist/index.d.ts","module":"dist/esm/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/esm/index.js","require":"./dist/cjs/index.cjs"},"./headless":{"types":"./dist/headless.d.ts","import":"./dist/esm/headless.js","require":"./dist/cjs/headless.cjs"},"./package.json":"./package.json"},"gitHead":"2f82cc0a6451767139fbdda817c8200aa3dfa2fd","scripts":{"dev":"concurrently \"rollup -c --watch\" \"pnpm --dir example run dev\"","lint":"biome check .","test":"pnpm run test:unit && pnpm run test:import && pnpm run build-storybook && pnpm run test:visual","build":"rollup -c --bundleConfigAsCjs","format":"biome format --write .","dev:lib":"rollup -c --watch","prepare":"node -e \"const on=v=>!!v&&v!=='0'&&v!=='false';if(on(process.env.CI)&&!on(process.env.LEFTHOOK))process.exit(0);try{require('child_process').execSync('lefthook install --reset-hooks-path',{stdio:'inherit'})}catch{}\"","lint:fix":"biome check --write .","storybook":"storybook dev -p 6006","test:unit":"jest --coverage --watchAll=false","dev:example":"pnpm --dir example run dev","test:import":"node tests/import/test-import.js","test:visual":"playwright test","biome:migrate":"biome migrate --write","build-storybook":"storybook build","build:wordpress":"node wordpress/react-gdpr-cookie-consent/esbuild.config.mjs","test:unit:watch":"jest --coverage --watch","test:visual:update":"playwright test --update-snapshots"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8b24503d-b84d-4bc1-ae54-473fa5f954d8"}},"repository":{"url":"git+https://github.com/artus-engineering/react-gdpr-consent-banner.git","type":"git"},"_npmVersion":"11.17.0","description":"A simple and customizable GDPR cookie consent component for React.","directories":{},"sideEffects":false,"_nodeVersion":"24.19.0","browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"_hasShrinkwrap":false,"packageManager":"pnpm@11.23.0","devDependencies":{"jest":"30.4.2","vite":"8.2.2","tslib":"^2.8.1","rollup":"4.62.5","esbuild":"0.28.2","postcss":"8.5.26","archiver":"^8.0.0","lefthook":"^2.1.10","storybook":"10.5.10","babel-jest":"30.4.1","typescript":"6.0.3","@types/jest":"30.0.0","@types/node":"26.2.0","http-server":"14.1.1","tailwindcss":"4.3.3","@types/react":"19.2.18","autoprefixer":"10.5.4","concurrently":"^10.0.3","jest-get-type":"^29.6.3","@biomejs/biome":"2.5.10","diff-sequences":"^29.6.3","@playwright/test":"1.62.1","@storybook/react":"10.5.10","@types/react-dom":"19.2.4","@babel/preset-env":"7.29.7","@tailwindcss/vite":"4.3.3","rollup-plugin-dts":"6.5.1","@babel/preset-react":"7.29.7","@jest/test-sequencer":"30.4.1","@tailwindcss/postcss":"4.3.3","@testing-library/dom":"10.4.1","@rollup/plugin-terser":"1.0.0","@storybook/addon-docs":"10.5.10","@storybook/react-vite":"10.5.10","rollup-plugin-postcss":"4.0.2","@storybook/addon-links":"10.5.10","@testing-library/react":"16.3.2","jest-environment-jsdom":"30.4.1","rollup-plugin-analyzer":"4.0.0","@rollup/plugin-commonjs":"29.0.3","@babel/preset-typescript":"7.29.7","@chromatic-com/storybook":"5.3.0","baseline-browser-mapping":"^2.10.34","@rollup/plugin-typescript":"12.3.0","@testing-library/jest-dom":"^7.0.0","@testing-library/user-event":"^14.6.6","rollup-plugin-peer-deps-external":"2.2.4"},"peerDependencies":{"react":">=19.0.0","react-dom":">=19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react-gdpr-cookie-consent_2.0.0_1788179115862_0.6193375493191655","host":"s3://npm-registry-packages-npm-production"}},"2.0.1":{"name":"@artus-engineering/react-gdpr-cookie-consent","version":"2.0.1","keywords":["gdpr","cookie","consent","react","privacy","compliance"],"author":{"name":"Artus Engineering GmbH"},"license":"PolyForm-Noncommercial-1.0.0","_id":"@artus-engineering/react-gdpr-cookie-consent@2.0.1","maintainers":[{"name":"jonas-scholl","email":"jonas@artus-engineering.de"}],"homepage":"https://github.com/artus-engineering/react-gdpr-consent-banner#readme","bugs":{"url":"https://github.com/artus-engineering/react-gdpr-consent-banner/issues"},"dist":{"shasum":"9f072a6eedad51345140faabd16a0efe6bed7fcb","tarball":"https://registry.npmjs.org/@artus-engineering/react-gdpr-cookie-consent/-/react-gdpr-cookie-consent-2.0.1.tgz","fileCount":9,"integrity":"sha512-GthaU2ojqerkeY4NwOfmANmOn3aBYibyNj+DGFyX2E6UcqnBSGhPaxIHcVrMsOWtpUT4o07LOUNuN7EU6qC1Jg==","signatures":[{"sig":"MEYCIQC6iP3FRNyzmB5GyMSV3h6Ry07hn2NtH6IeXtve2pZpEgIhAK7ZRlaX1FC5PCIuaiHcD6dklJGQAVvaJYFNUjU+30R/","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCICJCUue3xtpf2JrHauh6oSAcL/HWlxBIVF3laiw5rhe9AiAV2J0sLliP0qRc4iOOulSi6dgv0LVNsDuQjE4EiYC2gg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@artus-engineering%2freact-gdpr-cookie-consent@2.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":186573},"jest":{"watchman":false,"testEnvironment":"jsdom","coverageProvider":"v8","coverageDirectory":"coverage","coverageReporters":["text","text-summary","lcov","html"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.ts"],"collectCoverageFrom":["src/**/*.{ts,tsx}","!src/**/*.d.ts","!src/**/*.test.{ts,tsx}","!src/**/*.stories.{ts,tsx}","!src/setupTests.ts","!src/**/index.ts","!src/test-utils/**"],"testPathIgnorePatterns":["/node_modules/","<rootDir>/tests/","<rootDir>/dist/"]},"main":"dist/cjs/index.cjs","type":"module","babel":{"presets":["@babel/preset-env","@babel/preset-typescript",["@babel/preset-react",{"runtime":"automatic"}]]},"types":"dist/index.d.ts","module":"dist/esm/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/esm/index.js","require":"./dist/cjs/index.cjs"},"./headless":{"types":"./dist/headless.d.ts","import":"./dist/esm/headless.js","require":"./dist/cjs/headless.cjs"},"./package.json":"./package.json"},"gitHead":"3029c3e3a0b540b096529828b0d19fe957fcc3e1","scripts":{"dev":"concurrently \"rollup -c --watch\" \"pnpm --dir example run dev\"","lint":"biome check .","test":"pnpm run test:unit && pnpm run test:import && pnpm run build-storybook && pnpm run test:visual","build":"rollup -c --bundleConfigAsCjs","format":"biome format --write .","dev:lib":"rollup -c --watch","prepare":"node -e \"const on=v=>!!v&&v!=='0'&&v!=='false';if(on(process.env.CI)&&!on(process.env.LEFTHOOK))process.exit(0);try{require('child_process').execSync('lefthook install --reset-hooks-path',{stdio:'inherit'})}catch{}\"","lint:fix":"biome check --write .","storybook":"storybook dev -p 6006","test:unit":"jest --coverage --watchAll=false","dev:example":"pnpm --dir example run dev","test:import":"node tests/import/test-import.js","test:visual":"playwright test","biome:migrate":"biome migrate --write","build-storybook":"storybook build","build:wordpress":"node wordpress/react-gdpr-cookie-consent/esbuild.config.mjs","test:unit:watch":"jest --coverage --watch","test:visual:update":"playwright test --update-snapshots"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8b24503d-b84d-4bc1-ae54-473fa5f954d8"}},"repository":{"url":"git+https://github.com/artus-engineering/react-gdpr-consent-banner.git","type":"git"},"_npmVersion":"11.17.0","description":"A simple and customizable GDPR cookie consent component for React.","directories":{},"sideEffects":false,"_nodeVersion":"24.19.0","browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"_hasShrinkwrap":false,"packageManager":"pnpm@11.24.0","devDependencies":{"jest":"30.4.2","vite":"8.2.2","tslib":"^2.8.1","rollup":"4.63.1","esbuild":"0.28.2","postcss":"8.5.26","archiver":"^8.0.0","lefthook":"^2.1.12","storybook":"10.5.10","babel-jest":"30.4.1","typescript":"6.0.3","@types/jest":"30.0.0","@types/node":"26.4.0","http-server":"14.1.1","tailwindcss":"4.3.3","@types/react":"19.2.18","autoprefixer":"10.5.4","concurrently":"^10.0.5","jest-get-type":"^29.6.3","@biomejs/biome":"2.5.11","diff-sequences":"^29.6.3","@playwright/test":"1.62.1","@storybook/react":"10.5.10","@types/react-dom":"19.2.5","@babel/preset-env":"7.29.7","@tailwindcss/vite":"4.3.3","rollup-plugin-dts":"6.5.1","@babel/preset-react":"7.29.7","@jest/test-sequencer":"30.4.1","@tailwindcss/postcss":"4.3.3","@testing-library/dom":"10.4.1","@rollup/plugin-terser":"1.0.0","@storybook/addon-docs":"10.5.10","@storybook/react-vite":"10.5.10","rollup-plugin-postcss":"4.0.2","@storybook/addon-links":"10.5.10","@testing-library/react":"16.3.3","jest-environment-jsdom":"30.4.1","rollup-plugin-analyzer":"4.0.0","@rollup/plugin-commonjs":"29.0.3","@babel/preset-typescript":"7.29.7","@chromatic-com/storybook":"5.3.0","baseline-browser-mapping":"2.11.6","@rollup/plugin-typescript":"12.3.0","@testing-library/jest-dom":"^7.0.1","@testing-library/user-event":"^14.6.6","rollup-plugin-peer-deps-external":"2.2.4"},"peerDependencies":{"react":">=19.0.0","react-dom":">=19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react-gdpr-cookie-consent_2.0.1_1788292714188_0.656314669605242","host":"s3://npm-registry-packages-npm-production"}},"2.0.2":{"_id":"@artus-engineering/react-gdpr-cookie-consent@2.0.2","bugs":{"url":"https://github.com/artus-engineering/react-gdpr-consent-banner/issues"},"dist":{"shasum":"315d16677061c24b405e1f506b8fcbc1079eb534","tarball":"https://registry.npmjs.org/@artus-engineering/react-gdpr-cookie-consent/-/react-gdpr-cookie-consent-2.0.2.tgz","fileCount":9,"integrity":"sha512-81k2Bfvo2oMjbzr8kHO7uFX2mygltFcIOSFmCEEux/AsB+idCJ8wjMPiuS4+mEpe2emyOutkf2Z0M/0ZBgyRlw==","signatures":[{"sig":"MEUCIEG7J7IPWMZgyP+n9RhBKnWH/Zrh5jiavAYle7pDK+tlAiEAkrzhBbOPVsG9sdsqFoYCyVD9/5j/fGPpnnXpSMzUVhA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCICCjb9kdO6dBCSYvB+hmFOZysyNd2kJHfiaGfj7vCl2kAiEAz6orLqbqKaTls0LQ8yNXQeSBrUh8cEvqQ0Q0usqrks0="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@artus-engineering%2freact-gdpr-cookie-consent@2.0.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":186870},"jest":{"watchman":false,"testEnvironment":"jsdom","coverageProvider":"v8","coverageDirectory":"coverage","coverageReporters":["text","text-summary","lcov","html"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.ts"],"collectCoverageFrom":["src/**/*.{ts,tsx}","!src/**/*.d.ts","!src/**/*.test.{ts,tsx}","!src/**/*.stories.{ts,tsx}","!src/setupTests.ts","!src/**/index.ts","!src/test-utils/**"],"testPathIgnorePatterns":["/node_modules/","<rootDir>/tests/","<rootDir>/dist/"]},"main":"dist/cjs/index.cjs","name":"@artus-engineering/react-gdpr-cookie-consent","type":"module","babel":{"presets":["@babel/preset-env","@babel/preset-typescript",["@babel/preset-react",{"runtime":"automatic"}]]},"types":"dist/index.d.ts","author":{"name":"Artus Engineering GmbH"},"module":"dist/esm/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/esm/index.js","require":"./dist/cjs/index.cjs"},"./headless":{"types":"./dist/headless.d.ts","import":"./dist/esm/headless.js","require":"./dist/cjs/headless.cjs"},"./package.json":"./package.json"},"gitHead":"b3fd67eecb4ee2cc4111fe8a6f163410e9f0c6f3","license":"PolyForm-Noncommercial-1.0.0","scripts":{"dev":"concurrently \"rollup -c --watch\" \"pnpm --dir example run dev\"","lint":"biome check .","test":"pnpm run test:unit && pnpm run test:import && pnpm run build-storybook && pnpm run test:visual","build":"rollup -c --bundleConfigAsCjs","format":"biome format --write .","dev:lib":"rollup -c --watch","prepare":"node -e \"const on=v=>!!v&&v!=='0'&&v!=='false';if(on(process.env.CI)&&!on(process.env.LEFTHOOK))process.exit(0);try{require('child_process').execSync('lefthook install --reset-hooks-path',{stdio:'inherit'})}catch{}\"","lint:fix":"biome check --write .","storybook":"storybook dev -p 6006","test:unit":"jest --coverage --watchAll=false","dev:example":"pnpm --dir example run dev","test:import":"node tests/import/test-import.js","test:visual":"playwright test","biome:migrate":"biome migrate --write","build-storybook":"storybook build","build:wordpress":"node wordpress/react-gdpr-cookie-consent/esbuild.config.mjs","test:unit:watch":"jest --coverage --watch","test:visual:update":"playwright test --update-snapshots"},"version":"2.0.2","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8b24503d-b84d-4bc1-ae54-473fa5f954d8"}},"homepage":"https://react-gdpr-consent-banner.artus-engineering.de","keywords":["gdpr","cookie","consent","react","privacy","compliance"],"repository":{"url":"git+https://github.com/artus-engineering/react-gdpr-consent-banner.git","type":"git"},"_npmVersion":"11.19.0","description":"A simple and customizable GDPR cookie consent component for React.","directories":{},"maintainers":[{"name":"jonas-scholl","email":"jonas@artus-engineering.de"},{"name":"yannic.schroeer","email":"yannic@artus-engineering.de"}],"sideEffects":false,"_nodeVersion":"24.20.0","browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"_hasShrinkwrap":false,"packageManager":"pnpm@11.25.0+sha512.5cde925b4f075f725eb71fbae18a42ffe784524789f19b61c731cb8721ec28aaee160e01a8d5af4fedb2a42cdbf300efe23db356b0d4a17b4d63e11f8ab7c956","devDependencies":{"jest":"30.5.1","vite":"8.2.2","tslib":"^2.8.1","rollup":"4.63.1","esbuild":"0.28.2","postcss":"8.5.28","archiver":"^8.0.0","lefthook":"^2.1.12","storybook":"10.6.0","babel-jest":"30.5.1","typescript":"6.0.3","@types/jest":"30.0.0","@types/node":"26.4.1","http-server":"14.1.1","tailwindcss":"4.3.3","@types/react":"19.2.18","autoprefixer":"10.5.4","concurrently":"^10.0.5","jest-get-type":"^29.6.3","@biomejs/biome":"2.5.12","diff-sequences":"^29.6.3","@playwright/test":"1.62.1","@storybook/react":"10.6.0","@types/react-dom":"19.2.7","@babel/preset-env":"7.29.7","@tailwindcss/vite":"4.3.3","rollup-plugin-dts":"6.5.1","@babel/preset-react":"7.29.7","@jest/test-sequencer":"30.5.1","@tailwindcss/postcss":"4.3.3","@testing-library/dom":"10.4.1","@rollup/plugin-terser":"1.0.0","@storybook/addon-docs":"10.6.0","@storybook/react-vite":"10.6.0","rollup-plugin-postcss":"4.0.2","@storybook/addon-links":"10.6.0","@testing-library/react":"16.3.3","jest-environment-jsdom":"30.5.1","rollup-plugin-analyzer":"4.0.0","@rollup/plugin-commonjs":"29.0.3","@babel/preset-typescript":"7.29.7","@chromatic-com/storybook":"5.3.1","baseline-browser-mapping":"2.11.6","@rollup/plugin-typescript":"12.3.0","@testing-library/jest-dom":"^7.0.1","@testing-library/user-event":"^14.6.7","rollup-plugin-peer-deps-external":"2.2.4"},"peerDependencies":{"react":">=19.0.0","react-dom":">=19.0.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/react-gdpr-cookie-consent_2.0.2_1788957935080_0.5711486582154741"}}},"time":{"created":"2026-08-24T22:05:29.660Z","modified":"2026-09-09T12:45:35.488Z","1.0.8":"2026-08-24T22:05:29.958Z","2.0.0":"2026-08-31T12:25:15.958Z","2.0.1":"2026-09-01T19:58:34.285Z","2.0.2":"2026-09-09T12:45:35.175Z"},"bugs":{"url":"https://github.com/artus-engineering/react-gdpr-consent-banner/issues"},"author":{"name":"Artus Engineering GmbH"},"license":"PolyForm-Noncommercial-1.0.0","homepage":"https://react-gdpr-consent-banner.artus-engineering.de","keywords":["gdpr","cookie","consent","react","privacy","compliance"],"repository":{"url":"git+https://github.com/artus-engineering/react-gdpr-consent-banner.git","type":"git"},"description":"A simple and customizable GDPR cookie consent component for React.","maintainers":[{"name":"jonas-scholl","email":"jonas@artus-engineering.de"},{"name":"yannic.schroeer","email":"yannic@artus-engineering.de"}],"readme":"<div align=\"center\">\n  <picture>\n    <source media=\"(prefers-color-scheme: dark)\" srcset=\"assets/artus-engineering-logo-white.svg\" />\n    <source media=\"(prefers-color-scheme: light)\" srcset=\"assets/artus-engineering-logo-black.svg\" />\n    <img alt=\"Artus Engineering\" src=\"assets/artus-engineering-logo-black.svg\" width=\"400\" />\n  </picture>\n</div>\n\n<p align=\"center\">\n  A <a href=\"https://react.dev\" target=\"_blank\">React</a> library for GDPR-compliant cookie consent banners with theming, consent gates, and declarative tool integrations with Google Consent Mode v2.\n</p>\n\n<div align=\"center\">\n  <a href=\"https://www.npmjs.com/package/@artus-engineering/react-gdpr-cookie-consent\"><img alt=\"NPM Version\" src=\"https://img.shields.io/npm/v/%40artus-engineering%2Freact-gdpr-cookie-consent\"></a>\n  <a href=\"https://github.com/artus-engineering/react-gdpr-consent-banner/blob/main/LICENSE\"><img alt=\"License\" src=\"https://img.shields.io/badge/License-PolyForm%20Noncommercial%201.0.0-8b5cf6\"></a>\n  <a href=\"https://github.com/artus-engineering/react-gdpr-consent-banner/actions/workflows/branch.yaml\"><img alt=\"CI Status\" src=\"https://img.shields.io/github/actions/workflow/status/artus-engineering/react-gdpr-consent-banner/.github%2Fworkflows%2Fbranch.yaml?label=CI&logo=GitHub\"></a>\n  <a href=\"https://sonar.artus-engineering.de/dashboard?id=artus-engineering_react-gdpr-consent-banner_77b80343-758e-46a6-aaa4-a2f681f7d05d\"><img alt=\"SonarQube Quality Gate\" src=\"https://sonar.artus-engineering.de/api/project_badges/measure?project=artus-engineering_react-gdpr-consent-banner_77b80343-758e-46a6-aaa4-a2f681f7d05d&amp;metric=alert_status&amp;token=sqb_88234c043e5593851d73ec5aa1c1e6e0a41d0d17\"></a>\n  <a href=\"https://artus-engineering.github.io/react-gdpr-consent-banner/\"><img alt=\"Live demo\" src=\"https://img.shields.io/badge/demo-live-0ea5e9?logo=next.js&logoColor=white\"></a>\n</div>\n\n<hr />\n\n## Table of Contents <!-- omit in toc -->\n\n- [Features](#features)\n- [License](#license)\n- [Installation](#installation)\n- [Quick Start](#quick-start)\n- [Configuration](#configuration)\n- [Consent storage & re-consent](#consent-storage--re-consent)\n- [Components](#components)\n- [Integrations](#integrations)\n- [Hooks](#hooks)\n- [WordPress Plugin](#wordpress-plugin)\n- [Development](#development)\n- [Releases](#releases)\n\n## Features\n\n- **Drop-in banner** — Add a full cookie consent UI with `CookieConsentProvider`\n- **Strict loading** — No third-party script is injected before the visitor consents; Google Consent Mode v2 defaults to denied\n- **Declarative integrations** — JSON-serializable descriptors for Google Tag Manager, GA4, Google Ads, Meta Pixel, and custom scripts\n- **Privacy-minimal consent cookie** — One first-party cookie without any user id; rejection is stored too, so visitors are not re-asked\n- **Re-consent on material change** — A purposes hash ties consent to the provider set; only material changes re-prompt\n- **Consent gates** — Block embedded third-party content until the matching provider is accepted\n- **Theming** — Customize colors and typography to match your brand\n- **i18n** — Built-in German and English copy with extensible provider descriptions\n- **Full TypeScript support** — Complete type definitions for configuration and integrations\n- **React 19 compatible** — Built for modern React applications\n\n## License\n\nThis software is licensed under the [PolyForm Noncommercial License 1.0.0](LICENSE). You may use, modify, and distribute it for **noncommercial purposes**.\n\n**Commercial use** (client projects, SaaS, paid products, and similar) requires a separate license. See [COMMERCIAL-LICENSE.md](COMMERCIAL-LICENSE.md).\n\n## Installation\n\n```bash\n# npm\nnpm install @artus-engineering/react-gdpr-cookie-consent\n\n# pnpm\npnpm add @artus-engineering/react-gdpr-cookie-consent\n\n# yarn\nyarn add @artus-engineering/react-gdpr-cookie-consent\n```\n\n**Requirements:** React 19.0.0 or higher\n\n## Quick Start\n\nWrap your application with `CookieConsentProvider` and configure your cookie providers:\n\n```tsx\nimport { CookieConsentProvider } from \"@artus-engineering/react-gdpr-cookie-consent\";\n\nconst config = {\n  cookiePolicyLink: \"/privacy-policy\",\n  websiteName: \"My Website\",\n  domain: \"example.com\",\n  lang: \"enUS\",\n  providers: [\n    {\n      id: \"google-analytics\",\n      name: \"Google Analytics\",\n      category: \"Analytics\",\n      description: {\n        enUS: \"We use Google Analytics to understand how visitors use our site.\",\n        deDE: \"Wir verwenden Google Analytics, um zu verstehen, wie Besucher unsere Website nutzen.\",\n      },\n      dataProtectionLink: \"https://policies.google.com/privacy\",\n      serviceProvider: \"Google\",\n      cookies: [\n        {\n          name: \"_ga\",\n          duration: 2,\n          unit: \"years\",\n          purpose: {\n            enUS: \"Used to distinguish users\",\n            deDE: \"Wird verwendet, um Benutzer zu unterscheiden\",\n          },\n        },\n      ],\n    },\n  ],\n  integrations: [\n    {\n      id: \"int_ga4\",\n      type: \"ga4\",\n      providerId: \"google-analytics\",\n      params: { measurementId: \"G-XXXXXXXXXX\" },\n    },\n  ],\n};\n\nexport function App({ children }: { children: React.ReactNode }) {\n  return (\n    <CookieConsentProvider config={config}>\n      {children}\n    </CookieConsentProvider>\n  );\n}\n```\n\nThe provider renders the consent banner automatically. Re-open it later with `useOpenCookieBanner()`.\n\n## Configuration\n\n`CookieConsentProvider` accepts a `config` object of type `CookieConsentBannerConfig`:\n\n| Option | Type | Description |\n| --- | --- | --- |\n| `providers` | `CookieProvider[]` | Cookie providers grouped by category (Essential, Functional, Analytics, Marketing) |\n| `websiteName` | `string` | Display name shown in the banner |\n| `domain` | `string` | Primary domain of the website |\n| `cookieDomain` | `string?` | Cookie `Domain=` attribute for subdomain-wide consent (e.g. `.example.com`) |\n| `cookieName` | `string?` | Name of the consent cookie (default: `artus_consent`) |\n| `purposesHash` | `string?` | Hex hash identifying the material configuration; a mismatch with the stored cookie triggers re-consent. Without it, a local fingerprint over provider ids and categories is used |\n| `integrations` | `IntegrationDescriptor[]?` | Declarative tool integrations, injected only after consent |\n| `cookiePolicyLink` | `string` | Link to your privacy / cookie policy |\n| `lang` | `SupportedLanguage` | Banner locale (`enUS`, `deDE`) |\n| `theme` | `CookieConsentStyle` | Optional color overrides |\n| `labels` | `PartialCookieConsentLabels?` | Partial overrides of any banner copy |\n| `consentHooks` | `ConsentHook[]?` | **Deprecated** — use `integrations`; removed in 3.0 |\n| `crossSubDomainConsent` | `string[]?` | **Deprecated** — display-only; use `cookieDomain` |\n| `cookiesValidForDays` | `number?` | **Deprecated** — the v2 cookie has a fixed max age (400 days) and is renewed on every visit |\n\nSet `includeCookieBanner={false}` on the provider if you only need context and hooks without rendering the banner.\n\n## Consent storage & re-consent\n\nConsent is stored in **one first-party cookie** (`artus_consent`) that contains only the decision per\nnon-essential provider, plus a short purposes-hash prefix identifying the configuration the consent\nrefers to — no user id, no timestamp, no fingerprint. A cookie is also written on rejection, so\nreturning visitors are not asked again.\n\n```json\n{ \"v\": 2, \"ph\": \"9f2b4c11d8a0e5f6\", \"d\": { \"gtm\": 1, \"ga4\": 1, \"meta\": 0 } }\n```\n\nConsent does not expire. The cookie is written with a 400-day max age (the Chrome cap) and renewed on\nevery visit. The banner re-prompts only when the **material** configuration changes (providers\nadded/removed or categories changed — reflected in `purposesHash`); previous grants are then treated\nas absent until the visitor decides again (fail-closed). Cosmetic changes (texts, theme) never\nre-prompt.\n\nExisting v1 per-provider cookies (`{id}_consent`) are migrated automatically on first load and\nremoved afterwards.\n\n## Components\n\n| Component | Description |\n| --- | --- |\n| `CookieConsentProvider` | Root provider; manages consent state, hooks, and optional banner |\n| `CookieConsentBanner` | Standalone banner (usually rendered by the provider) |\n| `CookieConsentGate` | Blocks content until consent is granted for a given provider |\n| `CookiePolicy` | Renders a cookie policy table from configured providers |\n\n### Consent gate example\n\n```tsx\nimport {\n  CookieConsentGate,\n  useCookieProviders,\n} from \"@artus-engineering/react-gdpr-cookie-consent\";\n\nfunction PaymentSection() {\n  const providers = useCookieProviders();\n  const stripe = providers.find((p) => p.id === \"stripe\");\n  if (!stripe) return null;\n\n  return (\n    <CookieConsentGate cookieProvider={stripe}>\n      <EmbeddedCheckout />\n    </CookieConsentGate>\n  );\n}\n```\n\n## Integrations\n\nIntegrations are plain JSON descriptors. Scripts are injected **only after** the matching provider\nhas been granted (strict loading); for Google tools, Consent Mode v2 defaults are pushed as `denied`\nbefore anything loads and updated from the visitor's category decisions. On revocation, the cookies\ndeclared for the provider (wildcards like `_ga_*` supported) are deleted.\n\n| Type | Params | Integrates |\n| --- | --- | --- |\n| `gtm` | `containerId` | Google Tag Manager |\n| `ga4` | `measurementId`, `anonymizeIp?` | Google Analytics 4 |\n| `google-ads` | `conversionId` | Google Ads conversion tracking |\n| `meta-pixel` | `pixelId` | Meta Pixel |\n| `custom-script` | `src` (https only), `attrs?` | Any third-party script |\n\n```tsx\nconst config = {\n  // …other config\n  integrations: [\n    { id: \"int_gtm\", type: \"gtm\", providerId: \"gtm\", params: { containerId: \"GTM-XXXXXXX\" } },\n    { id: \"int_meta\", type: \"meta-pixel\", providerId: \"meta\", params: { pixelId: \"1234567890\" } },\n  ],\n};\n```\n\n### Headless entry point\n\nNon-React consumers — script loaders, WordPress bridges, edge workers — import from\n`@artus_engineering/react-gdpr-cookie-consent/headless`, which exposes the consent cookie logic\n(`getConsentStatus`, `readConsentCookie`, `writeConsentCookie`, `refreshConsentCookie`,\n`resolveConsentCookieName`, `resolvePurposesHashPrefix`), the `ConsentStore` and the\n`IntegrationRegistry` without pulling React into the bundle. The main entry cannot be tree-shaken\ndown to these: it re-exports components whose module scope calls `createContext`, which bundlers\nmust treat as a side effect.\n\n```ts\nimport {\n  getConsentStatus,\n  IntegrationRegistry,\n} from \"@artus_engineering/react-gdpr-cookie-consent/headless\";\n```\n\nThe v1 `consentHooks` factories (`createGoogleAnalyticsHook`, `createGoogleTagManagerHook`,\n`createFacebookPixelHook`, `createGoogleAdsHook`, `createCustomToolHook`) remain available but are\n**deprecated** and will be removed in 3.0. Note that they follow the old loading model (Google\nscripts load before consent with denied defaults), while `integrations` never load anything\npre-consent.\n\n## Hooks\n\n| Hook | Description |\n| --- | --- |\n| `useCookieConsentContext` | Banner open state and provider context |\n| `useOpenCookieBanner` | Programmatically open the consent banner |\n| `useConsentSnapshot` | Subscribe to the consent status (`none`/`partial`/`stale`/`valid`) and per-provider decisions |\n| `useCookieProviders` | Access configured providers (optionally filtered) |\n| `useCookieState` | Read whether a provider has consent |\n| `useConfig` | Read the resolved banner configuration |\n| `useStyle` | Read the resolved theme styles |\n\n## WordPress Plugin\n\nA German-language WordPress plugin is included under `wordpress/react-gdpr-cookie-consent/`. Build a ready-to-upload zip with:\n\n```bash\npnpm run build:wordpress\n```\n\nThe artifact is written to `wordpress/react-gdpr-cookie-consent/dist/react-gdpr-cookie-consent.zip`.\n\n## Development\n\nClone the repository and install dependencies:\n\n```bash\npnpm install\npnpm run storybook    # local component docs\npnpm run dev          # library watch + Next.js example app (live demo: https://artus-engineering.github.io/react-gdpr-consent-banner/)\n```\n\nRun the full test suite before opening a pull request:\n\n```bash\npnpm run lint\npnpm run build\npnpm run test:all\npnpm run build-storybook\npnpm run test:visual\n```\n\nSee [AGENTS.md](AGENTS.md) for contributor conventions.\n\n## Releases\n\nPackages are published to [npm](https://www.npmjs.com/package/@artus-engineering/react-gdpr-cookie-consent) when a [GitHub Release](https://github.com/artus-engineering/react-gdpr-consent-banner/releases) is published.\n\n1. Ensure `main` is green.\n2. Create a GitHub Release with a semver tag, e.g. `v1.0.5`.\n3. The publish workflow runs tests, builds `dist/`, and publishes to npm via [Trusted Publishing](https://docs.npmjs.com/trusted-publishers/) (no npm token required).\n\nThe release tag (without the leading `v`) becomes the package version.\n\n---\n\nMaintained by [Artus Engineering GmbH](https://artus-engineering.de).\n","readmeFilename":"README.md"}