{"_id":"@a11y-guard/eslint-plugin","name":"@a11y-guard/eslint-plugin","dist-tags":{"latest":"1.0.0"},"versions":{"1.0.0":{"name":"@a11y-guard/eslint-plugin","version":"1.0.0","description":"ESLint plugin for a11y-guard — static JSX/TSX accessibility analysis","type":"module","main":"./dist/index.cjs","module":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/Zunaib/a11y-guard.git","directory":"packages/eslint-plugin"},"homepage":"https://github.com/Zunaib/a11y-guard#readme","publishConfig":{"access":"public"},"dependencies":{"@a11y-guard/core":"1.0.0"},"peerDependencies":{"eslint":">=8.0.0"},"devDependencies":{"@types/eslint":"^9.0.0","tsup":"^8.0.0","vitest":"^2.0.0","typescript":"^5.5.0","eslint":"^9.0.0"},"scripts":{"build":"tsup","dev":"tsup --watch","test":"vitest run","lint":"eslint src","clean":"rm -rf dist"},"_id":"@a11y-guard/eslint-plugin@1.0.0","bugs":{"url":"https://github.com/Zunaib/a11y-guard/issues"},"_integrity":"sha512-V3ZNxAZqoTvgMPEPbDSDuTkEaaxJ1XUZN/LIoXO0qJLCDlU35GIzcXqHuhHDGfZpnBZ8j+DJgx8XWBUEbtS12Q==","_resolved":"/private/var/folders/fx/6_j04p_n1x7gnglswxk7cskc0000gp/T/34612affdcf37caf53482406be21ccdc/a11y-guard-eslint-plugin-1.0.0.tgz","_from":"file:a11y-guard-eslint-plugin-1.0.0.tgz","_nodeVersion":"22.20.0","_npmVersion":"10.9.3","dist":{"integrity":"sha512-V3ZNxAZqoTvgMPEPbDSDuTkEaaxJ1XUZN/LIoXO0qJLCDlU35GIzcXqHuhHDGfZpnBZ8j+DJgx8XWBUEbtS12Q==","shasum":"fe9fe2c4c9a9d42ba2f5b6fe305af5547ccff428","tarball":"https://registry.npmjs.org/@a11y-guard/eslint-plugin/-/eslint-plugin-1.0.0.tgz","fileCount":9,"unpackedSize":73678,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCqxeO3Fbcyrbvh29MxB3qugllfD4pzd3ypf2mBDilb4wIgIPfl07J5olUMaodjqODIfxqqxFAusKQDz1KWCUiLjH0="}]},"_npmUser":{"name":"zunaib.imtiaz","email":"zunaib60@gmail.com"},"directories":{},"maintainers":[{"name":"zunaib.imtiaz","email":"zunaib60@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/eslint-plugin_1.0.0_1778453054713_0.9644864977130629"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-10T22:44:14.646Z","1.0.0":"2026-05-10T22:44:14.841Z","modified":"2026-05-10T22:44:15.045Z"},"maintainers":[{"name":"zunaib.imtiaz","email":"zunaib60@gmail.com"}],"description":"ESLint plugin for a11y-guard — static JSX/TSX accessibility analysis","homepage":"https://github.com/Zunaib/a11y-guard#readme","repository":{"type":"git","url":"git+https://github.com/Zunaib/a11y-guard.git","directory":"packages/eslint-plugin"},"bugs":{"url":"https://github.com/Zunaib/a11y-guard/issues"},"license":"MIT","readme":"# @a11y-guard/eslint-plugin\n\nESLint plugin that catches accessibility violations inline in JSX/TSX as you write code. Works with ESLint 8 and ESLint 9 flat config.\n\n## Install\n\n```bash\nnpm install --save-dev @a11y-guard/eslint-plugin\n# or\npnpm add -D @a11y-guard/eslint-plugin\n```\n\n## Setup\n\n### ESLint 9 (flat config)\n\n```js\n// eslint.config.js\nimport a11yGuard from '@a11y-guard/eslint-plugin';\n\nexport default [\n  {\n    plugins: { '@a11y-guard': a11yGuard },\n    rules: a11yGuard.configs.recommended.rules,\n  },\n];\n```\n\n### ESLint 8 (.eslintrc)\n\n```json\n{\n  \"plugins\": [\"@a11y-guard\"],\n  \"rules\": {\n    \"@a11y-guard/jsx-img-alt\": \"error\",\n    \"@a11y-guard/jsx-label-association\": \"error\",\n    \"@a11y-guard/jsx-html-has-lang\": \"error\",\n    \"@a11y-guard/jsx-interactive-role\": \"error\",\n    \"@a11y-guard/jsx-link-text\": \"warn\"\n  }\n}\n```\n\n## Rules\n\n| Rule | What it checks | Default |\n|---|---|---|\n| `jsx-img-alt` | `<img>` must have a non-empty `alt` prop | `error` |\n| `jsx-label-association` | `<input>` / `<select>` / `<textarea>` must have an associated label | `error` |\n| `jsx-html-has-lang` | `<html>` element must have a `lang` prop (for layout files) | `error` |\n| `jsx-interactive-role` | Non-interactive elements with `onClick` must have an appropriate ARIA role | `error` |\n| `jsx-link-text` | `<a>` link text must not be generic (\"click here\", \"read more\", etc.) | `warn` |\n\nAll rules target WCAG 2.1 AA criteria and are applicable under ADA, EAA, and Section 508.\n\n## Customising rules\n\n```js\n// eslint.config.js\nimport a11yGuard from '@a11y-guard/eslint-plugin';\n\nexport default [\n  {\n    plugins: { '@a11y-guard': a11yGuard },\n    rules: {\n      ...a11yGuard.configs.recommended.rules,\n      '@a11y-guard/jsx-link-text': 'error',   // upgrade from warn to error\n      '@a11y-guard/jsx-html-has-lang': 'off',  // disable for component-only projects\n    },\n  },\n];\n```\n\n## License\n\nMIT — see [LICENSE](../../LICENSE) in the root of the repository.\n","readmeFilename":"README.md","_rev":"1-cfc79a1e182b310e780e014320b1295a"}