{"_id":"@afixt/accessible-cookie-banner","_rev":"10-6068adadce6030c4b3ba2aaf0dac883e","name":"@afixt/accessible-cookie-banner","dist-tags":{"latest":"1.2.0"},"versions":{"1.0.0":{"name":"@afixt/accessible-cookie-banner","version":"1.0.0","keywords":["accessibility","WCAG","cookie","consent","GDPR","CCPA","banner","a11y"],"author":{"name":"Karl Groves","email":"karlgroves@gmail.com"},"license":"MIT","_id":"@afixt/accessible-cookie-banner@1.0.0","maintainers":[{"name":"karlgroves","email":"karlgroves@gmail.com"}],"homepage":"https://github.com/afixt/cookie-banner#readme","bugs":{"url":"https://github.com/afixt/cookie-banner/issues"},"dist":{"shasum":"6dc37c4316f7f1128a14a95ae1ee2ad79400d652","tarball":"https://registry.npmjs.org/@afixt/accessible-cookie-banner/-/accessible-cookie-banner-1.0.0.tgz","fileCount":33,"integrity":"sha512-93gHwlW3hcd/N3grJHPry7HUe1JXkhWwpJzO6zEQS/sNMvdW93CxqZV8nJ/X0vN/SQKWPy/wr8tAecd8kbx/vA==","signatures":[{"sig":"MEQCIEYPdVj7OilzBsyJpQGsh6izmw1cie0FyMkEJPf2C5lxAiBOcIQgtV+1/kHVGuviD6SxgIlOlLB6IkJXUMKS8xgODw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":126714},"main":"dist/cookie-banner.js","type":"module","babel":{"presets":["@babel/preset-env"]},"types":"dist/types/index.d.ts","module":"dist/cookie-banner.esm.js","engines":{"node":">=22.0.0"},"gitHead":"69ae628b778524065139e2576fe7b7d0bd131226","scripts":{"dev":"npm run css:build && rollup -c -w","docs":"jsdoc -c jsdoc.json","size":"size-limit","test":"jest","build":"npm run clean && npm run css:build && rollup -c","clean":"rimraf dist","serve":"http-server . -p 8080","start":"npm run build && npm run serve","analyze":"npx webpack-bundle-analyzer dist/cookie-banner.js --mode static --report bundle-report.html --no-open","docs:md":"jsdoc2md 'src/js/*.js' > docs/API.md","version":"npm run build","test:all":"npm run test && npm run test:a11y","css:build":"postcss src/css/main.css -o dist/banner.css","css:watch":"postcss src/css/main.css -o dist/banner.css --watch","test:a11y":"playwright test --config=playwright.config.js","docs:build":"npm run docs:clean && npm run docs && npm run docs:md","docs:clean":"rimraf docs/api","test:watch":"jest --watch","postversion":"git push && git push --tags","test:visual":"playwright test --config=playwright-visual.config.js","size:analyze":"npm run build && size-limit && npm run analyze","test:coverage":"jest --coverage","prepublishOnly":"npm run test:all && npm run build","test:a11y:headed":"playwright test --config=playwright.config.js --headed","install:playwright":"playwright install","test:visual:headed":"playwright test --config=playwright-visual.config.js --headed","test:visual:update":"playwright test --config=playwright-visual.config.js --update-snapshots","test:a11y:regression":"playwright test test/accessibility-regression.test.js --config=playwright.config.js"},"_npmUser":{"name":"karlgroves","email":"karlgroves@gmail.com"},"repository":{"url":"git+ssh://git@github.com/AFixt/cookie-banner.git","type":"git"},"size-limit":[{"gzip":true,"path":"./dist/cookie-banner.min.js","limit":"15kb"},{"path":"./dist/cookie-banner.js","limit":"35kb"},{"gzip":true,"path":"./dist/banner.css","limit":"8kb"}],"_npmVersion":"10.9.2","description":"A customizable, WCAG-conformant cookie consent banner with GDPR, CCPA compliance","directories":{},"sideEffects":false,"_nodeVersion":"22.16.0","browserslist":["> 1%","last 2 versions","not dead","not ie 11"],"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","jsdoc":"^4.0.4","rimraf":"^5.0.5","rollup":"^4.20.1","postcss":"^8.5.6","babel-jest":"^29.7.0","playwright":"^1.52.0","size-limit":"^11.2.0","http-server":"^14.1.1","postcss-cli":"^11.0.1","autoprefixer":"^10.4.21","postcss-calc":"^10.1.1","postcss-import":"^16.1.1","postcss-mixins":"^12.0.0","postcss-nested":"^7.0.2","@playwright/test":"^1.53.2","@size-limit/file":"^11.2.0","@babel/preset-env":"^7.26.9","jsdoc-to-markdown":"^9.1.1","rollup-plugin-copy":"^3.5.0","@rollup/plugin-json":"^6.1.0","@axe-core/playwright":"^4.10.1","@rollup/plugin-babel":"^6.0.4","@testing-library/dom":"^9.3.4","@rollup/plugin-terser":"^0.4.4","jest-environment-jsdom":"^29.7.0","rollup-plugin-analyzer":"^4.0.0","@rollup/plugin-commonjs":"^25.0.7","webpack-bundle-analyzer":"^4.10.2","@testing-library/jest-dom":"^6.6.3","postcss-custom-properties":"^14.0.6","@rollup/plugin-node-resolve":"^15.2.3"},"_npmOperationalInternal":{"tmp":"tmp/accessible-cookie-banner_1.0.0_1758050409882_0.7926913904876371","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@afixt/accessible-cookie-banner","version":"1.0.2","keywords":["accessibility","WCAG","cookie","consent","GDPR","CCPA","banner","a11y"],"author":{"name":"Karl Groves","email":"karlgroves@gmail.com"},"license":"MIT","_id":"@afixt/accessible-cookie-banner@1.0.2","maintainers":[{"name":"karlgroves","email":"karlgroves@gmail.com"}],"homepage":"https://github.com/afixt/cookie-banner#readme","bugs":{"url":"https://github.com/afixt/cookie-banner/issues"},"dist":{"shasum":"3dcfd3ff86d1444f4bb7148a4fec1cad0e12cf30","tarball":"https://registry.npmjs.org/@afixt/accessible-cookie-banner/-/accessible-cookie-banner-1.0.2.tgz","fileCount":33,"integrity":"sha512-kcUL9dk3J7668nDmGUEqtAMKaXl940oC69lwB7pIRZL6CmtugqimI6ap+1kaXXcD7k/GZZJdOnE7FhXHB1CaTw==","signatures":[{"sig":"MEUCICdxfh2+lI+oeBlH2ybqXS/hV8D4LRMUrc07IYI/ofgrAiEAtYc7lVRDGq+8H9C6hIsnBMC/JNyMnnG/DZmUKB4UD9Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":127233},"main":"dist/cookie-banner.js","type":"module","babel":{"presets":["@babel/preset-env"]},"types":"dist/types/index.d.ts","module":"dist/cookie-banner.esm.js","engines":{"node":">=22.0.0"},"gitHead":"2519170364ef24b7805e521ed57b3ec3195ef1da","scripts":{"dev":"npm run css:build && rollup -c -w","docs":"jsdoc -c jsdoc.json","size":"size-limit","test":"jest","build":"npm run clean && npm run css:build && rollup -c","clean":"rimraf dist","serve":"http-server . -p 8080","start":"npm run build && npm run serve","analyze":"npx webpack-bundle-analyzer dist/cookie-banner.js --mode static --report bundle-report.html --no-open","docs:md":"jsdoc2md 'src/js/*.js' > docs/API.md","version":"npm run build","test:all":"npm run test && npm run test:a11y","css:build":"postcss src/css/main.css -o dist/banner.css","css:watch":"postcss src/css/main.css -o dist/banner.css --watch","test:a11y":"playwright test --config=playwright.config.js","docs:build":"npm run docs:clean && npm run docs && npm run docs:md","docs:clean":"rimraf docs/api","test:watch":"jest --watch","postversion":"git push && git push --tags","test:visual":"playwright test --config=playwright-visual.config.js","size:analyze":"npm run build && size-limit && npm run analyze","test:coverage":"jest --coverage","prepublishOnly":"npm run test:all && npm run build","test:a11y:headed":"playwright test --config=playwright.config.js --headed","install:playwright":"playwright install","test:visual:headed":"playwright test --config=playwright-visual.config.js --headed","test:visual:update":"playwright test --config=playwright-visual.config.js --update-snapshots","test:a11y:regression":"playwright test test/accessibility-regression.test.js --config=playwright.config.js"},"_npmUser":{"name":"karlgroves","email":"karlgroves@gmail.com"},"repository":{"url":"git+ssh://git@github.com/AFixt/cookie-banner.git","type":"git"},"size-limit":[{"gzip":true,"path":"./dist/cookie-banner.min.js","limit":"15kb"},{"path":"./dist/cookie-banner.js","limit":"35kb"},{"gzip":true,"path":"./dist/banner.css","limit":"8kb"}],"_npmVersion":"11.6.0","description":"A customizable, WCAG-conformant cookie consent banner with GDPR, CCPA compliance","directories":{},"sideEffects":false,"_nodeVersion":"22.16.0","browserslist":["> 1%","last 2 versions","not dead","not ie 11"],"dependencies":{"@eventably/a11y-assert":"^1.1.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","jsdoc":"^4.0.4","rimraf":"^5.0.5","rollup":"^4.20.1","postcss":"^8.5.6","babel-jest":"^29.7.0","playwright":"^1.52.0","size-limit":"^11.2.0","http-server":"^14.1.1","postcss-cli":"^11.0.1","autoprefixer":"^10.4.21","postcss-calc":"^10.1.1","postcss-import":"^16.1.1","postcss-mixins":"^12.0.0","postcss-nested":"^7.0.2","@playwright/test":"^1.53.2","@size-limit/file":"^11.2.0","@babel/preset-env":"^7.26.9","jsdoc-to-markdown":"^9.1.1","rollup-plugin-copy":"^3.5.0","@rollup/plugin-json":"^6.1.0","@rollup/plugin-babel":"^6.0.4","@testing-library/dom":"^9.3.4","@rollup/plugin-terser":"^0.4.4","jest-environment-jsdom":"^29.7.0","rollup-plugin-analyzer":"^4.0.0","@rollup/plugin-commonjs":"^25.0.7","webpack-bundle-analyzer":"^4.10.2","@testing-library/jest-dom":"^6.6.3","postcss-custom-properties":"^14.0.6","@rollup/plugin-node-resolve":"^15.2.3"},"_npmOperationalInternal":{"tmp":"tmp/accessible-cookie-banner_1.0.2_1759087600301_0.8499317316310997","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@afixt/accessible-cookie-banner","version":"1.0.3","keywords":["accessibility","WCAG","cookie","consent","GDPR","CCPA","banner","a11y"],"author":{"name":"Karl Groves","email":"karlgroves@gmail.com"},"license":"MIT","_id":"@afixt/accessible-cookie-banner@1.0.3","maintainers":[{"name":"karlgroves","email":"karlgroves@gmail.com"}],"homepage":"https://github.com/afixt/cookie-banner#readme","bugs":{"url":"https://github.com/afixt/cookie-banner/issues"},"dist":{"shasum":"45d04238d121877c851ade9160b85a1b3edab9be","tarball":"https://registry.npmjs.org/@afixt/accessible-cookie-banner/-/accessible-cookie-banner-1.0.3.tgz","fileCount":33,"integrity":"sha512-sf3gU46SK56UIsbZpvsUSL99MJAje1sRM/0T7u3FWMhlkKuEGXiKdLktbDzCH3BVU6TiqJimU/SPLVBnnrAp7w==","signatures":[{"sig":"MEYCIQC0vVHW5A5UuSiqPqwsgamA/a2F87doDKOU1hm4nA69gQIhALZuE+XS9qtmuikMFkQU0qHRQjgioDdN2Slqa1xeccA9","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":127233},"main":"dist/cookie-banner.js","type":"module","babel":{"presets":["@babel/preset-env"]},"types":"dist/types/index.d.ts","module":"dist/cookie-banner.esm.js","engines":{"node":">=22.0.0"},"gitHead":"a4747f4cde1c38b2548a2210d36d8477d04339d0","scripts":{"dev":"npm run css:build && rollup -c -w","docs":"jsdoc -c jsdoc.json","size":"size-limit","test":"jest","build":"npm run clean && npm run css:build && rollup -c","clean":"rimraf dist","serve":"http-server . -p 8080","start":"npm run build && npm run serve","analyze":"npx webpack-bundle-analyzer dist/cookie-banner.js --mode static --report bundle-report.html --no-open","docs:md":"jsdoc2md 'src/js/*.js' > docs/API.md","version":"npm run build","test:all":"npm run test && npm run test:a11y","css:build":"postcss src/css/main.css -o dist/banner.css","css:watch":"postcss src/css/main.css -o dist/banner.css --watch","test:a11y":"playwright test --config=playwright.config.js","docs:build":"npm run docs:clean && npm run docs && npm run docs:md","docs:clean":"rimraf docs/api","test:watch":"jest --watch","postversion":"git push && git push --tags","test:visual":"playwright test --config=playwright-visual.config.js","size:analyze":"npm run build && size-limit && npm run analyze","test:coverage":"jest --coverage","prepublishOnly":"npm run test:all && npm run build","test:a11y:headed":"playwright test --config=playwright.config.js --headed","install:playwright":"playwright install","test:visual:headed":"playwright test --config=playwright-visual.config.js --headed","test:visual:update":"playwright test --config=playwright-visual.config.js --update-snapshots","test:a11y:regression":"playwright test test/accessibility-regression.test.js --config=playwright.config.js"},"_npmUser":{"name":"karlgroves","email":"karlgroves@gmail.com"},"repository":{"url":"git+ssh://git@github.com/AFixt/cookie-banner.git","type":"git"},"size-limit":[{"gzip":true,"path":"./dist/cookie-banner.min.js","limit":"15kb"},{"path":"./dist/cookie-banner.js","limit":"35kb"},{"gzip":true,"path":"./dist/banner.css","limit":"8kb"}],"_npmVersion":"11.6.0","description":"A customizable, WCAG-conformant cookie consent banner with GDPR, CCPA compliance","directories":{},"sideEffects":false,"_nodeVersion":"22.16.0","browserslist":["> 1%","last 2 versions","not dead","not ie 11"],"dependencies":{"@eventably/a11y-assert":"^1.1.7"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","jsdoc":"^4.0.4","rimraf":"^5.0.5","rollup":"^4.20.1","postcss":"^8.5.6","babel-jest":"^29.7.0","playwright":"^1.52.0","size-limit":"^11.2.0","http-server":"^14.1.1","postcss-cli":"^11.0.1","autoprefixer":"^10.4.21","postcss-calc":"^10.1.1","postcss-import":"^16.1.1","postcss-mixins":"^12.0.0","postcss-nested":"^7.0.2","@playwright/test":"^1.53.2","@size-limit/file":"^11.2.0","@babel/preset-env":"^7.26.9","jsdoc-to-markdown":"^9.1.1","rollup-plugin-copy":"^3.5.0","@rollup/plugin-json":"^6.1.0","@rollup/plugin-babel":"^6.0.4","@testing-library/dom":"^9.3.4","@rollup/plugin-terser":"^0.4.4","jest-environment-jsdom":"^29.7.0","rollup-plugin-analyzer":"^4.0.0","@rollup/plugin-commonjs":"^25.0.7","webpack-bundle-analyzer":"^4.10.2","@testing-library/jest-dom":"^6.6.3","postcss-custom-properties":"^14.0.6","@rollup/plugin-node-resolve":"^15.2.3"},"_npmOperationalInternal":{"tmp":"tmp/accessible-cookie-banner_1.0.3_1759105902553_0.7330646586710947","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@afixt/accessible-cookie-banner","version":"1.0.4","keywords":["accessibility","WCAG","cookie","consent","GDPR","CCPA","banner","a11y"],"author":{"name":"Karl Groves","email":"karlgroves@gmail.com"},"license":"MIT","_id":"@afixt/accessible-cookie-banner@1.0.4","maintainers":[{"name":"karlgroves","email":"karlgroves@gmail.com"}],"homepage":"https://github.com/afixt/cookie-banner#readme","bugs":{"url":"https://github.com/afixt/cookie-banner/issues"},"dist":{"shasum":"4cfcc68803fcaee14552af9c31affd18f361e670","tarball":"https://registry.npmjs.org/@afixt/accessible-cookie-banner/-/accessible-cookie-banner-1.0.4.tgz","fileCount":33,"integrity":"sha512-X06D8JfwkDZVdBbRYUJepVXGXeRwWrjfQpCtN+WHgQ0l9d7M8TI20lCcbuiRE7Dvpb5fwY3HOYVndvon50C9Vw==","signatures":[{"sig":"MEYCIQD+Rh0xgYQeam5VkeOQF6PH1t7BkNql94bgEbe+grjodgIhAIngGkl36nlW2yhfqnberVGcAVwPGqNRq/hOTusFP2CV","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":126915},"main":"dist/cookie-banner.js","type":"module","babel":{"presets":["@babel/preset-env"]},"types":"dist/types/index.d.ts","module":"dist/cookie-banner.esm.js","engines":{"node":">=22.0.0"},"gitHead":"01c3760e7b7046dd2abb31a0099c139273945133","scripts":{"dev":"npm run css:build && rollup -c -w","docs":"jsdoc -c jsdoc.json","size":"size-limit","test":"jest","build":"npm run clean && npm run css:build && rollup -c","clean":"rimraf dist","serve":"http-server . -p 8080","start":"npm run build && npm run serve","analyze":"npx webpack-bundle-analyzer dist/cookie-banner.js --mode static --report bundle-report.html --no-open","docs:md":"jsdoc2md 'src/js/*.js' > docs/API.md","version":"npm run build","test:all":"npm run test","css:build":"postcss src/css/main.css -o dist/banner.css","css:watch":"postcss src/css/main.css -o dist/banner.css --watch","docs:build":"npm run docs:clean && npm run docs && npm run docs:md","docs:clean":"rimraf docs/api","test:watch":"jest --watch","postversion":"git push && git push --tags","test:visual":"playwright test --config=playwright-visual.config.js","size:analyze":"npm run build && size-limit && npm run analyze","test:coverage":"jest --coverage","prepublishOnly":"npm run test:all && npm run build","install:playwright":"playwright install","test:visual:headed":"playwright test --config=playwright-visual.config.js --headed","test:visual:update":"playwright test --config=playwright-visual.config.js --update-snapshots"},"_npmUser":{"name":"karlgroves","email":"karlgroves@gmail.com"},"repository":{"url":"git+ssh://git@github.com/AFixt/cookie-banner.git","type":"git"},"size-limit":[{"gzip":true,"path":"./dist/cookie-banner.min.js","limit":"15kb"},{"path":"./dist/cookie-banner.js","limit":"35kb"},{"gzip":true,"path":"./dist/banner.css","limit":"8kb"}],"_npmVersion":"10.2.4","description":"A customizable, WCAG-conformant cookie consent banner with GDPR, CCPA compliance","directories":{},"sideEffects":false,"_nodeVersion":"22.16.0","browserslist":["> 1%","last 2 versions","not dead","not ie 11"],"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","jsdoc":"^4.0.4","rimraf":"^5.0.5","rollup":"^4.20.1","postcss":"^8.5.6","babel-jest":"^29.7.0","playwright":"^1.52.0","size-limit":"^11.2.0","http-server":"^14.1.1","postcss-cli":"^11.0.1","autoprefixer":"^10.4.21","postcss-calc":"^10.1.1","postcss-import":"^16.1.1","postcss-mixins":"^12.0.0","postcss-nested":"^7.0.2","@playwright/test":"^1.53.2","@size-limit/file":"^11.2.0","@babel/preset-env":"^7.26.9","jsdoc-to-markdown":"^9.1.1","rollup-plugin-copy":"^3.5.0","@rollup/plugin-json":"^6.1.0","@rollup/plugin-babel":"^6.0.4","@testing-library/dom":"^9.3.4","@rollup/plugin-terser":"^0.4.4","jest-environment-jsdom":"^29.7.0","rollup-plugin-analyzer":"^4.0.0","@rollup/plugin-commonjs":"^25.0.7","webpack-bundle-analyzer":"^4.10.2","@testing-library/jest-dom":"^6.6.3","postcss-custom-properties":"^14.0.6","@rollup/plugin-node-resolve":"^15.2.3"},"_npmOperationalInternal":{"tmp":"tmp/accessible-cookie-banner_1.0.4_1767456428131_0.5902708310334115","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"@afixt/accessible-cookie-banner","version":"1.0.5","keywords":["accessibility","WCAG","cookie","consent","GDPR","CCPA","banner","a11y"],"author":{"name":"Karl Groves","email":"karlgroves@gmail.com"},"license":"MIT","_id":"@afixt/accessible-cookie-banner@1.0.5","maintainers":[{"name":"karlgroves","email":"karlgroves@gmail.com"}],"homepage":"https://github.com/afixt/cookie-banner#readme","bugs":{"url":"https://github.com/afixt/cookie-banner/issues"},"dist":{"shasum":"6ecb7f3d91fd98166fbb9e5c61968656edf3df84","tarball":"https://registry.npmjs.org/@afixt/accessible-cookie-banner/-/accessible-cookie-banner-1.0.5.tgz","fileCount":33,"integrity":"sha512-U2EcZ8ayAs2Gd+5FYYAeulMl7zWRVenlr0S5OJ+EYO2HAZq+Cje6ZOzePrTWHvKs4Wodz7TBpYfsrIVp2pJPtA==","signatures":[{"sig":"MEUCIQCGl3NSYNCdpVEe6zuI4vlH6WjSiZQeXrL3mRIyyBnzVAIgB/+A2hyOjApuEr34PL4lRsrnaRd98s6AQW9wsU3qf+8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":126915},"main":"dist/cookie-banner.js","type":"module","babel":{"presets":["@babel/preset-env"]},"types":"dist/types/index.d.ts","module":"dist/cookie-banner.esm.js","engines":{"node":">=22.0.0"},"gitHead":"ed12e0ded4fd3aaef4c3eadc03902876187cc57f","scripts":{"dev":"npm run css:build && rollup -c -w","docs":"jsdoc -c jsdoc.json","size":"size-limit","test":"jest","build":"npm run clean && npm run css:build && rollup -c","clean":"rimraf dist","serve":"http-server . -p 8080","start":"npm run build && npm run serve","analyze":"npx webpack-bundle-analyzer dist/cookie-banner.js --mode static --report bundle-report.html --no-open","docs:md":"jsdoc2md 'src/js/*.js' > docs/API.md","version":"npm run build","test:all":"npm run test","css:build":"postcss src/css/main.css -o dist/banner.css","css:watch":"postcss src/css/main.css -o dist/banner.css --watch","docs:build":"npm run docs:clean && npm run docs && npm run docs:md","docs:clean":"rimraf docs/api","test:watch":"jest --watch","postversion":"git push && git push --tags","test:visual":"playwright test --config=playwright-visual.config.js","size:analyze":"npm run build && size-limit && npm run analyze","test:coverage":"jest --coverage","prepublishOnly":"npm run test:all && npm run build","install:playwright":"playwright install","test:visual:headed":"playwright test --config=playwright-visual.config.js --headed","test:visual:update":"playwright test --config=playwright-visual.config.js --update-snapshots"},"_npmUser":{"name":"karlgroves","email":"karlgroves@gmail.com"},"repository":{"url":"git+ssh://git@github.com/AFixt/cookie-banner.git","type":"git"},"size-limit":[{"gzip":true,"path":"./dist/cookie-banner.min.js","limit":"15kb"},{"path":"./dist/cookie-banner.js","limit":"35kb"},{"gzip":true,"path":"./dist/banner.css","limit":"8kb"}],"_npmVersion":"10.2.4","description":"A customizable, WCAG-conformant cookie consent banner with GDPR, CCPA compliance","directories":{},"sideEffects":false,"_nodeVersion":"22.16.0","browserslist":["> 1%","last 2 versions","not dead","not ie 11"],"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","jsdoc":"^4.0.4","rimraf":"^5.0.5","rollup":"^4.20.1","postcss":"^8.5.6","babel-jest":"^29.7.0","playwright":"^1.52.0","size-limit":"^11.2.0","http-server":"^14.1.1","postcss-cli":"^11.0.1","autoprefixer":"^10.4.21","postcss-calc":"^10.1.1","postcss-import":"^16.1.1","postcss-mixins":"^12.0.0","postcss-nested":"^7.0.2","@playwright/test":"^1.53.2","@size-limit/file":"^11.2.0","@babel/preset-env":"^7.26.9","jsdoc-to-markdown":"^9.1.1","rollup-plugin-copy":"^3.5.0","@rollup/plugin-json":"^6.1.0","@rollup/plugin-babel":"^6.0.4","@testing-library/dom":"^9.3.4","@rollup/plugin-terser":"^0.4.4","jest-environment-jsdom":"^29.7.0","rollup-plugin-analyzer":"^4.0.0","@rollup/plugin-commonjs":"^25.0.7","webpack-bundle-analyzer":"^4.10.2","@testing-library/jest-dom":"^6.6.3","postcss-custom-properties":"^14.0.6","@rollup/plugin-node-resolve":"^15.2.3"},"_npmOperationalInternal":{"tmp":"tmp/accessible-cookie-banner_1.0.5_1768839720629_0.1022021174947223","host":"s3://npm-registry-packages-npm-production"}},"1.0.6":{"name":"@afixt/accessible-cookie-banner","version":"1.0.6","keywords":["accessibility","WCAG","cookie","consent","GDPR","CCPA","banner","a11y"],"author":{"name":"Karl Groves","email":"karlgroves@gmail.com"},"license":"MIT","_id":"@afixt/accessible-cookie-banner@1.0.6","maintainers":[{"name":"karlgroves","email":"karlgroves@gmail.com"}],"homepage":"https://github.com/afixt/cookie-banner#readme","bugs":{"url":"https://github.com/afixt/cookie-banner/issues"},"dist":{"shasum":"154307ff2f0395cc4fecbadde9c57264e6d3eef1","tarball":"https://registry.npmjs.org/@afixt/accessible-cookie-banner/-/accessible-cookie-banner-1.0.6.tgz","fileCount":33,"integrity":"sha512-jGGuwg990A17Y+mGS9RXuCSEe6WcLYPTMUhN2tlv7VdMFBHhJqCU8loW9aofwaOgopv4Euotut+EfN7HLASySw==","signatures":[{"sig":"MEUCIQCTj1nBYB28mGZ7zqpoJC2GjyxdqUDdvgQOOROgA32C9AIgGUoohPoQIr6JOQufeqVAf7dH/hektXAHtpAM/ug9pcg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":128142},"main":"dist/cookie-banner.js","type":"module","babel":{"presets":["@babel/preset-env"]},"types":"dist/types/index.d.ts","module":"dist/cookie-banner.esm.js","engines":{"node":">=22.0.0"},"gitHead":"ed12e0ded4fd3aaef4c3eadc03902876187cc57f","scripts":{"dev":"npm run css:build && rollup -c -w","docs":"jsdoc -c jsdoc.json","size":"size-limit","test":"jest","build":"npm run clean && npm run css:build && rollup -c","clean":"rimraf dist","serve":"http-server . -p 8080","start":"npm run build && npm run serve","analyze":"npx webpack-bundle-analyzer dist/cookie-banner.js --mode static --report bundle-report.html --no-open","docs:md":"jsdoc2md 'src/js/*.js' > docs/API.md","version":"npm run build","test:all":"npm run test","css:build":"postcss src/css/main.css -o dist/banner.css","css:watch":"postcss src/css/main.css -o dist/banner.css --watch","docs:build":"npm run docs:clean && npm run docs && npm run docs:md","docs:clean":"rimraf docs/api","test:watch":"jest --watch","postversion":"git push && git push --tags","test:visual":"playwright test --config=playwright-visual.config.js","size:analyze":"npm run build && size-limit && npm run analyze","test:coverage":"jest --coverage","prepublishOnly":"npm run test:all && npm run build","install:playwright":"playwright install","test:visual:headed":"playwright test --config=playwright-visual.config.js --headed","test:visual:update":"playwright test --config=playwright-visual.config.js --update-snapshots"},"_npmUser":{"name":"karlgroves","email":"karlgroves@gmail.com"},"repository":{"url":"git+ssh://git@github.com/AFixt/cookie-banner.git","type":"git"},"size-limit":[{"gzip":true,"path":"./dist/cookie-banner.min.js","limit":"15kb"},{"path":"./dist/cookie-banner.js","limit":"35kb"},{"gzip":true,"path":"./dist/banner.css","limit":"8kb"}],"_npmVersion":"10.2.4","description":"A customizable, WCAG-conformant cookie consent banner with GDPR, CCPA compliance","directories":{},"sideEffects":false,"_nodeVersion":"22.16.0","browserslist":["> 1%","last 2 versions","not dead","not ie 11"],"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","jsdoc":"^4.0.4","rimraf":"^5.0.5","rollup":"^4.20.1","postcss":"^8.5.6","babel-jest":"^29.7.0","playwright":"^1.52.0","size-limit":"^11.2.0","http-server":"^14.1.1","postcss-cli":"^11.0.1","autoprefixer":"^10.4.21","postcss-calc":"^10.1.1","postcss-import":"^16.1.1","postcss-mixins":"^12.0.0","postcss-nested":"^7.0.2","@playwright/test":"^1.53.2","@size-limit/file":"^11.2.0","@babel/preset-env":"^7.26.9","jsdoc-to-markdown":"^9.1.1","rollup-plugin-copy":"^3.5.0","@rollup/plugin-json":"^6.1.0","@rollup/plugin-babel":"^6.0.4","@testing-library/dom":"^9.3.4","@rollup/plugin-terser":"^0.4.4","jest-environment-jsdom":"^29.7.0","rollup-plugin-analyzer":"^4.0.0","@rollup/plugin-commonjs":"^25.0.7","webpack-bundle-analyzer":"^4.10.2","@testing-library/jest-dom":"^6.6.3","postcss-custom-properties":"^14.0.6","@rollup/plugin-node-resolve":"^15.2.3"},"_npmOperationalInternal":{"tmp":"tmp/accessible-cookie-banner_1.0.6_1769112359964_0.03670215575413027","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@afixt/accessible-cookie-banner","version":"1.1.1","keywords":["accessibility","WCAG","cookie","consent","GDPR","CCPA","banner","a11y"],"author":{"name":"Karl Groves","email":"karlgroves@gmail.com"},"license":"MIT","_id":"@afixt/accessible-cookie-banner@1.1.1","maintainers":[{"name":"macmilan","email":"marko.macmilan@gmail.com"},{"name":"jw1982","email":"john.watts@afixt.com"},{"name":"karlgroves","email":"karlgroves@gmail.com"}],"homepage":"https://github.com/afixt/cookie-banner#readme","bugs":{"url":"https://github.com/afixt/cookie-banner/issues"},"dist":{"shasum":"49d72b24a55c08a5f32b6de327567f2c484bf128","tarball":"https://registry.npmjs.org/@afixt/accessible-cookie-banner/-/accessible-cookie-banner-1.1.1.tgz","fileCount":33,"integrity":"sha512-XMlqSnt6DfUhAn4TqhytSZcTlOyCHrg/XGyUE4q8GJDi2ruGjDbAHUJwjPA9qneHj1iJT1rkLHmIlJVwBddWaw==","signatures":[{"sig":"MEYCIQCBfi6Mb1kerN0T5YidClznb/fkA13/EX6nxCL8L3guHAIhAOiCPT2MtkLUSkhPlLYWzpJtqZ1h0Dj1DVRnr4gwYF2L","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":131776},"main":"dist/cookie-banner.js","type":"module","babel":{"presets":["@babel/preset-env"]},"types":"dist/types/index.d.ts","module":"dist/cookie-banner.esm.js","engines":{"node":">=22.0.0"},"gitHead":"d2d61014b2deda070ef77f888db4d0211b017b25","scripts":{"dev":"npm run css:build && rollup -c -w","docs":"jsdoc -c jsdoc.json","lint":"eslint .","size":"size-limit","test":"jest","build":"npm run clean && npm run css:build && rollup -c","clean":"rimraf dist","serve":"http-server . -p 8080","start":"npm run build && npm run serve","format":"prettier --write .","analyze":"npx webpack-bundle-analyzer dist/cookie-banner.js --mode static --report bundle-report.html --no-open","docs:md":"jsdoc2md 'src/js/*.js' > docs/API.md","lint:md":"markdownlint '**/*.md' --ignore node_modules --ignore CHANGELOG.md --ignore dist","prepare":"husky","release":"commit-and-tag-version","lint:cpd":"jscpd . --config .jscpd.json","lint:css":"stylelint 'src/**/*.css'","lint:fix":"eslint . --fix","test:all":"npm run test","css:build":"postcss src/css/main.css -o dist/banner.css","css:watch":"postcss src/css/main.css -o dist/banner.css --watch","docs:build":"npm run docs:clean && npm run docs && npm run docs:md","docs:clean":"rimraf docs/api","test:watch":"jest --watch","lint:cpd:ci":"jscpd . --config .jscpd.json --threshold 5","test:visual":"playwright test --config=playwright-visual.config.js","format:check":"prettier --check .","lint:css:fix":"stylelint 'src/**/*.css' --fix","size:analyze":"npm run build && size-limit && npm run analyze","release:first":"commit-and-tag-version --first-release","release:major":"commit-and-tag-version --release-as major","release:minor":"commit-and-tag-version --release-as minor","release:patch":"commit-and-tag-version --release-as patch","test:coverage":"jest --coverage","prepublishOnly":"npm run test:all && npm run build","security:audit":"npm audit","security:check":"npm audit --audit-level=high","release:dry-run":"commit-and-tag-version --dry-run","install:playwright":"playwright install","test:visual:headed":"playwright test --config=playwright-visual.config.js --headed","test:visual:update":"playwright test --config=playwright-visual.config.js --update-snapshots"},"_npmUser":{"name":"karlgroves","email":"karlgroves@gmail.com"},"repository":{"url":"git+ssh://git@github.com/AFixt/cookie-banner.git","type":"git"},"size-limit":[{"gzip":true,"path":"./dist/cookie-banner.min.js","limit":"15kb"},{"path":"./dist/cookie-banner.js","limit":"35kb"},{"gzip":true,"path":"./dist/banner.css","limit":"8kb"}],"_npmVersion":"10.2.4","description":"A customizable, WCAG-conformant cookie consent banner with GDPR, CCPA compliance","directories":{},"sideEffects":false,"_nodeVersion":"22.16.0","browserslist":["> 1%","last 2 versions","not dead","not ie 11"],"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.3.0","husky":"^9.1.7","jscpd":"^4.0.8","jsdoc":"^4.0.4","eslint":"^10.0.0","rimraf":"^6.1.3","rollup":"^4.20.1","globals":"^17.3.0","postcss":"^8.5.6","prettier":"^3.8.1","stylelint":"^17.1.1","@eslint/js":"^10.0.1","babel-jest":"^30.2.0","playwright":"^1.52.0","size-limit":"^12.0.1","http-server":"^14.1.1","postcss-cli":"^11.0.1","autoprefixer":"^10.4.21","postcss-calc":"^10.1.1","postcss-import":"^16.1.1","postcss-mixins":"^12.0.0","postcss-nested":"^7.0.2","@commitlint/cli":"^20.4.0","@playwright/test":"^1.53.2","@size-limit/file":"^12.0.1","markdownlint-cli":"^0.48.0","@babel/preset-env":"^7.26.9","jsdoc-to-markdown":"^9.1.1","rollup-plugin-copy":"^3.5.0","@rollup/plugin-json":"^6.1.0","@rollup/plugin-babel":"^7.0.0","@testing-library/dom":"^10.4.1","@rollup/plugin-terser":"^1.0.0","commit-and-tag-version":"^12.7.1","jest-environment-jsdom":"^30.3.0","rollup-plugin-analyzer":"^4.0.0","@rollup/plugin-commonjs":"^29.0.0","webpack-bundle-analyzer":"^5.2.0","@testing-library/jest-dom":"^6.6.3","postcss-custom-properties":"^15.0.1","stylelint-config-standard":"^40.0.0","@rollup/plugin-node-resolve":"^16.0.3","@commitlint/config-conventional":"^20.4.0"},"_npmOperationalInternal":{"tmp":"tmp/accessible-cookie-banner_1.1.1_1776462789774_0.1650938888122897","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@afixt/accessible-cookie-banner","version":"1.2.0","description":"A customizable, WCAG-conformant cookie consent banner with GDPR, CCPA compliance","type":"module","main":"dist/consent.js","module":"dist/consent.esm.js","types":"dist/types/index.d.ts","scripts":{"test":"jest","test:watch":"jest --watch","test:coverage":"jest --coverage","test:visual":"playwright test --config=playwright-visual.config.js","test:visual:headed":"playwright test --config=playwright-visual.config.js --headed","test:visual:update":"playwright test --config=playwright-visual.config.js --update-snapshots","test:all":"npm run test","clean":"rimraf dist","css:build":"postcss src/css/main.css -o dist/banner.css","css:watch":"postcss src/css/main.css -o dist/banner.css --watch","dev":"npm run css:build && rollup -c -w","build":"npm run clean && npm run css:build && rollup -c","serve":"http-server . -p 8080","start":"npm run build && npm run serve","docs":"jsdoc -c jsdoc.json","docs:md":"jsdoc2md 'src/js/*.js' > docs/API.md","docs:clean":"rimraf docs/api","docs:build":"npm run docs:clean && npm run docs && npm run docs:md","size":"size-limit","size:analyze":"npm run build && size-limit && npm run analyze","analyze":"npx webpack-bundle-analyzer dist/consent.js --mode static --report bundle-report.html --no-open","prepublishOnly":"npm run test:all && npm run build","install:playwright":"playwright install","prepare":"husky","release":"commit-and-tag-version","release:minor":"commit-and-tag-version --release-as minor","release:major":"commit-and-tag-version --release-as major","release:patch":"commit-and-tag-version --release-as patch","release:first":"commit-and-tag-version --first-release","release:dry-run":"commit-and-tag-version --dry-run","check":"npm run lint && npm run format:check && npm run lint:css && npm run lint:md","lint":"eslint .","lint:fix":"eslint . --fix","format":"prettier --write .","format:check":"prettier --check .","lint:md":"markdownlint '**/*.md' --ignore node_modules --ignore CHANGELOG.md --ignore dist","lint:css":"stylelint 'src/**/*.css'","lint:css:fix":"stylelint 'src/**/*.css' --fix","lint:cpd":"jscpd . --config .jscpd.json","lint:cpd:ci":"jscpd . --config .jscpd.json --threshold 5","security:audit":"npm audit","security:check":"npm audit --audit-level=high"},"keywords":["accessibility","WCAG","cookie","consent","GDPR","CCPA","banner","a11y"],"author":{"name":"Karl Groves","email":"karlgroves@gmail.com"},"license":"MIT","repository":{"type":"git","url":"git+ssh://git@github.com/AFixt/cookie-banner.git"},"bugs":{"url":"https://github.com/afixt/cookie-banner/issues"},"homepage":"https://github.com/afixt/cookie-banner#readme","engines":{"node":">=22.0.0"},"browserslist":["> 1%","last 2 versions","not dead","not ie 11"],"sideEffects":false,"devDependencies":{"@babel/preset-env":"^7.26.9","@commitlint/cli":"^20.4.0","@commitlint/config-conventional":"^20.4.0","@eslint/js":"^10.0.1","@playwright/test":"^1.53.2","@rollup/plugin-babel":"^7.0.0","@rollup/plugin-commonjs":"^29.0.0","@rollup/plugin-json":"^6.1.0","@rollup/plugin-node-resolve":"^16.0.3","@rollup/plugin-terser":"^1.0.0","@size-limit/file":"^12.0.1","@testing-library/dom":"^10.4.1","@testing-library/jest-dom":"^6.6.3","autoprefixer":"^10.4.21","babel-jest":"^30.2.0","commit-and-tag-version":"^12.7.1","eslint":"^10.0.0","globals":"^17.3.0","http-server":"^14.1.1","husky":"^9.1.7","jest":"^30.3.0","jest-environment-jsdom":"^30.3.0","jscpd":"^4.0.8","jsdoc":"^4.0.4","jsdoc-to-markdown":"^9.1.1","lint-staged":"17.1.1","markdownlint-cli":"^0.48.0","playwright":"^1.52.0","postcss":"^8.5.6","postcss-calc":"^10.1.1","postcss-cli":"^11.0.1","postcss-custom-properties":"^15.0.1","postcss-import":"^16.1.1","postcss-mixins":"^12.0.0","postcss-nested":"^7.0.2","prettier":"^3.8.1","rimraf":"^6.1.3","rollup":"^4.20.1","rollup-plugin-analyzer":"^4.0.0","rollup-plugin-copy":"^3.5.0","size-limit":"^12.0.1","stylelint":"^17.1.1","stylelint-config-standard":"^40.0.0","webpack-bundle-analyzer":"^5.2.0"},"babel":{"presets":["@babel/preset-env"]},"size-limit":[{"path":"./dist/consent.min.js","limit":"15kb","gzip":true},{"path":"./dist/consent.js","limit":"35kb"},{"path":"./dist/banner.css","limit":"8kb","gzip":true}],"_id":"@afixt/accessible-cookie-banner@1.2.0","_integrity":"sha512-ioTV6+waZqAJeGNlgnlIkFtGOLXHHF1uoKqUvnZnCFsJzgtVIHxU7QUmlMtbuJyoKBwHW8eDXFTWv1thuANsCw==","_resolved":"/private/tmp/claude-502/-Users-karlgroves-Projects-cookie-banner/b484576f-f57e-46db-9fed-2ba527b276ad/scratchpad/afixt-accessible-cookie-banner-1.2.0.tgz","_from":"file:/private/tmp/claude-502/-Users-karlgroves-Projects-cookie-banner/b484576f-f57e-46db-9fed-2ba527b276ad/scratchpad/afixt-accessible-cookie-banner-1.2.0.tgz","_nodeVersion":"22.22.2","_npmVersion":"10.9.7","dist":{"integrity":"sha512-ioTV6+waZqAJeGNlgnlIkFtGOLXHHF1uoKqUvnZnCFsJzgtVIHxU7QUmlMtbuJyoKBwHW8eDXFTWv1thuANsCw==","shasum":"64182b954f312c491e2902e3ee65b5e60da6a54b","tarball":"https://registry.npmjs.org/@afixt/accessible-cookie-banner/-/accessible-cookie-banner-1.2.0.tgz","fileCount":36,"unpackedSize":447495,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIDgmZltVCNuQcqtaeaOlVCNdojbfF/Wn1sGb3JlU47fWAiEAsTEns0aA1ZE7WrfEhryH+qIT8lkZwMCqIVzywb/uosU="}]},"_npmUser":{"name":"karlgroves","email":"karlgroves@gmail.com"},"directories":{},"maintainers":[{"name":"macmilan","email":"marko.macmilan@gmail.com"},{"name":"jw1982","email":"john.watts@afixt.com"},{"name":"karlgroves","email":"karlgroves@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/accessible-cookie-banner_1.2.0_1784736940029_0.07073555181341162"},"_hasShrinkwrap":false}},"time":{"created":"2025-09-16T19:20:09.748Z","modified":"2026-07-22T16:15:40.402Z","1.0.0":"2025-09-16T19:20:10.088Z","1.0.2":"2025-09-28T19:26:40.490Z","1.0.3":"2025-09-29T00:31:42.757Z","1.0.4":"2026-01-03T16:07:08.284Z","1.0.5":"2026-01-19T16:22:00.782Z","1.0.6":"2026-01-22T20:06:00.123Z","1.1.1":"2026-04-17T21:53:09.921Z","1.2.0":"2026-07-22T16:15:40.225Z"},"bugs":{"url":"https://github.com/afixt/cookie-banner/issues"},"author":{"name":"Karl Groves","email":"karlgroves@gmail.com"},"license":"MIT","homepage":"https://github.com/afixt/cookie-banner#readme","keywords":["accessibility","WCAG","cookie","consent","GDPR","CCPA","banner","a11y"],"repository":{"type":"git","url":"git+ssh://git@github.com/AFixt/cookie-banner.git"},"description":"A customizable, WCAG-conformant cookie consent banner with GDPR, CCPA compliance","maintainers":[{"name":"macmilan","email":"marko.macmilan@gmail.com"},{"name":"jw1982","email":"john.watts@afixt.com"},{"name":"karlgroves","email":"karlgroves@gmail.com"}],"readme":"# Accessible Cookie Banner\n\nA customizable, WCAG-conformant component designed to provide clear, user-friendly consent for the use of cookies and tracking technologies on websites and web applications. It complies with GDPR, ePrivacy Directive, and CCPA regulations, while maintaining accessibility standards set by WCAG 2.2 AA, ensuring users of all abilities can interact with and understand the banner.\n\n## Features\n\n- **Accessible by Design**\n  - Complies with WCAG 2.2 AA\n  - Fully operable via keyboard\n  - Screen reader-friendly (ARIA roles, live regions, and focus management)\n- **Consent Management**\n  - Supports \"Accept All\", \"Reject All\", and \"Customize\" buttons\n  - Optional granular controls for categories (e.g., functional, analytics, marketing)\n- **Compliance Support**\n  - GDPR-ready with audit logging hooks\n  - CCPA opt-out support\n- **Customizable**\n  - Theming via CSS variables\n  - Optionally include a full preferences modal\n- **Internationalization (i18n)**\n  - Text fully configurable in JSON or via locale files\n  - RTL (Right-To-Left) layout support\n\n## Installation\n\n### Via NPM\n\n```bash\nnpm install @afixt/accessible-cookie-banner\n```\n\n### Manual Installation\n\n1. Download the package\n2. Include the necessary files in your HTML:\n\n```html\n<link rel=\"stylesheet\" href=\"path/to/dist/banner.css\" />\n<script src=\"path/to/dist/consent.min.js\"></script>\n```\n\n## Usage\n\n### Basic Usage\n\n```javascript\n// Using as a global variable (UMD build)\nwindow.CookieBanner.init({\n  locale: 'en',\n  theme: 'light', // or 'dark'\n  onConsentChange: consent => {\n    // Use to enable/disable analytics or ad scripts\n    console.log('Consent changed:', consent);\n\n    // Example: Enable Google Analytics if analytics consent is given\n    if (consent.analytics) {\n      // Initialize analytics\n    }\n  },\n});\n\n// Using as an ES module\nimport CookieBanner from 'accessible-cookie-banner';\n\nCookieBanner.init({\n  locale: 'en',\n  theme: 'light',\n  // other options...\n});\n```\n\n### Advanced Configuration\n\n```javascript\nCookieBanner.init({\n  locale: 'en',\n  theme: 'light',\n  showModal: true,\n  storageMethod: 'localStorage', // or 'cookie'\n  expireDays: 365,\n  categories: {\n    functional: true, // Always required\n    analytics: false, // Default state\n    marketing: false, // Default state\n  },\n  onConsentChange: consent => {\n    console.log('Consent changed:', consent);\n  },\n});\n```\n\n### Check Consent Status\n\n```javascript\n// Check if user has given consent for analytics\nif (CookieBanner.hasConsent('analytics')) {\n  // Initialize analytics\n}\n\n// Get full consent object\nconst consent = CookieBanner.getConsent();\nconsole.log(consent);\n// Example output: { functional: true, analytics: true, marketing: false, timestamp: \"2023-...\" }\n```\n\n### Listening for Consent Changes\n\n```javascript\ndocument.addEventListener('cookieConsentChanged', e => {\n  console.log('Consent changed:', e.detail);\n\n  // Enable/disable scripts based on consent\n  if (e.detail.analytics) {\n    // Initialize analytics\n  }\n\n  if (e.detail.marketing) {\n    // Initialize marketing scripts\n  }\n});\n```\n\n## Customization\n\n### Changing the Theme\n\nThe banner comes with three built-in themes: `light`, `dark`, and `high-contrast`. You can set the theme during initialization:\n\n```javascript\nCookieBanner.init({\n  theme: 'dark', // 'light', 'dark', or 'high-contrast'\n});\n```\n\nYou can also customize the colors by overriding the CSS variables in your stylesheet:\n\n```css\n:root {\n  --cookie-bg: #f0f0f0;\n  --cookie-text: #333333;\n  --cookie-button-primary-bg: #0056b3;\n  --cookie-button-primary-text: #ffffff;\n  /* ... other variables ... */\n}\n```\n\n### Localization\n\nYou can set the banner language during initialization:\n\n```javascript\nCookieBanner.init({\n  locale: 'fr', // Uses locales/fr.json\n});\n```\n\nTo add a new language, create a new JSON file in the `locales` directory with the appropriate translations.\n\n## Project Structure\n\n```text\naccessible-cookie-banner/\n├── dist/                    # Distribution files\n│   ├── consent.js           # UMD build\n│   ├── consent.min.js       # Minified UMD build\n│   ├── consent.esm.js       # ES module\n│   ├── cookie-banner.*.js   # Deprecated aliases (see Ad blockers below)\n│   ├── banner.css           # Styles\n│   ├── locales/             # Localization files\n│   ├── types/               # TypeScript declarations\n│   └── examples/            # Example pages\n├── src/                     # Source code\n│   ├── js/                  # JavaScript source\n│   │   ├── banner.js        # Banner implementation\n│   │   ├── consent-manager.js # Consent management\n│   │   └── index.js         # Entry point\n│   ├── css/                 # CSS source\n│   ├── html/                # HTML examples\n│   ├── examples/            # Implementation examples\n│   ├── types/               # TypeScript type definitions\n│   └── locales/             # Translation files\n└── test/                    # Test files\n```\n\n## Examples\n\nThe package includes various examples to help you implement the cookie banner in different environments:\n\n- **Basic Usage**: Simple implementation with vanilla JavaScript\n- **Framework Integration**:\n  - [React](src/examples/react-example.jsx)\n  - [Vue](src/examples/vue-example.vue)\n  - [Angular](src/examples/angular-example.ts)\n- **TypeScript**: [Type-safe implementation](src/examples/typescript-example.ts)\n- **Accessibility Features**:\n  - [High Contrast Theme](src/examples/high-contrast.html)\n  - [RTL Support](src/examples/rtl-support.html)\n\n### Running Examples Locally\n\nTo view the examples in your browser:\n\n1. **Install dependencies and build the project:**\n\n```bash\n   npm install --legacy-peer-deps\n   npm run build\n```\n\n1. **Start the development server:**\n\n```bash\n   npm start\n```\n\nThis will build the project and start a local HTTP server at `http://localhost:8080`\n\n1. **View examples:**\n\n- Main examples index: `http://localhost:8080/dist/examples/`\n- Vanilla JS example: `http://localhost:8080/dist/examples/vanilla-js.html`\n- High contrast theme: `http://localhost:8080/dist/examples/high-contrast.html`\n- RTL support: `http://localhost:8080/dist/examples/rtl-support.html`\n- Custom categories: `http://localhost:8080/dist/examples/custom-categories.html`\n\n### Ad blockers\n\nAd blockers subscribe to anti-annoyance filter lists (EasyList Cookie List,\nFanboy's Annoyance List) whose entire purpose is suppressing cookie consent\nUI. Those lists match the substring `cookie-banner` in a request path, so a\nscript with that name can be cancelled before it ever executes — and the\nblocked resource is the consent mechanism itself, so no banner renders and no\nconsent is recorded.\n\nFor this reason the bundles are named `consent.js`, `consent.min.js` and\n`consent.esm.js`. **Use those names.**\n\nThe old `cookie-banner.*.js` filenames are still published as copies so\nexisting integrations keep working, but they are deprecated, they are subject\nto blocking, and they will be removed in the next major release.\n\nTwo further recommendations:\n\n- **Self-host the bundle rather than loading it from a CDN.** The package name\n  contains `cookie-banner` too, so a CDN URL such as\n  `unpkg.com/@afixt/accessible-cookie-banner/dist/consent.min.js` still carries\n  the blocked substring in its path even with the renamed file.\n- **Avoid putting `cookie-banner`, `cookie-consent`, or `cookie-notice` in the\n  path you serve the script from**, for the same reason.\n\nIf the script fails to load during local development, check your blocker's\nlogger before assuming a build problem — a blocked request usually surfaces as\n`ERR_BLOCKED_BY_CLIENT` or `ERR_FAILED` rather than a 404.\n\nSee the [examples directory](src/examples/) for more detailed examples and implementation guides.\n\n## Accessibility Features\n\n- Proper ARIA roles, states, and properties\n- Focus management in the modal dialog\n- Visible focus indicators\n- Keyboard navigation support\n- High-contrast theme option\n- Readable text with sufficient color contrast\n- No time limits or auto-dismissal\n\n## Privacy & Compliance Notes\n\n- GDPR: Includes \"Reject All\" button and granular consent options\n- CCPA: Can be configured to include \"Do Not Sell My Info\"\n- Audit logging: Emits consent change events to hook into audit systems\n- Time-to-live: Consent expires after the specified period (default: 365 days)\n\n## Browser Support\n\nSupports all modern browsers, including:\n\n- Chrome, Firefox, Safari, Edge (latest versions)\n- IE11 with appropriate polyfills\n\n## Development\n\n```bash\n# Install dependencies\nnpm install\n\n# Run development server\nnpm run dev\n\n# Run tests\nnpm test\n\n# Build for production\nnpm run build\n```\n\n## License\n\nMIT\n","readmeFilename":"README.md"}