{"_id":"@aindy/ui-kit","_rev":"7-6ae9953db20ee0d715fe3f3a37b842a9","name":"@aindy/ui-kit","dist-tags":{"latest":"2.0.0"},"versions":{"1.0.0":{"name":"@aindy/ui-kit","version":"1.0.0","_id":"@aindy/ui-kit@1.0.0","maintainers":[{"name":"kingknight","email":"shawnknight@the-master-plan.com"}],"dist":{"shasum":"bd28970a112d1a9e4b06e1af3cb4f4f558f04e37","tarball":"https://registry.npmjs.org/@aindy/ui-kit/-/ui-kit-1.0.0.tgz","fileCount":28,"integrity":"sha512-Nj/Bv09Sbw1UlydcgzHG7FFxfEMPLVEzaUT+0bYJlfBN8NLspzhAfhPdU0wxuN9mM3hN7UaZ5BdhuwzzkLU6WA==","signatures":[{"sig":"MEUCIQCFFSCIvOy5K8XyaJX9jmgTUL4Ak+xy0U22YsjKmmnj+QIgLt+p92ssbnq80Zx4g1/ANkL1Djuye7nsX98SPJKEmoE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1304883},"main":"dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"61b6145caacbf5b4ec401ebd7a3ad9b54fd93024","scripts":{"lint":"eslint src","test":"vitest run","build":"vite build","test:watch":"vitest","build:watch":"vite build --watch"},"_npmUser":{"name":"kingknight","email":"shawnknight@the-master-plan.com"},"_npmVersion":"11.6.2","description":"Shared UI components, contexts, and API core for the AINDY platform","directories":{},"_nodeVersion":"24.13.0","dependencies":{"clsx":"^2.1.1","tailwind-merge":"^3.4.0","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tooltip":"^1.2.8","class-variance-authority":"^0.7.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.1.7","jsdom":"^29.0.2","react":"^19.1.1","vitest":"^4.1.5","react-dom":"^19.1.1","typescript":"^5.7.3","@types/react":"^19.1.16","vite-plugin-dts":"^4.5.4","@types/react-dom":"^19.1.9","react-router-dom":"^6.30.2","@vitejs/plugin-react":"^5.0.4","@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","react-router-dom":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ui-kit_1.0.0_1779604635624_0.36523723402906216","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@aindy/ui-kit","version":"1.0.2","_id":"@aindy/ui-kit@1.0.2","maintainers":[{"name":"kingknight","email":"shawnknight@the-master-plan.com"}],"homepage":"https://github.com/Masterplanner25/aindy-ui-kit#readme","bugs":{"url":"https://github.com/Masterplanner25/aindy-ui-kit/issues"},"dist":{"shasum":"c39ddb8ef740e5d053feba31716bafa48f28da74","tarball":"https://registry.npmjs.org/@aindy/ui-kit/-/ui-kit-1.0.2.tgz","fileCount":28,"integrity":"sha512-QViQ28QNtKjltEgEF4Qdsg+DLxA1sTclFhnI6peOzTtxCKNmDP2Td1/f1nMfno03QqpVbTflhAxUCTshp8O8wg==","signatures":[{"sig":"MEQCIGVKPWJnBcF7zUqaTbNETNhwcrPobYUlkUTGhkd3Fu3QAiBKio6IYEE1n64n3t5NltgugtmJr9GfXpBf5hO/Vj5EmQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aindy%2fui-kit@1.0.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1305538},"main":"dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"scripts":{"lint":"eslint src","test":"vitest run --passWithNoTests","build":"vite build","test:watch":"vitest","build:watch":"vite build --watch"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:22746a6a-fccc-4b69-a218-534d72e5bfe2"}},"repository":{"url":"git+https://github.com/Masterplanner25/aindy-ui-kit.git","type":"git"},"_npmVersion":"11.16.0","description":"Shared UI components, contexts, and API core for the AINDY platform","directories":{},"_nodeVersion":"24.16.0","dependencies":{"clsx":"^2.1.1","tailwind-merge":"^3.4.0","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tooltip":"^1.2.8","class-variance-authority":"^0.7.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.1.7","jsdom":"^29.0.2","react":"^19.1.1","eslint":"^10.4.0","vitest":"^4.1.5","globals":"^17.6.0","react-dom":"^19.1.1","@eslint/js":"^10.0.1","typescript":"^5.7.3","@types/react":"^19.1.16","vite-plugin-dts":"^4.5.4","@types/react-dom":"^19.1.9","react-router-dom":"^6.30.2","typescript-eslint":"^8.59.4","@vitejs/plugin-react":"^5.0.4","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1","eslint-plugin-react-hooks":"^7.1.1","@testing-library/user-event":"^14.6.1"},"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0","react-router-dom":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ui-kit_1.0.2_1780030605843_0.40420258983177026","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@aindy/ui-kit","version":"1.0.3","_id":"@aindy/ui-kit@1.0.3","maintainers":[{"name":"kingknight","email":"shawnknight@the-master-plan.com"}],"homepage":"https://github.com/Masterplanner25/aindy-ui-kit#readme","bugs":{"url":"https://github.com/Masterplanner25/aindy-ui-kit/issues"},"dist":{"shasum":"f083102f96e3d8becb8893faeefab68c649267dc","tarball":"https://registry.npmjs.org/@aindy/ui-kit/-/ui-kit-1.0.3.tgz","fileCount":28,"integrity":"sha512-vXa3WV9FCsGFrA5e0OoWvKh3H8SnkFrY+APDGLe7kXlHq5yZfEUjNjmpoGwnSTA8zTw3B1sXK0oabYa6epGOIA==","signatures":[{"sig":"MEYCIQDTUzTfW1vloCaD3rVIeXWY75/rZIKiRNgkiR+WE8zZ2wIhAMuKcyyQB2zl0zFXwdb0itZW6m5Q25D3QBhLvTshUroi","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aindy%2fui-kit@1.0.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1305652},"main":"dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"scripts":{"lint":"eslint src","test":"vitest run --passWithNoTests","build":"vite build","test:watch":"vitest","build:watch":"vite build --watch"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:22746a6a-fccc-4b69-a218-534d72e5bfe2"}},"repository":{"url":"git+https://github.com/Masterplanner25/aindy-ui-kit.git","type":"git"},"_npmVersion":"11.16.0","description":"Shared UI components, contexts, and API core for the AINDY platform","directories":{},"_nodeVersion":"24.16.0","dependencies":{"clsx":"^2.1.1","tailwind-merge":"^3.4.0","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tooltip":"^1.2.8","class-variance-authority":"^0.7.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.1.7","jsdom":"^29.0.2","react":"^19.1.1","eslint":"^10.4.0","vitest":"^4.1.5","globals":"^17.6.0","react-dom":"^19.1.1","@eslint/js":"^10.0.1","typescript":"^5.7.3","@types/react":"^19.1.16","vite-plugin-dts":"^4.5.4","@types/react-dom":"^19.1.9","react-router-dom":"^6.30.2","typescript-eslint":"^8.59.4","@vitejs/plugin-react":"^5.0.4","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1","eslint-plugin-react-hooks":"^7.1.1","@testing-library/user-event":"^14.6.1"},"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0","react-router-dom":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ui-kit_1.0.3_1780290606127_0.6184599778525901","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@aindy/ui-kit","version":"1.0.4","_id":"@aindy/ui-kit@1.0.4","maintainers":[{"name":"kingknight","email":"shawnknight@the-master-plan.com"}],"homepage":"https://github.com/Masterplanner25/aindy-ui-kit#readme","bugs":{"url":"https://github.com/Masterplanner25/aindy-ui-kit/issues"},"dist":{"shasum":"4914cf2920d9da2ba3c6d4bd8c7090de97b7a13b","tarball":"https://registry.npmjs.org/@aindy/ui-kit/-/ui-kit-1.0.4.tgz","fileCount":28,"integrity":"sha512-bTmnO2lUcBx1jZvgnLiaEiURQsoWdcPEpIQu4L7MCP7Lv/I/cwE9y2M1K0F/aXZm9Nds+QO5iJ9MBnDqZMkGVA==","signatures":[{"sig":"MEYCIQDUt55Vgjx+CkkLZp+I6lzy/Vy05hweMhdmufpZEavk3wIhANU5hFkbsESPYpJtYnRZH6jSXK0qxYEvp4Osy9xg3IhT","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aindy%2fui-kit@1.0.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1306754},"main":"dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"scripts":{"lint":"eslint src","test":"vitest run --passWithNoTests","build":"vite build","test:watch":"vitest","build:watch":"vite build --watch"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:22746a6a-fccc-4b69-a218-534d72e5bfe2"}},"repository":{"url":"git+https://github.com/Masterplanner25/aindy-ui-kit.git","type":"git"},"_npmVersion":"11.16.0","description":"Shared UI components, contexts, and API core for the AINDY platform","directories":{},"_nodeVersion":"24.16.0","dependencies":{"clsx":"^2.1.1","tailwind-merge":"^3.4.0","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tooltip":"^1.2.8","class-variance-authority":"^0.7.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.1.7","jsdom":"^29.0.2","react":"^19.1.1","eslint":"^10.4.0","vitest":"^4.1.5","globals":"^17.6.0","react-dom":"^19.1.1","@eslint/js":"^10.0.1","typescript":"^5.7.3","@types/react":"^19.1.16","vite-plugin-dts":"^4.5.4","@types/react-dom":"^19.1.9","react-router-dom":"^6.30.2","typescript-eslint":"^8.59.4","@vitejs/plugin-react":"^5.0.4","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1","eslint-plugin-react-hooks":"^7.1.1","@testing-library/user-event":"^14.6.1"},"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0","react-router-dom":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ui-kit_1.0.4_1780368965506_0.6455946771698244","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"@aindy/ui-kit","version":"1.0.5","_id":"@aindy/ui-kit@1.0.5","maintainers":[{"name":"kingknight","email":"shawnknight@the-master-plan.com"}],"homepage":"https://github.com/Masterplanner25/aindy-ui-kit#readme","bugs":{"url":"https://github.com/Masterplanner25/aindy-ui-kit/issues"},"dist":{"shasum":"23282aa2a308af610afc0cdc61abe465bb642a62","tarball":"https://registry.npmjs.org/@aindy/ui-kit/-/ui-kit-1.0.5.tgz","fileCount":28,"integrity":"sha512-cLSu0aBPe7E7si+ZceV1qBYOOp/hWz04Q8yIwUs2tqFjQYERAKSz0EGYfTX7Mrnux+YRexHOcWRsFPGHcmLcLA==","signatures":[{"sig":"MEYCIQDS2A9BOFykyggZeZhWxIaZl5mBkV8DBhVxNIiGhUpF3gIhAJymNIe5CaFLjRU3VapjGzxqfFRqSXbSgnIFeDuWrECQ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1307218},"main":"dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"fe1a385905f5f7ef6c07fba7ae4ef768be4fd6d3","scripts":{"lint":"eslint src","test":"vitest run --passWithNoTests","build":"vite build","test:watch":"vitest","build:watch":"vite build --watch"},"_npmUser":{"name":"kingknight","email":"shawnknight@the-master-plan.com"},"repository":{"url":"git+https://github.com/Masterplanner25/aindy-ui-kit.git","type":"git"},"_npmVersion":"11.6.2","description":"Shared UI components, contexts, and API core for the AINDY platform","directories":{},"_nodeVersion":"24.13.0","dependencies":{"clsx":"^2.1.1","tailwind-merge":"^3.4.0","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tooltip":"^1.2.8","class-variance-authority":"^0.7.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.1.7","jsdom":"^29.0.2","react":"^19.1.1","eslint":"^10.4.0","vitest":"^4.1.5","globals":"^17.6.0","react-dom":"^19.1.1","@eslint/js":"^10.0.1","typescript":"^5.7.3","@types/react":"^19.1.16","vite-plugin-dts":"^4.5.4","@types/react-dom":"^19.1.9","react-router-dom":"^6.30.2","typescript-eslint":"^8.59.4","@vitejs/plugin-react":"^5.0.4","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1","eslint-plugin-react-hooks":"^7.1.1","@testing-library/user-event":"^14.6.1"},"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0","react-router-dom":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ui-kit_1.0.5_1780461949415_0.8670934891731863","host":"s3://npm-registry-packages-npm-production"}},"1.0.6":{"name":"@aindy/ui-kit","version":"1.0.6","_id":"@aindy/ui-kit@1.0.6","maintainers":[{"name":"kingknight","email":"shawnknight@the-master-plan.com"}],"homepage":"https://github.com/Masterplanner25/aindy-ui-kit#readme","bugs":{"url":"https://github.com/Masterplanner25/aindy-ui-kit/issues"},"dist":{"shasum":"1a899fbeefbb7424eaa2ea82a554ea5b53243665","tarball":"https://registry.npmjs.org/@aindy/ui-kit/-/ui-kit-1.0.6.tgz","fileCount":29,"integrity":"sha512-+NjmtemxqYIcDTa/k8Fj6+80xmM9f8IzTMhQG8dlrqaKEwE4DUlVDxLUZvzypztOq/ASBdF1nJDEFqTmsGgR8w==","signatures":[{"sig":"MEYCIQC5i/bTWzCevaCuiUNMuA8UhvHpd2N9aFT8KaO+GfuCogIhAKpyZBMaUgHp0IjOYDf8RiKT5//21lwcXWE9nB5unDun","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aindy%2fui-kit@1.0.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1325686},"main":"dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"scripts":{"lint":"eslint src","test":"vitest run --passWithNoTests","build":"vite build","test:watch":"vitest","build:watch":"vite build --watch"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:22746a6a-fccc-4b69-a218-534d72e5bfe2"}},"repository":{"url":"git+https://github.com/Masterplanner25/aindy-ui-kit.git","type":"git"},"_npmVersion":"12.0.1","description":"Shared UI components, contexts, and API core for the AINDY platform","directories":{},"_nodeVersion":"24.18.0","dependencies":{"clsx":"^2.1.1","tailwind-merge":"^3.4.0","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tooltip":"^1.2.8","class-variance-authority":"^0.7.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.1.7","jsdom":"^29.0.2","react":"^19.1.1","eslint":"^10.4.0","vitest":"^4.1.5","globals":"^17.6.0","react-dom":"^19.1.1","@eslint/js":"^10.0.1","typescript":"^5.7.3","@types/react":"^19.1.16","vite-plugin-dts":"^4.5.4","@types/react-dom":"^19.1.9","react-router-dom":"^6.30.2","typescript-eslint":"^8.59.4","@vitejs/plugin-react":"^5.0.4","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1","eslint-plugin-react-hooks":"^7.1.1","@testing-library/user-event":"^14.6.1"},"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0","react-router-dom":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ui-kit_1.0.6_1784412322573_0.8962287393521524","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"@aindy/ui-kit","version":"2.0.0","description":"Shared UI components, contexts, and API core for the AINDY platform","repository":{"type":"git","url":"git+https://github.com/Masterplanner25/aindy-ui-kit.git"},"type":"module","main":"dist/index.cjs","module":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"publishConfig":{"access":"public"},"scripts":{"build":"vite build","build:watch":"vite build --watch","test":"vitest run --passWithNoTests","test:watch":"vitest","lint":"eslint src"},"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0","react-router-dom":"^6.0.0 || ^7.0.0"},"dependencies":{"@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tooltip":"^1.2.8","class-variance-authority":"^0.7.1","clsx":"^2.1.1","tailwind-merge":"^3.4.0"},"devDependencies":{"@eslint/js":"^10.0.1","@testing-library/jest-dom":"^6.9.1","@testing-library/react":"^16.3.2","@testing-library/user-event":"^14.6.1","@types/react":"^19.1.16","@types/react-dom":"^19.1.9","@vitejs/plugin-react":"^5.0.4","eslint":"^10.4.0","eslint-plugin-react-hooks":"^7.1.1","globals":"^17.6.0","jsdom":"^29.0.2","react":"^19.1.1","react-dom":"^19.1.1","react-router-dom":"^6.30.2","typescript":"^5.7.3","typescript-eslint":"^8.59.4","vite":"^7.1.7","vite-plugin-dts":"^4.5.4","vitest":"^4.1.5"},"_id":"@aindy/ui-kit@2.0.0","bugs":{"url":"https://github.com/Masterplanner25/aindy-ui-kit/issues"},"homepage":"https://github.com/Masterplanner25/aindy-ui-kit#readme","_nodeVersion":"24.18.0","_npmVersion":"12.0.2","dist":{"integrity":"sha512-s5QNWdnJyf90RV/Gr317UVvIpKUVyZKJhdM8M3GpBjO0LACwf/ofpYon7EFBi2xcnS1ztbEBs4BFSSI++gcCIw==","shasum":"45e69f3e13c1730c39cb90de32f3d8da2867d4e3","tarball":"https://registry.npmjs.org/@aindy/ui-kit/-/ui-kit-2.0.0.tgz","fileCount":29,"unpackedSize":1341694,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aindy%2fui-kit@2.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQC3Agdyib1AZYKuwU5AcliW6bUJjHcTs6VBVAOr9E7mtAIgdsOmKCXK6xAETS+AAT9UWpU4lVPXxJpt+TZWlXIvUUs="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:22746a6a-fccc-4b69-a218-534d72e5bfe2"}},"directories":{},"maintainers":[{"name":"kingknight","email":"shawnknight@the-master-plan.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/ui-kit_2.0.0_1785719134390_0.5357827293409658"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-24T06:37:15.447Z","modified":"2026-08-03T01:05:34.872Z","1.0.0":"2026-05-24T06:37:15.817Z","1.0.2":"2026-05-29T04:56:46.044Z","1.0.3":"2026-06-01T05:10:06.345Z","1.0.4":"2026-06-02T02:56:05.672Z","1.0.5":"2026-06-03T04:45:49.664Z","1.0.6":"2026-07-18T22:05:22.713Z","2.0.0":"2026-08-03T01:05:34.536Z"},"bugs":{"url":"https://github.com/Masterplanner25/aindy-ui-kit/issues"},"homepage":"https://github.com/Masterplanner25/aindy-ui-kit#readme","repository":{"type":"git","url":"git+https://github.com/Masterplanner25/aindy-ui-kit.git"},"description":"Shared UI components, contexts, and API core for the AINDY platform","maintainers":[{"name":"kingknight","email":"shawnknight@the-master-plan.com"}],"readme":"# @aindy/ui-kit\n\nShared UI components, React contexts, and API core for **AINDY platform** frontends.\n\n`@aindy/ui-kit` is the client-side counterpart to the [`aindy-runtime`](https://pypi.org/project/aindy-runtime/)\nbackend: it centralizes the authenticated HTTP layer, the canonical backend route table,\nauth/session contexts, and a small set of shared components and UI primitives so every\nfrontend built on the runtime talks to it the same way. It is published to npm and consumed\nas a compiled bundle (`dist/` is built at publish time, not committed).\n\n## Install\n\n```bash\nnpm install @aindy/ui-kit\n```\n\n**Peer dependencies** (provided by the host app):\n\n- `react` ^19\n- `react-dom` ^19\n- `react-router-dom` ^6\n\n## What it exports\n\n### API core (`./api/_core.js`)\n\nThe authenticated request layer against the runtime. `buildApiUrl` prepends `API_BASE` to a\n`ROUTES` value; the `request` family attaches the stored token and returns the parsed body.\n\n| Export | Purpose |\n|---|---|\n| `request`, `authRequest`, `adminRequest`, `taggedRequest`, `requestAbsolute` | HTTP calls (auth-scoped / admin-scoped / cache-tagged / absolute-URL variants) |\n| `buildApiUrl` | Resolve a `ROUTES` value against `API_BASE` |\n| `getStoredToken`, `setStoredToken`, `clearStoredToken` | JWT storage |\n| `unwrapEnvelope` | Unwrap the runtime's `{ data: … }` response envelope |\n| `ApiError` | Typed error carrying status + body |\n| `API_BASE` | Build-time API base (`VITE_API_BASE_URL`, default `\"\"` — relative to origin) |\n\n### Routes (`./api/_routes.js`)\n\n- `ROUTES` — the canonical backend route table. **Every runtime/platform route carries the\n  full `/platform` prefix** (e.g. `ROUTES.OPERATOR.FLOW_STRATEGIES` → `/platform/flows/strategies`).\n  A value that drops the prefix segment 404s.\n- `FEATURE_FLAGS` — NavLink gates for routes that are conditionally served; flip a flag to\n  `true` when its backing runtime route lands.\n\n> **Runtime routes vs app routes.** `ROUTES` should carry **runtime/platform** paths only —\n> these are shared by every consumer, and the runtime's authoritative list lives in\n> [`aindy-runtime` `docs/runtime/UI_CONTRACT.md`](https://github.com/Masterplanner25/aindy-runtime/blob/main/docs/runtime/UI_CONTRACT.md).\n> **App-domain** paths (e.g. `/compute/*` analytics, `/seo/*`) are **not** runtime routes and\n> must not be baked into this shared kit; a consuming app owns those in its own route map that\n> spreads and extends `ROUTES` (mirroring the backend's runtime/app split).\n\n### Auth (`./api/auth.js`)\n\n`bootIdentity`, `loginUser`, `registerUser`.\n\n> **Invariant:** all three must `.then(unwrapEnvelope)` — `bootIdentity` populates\n> `system.runtime.boot_mode` (read by the post-login redirect); returning the raw envelope\n> silently breaks it.\n\n### Contexts\n\n- `AuthProvider` / `useAuth` — session + identity.\n- `SystemProvider` / `useSystem` — runtime system state (incl. `boot_mode`).\n\n### Components\n\n`AppShell`, `ProtectedRoute`, `VersionMismatchBanner`, `Toast`, `LoadingPanel`,\n`DomainError`, `AdminAccessRequired` (+ `useAdminApiGuard`), `EmptyState`.\n\n### UI primitives\n\n`Button` (+ `buttonVariants`), the `Card` family (`Card`, `CardHeader`, `CardTitle`,\n`CardDescription`, `CardContent`, `CardFooter`), the `Tooltip` family (`Tooltip`,\n`TooltipTrigger`, `TooltipContent`, `TooltipProvider`).\n\n### Utilities\n\n`cn` (class merge), `APPROVAL_EVENT`, `useApiCall`, `useToast`, `safeArray`, `safeMap`.\n\n## Usage\n\n```jsx\nimport {\n  AuthProvider, SystemProvider, ProtectedRoute, AppShell,\n  ROUTES, request, unwrapEnvelope,\n} from \"@aindy/ui-kit\";\n\nfunction App() {\n  return (\n    <AuthProvider>\n      <SystemProvider>\n        <AppShell>{/* routes */}</AppShell>\n      </SystemProvider>\n    </AuthProvider>\n  );\n}\n\n// A backend call through the canonical route table:\nconst strategies = await request(ROUTES.OPERATOR.FLOW_STRATEGIES).then(unwrapEnvelope);\n```\n\n## Development\n\n```bash\nnpm run build    # vite build → dist/ (index.js, index.cjs, index.d.ts)\nnpm run lint     # eslint src\nnpm test         # vitest\n```\n\n## Versioning & the runtime\n\n`@aindy/ui-kit` and `aindy-runtime` are **independently versioned**. This package *consumes*\nthe runtime's HTTP contract; the runtime does not depend on it. A ui-kit release does **not**\nrequire a runtime release (and vice versa) — a runtime bump is only relevant when a ui-kit\nchange depends on a *new* runtime route or behavior. Keep `ROUTES` in sync with the runtime's\n`docs/runtime/UI_CONTRACT.md`; a route that drifts from a served backend path is the\n`UIKIT-ROUTE-DRIFT-1` failure mode.\n\n## Publishing\n\n`dist/` is gitignored and built fresh at publish:\n\n```bash\nnpm version patch        # e.g. 1.0.5 → 1.0.6\nnpm run build\nnpm publish\n```\n","readmeFilename":"README.md"}