{"_id":"@bernierllc/validators-a11y-contrast","_rev":"7-4ff70d3841d6c9f58f96830358026056","name":"@bernierllc/validators-a11y-contrast","dist-tags":{"latest":"0.6.0"},"versions":{"0.1.2":{"name":"@bernierllc/validators-a11y-contrast","version":"0.1.2","keywords":["validation","validators","accessibility","a11y","wcag","contrast","color","primitive"],"author":{"name":"Bernier LLC"},"license":"UNLICENSED","_id":"@bernierllc/validators-a11y-contrast@0.1.2","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"homepage":"https://github.com/bernierllc/tools#readme","bugs":{"url":"https://github.com/bernierllc/tools/issues"},"dist":{"shasum":"6c425615f5486094deba69a7f4d1b1c7c593c1e5","tarball":"https://registry.npmjs.org/@bernierllc/validators-a11y-contrast/-/validators-a11y-contrast-0.1.2.tgz","fileCount":17,"integrity":"sha512-kHdivjaCcEJ5RcagGFrklXqDSyiic+RCpgXeJTDmafBKPxA2ckH+gZYojgo7pwW+jGBAEgqE4Geajww1feGb8w==","signatures":[{"sig":"MEUCIGOmWUu6fBG2xkydLitba5wM0N/2qf21TzELgSJ9LXqmAiEAhLoyRVqmiC6h0r4t0ZXT9cHiyMCx9j81rfWOKUEUllM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":35667},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"55a16ac1734df7220d11a09364991d30bc52e4d6","scripts":{"dev":"tsc --watch","lint":"eslint src --ext .ts","test":"jest","build":"tsc","clean":"rm -rf dist coverage","lint:fix":"eslint src --ext .ts --fix","test:watch":"jest --watch","test:coverage":"jest --coverage"},"_npmUser":{"name":"mkbernier","email":"mkbernier@gmail.com"},"repository":{"url":"git+https://github.com/bernierllc/tools.git","type":"git","directory":"packages/validators/validators-a11y-contrast"},"_npmVersion":"11.4.2","description":"Accessibility color contrast validation for the BernierLLC validators ecosystem - validates WCAG AA and AAA contrast requirements","directories":{},"_nodeVersion":"24.4.1","dependencies":{"@bernierllc/validators-core":"^0.1.0","@bernierllc/validators-utils":"^0.1.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.37.0","ts-jest":"^29.0.5","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^18.15.0","@typescript-eslint/parser":"^5.57.0","@typescript-eslint/eslint-plugin":"^5.57.0"},"_npmOperationalInternal":{"tmp":"tmp/validators-a11y-contrast_0.1.2_1760221143662_0.09237067145158062","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@bernierllc/validators-a11y-contrast","version":"0.3.0","keywords":["validation","validators","accessibility","a11y","wcag","contrast","color","primitive"],"author":{"name":"Bernier LLC"},"license":"UNLICENSED","_id":"@bernierllc/validators-a11y-contrast@0.3.0","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"homepage":"https://github.com/bernierllc/tools#readme","bugs":{"url":"https://github.com/bernierllc/tools/issues"},"dist":{"shasum":"422427a010e113f45c55c9f05edf7d06dd12f412","tarball":"https://registry.npmjs.org/@bernierllc/validators-a11y-contrast/-/validators-a11y-contrast-0.3.0.tgz","fileCount":17,"integrity":"sha512-sr0np24ygzb2RK4Uwc2Dy6G9eituUYylw9hIKjj32jkvFE67o68Ev6mjVQFbBSud46RnrUXdMwXjYtW37pqJmQ==","signatures":[{"sig":"MEYCIQCtzpaA0fBXOC2IygiB3dAkgJhQwgQ37exgTNqUJuvMXAIhANw0q8G9EEdypcZHNUhvJw55OE1l9wUffSsq7TzQb7kl","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":35769},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"af7e74b3715d56d3a193e1bb6743b337c2b0df6d","scripts":{"dev":"tsc --watch","lint":"eslint src --ext .ts","test":"jest","build":"tsc","clean":"rm -rf dist coverage","lint:fix":"eslint src --ext .ts --fix","test:watch":"jest --watch","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7133e25b-a2e3-4dc9-adc9-8f7594e40222"}},"repository":{"url":"git+https://github.com/bernierllc/tools.git","type":"git","directory":"packages/validators/validators-a11y-contrast"},"_npmVersion":"lerna/9.0.3/node@v20.19.6+x64 (linux)","description":"Accessibility color contrast validation for the BernierLLC validators ecosystem - validates WCAG AA and AAA contrast requirements","directories":{},"_nodeVersion":"20.19.6","dependencies":{"@bernierllc/validators-core":"0.1.2","@bernierllc/validators-utils":"0.1.2"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.37.0","ts-jest":"^29.0.5","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^18.15.0","@typescript-eslint/parser":"^5.57.0","@typescript-eslint/eslint-plugin":"^5.57.0"},"_npmOperationalInternal":{"tmp":"tmp/validators-a11y-contrast_0.3.0_1767642358043_0.49853613880808956","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@bernierllc/validators-a11y-contrast","version":"0.3.1","keywords":["validation","validators","accessibility","a11y","wcag","contrast","color","primitive"],"author":{"name":"Bernier LLC"},"license":"UNLICENSED","_id":"@bernierllc/validators-a11y-contrast@0.3.1","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"homepage":"https://github.com/bernierllc/tools#readme","bugs":{"url":"https://github.com/bernierllc/tools/issues"},"dist":{"shasum":"abac53ae52fe47d8fd09228ded2fdedfe262476e","tarball":"https://registry.npmjs.org/@bernierllc/validators-a11y-contrast/-/validators-a11y-contrast-0.3.1.tgz","fileCount":17,"integrity":"sha512-z0Mk9iEoJ+elAhe5GZQtLXvrfZGaAiiyL3Aq5Tx1x86MIQHHBsCJsgdp020m7vNZ1TnWHViZpgif0/RTDGT5Qw==","signatures":[{"sig":"MEUCIQCe58qrcsjov6SxgMp9Kzw7Lx3/A4b/w1S3n4VootNpAgIgM4L6Pa8TBd53uakzy7IpJYSiGVAByEpDYjo1SC45uHw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":35711},"main":"dist/index.js","_from":"file:bernierllc-validators-a11y-contrast-0.3.1.tgz","types":"dist/index.d.ts","scripts":{"dev":"tsc --watch","lint":"eslint src --ext .ts","test":"jest","build":"tsc","clean":"rm -rf dist coverage","lint:fix":"eslint src --ext .ts --fix","test:watch":"jest --watch","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7133e25b-a2e3-4dc9-adc9-8f7594e40222"}},"_resolved":"/tmp/694ace71e843ad163069ea2e4e93da7e/bernierllc-validators-a11y-contrast-0.3.1.tgz","_integrity":"sha512-z0Mk9iEoJ+elAhe5GZQtLXvrfZGaAiiyL3Aq5Tx1x86MIQHHBsCJsgdp020m7vNZ1TnWHViZpgif0/RTDGT5Qw==","repository":{"url":"git+https://github.com/bernierllc/tools.git","type":"git","directory":"packages/validators/validators-a11y-contrast"},"_npmVersion":"11.11.0","description":"Accessibility color contrast validation for the BernierLLC validators ecosystem - validates WCAG AA and AAA contrast requirements","directories":{},"_nodeVersion":"20.20.0","dependencies":{"@bernierllc/validators-core":"0.1.3","@bernierllc/validators-utils":"0.1.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.37.0","ts-jest":"^29.0.5","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^18.15.0","@typescript-eslint/parser":"^5.57.0","@typescript-eslint/eslint-plugin":"^5.57.0"},"_npmOperationalInternal":{"tmp":"tmp/validators-a11y-contrast_0.3.1_1773078256253_0.6411989288008353","host":"s3://npm-registry-packages-npm-production"}},"0.3.2":{"name":"@bernierllc/validators-a11y-contrast","version":"0.3.2","keywords":["validation","validators","accessibility","a11y","wcag","contrast","color","primitive"],"author":{"name":"Bernier LLC"},"license":"UNLICENSED","_id":"@bernierllc/validators-a11y-contrast@0.3.2","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"homepage":"https://github.com/bernierllc/tools#readme","bugs":{"url":"https://github.com/bernierllc/tools/issues"},"dist":{"shasum":"fca9dd404342566ba3a107d39721c7ae10c4bdc5","tarball":"https://registry.npmjs.org/@bernierllc/validators-a11y-contrast/-/validators-a11y-contrast-0.3.2.tgz","fileCount":17,"integrity":"sha512-a5l0lK5uM0vx8flKiXIU1nWjG7V00AhBDo5K1aft474cH2Zwfe1rN/bCN97hWENHKwGfb1Vc1hoGXOaQR2wlHg==","signatures":[{"sig":"MEQCIBDOARNmG/58HPQREESwkEjp4D5x/ooi/WAX5L9OuKcOAiBmm2RhULWQwFG3LvLKBQZAIj3z7+GiaiimALVtkCfCmw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":35711},"main":"dist/index.js","_from":"file:bernierllc-validators-a11y-contrast-0.3.2.tgz","types":"dist/index.d.ts","scripts":{"dev":"tsc --watch","lint":"eslint src --ext .ts","test":"jest","build":"tsc","clean":"rm -rf dist coverage","lint:fix":"eslint src --ext .ts --fix","test:watch":"jest --watch","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7133e25b-a2e3-4dc9-adc9-8f7594e40222"}},"_resolved":"/home/runner/work/tools/tools/packages/validators/validators-a11y-contrast/bernierllc-validators-a11y-contrast-0.3.2.tgz","_integrity":"sha512-a5l0lK5uM0vx8flKiXIU1nWjG7V00AhBDo5K1aft474cH2Zwfe1rN/bCN97hWENHKwGfb1Vc1hoGXOaQR2wlHg==","repository":{"url":"git+https://github.com/bernierllc/tools.git","type":"git","directory":"packages/validators/validators-a11y-contrast"},"_npmVersion":"11.11.0","description":"Accessibility color contrast validation for the BernierLLC validators ecosystem - validates WCAG AA and AAA contrast requirements","directories":{},"_nodeVersion":"20.20.0","dependencies":{"@bernierllc/validators-core":"0.1.4","@bernierllc/validators-utils":"0.1.4"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.37.0","ts-jest":"^29.0.5","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^18.15.0","@typescript-eslint/parser":"^5.57.0","@typescript-eslint/eslint-plugin":"^5.57.0"},"_npmOperationalInternal":{"tmp":"tmp/validators-a11y-contrast_0.3.2_1773163862732_0.9186778823761825","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@bernierllc/validators-a11y-contrast","version":"0.4.0","keywords":["validation","validators","accessibility","a11y","wcag","contrast","color","primitive"],"author":{"name":"Bernier LLC"},"license":"UNLICENSED","_id":"@bernierllc/validators-a11y-contrast@0.4.0","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"homepage":"https://github.com/bernierllc/tools#readme","bugs":{"url":"https://github.com/bernierllc/tools/issues"},"dist":{"shasum":"d5470b9e2c1ce482a03c7b35fce47ef8a5524f4e","tarball":"https://registry.npmjs.org/@bernierllc/validators-a11y-contrast/-/validators-a11y-contrast-0.4.0.tgz","fileCount":17,"integrity":"sha512-qh5SCq0DWhS2L5U0x3GR5c42e5yOnRxRK2az6lu3wuOvqs7cgbtNbj9RUovDBqIh2D7vPla5GzxpscJwXO/kFQ==","signatures":[{"sig":"MEUCIHmetnasviCMp5+tp5pQg8VHvT+iCx+G5jO1sKGqcjilAiEA2Xk297x9sGPp2HoDjM51DfNt6joZX58kSBDx5dAd3xc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":35711},"main":"dist/index.js","_from":"file:bernierllc-validators-a11y-contrast-0.4.0.tgz","types":"dist/index.d.ts","scripts":{"dev":"tsc --watch","lint":"eslint src --ext .ts","test":"jest","build":"tsc","clean":"rm -rf dist coverage","lint:fix":"eslint src --ext .ts --fix","test:watch":"jest --watch","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7133e25b-a2e3-4dc9-adc9-8f7594e40222"}},"_resolved":"/home/runner/work/tools/tools/packages/validators/validators-a11y-contrast/bernierllc-validators-a11y-contrast-0.4.0.tgz","_integrity":"sha512-qh5SCq0DWhS2L5U0x3GR5c42e5yOnRxRK2az6lu3wuOvqs7cgbtNbj9RUovDBqIh2D7vPla5GzxpscJwXO/kFQ==","repository":{"url":"git+https://github.com/bernierllc/tools.git","type":"git","directory":"packages/validators/validators-a11y-contrast"},"_npmVersion":"11.14.1","description":"Accessibility color contrast validation for the BernierLLC validators ecosystem - validates WCAG AA and AAA contrast requirements","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@bernierllc/validators-core":"0.2.0","@bernierllc/validators-utils":"0.2.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.37.0","ts-jest":"^29.0.5","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^18.15.0","@typescript-eslint/parser":"^5.57.0","@typescript-eslint/eslint-plugin":"^5.57.0"},"_npmOperationalInternal":{"tmp":"tmp/validators-a11y-contrast_0.4.0_1779242093992_0.05776706042298607","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@bernierllc/validators-a11y-contrast","version":"0.5.0","keywords":["validation","validators","accessibility","a11y","wcag","contrast","color","primitive"],"author":{"name":"Bernier LLC"},"license":"UNLICENSED","_id":"@bernierllc/validators-a11y-contrast@0.5.0","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"homepage":"https://github.com/bernierllc/tools#readme","bugs":{"url":"https://github.com/bernierllc/tools/issues"},"dist":{"shasum":"eea375558fb799d9492377e74bcc10eb2ccb683a","tarball":"https://registry.npmjs.org/@bernierllc/validators-a11y-contrast/-/validators-a11y-contrast-0.5.0.tgz","fileCount":17,"integrity":"sha512-QydxjCS65sQNL+EXWnjK+AWFvFFYRaOVfvTT20ZDSYEOajDv+L3Uthr6aoHiqiZq3j5v1C8rAXrIRf+rN+h/tg==","signatures":[{"sig":"MEYCIQC+LnhQVxiMi+Cd7Sa05kI1JFIf3B92PMGwCPmL1LgWBQIhANu9k1zBPcjL0NHxkQFvc7qbzVVkyPqcToJKHM/GPXQJ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":35711},"main":"dist/index.js","_from":"file:bernierllc-validators-a11y-contrast-0.5.0.tgz","types":"dist/index.d.ts","scripts":{"dev":"tsc --watch","lint":"eslint src --ext .ts","test":"jest","build":"tsc","clean":"rm -rf dist coverage","lint:fix":"eslint src --ext .ts --fix","test:watch":"jest --watch","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7133e25b-a2e3-4dc9-adc9-8f7594e40222"}},"_resolved":"/home/runner/work/tools/tools/packages/validators/validators-a11y-contrast/bernierllc-validators-a11y-contrast-0.5.0.tgz","_integrity":"sha512-QydxjCS65sQNL+EXWnjK+AWFvFFYRaOVfvTT20ZDSYEOajDv+L3Uthr6aoHiqiZq3j5v1C8rAXrIRf+rN+h/tg==","repository":{"url":"git+https://github.com/bernierllc/tools.git","type":"git","directory":"packages/validators/validators-a11y-contrast"},"_npmVersion":"11.14.1","description":"Accessibility color contrast validation for the BernierLLC validators ecosystem - validates WCAG AA and AAA contrast requirements","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@bernierllc/validators-core":"0.3.0","@bernierllc/validators-utils":"0.3.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.37.0","ts-jest":"^29.0.5","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^18.15.0","@typescript-eslint/parser":"^5.57.0","@typescript-eslint/eslint-plugin":"^5.57.0"},"_npmOperationalInternal":{"tmp":"tmp/validators-a11y-contrast_0.5.0_1779250848925_0.793103956895834","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@bernierllc/validators-a11y-contrast","version":"0.6.0","description":"Accessibility color contrast validation for the BernierLLC validators ecosystem - validates WCAG AA and AAA contrast requirements","main":"dist/index.js","types":"dist/index.d.ts","keywords":["validation","validators","accessibility","a11y","wcag","contrast","color","primitive"],"author":{"name":"Bernier LLC"},"license":"UNLICENSED","dependencies":{"@bernierllc/validators-core":"0.4.0","@bernierllc/validators-utils":"0.5.0"},"devDependencies":{"@types/jest":"^29.5.0","@types/node":"^18.15.0","@typescript-eslint/eslint-plugin":"^5.57.0","@typescript-eslint/parser":"^5.57.0","eslint":"^8.37.0","jest":"^29.5.0","ts-jest":"^29.0.5","typescript":"^5.0.0"},"repository":{"type":"git","url":"git+https://github.com/bernierllc/tools.git","directory":"packages/validators/validators-a11y-contrast"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"scripts":{"build":"tsc","dev":"tsc --watch","test":"jest","test:watch":"jest --watch","test:coverage":"jest --coverage","lint":"eslint src --ext .ts","lint:fix":"eslint src --ext .ts --fix","clean":"rm -rf dist coverage"},"_id":"@bernierllc/validators-a11y-contrast@0.6.0","bugs":{"url":"https://github.com/bernierllc/tools/issues"},"homepage":"https://github.com/bernierllc/tools#readme","_integrity":"sha512-pd/ZqrWAWQIGPcpjDXAj633HOXaqsI214hwNqaHXdxorwa0kM4BgQmnMzd9fURWXA7Wop0RlV0wG2bxgHVLfWA==","_resolved":"/home/runner/work/tools/tools/packages/validators/validators-a11y-contrast/bernierllc-validators-a11y-contrast-0.6.0.tgz","_from":"file:bernierllc-validators-a11y-contrast-0.6.0.tgz","_nodeVersion":"20.20.2","_npmVersion":"11.14.1","dist":{"integrity":"sha512-pd/ZqrWAWQIGPcpjDXAj633HOXaqsI214hwNqaHXdxorwa0kM4BgQmnMzd9fURWXA7Wop0RlV0wG2bxgHVLfWA==","shasum":"ceef96f4c1e8eb4c09a3fe8d3232319f58938667","tarball":"https://registry.npmjs.org/@bernierllc/validators-a11y-contrast/-/validators-a11y-contrast-0.6.0.tgz","fileCount":19,"unpackedSize":37595,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIAxZ3hNDdQrJhpsSf0sQs3EXy1D8VW0Ttt9Ow/1izdQ7AiEAmdkdbeRIHiyU5vF2aR6fs//tIincnBj2+BTSFdwl4aY="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7133e25b-a2e3-4dc9-adc9-8f7594e40222"}},"directories":{},"maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/validators-a11y-contrast_0.6.0_1779252141140_0.4772614780652853"},"_hasShrinkwrap":false}},"time":{"created":"2025-10-11T22:19:03.554Z","modified":"2026-05-20T04:42:21.435Z","0.1.2":"2025-10-11T22:19:03.849Z","0.3.0":"2026-01-05T19:45:58.190Z","0.3.1":"2026-03-09T17:44:16.413Z","0.3.2":"2026-03-10T17:31:02.867Z","0.4.0":"2026-05-20T01:54:54.163Z","0.5.0":"2026-05-20T04:20:49.056Z","0.6.0":"2026-05-20T04:42:21.286Z"},"bugs":{"url":"https://github.com/bernierllc/tools/issues"},"author":{"name":"Bernier LLC"},"license":"UNLICENSED","homepage":"https://github.com/bernierllc/tools#readme","keywords":["validation","validators","accessibility","a11y","wcag","contrast","color","primitive"],"repository":{"type":"git","url":"git+https://github.com/bernierllc/tools.git","directory":"packages/validators/validators-a11y-contrast"},"description":"Accessibility color contrast validation for the BernierLLC validators ecosystem - validates WCAG AA and AAA contrast requirements","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"readme":"# @bernierllc/validators-a11y-contrast\n\nAccessibility color contrast validation for the BernierLLC validators ecosystem - validates WCAG AA and AAA contrast requirements.\n\n## Installation\n\n```bash\nnpm install @bernierllc/validators-a11y-contrast\n```\n\n## Overview\n\nThis primitive validator checks color contrast ratios against WCAG 2.1 accessibility standards. It validates both text and non-text UI elements to ensure sufficient contrast for users with visual impairments.\n\n### WCAG Standards Supported\n\n- **WCAG AA Text**: 4.5:1 minimum for normal text, 3:1 for large text\n- **WCAG AAA Text**: 7:1 minimum for normal text, 4.5:1 for large text\n- **Non-Text Elements**: 3:1 minimum (WCAG 2.1 SC 1.4.11)\n\n### Text Size Definitions\n\n- **Normal Text**: Below 18pt (24px) or below 14pt (18.67px) bold\n- **Large Text**: 18pt (24px)+ or 14pt (18.67px)+ bold\n\n## Usage\n\n### Basic Validation\n\n```typescript\nimport { validateA11yContrast } from '@bernierllc/validators-a11y-contrast';\n\n// Check normal text against WCAG AA\nconst problems = await validateA11yContrast({\n  foreground: '#777777',\n  background: '#ffffff',\n  level: 'AA',\n  fontSize: 'normal'\n});\n\nproblems.forEach(problem => {\n  console.log(`${problem.severity}: ${problem.message}`);\n  console.log(`Suggestion: ${problem.suggestion}`);\n});\n```\n\n### Quick Contrast Check\n\n```typescript\nimport { checkContrast } from '@bernierllc/validators-a11y-contrast';\n\n// Get detailed contrast metrics\nconst result = checkContrast({\n  foreground: '#000000',\n  background: '#ffffff',\n  level: 'AA',\n  fontSize: 'normal'\n});\n\nconsole.log(`Contrast Ratio: ${result.contrastRatio.toFixed(2)}:1`);\nconsole.log(`Required: ${result.required}:1`);\nconsole.log(`Passes: ${result.passes}`);\n// Output:\n// Contrast Ratio: 21.00:1\n// Required: 4.5:1\n// Passes: true\n```\n\n### Large Text Validation\n\n```typescript\nimport { validateA11yContrast } from '@bernierllc/validators-a11y-contrast';\n\n// Headers and large text have lower requirements\nconst problems = await validateA11yContrast({\n  foreground: '#959595',\n  background: '#ffffff',\n  level: 'AA',\n  fontSize: 'large'\n});\n\n// Passes with 3.5:1 ratio (minimum 3:1 for large text)\nconsole.log(problems.length); // 0\n```\n\n### WCAG AAA Enhanced Validation\n\n```typescript\nimport { validateA11yContrast } from '@bernierllc/validators-a11y-contrast';\n\n// Check against enhanced AAA standards\nconst problems = await validateA11yContrast({\n  foreground: '#595959',\n  background: '#ffffff',\n  level: 'AAA',\n  fontSize: 'normal'\n});\n\n// Passes with 7.1:1 ratio (minimum 7:1 for AAA normal text)\nconsole.log(problems.length); // 0\n```\n\n### Non-Text UI Elements\n\n```typescript\nimport { validateA11yContrast } from '@bernierllc/validators-a11y-contrast';\n\n// Validate button borders, icons, and graphical elements\nconst problems = await validateA11yContrast({\n  foreground: '#0066cc',\n  background: '#ffffff',\n  elementType: 'non-text'\n});\n\n// Passes with 7.9:1 ratio (minimum 3:1 for non-text)\nconsole.log(problems.length); // 0\n```\n\n## API Reference\n\n### `validateA11yContrast(input, utils?)`\n\nValidates color contrast against WCAG standards and returns validation problems.\n\n**Parameters:**\n- `input: ContrastCheckInput` - Validation configuration\n  - `foreground: string` - Foreground color (text/UI element)\n  - `background: string` - Background color\n  - `level?: 'AA' | 'AAA'` - WCAG level (default: 'AA')\n  - `fontSize?: 'normal' | 'large'` - Text size category (default: 'normal')\n  - `elementType?: 'text' | 'non-text'` - Element type (default: 'text')\n- `utils?: SharedUtils` - Optional shared utilities\n\n**Returns:** `Promise<Problem[]>` - Array of validation problems\n\n**Color Format Support:**\n- Hex: `#000`, `#000000`\n- RGB: `rgb(0, 0, 0)`, `rgba(0, 0, 0, 1)`\n- Named: `black`, `white`, `red`, etc.\n\n### `checkContrast(input)`\n\nSynchronously checks contrast and returns detailed metrics.\n\n**Parameters:**\n- `input: ContrastCheckInput` - Same as `validateA11yContrast`\n\n**Returns:** `ContrastCheckResult`\n- `passes: boolean` - Whether contrast meets requirements\n- `contrastRatio: number` - Calculated contrast ratio\n- `required: number` - Required minimum ratio\n- `level: 'AA' | 'AAA'` - WCAG level checked\n- `fontSize?: 'normal' | 'large'` - Text size (if text)\n- `elementType: 'text' | 'non-text'` - Element type\n\n## Validation Rules\n\n### Rule: `a11y-contrast/insufficient-contrast-aa-normal`\n\n**Severity:** `error`\n\nValidates normal text meets WCAG AA minimum of 4.5:1 contrast ratio.\n\n**Triggers When:**\n- Text contrast ratio < 4.5:1\n- Element type is 'text'\n- Font size is 'normal'\n- Level is 'AA'\n\n### Rule: `a11y-contrast/insufficient-contrast-aa-large`\n\n**Severity:** `error`\n\nValidates large text meets WCAG AA minimum of 3:1 contrast ratio.\n\n**Triggers When:**\n- Text contrast ratio < 3:1\n- Element type is 'text'\n- Font size is 'large'\n- Level is 'AA'\n\n### Rule: `a11y-contrast/insufficient-contrast-aaa-normal`\n\n**Severity:** `warning`\n\nValidates normal text meets WCAG AAA enhanced minimum of 7:1.\n\n**Triggers When:**\n- Text contrast ratio < 7:1\n- Element type is 'text'\n- Font size is 'normal'\n- Level is 'AAA'\n\n### Rule: `a11y-contrast/insufficient-contrast-aaa-large`\n\n**Severity:** `warning`\n\nValidates large text meets WCAG AAA enhanced minimum of 4.5:1.\n\n**Triggers When:**\n- Text contrast ratio < 4.5:1\n- Element type is 'text'\n- Font size is 'large'\n- Level is 'AAA'\n\n### Rule: `a11y-contrast/insufficient-contrast-non-text`\n\n**Severity:** `error`\n\nValidates non-text elements meet WCAG 2.1 SC 1.4.11 minimum of 3:1.\n\n**Triggers When:**\n- UI element contrast < 3:1\n- Element type is 'non-text'\n\n## Real-World Examples\n\n### Validating Link Colors\n\n```typescript\n// Standard link blue on white background\nconst linkProblems = await validateA11yContrast({\n  foreground: '#0000ee',\n  background: '#ffffff',\n  level: 'AA',\n  fontSize: 'normal'\n});\n\nconsole.log(linkProblems.length); // 0 - Passes with 8.6:1 ratio\n```\n\n### Button Border Contrast\n\n```typescript\n// Validate button border stands out\nconst borderProblems = await validateA11yContrast({\n  foreground: '#0066cc', // Button border color\n  background: '#ffffff', // Page background\n  elementType: 'non-text'\n});\n\nconsole.log(borderProblems.length); // 0 - Passes with 7.9:1 ratio\n```\n\n### Form Input Validation\n\n```typescript\n// Check placeholder text color\nconst placeholderProblems = await validateA11yContrast({\n  foreground: '#999999', // Light gray placeholder\n  background: '#ffffff',\n  level: 'AA',\n  fontSize: 'normal'\n});\n\nconsole.log(placeholderProblems.length); // 1 - Fails with 2.85:1 ratio\nconsole.log(placeholderProblems[0].message);\n// \"Insufficient contrast ratio 2.85:1 (minimum 4.5:1 required for WCAG AA)\"\n```\n\n### Dark Mode Validation\n\n```typescript\n// Validate dark mode text\nconst darkModeProblems = await validateA11yContrast({\n  foreground: '#e0e0e0', // Light text\n  background: '#1a1a1a', // Dark background\n  level: 'AA',\n  fontSize: 'normal'\n});\n\nconsole.log(darkModeProblems.length); // 0 - Passes with 11.8:1 ratio\n```\n\n## Integration with Other Validators\n\nThis primitive validator can be composed with other validators in the ecosystem:\n\n```typescript\nimport { createRuleContext } from '@bernierllc/validators-core';\nimport { createSharedUtils } from '@bernierllc/validators-utils';\nimport { a11yContrastValidator } from '@bernierllc/validators-a11y-contrast';\n\n// Create shared utilities once\nconst utils = createSharedUtils();\n\n// Create context for validation\nconst context = createRuleContext(\n  'a11y-contrast',\n  { foreground: '#777', background: '#fff' },\n  utils\n);\n\n// Run validation\nconst problems = await a11yContrastValidator.validate(\n  { foreground: '#777', background: '#fff', level: 'AA', fontSize: 'normal' },\n  context\n);\n```\n\n## Dependencies\n\n- `@bernierllc/validators-core` - Core validation framework\n- `@bernierllc/validators-utils` - Shared utilities including color parsing and contrast calculation\n\n## Integration Status\n\n### Logger Integration\nNot applicable - This is a pure validation utility with no side effects or logging requirements. As a primitive validator focused solely on color contrast calculations, it follows the validators architecture principle where logging is handled by higher-level domain validators or the validation runner.\n\n### Docs-Suite Compatibility\nReady - Package includes complete markdown documentation that can be integrated into docs-suite. All validation rules are documented with examples and usage patterns.\n\n### NeverHub Integration\nNot applicable - This is a primitive validator that operates synchronously on input data. Following the validators architecture, primitive validators do not integrate with NeverHub. Service discovery and event publishing are responsibilities of domain validators and validator orchestrators that consume this primitive.\n\n## Testing\n\n```bash\n# Run tests\nnpm test\n\n# Run tests with coverage\nnpm run test:coverage\n\n# Run tests once\nnpm run test:run\n```\n\n## Quality Standards\n\n- Test Coverage: 90%+ (branches, functions, lines, statements)\n- TypeScript: Strict mode enabled\n- Linting: Zero errors or warnings\n- Real Data: Tests use actual color values\n\n## Contributing\n\nThis package follows BernierLLC standards:\n- Single responsibility (contrast validation only)\n- Pure functions\n- Comprehensive test coverage\n- Real-world testing data\n\n## License\n\nCopyright (c) 2025 Bernier LLC. All rights reserved.\n\n## See Also\n\n- [@bernierllc/validators-core](../validators-core) - Core validation framework\n- [@bernierllc/validators-utils](../validators-utils) - Shared validation utilities\n- [@bernierllc/validators-html-syntax](../validators-html-syntax) - HTML syntax validation\n- [WCAG 2.1 Guidelines](https://www.w3.org/WAI/WCAG21/quickref/) - Official WCAG documentation\n","readmeFilename":"README.md"}