{"_id":"@build0.ai/eslint-rules","name":"@build0.ai/eslint-rules","dist-tags":{"latest":"1.0.0"},"versions":{"1.0.0":{"name":"@build0.ai/eslint-rules","version":"1.0.0","description":"Shared ESLint rules for Build0 projects","main":"index.js","keywords":["eslint","eslint-plugin","react","radix-ui","select","rules"],"author":{"name":"Build0 Team"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/build0-ai/eslint-rules.git"},"bugs":{"url":"https://github.com/build0-ai/eslint-rules/issues"},"homepage":"https://github.com/build0-ai/eslint-rules#readme","peerDependencies":{"eslint":">=8.0.0"},"engines":{"node":">=18.0.0"},"publishConfig":{"access":"public"},"_id":"@build0.ai/eslint-rules@1.0.0","gitHead":"19b738855b0edd739ec9c6220b8eca241d3ebfd2","_nodeVersion":"22.14.0","_npmVersion":"10.9.2","dist":{"integrity":"sha512-Hvffm0J3Cb7SVOOBEw3SGus7FGOA0/l2K0EjBLd1q+k+d2AULDybzxFdYjAH1zktzPKGdMxUnBYW0Vy8SZbxVA==","shasum":"ed6512e7c8933d32e74198ad85d69218fdd26c80","tarball":"https://registry.npmjs.org/@build0.ai/eslint-rules/-/eslint-rules-1.0.0.tgz","fileCount":4,"unpackedSize":6447,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIBhLkonVWMK93ZYOinL+VVEGKgPEEq9y3y4R7GJ9BorTAiAymbOWELRVFRlSwsTvGp1tqWwsh3/EI2r/zgQat8mZcQ=="}]},"_npmUser":{"name":"phil_build0","email":"phil@build0.ai"},"directories":{},"maintainers":[{"name":"phil_build0","email":"phil@build0.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/eslint-rules_1.0.0_1749414028022_0.9515192866856184"},"_hasShrinkwrap":false}},"time":{"created":"2025-06-08T20:20:27.926Z","1.0.0":"2025-06-08T20:20:28.212Z","modified":"2025-06-08T20:20:28.556Z"},"maintainers":[{"name":"phil_build0","email":"phil@build0.ai"}],"description":"Shared ESLint rules for Build0 projects","homepage":"https://github.com/build0-ai/eslint-rules#readme","keywords":["eslint","eslint-plugin","react","radix-ui","select","rules"],"repository":{"type":"git","url":"git+https://github.com/build0-ai/eslint-rules.git"},"author":{"name":"Build0 Team"},"bugs":{"url":"https://github.com/build0-ai/eslint-rules/issues"},"license":"MIT","readme":"# @build0.ai/eslint-rules\n\n[![npm version](https://badge.fury.io/js/@build0.ai%2Feslint-rules.svg)](https://badge.fury.io/js/@build0.ai%2Feslint-rules)\n\nShared ESLint rules for Build0 projects. Prevents common React/Radix UI pitfalls and enforces best practices.\n\n## Installation\n\n```bash\nnpm install --save-dev @build0.ai/eslint-rules\n# or\npnpm add -D @build0.ai/eslint-rules\n# or\nyarn add --dev @build0.ai/eslint-rules\n```\n\n## Usage\n\nAdd the plugin to your ESLint configuration:\n\n```javascript\n// eslint.config.mjs\nimport { dirname } from \"path\";\nimport { fileURLToPath } from \"url\";\nimport { FlatCompat } from \"@eslint/eslintrc\";\nimport build0Rules from \"@build0.ai/eslint-rules\";\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\nconst compat = new FlatCompat({\n  baseDirectory: __dirname,\n});\n\nconst eslintConfig = [\n  ...compat.extends(\"next/core-web-vitals\", \"next/typescript\"),\n  {\n    rules: {\n      // Enable Build0 rules\n      \"build0/no-empty-select-item-value\": \"error\",\n    },\n    plugins: {\n      \"build0\": build0Rules,\n    },\n  },\n];\n\nexport default eslintConfig;\n```\n\n## Available Rules\n\n### `build0/no-empty-select-item-value`\n\nPrevents empty string values in `SelectItem` components, which causes runtime errors with Radix UI Select components.\n\n**❌ Incorrect:**\n```tsx\n<SelectItem value=\"\">Clear All</SelectItem>\n<SelectItem value={\"\"}>Clear All</SelectItem>\n<SelectItem value={emptyVar}>Clear All</SelectItem> // where emptyVar = \"\"\n```\n\n**✅ Correct:**\n```tsx\n<SelectItem value=\"clear\">Clear All</SelectItem>\n<SelectItem value=\"all\">All Items</SelectItem>\n<SelectItem value=\"none\">No Selection</SelectItem>\n```\n\n**Error Message:**\n```\nSelectItem cannot have an empty string value. Use a placeholder like 'all', 'none', or 'clear' instead. Empty strings are reserved by Radix UI for clearing selections.\n```\n\n## Local Development\n\nTo test the package locally before publishing:\n\n```bash\n# In the eslint-rules directory\nnpm pack\n\n# In your project directory  \nnpm install ../path/to/build0-eslint-rules-1.0.0.tgz\n```\n\n## Publishing\n\n```bash\n# Build and test the package\nnpm pack\nnpm publish\n\n# Or publish with specific tag\nnpm publish --tag beta\n```\n\n## Contributing\n\n1. Add new rules to the `rules/` directory\n2. Export them in `index.js`\n3. Update this README with documentation\n4. Test locally before publishing\n5. Follow semantic versioning for releases\n\n## License\n\nMIT ","readmeFilename":"README.md","_rev":"1-a8702d7b148d27f40478051fec373f2d"}