{"_id":"@akanaka-design/eslint-config","_rev":"8-ccfa62c6945759dd83634d06dc2650ef","name":"@akanaka-design/eslint-config","dist-tags":{"latest":"0.2.10"},"versions":{"0.2.2":{"name":"@akanaka-design/eslint-config","version":"0.2.2","keywords":["eslint","eslintconfig","design-system","akanaka","tailwind"],"license":"MIT","_id":"@akanaka-design/eslint-config@0.2.2","maintainers":[{"name":"akanaka","email":"markprodesigner@gmail.com"}],"dist":{"shasum":"982b67871d6a272c80267d4b5d02f190a3ff696b","tarball":"https://registry.npmjs.org/@akanaka-design/eslint-config/-/eslint-config-0.2.2.tgz","fileCount":8,"integrity":"sha512-MQ5XLsxjIaJdGiUudDBaKUTxHEuhk/92xMdK2lUMy5bB9JPMfy8QmW740+rSwdxLrLBXE+jgGSpEYR9l6WNWvA==","signatures":[{"sig":"MEUCIDjqozrGKKHfnBfkJsFmk1fw6bj7ognMja5ZEhwj5N/sAiEAmYkynB4mVv147CzHFFV8aN1CTYOm3eilj1P71hReJHk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":22693},"main":"index.js","_from":"file:akanaka-design-eslint-config-0.2.2.tgz","scripts":{"lint":"eslint .","test":"vitest run","lint:fix":"eslint . --fix","test:watch":"vitest","test:regression":"node tests/prefer-ds-components-regression.runner.cjs"},"_npmUser":{"name":"akanaka","email":"markprodesigner@gmail.com"},"_resolved":"/private/var/folders/p8/_qb_r0pd24qc5gzvcmppg41c0000gn/T/07e64a7a06288382b2856e722d01e58a/akanaka-design-eslint-config-0.2.2.tgz","_integrity":"sha512-MQ5XLsxjIaJdGiUudDBaKUTxHEuhk/92xMdK2lUMy5bB9JPMfy8QmW740+rSwdxLrLBXE+jgGSpEYR9l6WNWvA==","_npmVersion":"11.8.0","description":"ESLint config for Akanaka Design System","directories":{},"_nodeVersion":"25.5.0","dependencies":{"@typescript-eslint/utils":"^8.0.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.0.0","vitest":"^2.0.0"},"peerDependencies":{"eslint":"^8.0.0 || ^9.0.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_0.2.2_1775118327082_0.17789363826272386","host":"s3://npm-registry-packages-npm-production"}},"0.2.3":{"name":"@akanaka-design/eslint-config","version":"0.2.3","keywords":["eslint","eslintconfig","design-system","akanaka","tailwind"],"license":"MIT","_id":"@akanaka-design/eslint-config@0.2.3","maintainers":[{"name":"akanaka","email":"markprodesigner@gmail.com"}],"dist":{"shasum":"2e516a56711579e5329585784df3c85a835986d4","tarball":"https://registry.npmjs.org/@akanaka-design/eslint-config/-/eslint-config-0.2.3.tgz","fileCount":8,"integrity":"sha512-z4Dav1wu4Vr+w62Aen1hCNhuFU6rHx/NWNKJ0s9jfu4tEdGXcwrL+AyzB261YGVtYB1tk7h9V+fiszrAUVRVTA==","signatures":[{"sig":"MEUCIQDnE6wf1fLqKehCEIrTPAc6gIsNxBIUlAL5n7rE+eOL7wIgUOGkDO7E6Z9HhIK6JQNOUvqTbEZURyv6CpOoT4iw0lI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":23102},"main":"index.js","_from":"file:akanaka-design-eslint-config-0.2.3.tgz","scripts":{"lint":"eslint .","test":"vitest run","lint:fix":"eslint . --fix","test:watch":"vitest","test:regression":"node tests/prefer-ds-components-regression.runner.cjs"},"_npmUser":{"name":"akanaka","email":"markprodesigner@gmail.com"},"_resolved":"/private/var/folders/p8/_qb_r0pd24qc5gzvcmppg41c0000gn/T/847bd0d7b450a2674afa653a3bb5105e/akanaka-design-eslint-config-0.2.3.tgz","_integrity":"sha512-z4Dav1wu4Vr+w62Aen1hCNhuFU6rHx/NWNKJ0s9jfu4tEdGXcwrL+AyzB261YGVtYB1tk7h9V+fiszrAUVRVTA==","_npmVersion":"11.8.0","description":"ESLint config for Akanaka Design System","directories":{},"_nodeVersion":"25.5.0","dependencies":{"@typescript-eslint/utils":"^8.0.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.0.0","vitest":"^2.0.0"},"peerDependencies":{"eslint":"^8.0.0 || ^9.0.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_0.2.3_1775124706387_0.5932923038721767","host":"s3://npm-registry-packages-npm-production"}},"0.2.5":{"name":"@akanaka-design/eslint-config","version":"0.2.5","keywords":["eslint","eslintconfig","design-system","akanaka","tailwind"],"license":"MIT","_id":"@akanaka-design/eslint-config@0.2.5","maintainers":[{"name":"akanaka","email":"markprodesigner@gmail.com"}],"homepage":"https://akanaka-design-system-docs.vercel.app","bugs":{"url":"https://github.com/designfresh/akanaka-design-system/issues"},"dist":{"shasum":"161186fd34321c2d29e9dcb33253002990eef66b","tarball":"https://registry.npmjs.org/@akanaka-design/eslint-config/-/eslint-config-0.2.5.tgz","fileCount":8,"integrity":"sha512-LlrRDRW+TEFmbl5sAWE6zPxtZPS/zwT7ZzqNJxapy3OVGlAeEgtatJCZ0IIjBg5m7iXgo+aQfE/Tjx9qLpnYpA==","signatures":[{"sig":"MEYCIQDKZlxNmzfOLwZpqGpBivucD5ZHU+A8tuf1t2y98C06KAIhALIzBxMp+Dwg6VYrCYN3zLfccmIFZyS01z7oOH0nY6a3","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":23762},"main":"index.js","_from":"file:akanaka-design-eslint-config-0.2.5.tgz","scripts":{"lint":"eslint .","test":"vitest run","lint:fix":"eslint . --fix","test:watch":"vitest","test:regression":"node tests/prefer-ds-components-regression.runner.cjs"},"_npmUser":{"name":"akanaka","email":"markprodesigner@gmail.com"},"_resolved":"/private/var/folders/p8/_qb_r0pd24qc5gzvcmppg41c0000gn/T/ea91e2c8e935d2b3146ff61e3410e7f4/akanaka-design-eslint-config-0.2.5.tgz","_integrity":"sha512-LlrRDRW+TEFmbl5sAWE6zPxtZPS/zwT7ZzqNJxapy3OVGlAeEgtatJCZ0IIjBg5m7iXgo+aQfE/Tjx9qLpnYpA==","repository":{"url":"git+https://github.com/designfresh/akanaka-design-system.git","type":"git"},"_npmVersion":"11.8.0","description":"ESLint config for Akanaka Design System","directories":{},"_nodeVersion":"25.5.0","dependencies":{"@typescript-eslint/utils":"^8.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.0.0","vitest":"^2.0.0"},"peerDependencies":{"eslint":"^8.0.0 || ^9.0.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_0.2.5_1775295742903_0.608084454996447","host":"s3://npm-registry-packages-npm-production"}},"0.2.6":{"name":"@akanaka-design/eslint-config","version":"0.2.6","keywords":["eslint","eslintconfig","design-system","akanaka","tailwind"],"license":"MIT","_id":"@akanaka-design/eslint-config@0.2.6","maintainers":[{"name":"akanaka","email":"markprodesigner@gmail.com"}],"homepage":"https://akanaka-design-system-docs.vercel.app","bugs":{"url":"https://github.com/designfresh/akanaka-design-system/issues"},"dist":{"shasum":"3c71b4cbfcc2763b2454ad5c2e484c3b26d7bd29","tarball":"https://registry.npmjs.org/@akanaka-design/eslint-config/-/eslint-config-0.2.6.tgz","fileCount":8,"integrity":"sha512-/F4KNEGGwml3NRwq7OCVu0/t0ysVdQI4oiiPXlkwDWvrUXf+a4OuNQlYN+KUffoqw9iPp7o8XEif2Km2HaNpKg==","signatures":[{"sig":"MEYCIQCxJmsbgvPJoeA5FU3DvuZnBW2tfhuRU3y3Z1av9JEEZAIhAK5P/PPB4YBehVy2CWJNyO8+1N7VCE1zeBbDLCpQoqFo","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":24122},"main":"index.js","_from":"file:akanaka-design-eslint-config-0.2.6.tgz","scripts":{"lint":"eslint .","test":"vitest run","lint:fix":"eslint . --fix","test:watch":"vitest","test:regression":"node tests/prefer-ds-components-regression.runner.cjs"},"_npmUser":{"name":"akanaka","email":"markprodesigner@gmail.com"},"_resolved":"/private/var/folders/p8/_qb_r0pd24qc5gzvcmppg41c0000gn/T/953033a0e9a49cee0a428674e3e73037/akanaka-design-eslint-config-0.2.6.tgz","_integrity":"sha512-/F4KNEGGwml3NRwq7OCVu0/t0ysVdQI4oiiPXlkwDWvrUXf+a4OuNQlYN+KUffoqw9iPp7o8XEif2Km2HaNpKg==","repository":{"url":"git+https://github.com/designfresh/akanaka-design-system.git","type":"git"},"_npmVersion":"11.8.0","description":"ESLint config for Akanaka Design System","directories":{},"_nodeVersion":"25.5.0","dependencies":{"@typescript-eslint/utils":"^8.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.0.0","vitest":"^2.0.0"},"peerDependencies":{"eslint":"^8.0.0 || ^9.0.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_0.2.6_1775296917164_0.45755720743435546","host":"s3://npm-registry-packages-npm-production"}},"0.2.7":{"name":"@akanaka-design/eslint-config","version":"0.2.7","keywords":["eslint","eslintconfig","design-system","akanaka","tailwind"],"license":"MIT","_id":"@akanaka-design/eslint-config@0.2.7","maintainers":[{"name":"akanaka","email":"markprodesigner@gmail.com"}],"homepage":"https://akanaka-design-system-docs.vercel.app","bugs":{"url":"https://github.com/designfresh/akanaka-design-system/issues"},"dist":{"shasum":"c34d5aeebb02bda3fe869399ad83112902923f1f","tarball":"https://registry.npmjs.org/@akanaka-design/eslint-config/-/eslint-config-0.2.7.tgz","fileCount":9,"integrity":"sha512-RUWfTUF+uEEtaKgkWdJs0v0DfCWtWhfkxPrrAzIX3/AchOB6WwZXUH+5dMr/ChND1dA/OQxDDyNMY4n1zQ9MEQ==","signatures":[{"sig":"MEUCICa3Pkf6bxx0ytEJxwrkFSgDHmx9bbWMoX9Wk8+NHc34AiEAz//InnWmixstXYyAE90dz4skOwTwOoWHoIrWh2nKv+o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":31641},"main":"index.js","_from":"file:akanaka-design-eslint-config-0.2.7.tgz","scripts":{"lint":"eslint .","test":"vitest run","lint:fix":"eslint . --fix","test:watch":"vitest","test:regression":"node tests/prefer-ds-components-regression.runner.cjs && node tests/require-statcard-regression.runner.cjs"},"_npmUser":{"name":"akanaka","email":"markprodesigner@gmail.com"},"_resolved":"/private/var/folders/p8/_qb_r0pd24qc5gzvcmppg41c0000gn/T/4216b53f9ee446a2403f7fa00e9616b0/akanaka-design-eslint-config-0.2.7.tgz","_integrity":"sha512-RUWfTUF+uEEtaKgkWdJs0v0DfCWtWhfkxPrrAzIX3/AchOB6WwZXUH+5dMr/ChND1dA/OQxDDyNMY4n1zQ9MEQ==","repository":{"url":"git+https://github.com/designfresh/akanaka-design-system.git","type":"git"},"_npmVersion":"11.8.0","description":"ESLint config for Akanaka Design System","directories":{},"_nodeVersion":"25.5.0","dependencies":{"@typescript-eslint/utils":"^8.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.0.0","vitest":"^2.0.0"},"peerDependencies":{"eslint":"^8.0.0 || ^9.0.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_0.2.7_1775326206946_0.29235284639421644","host":"s3://npm-registry-packages-npm-production"}},"0.2.8":{"name":"@akanaka-design/eslint-config","version":"0.2.8","keywords":["eslint","eslintconfig","design-system","akanaka","tailwind"],"license":"MIT","_id":"@akanaka-design/eslint-config@0.2.8","maintainers":[{"name":"akanaka","email":"markprodesigner@gmail.com"}],"homepage":"https://akanaka-design-system-docs.vercel.app","bugs":{"url":"https://github.com/designfresh/akanaka-design-system/issues"},"dist":{"shasum":"c5d111ac24659f02ee3c351580d1aea990e5bffe","tarball":"https://registry.npmjs.org/@akanaka-design/eslint-config/-/eslint-config-0.2.8.tgz","fileCount":10,"integrity":"sha512-si69FoJ6kABRmMC9b5PoGGSwxRxOki9P1q+CcLLnShgaR+3mm8zsEOizKzUPvBMoyeNRbLToiJyL2jDUPnqKLw==","signatures":[{"sig":"MEYCIQDH0/JAjP974QpKYwkF7+AWBAVisk0CMyLAzjQZ7QRfxAIhAMf5efT7JS51xHbTSEamJL568tK1+jXNkgsppgZGO1PP","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":40440},"main":"index.js","_from":"file:akanaka-design-eslint-config-0.2.8.tgz","scripts":{"lint":"eslint .","test":"vitest run","lint:fix":"eslint . --fix","test:watch":"vitest","test:regression":"node tests/prefer-ds-components-regression.runner.cjs && node tests/require-statcard-regression.runner.cjs && node tests/require-semantic-badge-regression.runner.cjs"},"_npmUser":{"name":"akanaka","email":"markprodesigner@gmail.com"},"_resolved":"/private/var/folders/p8/_qb_r0pd24qc5gzvcmppg41c0000gn/T/61a57c8f575af8c09ce84eacf884f2d2/akanaka-design-eslint-config-0.2.8.tgz","_integrity":"sha512-si69FoJ6kABRmMC9b5PoGGSwxRxOki9P1q+CcLLnShgaR+3mm8zsEOizKzUPvBMoyeNRbLToiJyL2jDUPnqKLw==","repository":{"url":"git+https://github.com/designfresh/akanaka-design-system.git","type":"git"},"_npmVersion":"11.8.0","description":"ESLint config for Akanaka Design System","directories":{},"_nodeVersion":"25.5.0","dependencies":{"@typescript-eslint/utils":"^8.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.0.0","vitest":"^2.0.0"},"peerDependencies":{"eslint":"^8.0.0 || ^9.0.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_0.2.8_1775327725184_0.6489971022483547","host":"s3://npm-registry-packages-npm-production"}},"0.2.9":{"name":"@akanaka-design/eslint-config","version":"0.2.9","keywords":["eslint","eslintconfig","design-system","akanaka","tailwind"],"license":"MIT","_id":"@akanaka-design/eslint-config@0.2.9","maintainers":[{"name":"akanaka","email":"markprodesigner@gmail.com"}],"homepage":"https://akanaka-design-system-docs.vercel.app","bugs":{"url":"https://github.com/designfresh/akanaka-design-system/issues"},"dist":{"shasum":"82f682a1631619ac18a68421232f2398d1506560","tarball":"https://registry.npmjs.org/@akanaka-design/eslint-config/-/eslint-config-0.2.9.tgz","fileCount":11,"integrity":"sha512-PbYov2w0UWnz4DdVdVvcEPg0b2sGfNJfqMMpL7iCwuWcU3sDDAk88yG4ICgV/UfJ7cw5QCbX+xLo318UjR0OPg==","signatures":[{"sig":"MEQCIGVZGbsA2xLT/dRFXs1ThEC5afd+L0ds6gjxz/24OM7MAiB5hy1kZMEimNvzX4MvLhyQb23Gp4Ag83VGIQ/7SoPFqA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":55468},"main":"index.js","_from":"file:akanaka-design-eslint-config-0.2.9.tgz","scripts":{"lint":"eslint .","test":"vitest run","lint:fix":"eslint . --fix","test:watch":"vitest","test:regression":"node tests/prefer-ds-components-regression.runner.cjs && node tests/require-statcard-regression.runner.cjs && node tests/require-semantic-badge-regression.runner.cjs && node tests/prefer-akanaka-tokens-regression.runner.cjs"},"_npmUser":{"name":"akanaka","email":"markprodesigner@gmail.com"},"_resolved":"/private/var/folders/p8/_qb_r0pd24qc5gzvcmppg41c0000gn/T/f15d289dbfca75db2715edbe0af5f605/akanaka-design-eslint-config-0.2.9.tgz","_integrity":"sha512-PbYov2w0UWnz4DdVdVvcEPg0b2sGfNJfqMMpL7iCwuWcU3sDDAk88yG4ICgV/UfJ7cw5QCbX+xLo318UjR0OPg==","repository":{"url":"git+https://github.com/designfresh/akanaka-design-system.git","type":"git"},"_npmVersion":"11.8.0","description":"ESLint config for Akanaka Design System","directories":{},"_nodeVersion":"25.5.0","dependencies":{"@typescript-eslint/utils":"^8.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.0.0","vitest":"^2.0.0"},"peerDependencies":{"eslint":"^8.0.0 || ^9.0.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_0.2.9_1775328447782_0.7086156257362264","host":"s3://npm-registry-packages-npm-production"}},"0.2.10":{"name":"@akanaka-design/eslint-config","version":"0.2.10","description":"ESLint config for Akanaka Design System","main":"index.js","keywords":["eslint","eslintconfig","design-system","akanaka","tailwind"],"license":"MIT","publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/designfresh/akanaka-design-system.git"},"bugs":{"url":"https://github.com/designfresh/akanaka-design-system/issues"},"homepage":"https://akanaka-design-system-docs.vercel.app","peerDependencies":{"eslint":"^8.0.0 || ^9.0.0"},"dependencies":{"@typescript-eslint/utils":"^8.0.0"},"devDependencies":{"eslint":"^9.0.0","vitest":"^2.0.0"},"scripts":{"lint":"eslint .","lint:fix":"eslint . --fix","test":"vitest run","test:watch":"vitest","test:regression":"node tests/prefer-ds-components-regression.runner.cjs && node tests/require-statcard-regression.runner.cjs && node tests/require-semantic-badge-regression.runner.cjs && node tests/prefer-akanaka-tokens-regression.runner.cjs"},"_id":"@akanaka-design/eslint-config@0.2.10","_integrity":"sha512-8s4mD+X9lg7dMQywvwkPwwh6DjfuPVk0rvZoPV2k6nHxyXUzHFnwHRuxx3+qZ6k3kZaf6wGz+O7pgIuTiYIB/g==","_resolved":"/private/var/folders/p8/_qb_r0pd24qc5gzvcmppg41c0000gn/T/fdbee822adf6d2ea33efb91ca79a7d61/akanaka-design-eslint-config-0.2.10.tgz","_from":"file:akanaka-design-eslint-config-0.2.10.tgz","_nodeVersion":"25.5.0","_npmVersion":"11.8.0","dist":{"integrity":"sha512-8s4mD+X9lg7dMQywvwkPwwh6DjfuPVk0rvZoPV2k6nHxyXUzHFnwHRuxx3+qZ6k3kZaf6wGz+O7pgIuTiYIB/g==","shasum":"e67d720c6a7d7ef1bb18929e8605e4ba686f0c31","tarball":"https://registry.npmjs.org/@akanaka-design/eslint-config/-/eslint-config-0.2.10.tgz","fileCount":11,"unpackedSize":56795,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIDP7jjjsqO/5XQpGcY++TCoeKf9Dzx3HQPzfUtgoUBS7AiB1k8gAuMzECtoQrjbUdYDVrSphykP7naKwAHU6/+vLNw=="}]},"_npmUser":{"name":"akanaka","email":"markprodesigner@gmail.com"},"directories":{},"maintainers":[{"name":"akanaka","email":"markprodesigner@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/eslint-config_0.2.10_1775329481411_0.42042172115976095"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-02T08:25:27.016Z","modified":"2026-04-04T19:04:41.701Z","0.2.2":"2026-04-02T08:25:27.238Z","0.2.3":"2026-04-02T10:11:46.534Z","0.2.5":"2026-04-04T09:42:23.064Z","0.2.6":"2026-04-04T10:01:57.316Z","0.2.7":"2026-04-04T18:10:07.130Z","0.2.8":"2026-04-04T18:35:25.343Z","0.2.9":"2026-04-04T18:47:27.927Z","0.2.10":"2026-04-04T19:04:41.551Z"},"bugs":{"url":"https://github.com/designfresh/akanaka-design-system/issues"},"license":"MIT","homepage":"https://akanaka-design-system-docs.vercel.app","keywords":["eslint","eslintconfig","design-system","akanaka","tailwind"],"repository":{"type":"git","url":"git+https://github.com/designfresh/akanaka-design-system.git"},"description":"ESLint config for Akanaka Design System","maintainers":[{"name":"akanaka","email":"markprodesigner@gmail.com"}],"readme":"# @akanaka-design/eslint-config\n\nESLint configuration for enforcing Akanaka Design System rules.\n\n**Documentation:** [akanaka-design-system-docs.vercel.app](https://akanaka-design-system-docs.vercel.app)  \n**Repository:** [github.com/designfresh/akanaka-design-system](https://github.com/designfresh/akanaka-design-system)\n\n## Features\n\n- 🎨 **Prevents hardcoded colors** - enforces design token usage\n- 🧩 **Validates component imports** - ensures components exist in registry\n- 🎯 **Smart suggestions** - suggests nearest valid token based on color similarity\n- ⚡ **Fast & lightweight** - zero runtime dependencies\n- 🔧 **Works everywhere** - Cursor, VS Code, CI/CD pipelines\n\n## Installation\n```bash\npnpm add -D @akanaka-design/eslint-config\n# or\nnpm install --save-dev @akanaka-design/eslint-config\n```\n\n## Usage\n\n### Basic Setup\n\nIn your `.eslintrc.js` or `.eslintrc.cjs`:\n```javascript\nmodule.exports = {\n  extends: ['@akanaka-design/eslint-config'],\n};\n```\n\n### With Next.js\n```javascript\nmodule.exports = {\n  extends: [\n    '@akanaka-design/eslint-config',\n    'next/core-web-vitals',\n  ],\n};\n```\n\n### With TypeScript\n```javascript\nmodule.exports = {\n  extends: [\n    '@akanaka-design/eslint-config',\n    'plugin:@typescript-eslint/recommended',\n  ],\n  parser: '@typescript-eslint/parser',\n};\n```\n\n## Rules\n\n### `akanaka/prefer-ds-components`\n\nEnforces DS-first dashboard composition in two ways:\n\n- Flags custom card-like dashboard `div` markup and recommends `Card` usage\n- Flags visual `className` overrides on DS components imported from `@akanaka-design/components`\n\n**Forbidden visual className patterns on DS components:**\n- Border styling: `border`, `border-*`\n- Radius: `rounded`, `rounded-*`\n- Colors: `bg-*`, `text-*` (except `text-left`, `text-center`, `text-right`)\n- Shadows: `shadow`, `shadow-*`\n- Typography: `font`, `font-*`\n\n**Allowed layout-oriented className patterns:**\n- Spacing/layout: `m-*`, `mt-*`, `mb-*`, `mx-*`, `my-*`, `flex`, `grid`, `justify-*`, `items-*`\n- Sizing/placement: `w-*`, `h-*`, `col-span-*`\n\n❌ **Bad:**\n```jsx\nimport { Card } from '@akanaka-design/components';\n\n<Card className=\"border-l-4 border-l-primary bg-primary-50\">\n  ...\n</Card>\n```\n\n✅ **Good:**\n```jsx\nimport { Card } from '@akanaka-design/components';\n\n<Card className=\"mt-4 col-span-2 w-full\">\n  ...\n</Card>\n```\n\n### `akanaka/require-statcard-for-metrics`\n\nDashboard-only (same path rules as `prefer-ds-components`): flags hand-built KPI tiles—`div` or `span` with background + rounded corners + padding that contain a small label line and a large numeric value line—and requires `StatCard` from `@akanaka-design/components` (documented on the [components site](https://akanaka-design-system-docs.vercel.app)) instead.\n\n❌ **Bad:**\n```jsx\n<div className=\"bg-[var(--primary)]/10 rounded-lg p-4\">\n  <p className=\"text-sm\">Total Staff</p>\n  <p className=\"text-2xl\">247</p>\n</div>\n```\n\n✅ **Good:**\n```jsx\nimport { StatCard } from '@akanaka-design/components';\n\n<StatCard label=\"Total Staff\" value={247} accent=\"primary\" />\n```\n\nThere is no autofix; replace the markup manually using `StatCard` props (`label`, `value`, `accent`, etc.).\n\n### `akanaka/require-semantic-badge-variants`\n\nScoped to dashboard pages (`**/dashboard/**`) and to files whose path contains `table` or `compliance` (same exemptions as other dashboard rules: report PDF routes and the app style guide page). Keeps status and compliance chips on the RAG semantic system instead of Shadcn layout variants.\n\n**`Badge` variants (Akanaka):** `default`, `primary`, `success`, `warning`, `error`, `info`. Use **`success` / `warning` / `error` / `info`** for state and compliance labels; avoid `secondary` and `accent` (not part of the DS API).\n\n❌ **Bad:**\n\n```jsx\n<Badge variant=\"secondary\">Compliant</Badge>\n<Badge variant=\"accent\">Warning</Badge>\n<Badge>Non-Compliant</Badge>\n<span className=\"bg-secondary\">In Progress</span>\n```\n\n✅ **Good:**\n\n```jsx\n<Badge variant=\"success\">Compliant</Badge>\n<Badge variant=\"warning\">Action Required</Badge>\n<Badge variant=\"error\">Non-Compliant</Badge>\n<Badge variant=\"warning\">In Progress</Badge>\n```\n\nThe rule uses static analysis: it suggests a variant from **static** label text when possible. Dynamic labels (e.g. `{row.status}`) still need an explicit semantic `variant` chosen in code.\n\n### `akanaka/no-hardcoded-colors`\n\nPrevents hardcoded color values. Enforces use of Akanaka design tokens.\n\n**Detects:**\n- Hex colors: `#E07A5F`, `#3B82F6`\n- RGB/RGBA: `rgb(224, 122, 95)`, `rgba(59, 130, 246, 0.5)`\n- HSL/HSLA: `hsl(12, 70%, 60%)`, `hsla(221, 83%, 53%, 0.8)`\n- Tailwind arbitrary values: `bg-[#E07A5F]`, `text-[rgb(59,130,246)]`\n- Inline styles: `style={{ color: 'red' }}`\n\n❌ **Bad:**\n```jsx\n// Hardcoded hex\n<div className=\"bg-[#E07A5F]\">Content</div>\n\n// Hardcoded RGB\n<div className=\"bg-[rgb(224,122,95)]\">Content</div>\n\n// Inline styles\n<button style={{ backgroundColor: '#3B82F6' }}>Click</button>\n```\n\n✅ **Good:**\n```jsx\n// Using design tokens\n<div className=\"bg-primary-500\">Content</div>\n<div className=\"bg-neutral-700 text-primary-500\">Content</div>\n<button className=\"bg-info\">Click</button>\n```\n\n**Smart Suggestions:**\n\nThe linter calculates color distance and suggests the nearest valid token:\n```jsx\n// Input: <div className=\"bg-[#E07A5F]\">\n// Error: Hardcoded color \"[#E07A5F]\". Use bg-primary-500 instead.\n\n// Input: <div className=\"bg-[#3B82F6]\">\n// Error: Hardcoded color \"[#3B82F6]\". Use bg-info instead.\n\n// Input: <div className=\"bg-[#44403C]\">\n// Error: Hardcoded color \"[#44403C]\". Use bg-neutral-700 instead.\n```\n\n### `akanaka/component-exists`\n\nEnsures imported components exist in the Akanaka component registry.\n\n❌ **Bad:**\n```jsx\nimport { SuperButton } from '@akanaka-design/components';\nimport { FancyCard } from '@akanaka-design/components';\n```\n\n✅ **Good:**\n```jsx\nimport { Button } from '@akanaka-design/components';\nimport { Card, CardTitle, CardContent } from '@akanaka-design/components';\n```\n\n**Error message includes available components:**\n```text\nComponent \"SuperButton\" does not exist in Akanaka.\nAvailable: Alert, Avatar, Badge, Button, Card...\n```\n\n## Available Tokens\n\n### Colors\n\n**Primary (Terracotta):**\n\n`primary-50`, `primary-100`, `primary-200`, `primary-500`, `primary-600`, `primary-700`\n\n**Neutrals (Warm Stone):**\n\n`neutral-50`, `neutral-100`, `neutral-200`, `neutral-300`, `neutral-500`, `neutral-700`, `neutral-900`\n\n**Semantic:**\n\n`success`, `warning`, `error`, `info`\n\n### Components\n\n`Alert`, `Avatar`, `Badge`, `Button`, `Card`, `CardTitle`, `CardDescription`, `CardContent`, `CardFooter`, `Checkbox`, `Input`, `Label`, `Progress`, `Select`, `StatCard`, `Table`, `Tabs`, `Toggle`\n\n## Integration with Cursor\n\nThis config works seamlessly with Cursor:\n\n1. Install the package: `pnpm add -D @akanaka-design/eslint-config`\n2. Create `.eslintrc.cjs` in your project root (see Usage above)\n3. Cursor automatically shows errors in real-time as you type\n\nTip: add `.cursorrules` to reinforce design system usage:\n\n```markdown\n# Akanaka Design System Rules\n\n- NEVER use hardcoded colors\n- ALWAYS use Tailwind classes with Akanaka tokens\n- ONLY import components from @akanaka-design/components\n```\n\n## CI/CD Integration\n\n### GitHub Actions\n\n```yaml\nname: Design System Compliance\n\non:\n  pull_request:\n    branches: [main]\n\njobs:\n  lint:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n      - uses: pnpm/action-setup@v2\n      - run: pnpm install\n      - run: pnpm lint\n```\n\n### Turbo (Monorepo)\n\nIf using Turborepo, add to `turbo.json`:\n\n```json\n{\n  \"tasks\": {\n    \"lint\": {\n      \"cache\": false,\n      \"outputs\": []\n    }\n  }\n}\n```\n\nThen run:\n\n```bash\npnpm turbo lint\n```\n\n## Development\n\n### Running Tests\n\n```bash\npnpm test          # Run once (includes DZI-29 regression runners via Vitest)\npnpm test:watch    # Watch mode\npnpm test:regression  # Only dashboard regression runners (StatCard, Badge, tokens, Card)\n```\n\n### DZI-29 regression fixtures\n\nThese guard the dashboard rules added for DZI-29 (AKA-56, AKA-57, AKA-58). Each **invalid** fixture under `tests/fixtures/regression/` is production-shaped JSX that must keep triggering the right rule. Runners lint it with a synthetic path under `**/dashboard/**` (or `table` / `compliance`) so file-scoped rules apply—if logic drifts and violations disappear, CI fails.\n\nThere are **three fixtures per rule** for `require-statcard-for-metrics`, `require-semantic-badge-variants`, and `prefer-akanaka-tokens-over-shadcn`, plus separate coverage for `prefer-ds-components`. Shared helper: `tests/regression-lint-harness.cjs`.\n\n**Adding a new regression file:** add `tests/fixtures/regression/dzi-29-<topic>.invalid.tsx`, append an entry to the relevant `tests/*-regression.runner.cjs` fixture list (with a plausible mock `page.tsx` path), and keep `messageIncludes` aligned with the rule’s current wording.\n\n### Test Coverage\n\n- Hex color detection\n- RGB/RGBA detection\n- HSL/HSLA detection\n- Tailwind arbitrary value detection\n- No double-reporting\n- Smart token suggestions\n- Component registry validation\n- Ignores non-Akanaka imports\n- Regression fixture for dashboard tokenized card divs (must fail `prefer-ds-components`)\n- DZI-29 regression: three fixtures each for StatCard, semantic `Badge`, and Shadcn→Akanaka token rules (dashboard paths)\n\n## Publishing\n\nPublish from package directory:\n\n```bash\npnpm publish --access public\n```\n\nPre-publish checklist:\n\n- `pnpm lint` passes\n- `pnpm test` passes\n- `CHANGELOG.md` updated for the release\n- `package.json` version bumped appropriately\n- `files` includes `README.md` and `CHANGELOG.md`\n\n## License\n\nMIT\n","readmeFilename":"README.md"}