{"_id":"@shadcn/lint","_rev":"7-b1382ca7f2915b60fa3f4e3114145cfb","name":"@shadcn/lint","dist-tags":{"latest":"0.2.0"},"versions":{"0.1.0":{"name":"@shadcn/lint","version":"0.1.0","keywords":["shadcn","lint","eslint","oxlint","tailwind","tailwindcss","design-system","cn"],"author":{"url":"https://twitter.com/shadcn","name":"shadcn"},"license":"MIT","_id":"@shadcn/lint@0.1.0","maintainers":[{"name":"shadcn","email":"m@shadcn.com"}],"homepage":"https://github.com/shadcn-ui/lint#readme","bugs":{"url":"https://github.com/shadcn-ui/lint/issues"},"dist":{"shasum":"71fdedc255ae1649d07a7c57fa7fd475258099e6","tarball":"https://registry.npmjs.org/@shadcn/lint/-/lint-0.1.0.tgz","fileCount":8,"integrity":"sha512-UDSxO4eQa8UAclN1tChum+L336CL2uB2ZLGYiJ7r/GDrYUBOKPWWNUVoAfh2dZs4LhcwJRCn62+fKG12eAy1FQ==","signatures":[{"sig":"MEYCIQDC4k4n6Jx6N4z5MjcAuzNSViCYinYGpOogV+AH9qRdvAIhAK0Fi91W1sZ2i0BTOI39DjPV3+8uCSk19iudtRTCbMPg","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":239704},"type":"module","_from":"file:shadcn-lint-0.1.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=20.19"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"scripts":{"test":"vitest run --config vitest.config.ts","build":"tsdown && node scripts/postbuild.mjs","typecheck":"tsc --noEmit"},"_npmUser":{"name":"shadcn","email":"m@shadcn.com"},"_resolved":"/private/var/folders/g5/v4_fbyys44b9vq9_cg3hsvf00000gn/T/a01abd0a0619faf8e55c3da885730fc2/shadcn-lint-0.1.0.tgz","_integrity":"sha512-UDSxO4eQa8UAclN1tChum+L336CL2uB2ZLGYiJ7r/GDrYUBOKPWWNUVoAfh2dZs4LhcwJRCn62+fKG12eAy1FQ==","repository":{"url":"git+https://github.com/shadcn-ui/lint.git","type":"git","directory":"packages/lint"},"_npmVersion":"11.16.0","description":"A programmable agent-first linter for Tailwind design systems.","directories":{},"sideEffects":["./dist/tailwind-worker.js"],"_nodeVersion":"24.18.0","dependencies":{"cn":"0.2.6","@eslint/core":"^0.17.0","@typescript-eslint/parser":"^8.40.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.33.0","oxlint":"^1.80.0","tsdown":"^0.12.0","vitest":"^3.2.6","typescript":"^5.9.2","@types/node":"^24.3.0","tailwindcss":"^4.3.3","tailwind-merge":"^3.6.0"},"peerDependencies":{"eslint":">=9.30.0"},"optionalDependencies":{"oxc-parser":"^0.148.0"},"peerDependenciesMeta":{"eslint":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/lint_0.1.0_1789386554137_0.3676321911370142","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@shadcn/lint","version":"0.1.1","keywords":["shadcn","lint","eslint","oxlint","tailwind","tailwindcss","design-system","cn"],"author":{"url":"https://twitter.com/shadcn","name":"shadcn"},"license":"MIT","_id":"@shadcn/lint@0.1.1","maintainers":[{"name":"shadcn","email":"m@shadcn.com"}],"homepage":"https://github.com/shadcn-ui/lint#readme","bugs":{"url":"https://github.com/shadcn-ui/lint/issues"},"dist":{"shasum":"d00863a74e3514793a873546e39216b29c993ad2","tarball":"https://registry.npmjs.org/@shadcn/lint/-/lint-0.1.1.tgz","fileCount":8,"integrity":"sha512-00FroeyOehwp18oWk6ybuGJDm5IMc7ywmEvCODIj2yjPISSzgx+fv/BB4V6nh/Wiwrw6XoRobk89d/T2Hc3QJg==","signatures":[{"sig":"MEUCIQD2WEbjISu52yuwdqu0eLqxl3kcMpttv/CkQNhDejxvIwIgMu0WEZP2H6eIXLNUdy5y0Z5IRlRQW2KcuXsrT9qcwTo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIELkUV6IUG6ERvwXDRGZL06/YfxuTfGVnan2DL872IaVAiEAnaaC5SqE9r9vH9GlsGYklReXTJavUmgU1geqTnV6XOU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@shadcn%2flint@0.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":248804},"type":"module","_from":"file:shadcn-lint-0.1.1.tgz","types":"./dist/index.d.ts","engines":{"node":">=20.19"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"scripts":{"test":"vitest run --config vitest.config.ts","build":"tsdown && node scripts/postbuild.mjs","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:35da9e2b-8b3d-4164-8430-778c34df458d"}},"_resolved":"/tmp/fa2f1d3c93e5133322315d24fef4c6df/shadcn-lint-0.1.1.tgz","_integrity":"sha512-00FroeyOehwp18oWk6ybuGJDm5IMc7ywmEvCODIj2yjPISSzgx+fv/BB4V6nh/Wiwrw6XoRobk89d/T2Hc3QJg==","repository":{"url":"git+https://github.com/shadcn-ui/lint.git","type":"git","directory":"packages/lint"},"_npmVersion":"11.19.1","description":"A programmable agent-first linter for Tailwind design systems.","directories":{},"sideEffects":["./dist/tailwind-worker.js"],"_nodeVersion":"24.20.0","dependencies":{"cn":"0.2.6","@eslint/core":"^0.17.0","@typescript-eslint/parser":"^8.40.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.33.0","oxlint":"^1.80.0","tsdown":"^0.12.0","vitest":"^3.2.6","typescript":"^5.9.2","@types/node":"^24.3.0","tailwindcss":"^4.3.3","tailwind-merge":"^3.6.0"},"peerDependencies":{"eslint":">=9.30.0"},"optionalDependencies":{"oxc-parser":"^0.148.0"},"peerDependenciesMeta":{"eslint":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/lint_0.1.1_1789663979788_0.4263828858933565","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@shadcn/lint","version":"0.1.2","keywords":["shadcn","lint","eslint","oxlint","tailwind","tailwindcss","design-system","cn"],"author":{"url":"https://twitter.com/shadcn","name":"shadcn"},"license":"MIT","_id":"@shadcn/lint@0.1.2","maintainers":[{"name":"shadcn","email":"m@shadcn.com"}],"homepage":"https://github.com/shadcn-ui/lint#readme","bugs":{"url":"https://github.com/shadcn-ui/lint/issues"},"dist":{"shasum":"18eb12459f9c5152fe81c6523916af1de2b29d24","tarball":"https://registry.npmjs.org/@shadcn/lint/-/lint-0.1.2.tgz","fileCount":8,"integrity":"sha512-7vXRuyPSRcdA0yCXUXFytREueliuKGYJc1hl2ul+btZnQ/XTAsISFh3oxX/+egYIRh/XQQFsbG5tEUOCwUJNzQ==","signatures":[{"sig":"MEYCIQCUhWeSypfepEH2iBRgkV/9GvjdZsZHDKaos0ERCAkCYwIhAKTqIWr2WkxUM030smoALnFCdRqg6oZGPRmSvwsZJ9B7","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDx6gtpredGQ1xZotcPk/m2r60M85UjhUGzhuZLf3DkcAIgF1hWn16/Q26aslb0hwrJ3ne5E3RrAvJ1h/flg70gxLM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@shadcn%2flint@0.1.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":252624},"type":"module","_from":"file:shadcn-lint-0.1.2.tgz","types":"./dist/index.d.ts","engines":{"node":">=20.19"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"scripts":{"test":"vitest run --config vitest.config.ts","build":"tsdown && node scripts/postbuild.mjs","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:35da9e2b-8b3d-4164-8430-778c34df458d"}},"_resolved":"/tmp/c94beaddaefb68d608416a9010f9999c/shadcn-lint-0.1.2.tgz","_integrity":"sha512-7vXRuyPSRcdA0yCXUXFytREueliuKGYJc1hl2ul+btZnQ/XTAsISFh3oxX/+egYIRh/XQQFsbG5tEUOCwUJNzQ==","repository":{"url":"git+https://github.com/shadcn-ui/lint.git","type":"git","directory":"packages/lint"},"_npmVersion":"11.19.1","description":"A programmable agent-first linter for Tailwind design systems.","directories":{},"sideEffects":["./dist/tailwind-worker.js"],"_nodeVersion":"24.20.0","dependencies":{"cn":"0.2.6","@eslint/core":"^0.17.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.33.0","oxlint":"^1.80.0","tsdown":"^0.12.0","vitest":"^3.2.6","typescript":"^5.9.2","@types/node":"^24.3.0","tailwindcss":"^4.3.3","tailwind-merge":"^3.6.0","@typescript-eslint/parser":"^8.40.0"},"peerDependencies":{"eslint":">=9.30.0","@typescript-eslint/parser":">=8.40.0"},"optionalDependencies":{"oxc-parser":"^0.148.0"},"peerDependenciesMeta":{"eslint":{"optional":true},"@typescript-eslint/parser":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/lint_0.1.2_1789927148670_0.1753050882067726","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@shadcn/lint","version":"0.1.3","keywords":["shadcn","lint","eslint","oxlint","tailwind","tailwindcss","design-system","cn"],"author":{"url":"https://twitter.com/shadcn","name":"shadcn"},"license":"MIT","_id":"@shadcn/lint@0.1.3","maintainers":[{"name":"shadcn","email":"m@shadcn.com"}],"homepage":"https://github.com/shadcn-ui/lint#readme","bugs":{"url":"https://github.com/shadcn-ui/lint/issues"},"dist":{"shasum":"3dba62bb9094a00466a24d2d72fc29abad98d51b","tarball":"https://registry.npmjs.org/@shadcn/lint/-/lint-0.1.3.tgz","fileCount":8,"integrity":"sha512-eRUt1NfIrmkqWq4CJxvHWNq2O6UH0qIpiFemgJmRucUx+qxisqhBJzsZbPH31x1UU7gczTB7T6p/tQt/cAQgiw==","signatures":[{"sig":"MEYCIQCoTEzYnbl+8e1y+FiVE3dcI5IshrLKul4vzF4c/jcaQAIhAIQiIRtbcFFAmzBNrzqiHov4n/nBe4wZCD9r0dfHjSRz","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIC3x7LKNPq0nwT+SAOWm92gRNO1JFAfQidcZiEnZ3Sm7AiAMZI1pgXV1KWeAtRVl0PSNuj/jaRrdBPpPJPpNFPYwTA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@shadcn%2flint@0.1.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":255623},"type":"module","_from":"file:shadcn-lint-0.1.3.tgz","types":"./dist/index.d.ts","engines":{"node":">=20.19"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"scripts":{"test":"vitest run --config vitest.config.ts","build":"tsdown && node scripts/postbuild.mjs","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:35da9e2b-8b3d-4164-8430-778c34df458d"}},"_resolved":"/tmp/1fb4f803e3ec3b762da5a059e94a9550/shadcn-lint-0.1.3.tgz","_integrity":"sha512-eRUt1NfIrmkqWq4CJxvHWNq2O6UH0qIpiFemgJmRucUx+qxisqhBJzsZbPH31x1UU7gczTB7T6p/tQt/cAQgiw==","repository":{"url":"git+https://github.com/shadcn-ui/lint.git","type":"git","directory":"packages/lint"},"_npmVersion":"11.19.1","description":"A programmable agent-first linter for Tailwind design systems.","directories":{},"sideEffects":["./dist/tailwind-worker.js"],"_nodeVersion":"24.20.0","dependencies":{"cn":"0.2.6","@eslint/core":"^0.17.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.33.0","oxlint":"^1.80.0","tsdown":"^0.12.0","vitest":"^3.2.6","typescript":"^5.9.2","@types/node":"^24.3.0","tailwindcss":"^4.3.3","tailwind-merge":"^3.6.0","@typescript-eslint/parser":"^8.40.0"},"peerDependencies":{"eslint":">=9.30.0","@typescript-eslint/parser":">=8.40.0"},"optionalDependencies":{"oxc-parser":"^0.148.0"},"peerDependenciesMeta":{"eslint":{"optional":true},"@typescript-eslint/parser":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/lint_0.1.3_1789928804173_0.8187352088380051","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@shadcn/lint","version":"0.1.4","keywords":["shadcn","lint","eslint","oxlint","tailwind","tailwindcss","design-system","cn"],"author":{"url":"https://twitter.com/shadcn","name":"shadcn"},"license":"MIT","_id":"@shadcn/lint@0.1.4","maintainers":[{"name":"shadcn","email":"m@shadcn.com"}],"homepage":"https://github.com/shadcn-ui/lint#readme","bugs":{"url":"https://github.com/shadcn-ui/lint/issues"},"dist":{"shasum":"a1d89eacfc79c78b89b98f464817194ed3958daa","tarball":"https://registry.npmjs.org/@shadcn/lint/-/lint-0.1.4.tgz","fileCount":8,"integrity":"sha512-ABhsdrQlL8IWwWgKsMh9KMZAkfOGOFpZE0TnJQyldarRCZ4wBVxdyZScSHqSwsIgW4muYj3u5WY3rU+H1mAxcg==","signatures":[{"sig":"MEUCIQDKerEjxbg3F1ci4DcxQMpJDC5RqnKy4bame64tvkITmQIgYHLCYPEXGRKOnCflrsqqy3Dmdz7wTmA56RoyYE3IO90=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQD/3bSMhAToGzHLt4vxmuoff5YP8TwDD/XuxJHAxV1KYwIhANqIgWF51CesmD9Jx+9bZ+49Tss7xwxtulzEZ6Wqc/fR","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@shadcn%2flint@0.1.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":256060},"type":"module","_from":"file:shadcn-lint-0.1.4.tgz","types":"./dist/index.d.ts","engines":{"node":">=20.19"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"scripts":{"test":"vitest run --config vitest.config.ts","build":"tsdown && node scripts/postbuild.mjs","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:35da9e2b-8b3d-4164-8430-778c34df458d"}},"_resolved":"/tmp/4c7f2a2a1eef7de0e8b7378f2ddbac37/shadcn-lint-0.1.4.tgz","_integrity":"sha512-ABhsdrQlL8IWwWgKsMh9KMZAkfOGOFpZE0TnJQyldarRCZ4wBVxdyZScSHqSwsIgW4muYj3u5WY3rU+H1mAxcg==","repository":{"url":"git+https://github.com/shadcn-ui/lint.git","type":"git","directory":"packages/lint"},"_npmVersion":"11.19.1","description":"A programmable agent-first linter for Tailwind design systems.","directories":{},"sideEffects":["./dist/tailwind-worker.js"],"_nodeVersion":"24.20.0","dependencies":{"cn":"0.2.6","@eslint/core":"^0.17.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.33.0","oxlint":"^1.80.0","tsdown":"^0.12.0","vitest":"^3.2.6","typescript":"^5.9.2","@types/node":"^24.3.0","tailwindcss":"^4.3.3","tailwind-merge":"^3.6.0","@typescript-eslint/parser":"^8.40.0"},"peerDependencies":{"eslint":">=9.30.0","@typescript-eslint/parser":">=8.40.0"},"optionalDependencies":{"oxc-parser":"^0.148.0"},"peerDependenciesMeta":{"eslint":{"optional":true},"@typescript-eslint/parser":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/lint_0.1.4_1789986887312_0.8117908522819464","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@shadcn/lint","version":"0.1.5","keywords":["shadcn","lint","eslint","oxlint","tailwind","tailwindcss","design-system","cn"],"author":{"url":"https://twitter.com/shadcn","name":"shadcn"},"license":"MIT","_id":"@shadcn/lint@0.1.5","maintainers":[{"name":"shadcn","email":"m@shadcn.com"}],"homepage":"https://github.com/shadcn-ui/lint#readme","bugs":{"url":"https://github.com/shadcn-ui/lint/issues"},"dist":{"shasum":"95b5e3e82e4c7d9212c706dc42c9920e74c849d6","tarball":"https://registry.npmjs.org/@shadcn/lint/-/lint-0.1.5.tgz","fileCount":8,"integrity":"sha512-EkKJfJqSrx8lHgsxw9m304//l2cc/bHLH1vjZz1KwPBEv5uU+TQY1UHuzs03+/FiydNtAb5NX9sW4VrV/udNfQ==","signatures":[{"sig":"MEUCIHVcGa2IGXEjZSRFKVcxEfZnG7T/vgT6wp85KkxFo6MZAiEA191Cw283PDOS0hbNSp89ByJBkVKJx2tRwYZ28QFjlz4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIHQNJ3NNg/rHff8FjS6+V33zG6EwZ++Rz6qodzhe/Wg3AiAQ3oJI/1qf7NsRDsKySqk4mfQ7L96aU3bJIwLkqpbRIA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@shadcn%2flint@0.1.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":256060},"type":"module","_from":"file:shadcn-lint-0.1.5.tgz","types":"./dist/index.d.ts","engines":{"node":">=20.19"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"scripts":{"test":"vitest run --config vitest.config.ts","build":"tsdown && node scripts/postbuild.mjs","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:35da9e2b-8b3d-4164-8430-778c34df458d"}},"_resolved":"/tmp/70b8d1c042b45c62283c87f33096e51e/shadcn-lint-0.1.5.tgz","_integrity":"sha512-EkKJfJqSrx8lHgsxw9m304//l2cc/bHLH1vjZz1KwPBEv5uU+TQY1UHuzs03+/FiydNtAb5NX9sW4VrV/udNfQ==","repository":{"url":"git+https://github.com/shadcn-ui/lint.git","type":"git","directory":"packages/lint"},"_npmVersion":"11.19.1","description":"A programmable agent-first linter for Tailwind design systems.","directories":{},"sideEffects":["./dist/tailwind-worker.js"],"_nodeVersion":"24.20.0","dependencies":{"cn":"0.3.2","@eslint/core":"^0.17.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.33.0","oxlint":"^1.80.0","tsdown":"^0.12.0","vitest":"^3.2.6","typescript":"^5.9.2","@types/node":"^24.3.0","tailwindcss":"^4.3.3","tailwind-merge":"^3.6.0","@typescript-eslint/parser":"^8.40.0"},"peerDependencies":{"eslint":">=9.30.0","@typescript-eslint/parser":">=8.40.0"},"optionalDependencies":{"oxc-parser":"^0.148.0"},"peerDependenciesMeta":{"eslint":{"optional":true},"@typescript-eslint/parser":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/lint_0.1.5_1789991048813_0.47470239796599123","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"_id":"@shadcn/lint@0.2.0","bugs":{"url":"https://github.com/shadcn-ui/lint/issues"},"dist":{"shasum":"b930b8a9bef5412fba56228b21ca281a37841c6a","tarball":"https://registry.npmjs.org/@shadcn/lint/-/lint-0.2.0.tgz","fileCount":8,"integrity":"sha512-DTYr427BR8cDc0J0Y++u1Uh12NAYGmdPiqgy4wKSogi7RNEhFanIcfBMPRPUvkunt9QiJUfI7B28TW39MrPCFA==","signatures":[{"sig":"MEQCIBfZbD9Jho46b3T7mSS0W4GX25Cso9iI1gjTQjWeRBhDAiAfRWliKcikMgeId1j+tMEvKWf0EvP2SM7EDs6O9vyXag==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDUfiGrT5743KnUZR33ZieNd9Wvy4o+37v1lR63IoOA/wIhAJnYPXsS15hwrGeRkjM8+hqyMAF4xIddoW/lSXybg5qZ"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@shadcn%2flint@0.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":283401},"name":"@shadcn/lint","type":"module","_from":"file:shadcn-lint-0.2.0.tgz","types":"./dist/index.d.ts","author":{"url":"https://twitter.com/shadcn","name":"shadcn"},"engines":{"node":">=20.19"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"license":"MIT","scripts":{"test":"vitest run --config vitest.config.ts","build":"tsdown && node scripts/postbuild.mjs","typecheck":"tsc --noEmit"},"version":"0.2.0","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:35da9e2b-8b3d-4164-8430-778c34df458d"}},"homepage":"https://github.com/shadcn-ui/lint#readme","keywords":["shadcn","lint","eslint","oxlint","tailwind","tailwindcss","design-system","cn"],"_resolved":"/tmp/ff917b37ec48305d323edacc3d90b5f6/shadcn-lint-0.2.0.tgz","_integrity":"sha512-DTYr427BR8cDc0J0Y++u1Uh12NAYGmdPiqgy4wKSogi7RNEhFanIcfBMPRPUvkunt9QiJUfI7B28TW39MrPCFA==","repository":{"url":"git+https://github.com/shadcn-ui/lint.git","type":"git","directory":"packages/lint"},"_npmVersion":"11.19.1","description":"A programmable agent-first linter for Tailwind design systems.","directories":{},"maintainers":[{"name":"shadcn","email":"m@shadcn.com"}],"sideEffects":["./dist/tailwind-worker.js"],"_nodeVersion":"24.20.0","dependencies":{"cn":"0.3.2","@eslint/core":"^0.17.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.33.0","oxlint":"^1.80.0","svelte":"^5.57.1","tsdown":"^0.12.0","vitest":"^3.2.6","typescript":"^5.9.2","@types/node":"^24.3.0","tailwindcss":"^4.3.3","tailwind-merge":"^3.6.0","vue-eslint-parser":"^10.4.1","svelte-eslint-parser":"^1.8.1","@typescript-eslint/parser":"^8.40.0"},"peerDependencies":{"eslint":">=9.30.0","@typescript-eslint/parser":">=8.40.0"},"optionalDependencies":{"oxc-parser":"^0.148.0"},"peerDependenciesMeta":{"eslint":{"optional":true},"@typescript-eslint/parser":{"optional":true}},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/lint_0.2.0_1790074939049_0.7344780327727611"}}},"time":{"created":"2026-09-14T11:49:13.971Z","modified":"2026-09-22T11:02:19.492Z","0.1.0":"2026-09-14T11:49:14.265Z","0.1.1":"2026-09-17T16:52:59.870Z","0.1.2":"2026-09-20T17:59:08.763Z","0.1.3":"2026-09-20T18:26:44.252Z","0.1.4":"2026-09-21T10:34:47.466Z","0.1.5":"2026-09-21T11:44:08.893Z","0.2.0":"2026-09-22T11:02:19.149Z"},"bugs":{"url":"https://github.com/shadcn-ui/lint/issues"},"author":{"url":"https://twitter.com/shadcn","name":"shadcn"},"license":"MIT","homepage":"https://github.com/shadcn-ui/lint#readme","keywords":["shadcn","lint","eslint","oxlint","tailwind","tailwindcss","design-system","cn"],"repository":{"url":"git+https://github.com/shadcn-ui/lint.git","type":"git","directory":"packages/lint"},"description":"A programmable agent-first linter for Tailwind design systems.","maintainers":[{"name":"shadcn","email":"m@shadcn.com"}],"readme":"# @shadcn/lint\n\n**Write design system rules that agents can verify.**\n\n<img src=\"https://raw.githubusercontent.com/shadcn-ui/lint/main/docs/assets/cover.png\" width=\"2000\" height=\"832\" alt=\"A lint diagnostic explains why padding is not allowed on Button and suggests using an existing size.\" />\n\n`@shadcn/lint` is an [agent-first linter](#built-for-agents) for Tailwind design systems.\n\nYou define what’s allowed. When an agent breaks a rule, the error explains what’s wrong and suggests a fix based on your components, variants, and theme.\n\n**Works with your existing design system. No rewrite required.**\n\n`@shadcn/lint` works with Tailwind v4 projects (**shadcn/ui not required**). Available for both **ESLint and Oxlint**. Works with **React, Svelte, and Vue**.\n\n## Table of contents\n\n- [Quickstart](#quickstart)\n- [TypeScript vs @shadcn/lint](#typescript-vs-shadcnlint)\n- [Built for agents](#built-for-agents)\n- [Get started](#get-started)\n- [Rules](#rules)\n- [Frameworks](#frameworks)\n- [Configuration](#settings)\n\n## Quickstart\n\nGive your coding agent this prompt:\n\n```text\nRead https://github.com/shadcn-ui/lint/blob/main/SETUP.md\nand set up @shadcn/lint in this project.\n```\n\nOnce installed, [choose your rules](#rules) and configure what’s allowed\nin your design system.\n\nPrefer to configure it yourself? See [Get started](#get-started).\n\n## TypeScript vs @shadcn/lint\n\nTake a Button that allows margin and width, but controls its own padding.\nYou can enforce that with types by limiting its `style` prop to\n`Pick<React.CSSProperties, \"margin\" | \"width\">`.\n\n```tsx\n<Button style={{ padding: 16 }}>Submit</Button>\n```\n\n```text\nTS2353: Object literal may only specify known properties, and 'padding' does not exist in type 'Pick<CSSProperties, \"margin\" | \"width\">'.\n```\n\nThe rule works. But this error only tells the agent that padding is not\nallowed. It doesn’t tell it how to size the Button.\n\nWith `@shadcn/lint`, the same rule comes with **guidance from your design\nsystem**:\n\n```tsx\n<Button className=\"p-4\">Submit</Button>\n```\n\n```text\n\"p-4\" is not allowed on <Button>: <Button> owns its spacing.\nUse a size (sm, lg), or margin here or gap on the parent for space around it.\nAdd a size in components/ui/button.tsx only if the design explicitly calls for one.\n```\n\n### You decide what can change\n\nExpressing these policies in TypeScript can take complex types. With\n`@shadcn/lint`, you configure them without changing your component API.\n\nHere are some examples.\n\n**Allow spacing with margin. Allow full width. Keep size and shape in the Button.**\n\n```js\n\"shadcn/no-restyle\": [\"error\", {\n  allow: [\"layout\"],\n  contracts: [\n    { pattern: \"^Button$\", allow: [\"w-full\", \"mt-*\", \"mb-*\"] },\n  ],\n}]\n```\n\n```tsx\n// Allowed: use a size and let the page control placement and full width.\n<Button size=\"lg\" className=\"mt-4 md:w-full\" />\n\n// Error: you are not allowed to change padding and shape.\n<Button className=\"p-4 hover:rounded-full\" />\n\n// Error: you are not allowed to set a custom height or fixed width.\n<Button className=\"md:h-12 w-48\" />\n```\n\n**Give each part of a component its own rules.**\n\nLet Card titles change typography, but keep their font family and weight.\nLet Card content change spacing, but keep its typography.\n\n```js\n\"shadcn/no-restyle\": [\"error\", {\n  allow: [\"layout\"],\n  contracts: [\n    {\n      pattern: \"^CardTitle$\",\n      allow: [\"layout\", \"typography\"],\n      deny: [\"font-*\"],\n    },\n    { pattern: \"^CardContent$\", allow: [\"layout\", \"spacing\"] },\n  ],\n}]\n```\n\n```tsx\n// Allowed: titles can change text size; content can change padding.\n<CardTitle className=\"text-lg\" />\n<CardContent className=\"p-6\" />\n\n// Error: you are not allowed to change the title’s font weight.\n<CardTitle className=\"md:font-bold\" />\n\n// Error: you are not allowed to change the content’s typography.\n<CardContent className=\"text-lg\" />\n```\n\n**Allow spacing changes. Require theme values.**\n\nOpening up spacing doesn’t have to mean allowing arbitrary values.\nCombine rules to let Card content change padding while keeping it on your\ntheme’s spacing scale.\n\n```js\n\"shadcn/no-restyle\": [\"error\", {\n  allow: [\"layout\"],\n  contracts: [\n    { pattern: \"^CardContent$\", allow: [\"layout\", \"spacing\"] },\n  ],\n}],\n\"shadcn/no-arbitrary-values\": \"error\",\n```\n\n```tsx\n// Allowed: padding uses the theme’s spacing scale.\n<CardContent className=\"p-6 md:p-8\" />\n\n// Error: you are not allowed to use an arbitrary padding value.\n<CardContent className=\"md:p-[13px]\" />\n```\n\nBoth approaches enforce the rule. With `@shadcn/lint`, the agent also sees\nhow to fix the code using what’s already in your design system.\n\n## Built for agents\n\nWe built `@shadcn/lint` for agents that write UI. The errors tell them\nwhat broke, what to use instead, and where to find it. Suggestions come from your components, variants, and theme.\n\nYou can add\n[custom messages](#custom-messages) and [contracts](#contracts) so agents\nget your design system’s instructions with the error.\n\n### It works\n\nWe tested these rules with coding agents across more than 150 task runs. Almost every task reached zero violations in one correction round.\n\nHere are the errors before and after lint feedback in one run per model:\n\n| Model         | Completed tasks | Errors before | Errors after |\n| ------------- | --------------: | ------------: | -----------: |\n| Sonnet 5      |             8/8 |            69 |            0 |\n| Haiku 4.5     |             8/8 |            66 |            0 |\n| Opus 5        |             8/8 |            42 |            0 |\n| GPT 5.6 Terra |             8/8 |           117 |            0 |\n| GPT 5.6 Sol   |             6/8 |            98 |            0 |\n\n### It is cheaper\n\nIn the Claude control runs, fixing violations with lint feedback cost\n**10% to 48% less** than with rules alone.\n\nSee the [evals](https://github.com/shadcn-ui/lint/blob/main/docs/evals.md) for results and methodology.\n\n## Why a linter?\n\nA linter is [programmable](#programmable). You can write rules for your design system\nwithout changing your components.\n\nYou define what’s allowed and what to use instead. Agents run your lint\ncommand to check their work.\n\n- **Ship the same components with different rules.** Each project can\n  define its own contracts without changing the component code.\n- **Use components you don’t own.** Apply rules to components from\n  third-party packages. No forks. No wrappers.\n- **Share rules across projects.** Keep a shared configuration for your\n  design system and let projects add their own rules.\n\nYour components stay flexible. You decide how they should be used.\n\n## Programmable\n\n### Custom messages\n\nYou can write custom error messages that tell agents what to do.\n\n```js\n\"shadcn/no-restyle\": [\"error\", {\n  allow: [\"layout\"],\n  message: {\n    spacing: \"Use the size prop instead of padding.\",\n  },\n}]\n```\n\nWhen an agent writes:\n\n```tsx\n<Button className=\"p-4\">Save changes</Button>\n```\n\nIt sees:\n\n```text\nUse the size prop instead of padding.\n```\n\n### Placeholders\n\nUse your component’s sizes, variants, and file paths in error messages.\nFor spacing errors, `{{sizes}}` lists the available sizes:\n\n```js\n\"shadcn/no-restyle\": [\"error\", {\n  allow: [\"layout\"],\n  message: {\n    spacing: \"Use a {{component}} size: {{sizes}}.\",\n  },\n}]\n```\n\nFor a Button with `sm` and `lg` sizes, the error becomes:\n\n```text\nUse a Button size: sm, lg.\n```\n\nYou can also tell agents where to find theme colors. For example, in\n`no-raw-colors`:\n\n```js\nmessage: \"Use a theme color from {{file}}.\"\n```\n\nIf your theme is in `src/index.css`, the error becomes:\n\n```text\nUse a theme color from src/index.css.\n```\n\nSee all [message placeholders](https://github.com/shadcn-ui/lint/blob/main/docs/rules.md#your-own-words).\n\n### Contracts\n\nGive each component its own rules. For example, let pages change a card\ntitle's typography:\n\n```js\n\"shadcn/no-restyle\": [\"error\", {\n  allow: [\"layout\"],\n  contracts: [\n    { pattern: \"^CardTitle$\", allow: [\"layout\", \"typography\"] },\n  ],\n}]\n```\n\n```tsx\n// Allowed by the contract.\n<CardTitle className=\"text-sm\">Account settings</CardTitle>\n\n// Reported: the contract does not allow color overrides.\n<CardTitle className=\"text-pink-500\">Account settings</CardTitle>\n```\n\nSee [contracts and custom messages](https://github.com/shadcn-ui/lint/blob/main/docs/design-systems.md).\n\n## Get started\n\nRequires Node.js 20.19 or later and a version supported by your linter.\n\n### React\n\n#### ESLint\n\nRequires ESLint 9.30 or later.\n\n```bash\nnpm install -D @shadcn/lint eslint @typescript-eslint/parser\n```\n\nCreate `eslint.config.mjs`. If your framework already configures ESLint,\nkeep its parser setup and add the plugin, rule, and component override.\n\n```js\nimport { plugin as shadcn } from \"@shadcn/lint\"\nimport tsParser from \"@typescript-eslint/parser\"\nimport { defineConfig } from \"eslint/config\"\n\nexport default defineConfig([\n  {\n    files: [\"**/*.{js,jsx,ts,tsx}\"],\n    languageOptions: {\n      parser: tsParser,\n      parserOptions: { ecmaFeatures: { jsx: true } },\n    },\n    plugins: { shadcn },\n    rules: {\n      \"shadcn/no-arbitrary-values\": \"error\",\n    },\n  },\n])\n```\n\n```bash\nnpx eslint .\n```\n\n#### Oxlint\n\nRequires Oxlint 1.80 or later.\n\n```bash\nnpm install -D @shadcn/lint oxlint\n```\n\nCreate `.oxlintrc.json`:\n\n```json\n{\n  \"jsPlugins\": [\"@shadcn/lint\"],\n  \"rules\": {\n    \"shadcn/no-arbitrary-values\": \"error\"\n  }\n}\n```\n\n```bash\nnpx oxlint\n```\n\n### Vue\n\n#### ESLint\n\nRequires ESLint 9.30 or later.\n\n```bash\nnpm install -D @shadcn/lint eslint @typescript-eslint/parser vue-eslint-parser\n```\n\nCreate `eslint.config.mjs`. If you already use `eslint-plugin-vue`, keep\nits parser setup and add the plugin and rule to that block.\n\n```js\nimport { plugin as shadcn } from \"@shadcn/lint\"\nimport tsParser from \"@typescript-eslint/parser\"\nimport { defineConfig } from \"eslint/config\"\nimport vueParser from \"vue-eslint-parser\"\n\nexport default defineConfig([\n  {\n    files: [\"**/*.vue\"],\n    languageOptions: {\n      parser: vueParser,\n      parserOptions: { parser: tsParser },\n    },\n    plugins: { shadcn },\n    rules: {\n      \"shadcn/no-arbitrary-values\": \"error\",\n    },\n  },\n])\n```\n\n```bash\nnpx eslint .\n```\n\n#### Oxlint\n\nRequires Oxlint 1.80 or later. Oxlint reads the `<script>` blocks of\n`.vue` files, not the template. See [the Oxlint limitation](https://github.com/shadcn-ui/lint/blob/main/docs/vue.md#oxlint).\n\n```bash\nnpm install -D @shadcn/lint oxlint\n```\n\nCreate `.oxlintrc.json`:\n\n```json\n{\n  \"jsPlugins\": [\"@shadcn/lint\"],\n  \"rules\": {\n    \"shadcn/no-arbitrary-values\": \"error\"\n  }\n}\n```\n\n```bash\nnpx oxlint\n```\n\n### Svelte\n\n#### ESLint\n\nRequires ESLint 9.30 or later.\n\n```bash\nnpm install -D @shadcn/lint eslint @typescript-eslint/parser svelte-eslint-parser\n```\n\nCreate `eslint.config.mjs`. If you already use `eslint-plugin-svelte`,\nkeep its parser setup and add the plugin and rule to that block.\n\n```js\nimport { plugin as shadcn } from \"@shadcn/lint\"\nimport tsParser from \"@typescript-eslint/parser\"\nimport { defineConfig } from \"eslint/config\"\nimport svelteParser from \"svelte-eslint-parser\"\n\nexport default defineConfig([\n  {\n    files: [\"**/*.svelte\"],\n    languageOptions: {\n      parser: svelteParser,\n      parserOptions: { parser: tsParser },\n    },\n    plugins: { shadcn },\n    rules: {\n      \"shadcn/no-arbitrary-values\": \"error\",\n    },\n  },\n])\n```\n\n```bash\nnpx eslint .\n```\n\n#### Oxlint\n\nRequires Oxlint 1.80 or later. Oxlint reads the `<script>` blocks of\n`.svelte` files, not the markup. See [the Oxlint limitation](https://github.com/shadcn-ui/lint/blob/main/docs/svelte.md#oxlint).\n\n```bash\nnpm install -D @shadcn/lint oxlint\n```\n\nCreate `.oxlintrc.json`:\n\n```json\n{\n  \"jsPlugins\": [\"@shadcn/lint\"],\n  \"rules\": {\n    \"shadcn/no-arbitrary-values\": \"error\"\n  }\n}\n```\n\n```bash\nnpx oxlint\n```\n\n### After setup\n\nAdd your chosen command (`eslint .` or `oxlint`) as the `lint` script in\n`package.json`. Then put this in `AGENTS.md`:\n\n```md\nAfter making changes, run `npm run lint` and fix all errors.\n```\n\nEach framework has its own page with the full setup and what is read:\n[React](https://github.com/shadcn-ui/lint/blob/main/docs/react.md),\n[Vue](https://github.com/shadcn-ui/lint/blob/main/docs/vue.md),\n[Svelte](https://github.com/shadcn-ui/lint/blob/main/docs/svelte.md).\n\n## Rules\n\nWe developed these rules by studying production design systems and testing\nthem with coding agents. They’re built for Tailwind, with errors that help\nagents follow your design system.\n\n| Rule                                                                                                         | What it catches                                                        |\n| ------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------- |\n| [`no-restyle`](https://github.com/shadcn-ui/lint/blob/main/docs/rules/no-restyle.md)                         | Restyling a component with `className`.                                |\n| [`no-raw-colors`](https://github.com/shadcn-ui/lint/blob/main/docs/rules/no-raw-colors.md)                   | Raw colors such as `bg-pink-500`.                                      |\n| [`no-arbitrary-values`](https://github.com/shadcn-ui/lint/blob/main/docs/rules/no-arbitrary-values.md)       | Arbitrary values such as `p-[13px]`.                                   |\n| [`no-inline-styles`](https://github.com/shadcn-ui/lint/blob/main/docs/rules/no-inline-styles.md)             | Inline styles and `<style>` elements.                                  |\n| [`no-unknown-classes`](https://github.com/shadcn-ui/lint/blob/main/docs/rules/no-unknown-classes.md)         | Classes Tailwind cannot generate, such as `rounded-huge`.              |\n| [`require-static-classes`](https://github.com/shadcn-ui/lint/blob/main/docs/rules/require-static-classes.md) | Component classes the linter cannot read, such as `` `bg-${color}` ``. |\n\nSee [rule options](https://github.com/shadcn-ui/lint/blob/main/docs/rules.md) and [how to add more rules](https://github.com/shadcn-ui/lint/blob/main/docs/adoption.md#add-more-rules).\n\n## Frameworks\n\nThe same rules, options, contracts, and messages run on React, Vue, and Svelte. See also [Vue](#vue) and [Svelte](#svelte) docs.\n\n| Feature                               | React (JSX)                 | Vue                                                       | Svelte                                  |\n| ------------------------------------- | --------------------------- | --------------------------------------------------------- | --------------------------------------- |\n| Static class string                   | `className=\"p-4\"`           | `class=\"p-4\"`                                             | `class=\"p-4\"`                           |\n| Expression class                      | `className={...}`           | `:class=\"...\"`                                            | `class={...}`                           |\n| Text and expression mixed             | template literal            | `class` + `:class` on one element                         | `class=\"p-4 {expr}\"`                    |\n| Arrays and objects (`clsx` shape)     | yes                         | `:class=\"[...]\"`, `:class=\"{...}\"`                        | `class={[...]}`, `class={{...}}`        |\n| Helper calls (`cn`, `cva`, `tv`, ...) | yes                         | yes, in script and template                               | yes, in script and template             |\n| One-hop variable resolution           | yes                         | yes, template to `<script setup>`                         | yes                                     |\n| Spread with a class                   | `{...{ className }}`        | `v-bind=\"{ class }\"`                                      | `{...{ class }}`                        |\n| Class directive                       | n/a                         | n/a                                                       | `class:name={cond}`                     |\n| Style as CSS text                     | no, JSX has no string style | `style=\"color: red\"`                                      | `style=\"color: red\"`                    |\n| Style object                          | `style={{ ... }}`           | `:style=\"{ ... }\"`                                        | n/a                                     |\n| Style directive                       | n/a                         | n/a                                                       | `style:prop={value}`                    |\n| `<style>` element or block            | reported                    | not read                                                  | not read                                |\n| SVG color attributes                  | `fill`, `stroke`, ...       | same                                                      | same                                    |\n| Component identity                    | export name                 | file name, `<CardTitle>` or `<card-title>`                | file name, `<Card.Title>` or `<Title>`  |\n| Contracts                             | by component name           | same names as React                                       | same names as React                     |\n| Variants from `cva` / `tv`            | component file              | component file, or the barrel beside it                   | component file, incl. `<script module>` |\n| Variants from typed props             | yes                         | no                                                        | no                                      |\n| Received class prop accepted          | `className` param           | `props.class` from `defineProps()`                        | `class` from `$props()`                 |\n| Wrappers across files                 | `className` forwarding      | `props.class`, `v-bind=\"$attrs\"`, single-root fallthrough | `className` and `{...rest}` forwarding  |\n| Base UI `render` prop                 | yes                         | n/a                                                       | n/a                                     |\n| Dynamic element                       | `<Comp>` from a variable    | `<component :is>`                                         | `<svelte:element>`                      |\n| Suggestions rewrite source            | yes                         | yes                                                       | yes                                     |\n| `require-static-classes`              | yes                         | yes                                                       | yes                                     |\n| `no-unknown-classes`                  | yes                         | yes                                                       | yes                                     |\n| Project without `components.json`     | yes, `componentImports`     | yes, `componentImports`                                   | yes, `componentImports`                 |\n| ESLint                                | yes                         | yes, `vue-eslint-parser`                                  | yes, `svelte-eslint-parser`             |\n| Oxlint                                | yes                         | script blocks only, warns once                            | script blocks only, warns once          |\n\nDynamic elements get the token rules but not `no-restyle`. `<style>` blocks in `.vue` and `.svelte` files are plain CSS; use a CSS linter for them.\n\n## Settings\n\nUse `settings.shadcn` to configure component imports, class functions,\nand guidance shared across rules.\n\n**You don’t need shadcn/ui to use `@shadcn/lint`. It works with your own\nTailwind components and theme.**\n\nshadcn/ui projects get automatic component and theme discovery via\n`components.json`.\n\nFor a custom setup, add `settings` at the root of `.oxlintrc.json`.\nInclude only the settings you need:\n\n```json\n{\n  \"settings\": {\n    \"shadcn\": {\n      \"ui\": \"@/ds\",\n      \"componentImports\": [\"^@acme/ui(/|$)\"],\n      \"ignoreImports\": [\"^@acme/ui/internal(/|$)\"],\n      \"mergeFunctions\": [\"customMerge\"],\n      \"variantFunctions\": [\"variants\"],\n      \"note\": \"See DESIGN.md for design rules and approved exceptions.\"\n    }\n  }\n}\n```\n\nFor ESLint, add the same `settings` object to the config object containing\nyour rules.\n\n| Setting            | What it does                                                                                              |\n| ------------------ | --------------------------------------------------------------------------------------------------------- |\n| `ui`               | Recognizes component imports by prefix. `@/ds` matches `@/ds` and `@/ds/button`, but not `@/dsx`.         |\n| `componentImports` | Recognizes component imports using regex patterns. Use it for additional directories or packages.         |\n| `ignoreImports`    | Skips component recognition for imports matching these regex patterns. Takes precedence over recognition. |\n| `mergeFunctions`   | Adds functions whose arguments contain classes, such as `customMerge(\"mt-4\", \"w-full\")`.                  |\n| `variantFunctions` | Adds functions whose object values contain classes.                                                       |\n| `note`             | Appends your text to every rule's error or warning.                                                       |\n\nAll settings except `note` accept a string or an array of strings.\n`note` accepts a string.\n\nThe built-in class functions are `cn`, `cx`, `clsx`, `cva`, `tv`,\n`twMerge`, `twJoin`, and `classNames`. The built-in variant functions\nare `cva` and `tv`. Your function lists add to these defaults.\n\nA recognition option set on a rule overrides its shared setting.\n`ui` prefixes always apply alongside `componentImports`. Recognition\nsettings do not apply to `no-inline-styles`; `note` applies to every rule.\n\nWhen you change the component directory, update the setup's directory\noverride too, for example `src/ds/**`.\nSee [rule options](https://github.com/shadcn-ui/lint/blob/main/docs/rules.md#recognition) for more examples.\n\n### Monorepos\n\nUse your workspace package's import prefix for shared components.\nFor a UI package in `packages/ui`, add this to the root `.oxlintrc.json`:\n\n```json\n{\n  \"jsPlugins\": [\"@shadcn/lint\"],\n  \"settings\": {\n    \"shadcn\": {\n      \"ui\": \"@workspace/ui/components\"\n    }\n  },\n  \"rules\": {\n    \"shadcn/no-restyle\": [\"error\", { \"allow\": [\"layout\"] }]\n  },\n  \"overrides\": [\n    {\n      \"files\": [\"packages/ui/src/components/**\"],\n      \"rules\": { \"shadcn/no-restyle\": \"off\" }\n    }\n  ]\n}\n```\n\nApps can use the shared components:\n\n```tsx\nimport { Button } from \"@workspace/ui/components/button\"\n\nexport function SaveButton() {\n  return <Button className=\"w-full\">Save changes</Button>\n}\n```\n\nFor ESLint, use the same `settings` and `rules` in the setup above, and\nchange the component-directory override to `packages/ui/src/components/**`.\nThese paths assume your lint config is at the workspace root.\n\nThe linter resolves components through your apps' TypeScript paths and\npackage exports. If each app's `components.json` already points to the\nshared UI package, you can omit `settings.shadcn.ui`. Each app keeps its\nown theme configuration.\n\n## Documentation\n\nSee the [documentation](https://github.com/shadcn-ui/lint/blob/main/docs/README.md) for rule examples, configuration,\ntroubleshooting, and evals.\n\n## Contributing\n\nPlease read the [contributing guide](https://github.com/shadcn-ui/lint/blob/main/CONTRIBUTING.md).\n\n## License\n\nLicensed under the [MIT license](https://github.com/shadcn-ui/lint/blob/main/LICENSE.md).\n","readmeFilename":"README.md"}