{"_id":"@aftershootco/feature-guard","_rev":"6-e93184fa9c489576f03ba04502008f6d","name":"@aftershootco/feature-guard","dist-tags":{"latest":"1.0.4"},"versions":{"1.0.0":{"name":"@aftershootco/feature-guard","version":"1.0.0","keywords":["feature-flags","feature-toggles","react","typescript","plugin-system","decision-system","ref-based","tooltip","mobile-optimized"],"author":{"name":"AfterShoot"},"license":"MIT","_id":"@aftershootco/feature-guard@1.0.0","maintainers":[{"name":"shaneywaris","email":"shaneywaris118@gmail.com"},{"name":"team-aftershoot","email":"aayushman@aftershoot.com"}],"homepage":"https://github.com/aftershootco/feature-guard#readme","bugs":{"url":"https://github.com/aftershootco/feature-guard/issues"},"dist":{"shasum":"fda7ae28be4b61074ce1eaf27c538901ba072131","tarball":"https://registry.npmjs.org/@aftershootco/feature-guard/-/feature-guard-1.0.0.tgz","fileCount":62,"integrity":"sha512-+ejzGC/TwDgh5pvgA+4d05xtwQWBqQ246sUnjkyvQVkyrjDe99bG5f0LiHeaVJuGorvkULksY6m0ky3+w/8Zgw==","signatures":[{"sig":"MEQCIAJAY4UAnlCKuu9bj3Mf3nOc7Fz8F363/u6v1iH11HkIAiBnhcQiXY3/LP/qj9SBP1RiiuQ8C1Uhc9JlU5aFVYWXKA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":64105},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./react":{"types":"./dist/react/index.d.ts","import":"./dist/react/index.js","require":"./dist/react/index.js"}},"gitHead":"b28b9be9b5b3702faaa93dc317ea910ca6f35473","scripts":{"dev":"tsc --watch","lint":"eslint src --ext .ts,.tsx","test":"jest","build":"tsc && tsc-alias","clean":"rm -rf dist","lint:fix":"eslint src --ext .ts,.tsx --fix","storybook":"storybook dev -p 6006","test:watch":"jest --watch","prepublishOnly":"npm run clean && npm run build && npm run test","build-storybook":"storybook build"},"_npmUser":{"name":"shaneywaris","email":"shaneywaris118@gmail.com"},"repository":{"url":"git+https://github.com/aftershootco/feature-guard.git","type":"git"},"_npmVersion":"10.7.0","description":"A flexible, framework-agnostic feature guard and toggle management library","directories":{},"_nodeVersion":"20.14.0","dependencies":{"clsx":"^2.1.1","tailwind-merge":"^3.3.1","@radix-ui/react-tooltip":"^1.2.8"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.45.0","vitest":"^3.2.4","postcss":"^8.5.6","ts-jest":"^29.1.0","storybook":"^9.1.2","tsc-alias":"^1.8.0","playwright":"^1.54.2","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/react":"^18.2.0","autoprefixer":"^10.4.21","@vitest/browser":"^3.2.4","@types/react-dom":"^18.2.0","@vitest/coverage-v8":"^3.2.4","@storybook/addon-a11y":"^9.1.2","@storybook/addon-docs":"^9.1.2","@storybook/react-vite":"^9.1.2","jest-environment-jsdom":"^30.0.5","@storybook/addon-vitest":"^9.1.2","eslint-plugin-storybook":"^9.1.2","@chromatic-com/storybook":"^4.1.0","@testing-library/jest-dom":"^6.8.0","@typescript-eslint/parser":"^6.0.0","@storybook/addon-onboarding":"^9.1.2","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"react":">=16.8.0","react-dom":">=16.8.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/feature-guard_1.0.0_1756195700839_0.32135425782637816","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@aftershootco/feature-guard","version":"1.0.1","keywords":["feature-flags","feature-toggles","react","typescript","plugin-system","decision-system","ref-based","tooltip","mobile-optimized"],"author":{"name":"AfterShoot"},"license":"MIT","_id":"@aftershootco/feature-guard@1.0.1","maintainers":[{"name":"shaneywaris","email":"shaneywaris118@gmail.com"},{"name":"team-aftershoot","email":"aayushman@aftershoot.com"}],"homepage":"https://github.com/aftershootco/feature-guard#readme","bugs":{"url":"https://github.com/aftershootco/feature-guard/issues"},"dist":{"shasum":"a888a828635c66ef591105d2e9a0ece5540af54b","tarball":"https://registry.npmjs.org/@aftershootco/feature-guard/-/feature-guard-1.0.1.tgz","fileCount":69,"integrity":"sha512-vIs39ejHys15B2G+TUeSW++x2dyBh2FC7dUPEbkPmtLkwCbZChvIZhl6+ZtCT6RFkDdeIfFSRbisABk2tuis5A==","signatures":[{"sig":"MEYCIQDHqvSXzT9Vk7rj7kjOA9TMH9CUDxrJ2tXujOqqA/18uQIhAIK4yIlbMMk53F1W/6kYWhMjwjnO06lB1yPYUQFrfDak","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":64150},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./react":{"types":"./dist/react/index.d.ts","import":"./dist/react/index.js","require":"./dist/react/index.js"}},"scripts":{"dev":"tsc --watch","lint":"eslint src --ext .ts,.tsx","test":"jest","build":"tsc && tsc-alias","clean":"rm -rf dist","lint:fix":"eslint src --ext .ts,.tsx --fix","storybook":"storybook dev -p 6006","test:watch":"jest --watch","prepublishOnly":"npm run clean && npm run build && npm run test","build-storybook":"storybook build"},"_npmUser":{"name":"shaneywaris","email":"shaneywaris118@gmail.com"},"repository":{"url":"git+https://github.com/aftershootco/feature-guard.git","type":"git"},"description":"A flexible, framework-agnostic feature guard and toggle management library","directories":{},"dependencies":{"clsx":"^2.1.1","tailwind-merge":"^3.3.1","@radix-ui/react-tooltip":"^1.2.8","@aftershootco/feature-guard":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.45.0","vitest":"^3.2.4","postcss":"^8.5.6","ts-jest":"^29.1.0","storybook":"^9.1.2","tsc-alias":"^1.8.0","playwright":"^1.54.2","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/react":"^18.2.0","autoprefixer":"^10.4.21","@vitest/browser":"^3.2.4","@types/react-dom":"^18.2.0","@vitest/coverage-v8":"^3.2.4","@storybook/addon-a11y":"^9.1.2","@storybook/addon-docs":"^9.1.2","@storybook/react-vite":"^9.1.2","jest-environment-jsdom":"^30.0.5","@storybook/addon-vitest":"^9.1.2","eslint-plugin-storybook":"^9.1.2","@chromatic-com/storybook":"^4.1.0","@testing-library/jest-dom":"^6.8.0","@typescript-eslint/parser":"^6.0.0","@storybook/addon-onboarding":"^9.1.2","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"react":">=16.8.0","react-dom":">=16.8.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/feature-guard_1.0.1_1756201419743_0.17822127307907154","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@aftershootco/feature-guard","version":"1.0.2","keywords":["feature-flags","feature-toggles","react","typescript","plugin-system","decision-system","ref-based","tooltip","mobile-optimized"],"author":{"name":"AfterShoot"},"license":"MIT","_id":"@aftershootco/feature-guard@1.0.2","maintainers":[{"name":"shaneywaris","email":"shaneywaris118@gmail.com"},{"name":"team-aftershoot","email":"aayushman@aftershoot.com"}],"homepage":"https://github.com/aftershootco/feature-guard#readme","bugs":{"url":"https://github.com/aftershootco/feature-guard/issues"},"dist":{"shasum":"b0a5ff1a6b27801ee82ab19db5e2742fc43925b8","tarball":"https://registry.npmjs.org/@aftershootco/feature-guard/-/feature-guard-1.0.2.tgz","fileCount":66,"integrity":"sha512-YvOptEudr8Ld+1aTc4vLe/5Zaba68KTE0OZwMbjcTQ1DoK6CSd4jBOlQwX3yxbCjGGug2G/exOg+gdDfjNh4+Q==","signatures":[{"sig":"MEQCIEqnu0hlENkZBtCoNRqBiLzzg2CoWgqzRT0Mv1WdD/Q/AiBHwPwJmp7YURkrA/eF4GZ3e2jIGPkMcYoW9rwF2LXYWA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":64058},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./react":{"types":"./dist/react/index.d.ts","import":"./dist/react/index.js","require":"./dist/react/index.js"}},"scripts":{"dev":"tsc --watch","lint":"eslint src --ext .ts,.tsx","test":"jest","build":"tsc && tsc-alias","clean":"rm -rf dist","publish":"yarn && yarn build && npm publish --access public","lint:fix":"eslint src --ext .ts,.tsx --fix","storybook":"storybook dev -p 6006","test:watch":"jest --watch","prepublishOnly":"npm run clean && npm run build && npm run test","build-storybook":"storybook build"},"_npmUser":{"name":"shaneywaris","email":"shaneywaris118@gmail.com"},"repository":{"url":"git+https://github.com/aftershootco/feature-guard.git","type":"git"},"description":"A flexible, framework-agnostic feature guard and toggle management library","directories":{},"dependencies":{"clsx":"^2.1.1","tailwind-merge":"^3.3.1","@radix-ui/react-tooltip":"^1.2.8","@aftershootco/feature-guard":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.45.0","vitest":"^3.2.4","postcss":"^8.5.6","ts-jest":"^29.1.0","storybook":"^9.1.2","tsc-alias":"^1.8.0","playwright":"^1.54.2","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/react":"^18.2.0","autoprefixer":"^10.4.21","@vitest/browser":"^3.2.4","@types/react-dom":"^18.2.0","@vitest/coverage-v8":"^3.2.4","@storybook/addon-a11y":"^9.1.2","@storybook/addon-docs":"^9.1.2","@storybook/react-vite":"^9.1.2","jest-environment-jsdom":"^30.0.5","@storybook/addon-vitest":"^9.1.2","eslint-plugin-storybook":"^9.1.2","@chromatic-com/storybook":"^4.1.0","@testing-library/jest-dom":"^6.8.0","@typescript-eslint/parser":"^6.0.0","@storybook/addon-onboarding":"^9.1.2","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"react":">=16.8.0","react-dom":">=16.8.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/feature-guard_1.0.2_1756993726225_0.4847828386530528","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@aftershootco/feature-guard","version":"1.0.3","keywords":["feature-flags","feature-toggles","react","typescript","plugin-system","decision-system","ref-based","tooltip","mobile-optimized"],"author":{"name":"AfterShoot"},"license":"MIT","_id":"@aftershootco/feature-guard@1.0.3","maintainers":[{"name":"shaneywaris","email":"shaneywaris118@gmail.com"},{"name":"team-aftershoot","email":"aayushman@aftershoot.com"}],"homepage":"https://github.com/aftershootco/feature-guard#readme","bugs":{"url":"https://github.com/aftershootco/feature-guard/issues"},"dist":{"shasum":"bfbae7b02eeb48b890605860c6c6a517e1075fec","tarball":"https://registry.npmjs.org/@aftershootco/feature-guard/-/feature-guard-1.0.3.tgz","fileCount":59,"integrity":"sha512-KqoQAjfwlJHVmFRIXqyP7ViE1IYQFqknZ9203TvLzA1xAQ1rL1aj2CDkSbAu7chilZmnZyVvF5vecNkpeH1dag==","signatures":[{"sig":"MEUCIQDB99UgEoGOLLc/yDEs7bybrzqBos+0YjQuby+BCCx/kQIgWwPpj3oQvHech9iEZ36cKLbMKC0CIiyZpUsL1GIf8i4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":70139},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./react":{"types":"./dist/react/index.d.ts","import":"./dist/react/index.js","require":"./dist/react/index.js"}},"gitHead":"b69077faf93fa9a5a8850500cf68e8c98ff93f91","scripts":{"dev":"tsc --watch","lint":"eslint src --ext .ts,.tsx","test":"jest","build":"tsc && tsc-alias","clean":"rm -rf dist","publish":"yarn && yarn build && npm publish --access public","lint:fix":"eslint src --ext .ts,.tsx --fix","storybook":"storybook dev -p 6006","test:watch":"jest --watch","prepublishOnly":"npm run clean && npm run build && npm run test","build-storybook":"storybook build"},"_npmUser":{"name":"shaneywaris","email":"shaneywaris118@gmail.com"},"repository":{"url":"git+https://github.com/aftershootco/feature-guard.git","type":"git"},"_npmVersion":"10.8.2","description":"A flexible, framework-agnostic feature guard and toggle management library","directories":{},"_nodeVersion":"20.19.0","dependencies":{"clsx":"^2.1.1","tailwind-merge":"^3.3.1","@radix-ui/react-tooltip":"^1.2.8","@aftershootco/feature-guard":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.45.0","vitest":"^3.2.4","postcss":"^8.5.6","ts-jest":"^29.1.0","storybook":"^9.1.2","tsc-alias":"^1.8.0","playwright":"^1.54.2","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/react":"^18.2.0","autoprefixer":"^10.4.21","@vitest/browser":"^3.2.4","@types/react-dom":"^18.2.0","@vitest/coverage-v8":"^3.2.4","@storybook/addon-a11y":"^9.1.2","@storybook/addon-docs":"^9.1.2","@storybook/react-vite":"^9.1.2","jest-environment-jsdom":"^30.0.5","@storybook/addon-vitest":"^9.1.2","eslint-plugin-storybook":"^9.1.2","@chromatic-com/storybook":"^4.1.0","@testing-library/jest-dom":"^6.8.0","@typescript-eslint/parser":"^6.0.0","@storybook/addon-onboarding":"^9.1.2","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"react":">=16.8.0","react-dom":">=16.8.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/feature-guard_1.0.3_1757339941262_0.7801660339829122","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@aftershootco/feature-guard","version":"1.0.4","keywords":["feature-flags","feature-toggles","react","typescript","plugin-system","decision-system","ref-based","tooltip","mobile-optimized"],"author":{"name":"AfterShoot"},"license":"MIT","_id":"@aftershootco/feature-guard@1.0.4","maintainers":[{"name":"shaneywaris","email":"shaneywaris118@gmail.com"},{"name":"team-aftershoot","email":"aayushman@aftershoot.com"}],"homepage":"https://github.com/aftershootco/feature-guard#readme","bugs":{"url":"https://github.com/aftershootco/feature-guard/issues"},"dist":{"shasum":"b0c01380085c1dc1c312f662f86abedac540fb1a","tarball":"https://registry.npmjs.org/@aftershootco/feature-guard/-/feature-guard-1.0.4.tgz","fileCount":59,"integrity":"sha512-neiGP+kN8ErxvLdQHFeAQo1Y5oKjjnI+6vMv401HiGeCkA+i2hTqkMZQAxQsUIVS71ZqJzGLIvTF//8Kin18BA==","signatures":[{"sig":"MEUCIQCV9a+yYAfcWTTTyoHmsuocwZg4vFI36NG+78FjwiCFDAIgTA+UNrQvRG/7rUMJOGj576VjZEX/ufU/0lHkeIdY7IY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":71345},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./react":{"types":"./dist/react/index.d.ts","import":"./dist/react/index.js","require":"./dist/react/index.js"}},"gitHead":"91192cbb3c1bc98304b6bf51fec6a334b550e84b","scripts":{"dev":"tsc --watch","lint":"eslint src --ext .ts,.tsx","test":"jest","build":"tsc && tsc-alias","clean":"rm -rf dist","publish":"yarn && yarn build && npm publish --access public","lint:fix":"eslint src --ext .ts,.tsx --fix","storybook":"storybook dev -p 6006","test:watch":"jest --watch","prepublishOnly":"npm run clean && npm run build && npm run test","build-storybook":"storybook build"},"_npmUser":{"name":"shaneywaris","email":"shaneywaris118@gmail.com"},"repository":{"url":"git+https://github.com/aftershootco/feature-guard.git","type":"git"},"_npmVersion":"10.8.2","description":"A flexible, framework-agnostic feature guard and toggle management library","directories":{},"_nodeVersion":"20.19.0","dependencies":{"clsx":"^2.1.1","tailwind-merge":"^3.3.1","@radix-ui/react-tooltip":"^1.2.8","@aftershootco/feature-guard":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.45.0","vitest":"^3.2.4","postcss":"^8.5.6","ts-jest":"^29.1.0","storybook":"^9.1.2","tsc-alias":"^1.8.0","playwright":"^1.54.2","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/react":"^18.2.0","autoprefixer":"^10.4.21","@vitest/browser":"^3.2.4","@types/react-dom":"^18.2.0","@vitest/coverage-v8":"^3.2.4","@storybook/addon-a11y":"^9.1.2","@storybook/addon-docs":"^9.1.2","@storybook/react-vite":"^9.1.2","jest-environment-jsdom":"^30.0.5","@storybook/addon-vitest":"^9.1.2","eslint-plugin-storybook":"^9.1.2","@chromatic-com/storybook":"^4.1.0","@testing-library/jest-dom":"^6.8.0","@typescript-eslint/parser":"^6.0.0","@storybook/addon-onboarding":"^9.1.2","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"react":">=16.8.0","react-dom":">=16.8.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/feature-guard_1.0.4_1757399480476_0.2009124516245515","host":"s3://npm-registry-packages-npm-production"}}},"time":{"created":"2025-08-26T08:08:20.707Z","modified":"2025-09-11T17:10:46.355Z","1.0.0":"2025-08-26T08:08:21.013Z","1.0.1":"2025-08-26T09:43:39.942Z","1.0.2":"2025-09-04T13:48:46.434Z","1.0.3":"2025-09-08T13:59:01.442Z","1.0.4":"2025-09-09T06:31:20.653Z"},"bugs":{"url":"https://github.com/aftershootco/feature-guard/issues"},"author":{"name":"AfterShoot"},"license":"MIT","homepage":"https://github.com/aftershootco/feature-guard#readme","keywords":["feature-flags","feature-toggles","react","typescript","plugin-system","decision-system","ref-based","tooltip","mobile-optimized"],"repository":{"url":"git+https://github.com/aftershootco/feature-guard.git","type":"git"},"description":"A flexible, framework-agnostic feature guard and toggle management library","maintainers":[{"email":"shaneywaris118@gmail.com","name":"shaneywaris"},{"email":"harshit@aftershoot.com","name":"harshithdwivedi"},{"email":"ningthoujam@aftershoot.com","name":"ninza_as"}],"readme":"# @aftershoot/feature-guard\n\nA modern, flexible feature flag and toggle management library with **ref-based element manipulation** and **decision system architecture** for complex business logic.\n\n## ✨ Key Features\n\n- 🎯 **Ref-based approach** - Direct DOM manipulation, no wrapper components\n- 🧠 **Decision System** - Complex business logic with multiple data sources  \n- 📱 **Mobile-optimized tooltips** - Touch-friendly floating tooltips\n- ⚡ **Performance optimized** - `resolveOne()` for single feature checks\n- ⚛️ **React integration** - Modern hooks with TypeScript support\n- 🔧 **Framework agnostic** - Use with any JavaScript framework\n\n## 🚀 Installation\n\n```bash\nnpm install @aftershoot/feature-guard\n```\n\n## 📋 Quick Start\n\n### Basic Feature Toggle\n\n```typescript\nimport { useFeatureGuard } from '@aftershoot/feature-guard';\n\nfunction PaymentButton() {\n  const { featureRef } = useFeatureGuard({\n    enabled: false,\n    type: \"disable\",\n    data: {\n      tooltipConfig: {\n        enabled: true,\n        text: { defaultText: \"Payment disabled by admin\" }\n      }\n    }\n  });\n\n  return <button ref={featureRef}>Pay Now</button>;\n}\n```\n\n### Decision System for Complex Logic\n\n```typescript\nimport { createDecisionSystem, setSources } from '@aftershoot/feature-guard';\n\n// Define your decision rules\nconst DS = createDecisionSystem<{ user: any; api: any }>();\nconst Decisions = DS.define({\n  premiumFeature: {\n    select: ({ user, api }) => user.tier === \"premium\" && api.enabled,\n    type: (enabled) => enabled ? \"show\" : \"blur\",\n    fallbackEnabled: false\n  }\n});\n\n// Set global data sources\nsetSources(Decisions, {\n  user: { tier: \"free\", role: \"member\" },\n  api: { enabled: true }\n});\n\n// Use anywhere in your app\nfunction PremiumComponent() {\n  const toggle = useDecision(\"premiumFeature\");\n  const { featureRef } = useFeatureGuard(toggle);\n  \n  return <div ref={featureRef}>Premium Content</div>;\n}\n```\n\n## 🎪 Interactive Examples\n\n```bash\nnpm run storybook\n```\n\nView live examples with different scenarios:\n- Basic toggles with API data\n- Complex decision systems\n- Performance comparisons\n- Mobile tooltip interactions\n\n## 📚 Documentation\n\n- **[Usage Guide](./docs/USAGE_GUIDE.md)** - Complete tutorials and examples\n- **[API Reference](./docs/API.md)** - Function signatures and types\n- **[Documentation Hub](./docs/README.md)** - Overview and architecture\n\n## 🛡️ Toggle Types\n\n- `show` - Feature visible and enabled\n- `hide` - Feature completely hidden  \n- `disable` - Feature visible but disabled with tooltip\n- `blur` - Feature visible but blurred with tooltip\n\n## ⚡ Performance\n\nBuilt for performance with:\n- `resolveOne()` for single feature checks\n- WeakMap cleanup for memory efficiency\n- IntersectionObserver for off-screen optimization\n- Debounced tooltip interactions\n\n## 🔧 TypeScript Support\n\nFull type safety with intelligent autocomplete:\n\n```typescript\ntype AppSources = {\n  user: { tier: string; role: string };\n  api: { enabled: boolean };\n};\n\nconst DS = createDecisionSystem<AppSources>();\n// TypeScript ensures your decision logic matches your data\n```\n\n## 🤝 Contributing\n\n```bash\nnpm run build    # Build the package\nnpm run test     # Run tests  \nnpm run storybook # View examples\n```\n\n## 📜 License\n\nMIT License - see [LICENSE](./LICENSE) file.\n\n---\n\n**Get started with the [Usage Guide](./docs/USAGE_GUIDE.md) or explore [API Reference](./docs/API.md)**","readmeFilename":"README.md"}