{"_id":"@annondeveloper/ui-kit","_rev":"24-01b27147a05478de35e49311cb8f33b6","name":"@annondeveloper/ui-kit","dist-tags":{"latest":"2.8.1"},"versions":{"0.1.0":{"name":"@annondeveloper/ui-kit","version":"0.1.0","keywords":["react","components","ui-kit","tailwind","radix-ui","framer-motion","dark-mode","design-system","typescript"],"license":"MIT","_id":"@annondeveloper/ui-kit@0.1.0","maintainers":[{"name":"annondeveloper","email":"annondeveloper@proton.me"}],"homepage":"https://github.com/annondeveloper/ui-kit#readme","bugs":{"url":"https://github.com/annondeveloper/ui-kit/issues"},"bin":{"ui-kit":"dist/cli/index.js"},"dist":{"shasum":"7c43cb044aa165a355f3bbce501ae63a6d4cb6c1","tarball":"https://registry.npmjs.org/@annondeveloper/ui-kit/-/ui-kit-0.1.0.tgz","fileCount":69,"integrity":"sha512-p4Wel3UIsEwkFExi/J889qX3XcsNqeZrJSgVD7H9q76laIXZR0qkh3UffGZLkqDHPm5tJnmfNGAzyq9H36w9rA==","signatures":[{"sig":"MEQCIEMOPKm2s6bgv27gmwEsFHKVpwQGJHO1RsWjR3mmniNGAiBUtmyod+8bVaOTPTaXS35+OH6pph5zWn7cVyJibcig/A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":680129},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./form":{"types":"./dist/form.d.ts","import":"./dist/form.js"},"./theme.css":"./src/theme.css"},"gitHead":"7526730ae37d06e71925a404efe977f1418f1206","scripts":{"test":"vitest run","build":"tsup && tsup --config tsup.cli.config.ts && node -e \"const f='dist/cli/index.js',c=require('fs');c.writeFileSync(f,'#!/usr/bin/env node\\n'+c.readFileSync(f,'utf8'))\"","release":"npm version patch && git push --follow-tags","storybook":"storybook dev -p 6006","typecheck":"tsc --noEmit -p tsconfig.build.json","test:watch":"vitest","prepublishOnly":"npm run typecheck && npm run build && npm test","build-storybook":"storybook build --output-dir storybook-static"},"_npmUser":{"name":"annondeveloper","email":"annondeveloper@proton.me"},"repository":{"url":"git+https://github.com/annondeveloper/ui-kit.git","type":"git"},"_npmVersion":"9.2.0","description":"A React component library with dark/light theming, built on Radix UI, Tailwind CSS v4, and Framer Motion.","directories":{},"sideEffects":false,"_nodeVersion":"20.19.2","_hasShrinkwrap":false,"devDependencies":{"clsx":"^2.0.0","tsup":"^8.4.0","vite":"^8.0.0","jsdom":"^29.0.0","react":"^19.0.0","sonner":"^2.0.0","vitest":"^4.1.0","axe-core":"^4.11.1","jest-axe":"^10.0.0","react-dom":"^19.0.0","storybook":"^8.6.18","typescript":"^5.8.0","@types/react":"^19.0.0","lucide-react":">=0.400.0","framer-motion":"^12.0.0","tailwind-merge":"^2.0.0","@axe-core/react":"^4.11.1","@types/jest-axe":"^3.5.9","react-hook-form":"^7.71.2","@storybook/react":"^8.6.18","@types/react-dom":"^19.0.0","@storybook/blocks":"^8.6.14","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^6.0.1","@storybook/addon-a11y":"^8.6.18","@storybook/react-vite":"^8.6.18","@tanstack/react-table":"^8.0.0","@radix-ui/react-select":"^2.0.0","@testing-library/react":"^16.3.2","@radix-ui/react-popover":"^1.0.0","@radix-ui/react-tooltip":"^1.0.0","@testing-library/jest-dom":"^6.9.1","@storybook/addon-essentials":"^8.6.14","@testing-library/user-event":"^14.6.1","@radix-ui/react-alert-dialog":"^1.0.0","@radix-ui/react-dropdown-menu":"^2.0.0"},"peerDependencies":{"clsx":"^2.0.0","react":"^19.0.0","sonner":"^2.0.0","react-dom":"^19.0.0","lucide-react":">=0.400.0","framer-motion":"^12.0.0","tailwind-merge":"^2.0.0","react-hook-form":"^7.0.0","@radix-ui/react-select":"^2.0.0","@radix-ui/react-popover":"^1.0.0","@radix-ui/react-tooltip":"^1.0.0","@radix-ui/react-alert-dialog":"^1.0.0","@radix-ui/react-dropdown-menu":"^2.0.0"},"peerDependenciesMeta":{"react-hook-form":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/ui-kit_0.1.0_1773851732857_0.41294824612046965","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@annondeveloper/ui-kit","version":"0.2.0","keywords":["react","components","ui-kit","tailwind","radix-ui","framer-motion","dark-mode","design-system","typescript"],"license":"MIT","_id":"@annondeveloper/ui-kit@0.2.0","maintainers":[{"name":"annondeveloper","email":"annondeveloper@proton.me"}],"homepage":"https://github.com/annondeveloper/ui-kit#readme","bugs":{"url":"https://github.com/annondeveloper/ui-kit/issues"},"bin":{"ui-kit":"dist/cli/index.js"},"dist":{"shasum":"64c3eae605bccf44f30094bdc99670f595fc0e87","tarball":"https://registry.npmjs.org/@annondeveloper/ui-kit/-/ui-kit-0.2.0.tgz","fileCount":85,"integrity":"sha512-lAHrNEsRgblYJFL/k/Xw1ddIQBovz/PwdVC4xHTZSv6ILGJQdLz1MrgMgaMPwf7JFHXDde+Qa5Hmdy7Vsty1fA==","signatures":[{"sig":"MEYCIQDI+MocLue4JVe+Ehj8PVNLOOs7u2O3Qu2rff04XxnumwIhALKqicQkc6/HPlpv8ZxsC//euf/zPmQIi0W0JHC5Y6gh","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1229447},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./form":{"types":"./dist/form.d.ts","import":"./dist/form.js"},"./theme.css":"./src/theme.css"},"gitHead":"0b210e64185252ad7d662a8198e39581954333fd","scripts":{"test":"vitest run","build":"tsup && tsup --config tsup.cli.config.ts && node -e \"const f='dist/cli/index.js',c=require('fs');c.writeFileSync(f,'#!/usr/bin/env node\\n'+c.readFileSync(f,'utf8'))\"","release":"npm version patch && git push --follow-tags","storybook":"storybook dev -p 6006","typecheck":"tsc --noEmit -p tsconfig.build.json","test:watch":"vitest","prepublishOnly":"npm run typecheck && npm run build && npm test","build-storybook":"storybook build --output-dir storybook-static"},"_npmUser":{"name":"annondeveloper","email":"annondeveloper@proton.me"},"repository":{"url":"git+https://github.com/annondeveloper/ui-kit.git","type":"git"},"_npmVersion":"9.2.0","description":"A React component library with dark/light theming, built on Radix UI, Tailwind CSS v4, and Framer Motion.","directories":{},"sideEffects":false,"_nodeVersion":"20.19.2","_hasShrinkwrap":false,"devDependencies":{"clsx":"^2.0.0","tsup":"^8.4.0","vite":"^8.0.0","jsdom":"^29.0.0","react":"^19.0.0","sonner":"^2.0.0","vitest":"^4.1.0","axe-core":"^4.11.1","jest-axe":"^10.0.0","react-dom":"^19.0.0","storybook":"^8.6.18","typescript":"^5.8.0","@types/react":"^19.0.0","lucide-react":">=0.400.0","framer-motion":"^12.0.0","tailwind-merge":"^2.0.0","@axe-core/react":"^4.11.1","@types/jest-axe":"^3.5.9","react-hook-form":"^7.71.2","@storybook/react":"^8.6.18","@types/react-dom":"^19.0.0","@storybook/blocks":"^8.6.14","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^6.0.1","@storybook/addon-a11y":"^8.6.18","@storybook/react-vite":"^8.6.18","@tanstack/react-table":"^8.0.0","@radix-ui/react-select":"^2.0.0","@testing-library/react":"^16.3.2","@radix-ui/react-popover":"^1.0.0","@radix-ui/react-tooltip":"^1.0.0","@testing-library/jest-dom":"^6.9.1","@storybook/addon-essentials":"^8.6.14","@testing-library/user-event":"^14.6.1","@radix-ui/react-alert-dialog":"^1.0.0","@radix-ui/react-dropdown-menu":"^2.0.0"},"peerDependencies":{"clsx":"^2.0.0","react":"^19.0.0","sonner":"^2.0.0","react-dom":"^19.0.0","lucide-react":">=0.400.0","framer-motion":"^12.0.0","tailwind-merge":"^2.0.0","react-hook-form":"^7.0.0","@radix-ui/react-select":"^2.0.0","@radix-ui/react-popover":"^1.0.0","@radix-ui/react-tooltip":"^1.0.0","@radix-ui/react-alert-dialog":"^1.0.0","@radix-ui/react-dropdown-menu":"^2.0.0"},"peerDependenciesMeta":{"react-hook-form":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/ui-kit_0.2.0_1773854376762_0.48120191262403234","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@annondeveloper/ui-kit","version":"0.2.1","keywords":["react","components","ui-kit","tailwind","radix-ui","framer-motion","dark-mode","design-system","typescript"],"license":"MIT","_id":"@annondeveloper/ui-kit@0.2.1","maintainers":[{"name":"annondeveloper","email":"annondeveloper@proton.me"}],"homepage":"https://github.com/annondeveloper/ui-kit#readme","bugs":{"url":"https://github.com/annondeveloper/ui-kit/issues"},"bin":{"ui-kit":"dist/cli/index.js"},"dist":{"shasum":"103a75e9d31d810f84695160b161b22105536f75","tarball":"https://registry.npmjs.org/@annondeveloper/ui-kit/-/ui-kit-0.2.1.tgz","fileCount":85,"integrity":"sha512-UwUm3uG4zhZOA97M8Ja1r0y1uU3yZcuhkt2SxvKMTvt2uv3pF7hdFVOHG8MTEHMJ3qT+6wgA+2MZLvb25KVYTA==","signatures":[{"sig":"MEUCIG9qN7EXim2kN34dZa2ip9/K2us4SbdS19SX6oKw6QvbAiEAh1q10BshESVxZ18MJDo4fvaOi0AOfxBP04oMR3YBjts=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1284875},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./form":{"types":"./dist/form.d.ts","import":"./dist/form.js"},"./theme.css":"./src/theme.css"},"gitHead":"a98c001c6c5def7996f5f9e30b15e02e3df78fd9","scripts":{"test":"vitest run","build":"tsup && tsup --config tsup.cli.config.ts && node -e \"const f='dist/cli/index.js',c=require('fs');c.writeFileSync(f,'#!/usr/bin/env node\\n'+c.readFileSync(f,'utf8'))\"","release":"npm version patch && git push --follow-tags","storybook":"storybook dev -p 6006","typecheck":"tsc --noEmit -p tsconfig.build.json","test:watch":"vitest","prepublishOnly":"npm run typecheck && npm run build && npm test","build-storybook":"storybook build --output-dir storybook-static"},"_npmUser":{"name":"annondeveloper","email":"annondeveloper@proton.me"},"repository":{"url":"git+https://github.com/annondeveloper/ui-kit.git","type":"git"},"_npmVersion":"9.2.0","description":"A React component library with dark/light theming, built on Radix UI, Tailwind CSS v4, and Framer Motion.","directories":{},"sideEffects":false,"_nodeVersion":"20.19.2","_hasShrinkwrap":false,"devDependencies":{"clsx":"^2.1.1","tsup":"^8.5.1","vite":"^8.0.0","jsdom":"^29.0.0","react":"^19.2.4","sonner":"^2.0.7","vitest":"^4.1.0","axe-core":"^4.11.1","jest-axe":"^10.0.0","react-dom":"^19.2.4","storybook":"^10.3.0","typescript":"^5.9.0","@types/react":"^19.2.14","lucide-react":">=0.577.0","framer-motion":"^12.38.0","tailwind-merge":"^3.5.0","@axe-core/react":"^4.11.1","@types/jest-axe":"^3.5.9","react-hook-form":"^7.71.2","@storybook/react":"^10.3.0","@types/react-dom":"^19.2.3","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^6.0.0","@storybook/addon-a11y":"^10.3.0","@storybook/react-vite":"^10.3.0","@tanstack/react-table":"^8.21.3","@radix-ui/react-select":"^2.2.6","@testing-library/react":"^16.3.2","@radix-ui/react-popover":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","@testing-library/jest-dom":"^6.9.1","@testing-library/user-event":"^14.6.1","@radix-ui/react-alert-dialog":"^1.1.15","@radix-ui/react-dropdown-menu":"^2.1.16"},"peerDependencies":{"clsx":"^2.0.0","react":"^19.0.0","sonner":"^2.0.0","react-dom":"^19.0.0","lucide-react":">=0.400.0","framer-motion":"^12.0.0","tailwind-merge":"^2.0.0 || ^3.0.0","react-hook-form":"^7.0.0","@radix-ui/react-select":"^2.0.0","@radix-ui/react-popover":"^1.0.0","@radix-ui/react-tooltip":"^1.0.0","@radix-ui/react-alert-dialog":"^1.0.0","@radix-ui/react-dropdown-menu":"^2.0.0"},"peerDependenciesMeta":{"react-hook-form":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/ui-kit_0.2.1_1773856116454_0.363153981880866","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"@annondeveloper/ui-kit","version":"0.2.2","keywords":["react","components","ui-kit","tailwind","radix-ui","framer-motion","dark-mode","design-system","typescript"],"license":"MIT","_id":"@annondeveloper/ui-kit@0.2.2","maintainers":[{"name":"annondeveloper","email":"annondeveloper@proton.me"}],"homepage":"https://github.com/annondeveloper/ui-kit#readme","bugs":{"url":"https://github.com/annondeveloper/ui-kit/issues"},"bin":{"ui-kit":"dist/cli/index.js"},"dist":{"shasum":"4402fae1fb136b5c628b8be5e27f2061fb2513df","tarball":"https://registry.npmjs.org/@annondeveloper/ui-kit/-/ui-kit-0.2.2.tgz","fileCount":85,"integrity":"sha512-YjDSezM+jmYoN9z0YfhHRKr5bQ6T/Cqd8Bb2vMroCfryEmzoQh05VTcqb/LUo5EVa1iGJwJeYpwelBE4OD6tOg==","signatures":[{"sig":"MEYCIQD//OmLiLuqbmjDwmyAKpntjco6xipr3q+5yizGxEWP9QIhAKTrptKmaIQFubqJDfir0OXPqw39p8eTTXhiGti473O8","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1284875},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./form":{"types":"./dist/form.d.ts","import":"./dist/form.js"},"./theme.css":"./src/theme.css"},"gitHead":"3df4bec1c5dd9282758b78f282512875dd846c89","scripts":{"test":"vitest run","build":"tsup && tsup --config tsup.cli.config.ts && node -e \"const f='dist/cli/index.js',c=require('fs');c.writeFileSync(f,'#!/usr/bin/env node\\n'+c.readFileSync(f,'utf8'))\"","release":"npm version patch && git push --follow-tags","storybook":"storybook dev -p 6006","typecheck":"tsc --noEmit -p tsconfig.build.json","test:watch":"vitest","prepublishOnly":"npm run typecheck && npm run build && npm test","build-storybook":"storybook build --output-dir storybook-static"},"_npmUser":{"name":"annondeveloper","email":"annondeveloper@proton.me"},"repository":{"url":"git+https://github.com/annondeveloper/ui-kit.git","type":"git"},"_npmVersion":"9.2.0","description":"A React component library with dark/light theming, built on Radix UI, Tailwind CSS v4, and Framer Motion.","directories":{},"sideEffects":false,"_nodeVersion":"20.19.2","_hasShrinkwrap":false,"devDependencies":{"clsx":"^2.1.1","tsup":"^8.5.1","vite":"^8.0.0","jsdom":"^29.0.0","react":"^19.2.4","sonner":"^2.0.7","vitest":"^4.1.0","axe-core":"^4.11.1","jest-axe":"^10.0.0","react-dom":"^19.2.4","storybook":"^10.3.0","typescript":"^5.9.0","@types/react":"^19.2.14","lucide-react":">=0.577.0","framer-motion":"^12.38.0","tailwind-merge":"^3.5.0","@axe-core/react":"^4.11.1","@types/jest-axe":"^3.5.9","react-hook-form":"^7.71.2","@storybook/react":"^10.3.0","@types/react-dom":"^19.2.3","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^6.0.0","@storybook/addon-a11y":"^10.3.0","@storybook/react-vite":"^10.3.0","@tanstack/react-table":"^8.21.3","@radix-ui/react-select":"^2.2.6","@testing-library/react":"^16.3.2","@radix-ui/react-popover":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","@testing-library/jest-dom":"^6.9.1","@testing-library/user-event":"^14.6.1","@radix-ui/react-alert-dialog":"^1.1.15","@radix-ui/react-dropdown-menu":"^2.1.16"},"peerDependencies":{"clsx":"^2.0.0","react":"^19.0.0","sonner":"^2.0.0","react-dom":"^19.0.0","lucide-react":">=0.400.0","framer-motion":"^12.0.0","tailwind-merge":"^2.0.0 || ^3.0.0","react-hook-form":"^7.0.0","@radix-ui/react-select":"^2.0.0","@radix-ui/react-popover":"^1.0.0","@radix-ui/react-tooltip":"^1.0.0","@radix-ui/react-alert-dialog":"^1.0.0","@radix-ui/react-dropdown-menu":"^2.0.0"},"peerDependenciesMeta":{"react-hook-form":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/ui-kit_0.2.2_1773857537141_0.5112133738651168","host":"s3://npm-registry-packages-npm-production"}},"0.2.3":{"name":"@annondeveloper/ui-kit","version":"0.2.3","keywords":["react","components","ui-kit","tailwind","radix-ui","framer-motion","dark-mode","design-system","typescript"],"license":"MIT","_id":"@annondeveloper/ui-kit@0.2.3","maintainers":[{"name":"annondeveloper","email":"annondeveloper@proton.me"}],"homepage":"https://github.com/annondeveloper/ui-kit#readme","bugs":{"url":"https://github.com/annondeveloper/ui-kit/issues"},"bin":{"ui-kit":"dist/cli/index.js"},"dist":{"shasum":"b5ab31846993b4ba6b6fa3c3d7d5ea769ad678ee","tarball":"https://registry.npmjs.org/@annondeveloper/ui-kit/-/ui-kit-0.2.3.tgz","fileCount":85,"integrity":"sha512-nl/UwCGP/m1PtJ9QxFfEObO659bv+jwWKGns4YLa7otDQD2mzFGr9sdYG7KCxobO8BVYKD0gbWRCGVjM50LzwA==","signatures":[{"sig":"MEUCIQCs1np8XtyvY9llPK334h3HDNh4+CCpC9U6Q+2GP6XiaQIgZALQpcEICKbgWik4VPCf7XaOMVZzO+9h+xDzOZKCL64=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1289535},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./form":{"types":"./dist/form.d.ts","import":"./dist/form.js"},"./theme.css":"./src/theme.css"},"gitHead":"953e3fefcb652512f2752b5dfe3cea441db63b7c","scripts":{"test":"vitest run","build":"tsup && tsup --config tsup.cli.config.ts && node -e \"const f='dist/cli/index.js',c=require('fs');c.writeFileSync(f,'#!/usr/bin/env node\\n'+c.readFileSync(f,'utf8'))\"","release":"npm version patch && git push --follow-tags","storybook":"storybook dev -p 6006","typecheck":"tsc --noEmit -p tsconfig.build.json","test:watch":"vitest","prepublishOnly":"npm run typecheck && npm run build && npm test","build-storybook":"storybook build --output-dir storybook-static"},"_npmUser":{"name":"annondeveloper","email":"annondeveloper@proton.me"},"repository":{"url":"git+https://github.com/annondeveloper/ui-kit.git","type":"git"},"_npmVersion":"9.2.0","description":"A React component library with dark/light theming, built on Radix UI, Tailwind CSS v4, and Framer Motion.","directories":{},"sideEffects":false,"_nodeVersion":"20.19.2","dependencies":{"isomorphic-dompurify":"^3.5.1"},"_hasShrinkwrap":false,"devDependencies":{"clsx":"^2.1.1","tsup":"^8.5.1","vite":"^8.0.0","jsdom":"^29.0.0","react":"^19.2.4","sonner":"^2.0.7","vitest":"^4.1.0","axe-core":"^4.11.1","jest-axe":"^10.0.0","react-dom":"^19.2.4","storybook":"^10.3.0","typescript":"^5.9.0","@types/react":"^19.2.14","lucide-react":">=0.577.0","framer-motion":"^12.38.0","tailwind-merge":"^3.5.0","@axe-core/react":"^4.11.1","@types/jest-axe":"^3.5.9","react-hook-form":"^7.71.2","@storybook/react":"^10.3.0","@types/react-dom":"^19.2.3","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^6.0.0","@storybook/addon-a11y":"^10.3.0","@storybook/react-vite":"^10.3.0","@tanstack/react-table":"^8.21.3","@radix-ui/react-select":"^2.2.6","@testing-library/react":"^16.3.2","@radix-ui/react-popover":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","@testing-library/jest-dom":"^6.9.1","@testing-library/user-event":"^14.6.1","@radix-ui/react-alert-dialog":"^1.1.15","@radix-ui/react-dropdown-menu":"^2.1.16"},"peerDependencies":{"clsx":"^2.0.0","react":"^19.0.0","sonner":"^2.0.0","react-dom":"^19.0.0","lucide-react":">=0.400.0","framer-motion":"^12.0.0","tailwind-merge":"^2.0.0 || ^3.0.0","react-hook-form":"^7.0.0","@radix-ui/react-select":"^2.0.0","@radix-ui/react-popover":"^1.0.0","@radix-ui/react-tooltip":"^1.0.0","@radix-ui/react-alert-dialog":"^1.0.0","@radix-ui/react-dropdown-menu":"^2.0.0"},"peerDependenciesMeta":{"react-hook-form":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/ui-kit_0.2.3_1773885719922_0.3715002315684077","host":"s3://npm-registry-packages-npm-production"}},"0.2.4":{"name":"@annondeveloper/ui-kit","version":"0.2.4","keywords":["react","components","ui-kit","tailwind","radix-ui","framer-motion","dark-mode","design-system","typescript"],"license":"MIT","_id":"@annondeveloper/ui-kit@0.2.4","maintainers":[{"name":"annondeveloper","email":"annondeveloper@proton.me"}],"homepage":"https://github.com/annondeveloper/ui-kit#readme","bugs":{"url":"https://github.com/annondeveloper/ui-kit/issues"},"bin":{"ui-kit":"dist/cli/index.js"},"dist":{"shasum":"f3012a36cd365fd09bf8e4b6b42172d3ef994b04","tarball":"https://registry.npmjs.org/@annondeveloper/ui-kit/-/ui-kit-0.2.4.tgz","fileCount":85,"integrity":"sha512-/YBRzBHjD8fyU9dqpjycs7y0UnbmRT7jBTRJt0yck6abgHeqVJhWf2BXUNA0KfO0DCAYDauSWiZ8wP3g9efpbw==","signatures":[{"sig":"MEYCIQCFT7HNELnNy1cx8jVQMVHpLJFXRq2mfabYA+20Uu987gIhAN0ZtnSNe4/RSGCheWeuN5w6snxZv/56T38v4zLSP92Q","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1291354},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./form":{"types":"./dist/form.d.ts","import":"./dist/form.js"},"./theme.css":"./src/theme.css"},"gitHead":"ab257c56ffcd2e042b10c99409fda6a8b36113a6","scripts":{"test":"vitest run","build":"tsup && tsup --config tsup.cli.config.ts && node -e \"const f='dist/cli/index.js',c=require('fs');c.writeFileSync(f,'#!/usr/bin/env node\\n'+c.readFileSync(f,'utf8'))\"","release":"npm version patch && git push --follow-tags","storybook":"storybook dev -p 6006","typecheck":"tsc --noEmit -p tsconfig.build.json","test:watch":"vitest","prepublishOnly":"npm run typecheck && npm run build && npm test","build-storybook":"storybook build --output-dir storybook-static"},"_npmUser":{"name":"annondeveloper","email":"annondeveloper@proton.me"},"repository":{"url":"git+https://github.com/annondeveloper/ui-kit.git","type":"git"},"_npmVersion":"9.2.0","description":"A React component library with dark/light theming, built on Radix UI, Tailwind CSS v4, and Framer Motion.","directories":{},"sideEffects":false,"_nodeVersion":"20.19.2","dependencies":{"isomorphic-dompurify":"^3.5.1"},"_hasShrinkwrap":false,"devDependencies":{"clsx":"^2.1.1","tsup":"^8.5.1","vite":"^8.0.0","jsdom":"^29.0.0","react":"^19.2.4","sonner":"^2.0.7","vitest":"^4.1.0","axe-core":"^4.11.1","jest-axe":"^10.0.0","react-dom":"^19.2.4","storybook":"^10.3.0","typescript":"^5.9.0","@types/react":"^19.2.14","lucide-react":">=0.577.0","framer-motion":"^12.38.0","tailwind-merge":"^3.5.0","@axe-core/react":"^4.11.1","@types/jest-axe":"^3.5.9","react-hook-form":"^7.71.2","@storybook/react":"^10.3.0","@types/react-dom":"^19.2.3","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^6.0.0","@storybook/addon-a11y":"^10.3.0","@storybook/react-vite":"^10.3.0","@tanstack/react-table":"^8.21.3","@radix-ui/react-select":"^2.2.6","@testing-library/react":"^16.3.2","@radix-ui/react-popover":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","@testing-library/jest-dom":"^6.9.1","@testing-library/user-event":"^14.6.1","@radix-ui/react-alert-dialog":"^1.1.15","@radix-ui/react-dropdown-menu":"^2.1.16"},"peerDependencies":{"clsx":"^2.0.0","react":"^19.0.0","sonner":"^2.0.0","react-dom":"^19.0.0","lucide-react":">=0.400.0","framer-motion":"^12.0.0","tailwind-merge":"^2.0.0 || ^3.0.0","react-hook-form":"^7.0.0","@radix-ui/react-select":"^2.0.0","@radix-ui/react-popover":"^1.0.0","@radix-ui/react-tooltip":"^1.0.0","@radix-ui/react-alert-dialog":"^1.0.0","@radix-ui/react-dropdown-menu":"^2.0.0"},"peerDependenciesMeta":{"react-hook-form":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/ui-kit_0.2.4_1773887819161_0.8564112346052131","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@annondeveloper/ui-kit","version":"0.3.0","keywords":["react","components","ui-kit","tailwind","radix-ui","framer-motion","dark-mode","design-system","typescript"],"license":"MIT","_id":"@annondeveloper/ui-kit@0.3.0","maintainers":[{"name":"annondeveloper","email":"annondeveloper@proton.me"}],"homepage":"https://github.com/annondeveloper/ui-kit#readme","bugs":{"url":"https://github.com/annondeveloper/ui-kit/issues"},"bin":{"ui-kit":"dist/cli/index.js"},"dist":{"shasum":"f187bdca1053a25aff6ff839cb3b65d24da0c7fe","tarball":"https://registry.npmjs.org/@annondeveloper/ui-kit/-/ui-kit-0.3.0.tgz","fileCount":90,"integrity":"sha512-OqMPWDebwy7CTxrxXVGKOvlEUrTEoTY72ZVzl7TUSp8yXxkhNn7xLHEuDjPywR+IP5NwXDbUKekyXZCG2DuNig==","signatures":[{"sig":"MEYCIQDVZtWKIdcfjI7t4YrOt/q8aVMYXXPxDpd00WVC9Bzq5gIhALb/lXCZ4fYDDB3AoUpZxZtPyyKvkgpXoWXgzqy9Pb/h","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1462662},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./form":{"types":"./dist/form.d.ts","import":"./dist/form.js"},"./theme.css":"./src/theme.css"},"gitHead":"24951727cbb95c66580f988f0803e57f73aee4af","scripts":{"test":"vitest run","build":"tsup && tsup --config tsup.cli.config.ts && node -e \"const f='dist/cli/index.js',c=require('fs');c.writeFileSync(f,'#!/usr/bin/env node\\n'+c.readFileSync(f,'utf8'))\"","release":"npm version patch && git push --follow-tags","storybook":"storybook dev -p 6006","typecheck":"tsc --noEmit -p tsconfig.build.json","test:watch":"vitest","prepublishOnly":"npm run typecheck && npm run build && npm test","build-storybook":"storybook build --output-dir storybook-static"},"_npmUser":{"name":"annondeveloper","email":"annondeveloper@proton.me"},"repository":{"url":"git+https://github.com/annondeveloper/ui-kit.git","type":"git"},"_npmVersion":"9.2.0","description":"A React component library with dark/light theming, built on Radix UI, Tailwind CSS v4, and Framer Motion.","directories":{},"sideEffects":false,"_nodeVersion":"20.19.2","dependencies":{"isomorphic-dompurify":"^3.5.1"},"_hasShrinkwrap":false,"devDependencies":{"clsx":"^2.1.1","tsup":"^8.5.1","vite":"^8.0.0","jsdom":"^29.0.0","react":"^19.2.4","sonner":"^2.0.7","vitest":"^4.1.0","axe-core":"^4.11.1","jest-axe":"^10.0.0","react-dom":"^19.2.4","storybook":"^10.3.0","typescript":"^5.9.0","@types/react":"^19.2.14","lucide-react":">=0.577.0","framer-motion":"^12.38.0","tailwind-merge":"^3.5.0","@axe-core/react":"^4.11.1","@types/jest-axe":"^3.5.9","react-hook-form":"^7.71.2","@storybook/react":"^10.3.0","@types/react-dom":"^19.2.3","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^6.0.0","@storybook/addon-a11y":"^10.3.0","@storybook/react-vite":"^10.3.0","@tanstack/react-table":"^8.21.3","@radix-ui/react-select":"^2.2.6","@testing-library/react":"^16.3.2","@radix-ui/react-popover":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","@testing-library/jest-dom":"^6.9.1","@testing-library/user-event":"^14.6.1","@radix-ui/react-alert-dialog":"^1.1.15","@radix-ui/react-dropdown-menu":"^2.1.16"},"peerDependencies":{"clsx":"^2.0.0","react":"^19.0.0","sonner":"^2.0.0","react-dom":"^19.0.0","lucide-react":">=0.400.0","framer-motion":"^12.0.0","tailwind-merge":"^2.0.0 || ^3.0.0","react-hook-form":"^7.0.0","@radix-ui/react-select":"^2.0.0","@radix-ui/react-popover":"^1.0.0","@radix-ui/react-tooltip":"^1.0.0","@radix-ui/react-alert-dialog":"^1.0.0","@radix-ui/react-dropdown-menu":"^2.0.0"},"peerDependenciesMeta":{"react-hook-form":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/ui-kit_0.3.0_1773889109360_0.851848567286855","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@annondeveloper/ui-kit","version":"0.4.0","keywords":["react","components","ui-kit","tailwind","radix-ui","framer-motion","dark-mode","design-system","typescript"],"license":"MIT","_id":"@annondeveloper/ui-kit@0.4.0","maintainers":[{"name":"annondeveloper","email":"annondeveloper@proton.me"}],"homepage":"https://github.com/annondeveloper/ui-kit#readme","bugs":{"url":"https://github.com/annondeveloper/ui-kit/issues"},"bin":{"ui-kit":"dist/cli/index.js"},"dist":{"shasum":"c29bed62b5294ff79b99326c8e2af5f834720312","tarball":"https://registry.npmjs.org/@annondeveloper/ui-kit/-/ui-kit-0.4.0.tgz","fileCount":94,"integrity":"sha512-SlsvmILlrHTtvsr82ytUBlkyaDvtTUR72zSvLaFwK4Ol+mQ4lbKazFoezbdCuTZfVmgG1UpWGqzrVzbGJofn1w==","signatures":[{"sig":"MEQCIGLKQeaZqgxPUKk2jq7+reFKDNtqkT24QsZY1GPO9ou6AiADSn4mycUXQ9O0+fpRy+ALdpQ6u7IUwILUxh0ISHFpug==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1535988},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./form":{"types":"./dist/form.d.ts","import":"./dist/form.js"},"./theme.css":"./src/theme.css"},"gitHead":"e4f93ea70ef6758cf03c1cff7686aba6a43df24f","scripts":{"test":"vitest run","build":"tsup && tsup --config tsup.cli.config.ts && node -e \"const f='dist/cli/index.js',c=require('fs');c.writeFileSync(f,'#!/usr/bin/env node\\n'+c.readFileSync(f,'utf8'))\"","release":"npm version patch && git push --follow-tags","storybook":"storybook dev -p 6006","typecheck":"tsc --noEmit -p tsconfig.build.json","test:watch":"vitest","prepublishOnly":"npm run typecheck && npm run build && npm test","build-storybook":"storybook build --output-dir storybook-static"},"_npmUser":{"name":"annondeveloper","email":"annondeveloper@proton.me"},"repository":{"url":"git+https://github.com/annondeveloper/ui-kit.git","type":"git"},"_npmVersion":"9.2.0","description":"A React component library with dark/light theming, built on Radix UI, Tailwind CSS v4, and Framer Motion.","directories":{},"sideEffects":false,"_nodeVersion":"20.19.2","dependencies":{"isomorphic-dompurify":"^3.5.1"},"_hasShrinkwrap":false,"devDependencies":{"clsx":"^2.1.1","tsup":"^8.5.1","vite":"^8.0.0","jsdom":"^29.0.0","react":"^19.2.4","sonner":"^2.0.7","vitest":"^4.1.0","axe-core":"^4.11.1","jest-axe":"^10.0.0","react-dom":"^19.2.4","storybook":"^10.3.0","typescript":"^5.9.0","@types/react":"^19.2.14","lucide-react":">=0.577.0","framer-motion":"^12.38.0","tailwind-merge":"^3.5.0","@axe-core/react":"^4.11.1","@types/jest-axe":"^3.5.9","react-hook-form":"^7.71.2","@storybook/react":"^10.3.0","@types/react-dom":"^19.2.3","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^6.0.0","@storybook/addon-a11y":"^10.3.0","@storybook/react-vite":"^10.3.0","@tanstack/react-table":"^8.21.3","@radix-ui/react-select":"^2.2.6","@testing-library/react":"^16.3.2","@radix-ui/react-popover":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","@testing-library/jest-dom":"^6.9.1","@testing-library/user-event":"^14.6.1","@radix-ui/react-alert-dialog":"^1.1.15","@radix-ui/react-dropdown-menu":"^2.1.16"},"peerDependencies":{"clsx":"^2.0.0","react":"^19.0.0","sonner":"^2.0.0","react-dom":"^19.0.0","lucide-react":">=0.400.0","framer-motion":"^12.0.0","tailwind-merge":"^2.0.0 || ^3.0.0","react-hook-form":"^7.0.0","@radix-ui/react-select":"^2.0.0","@radix-ui/react-popover":"^1.0.0","@radix-ui/react-tooltip":"^1.0.0","@radix-ui/react-alert-dialog":"^1.0.0","@radix-ui/react-dropdown-menu":"^2.0.0"},"peerDependenciesMeta":{"react-hook-form":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/ui-kit_0.4.0_1773890116919_0.4323725014704505","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"@annondeveloper/ui-kit","version":"2.0.0","keywords":["react","components","ui-kit","design-system","typescript","zero-dependency"],"license":"MIT","_id":"@annondeveloper/ui-kit@2.0.0","maintainers":[{"name":"annondeveloper","email":"annondeveloper@proton.me"}],"homepage":"https://github.com/annondeveloper/ui-kit#readme","bugs":{"url":"https://github.com/annondeveloper/ui-kit/issues"},"bin":{"ui-kit":"dist/cli/index.js"},"dist":{"shasum":"6b0b273ab6af5357634cf22e1db61058bdfcdc4c","tarball":"https://registry.npmjs.org/@annondeveloper/ui-kit/-/ui-kit-2.0.0.tgz","fileCount":81,"integrity":"sha512-eFeujNWvSX6kliGqekj87y1m9ORIlcaGg7Jt8+dK8sNC612q0wxP4PIOFxuuhJEN87XnGsvaFc9x4a00PIGIZw==","signatures":[{"sig":"MEQCIG2YBMZurPFsVgzb/piLjBCoQ1nP16M348zlqWtcb2iSAiBmufqD4OAC+sxTzv8dGh3IER5n/ed0Hqky/Lm0ymPSLg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@annondeveloper%2fui-kit@2.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2535038},"main":"dist/esm/index.js","type":"module","types":"dist/esm/index.d.ts","module":"dist/esm/index.js","exports":{".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"}},"./form":{"import":{"types":"./dist/esm/form.d.ts","default":"./dist/esm/form.js"}},"./theme":{"import":{"types":"./dist/esm/theme.d.ts","default":"./dist/esm/theme.js"}},"./css/all.css":"./dist/css/all.css","./css/theme.css":"./dist/css/theme.css","./css/components/*":"./dist/css/components/*"},"gitHead":"417b06fe26c98716ed71d7dea7906828a0fa6964","scripts":{"test":"vitest run","build":"tsup && tsup --config tsup.cli.config.ts && node scripts/extract-css.js","test:a11y":"vitest run --grep a11y","typecheck":"tsc --noEmit","preversion":"node scripts/sync-versions.js","test:watch":"vitest","postversion":"git push && git push --tags","test:bundle-size":"node scripts/check-bundle-size.js"},"_npmUser":{"name":"annondeveloper","email":"annondeveloper@proton.me"},"repository":{"url":"git+https://github.com/annondeveloper/ui-kit.git","type":"git"},"_npmVersion":"10.9.4","description":"A zero-dependency React component library with built-in theming, motion, and accessibility.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.1","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vite":"^8.0.0","jsdom":"^29.0.0","react":"^19.2.4","vitest":"^4.1.0","jest-axe":"^10.0.0","react-dom":"^19.2.4","storybook":"^10.3.0","typescript":"^5.9.0","@types/react":"^19.2.14","@axe-core/react":"^4.11.1","@types/jest-axe":"^3.5.9","@storybook/react":"^10.3.0","@types/react-dom":"^19.2.3","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^6.0.0","@storybook/addon-a11y":"^10.3.0","@storybook/react-vite":"^10.3.0","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1","@testing-library/user-event":"^14.6.1"},"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ui-kit_2.0.0_1774027910443_0.16423457507589112","host":"s3://npm-registry-packages-npm-production"}},"2.0.1":{"name":"@annondeveloper/ui-kit","version":"2.0.1","keywords":["react","components","ui-kit","design-system","typescript","zero-dependency"],"license":"MIT","_id":"@annondeveloper/ui-kit@2.0.1","maintainers":[{"name":"annondeveloper","email":"annondeveloper@proton.me"}],"homepage":"https://github.com/annondeveloper/ui-kit#readme","bugs":{"url":"https://github.com/annondeveloper/ui-kit/issues"},"bin":{"ui-kit":"dist/cli/index.js"},"dist":{"shasum":"6dfe28772b5bb2171c98208092348e1e54731945","tarball":"https://registry.npmjs.org/@annondeveloper/ui-kit/-/ui-kit-2.0.1.tgz","fileCount":89,"integrity":"sha512-Rgn8vsnKgXDkIVLE+jnD/mKil11t6oE8eT5SQPhq1N9lzYo61s88J7Ge91iERDEbGqSNZjh5aAXgsx5MKiC3ww==","signatures":[{"sig":"MEUCIQDVNHODCFdxyAHl8n8QaJs/JycpLKK0trFl91LjIP4BKwIgZXSppZeAWMItJ9O5AMR/3iM0ySO3zgPfdHAZzZ3QALk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@annondeveloper%2fui-kit@2.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2740160},"main":"dist/esm/index.js","type":"module","types":"dist/esm/index.d.ts","module":"dist/esm/index.js","exports":{".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"}},"./form":{"import":{"types":"./dist/esm/form.d.ts","default":"./dist/esm/form.js"}},"./theme":{"import":{"types":"./dist/esm/theme.d.ts","default":"./dist/esm/theme.js"}},"./css/all.css":"./dist/css/all.css","./css/theme.css":"./dist/css/theme.css","./css/components/*":"./dist/css/components/*"},"gitHead":"19d1ce925f44e61e71a9d1440f127d86854b461b","scripts":{"test":"vitest run","build":"tsup && tsup --config tsup.cli.config.ts && node scripts/extract-css.js","test:a11y":"vitest run --grep a11y","typecheck":"tsc --noEmit","preversion":"node scripts/sync-versions.js","test:watch":"vitest","postversion":"git push && git push --tags","test:bundle-size":"node scripts/check-bundle-size.js"},"_npmUser":{"name":"annondeveloper","email":"annondeveloper@proton.me"},"repository":{"url":"git+https://github.com/annondeveloper/ui-kit.git","type":"git"},"_npmVersion":"10.9.4","description":"A zero-dependency React component library with built-in theming, motion, and accessibility.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.1","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vite":"^8.0.0","jsdom":"^29.0.0","react":"^19.2.4","vitest":"^4.1.0","jest-axe":"^10.0.0","react-dom":"^19.2.4","storybook":"^10.3.0","typescript":"^5.9.0","@types/react":"^19.2.14","@axe-core/react":"^4.11.1","@types/jest-axe":"^3.5.9","@storybook/react":"^10.3.0","@types/react-dom":"^19.2.3","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^6.0.0","@storybook/addon-a11y":"^10.3.0","@storybook/react-vite":"^10.3.0","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1","@testing-library/user-event":"^14.6.1"},"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ui-kit_2.0.1_1774029660433_0.9970776014171754","host":"s3://npm-registry-packages-npm-production"}},"2.0.2":{"name":"@annondeveloper/ui-kit","version":"2.0.2","keywords":["react","components","ui-kit","design-system","typescript","zero-dependency"],"license":"MIT","_id":"@annondeveloper/ui-kit@2.0.2","maintainers":[{"name":"annondeveloper","email":"annondeveloper@proton.me"}],"homepage":"https://github.com/annondeveloper/ui-kit#readme","bugs":{"url":"https://github.com/annondeveloper/ui-kit/issues"},"bin":{"ui-kit":"dist/cli/index.js"},"dist":{"shasum":"140a7be6d59fa7ed2afb7dafcd5f0d2a30dce5fa","tarball":"https://registry.npmjs.org/@annondeveloper/ui-kit/-/ui-kit-2.0.2.tgz","fileCount":89,"integrity":"sha512-svWkTO8p6PCgkwQT/yh5lEGOkNE8QJXNzAGd0VjLZXs2gGsWxh+mhyX+c01YMRQuYPhZyReljE3RbfQGgSV5CQ==","signatures":[{"sig":"MEQCICSsyUaXn5I/kXOtDfFADX1/epjwmRWZ2CGYZkWuYuXqAiB+nF1QGAtNnjxLNDPG80R4tN9XwLLo8ysoRc03jsUOXw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@annondeveloper%2fui-kit@2.0.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2740160},"main":"dist/esm/index.js","type":"module","types":"dist/esm/index.d.ts","module":"dist/esm/index.js","exports":{".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"}},"./form":{"import":{"types":"./dist/esm/form.d.ts","default":"./dist/esm/form.js"}},"./theme":{"import":{"types":"./dist/esm/theme.d.ts","default":"./dist/esm/theme.js"}},"./css/all.css":"./dist/css/all.css","./css/theme.css":"./dist/css/theme.css","./css/components/*":"./dist/css/components/*"},"gitHead":"fd049f7957f9e4c8f570c01b49cae0544401c9ca","scripts":{"test":"vitest run","build":"tsup && tsup --config tsup.cli.config.ts && node scripts/extract-css.js","test:a11y":"vitest run --grep a11y","typecheck":"tsc --noEmit","preversion":"node scripts/sync-versions.js","test:watch":"vitest","postversion":"git push && git push --tags","test:bundle-size":"node scripts/check-bundle-size.js"},"_npmUser":{"name":"annondeveloper","email":"annondeveloper@proton.me"},"repository":{"url":"git+https://github.com/annondeveloper/ui-kit.git","type":"git"},"_npmVersion":"10.9.4","description":"A zero-dependency React component library with built-in theming, motion, and accessibility.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.1","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vite":"^8.0.0","jsdom":"^29.0.0","react":"^19.2.4","vitest":"^4.1.0","jest-axe":"^10.0.0","react-dom":"^19.2.4","storybook":"^10.3.0","typescript":"^5.9.0","@types/react":"^19.2.14","@axe-core/react":"^4.11.1","@types/jest-axe":"^3.5.9","@storybook/react":"^10.3.0","@types/react-dom":"^19.2.3","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^6.0.0","@storybook/addon-a11y":"^10.3.0","@storybook/react-vite":"^10.3.0","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1","@testing-library/user-event":"^14.6.1"},"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ui-kit_2.0.2_1774030084904_0.17829808361948363","host":"s3://npm-registry-packages-npm-production"}},"2.0.3":{"name":"@annondeveloper/ui-kit","version":"2.0.3","keywords":["react","components","ui-kit","design-system","typescript","zero-dependency"],"license":"MIT","_id":"@annondeveloper/ui-kit@2.0.3","maintainers":[{"name":"annondeveloper","email":"annondeveloper@proton.me"}],"homepage":"https://github.com/annondeveloper/ui-kit#readme","bugs":{"url":"https://github.com/annondeveloper/ui-kit/issues"},"bin":{"ui-kit":"dist/cli/index.js"},"dist":{"shasum":"7ea10348d841001cffc9283c11b6c3760a26630a","tarball":"https://registry.npmjs.org/@annondeveloper/ui-kit/-/ui-kit-2.0.3.tgz","fileCount":89,"integrity":"sha512-qOKTWJb4Bp1yQxx5qwOJTT5IMSqaFlHlSzpPAKFWnNNGEggMahgePy/TrzUERjHUBVzxJBLy86kMRviDTpMPEQ==","signatures":[{"sig":"MEUCICfApl08HRxYwLv0P/cd7btoCsNbqI6kda8Y4howeEPJAiEA/faaVoaaXnsySbMUO+Jzbsc0BlECclkMwm15bgrQSb8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@annondeveloper%2fui-kit@2.0.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2753445},"main":"dist/esm/index.js","type":"module","types":"dist/esm/index.d.ts","module":"dist/esm/index.js","exports":{".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"}},"./form":{"import":{"types":"./dist/esm/form.d.ts","default":"./dist/esm/form.js"}},"./theme":{"import":{"types":"./dist/esm/theme.d.ts","default":"./dist/esm/theme.js"}},"./css/all.css":"./dist/css/all.css","./css/theme.css":"./dist/css/theme.css","./css/components/*":"./dist/css/components/*"},"gitHead":"4d493776f63ffd161f04753284dc02582d977402","scripts":{"test":"vitest run","build":"tsup && tsup --config tsup.cli.config.ts && node scripts/extract-css.js","test:a11y":"vitest run --grep a11y","typecheck":"tsc --noEmit","preversion":"node scripts/sync-versions.js","test:watch":"vitest","postversion":"git push && git push --tags","test:bundle-size":"node scripts/check-bundle-size.js"},"_npmUser":{"name":"annondeveloper","email":"annondeveloper@proton.me"},"repository":{"url":"git+https://github.com/annondeveloper/ui-kit.git","type":"git"},"_npmVersion":"10.9.4","description":"A zero-dependency React component library with built-in theming, motion, and accessibility.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.1","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vite":"^8.0.0","jsdom":"^29.0.0","react":"^19.2.4","vitest":"^4.1.0","jest-axe":"^10.0.0","react-dom":"^19.2.4","storybook":"^10.3.0","typescript":"^5.9.0","@types/react":"^19.2.14","@axe-core/react":"^4.11.1","@types/jest-axe":"^3.5.9","@storybook/react":"^10.3.0","@types/react-dom":"^19.2.3","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^6.0.0","@storybook/addon-a11y":"^10.3.0","@storybook/react-vite":"^10.3.0","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1","@testing-library/user-event":"^14.6.1"},"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ui-kit_2.0.3_1774031216753_0.5267403947197264","host":"s3://npm-registry-packages-npm-production"}},"2.0.4":{"name":"@annondeveloper/ui-kit","version":"2.0.4","keywords":["react","components","ui-kit","design-system","typescript","zero-dependency"],"license":"MIT","_id":"@annondeveloper/ui-kit@2.0.4","maintainers":[{"name":"annondeveloper","email":"annondeveloper@proton.me"}],"homepage":"https://github.com/annondeveloper/ui-kit#readme","bugs":{"url":"https://github.com/annondeveloper/ui-kit/issues"},"bin":{"ui-kit":"dist/cli/index.js"},"dist":{"shasum":"1ccc719fb92f417f8f8a7ac2d6ec02996eee7524","tarball":"https://registry.npmjs.org/@annondeveloper/ui-kit/-/ui-kit-2.0.4.tgz","fileCount":89,"integrity":"sha512-B24otqvuWEYNez3n1EB5/oy3kHwpxLfi8Hzr6NAahKi8kAIhhPXZwaeHZkMGEYOcAFUQoBCUS/bn66sGOVeBIg==","signatures":[{"sig":"MEUCIBx15o1qbCcQ7mbC0G1wnsBNLpS6hvbj0Ak0dbYVs7/0AiEA0trNOnk16LkeK/mGh4d/y8CPxjaYeaH7DGjyQBQsQJ4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@annondeveloper%2fui-kit@2.0.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2756836},"main":"dist/esm/index.js","type":"module","types":"dist/esm/index.d.ts","module":"dist/esm/index.js","exports":{".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"}},"./form":{"import":{"types":"./dist/esm/form.d.ts","default":"./dist/esm/form.js"}},"./theme":{"import":{"types":"./dist/esm/theme.d.ts","default":"./dist/esm/theme.js"}},"./css/all.css":"./dist/css/all.css","./css/theme.css":"./dist/css/theme.css","./css/components/*":"./dist/css/components/*"},"gitHead":"900c2145a87bcacad0f8aad3fb59adab244bd873","scripts":{"test":"vitest run","build":"tsup && tsup --config tsup.cli.config.ts && node scripts/extract-css.js","test:a11y":"vitest run --grep a11y","typecheck":"tsc --noEmit","preversion":"node scripts/sync-versions.js","test:watch":"vitest","postversion":"git push && git push --tags","test:bundle-size":"node scripts/check-bundle-size.js"},"_npmUser":{"name":"annondeveloper","email":"annondeveloper@proton.me"},"repository":{"url":"git+https://github.com/annondeveloper/ui-kit.git","type":"git"},"_npmVersion":"10.9.4","description":"A zero-dependency React component library with built-in theming, motion, and accessibility.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.1","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vite":"^8.0.0","jsdom":"^29.0.0","react":"^19.2.4","vitest":"^4.1.0","jest-axe":"^10.0.0","react-dom":"^19.2.4","storybook":"^10.3.0","typescript":"^5.9.0","@types/react":"^19.2.14","@axe-core/react":"^4.11.1","@types/jest-axe":"^3.5.9","@storybook/react":"^10.3.0","@types/react-dom":"^19.2.3","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^6.0.0","@storybook/addon-a11y":"^10.3.0","@storybook/react-vite":"^10.3.0","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1","@testing-library/user-event":"^14.6.1"},"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ui-kit_2.0.4_1774032690531_0.18922140782928065","host":"s3://npm-registry-packages-npm-production"}},"2.1.0":{"name":"@annondeveloper/ui-kit","version":"2.1.0","keywords":["react","components","ui-kit","design-system","typescript","zero-dependency"],"license":"MIT","_id":"@annondeveloper/ui-kit@2.1.0","maintainers":[{"name":"annondeveloper","email":"annondeveloper@proton.me"}],"homepage":"https://github.com/annondeveloper/ui-kit#readme","bugs":{"url":"https://github.com/annondeveloper/ui-kit/issues"},"bin":{"ui-kit":"dist/cli/index.js"},"dist":{"shasum":"0e581247e82663a195c1d7d8051325d1059222f0","tarball":"https://registry.npmjs.org/@annondeveloper/ui-kit/-/ui-kit-2.1.0.tgz","fileCount":103,"integrity":"sha512-wllzwJ5LbRNYnZZdA9Ey6LS4SY8pp5ue6Y/vkjvzHJo8MTaOP1ZeNjqYdxYDMoimy79q7G0d/8qh1jAoQFP7dQ==","signatures":[{"sig":"MEYCIQCRfvf8XPCgMIhxkv/oTP+/vgafK3HBB+NWiuAR+DftzAIhANScBtfGyrKb23n9rCfMT0a0L2DWYiqvT5nRR/dX4Uov","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@annondeveloper%2fui-kit@2.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3294453},"main":"dist/esm/index.js","type":"module","types":"dist/esm/index.d.ts","module":"dist/esm/index.js","exports":{".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"}},"./form":{"import":{"types":"./dist/esm/form.d.ts","default":"./dist/esm/form.js"}},"./theme":{"import":{"types":"./dist/esm/theme.d.ts","default":"./dist/esm/theme.js"}},"./css/all.css":"./dist/css/all.css","./css/theme.css":"./dist/css/theme.css","./css/components/*":"./dist/css/components/*"},"gitHead":"7e1e883cef4f330adb137b9968ddf044404e6b1c","scripts":{"test":"vitest run","build":"tsup && tsup --config tsup.cli.config.ts && node scripts/extract-css.js","test:a11y":"vitest run --grep a11y","typecheck":"tsc --noEmit","preversion":"node scripts/sync-versions.js","test:watch":"vitest","postversion":"git push && git push --tags","test:bundle-size":"node scripts/check-bundle-size.js"},"_npmUser":{"name":"annondeveloper","email":"annondeveloper@proton.me"},"repository":{"url":"git+https://github.com/annondeveloper/ui-kit.git","type":"git"},"_npmVersion":"10.9.4","description":"A zero-dependency React component library with built-in theming, motion, and accessibility.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.1","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vite":"^8.0.0","jsdom":"^29.0.0","react":"^19.2.4","vitest":"^4.1.0","jest-axe":"^10.0.0","react-dom":"^19.2.4","storybook":"^10.3.0","typescript":"^5.9.0","@types/react":"^19.2.14","@axe-core/react":"^4.11.1","@types/jest-axe":"^3.5.9","@storybook/react":"^10.3.0","@types/react-dom":"^19.2.3","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^6.0.0","@storybook/addon-a11y":"^10.3.0","@storybook/react-vite":"^10.3.0","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1","@testing-library/user-event":"^14.6.1"},"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ui-kit_2.1.0_1774061405901_0.472938469445336","host":"s3://npm-registry-packages-npm-production"}},"2.2.0":{"name":"@annondeveloper/ui-kit","version":"2.2.0","keywords":["react","components","ui-kit","design-system","typescript","zero-dependency"],"license":"MIT","_id":"@annondeveloper/ui-kit@2.2.0","maintainers":[{"name":"annondeveloper","email":"annondeveloper@proton.me"}],"homepage":"https://github.com/annondeveloper/ui-kit#readme","bugs":{"url":"https://github.com/annondeveloper/ui-kit/issues"},"bin":{"ui-kit":"dist/cli/index.js"},"dist":{"shasum":"b6321da932f451e8947e71a38f06ee9e557aae9c","tarball":"https://registry.npmjs.org/@annondeveloper/ui-kit/-/ui-kit-2.2.0.tgz","fileCount":127,"integrity":"sha512-w0pD18gkx5veHYzmwRkomsFJX2F7jWHMtutS3L3YqsjkUYxeMLvBIpi3y2SctfAcKaXH6dBbGZf38o6DT2PGfA==","signatures":[{"sig":"MEUCIQDxeo2cWh/fd71e0DhgP2QYlMfdH4/044/IY1rHJjDjGwIgCLPMY6lf8nn4gKHIsqXLSUHBCbJAj7S8efI3XzPZQ4c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@annondeveloper%2fui-kit@2.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3743908},"main":"dist/esm/index.js","type":"module","types":"dist/esm/index.d.ts","module":"dist/esm/index.js","exports":{".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"}},"./form":{"import":{"types":"./dist/esm/form.d.ts","default":"./dist/esm/form.js"}},"./lite":{"import":{"types":"./dist/esm/lite.d.ts","default":"./dist/esm/lite.js"}},"./theme":{"import":{"types":"./dist/esm/theme.d.ts","default":"./dist/esm/theme.js"}},"./premium":{"import":{"types":"./dist/esm/premium.d.ts","default":"./dist/esm/premium.js"}},"./css/all.css":"./dist/css/all.css","./css/theme.css":"./dist/css/theme.css","./lite/styles.css":"./src/lite/lite.css","./css/components/*":"./dist/css/components/*"},"gitHead":"9420d3658a462ce31ac7d21e5336e8a6ded718dd","scripts":{"test":"vitest run","build":"tsup && tsup --config tsup.cli.config.ts && node scripts/extract-css.js","test:a11y":"vitest run --grep a11y","typecheck":"tsc --noEmit","preversion":"node scripts/sync-versions.js","test:watch":"vitest","postversion":"git push && git push --tags","test:bundle-size":"node scripts/check-bundle-size.js"},"_npmUser":{"name":"annondeveloper","email":"annondeveloper@proton.me"},"repository":{"url":"git+https://github.com/annondeveloper/ui-kit.git","type":"git"},"_npmVersion":"10.9.4","description":"A zero-dependency React component library with built-in theming, motion, and accessibility.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.1","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vite":"^8.0.0","jsdom":"^29.0.0","react":"^19.2.4","vitest":"^4.1.0","jest-axe":"^10.0.0","react-dom":"^19.2.4","storybook":"^10.3.0","typescript":"^5.9.0","@types/react":"^19.2.14","@axe-core/react":"^4.11.1","@types/jest-axe":"^3.5.9","@storybook/react":"^10.3.0","@types/react-dom":"^19.2.3","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^6.0.0","@storybook/addon-a11y":"^10.3.0","@storybook/react-vite":"^10.3.0","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1","@testing-library/user-event":"^14.6.1"},"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ui-kit_2.2.0_1774063665617_0.8349972347323797","host":"s3://npm-registry-packages-npm-production"}},"2.3.0":{"name":"@annondeveloper/ui-kit","version":"2.3.0","keywords":["react","components","ui-kit","design-system","typescript","zero-dependency"],"license":"MIT","_id":"@annondeveloper/ui-kit@2.3.0","maintainers":[{"name":"annondeveloper","email":"annondeveloper@proton.me"}],"homepage":"https://github.com/annondeveloper/ui-kit#readme","bugs":{"url":"https://github.com/annondeveloper/ui-kit/issues"},"bin":{"ui-kit":"dist/cli/index.js"},"dist":{"shasum":"7b385b27ca129c67d612438bbcd83c1912554beb","tarball":"https://registry.npmjs.org/@annondeveloper/ui-kit/-/ui-kit-2.3.0.tgz","fileCount":127,"integrity":"sha512-F4YB1+ueDg4YR3HVqE+pOca+1tM1mQyn2VhtK30POPzXSwj0/jbLoQt6Fsp1caJFc28Lo2RglXAEv+73aksmsg==","signatures":[{"sig":"MEUCIFxE+tIEYR7J/JmXE9nd2FIPrtGxwnXHwLMKVPl3wEfsAiEA737PrPJNxTIUBqNw7iW0IdcJXRH0jiFefLAhL3uLsNY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@annondeveloper%2fui-kit@2.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3743908},"main":"dist/esm/index.js","type":"module","types":"dist/esm/index.d.ts","module":"dist/esm/index.js","exports":{".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"}},"./form":{"import":{"types":"./dist/esm/form.d.ts","default":"./dist/esm/form.js"}},"./lite":{"import":{"types":"./dist/esm/lite.d.ts","default":"./dist/esm/lite.js"}},"./theme":{"import":{"types":"./dist/esm/theme.d.ts","default":"./dist/esm/theme.js"}},"./premium":{"import":{"types":"./dist/esm/premium.d.ts","default":"./dist/esm/premium.js"}},"./css/all.css":"./dist/css/all.css","./css/theme.css":"./dist/css/theme.css","./lite/styles.css":"./src/lite/lite.css","./css/components/*":"./dist/css/components/*"},"gitHead":"4d8477bd7ad07b214d0befe968546bccd23da919","scripts":{"test":"vitest run","build":"tsup && tsup --config tsup.cli.config.ts && node scripts/extract-css.js","test:a11y":"vitest run --grep a11y","typecheck":"tsc --noEmit","preversion":"node scripts/sync-versions.js","test:watch":"vitest","postversion":"git push && git push --tags","test:bundle-size":"node scripts/check-bundle-size.js"},"_npmUser":{"name":"annondeveloper","email":"annondeveloper@proton.me"},"repository":{"url":"git+https://github.com/annondeveloper/ui-kit.git","type":"git"},"_npmVersion":"10.9.4","description":"A zero-dependency React component library with built-in theming, motion, and accessibility.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.1","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vite":"^8.0.0","jsdom":"^29.0.0","react":"^19.2.4","vitest":"^4.1.0","jest-axe":"^10.0.0","react-dom":"^19.2.4","storybook":"^10.3.0","typescript":"^5.9.0","@types/react":"^19.2.14","@axe-core/react":"^4.11.1","@types/jest-axe":"^3.5.9","@storybook/react":"^10.3.0","@types/react-dom":"^19.2.3","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^6.0.0","@storybook/addon-a11y":"^10.3.0","@storybook/react-vite":"^10.3.0","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1","@testing-library/user-event":"^14.6.1"},"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ui-kit_2.3.0_1774066843957_0.9052777603633824","host":"s3://npm-registry-packages-npm-production"}},"2.5.1":{"name":"@annondeveloper/ui-kit","version":"2.5.1","keywords":["react","components","ui-kit","design-system","typescript","zero-dependency"],"license":"MIT","_id":"@annondeveloper/ui-kit@2.5.1","maintainers":[{"name":"annondeveloper","email":"annondeveloper@proton.me"}],"homepage":"https://github.com/annondeveloper/ui-kit#readme","bugs":{"url":"https://github.com/annondeveloper/ui-kit/issues"},"bin":{"ui-kit":"dist/cli/index.js","ui-kit-mcp":"dist/mcp/index.js"},"dist":{"shasum":"886e66313a2e04eb977b72543fc349c8832b7642","tarball":"https://registry.npmjs.org/@annondeveloper/ui-kit/-/ui-kit-2.5.1.tgz","fileCount":185,"integrity":"sha512-PpWadGyzW4TXlZ5sfMWWz1RxqBF5/oLVTZTjBqtG4NzJPv7lEic5AZwRt/990hIr60lGdr6WovzeXCt0cf51LQ==","signatures":[{"sig":"MEYCIQCAuaB5gXu8XWk7/Y4AnYcVqGvhuycGHFmVm74XHP9gQAIhAOpkKjLbyE3iilHos2WkgC05Rrwkz+TKu21bKZxgTL0Q","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@annondeveloper%2fui-kit@2.5.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":8664390},"main":"dist/esm/index.js","type":"module","types":"dist/esm/index.d.ts","module":"dist/esm/index.js","exports":{".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"}},"./form":{"import":{"types":"./dist/esm/form.d.ts","default":"./dist/esm/form.js"}},"./lite":{"import":{"types":"./dist/esm/lite.d.ts","default":"./dist/esm/lite.js"}},"./theme":{"import":{"types":"./dist/esm/theme.d.ts","default":"./dist/esm/theme.js"}},"./premium":{"import":{"types":"./dist/esm/premium.d.ts","default":"./dist/esm/premium.js"}},"./css/all.css":"./dist/css/all.css","./css/theme.css":"./dist/css/theme.css","./lite/styles.css":"./src/lite/lite.css","./css/components/*":"./dist/css/components/*"},"gitHead":"1b2b40bd2211b5bb7d7525199d57c465222638e9","scripts":{"test":"vitest run","build":"tsup && tsup --config tsup.cli.config.ts && tsup --config tsup.mcp.config.ts && node scripts/extract-css.js","build:mcp":"tsup --config tsup.mcp.config.ts && npm run build:registry","test:a11y":"vitest run --grep a11y","typecheck":"tsc --noEmit","preversion":"node scripts/sync-versions.js","test:watch":"vitest","postversion":"git push && git push --tags","build:report":"node scripts/generate-bundle-report.js","build:registry":"node dist/mcp/scripts/build-registry.js","test:bundle-size":"node scripts/check-bundle-size.js"},"_npmUser":{"name":"annondeveloper","email":"annondeveloper@proton.me"},"repository":{"url":"git+https://github.com/annondeveloper/ui-kit.git","type":"git"},"_npmVersion":"10.9.4","description":"A zero-dependency React component library with built-in theming, motion, and accessibility.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.1","dependencies":{"@modelcontextprotocol/sdk":"^1.28.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vite":"^8.0.0","jsdom":"^29.0.0","react":"^19.2.4","vitest":"^4.1.0","jest-axe":"^10.0.0","react-dom":"^19.2.4","storybook":"^10.3.0","playwright":"^1.58.2","typescript":"^5.9.0","@types/react":"^19.2.14","@axe-core/react":"^4.11.1","@types/jest-axe":"^3.5.9","@storybook/react":"^10.3.0","@types/react-dom":"^19.2.3","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^6.0.0","@storybook/addon-a11y":"^10.3.0","@storybook/react-vite":"^10.3.0","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1","@testing-library/user-event":"^14.6.1"},"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ui-kit_2.5.1_1774684300891_0.19396003199802436","host":"s3://npm-registry-packages-npm-production"}},"2.6.0":{"name":"@annondeveloper/ui-kit","version":"2.6.0","keywords":["react","components","ui-kit","design-system","typescript","zero-dependency"],"license":"MIT","_id":"@annondeveloper/ui-kit@2.6.0","maintainers":[{"name":"annondeveloper","email":"annondeveloper@proton.me"}],"homepage":"https://github.com/annondeveloper/ui-kit#readme","bugs":{"url":"https://github.com/annondeveloper/ui-kit/issues"},"bin":{"ui-kit":"dist/cli/index.js","ui-kit-mcp":"dist/mcp/index.js"},"dist":{"shasum":"966b8684be1d08b98a6c17288744d60c1e3c6563","tarball":"https://registry.npmjs.org/@annondeveloper/ui-kit/-/ui-kit-2.6.0.tgz","fileCount":185,"integrity":"sha512-PQUN/tK39cEyI1SDNRzCvhwso0rmjjdYb6YTYfF4Keckr2HBlIuW4Am62u3kyenhz4YIuSmCWTDZPrjYCEw0bg==","signatures":[{"sig":"MEYCIQD7kutAw4m3C3/XQTnaDza29ZAWAXImkc0G7TnZoh4JbgIhAPbd2Bsl34Pxcf1f0r846waw/Yq+e1OWkTvdRCW93utT","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@annondeveloper%2fui-kit@2.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":8665185},"main":"dist/esm/index.js","type":"module","types":"dist/esm/index.d.ts","module":"dist/esm/index.js","exports":{".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"}},"./form":{"import":{"types":"./dist/esm/form.d.ts","default":"./dist/esm/form.js"}},"./lite":{"import":{"types":"./dist/esm/lite.d.ts","default":"./dist/esm/lite.js"}},"./theme":{"import":{"types":"./dist/esm/theme.d.ts","default":"./dist/esm/theme.js"}},"./premium":{"import":{"types":"./dist/esm/premium.d.ts","default":"./dist/esm/premium.js"}},"./css/all.css":"./dist/css/all.css","./css/theme.css":"./dist/css/theme.css","./lite/styles.css":"./src/lite/lite.css","./css/components/*":"./dist/css/components/*"},"gitHead":"2349771188de99951c01a850bece544d4f46b4ce","scripts":{"test":"vitest run","build":"tsup && tsup --config tsup.cli.config.ts && tsup --config tsup.mcp.config.ts && node scripts/extract-css.js","build:mcp":"tsup --config tsup.mcp.config.ts && npm run build:registry","changelog":"node scripts/generate-changelog.js","storybook":"storybook dev -p 6006","test:a11y":"vitest run src/__tests__/core/a11y","typecheck":"tsc --noEmit","preversion":"node scripts/sync-versions.js","test:watch":"vitest","postversion":"git push && git push --tags","test:visual":"playwright test","build:report":"node scripts/generate-bundle-report.js","build:registry":"node dist/mcp/scripts/build-registry.js","build:storybook":"storybook build -o storybook-static","test:bundle-size":"node scripts/check-bundle-size.js"},"_npmUser":{"name":"annondeveloper","email":"annondeveloper@proton.me"},"repository":{"url":"git+https://github.com/annondeveloper/ui-kit.git","type":"git"},"_npmVersion":"10.9.4","description":"A zero-dependency React component library with built-in theming, motion, and accessibility.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.1","dependencies":{"@modelcontextprotocol/sdk":"^1.28.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vite":"^8.0.0","jsdom":"^29.0.0","react":"^19.2.4","vitest":"^4.1.0","jest-axe":"^10.0.0","react-dom":"^19.2.4","storybook":"^10.3.0","playwright":"^1.58.2","typescript":"^5.9.0","@types/react":"^19.2.14","@axe-core/react":"^4.11.1","@types/jest-axe":"^3.5.9","@storybook/react":"^10.3.0","@types/react-dom":"^19.2.3","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^6.0.0","@storybook/addon-a11y":"^10.3.0","@storybook/react-vite":"^10.3.0","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1","@testing-library/user-event":"^14.6.1"},"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ui-kit_2.6.0_1774702848966_0.8023360903983501","host":"s3://npm-registry-packages-npm-production"}},"2.7.0":{"name":"@annondeveloper/ui-kit","version":"2.7.0","keywords":["react","components","ui-kit","design-system","typescript","zero-dependency"],"license":"MIT","_id":"@annondeveloper/ui-kit@2.7.0","maintainers":[{"name":"annondeveloper","email":"annondeveloper@proton.me"}],"homepage":"https://github.com/annondeveloper/ui-kit#readme","bugs":{"url":"https://github.com/annondeveloper/ui-kit/issues"},"bin":{"ui-kit":"dist/cli/index.js","ui-kit-mcp":"dist/mcp/index.js"},"dist":{"shasum":"aa712f73cd5cd941d455cb19946ac0af978d507a","tarball":"https://registry.npmjs.org/@annondeveloper/ui-kit/-/ui-kit-2.7.0.tgz","fileCount":204,"integrity":"sha512-hhbo7Z/CXXFGgGBXIpj+yqn3gpxzz0J1MOqJSD1jDZIKA1HB2n12OdPmS4QLMCVekOCTgl0dNysNDRRlVckxoQ==","signatures":[{"sig":"MEQCIGi3OHVMulZJ6ZM8DsEIG4fTTffbtwmljdNK63UToOHsAiAXyRS0c76Bt4sN+9iXxu4R6Bm8VgAr8YzjLoHyY6sV5Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@annondeveloper%2fui-kit@2.7.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":8761890},"main":"dist/esm/index.js","type":"module","types":"dist/esm/index.d.ts","module":"dist/esm/index.js","exports":{".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"}},"./rsc":{"import":{"types":"./dist/esm/rsc.d.ts","default":"./dist/esm/rsc.js"}},"./form":{"import":{"types":"./dist/esm/form.d.ts","default":"./dist/esm/form.js"}},"./lite":{"import":{"types":"./dist/esm/lite.d.ts","default":"./dist/esm/lite.js"}},"./theme":{"import":{"types":"./dist/esm/theme.d.ts","default":"./dist/esm/theme.js"}},"./premium":{"import":{"types":"./dist/esm/premium.d.ts","default":"./dist/esm/premium.js"}},"./css/all.css":"./dist/css/all.css","./css/theme.css":"./dist/css/theme.css","./web-components":{"import":{"types":"./dist/esm/web-components.d.ts","default":"./dist/esm/web-components.js"}},"./lite/styles.css":"./src/lite/lite.css","./css/components/*":"./dist/css/components/*"},"gitHead":"c6939f94f5f506ffb7b986854ff385ad1845a197","scripts":{"test":"vitest run","build":"tsup && tsup --config tsup.cli.config.ts && tsup --config tsup.mcp.config.ts && node scripts/extract-css.js","build:mcp":"tsup --config tsup.mcp.config.ts && npm run build:registry","changelog":"node scripts/generate-changelog.js","storybook":"storybook dev -p 6006","test:a11y":"vitest run src/__tests__/core/a11y","typecheck":"tsc --noEmit","preversion":"node scripts/sync-versions.js","test:watch":"vitest","postversion":"git push && git push --tags","test:visual":"playwright test","build:report":"node scripts/generate-bundle-report.js","build:registry":"node dist/mcp/scripts/build-registry.js","build:storybook":"storybook build -o storybook-static","test:bundle-size":"node scripts/check-bundle-size.js"},"_npmUser":{"name":"annondeveloper","email":"annondeveloper@proton.me"},"repository":{"url":"git+https://github.com/annondeveloper/ui-kit.git","type":"git"},"_npmVersion":"10.9.4","description":"A zero-dependency React component library with built-in theming, motion, and accessibility.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.1","dependencies":{"@modelcontextprotocol/sdk":"^1.28.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vite":"^8.0.0","jsdom":"^29.0.0","react":"^19.2.4","vitest":"^4.1.0","jest-axe":"^10.0.0","react-dom":"^19.2.4","storybook":"^10.3.0","playwright":"^1.58.2","typescript":"^5.9.0","@types/react":"^19.2.14","@axe-core/react":"^4.11.1","@types/jest-axe":"^3.5.9","@storybook/react":"^10.3.0","@types/react-dom":"^19.2.3","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^6.0.0","@storybook/addon-a11y":"^10.3.0","@storybook/react-vite":"^10.3.0","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1","@testing-library/user-event":"^14.6.1"},"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ui-kit_2.7.0_1774732669316_0.24706429276455744","host":"s3://npm-registry-packages-npm-production"}},"2.7.1":{"name":"@annondeveloper/ui-kit","version":"2.7.1","keywords":["react","components","ui-kit","design-system","typescript","zero-dependency"],"license":"MIT","_id":"@annondeveloper/ui-kit@2.7.1","maintainers":[{"name":"annondeveloper","email":"annondeveloper@proton.me"}],"homepage":"https://github.com/annondeveloper/ui-kit#readme","bugs":{"url":"https://github.com/annondeveloper/ui-kit/issues"},"bin":{"ui-kit":"dist/cli/index.js","ui-kit-mcp":"dist/mcp/index.js"},"dist":{"shasum":"90cb44156a053d0730a921d485ade21aa46560bc","tarball":"https://registry.npmjs.org/@annondeveloper/ui-kit/-/ui-kit-2.7.1.tgz","fileCount":210,"integrity":"sha512-34j6Rsj3+CO9owW4mBVbOd3Wj38065y7owPzUcdxR6D2rmnhJW053FL7GtJx/NqwHvN4qBKZYhh/WKnONLS+/g==","signatures":[{"sig":"MEQCIFq6rHt64eCPcnJGtN615/3aAGIkGP9CCwKi5dCPdx2gAiAcInEyt0V6o7DgiuPRnEt4HSoYBt1I8L/LlXoftb9OtA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@annondeveloper%2fui-kit@2.7.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":10970544},"main":"dist/esm/index.js","type":"module","types":"dist/esm/index.d.ts","module":"dist/esm/index.js","exports":{".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"}},"./rsc":{"import":{"types":"./dist/esm/rsc.d.ts","default":"./dist/esm/rsc.js"}},"./form":{"import":{"types":"./dist/esm/form.d.ts","default":"./dist/esm/form.js"}},"./lite":{"import":{"types":"./dist/esm/lite.d.ts","default":"./dist/esm/lite.js"}},"./theme":{"import":{"types":"./dist/esm/theme.d.ts","default":"./dist/esm/theme.js"}},"./premium":{"import":{"types":"./dist/esm/premium.d.ts","default":"./dist/esm/premium.js"}},"./css/all.css":"./dist/css/all.css","./css/theme.css":"./dist/css/theme.css","./web-components":{"import":{"types":"./dist/esm/web-components.d.ts","default":"./dist/esm/web-components.js"}},"./lite/styles.css":"./src/lite/lite.css","./css/components/*":"./dist/css/components/*"},"gitHead":"b6cc2d65274ec96fb6205438ab72cc9697b44aa3","scripts":{"test":"vitest run","build":"tsup && tsup --config tsup.cli.config.ts && tsup --config tsup.mcp.config.ts && node scripts/extract-css.js","build:mcp":"tsup --config tsup.mcp.config.ts && npm run build:registry","changelog":"node scripts/generate-changelog.js","storybook":"storybook dev -p 6006","test:a11y":"vitest run src/__tests__/core/a11y","typecheck":"tsc --noEmit","preversion":"node scripts/sync-versions.js","test:watch":"vitest","postversion":"git push && git push --tags","test:visual":"playwright test","build:report":"node scripts/generate-bundle-report.js","build:registry":"node dist/mcp/scripts/build-registry.js","build:storybook":"storybook build -o storybook-static","test:bundle-size":"node scripts/check-bundle-size.js"},"_npmUser":{"name":"annondeveloper","email":"annondeveloper@proton.me"},"repository":{"url":"git+https://github.com/annondeveloper/ui-kit.git","type":"git"},"_npmVersion":"10.9.7","description":"A zero-dependency React component library with built-in theming, motion, and accessibility.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.2","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vite":"^8.0.0","jsdom":"^29.0.0","react":"^19.2.4","vitest":"^4.1.0","jest-axe":"^10.0.0","react-dom":"^19.2.4","storybook":"^10.3.0","playwright":"^1.58.2","typescript":"^5.9.0","@types/react":"^19.2.14","@axe-core/react":"^4.11.1","@types/jest-axe":"^3.5.9","@storybook/react":"^10.3.0","@types/react-dom":"^19.2.3","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^6.0.0","@storybook/addon-a11y":"^10.3.0","@storybook/react-vite":"^10.3.0","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1","@testing-library/user-event":"^14.6.1"},"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0"},"optionalDependencies":{"zod":"^4.3.6","@modelcontextprotocol/sdk":"^1.28.0"},"_npmOperationalInternal":{"tmp":"tmp/ui-kit_2.7.1_1775302350559_0.4108817681666359","host":"s3://npm-registry-packages-npm-production"}},"2.7.2":{"name":"@annondeveloper/ui-kit","version":"2.7.2","keywords":["react","components","ui-kit","design-system","typescript","zero-dependency"],"license":"MIT","_id":"@annondeveloper/ui-kit@2.7.2","maintainers":[{"name":"annondeveloper","email":"annondeveloper@proton.me"}],"homepage":"https://github.com/annondeveloper/ui-kit#readme","bugs":{"url":"https://github.com/annondeveloper/ui-kit/issues"},"bin":{"ui-kit":"dist/cli/index.js","ui-kit-mcp":"dist/mcp/index.js"},"dist":{"shasum":"50de4d546e8c4e429814ae501832e309bd849ca7","tarball":"https://registry.npmjs.org/@annondeveloper/ui-kit/-/ui-kit-2.7.2.tgz","fileCount":210,"integrity":"sha512-gQxRZJyY9f8dUfwYI3UoTTGJqPMJa6wJBdnAsovtHhC0Z6oKFN/InTOZR3xaro0BdA4cLKP2jheOLYEbP0pNEA==","signatures":[{"sig":"MEUCIQCgFhAPIm2yKuHFUn2Rygo1don1j1jYWMABz/qZwwYNFwIgS4zRDDNsEf2e7T+TgLxf+WIVb8Nn6RYntaObxZioBXk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@annondeveloper%2fui-kit@2.7.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":11007145},"main":"dist/esm/index.js","type":"module","types":"dist/esm/index.d.ts","module":"dist/esm/index.js","exports":{".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"}},"./rsc":{"import":{"types":"./dist/esm/rsc.d.ts","default":"./dist/esm/rsc.js"}},"./form":{"import":{"types":"./dist/esm/form.d.ts","default":"./dist/esm/form.js"}},"./lite":{"import":{"types":"./dist/esm/lite.d.ts","default":"./dist/esm/lite.js"}},"./theme":{"import":{"types":"./dist/esm/theme.d.ts","default":"./dist/esm/theme.js"}},"./premium":{"import":{"types":"./dist/esm/premium.d.ts","default":"./dist/esm/premium.js"}},"./css/all.css":"./dist/css/all.css","./css/theme.css":"./dist/css/theme.css","./web-components":{"import":{"types":"./dist/esm/web-components.d.ts","default":"./dist/esm/web-components.js"}},"./lite/styles.css":"./src/lite/lite.css","./css/components/*":"./dist/css/components/*"},"gitHead":"a20a920e46eda2fa517aeaf634a3020dbbfbc5d9","scripts":{"test":"vitest run","build":"tsup && tsup --config tsup.cli.config.ts && tsup --config tsup.mcp.config.ts && node scripts/extract-css.js","build:mcp":"tsup --config tsup.mcp.config.ts && npm run build:registry","changelog":"node scripts/generate-changelog.js","storybook":"storybook dev -p 6006","test:a11y":"vitest run src/__tests__/core/a11y","typecheck":"tsc --noEmit","preversion":"node scripts/sync-versions.js","test:watch":"vitest","postversion":"git push && git push --tags","test:visual":"playwright test","build:report":"node scripts/generate-bundle-report.js","build:registry":"node dist/mcp/scripts/build-registry.js","build:storybook":"storybook build -o storybook-static","test:bundle-size":"node scripts/check-bundle-size.js"},"_npmUser":{"name":"annondeveloper","email":"annondeveloper@proton.me"},"repository":{"url":"git+https://github.com/annondeveloper/ui-kit.git","type":"git"},"_npmVersion":"10.9.7","description":"A zero-dependency React component library with built-in theming, motion, and accessibility.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.2","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vite":"^8.0.0","jsdom":"^29.0.0","react":"^19.2.4","vitest":"^4.1.0","jest-axe":"^10.0.0","react-dom":"^19.2.4","storybook":"^10.3.0","playwright":"^1.58.2","typescript":"^5.9.0","@types/react":"^19.2.14","@axe-core/react":"^4.11.1","@types/jest-axe":"^3.5.9","@storybook/react":"^10.3.0","@types/react-dom":"^19.2.3","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^6.0.0","@storybook/addon-a11y":"^10.3.0","@storybook/react-vite":"^10.3.0","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1","@testing-library/user-event":"^14.6.1"},"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0"},"optionalDependencies":{"zod":"^4.3.6","@modelcontextprotocol/sdk":"^1.28.0"},"_npmOperationalInternal":{"tmp":"tmp/ui-kit_2.7.2_1775307415359_0.9762774733125372","host":"s3://npm-registry-packages-npm-production"}},"2.7.3":{"name":"@annondeveloper/ui-kit","version":"2.7.3","keywords":["react","components","ui-kit","design-system","typescript","zero-dependency"],"license":"MIT","_id":"@annondeveloper/ui-kit@2.7.3","maintainers":[{"name":"annondeveloper","email":"annondeveloper@proton.me"}],"homepage":"https://github.com/annondeveloper/ui-kit#readme","bugs":{"url":"https://github.com/annondeveloper/ui-kit/issues"},"bin":{"ui-kit":"dist/cli/index.js","ui-kit-mcp":"dist/mcp/index.js"},"dist":{"shasum":"8763a6ce36c5a33c5019e10599af9eca0d55c5e9","tarball":"https://registry.npmjs.org/@annondeveloper/ui-kit/-/ui-kit-2.7.3.tgz","fileCount":210,"integrity":"sha512-Two99C+IPGMhvPxLufOdD/rLyDynRYkDYwLjOewXqlsL82nycut7e13EN040K5/N3kWt7QqUcc3hN+rLosZcAQ==","signatures":[{"sig":"MEYCIQDq0ZdzkPCaOgpGJAivSbh2EDGftJzhR8chJx2tvYR9PAIhANU3bPCP0UYIVidNvxj6C5R9tcvMt5HItuJqXOuC8GKr","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@annondeveloper%2fui-kit@2.7.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":11008318},"main":"dist/esm/index.js","type":"module","types":"dist/esm/index.d.ts","module":"dist/esm/index.js","exports":{".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"}},"./rsc":{"import":{"types":"./dist/esm/rsc.d.ts","default":"./dist/esm/rsc.js"}},"./form":{"import":{"types":"./dist/esm/form.d.ts","default":"./dist/esm/form.js"}},"./lite":{"import":{"types":"./dist/esm/lite.d.ts","default":"./dist/esm/lite.js"}},"./theme":{"import":{"types":"./dist/esm/theme.d.ts","default":"./dist/esm/theme.js"}},"./premium":{"import":{"types":"./dist/esm/premium.d.ts","default":"./dist/esm/premium.js"}},"./css/all.css":"./dist/css/all.css","./css/theme.css":"./dist/css/theme.css","./web-components":{"import":{"types":"./dist/esm/web-components.d.ts","default":"./dist/esm/web-components.js"}},"./lite/styles.css":"./src/lite/lite.css","./css/components/*":"./dist/css/components/*"},"gitHead":"582f21975ed5956beea07cba109f6b5db9272fad","scripts":{"test":"vitest run","build":"tsup && tsup --config tsup.cli.config.ts && tsup --config tsup.mcp.config.ts && node scripts/extract-css.js","build:mcp":"tsup --config tsup.mcp.config.ts && npm run build:registry","changelog":"node scripts/generate-changelog.js","storybook":"storybook dev -p 6006","test:a11y":"vitest run src/__tests__/core/a11y","typecheck":"tsc --noEmit","preversion":"node scripts/sync-versions.js","test:watch":"vitest","postversion":"git push && git push --tags","test:visual":"playwright test","build:report":"node scripts/generate-bundle-report.js","build:registry":"node dist/mcp/scripts/build-registry.js","build:storybook":"storybook build -o storybook-static","test:bundle-size":"node scripts/check-bundle-size.js"},"_npmUser":{"name":"annondeveloper","email":"annondeveloper@proton.me"},"repository":{"url":"git+https://github.com/annondeveloper/ui-kit.git","type":"git"},"_npmVersion":"10.9.7","description":"A zero-dependency React component library with built-in theming, motion, and accessibility.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.2","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vite":"^8.0.0","jsdom":"^29.0.0","react":"^19.2.4","vitest":"^4.1.0","jest-axe":"^10.0.0","react-dom":"^19.2.4","storybook":"^10.3.0","playwright":"^1.58.2","typescript":"^5.9.0","@types/react":"^19.2.14","@axe-core/react":"^4.11.1","@types/jest-axe":"^3.5.9","@storybook/react":"^10.3.0","@types/react-dom":"^19.2.3","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^6.0.0","@storybook/addon-a11y":"^10.3.0","@storybook/react-vite":"^10.3.0","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1","@testing-library/user-event":"^14.6.1"},"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0"},"optionalDependencies":{"zod":"^4.3.6","@modelcontextprotocol/sdk":"^1.28.0"},"_npmOperationalInternal":{"tmp":"tmp/ui-kit_2.7.3_1775312751678_0.5736614619960163","host":"s3://npm-registry-packages-npm-production"}},"2.8.0":{"name":"@annondeveloper/ui-kit","version":"2.8.0","keywords":["react","components","ui-kit","design-system","typescript","zero-dependency"],"license":"MIT","_id":"@annondeveloper/ui-kit@2.8.0","maintainers":[{"name":"annondeveloper","email":"annondeveloper@proton.me"}],"homepage":"https://github.com/annondeveloper/ui-kit#readme","bugs":{"url":"https://github.com/annondeveloper/ui-kit/issues"},"bin":{"ui-kit":"dist/cli/index.js","ui-kit-mcp":"dist/mcp/index.js"},"dist":{"shasum":"4dd078d8b40625a1940424ab768fc76df9685f8b","tarball":"https://registry.npmjs.org/@annondeveloper/ui-kit/-/ui-kit-2.8.0.tgz","fileCount":218,"integrity":"sha512-yoLZGOktTJ3aNFsjvHIdwvwGtjTUMrvbGxUAQulzxW3rNc0EG848VFudquh06KJmw4dbYl+2qe2SRuoKci5Whg==","signatures":[{"sig":"MEYCIQCkADRXJTRHqE037SZOdRg2NE0yo58RgpRkppsZ2q6xKwIhAKOxHMfomWGwDZx6FOlBdmewI8jMhnMBraZxMT8ztfZc","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@annondeveloper%2fui-kit@2.8.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":11486905},"main":"dist/esm/index.js","type":"module","types":"dist/esm/index.d.ts","module":"dist/esm/index.js","exports":{".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"}},"./rsc":{"import":{"types":"./dist/esm/rsc.d.ts","default":"./dist/esm/rsc.js"}},"./form":{"import":{"types":"./dist/esm/form.d.ts","default":"./dist/esm/form.js"}},"./lite":{"import":{"types":"./dist/esm/lite.d.ts","default":"./dist/esm/lite.js"}},"./theme":{"import":{"types":"./dist/esm/theme.d.ts","default":"./dist/esm/theme.js"}},"./premium":{"import":{"types":"./dist/esm/premium.d.ts","default":"./dist/esm/premium.js"}},"./css/all.css":"./dist/css/all.css","./css/theme.css":"./dist/css/theme.css","./web-components":{"import":{"types":"./dist/esm/web-components.d.ts","default":"./dist/esm/web-components.js"}},"./lite/styles.css":"./src/lite/lite.css","./css/components/*":"./dist/css/components/*"},"gitHead":"dddec308dd4e4fb58dac80d146657712ef2a8eda","scripts":{"test":"vitest run","build":"tsup && tsup --config tsup.cli.config.ts && tsup --config tsup.mcp.config.ts && node scripts/extract-css.js && npx tsx scripts/extract-component-meta.ts","build:mcp":"tsup --config tsup.mcp.config.ts && npm run build:registry","changelog":"node scripts/generate-changelog.js","storybook":"storybook dev -p 6006","test:a11y":"vitest run src/__tests__/core/a11y","typecheck":"tsc --noEmit","build:meta":"npx tsx scripts/extract-component-meta.ts","preversion":"node scripts/sync-versions.js","test:watch":"vitest","postversion":"git push && git push --tags","test:visual":"playwright test","build:report":"node scripts/generate-bundle-report.js","build:registry":"node dist/mcp/scripts/build-registry.js","build:storybook":"storybook build -o storybook-static","test:bundle-size":"node scripts/check-bundle-size.js"},"_npmUser":{"name":"annondeveloper","email":"annondeveloper@proton.me"},"repository":{"url":"git+https://github.com/annondeveloper/ui-kit.git","type":"git"},"_npmVersion":"10.9.7","description":"A zero-dependency React component library with built-in theming, motion, and accessibility.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.2","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vite":"^8.0.0","jsdom":"^29.0.0","react":"^19.2.4","vitest":"^4.1.0","jest-axe":"^10.0.0","react-dom":"^19.2.4","storybook":"^10.3.0","playwright":"^1.58.2","typescript":"^5.9.0","@types/react":"^19.2.14","@axe-core/react":"^4.11.1","@types/jest-axe":"^3.5.9","@storybook/react":"^10.3.0","@types/react-dom":"^19.2.3","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^6.0.0","@storybook/addon-a11y":"^10.3.0","@storybook/react-vite":"^10.3.0","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1","@testing-library/user-event":"^14.6.1"},"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0"},"optionalDependencies":{"zod":"^4.3.6","@modelcontextprotocol/sdk":"^1.28.0"},"_npmOperationalInternal":{"tmp":"tmp/ui-kit_2.8.0_1775377173350_0.01642280021408138","host":"s3://npm-registry-packages-npm-production"}},"2.8.1":{"name":"@annondeveloper/ui-kit","version":"2.8.1","type":"module","description":"A zero-dependency React component library with built-in theming, motion, and accessibility.","main":"dist/esm/index.js","module":"dist/esm/index.js","types":"dist/esm/index.d.ts","exports":{".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"}},"./form":{"import":{"types":"./dist/esm/form.d.ts","default":"./dist/esm/form.js"}},"./theme":{"import":{"types":"./dist/esm/theme.d.ts","default":"./dist/esm/theme.js"}},"./lite":{"import":{"types":"./dist/esm/lite.d.ts","default":"./dist/esm/lite.js"}},"./premium":{"import":{"types":"./dist/esm/premium.d.ts","default":"./dist/esm/premium.js"}},"./lite/styles.css":"./src/lite/lite.css","./css/theme.css":"./dist/css/theme.css","./css/all.css":"./dist/css/all.css","./css/components/*":"./dist/css/components/*","./rsc":{"import":{"types":"./dist/esm/rsc.d.ts","default":"./dist/esm/rsc.js"}},"./web-components":{"import":{"types":"./dist/esm/web-components.d.ts","default":"./dist/esm/web-components.js"}}},"scripts":{"build":"tsup && tsup --config tsup.cli.config.ts && tsup --config tsup.mcp.config.ts && node scripts/extract-css.js && npx tsx scripts/extract-component-meta.ts","build:meta":"npx tsx scripts/extract-component-meta.ts","build:registry":"node dist/mcp/scripts/build-registry.js","build:mcp":"tsup --config tsup.mcp.config.ts && npm run build:registry","typecheck":"tsc --noEmit","test":"vitest run","test:watch":"vitest","test:a11y":"vitest run src/__tests__/core/a11y","test:bundle-size":"node scripts/check-bundle-size.js","changelog":"node scripts/generate-changelog.js","build:report":"node scripts/generate-bundle-report.js","storybook":"storybook dev -p 6006","build:storybook":"storybook build -o storybook-static","test:visual":"playwright test","preversion":"node scripts/sync-versions.js","postversion":"git push && git push --tags"},"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0"},"devDependencies":{"@axe-core/react":"^4.11.1","@storybook/addon-a11y":"^10.3.0","@storybook/react":"^10.3.0","@storybook/react-vite":"^10.3.0","@testing-library/dom":"^10.4.1","@testing-library/jest-dom":"^6.9.1","@testing-library/react":"^16.3.2","@testing-library/user-event":"^14.6.1","@types/jest-axe":"^3.5.9","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.0","jest-axe":"^10.0.0","jsdom":"^29.0.0","playwright":"^1.58.2","react":"^19.2.4","react-dom":"^19.2.4","storybook":"^10.3.0","tsup":"^8.5.1","typescript":"^5.9.0","vite":"^8.0.0","vitest":"^4.1.0"},"repository":{"type":"git","url":"git+https://github.com/annondeveloper/ui-kit.git"},"license":"MIT","keywords":["react","components","ui-kit","design-system","typescript","zero-dependency"],"sideEffects":false,"bin":{"ui-kit":"dist/cli/index.js","ui-kit-mcp":"dist/mcp/index.js"},"optionalDependencies":{"@modelcontextprotocol/sdk":"^1.28.0","zod":"^4.3.6"},"_id":"@annondeveloper/ui-kit@2.8.1","gitHead":"775936a0fdd286e182811ddb69047c9884352c68","bugs":{"url":"https://github.com/annondeveloper/ui-kit/issues"},"homepage":"https://github.com/annondeveloper/ui-kit#readme","_nodeVersion":"22.22.2","_npmVersion":"10.9.7","dist":{"integrity":"sha512-swIV6mKex5CrJG1dLsbQvktJ0qRukRFHmodN7ESJrodpSwYms5f9P6g0AZcBYWlPiugBl0YdMXHcVZ1bgIXKJg==","shasum":"d7381c397e76faa6910fbd50a70931e37d557c80","tarball":"https://registry.npmjs.org/@annondeveloper/ui-kit/-/ui-kit-2.8.1.tgz","fileCount":218,"unpackedSize":11504057,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@annondeveloper%2fui-kit@2.8.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIEyk7y+NZrNzN3zBJqDrLbR/npWtSq/58YHVEQzkrVlmAiBpugltNfeAdEMcsT/10eTbNQUpP/LL3wVH8Esg0qDCkw=="}]},"_npmUser":{"name":"annondeveloper","email":"annondeveloper@proton.me"},"directories":{},"maintainers":[{"name":"annondeveloper","email":"annondeveloper@proton.me"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/ui-kit_2.8.1_1775396316361_0.8173592544825055"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-18T16:35:32.767Z","modified":"2026-04-05T13:38:36.913Z","0.1.0":"2026-03-18T16:35:33.013Z","0.2.0":"2026-03-18T17:19:36.950Z","0.2.1":"2026-03-18T17:48:36.643Z","0.2.2":"2026-03-18T18:12:17.353Z","0.2.3":"2026-03-19T02:02:00.151Z","0.2.4":"2026-03-19T02:36:59.352Z","0.3.0":"2026-03-19T02:58:29.569Z","0.4.0":"2026-03-19T03:15:17.073Z","2.0.0":"2026-03-20T17:31:50.826Z","2.0.1":"2026-03-20T18:01:00.596Z","2.0.2":"2026-03-20T18:08:05.116Z","2.0.3":"2026-03-20T18:26:57.002Z","2.0.4":"2026-03-20T18:51:30.694Z","2.1.0":"2026-03-21T02:50:06.119Z","2.2.0":"2026-03-21T03:27:45.823Z","2.3.0":"2026-03-21T04:20:44.159Z","2.5.1":"2026-03-28T07:51:41.183Z","2.6.0":"2026-03-28T13:00:49.214Z","2.7.0":"2026-03-28T21:17:49.550Z","2.7.1":"2026-04-04T11:32:30.760Z","2.7.2":"2026-04-04T12:56:55.661Z","2.7.3":"2026-04-04T14:25:51.875Z","2.8.0":"2026-04-05T08:19:33.558Z","2.8.1":"2026-04-05T13:38:36.571Z"},"bugs":{"url":"https://github.com/annondeveloper/ui-kit/issues"},"license":"MIT","homepage":"https://github.com/annondeveloper/ui-kit#readme","keywords":["react","components","ui-kit","design-system","typescript","zero-dependency"],"repository":{"type":"git","url":"git+https://github.com/annondeveloper/ui-kit.git"},"description":"A zero-dependency React component library with built-in theming, motion, and accessibility.","maintainers":[{"name":"annondeveloper","email":"annondeveloper@proton.me"}],"readme":"[![Made for AI Assistants](https://img.shields.io/badge/Made_for-AI_Assistants-blueviolet?style=flat-square&logo=anthropic&logoColor=white)](https://modelcontextprotocol.io)\n[![npm version](https://img.shields.io/npm/v/@annondeveloper/ui-kit)](https://www.npmjs.com/package/@annondeveloper/ui-kit)\n[![bundle size](https://img.shields.io/bundlephobia/minzip/@annondeveloper/ui-kit)](https://bundlephobia.com/package/@annondeveloper/ui-kit)\n[![license](https://img.shields.io/npm/l/@annondeveloper/ui-kit)](https://github.com/annondeveloper/ui-kit/blob/main/LICENSE)\n[![TypeScript](https://img.shields.io/badge/TypeScript-5.0+-blue)](https://www.typescriptlang.org/)\n[![JSR](https://jsr.io/badges/@annondeveloper/ui-kit)](https://jsr.io/@annondeveloper/ui-kit)\n\n# @annondeveloper/ui-kit v2\n\n> The first React component library built for AI agents. 147 zero-dependency components that AI assistants can discover, understand, and use via MCP.\n\n## How It Works\n\n**Step 1.** Install the library\n\n```bash\nnpm install @annondeveloper/ui-kit\n```\n\n**Step 2.** Connect your AI assistant (pick one)\n\n```bash\n# Zero setup — hosted MCP (works instantly, no install needed)\n# Add to your MCP config: { \"url\": \"https://ui-kit-mcp.annondeveloper.workers.dev/sse\" }\n\n# Or run locally\nnpx @annondeveloper/ui-kit mcp\n```\n\n**Step 3.** Ask your AI to build\n\n> \"Build a dashboard with MetricCard, DataTable, and TimeSeriesChart using ui-kit\"\n\nYour AI generates production code directly:\n\n```tsx\nimport { UIProvider, MetricCard, DataTable, TimeSeriesChart } from '@annondeveloper/ui-kit'\n\nfunction Dashboard({ metrics, tableData, series }) {\n  return (\n    <UIProvider>\n      <div style={{ display: 'grid', gridTemplateColumns: 'repeat(3, 1fr)', gap: '1rem' }}>\n        <MetricCard title=\"Requests\" value=\"12.4K\" trend=\"up\" />\n        <MetricCard title=\"Latency\" value=\"42ms\" trend=\"down\" />\n        <MetricCard title=\"Error Rate\" value=\"0.12%\" trend=\"down\" />\n      </div>\n      <TimeSeriesChart series={series} height={300} />\n      <DataTable columns={columns} data={tableData} searchPlaceholder=\"Search...\" />\n    </UIProvider>\n  )\n}\n```\n\n## MCP Server\n\nThe built-in MCP server exposes 6 tools that give AI assistants structured access to the full component library:\n\n| Tool | What it does |\n|------|-------------|\n| `list_components` | Browse all 147 components with descriptions, filterable by category or tier |\n| `get_component` | Get full API reference for any component — props, types, defaults, code examples |\n| `search_components` | Semantic search across components by use case (e.g., \"data visualization\", \"form inputs\") |\n| `get_theme` | Retrieve theme tokens, OKLCH color system details, and customization API |\n| `generate_snippet` | Generate working TSX code with correct imports for any component combination |\n| `get_icons` | Browse 50+ built-in SVG icons with search and usage examples |\n\n### Hosted (zero setup — just add the URL)\n\nNo install needed. Connect any MCP client to the hosted server:\n\n```json\n{\n  \"mcpServers\": {\n    \"ui-kit\": {\n      \"url\": \"https://ui-kit-mcp.annondeveloper.workers.dev/sse\"\n    }\n  }\n}\n```\n\n### Local (for offline use)\n\n```bash\nnpx @annondeveloper/ui-kit mcp\n```\n\nOr add to your MCP config (`claude_desktop_config.json`, `.cursor/mcp.json`):\n\n```json\n{\n  \"mcpServers\": {\n    \"ui-kit\": {\n      \"command\": \"npx\",\n      \"args\": [\"@annondeveloper/ui-kit\", \"mcp\"]\n    }\n  }\n}\n```\n\n### Try it\n\nAsk your AI assistant:\n- \"Build a dashboard with MetricCard, DataTable, and TimeSeriesChart using ui-kit\"\n- \"Create a multi-step form wizard with validation\"\n- \"Add a real-time log viewer with severity filtering\"\n\n## AI Integrations\n\nWorks with every major AI coding assistant. One URL, zero install:\n\n| Assistant | Setup | Guide |\n|-----------|-------|-------|\n| **Claude Code** | Full plugin with 5 skills + 2 agents + hooks | [plugins/claude-code](plugins/claude-code/README.md) |\n| **Claude Desktop** | Add MCP URL to `claude_desktop_config.json` | See MCP section above |\n| **Cursor** | Copy `.cursor/mcp.json` into your project | [plugins/cursor](plugins/cursor/README.md) |\n| **VS Code / Copilot** | Add to `.vscode/mcp.json` | [plugins/vscode](plugins/vscode/README.md) |\n| **Windsurf** | Add to MCP settings | [plugins/windsurf](plugins/windsurf/README.md) |\n| **Codex CLI** | Add to `~/.codex/config.json` | [plugins/codex](plugins/codex/README.md) |\n\n**Claude Code plugin features:**\n- `/ui-kit:component-finder` — search 147 components by name or use case\n- `/ui-kit:generate-component` — produce working TSX with correct imports\n- `/ui-kit:design-system` — learn Aurora Fluid, OKLCH, motion levels\n- `/ui-kit:tier-guide` — choose the right weight tier\n- `/ui-kit:audit-accessibility` — check WCAG AA compliance\n- `component-architect` agent — designs multi-component layouts\n- `accessibility-reviewer` agent — deep a11y audit\n\n## Quick Start\n\nFor manual usage without an AI assistant:\n\n```bash\nnpm install @annondeveloper/ui-kit\n```\n\n```tsx\nimport { UIProvider, Button, Card, MetricCard } from '@annondeveloper/ui-kit'\n\nfunction App() {\n  return (\n    <UIProvider>\n      <Card>\n        <Button variant=\"primary\">Deploy</Button>\n        <MetricCard title=\"CPU\" value=\"87.4%\" trend=\"up\" />\n      </Card>\n    </UIProvider>\n  )\n}\n```\n\n## Features\n\n- **Zero dependencies** — only `react` and `react-dom` peer deps\n- **147 components** — 73 general-purpose + 74 domain-specific across 3 weight tiers\n- **3 weight tiers** — Lite (144), Standard (147), Premium (14) — optimize your bundle\n- **AI-native** — Claude Code plugin, Cursor/VS Code/Windsurf/Codex integrations, hosted MCP server\n- **MCP server** — 6 tools for component discovery, API reference, code generation, theme tokens\n- **Aurora Fluid design** — deep atmospheric surfaces, ambient glows, OKLCH colors\n- **Physics animations** — real spring solver, configurable motion levels (0-3)\n- **Built-in form engine** — `createForm`, `useForm`, validators, zero external deps\n- **15 pre-built themes** — including 5 new themes added in v2.4\n- **`classNames` prop** — deep customization of internal component elements\n- **Accessibility** — WAI-ARIA patterns, keyboard navigation, screen reader support\n- **Responsive** — container queries, fluid typography, touch/mouse/gamepad support\n- **Theme generator** — generate complete theme from single brand color\n\n## Documentation\n\n- [Migration Guide](docs/migration-v2.md) -- Upgrading from v1 to v2\n- [Theming](docs/theming.md) -- OKLCH colors, theme generation, customization\n- [Form Engine](docs/forms.md) -- Built-in form state, validators, auto-wiring\n- [Animation](docs/animation.md) -- Physics springs, timeline, stagger, scroll\n- [Design Spec](docs/superpowers/specs/2026-03-20-ui-kit-v2-design.md) -- Full architecture document\n\n### New in v2.7\n\n- [AI DataTable](docs/ai-datatable.md) -- AI-powered filter suggestions for DataTable\n- [RSC Support](docs/rsc.md) -- React Server Components compatibility\n- [Web Components](docs/web-components.md) -- Web Components wrapper for framework-agnostic usage\n- [MCP Server](docs/mcp-server.md) -- Model Context Protocol server for AI-assisted workflows\n\n### New in v2.5\n\n- [Motion Choreography](docs/choreography.md) -- Sequenced multi-step animations with 5 presets\n- [Container Queries](docs/container-queries.md) -- Container-responsive design tokens and components\n- [View Transitions](docs/view-transitions.md) -- Native View Transitions API with 6 presets\n- [Theme Editor](docs/theme-editor.md) -- Color harmony, contrast audit, multi-format export\n- [AI Generator](docs/ai-generator.md) -- Template gallery, custom composition, 5 framework output\n- [CLI Scaffolding](docs/cli-scaffolding.md) -- Project templates, component add, Figma export\n- [Cursor MCP Setup](docs/guides/cursor-mcp-setup.md) -- Connect the MCP server to Cursor\n- [Figma Plugin](docs/figma-plugin.md) -- Token sync between code and Figma Variables\n- [Performance Dashboard](docs/performance-dashboard.md) -- Bundle tracking, render profiler, Web Vitals\n\n## Next-Gen Features\n\n**AI DataTable Suggestions** -- DataTable with AI-powered filter suggestions that analyze column data to surface outliers, patterns, and top-N values automatically.\n\n**RSC Support** -- Full React Server Components compatibility. Components work in both client and server rendering contexts without extra configuration.\n\n**Web Components Wrapper** -- Use ui-kit components in any framework (Vue, Svelte, vanilla JS) via custom elements. Import the wrapper and register components as `<ui-button>`, `<ui-card>`, etc.\n\n**MCP Server** -- Built-in Model Context Protocol server that exposes component discovery, API reference, code generation, and theme tools to AI assistants.\n\n**Motion Choreography** -- Orchestrate multi-step animation sequences with `Choreography` class, 5 presets (cascade, stagger-grid, wave, spiral, focus-in), and scroll-triggered choreography via `useScrollChoreography`.\n\n**Container Query Design Tokens** -- `<ContainerQuery>` component, `useContainerSize()` hook, `resolveResponsive()` utility, and `CONTAINER_BREAKPOINTS` for building components that adapt to their container.\n\n**View Transitions API** -- `useViewTransition()` hook with 6 presets (morph, crossfade, slide-left, slide-right, slide-up, zoom) and `assignTransitionName()` for element morphing.\n\n**Theme Editor** -- Color harmony engine (5 types), WCAG contrast audit, export to CSS/Tailwind/Figma/CSS-in-JS, and shareable URL scheme.\n\n**AI Component Generator** -- Template gallery (dashboard, form, marketing, saas, docs), custom composition builder, and code output for React, Vue, Svelte, and HTML.\n\n**CLI Scaffolding** -- `add` copies components, `create` scaffolds full projects from 5 templates, `figma-export` generates Figma Variables JSON.\n\n**Figma Plugin** -- Export theme tokens as Figma Variables and import them via the Aurora UI Kit Token Sync plugin.\n\n**Performance Dashboard** -- Bundle size tracking with budget gauge, runtime render profiler, Web Vitals integration, and CI regression detection.\n\n## CLI Commands\n\n```bash\nnpx @annondeveloper/ui-kit init                                    # Copy theme + setup\nnpx @annondeveloper/ui-kit add <component> [--tier] [--out-dir]    # Copy component source\nnpx @annondeveloper/ui-kit create <name> --template <template>     # Scaffold project\nnpx @annondeveloper/ui-kit list                                    # List all 147 components\nnpx @annondeveloper/ui-kit theme <color>                           # Generate theme CSS\nnpx @annondeveloper/ui-kit figma-export --theme <name> --output <file>  # Export Figma tokens\nnpx @annondeveloper/ui-kit mcp                                     # Start MCP server for AI assistants\n```\n\n## Component List\n\n### General-Purpose Components (73)\n\n| Component | Description |\n|-----------|-------------|\n| `ActionIcon` | Icon-only button with tooltip |\n| `Accordion` | Collapsible sections with single/multiple mode |\n| `Affix` | Fixed-position wrapper for floating elements |\n| `Alert` | Inline status messages with variants |\n| `AnimatedCounter` | Smooth number animation with easing |\n| `AppShell` | Full application layout scaffold |\n| `Avatar` | Image/initials avatar with status dot |\n| `AvatarUpload` | Avatar with upload/crop functionality |\n| `BackToTop` | Scroll-to-top floating button |\n| `Badge` | Pill-shaped label with color presets |\n| `Breadcrumbs` | Hierarchical navigation trail |\n| `Button` | Primary action with variants and loading |\n| `ButtonGroup` | Grouped button container |\n| `Calendar` | Standalone calendar display |\n| `Card` | Styled container with subcomponents |\n| `Carousel` | Image/content carousel with navigation |\n| `Checkbox` | Themed checkbox with indeterminate state |\n| `Chip` | Compact interactive tag element |\n| `ColorInput` | Color picker with hue/saturation panel |\n| `Combobox` | Searchable select with async loading |\n| `CommandBar` | Universal command palette (Cmd+K) |\n| `ConfirmDialog` | Confirmation modal with danger variant |\n| `CopyButton` | One-click copy to clipboard |\n| `DatePicker` | Calendar-based date selection |\n| `DateRangePicker` | Date range selection with presets |\n| `Dialog` | Native dialog with animated entry/exit |\n| `Divider` | Horizontal/vertical separator |\n| `Drawer` | Slide-out panel from any edge |\n| `DropdownMenu` | Action menu with submenus and shortcuts |\n| `EmptyState` | Decorative placeholder with icon and actions |\n| `FileUpload` | Drag-and-drop file upload with preview |\n| `FilterPill` | Rounded filter toggle with count |\n| `FormInput` | Themed input with label and validation |\n| `Highlight` | Text highlighting with search match |\n| `Indicator` | Dot/badge indicator overlay |\n| `InlineEdit` | Click-to-edit text field |\n| `Kbd` | Keyboard shortcut display |\n| `Link` | Styled anchor with underline animation |\n| `MultiSelect` | Multi-value select dropdown |\n| `Navbar` | Top-level application navigation bar |\n| `NativeTooltip` | Lightweight tooltip using title attribute |\n| `NotificationStack` | Toast notification cards with auto-dismiss |\n| `NumberInput` | Numeric input with increment/decrement |\n| `OtpInput` | One-time password code entry |\n| `Pagination` | Page navigation with controls |\n| `PasswordInput` | Password field with visibility toggle |\n| `PinInput` | PIN code entry with auto-advance |\n| `Popover` | Anchored popover with arrow and focus management |\n| `Progress` | Progress bar with indeterminate mode |\n| `RadioGroup` | Radio button group with descriptions |\n| `Rating` | Star rating input with half-star support |\n| `ScrollReveal` | Scroll-triggered reveal animation |\n| `SearchInput` | Search field with debounce and clear |\n| `SegmentedControl` | Segmented toggle selector |\n| `Select` | Themed dropdown select |\n| `Sheet` | Slide-over drawer with swipe dismiss |\n| `Sidebar` | Collapsible side navigation |\n| `Skeleton` | Shimmer loading placeholder |\n| `Slider` | Range slider with keyboard support |\n| `Spoiler` | Collapsible content with show more/less |\n| `Spotlight` | Spotlight search overlay |\n| `StatusBadge` | Status indicator with colored dot |\n| `StatusPulse` | Animated status dot with pulse ring |\n| `Stepper` | Step indicator with progress |\n| `SuccessCheckmark` | Animated SVG checkmark |\n| `Tabs` | Tabbed interface with animated indicator |\n| `TagInput` | Multi-value input with tag chips |\n| `Textarea` | Auto-growing text area |\n| `Toast` | Pre-themed toast notifications |\n| `ToggleSwitch` | Boolean toggle switch |\n| `Tooltip` | Popover-based tooltip with positioning |\n| `Typography` | Semantic text with fluid sizing |\n| `UIProvider` | Theme, motion, and density provider |\n\n### Domain-Specific Components (74)\n\n| Component | Description |\n|-----------|-------------|\n| `BackgroundBeams` | Animated sweeping light beams |\n| `BackgroundBoxes` | Floating animated grid boxes |\n| `BorderBeam` | Animated conic-gradient border |\n| `Card3D` | 3D perspective tilt with glare |\n| `CodeEditor` | Code editor with syntax highlighting |\n| `ConfidenceBar` | Probability bar with threshold zones |\n| `ConnectionTestPanel` | Step-by-step connectivity test UI |\n| `CopyBlock` | Code display with one-click copy |\n| `CoreChart` | CPU core utilization grid |\n| `Cropper` | Image cropping tool |\n| `CSVExportButton` | One-click CSV generation and download |\n| `ColumnVisibilityToggle` | Column show/hide dropdown |\n| `DashboardGrid` | Draggable dashboard layout |\n| `DataTable` | Full-featured data grid with search, sort, filter |\n| `DensitySelector` | Compact/comfortable/spacious control |\n| `DiffViewer` | Side-by-side/inline diff viewer |\n| `DiskMountBar` | Disk mount utilization bars |\n| `EncryptedText` | Matrix-style character scramble/reveal |\n| `EntityCard` | Infrastructure resource card |\n| `EvervaultCard` | Matrix-style encrypted card |\n| `FlipWords` | Rotating word animation |\n| `GeoMap` | SVG geographic visualization |\n| `GlowCard` | Mouse-tracking radial glow card |\n| `HeatmapCalendar` | GitHub-style contribution heatmap |\n| `HeroHighlight` | Gradient text highlight effect |\n| `InfiniteScroll` | Virtualized infinite-scroll list |\n| `JsonViewer` | Interactive JSON tree viewer |\n| `KanbanColumn` | Kanban board column with cards |\n| `LiveFeed` | Real-time event feed with auto-scroll |\n| `LogViewer` | Log stream viewer with severity colors |\n| `MeteorShower` | Falling meteor streak animation |\n| `MetricCard` | Dashboard stat tile with sparkline |\n| `NetworkTrafficCard` | Network throughput display |\n| `NumberTicker` | Rolling digit counter |\n| `OrbitingCircles` | Orbiting icon animation |\n| `PipelineStage` | Horizontal pipeline visualization |\n| `PortStatusGrid` | Network port status indicator grid |\n| `PropertyList` | Key-value detail panel |\n| `RackDiagram` | Data center rack visualization |\n| `RealtimeValue` | Live data display with freshness tracking |\n| `ResponsiveCard` | Container-query adaptive card |\n| `RichTextEditor` | WYSIWYG rich text editor |\n| `RingChart` | SVG donut chart with center label |\n| `Ripple` | Click ripple effect |\n| `SeverityTimeline` | Event timeline with severity dots |\n| `ServiceStrip` | Horizontal service badge strip |\n| `ShimmerButton` | Shimmering gradient button |\n| `SmartTable` | DataTable with auto-generated filter suggestions |\n| `SortableList` | Drag-and-drop reorderable list |\n| `Sparkline` | Inline SVG sparkline chart |\n| `SpotlightCard` | Spotlight hover effect card |\n| `StepWizard` | Multi-step form wizard |\n| `StorageBar` | Segmented horizontal bar |\n| `StreamingText` | AI/LLM streaming text with cursor |\n| `SwitchFaceplate` | Network switch port grid |\n| `TableOfContents` | Auto-generated page navigation |\n| `TextReveal` | Scroll-triggered character-by-character unveil |\n| `ThresholdGauge` | Semicircular gauge with threshold zones |\n| `TimePicker` | Time selection input |\n| `TimeRangeSelector` | Compact time range pill selector |\n| `Timeline` | Vertical event timeline |\n| `TimeSeriesChart` | Full SVG line chart with multi-series |\n| `Tour` | Guided product tour with step highlights |\n| `TracingBeam` | Scroll-tracing side beam |\n| `TransferList` | Dual-list item transfer |\n| `TreeView` | Hierarchical tree with expand/collapse |\n| `TruncatedText` | Auto-truncating text with tooltip |\n| `TypingIndicator` | \"Someone is typing\" animation |\n| `UpstreamDashboard` | Service monitoring layout |\n| `UptimeTracker` | Daily uptime bar strip |\n| `UtilizationBar` | Horizontal bar with threshold colors |\n| `ViewTransitionLink` | View Transitions API integration |\n| `WavyBackground` | Animated SVG sine waves |\n\n### New in v2.5 (1 component)\n\n| Component | Description |\n|-----------|-------------|\n| `ContainerQuery` | Container query wrapper with render-prop size info |\n\n### New in v2.4 (30 components)\n\nThe following components were added in the v2.4 release:\n\n**General-purpose:** ActionIcon, Affix, AvatarUpload, BackToTop, ButtonGroup, Calendar, Carousel, Chip, CopyButton, DateRangePicker, Highlight, Indicator, MultiSelect, NumberInput, PasswordInput, PinInput, SegmentedControl, Spoiler, Spotlight, Stepper, TableOfContents, Textarea, TimePicker, Timeline, TransferList\n\n**Domain-specific:** CodeEditor, Cropper, JsonViewer, RichTextEditor, Tour\n\n### Core Engine Modules\n\n| Module | Size | Description |\n|--------|------|-------------|\n| `core/styles` | ~1KB | useStyles(), css tag, adoptedStyleSheets, SSR |\n| `core/motion` | ~3.5KB | Spring solver, WAAPI, timeline, stagger, scroll, FLIP |\n| `core/input` | ~2.4KB | Unified pointer, gestures, focus, gamepad, multitouch |\n| `core/tokens` | ~1.5KB | OKLCH theme, generateTheme(), applyTheme() |\n| `core/a11y` | ~1KB | Focus trap, roving tabindex, live region, stable ID |\n| `core/icons` | ~2KB | 50+ built-in SVG icons, all overridable |\n| `core/forms` | ~2KB | createForm, useForm, validators, Form, FieldArray |\n| `core/utils` | ~0.5KB | cn(), formatting, sanitize, clamp |\n\n## Entry Points\n\n```typescript\nimport { Button, Dialog, DataTable } from '@annondeveloper/ui-kit'\nimport { Button as LiteButton } from '@annondeveloper/ui-kit/lite'\nimport { Button as PremiumButton } from '@annondeveloper/ui-kit/premium'\nimport { createForm, useForm, v } from '@annondeveloper/ui-kit/form'\nimport { generateTheme, themeToCSS } from '@annondeveloper/ui-kit/theme'\nimport '@annondeveloper/ui-kit/css/theme.css'  // Standalone CSS (optional)\n```\n\n## Weight Tiers\n\n| Tier | Components | Description |\n|------|-----------|-------------|\n| Standard | 147 | Full-featured with motion, theming, a11y |\n| Lite | 144 | Minimal wrappers, no motion (~0.3-1.2 KB each) |\n| Premium | 14 | Aurora glow, spring animations, shimmer effects |\n\n## Bundle Size\n\n| Metric | Value |\n|--------|-------|\n| Total (gzipped) | ~384 KB |\n| Budget | 400 KB |\n| Tree-shaking | Full ESM — import only what you use |\n\nTypical app importing ~20 components: **~15-25 KB gzipped** after tree-shaking.\n\n## Motion Levels\n\n```tsx\n<UIProvider motion={2}>  {/* 0=none, 1=subtle, 2=expressive, 3=cinematic */}\n```\n\n---\n\n## v1 Documentation\n\n> The React component library for monitoring dashboards, infrastructure tools, and professional applications.\n\n53 components &bull; Dark/Light theme &bull; Accessible &bull; AI-ready &bull; Real-time primitives &bull; Tree-shakeable\n\n[![npm](https://img.shields.io/npm/v/@annondeveloper/ui-kit)](https://www.npmjs.com/package/@annondeveloper/ui-kit)\n&nbsp;\n[GitHub](https://github.com/annondeveloper/ui-kit)\n&nbsp;&bull;&nbsp;\n[JSR](https://jsr.io/@annondeveloper/ui-kit)\n&nbsp;&bull;&nbsp;\n[Demo](https://annondeveloper.github.io/ui-kit)\n\n---\n\n## Quick Start\n\n### Install\n\n```bash\n# npm\nnpm install @annondeveloper/ui-kit\n\n# pnpm\npnpm add @annondeveloper/ui-kit\n\n# yarn\nyarn add @annondeveloper/ui-kit\n\n# bun\nbun add @annondeveloper/ui-kit\n\n# jsr\nnpx jsr add @annondeveloper/ui-kit\n```\n\n### Peer Dependencies\n\n```bash\nnpm install react react-dom\n```\n\nv2 has zero external dependencies -- only `react` ^19 and `react-dom` ^19 are required as peer dependencies.\n\n### Theme Setup\n\nImport the theme CSS once in your app's root layout:\n\n```tsx\nimport '@annondeveloper/ui-kit/theme.css'\n```\n\nOr copy the CSS custom properties into your own stylesheet. See [Theme System](#theme-system) below.\n\n### Minimal Example\n\n```tsx\nimport { Button, MetricCard, StatusBadge, ToastProvider, useToast } from '@annondeveloper/ui-kit'\n\nfunction App() {\n  return (\n    <ToastProvider>\n      <MetricCard label=\"CPU Usage\" value={72.4} format={n => `${n.toFixed(1)}%`} status=\"warning\" />\n      <StatusBadge status=\"active\" pulse />\n      <DeployButton />\n    </ToastProvider>\n  )\n}\n\nfunction DeployButton() {\n  const toast = useToast()\n  return <Button variant=\"primary\" onClick={() => toast.success('Deployed!')}>Deploy</Button>\n}\n```\n\n---\n\n## Why This Library?\n\nMost component libraries are built for CRUD apps. This one is built for **ops dashboards, infrastructure tools, and AI-powered interfaces** -- where data density, real-time updates, and status visualization are first-class concerns.\n\n- **Smart Components** -- SmartTable auto-generates filter suggestions (outliers, top-N, patterns). CommandBar provides fuzzy search with recent history.\n- **AI-Ready** -- StreamingText renders LLM output with a blinking cursor. TypingIndicator, ConfidenceBar, and copy-on-complete are built in.\n- **Real-Time** -- RealtimeValue tracks data freshness with connection state indicators and stale-data dimming. LiveFeed auto-scrolls with pause controls. NotificationStack supports auto-dismiss with progress bars.\n- **Monitoring** -- MetricCard with trend arrows and sparklines. ThresholdGauge with color-coded zones. UtilizationBar, UptimeTracker, PortStatusGrid, and PipelineStage for infrastructure dashboards.\n- **Data-Dense** -- DataTable with 10+ features in one import (search, column filters, sort, pagination, density control, column picker, CSV export, row animations). HeatmapCalendar, SeverityTimeline, LogViewer for high-density displays.\n- **Developer Experience** -- CLI for scaffolding (`npx @annondeveloper/ui-kit add button`). react-hook-form adapters. Zero config theming. Full TypeScript coverage with exported types.\n\n---\n\n## Component Reference\n\n### Core\n\n#### Button\n\nA themed button with variant, size, and loading support.\n\n```tsx\nimport { Button } from '@annondeveloper/ui-kit'\n\n<Button variant=\"primary\" size=\"md\" loading={isPending}>Save</Button>\n```\n\n| Prop | Type | Default | Description |\n|------|------|---------|-------------|\n| `variant` | `'primary' \\| 'secondary' \\| 'danger' \\| 'outline' \\| 'ghost'` | `'primary'` | Visual variant |\n| `size` | `'sm' \\| 'md' \\| 'lg' \\| 'icon'` | `'md'` | Size preset |\n| `loading` | `boolean` | `false` | Show spinner and disable interaction |\n\nExtends all native `<button>` attributes. Supports `ref` forwarding.\n\n---\n\n#### Badge\n\nA pill-shaped label with 10 color presets and optional icon.\n\n```tsx\nimport { Badge, createBadgeVariant } from '@annondeveloper/ui-kit'\nimport { Shield } from 'lucide-react'\n\n<Badge color=\"green\" icon={Shield} size=\"sm\">Secure</Badge>\n```\n\n| Prop | Type | Default | Description |\n|------|------|---------|-------------|\n| `children` | `ReactNode` | -- | Badge content |\n| `color` | `'brand' \\| 'blue' \\| 'green' \\| 'yellow' \\| 'red' \\| 'orange' \\| 'purple' \\| 'pink' \\| 'teal' \\| 'gray'` | `'gray'` | Color preset |\n| `icon` | `LucideIcon` | -- | Optional icon before the label |\n| `size` | `'xs' \\| 'sm' \\| 'md'` | `'sm'` | Size variant |\n\n##### Badge Factory\n\nCreate domain-specific badge components without modifying the library:\n\n```tsx\nconst SeverityBadge = createBadgeVariant({\n  colorMap: { critical: 'red', warning: 'yellow', info: 'blue' },\n  labelMap: { critical: 'Critical', warning: 'Warning', info: 'Info' },\n})\n\n<SeverityBadge value=\"critical\" />\n```\n\n---\n\n#### Card\n\nA styled card container with semantic structure via children.\n\n```tsx\nimport { Card } from '@annondeveloper/ui-kit'\n\n<Card variant=\"interactive\" padding=\"lg\">\n  <h2>Server Health</h2>\n  <p>All systems operational</p>\n</Card>\n```\n\n| Prop | Type | Default | Description |\n|------|------|---------|-------------|\n| `variant` | `'default' \\| 'elevated' \\| 'outlined' \\| 'interactive'` | `'default'` | Visual variant (`interactive` adds hover effect) |\n| `padding` | `'none' \\| 'sm' \\| 'md' \\| 'lg'` | `'md'` | Padding preset |\n\nSupports `ref` forwarding and all native HTML attributes.\n\n---\n\n#### Tabs\n\nAccessible tabbed interface with three visual variants and animated indicator.\n\n```tsx\nimport { Tabs } from '@annondeveloper/ui-kit'\n\n<Tabs tabs={[{ value: 'metrics', label: 'Metrics' }, { value: 'logs', label: 'Logs' }]}\n      value={tab} onChange={setTab} variant=\"pills\" />\n```\n\n| Prop | Type | Default | Description |\n|------|------|---------|-------------|\n| `tabs` | `Tab[]` | -- | Array of `{ value, label, icon?, disabled? }` |\n| `value` | `string` | -- | Currently selected tab value |\n| `onChange` | `(value: string) => void` | -- | Selection callback |\n| `variant` | `'underline' \\| 'pills' \\| 'enclosed'` | `'underline'` | Visual variant |\n| `size` | `'sm' \\| 'md'` | `'md'` | Size preset |\n\nSupports keyboard navigation (arrow keys, Home, End) and ARIA roles. Animated indicator uses Framer Motion `layoutId`.\n\n---\n\n#### Sheet\n\nA slide-over drawer panel from any screen edge.\n\n```tsx\nimport { Sheet } from '@annondeveloper/ui-kit'\n\n<Sheet open={isOpen} onClose={() => setOpen(false)} title=\"Settings\" side=\"right\" width=\"max-w-lg\">\n  {children}\n</Sheet>\n```\n\n| Prop | Type | Default | Description |\n|------|------|---------|-------------|\n| `open` | `boolean` | -- | Whether the sheet is open |\n| `onClose` | `() => void` | -- | Close callback |\n| `side` | `'right' \\| 'left' \\| 'top' \\| 'bottom'` | `'right'` | Slide-in edge |\n| `title` | `string` | -- | Header title |\n| `description` | `string` | -- | Header description |\n| `width` | `string` | `'max-w-md'` | Width/height class |\n\nFeatures: backdrop blur, spring animation, Escape to close, body scroll lock, auto-focus.\n\n---\n\n#### Tooltip\n\nSimple tooltip wrapper built on Radix UI with theme-styled content and arrow pointer.\n\n```tsx\nimport { Tooltip } from '@annondeveloper/ui-kit'\n\n<Tooltip content=\"Copy to clipboard\" side=\"top\"><button>...</button></Tooltip>\n```\n\n| Prop | Type | Default | Description |\n|------|------|---------|-------------|\n| `content` | `ReactNode` | -- | Tooltip content |\n| `children` | `ReactNode` | -- | Trigger element |\n| `side` | `'top' \\| 'right' \\| 'bottom' \\| 'left'` | `'top'` | Display side |\n| `delay` | `number` | `200` | Delay in ms |\n\n---\n\n#### Popover\n\nPopover wrapper built on Radix Popover with Framer Motion entry animation.\n\n```tsx\nimport { Popover } from '@annondeveloper/ui-kit'\n\n<Popover trigger={<button>Options</button>} side=\"bottom\" align=\"end\">\n  <p>Popover content</p>\n</Popover>\n```\n\n| Prop | Type | Default | Description |\n|------|------|---------|-------------|\n| `trigger` | `ReactNode` | -- | Element that opens the popover |\n| `children` | `ReactNode` | -- | Popover content |\n| `side` | `'top' \\| 'right' \\| 'bottom' \\| 'left'` | `'bottom'` | Display side |\n| `align` | `'start' \\| 'center' \\| 'end'` | `'center'` | Alignment |\n\n---\n\n#### DropdownMenu\n\nAction/context dropdown menu built on Radix DropdownMenu with danger variant support.\n\n```tsx\nimport { DropdownMenu } from '@annondeveloper/ui-kit'\nimport { Edit, Trash2 } from 'lucide-react'\n\n<DropdownMenu\n  trigger={<button>Actions</button>}\n  items={[\n    { label: 'Edit', icon: Edit, onClick: handleEdit },\n    { label: 'Delete', icon: Trash2, onClick: handleDelete, variant: 'danger' },\n  ]}\n/>\n```\n\n| Prop | Type | Default | Description |\n|------|------|---------|-------------|\n| `trigger` | `ReactNode` | -- | Element that opens the menu |\n| `items` | `MenuItem[]` | -- | `{ label, icon?, onClick, variant?, disabled? }` |\n| `align` | `'start' \\| 'center' \\| 'end'` | `'end'` | Menu alignment |\n\n---\n\n#### ConfirmDialog\n\nConfirmation modal built on Radix AlertDialog with animated enter/exit.\n\n```tsx\nimport { ConfirmDialog } from '@annondeveloper/ui-kit'\n\n<ConfirmDialog\n  open={showDelete} onOpenChange={setShowDelete}\n  title=\"Delete server?\" description=\"This action cannot be undone.\"\n  variant=\"danger\" confirmLabel=\"Delete\" loading={isDeleting}\n  onConfirm={handleDelete}\n/>\n```\n\n| Prop | Type | Default | Description |\n|------|------|---------|-------------|\n| `open` | `boolean` | -- | Control open state |\n| `onOpenChange` | `(open: boolean) => void` | -- | Open state callback |\n| `title` | `string` | -- | Dialog title |\n| `description` | `string` | -- | Dialog description |\n| `confirmLabel` | `string` | `'Confirm'` | Confirm button text |\n| `cancelLabel` | `string` | `'Cancel'` | Cancel button text |\n| `variant` | `'danger' \\| 'warning' \\| 'default'` | `'danger'` | Icon and button color |\n| `loading` | `boolean` | `false` | Show spinner on confirm button |\n| `onConfirm` | `() => void` | -- | Confirm callback |\n\n---\n\n### Forms\n\n#### FormInput\n\nThemed form input with label, required indicator, and optional hint text.\n\n```tsx\nimport { FormInput } from '@annondeveloper/ui-kit'\n\n<FormInput label=\"Hostname\" value={host} onChange={setHost} placeholder=\"10.0.0.1\" required hint=\"IPv4 or FQDN\" />\n```\n\n| Prop | Type | Default | Description |\n|------|------|---------|-------------|\n| `label` | `string` | -- | Label text |\n| `value` | `string` | -- | Input value |\n| `onChange` | `(value: string) => void` | -- | Value change callback |\n| `type` | `string` | `'text'` | HTML input type |\n| `placeholder` | `string` | -- | Placeholder text |\n| `required` | `boolean` | -- | Show required indicator |\n| `disabled` | `boolean` | -- | Disable input |\n| `hint` | `string` | -- | Help text below input |\n| `autoComplete` | `string` | -- | Autocomplete attribute |\n\nSupports `ref` forwarding and all native input attributes.\n\n---\n\n#### Select\n\nThemed dropdown built on Radix UI Select.\n\n```tsx\nimport { Select } from '@annondeveloper/ui-kit'\n\n<Select value={protocol} onValueChange={setProtocol}\n        options={[{ value: 'snmp', label: 'SNMP' }, { value: 'ssh', label: 'SSH' }]}\n        placeholder=\"Select protocol\" />\n```\n\n| Prop | Type | Default | Description |\n|------|------|---------|-------------|\n| `value` | `string` | -- | Selected value |\n| `onValueChange` | `(v: string) => void` | -- | Selection callback |\n| `options` | `SelectOption[]` | -- | `{ value, label }` |\n| `placeholder` | `string` | -- | Placeholder text |\n| `disabled` | `boolean` | -- | Disable select |\n\n---\n\n#### Checkbox\n\nThemed checkbox with indeterminate state support. Forwards ref.\n\n```tsx\nimport { Checkbox } from '@annondeveloper/ui-kit'\n\n<Checkbox checked={selected} onChange={handleChange} indeterminate={isPartial} size=\"sm\" />\n```\n\n| Prop | Type | Default | Description |\n|------|------|---------|-------------|\n| `indeterminate` | `boolean` | -- | Show minus indicator |\n| `size` | `'sm' \\| 'md'` | `'md'` | Size variant |\n\nExtends native `<input>` attributes (except `type` and `size`).\n\n---\n\n#### ToggleSwitch\n\nIcon-based boolean toggle using lucide icons.\n\n```tsx\nimport { ToggleSwitch } from '@annondeveloper/ui-kit'\n\n<ToggleSwitch enabled={isActive} onChange={setIsActive} label=\"Auto-refresh\" />\n```\n\n| Prop | Type | Default | Description |\n|------|------|---------|-------------|\n| `enabled` | `boolean` | -- | Toggle state |\n| `onChange` | `(enabled: boolean) => void` | -- | Change callback |\n| `size` | `'sm' \\| 'md'` | `'md'` | Size variant |\n| `disabled` | `boolean` | -- | Disable toggle |\n| `label` | `string` | -- | Accessible label |\n\n---\n\n#### RadioGroup\n\nCustom-styled radio button group with animated selection indicator.\n\n```tsx\nimport { RadioGroup } from '@annondeveloper/ui-kit'\n\n<RadioGroup\n  options={[\n    { value: 'v2c', label: 'SNMPv2c' },\n    { value: 'v3', label: 'SNMPv3', description: 'Recommended for production' },\n  ]}\n  value={version} onChange={setVersion} orientation=\"vertical\"\n/>\n```\n\n| Prop | Type | Default | Description |\n|------|------|---------|-------------|\n| `options` | `RadioOption[]` | -- | `{ value, label, description?, disabled? }` |\n| `value` | `string` | -- | Selected value |\n| `onChange` | `(value: string) => void` | -- | Selection callback |\n| `orientation` | `'horizontal' \\| 'vertical'` | `'vertical'` | Layout direction |\n\nSupports keyboard navigation (arrow keys, Home, End) and ARIA roles.\n\n---\n\n#### Slider\n\nCustom range slider with keyboard accessibility and hover tooltip.\n\n```tsx\nimport { Slider } from '@annondeveloper/ui-kit'\n\n<Slider value={threshold} onChange={setThreshold} min={0} max={100} step={5} label=\"Alert threshold\" showValue />\n```\n\n| Prop | Type | Default | Description |\n|------|------|---------|-------------|\n| `value` | `number` | -- | Current value |\n| `onChange` | `(value: number) => void` | -- | Change callback |\n| `min` | `number` | `0` | Minimum value |\n| `max` | `number` | `100` | Maximum value |\n| `step` | `number` | `1` | Step increment |\n| `label` | `string` | -- | Label text |\n| `showValue` | `boolean` | `false` | Show value display |\n\nSupports keyboard (arrow keys, Home, End), mouse drag, and touch.\n\n---\n\n#### ColorInput\n\nCompact color picker with expandable panel, hue/saturation area, format switching, and presets.\n\n```tsx\nimport { ColorInput } from '@annondeveloper/ui-kit'\n\n<ColorInput value={color} onChange={setColor} label=\"Accent\" format=\"hex\"\n            presets={['#3b82f6', '#10b981', '#f59e0b', '#ef4444']} />\n```\n\n| Prop | Type | Default | Description |\n|------|------|---------|-------------|\n| `value` | `string` | -- | Hex color string |\n| `onChange` | `(color: string) => void` | -- | Change callback |\n| `label` | `string` | -- | Optional label |\n| `presets` | `string[]` | -- | Preset color swatches |\n| `showAlpha` | `boolean` | `false` | Show alpha slider |\n| `format` | `'hex' \\| 'rgb' \\| 'hsl'` | `'hex'` | Display format |\n\nFeatures: HSL picker area, hue slider, format switching, clipboard copy, recent color history (localStorage).\n\n---\n\n#### StepWizard\n\nMulti-step form wizard with animated slide transitions and per-step validation.\n\n```tsx\nimport { StepWizard } from '@annondeveloper/ui-kit'\n\n<StepWizard\n  steps={[\n    { id: 'creds', title: 'Credentials', content: <CredentialsForm /> },\n    { id: 'targets', title: 'Targets', content: <TargetForm />, validate: () => targets.length > 0 },\n    { id: 'review', title: 'Review', content: <ReviewSummary /> },\n  ]}\n  onComplete={handleDeploy} showSummary\n/>\n```\n\n| Prop | Type | Default | Description |\n|------|------|---------|-------------|\n| `steps` | `WizardStep[]` | -- | `{ id, title, description?, icon?, content, validate? }` |\n| `onComplete` | `() => void` | -- | Final step completion callback |\n| `onStepChange` | `(step: number) => void` | -- | Step change callback |\n| `orientation` | `'horizontal' \\| 'vertical'` | `'horizontal'` | Step indicator layout |\n| `allowSkip` | `boolean` | `false` | Allow skipping to uncompleted steps |\n| `showSummary` | `boolean` | `false` | Show completion state after last step |\n\nFeatures: animated step transitions, progress bar, keyboard navigation (Enter to advance), session storage auto-save, async validation.\n\n---\n\n#### FilterPill\n\nRounded pill-style filter toggle with optional count.\n\n```tsx\nimport { FilterPill } from '@annondeveloper/ui-kit'\n\n<FilterPill label=\"Critical\" count={12} active={filter === 'critical'} onClick={() => setFilter('critical')} />\n```\n\n| Prop | Type | Default | Description |\n|------|------|---------|-------------|\n| `label` | `string` | -- | Pill text |\n| `count` | `number` | -- | Optional count badge |\n| `active` | `boolean` | -- | Active/selected state |\n| `onClick` | `() => void` | -- | Click handler |\n\n---\n\n### Data Display\n\n#### DataTable\n\nFull-featured data grid built on TanStack Table v8.\n\n```tsx\nimport { DataTable } from '@annondeveloper/ui-kit'\n\n<DataTable\n  columns={columns} data={devices} isLoading={isLoading}\n  searchPlaceholder=\"Search devices...\"\n  defaultPageSize={25} exportFilename=\"devices\"\n  onRowClick={(row) => router.push(`/devices/${row.id}`)}\n  emptyState={{ icon: Server, title: 'No devices', description: 'Run a discovery scan to get started.' }}\n/>\n```\n\n| Prop | Type | Default | Description |\n|------|------|---------|-------------|\n| `columns` | `ColumnDef<T>[]` | -- | TanStack column definitions |\n| `data` | `T[]` | -- | Row data |\n| `isLoading` | `boolean` | `false` | Show loading skeleton |\n| `emptyState` | `{ icon, title, description }` | -- | Custom empty state |\n| `searchPlaceholder` | `string` | `'Search...'` | Search input placeholder |\n| `onRowClick` | `(row: T) => void` | -- | Row click handler |\n| `defaultSort` | `{ id, desc }` | -- | Initial sort configuration |\n| `defaultPageSize` | `number` | `25` | Rows per page |\n| `exportFilename` | `string` | -- | Enables CSV export button |\n| `stickyFirstColumn` | `boolean` | `false` | Sticky first column on scroll |\n| `density` | `'compact' \\| 'comfortable' \\| 'spacious'` | `'comfortable'` | Row density |\n\nBuilt-in features: global search, auto-detected column filters (text/enum/number range), multi-column sort, pagination, density control (persisted to localStorage), column visibility picker with drag reorder, CSV export, row click, loading skeleton, empty state, Framer Motion row animations.\n\n---\n\n#### SmartTable\n\nEnhanced DataTable that auto-generates filter suggestions by analyzing column data.\n\n```tsx\nimport { SmartTable } from '@annondeveloper/ui-kit'\n\n<SmartTable columns={columns} data={data} maxSuggestions={4} onFilterSuggestion={console.log} />\n```\n\n| Prop | Type | Default | Description |\n|------|------|---------|-------------|\n| ...all DataTable props | | | Inherits all DataTable props |\n| `onFilterSuggestion` | `(suggestion: FilterSuggestion) => void` | -- | Suggestion click callback |\n| `maxSuggestions` | `number` | `6` | Max visible suggestions |\n\nAuto-detects: statistical outliers (>2 std dev), top-N frequent values, dominant pattern detection, minority value highlighting.\n\n---\n\n#### AnimatedCounter\n\nSmooth number animation using requestAnimationFrame with cubic easing.\n\n```tsx\nimport { AnimatedCounter } from '@annondeveloper/ui-kit'\n\n<AnimatedCounter value={deviceCount} duration={400} format={n => n.toLocaleString()} />\n```\n\n| Prop | Type | Default | Description |\n|------|------|---------|-------------|\n| `value` | `number` | -- | Target value |\n| `duration` | `number` | `400` | Animation duration (ms) |\n| `format` | `(n: number) => string` | -- | Custom number formatter |\n\n---\n\n#### Sparkline\n\nTiny inline SVG sparkline chart with gradient fill.\n\n```tsx\nimport { Sparkline } from '@annondeveloper/ui-kit'\n\n<Sparkline data={[10, 25, 18, 30, 22]} width={80} height={24} showDots />\n```\n\n| Prop | Type | Default | Description |\n|------|------|---------|-------------|\n| `data` | `number[]` | -- | Values to plot (min 2) |\n| `width` | `number` | `80` | SVG width |\n| `height` | `number` | `24` | SVG height |\n| `color` | `string` | `'hsl(var(--brand-primary))'` | Line color |\n| `fillOpacity` | `number` | `0.1` | Gradient fill opacity (0 to disable) |\n| `showDots` | `boolean` | `false` | Dots on first/last points |\n\n---\n\n#### TruncatedText\n\nAuto-truncating text with tooltip and copy-to-clipboard on hover.\n\n```tsx\nimport { TruncatedText } from '@annondeveloper/ui-kit'\n\n<TruncatedText text=\"very-long-hostname-that-overflows.example.com\" maxWidth={200} />\n```\n\n| Prop | Type | Default | Description |\n|------|------|---------|-------------|\n| `text` | `string` | -- | Full text content |\n| `maxWidth` | `string \\| number` | `'100%'` | Max width for truncation |\n\n---\n\n#### CopyBlock\n\nMonospace code/text display with one-click copy and collapsible overflow.\n\n```tsx\nimport { CopyBlock } from '@annondeveloper/ui-kit'\n\n<CopyBlock content=\"curl -X GET https://api.example.com/health\" language=\"bash\" label=\"Health check\" />\n```\n\n| Prop | Type | Default | Description |\n|------|------|---------|-------------|\n| `content` | `string` | -- | Text content |\n| `language` | `string` | -- | Language hint (e.g. \"json\", \"bash\") |\n| `showLineNumbers` | `boolean` | `false` | Show line number gutter |\n| `maxHeight` | `number` | -- | Max height before \"Show more\" toggle |\n| `label` | `string` | -- | Label above the block |\n\n---\n\n#### DiffViewer\n\nLine-by-line diff viewer using LCS algorithm with collapsible unchanged sections.\n\n```tsx\nimport { DiffViewer } from '@annondeveloper/ui-kit'\n\n<DiffViewer oldValue={previousConfig} newValue={currentConfig} mode=\"side-by-side\" showLineNumbers />\n```\n\n| Prop | Type | Default | Description |\n|------|------|---------|-------------|\n| `oldValue` | `string` | -- | Original text |\n| `newValue` | `string` | -- | Modified text |\n| `mode` | `'inline' \\| 'side-by-side'` | `'inline'` | Display mode |\n| `language` | `string` | -- | Language hint |\n| `showLineNumbers` | `boolean` | `true` | Show line numbers |\n\n---\n\n### Status & Monitoring\n\n#### StatusBadge\n\nConfigurable status indicator with colored dot and label.\n\n```tsx\nimport { StatusBadge, defaultStatusMap } from '@annondeveloper/ui-kit'\n\n<StatusBadge status=\"active\" pulse />\n<StatusBadge status=\"healthy\" statusMap={myCustomStatuses} />\n```\n\n| Prop | Type | Default | Description |\n|------|------|---------|-------------|\n| `status` | `string` | -- | Status key |\n| `label` | `string` | -- | Override display label |\n| `size` | `'sm' \\| 'md'` | `'md'` | Size variant |\n| `pulse` | `boolean` | `false` | Pulse animation on the dot |\n| `statusMap` | `Record<string, StatusConfig>` | `defaultStatusMap` | Custom status definitions |\n\nBuilt-in statuses: `ok`, `active`, `warning`, `critical`, `unknown`, `maintenance`, `stale`, `inactive`, `decommissioned`, `pending`.\n\n---\n\n#### StatusPulse\n\nAnimated status dot with optional pulse ring and label.\n\n```tsx\nimport { StatusPulse } from '@annondeveloper/ui-kit'\n\n<StatusPulse status=\"online\" />\n<StatusPulse status=\"degraded\" label={false} />\n```\n\n| Prop | Type | Default | Description |\n|------|------|---------|-------------|\n| `status` | `string` | -- | Status key |\n| `label` | `boolean` | `true` | Show status text |\n| `configMap` | `Record<string, PulseConfig>` | `defaultPulseConfigMap` | Custom pulse configs |\n\nBuilt-in statuses: `online` (green pulse), `degraded` (yellow fast pulse), `offline` (red, no pulse), `unknown` (gray, no pulse).\n\n---\n\n#### MetricCard\n\nDashboard stat tile with animated counter, trend indicator, and optional sparkline.\n\n```tsx\nimport { MetricCard } from '@annondeveloper/ui-kit'\nimport { HardDrive } from 'lucide-react'\n\n<MetricCard\n  label=\"Disk Usage\" value={78.3} format={n => `${n.toFixed(1)}%`}\n  previousValue={72.1} trendDirection=\"up-bad\"\n  icon={HardDrive} status=\"warning\"\n  sparklineData={[65, 68, 70, 72, 75, 78]}\n/>\n```\n\n| Prop | Type | Default | Description |\n|------|------|---------|-------------|\n| `label` | `string` | -- | Metric name |\n| `value` | `number` | -- | Current value |\n| `format` | `(n: number) => string` | -- | Custom formatter |\n| `previousValue` | `number` | -- | Previous value for trend |\n| `trendDirection` | `'up-good' \\| 'up-bad' \\| 'down-good' \\| 'down-bad'` | -- | Color interpretation |\n| `icon` | `ElementType` | -- | Lucide icon component |\n| `status` | `'ok' \\| 'warning' \\| 'critical'` | -- | Left border accent color |\n| `sparklineData` | `number[]` | -- | Recent values for inline chart |\n\n---\n\n#### ThresholdGauge\n\nSemicircular SVG gauge with color-coded threshold zones.\n\n```tsx\nimport { ThresholdGauge } from '@annondeveloper/ui-kit'\n\n<ThresholdGauge value={85} label=\"CPU\" thresholds={{ warning: 70, critical: 90 }} size={120} />\n```\n\n| Prop | Type | Default | Description |\n|------|------|---------|-------------|\n| `value` | `number` | -- | Gauge value (0-100) |\n| `label` | `string` | -- | Label below gauge |\n| `thresholds` | `{ warning, critical }` | `{ warning: 70, critical: 90 }` | Color zone boundaries |\n| `size` | `number` | `120` | Diameter in pixels |\n| `showValue` | `boolean` | `true` | Show value in center |\n| `format` | `(n: number) => string` | -- | Custom value formatter |\n\n---\n\n#### UtilizationBar\n\nHorizontal bar with color-coded thresholds. Animates fill on mount.\n\n```tsx\nimport { UtilizationBar } from '@annondeveloper/ui-kit'\n\n<UtilizationBar value={92} label=\"Memory\" thresholds={{ warning: 70, critical: 90 }} size=\"md\" />\n```\n\n| Prop | Type | Default | Description |\n|------|------|---------|-------------|\n| `value` | `number` | -- | Utilization percentage (0-100) |\n| `thresholds` | `{ warning, critical }` | `{ warning: 70, critical: 90 }` | Color zone boundaries |\n| `label` | `string` | -- | Label to the left |\n| `showValue` | `boolean` | `true` | Show percentage text |\n| `size` | `'sm' \\| 'md' \\| 'lg'` | `'md'` | Bar height |\n| `animated` | `boolean` | `true` | Animate fill width |\n\n---\n\n#### UptimeTracker\n\nGitHub/Statuspage-style daily uptime bar strip.\n\n```tsx\nimport { UptimeTracker } from '@annondeveloper/ui-kit'\n\n<UptimeTracker\n  days={last90Days} label=\"API Server\" showPercentage\n  onDayClick={(day) => showIncidents(day.date)}\n/>\n```\n\n| Prop | Type | Default | Description |\n|------|------|---------|-------------|\n| `days` | `DayStatus[]` | -- | `{ date, status: 'ok'\\|'degraded'\\|'outage'\\|'no-data', uptime? }` |\n| `showPercentage` | `boolean` | `true` | Show overall uptime % |\n| `label` | `string` | -- | Header label |\n| `onDayClick` | `(day: DayStatus) => void` | -- | Day click callback |\n\n---\n\n#### PortStatusGrid\n\nGrid of colored indicators for network ports/interfaces.\n\n```tsx\nimport { PortStatusGrid } from '@annondeveloper/ui-kit'\n\n<PortStatusGrid\n  ports={switchPorts} columns={24} size=\"md\"\n  onPortClick={(port) => showPortDetail(port.id)}\n/>\n```\n\n| Prop | Type | Default | Description |\n|------|------|---------|-------------|\n| `ports` | `PortStatus[]` | -- | `{ id, label, status: 'up'\\|'down'\\|'disabled'\\|'error', speed?, utilization? }` |\n| `columns` | `number` | auto-fit | Grid columns |\n| `size` | `'sm' \\| 'md'` | `'sm'` | Indicator size |\n| `onPortClick` | `(port: PortStatus) => void` | -- | Port click callback |\n\n---\n\n#### PipelineStage\n\nHorizontal data pipeline visualization with status dots and chevron connectors.\n\n```tsx\nimport { PipelineStage } from '@annondeveloper/ui-kit'\n\n<PipelineStage\n  stages={[\n    { name: 'Collector', status: 'active', metric: { label: 'msg/s', value: '1.2K' } },\n    { name: 'Normalizer', status: 'active' },\n    { name: 'Writer', status: 'error' },\n  ]}\n  onStageClick={(stage) => showStageDetail(stage)}\n/>\n```\n\n| Prop | Type | Default | Description |\n|------|------|---------|-------------|\n| `stages` | `StageInfo[]` | -- | `{ name, status: 'active'\\|'idle'\\|'error'\\|'disabled', metric?, icon? }` |\n| `onStageClick` | `(stage, index) => void` | -- | Stage click callback |\n\n---\n\n#### SeverityTimeline\n\nHorizontal scrollable event timeline with severity-colored dots.\n\n```tsx\nimport { SeverityTimeline } from '@annondeveloper/ui-kit'\n\n<SeverityTimeline events={recentAlerts} maxVisible={20} onEventClick={showAlertDetail} />\n```\n\n| Prop | Type | Default | Description |\n|------|------|---------|-------------|\n| `events` | `TimelineEvent[]` | -- | `{ time, label, severity: 'critical'\\|'warning'\\|'info'\\|'ok', detail? }` |\n| `maxVisible` | `number` | `20` | Max visible events |\n| `onEventClick` | `(event) => void` | -- | Event click callback |\n\n---\n\n#### TimeRangeSelector\n\nCompact horizontal pill-group time range selector.\n\n```tsx\nimport { TimeRangeSelector } from '@annondeveloper/ui-kit'\n\n<TimeRangeSelector value={range} onChange={(v, r) => setRange(v)} />\n```\n\n| Prop | Type | Default | Description |\n|------|------|---------|-------------|\n| `value` | `string` | -- | Selected range value |\n| `onChange` | `(value, range) => void` | -- | Selection callback |\n| `ranges` | `TimeRange[]` | `[1h, 6h, 24h, 7d, 30d]` | Custom range options (each `{ label, value, seconds }`) |\n\n---\n\n#### LogViewer\n\nReal-time log stream viewer with severity-colored borders and auto-scroll.\n\n```tsx\nimport { LogViewer } from '@annondeveloper/ui-kit'\n\n<LogViewer entries={logs} maxHeight={400} autoScroll showTimestamps onEntryClick={showDetail} />\n```\n\n| Prop | Type | Default | Description |\n|------|------|---------|-------------|\n| `entries` | `LogEntry[]` | -- | `{ time, level: 'error'\\|'warn'\\|'info'\\|'debug'\\|'trace', message, source? }` |\n| `maxHeight` | `number` | `400` | Container max height |\n| `autoScroll` | `boolean` | `true` | Auto-scroll on new entries |\n| `showTimestamps` | `boolean` | `true` | Show timestamps column |\n| `showLevel` | `boolean` | `true` | Show level badge |\n| `onEntryClick` | `(entry) => void` | -- | Entry click callback |\n\nFeatures: search filtering, \"N new entries\" floating badge when scrolled up.\n\n---\n\n### Real-Time & AI\n\n#### RealtimeValue\n\nLive data display with freshness tracking, connection state, and delta arrows.\n\n```tsx\nimport { RealtimeValue } from '@annondeveloper/ui-kit'\nimport { fmtBps } from '@annondeveloper/ui-kit'\n\n<RealtimeValue\n  value={throughput} format={fmtBps}\n  previousValue={prevThroughput} lastUpdated={lastTs}\n  staleAfterMs={30000} connectionState=\"connected\" size=\"lg\"\n/>\n```\n\n| Prop | Type | Default | Description |\n|------|------|---------|-------------|\n| `value` | `number \\| string` | -- | Current value |\n| `label` | `string` | -- | Label text |\n| `format` | `(v: number) => string` | -- | Custom formatter |\n| `lastUpdated` | `string \\| Date` | -- | Last data timestamp |\n| `staleAfterMs` | `number` | `30000` | Staleness threshold (ms) |\n| `connectionState` | `'connected' \\| 'reconnecting' \\| 'disconnected'` | `'connected'` | Connection indicator |\n| `previousValue` | `number` | -- | Previous value for delta |\n| `animate` | `boolean` | `true` | Animate value changes |\n| `size` | `'sm' \\| 'md' \\| 'lg' \\| 'xl'` | `'md'` | Display size |\n\nFeatures: animated number transitions, freshness dot (green/yellow/red), ping animation when fresh, connection state icon (reconnecting spinner, disconnected icon), auto-updating relative timestamp.\n\n---\n\n#### StreamingText\n\nAI/LLM streaming text display with blinking cursor and inline markdown formatting.\n\n```tsx\nimport { StreamingText } from '@annondeveloper/ui-kit'\n\n<StreamingText text={response} isStreaming={isGenerating} onComplete={() => logCompletion()} />\n```\n\n| Prop | Type | Default | Description |\n|------|------|---------|-------------|\n| `text` | `string` | -- | Text content (grows as tokens arrive) |\n| `isStreaming` | `boolean` | -- | Whether tokens are still arriving |\n| `speed` | `number` | `500` | Cursor blink speed (ms) |\n| `showCursor` | `boolean` | `true` | Show blinking cursor |\n| `onComplete` | `() => void` | -- | Streaming complete callback |\n\nFeatures: auto-scroll during streaming, inline `**bold**` and `` `code` `` formatting, copy button appears on completion.\n\n---\n\n#### TypingIndicator\n\n\"Someone is typing\" indicator with three animation variants.\n\n```tsx\nimport { TypingIndicator } from '@annondeveloper/ui-kit'\n\n<TypingIndicator variant=\"dots\" label=\"AI is thinking\" size=\"md\" />\n```\n\n| Prop | Type | Default | Description |\n|------|------|---------|-------------|\n| `label` | `string` | -- | Status text |\n| `variant` | `'dots' \\| 'pulse' \\| 'text'` | `'dots'` | Animation variant |\n| `size` | `'sm' \\| 'md'` | `'md'` | Size preset |\n\n---\n\n#### ConfidenceBar\n\nHorizontal probability bar with color-coded threshold zones.\n\n```tsx\nimport { ConfidenceBar } from '@annondeveloper/ui-kit'\n\n<ConfidenceBar value={0.87} label=\"Match confidence\" thresholds={{ low: 0.3, medium: 0.7 }} />\n```\n\n| Prop | Type | Default | Description |\n|------|------|---------|-------------|\n| `value` | `number` | -- | Confidence (0-1) |\n| `label` | `string` | -- | Label text |\n| `showPercentage` | `boolean` | `true` | Show percentage |\n| `thresholds` | `{ low, medium }` | `{ low: 0.3, medium: 0.7 }` | Color zone boundaries |\n| `size` | `'sm' \\| 'md'` | `'md'` | Bar height |\n\n---\n\n#### CommandBar\n\nUniversal command palette activated by Cmd+K / Ctrl+K.\n\n```tsx\nimport { CommandBar } from '@annondeveloper/ui-kit'\n\n<CommandBar\n  items={[\n    { id: 'devices', label: 'Go to Devices', shortcut: 'G D', onSelect: () => navigate('/devices') },\n    { id: 'search', label: 'Search entities', icon: Search, onSelect: openSearch, keywords: ['find'] },\n  ]}\n  placeholder=\"Type a command...\"\n  onSearch={async (q) => fetchResults(q)}\n/>\n```\n\n| Prop | Type | Default | Description |\n|------|------|---------|-------------|\n| `items` | `CommandItem[]` | -- | `{ id, label, description?, icon?, shortcut?, group?, onSelect, keywords? }` |\n| `placeholder` | `string` | `'Type a command...'` | Search placeholder |\n| `hotkey` | `string` | `'k'` | Hotkey letter (Cmd/Ctrl+key) |\n| `onSearch` | `(query) => Promise<CommandItem[]>` | -- | Async search function |\n| `recentKey` | `string` | `'ui-kit-command-recent'` | localStorage key for recents |\n| `maxRecent` | `number` | `5` | Max recent items |\n\nFeatures: fuzzy search scoring, grouped sections, recent selections (localStorage), async search with debounce, keyboard navigation (arrows + Enter), keyboard shortcut hints in footer.\n\n---\n\n#### LiveFeed\n\nReal-time event feed with animated entry, pause/resume, and type-colored borders.\n\n```tsx\nimport { LiveFeed } from '@annondeveloper/ui-kit'\n\n<LiveFeed\n  items={events} maxVisible={50} showTimestamps autoScroll\n  onItemClick={(item) => showDetail(item.id)}\n  emptyMessage=\"Waiting for events...\"\n/>\n```\n\n| Prop | Type | Default | Description |\n|------|------|---------|-------------|\n| `items` | `FeedItem[]` | -- | `{ id, content: ReactNode, timestamp, type?: 'info'\\|'success'\\|'warning'\\|'error' }` |\n| `maxVisible` | `number` | `50` | Max visible items |\n| `showTimestamps` | `boolean` | `true` | Show relative timestamps |\n| `autoScroll` | `boolean` | `true` | Auto-scroll to newest |\n| `onItemClick` | `(item) => void` | -- | Item click callback |\n| `emptyMessage` | `string` | `'No events yet'` | Empty state text |\n\nFeatures: pause/resume button, \"N new items\" floating badge when scrolled, auto-updating relative timestamps.\n\n---\n\n#### NotificationStack\n\nFixed-position notification cards with auto-dismiss progress bars.\n\n```tsx\nimport { NotificationStack } from '@annondeveloper/ui-kit'\n\n<NotificationStack\n  notifications={notifications}\n  onDismiss={(id) => removeNotification(id)}\n  position=\"top-right\" maxVisible={5}\n/>\n```\n\n| Prop | Type | Default | Description |\n|------|------|---------|-------------|\n| `notifications` | `Notification[]` | -- | `{ id, title, message?, type, action?, dismissible?, duration? }` |\n| `onDismiss` | `(id: string) => void` | -- | Dismiss callback |\n| `position` | `'top-right' \\| 'top-left' \\| 'bottom-right' \\| 'bottom-left'` | `'top-right'` | Screen position |\n| `maxVisible` | `number` | `5` | Max visible before stacking |\n\nFeatures: type-specific icons and colors, action buttons, auto-dismiss with progress bar, overflow indicator, spring entry/exit animations.\n\n---\n\n### Layout & Feedback\n\n#### EmptyState\n\nDecorative placeholder with icon, title, description, and optional actions.\n\n```tsx\nimport { EmptyState, Button } from '@annondeveloper/ui-kit'\nimport { Inbox } from 'lucide-react'\n\n<EmptyState icon={Inbox} title=\"No alerts\" description=\"Your infrastructure is healthy.\"\n            actions={<Button size=\"sm\">Configure Rules</Button>} />\n```\n\n| Prop | Type | Default | Description |\n|------|------|---------|-------------|\n| `icon` | `LucideIcon` | -- | Center icon |\n| `title` | `string` | -- | Title text |\n| `description` | `string` | -- | Description text |\n| `actions` | `ReactNode` | -- | Action buttons |\n\n---\n\n#### Skeleton\n\nShimmer loading placeholder.\n\n```tsx\nimport { Skeleton } from '@annondeveloper/ui-kit'\n\n<Skeleton width={128} height={32} />\n<Skeleton width=\"100%\" height={16} />\n<Skeleton variant=\"circle\" width={40} height={40} />\n```\n\n| Prop | Type | Default | Description |\n|------|------|---------|-------------|\n| `width` | `string \\| number` | `'100%'` | Skeleton width |\n| `height` | `string \\| number` | `'1em'` | Skeleton height |\n| `variant` | `'rect' \\| 'circle'` | `'rect'` | Shape variant |\n\n---\n\n#### Progress\n\nProgress bar with optional label, animated fill, and indeterminate mode.\n\n```tsx\nimport { Progress } from '@annondeveloper/ui-kit'\n\n<Progress value={65} max={100} label=\"Upload\" showValue variant=\"success\" />\n<Progress indeterminate label=\"Processing...\" />\n```\n\n| Prop | Type | Default | Description |\n|------|------|---------|-------------|\n| `value` | `number` | -- | Current value |\n| `max` | `number` | `100` | Maximum value |\n| `label` | `string` | -- | Label text |\n| `showValue` | `boolean` | `false` | Show percentage |\n| `variant` | `'default' \\| 'success' \\| 'warning' \\| 'danger'` | `'default'` | Color variant |\n| `size` | `'sm' \\| 'md' \\| 'lg'` | `'md'` | Bar height |\n| `animated` | `boolean` | `true` | Animate fill changes |\n| `indeterminate` | `boolean` | `false` | Shimmer animation |\n\n---\n\n#### Avatar\n\nUser/entity avatar with image support, initials fallback, and status dot.\n\n```tsx\nimport { Avatar } from '@annondeveloper/ui-kit'\n\n<Avatar src=\"/avatar.jpg\" alt=\"Jane Doe\" size=\"md\" status=\"online\" />\n<Avatar alt=\"John Smith\" size=\"sm\" />  {/* Shows \"JS\" initials */}\n```\n\n| Prop | Type | Default | Description |\n|------|------|---------|-------------|\n| `src` | `string` | -- | Image URL |\n| `alt` | `string` | -- | Alt text (used for initials derivation) |\n| `fallback` | `string` | -- | Override initials |\n| `size` | `'xs' \\| 'sm' \\| 'md' \\| 'lg' \\| 'xl'` | `'md'` | Size preset |\n| `status` | `'online' \\| 'offline' \\| 'busy' \\| 'away'` | -- | Status dot overlay |\n\n---\n\n#### InfiniteScroll\n\nVirtualized infinite-scroll list using IntersectionObserver.\n```tsx\nimport { InfiniteScroll } from '@annondeveloper/ui-kit'\n\n<InfiniteScroll\n  items={logs} hasMore={hasNextPage} isLoading={isFetching}\n  loadMore={fetchNextPage} itemHeight={48}\n  renderItem={(item, i) => <LogRow key={item.id} entry={item} />}\n/>\n```\n\n| Prop | Type | Default | Description |\n|------|------|---------|-------------|\n| `items` | `T[]` | -- | Loaded items |\n| `renderItem` | `(item, index) => JSX.Element` | -- | Item renderer |\n| `loadMore` | `() => void \\| Promise<void>` | -- | Load more callback |\n| `hasMore` | `boolean` | -- | Whether more items exist |\n| `isLoading` | `boolean` | `false` | Loading state |\n| `threshold` | `number` | `200` | Trigger distance from bottom (px) |\n| `itemHeight` | `number` | -- | Fixed height for virtualization |\n| `emptyState` | `ReactNode` | -- | Empty content |\n\nFeatures: optional height-based virtualization, scroll-to-top button, skeleton placeholders.\n\n---\n\n#### SortableList\n\nDrag-and-drop reorderable list with smooth layout animations.\n\n```tsx\nimport { SortableList } from '@annondeveloper/ui-kit'\n\n<SortableList\n  items={[\n    { id: '1', content: <span>Rule 1</span> },\n    { id: '2', content: <span>Rule 2</span> },\n  ]}\n  onChange={setRules}\n/>\n```\n\n| Prop | Type | Default | Description |\n|------|------|---------|-------------|\n| `items` | `SortableItem[]` | -- | `{ id: string, content: ReactNode }` |\n| `onChange` | `(items: SortableItem[]) => void` | -- | Reorder callback |\n| `handle` | `boolean` | -- | Show drag handle |\n| `orientation` | `'vertical' \\| 'horizontal'` | `'vertical'` | Layout direction |\n\nFeatures: pointer-based drag (no external DnD library), keyboard reordering (Space to pick, arrows to move, Enter to drop), touch support, drop indicator line.\n\n---\n\n#### KanbanColumn\n\nKanban board column with title, count badge, and scrollable card list.\n\n```tsx\nimport { KanbanColumn } from '@annondeveloper/ui-kit'\n\n<KanbanColumn\n  title=\"In Progress\" color=\"hsl(var(--status-warning))\"\n  items={tasks} onItemClick={showTask} onAddItem={createTask}\n/>\n```\n\n| Prop | Type | Default | Description |\n|------|------|---------|-------------|\n| `title` | `string` | -- | Column title |\n| `items` | `KanbanItem[]` | -- | `{ id, title, description?, tags?, assignee? }` |\n| `count` | `number` | -- | Override count badge |\n| `color` | `string` | -- | Header accent color |\n| `onItemClick` | `(item) => void` | -- | Card click callback |\n| `onAddItem` | `() => void` | -- | Add button callback |\n\n---\n\n#### HeatmapCalendar\n\nGitHub-style contribution heatmap calendar with configurable color scale.\n\n```tsx\nimport { HeatmapCalendar } from '@annondeveloper/ui-kit'\n\n<HeatmapCalendar data={dailyMetrics} onDayClick={(d) => showDayDetail(d.date)} showMonthLabels showDayLabels />\n```\n\n| Prop | Type | Default | Description |\n|------|------|---------|-------------|\n| `data` | `DayValue[]` | -- | `{ date: 'YYYY-MM-DD', value: number }` |\n| `startDate` | `string` | 365 days ago | Start date |\n| `endDate` | `string` | Today | End date |\n| `colorScale` | `string[]` | Green 5-step scale | 5 colors lightest to darkest |\n| `onDayClick` | `(day) => void` | -- | Day click callback |\n| `showMonthLabels` | `boolean` | `true` | Month labels at top |\n| `showDayLabels` | `boolean` | `true` | Day-of-week labels |\n| `tooltipFormat` | `(day) => string` | -- | Custom tooltip format |\n\n---\n\n#### ToastProvider / useToast\n\nToast notification system using `ToastProvider` and the `useToast` hook.\n\n```tsx\nimport { ToastProvider, useToast, Button } from '@annondeveloper/ui-kit'\n\nfunction App() {\n  return (\n    <ToastProvider position=\"bottom-right\">\n      <Content />\n    </ToastProvider>\n  )\n}\n\nfunction Content() {\n  const toast = useToast()\n  return (\n    <>\n      <Button onClick={() => toast.success('Deployment complete')}>Deploy</Button>\n      <Button onClick={() => toast.error('Connection failed')}>Test Error</Button>\n    </>\n  )\n}\n```\n\n| Prop | Type | Default | Description |\n|------|------|---------|-------------|\n| `position` | `'top-right' \\| 'top-left' \\| 'bottom-right' \\| 'bottom-left'` | `'bottom-right'` | Screen position |\n| `duration` | `number` | `4000` | Auto-dismiss (ms) |\n\n---\n\n#### SuccessCheckmark\n\nAnimated SVG checkmark with circle and path draw animations.\n\n```tsx\nimport { SuccessCheckmark } from '@annondeveloper/ui-kit'\n\n<SuccessCheckmark size={24} />\n```\n\n| Prop | Type | Default | Description |\n|------|------|---------|-------------|\n| `size` | `number` | `20` | SVG size in pixels |\n\n---\n\n## Utilities\n\n### Class Merging\n\n```tsx\nimport { cn } from '@annondeveloper/ui-kit'\n\ncn('px-4 py-2', isActive && 'bg-blue-500', className)\n```\n\n### Formatters\n\n| Function | Example | Output |\n|----------|---------|--------|\n| `fmtBps(n)` | `fmtBps(1_000_000_000)` | `\"1.0 GB/s\"` |\n| `fmtBytes(n)` | `fmtBytes(1_073_741_824)` | `\"1.0 GB\"` |\n| `fmtPct(n, d?)` | `fmtPct(95.6)` | `\"95.6%\"` |\n| `fmtUptime(ratio)` | `fmtUptime(0.999)` | `\"99.90%\"` |\n| `fmtRelative(timestamp)` | `fmtRelative(Date.now() - 3600000)` | `\"1 hour ago\"` |\n| `fmtCompact(n)` | `fmtCompact(480_933_305)` | `\"480.9M\"` |\n| `fmtDuration(secs)` | `fmtDuration(0.003)` | `\"3ms\"` |\n| `stripCidr(ip)` | `stripCidr('10.0.0.1/32')` | `\"10.0.0.1\"` |\n| `clamp(v, min, max)` | `clamp(150, 0, 100)` | `100` |\n\n### createBadgeVariant\n\nFactory for domain-specific badge components. See [Badge](#badge) section above.\n\n---\n\n## Theme System\n\nThe library uses CSS custom properties for theming. Dark mode is the default; add the `light` class to `<html>` for light mode.\n\n### Token Reference\n\n| Token | Purpose | Dark Default | Light Default |\n|-------|---------|--------------|---------------|\n| `--bg-base` | Page background | `222 47% 7%` | `210 40% 98%` |\n| `--bg-surface` | Card/panel background | `222 40% 10%` | `0 0% 100%` |\n| `--bg-elevated` | Elevated surface (dropdowns, popovers) | `222 35% 14%` | `210 40% 96%` |\n| `--bg-overlay` | Overlay/hover background ","readmeFilename":"README.md"}