{"_id":"@abstractframework/ui-kit","_rev":"21-84698e906f0b9adb925a4373cfc31072","name":"@abstractframework/ui-kit","dist-tags":{"latest":"0.8.5"},"versions":{"0.1.0":{"name":"@abstractframework/ui-kit","version":"0.1.0","keywords":["abstractframework","ui","theme","tokens","react"],"author":{"name":"Laurent-Philippe Albou"},"license":"MIT","_id":"@abstractframework/ui-kit@0.1.0","maintainers":[{"name":"lpalbou","email":"lpalbou@gmail.com"}],"homepage":"https://github.com/lpalbou/AbstractUIC#readme","bugs":{"url":"https://github.com/lpalbou/AbstractUIC/issues"},"dist":{"shasum":"51f35cdca7d0dbe62bbf51629b686aafb97c4541","tarball":"https://registry.npmjs.org/@abstractframework/ui-kit/-/ui-kit-0.1.0.tgz","fileCount":27,"integrity":"sha512-htfgEk7B+oFdLzNrSzeCt8o6px/QWXE2gWgisucUYlR5qz8dJNuStPr/UpDEKcXyoO6r6i2V8vOt04b4O0HG+A==","signatures":[{"sig":"MEUCIB1MQ91HRb0E4oDKbfzJx4jsJGXp1HE7MxlxmY0nHxghAiEArxI0xyqW9pcXuufmYfVJ/nGGW/J/PhOmK1x6vo3iiPs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":72160},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./theme.css":"./src/theme.css"},"gitHead":"57486fdba1fbce7e3e9075908073031c70eb83ae","scripts":{"build":"tsc","prepublishOnly":"npm run build"},"_npmUser":{"name":"lpalbou","email":"lpalbou@gmail.com"},"repository":{"url":"git+https://github.com/lpalbou/AbstractUIC.git","type":"git","directory":"ui-kit"},"_npmVersion":"10.9.2","description":"Shared UI tokens + themes for AbstractFramework thin clients (AbstractFlow, AbstractObserver, etc.).","directories":{},"sideEffects":["*.css"],"_nodeVersion":"23.11.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.3.3","@types/react":"^18.2.48","@types/react-dom":"^18.2.18"},"peerDependencies":{"react":"^18.0.0","react-dom":"^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ui-kit_0.1.0_1770194389350_0.5188718722547938","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@abstractframework/ui-kit","version":"0.1.2","keywords":["abstractframework","ui","theme","tokens","react"],"author":{"name":"Laurent-Philippe Albou"},"license":"MIT","_id":"@abstractframework/ui-kit@0.1.2","maintainers":[{"name":"lpalbou","email":"lpalbou@gmail.com"}],"homepage":"https://github.com/lpalbou/AbstractUIC#readme","bugs":{"url":"https://github.com/lpalbou/AbstractUIC/issues"},"dist":{"shasum":"bd44e6463d08d2719865bcfa217dab900e43567e","tarball":"https://registry.npmjs.org/@abstractframework/ui-kit/-/ui-kit-0.1.2.tgz","fileCount":27,"integrity":"sha512-2liWS63d41j/xuhIbTS9CafUHC76OOemBGvyxhIh9eBtCyitPQZsF3r++mkJA//+4mS06me6qXsN9nFSKnYhmg==","signatures":[{"sig":"MEUCIES/QBqOAjgXlyBs/lN2gD0I27YUjV2Jc9V/gN1Y08FjAiEA68f1YTxJr3nwyrA6dOrDVLXtPJb6XZuPW+swDIfmfug=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":72299},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./theme.css":"./src/theme.css"},"gitHead":"3da7f7f10639dd53f4b7d6e72748f9432c0d8860","scripts":{"build":"tsc","prepublishOnly":"npm run build"},"_npmUser":{"name":"lpalbou","email":"lpalbou@gmail.com"},"repository":{"url":"git+https://github.com/lpalbou/AbstractUIC.git","type":"git","directory":"ui-kit"},"_npmVersion":"10.9.2","description":"Shared UI tokens + themes for AbstractFramework thin clients (AbstractFlow, AbstractObserver, etc.).","directories":{},"sideEffects":["*.css"],"_nodeVersion":"23.11.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"react":"^18.0.0","react-dom":"^18.0.0","typescript":"^5.3.3","@types/react":"^18.2.48","@types/react-dom":"^18.2.18"},"peerDependencies":{"react":"^18.0.0","react-dom":"^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ui-kit_0.1.2_1770278718817_0.844049981129831","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@abstractframework/ui-kit","version":"0.1.3","keywords":["abstractframework","ui","theme","tokens","react"],"author":{"name":"Laurent-Philippe Albou"},"license":"MIT","_id":"@abstractframework/ui-kit@0.1.3","maintainers":[{"name":"lpalbou","email":"lpalbou@gmail.com"}],"homepage":"https://github.com/lpalbou/AbstractUIC#readme","bugs":{"url":"https://github.com/lpalbou/AbstractUIC/issues"},"dist":{"shasum":"812dbcbf9f0e76cc7aa2fc36ff2920ee1193881b","tarball":"https://registry.npmjs.org/@abstractframework/ui-kit/-/ui-kit-0.1.3.tgz","fileCount":27,"integrity":"sha512-t+qSz4IqX9vXHTGyJXMdt0cZat/KnZxGqhXbsaPJ2ADDikjXget/Em7f5C3LMzTOZXFj9qVEFHYFjycmv2z3UA==","signatures":[{"sig":"MEYCIQCeykcwaemOJMFX0yMTWE0Q+40zT/wKiq4Nn9lP4ANqLgIhAOfPdTxx4BhSbYZtCieEZ69KSQEH1VB/7fageJTP1JdR","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":72299},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./theme.css":"./src/theme.css"},"gitHead":"3da7f7f10639dd53f4b7d6e72748f9432c0d8860","scripts":{"build":"tsc","prepublishOnly":"npm run build"},"_npmUser":{"name":"lpalbou","email":"lpalbou@gmail.com"},"repository":{"url":"git+https://github.com/lpalbou/AbstractUIC.git","type":"git","directory":"ui-kit"},"_npmVersion":"10.9.2","description":"Shared UI tokens + themes for AbstractFramework thin clients (AbstractFlow, AbstractObserver, etc.).","directories":{},"sideEffects":["*.css"],"_nodeVersion":"23.11.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"react":"^18.0.0","react-dom":"^18.0.0","typescript":"^5.3.3","@types/react":"^18.2.48","@types/react-dom":"^18.2.18"},"peerDependencies":{"react":"^18.0.0","react-dom":"^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ui-kit_0.1.3_1770287259460_0.8079115665900927","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"@abstractframework/ui-kit","version":"0.1.6","keywords":["abstractframework","ui","theme","tokens","react"],"author":{"name":"Laurent-Philippe Albou"},"license":"MIT","_id":"@abstractframework/ui-kit@0.1.6","maintainers":[{"name":"lpalbou","email":"lpalbou@gmail.com"}],"homepage":"https://github.com/lpalbou/AbstractUIC#readme","bugs":{"url":"https://github.com/lpalbou/AbstractUIC/issues"},"dist":{"shasum":"37c43cd2a579194d165cbcb68155dbf247499c60","tarball":"https://registry.npmjs.org/@abstractframework/ui-kit/-/ui-kit-0.1.6.tgz","fileCount":30,"integrity":"sha512-QFywMZSX7oMu4z+5pHROyEojk3s4fERi4kWDGYKhTX3iTrM8X8z1j91vlqtsuKh5E0MDNp9kIwBPwODBXU8gjw==","signatures":[{"sig":"MEQCIHNewrP9c1UGa7oCAw1RoI7KYGABFQL5Q4ef1MrxOh8kAiBn/3w9jNw0+pnAZJ1CZ/YG1B0B2r0OBNAEIkmgGEfIBw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@abstractframework%2fui-kit@0.1.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":92829},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./theme.css":"./src/theme.css"},"gitHead":"ff3aec28178750f4b067e6faf437d693e901f812","scripts":{"build":"tsc","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:2acff5e2-2b6e-450e-93f7-d2d4a7ec0242"}},"repository":{"url":"git+https://github.com/lpalbou/AbstractUIC.git","type":"git","directory":"ui-kit"},"_npmVersion":"11.12.1","description":"Shared UI tokens + themes for AbstractFramework thin clients (AbstractFlow, AbstractObserver, etc.).","directories":{},"sideEffects":["*.css"],"_nodeVersion":"24.15.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"react":"^18.0.0","react-dom":"^18.0.0","typescript":"^5.3.3","@types/react":"^18.2.48","@types/react-dom":"^18.2.18"},"peerDependencies":{"react":"^18.0.0","react-dom":"^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ui-kit_0.1.6_1779764212863_0.9286683162069864","host":"s3://npm-registry-packages-npm-production"}},"0.1.7":{"name":"@abstractframework/ui-kit","version":"0.1.7","keywords":["abstractframework","ui","theme","tokens","react"],"author":{"name":"Laurent-Philippe Albou"},"license":"MIT","_id":"@abstractframework/ui-kit@0.1.7","maintainers":[{"name":"lpalbou","email":"lpalbou@gmail.com"}],"homepage":"https://github.com/lpalbou/AbstractUIC#readme","bugs":{"url":"https://github.com/lpalbou/AbstractUIC/issues"},"dist":{"shasum":"f2d51bcd320f4f08c5a384191c20051a9b560ad2","tarball":"https://registry.npmjs.org/@abstractframework/ui-kit/-/ui-kit-0.1.7.tgz","fileCount":33,"integrity":"sha512-X7ttUwCGJjcU/qZxlppeaT/mPcHjLSTwTYN5caL23enznIooMM8HxEbAYohrvTyL3FgodG2V433ZclYH0euu+Q==","signatures":[{"sig":"MEUCIQDkhePcuvKyrEIZXUGGY+CcbloAKJrGT0VuN7BEjACs5wIgImRdJkzzvPPge7df0py127Cxx5rVltWHS7txbkXweVA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@abstractframework%2fui-kit@0.1.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":106220},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./theme.css":"./src/theme.css"},"gitHead":"230de255d635a1cac3fabd0abd07d341b22c4f2f","scripts":{"build":"tsc","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:31b8b912-03f2-4163-95af-d1960bbb5301"}},"repository":{"url":"git+https://github.com/lpalbou/AbstractUIC.git","type":"git","directory":"ui-kit"},"_npmVersion":"11.13.0","description":"Shared UI tokens + themes for AbstractFramework thin clients (AbstractFlow, AbstractObserver, etc.).","directories":{},"sideEffects":["*.css"],"_nodeVersion":"24.16.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"react":"^18.0.0","react-dom":"^18.0.0","typescript":"^5.3.3","@types/react":"^18.2.48","@types/react-dom":"^18.2.18"},"peerDependencies":{"react":"^18.0.0","react-dom":"^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ui-kit_0.1.7_1780213943172_0.1198372492934272","host":"s3://npm-registry-packages-npm-production"}},"0.1.8":{"name":"@abstractframework/ui-kit","version":"0.1.8","keywords":["abstractframework","ui","theme","tokens","react"],"author":{"name":"Laurent-Philippe Albou"},"license":"MIT","_id":"@abstractframework/ui-kit@0.1.8","maintainers":[{"name":"lpalbou","email":"lpalbou@gmail.com"}],"homepage":"https://github.com/lpalbou/AbstractUIC#readme","bugs":{"url":"https://github.com/lpalbou/AbstractUIC/issues"},"dist":{"shasum":"91874e268dbad17bb9e81f0717373ac459e5fc28","tarball":"https://registry.npmjs.org/@abstractframework/ui-kit/-/ui-kit-0.1.8.tgz","fileCount":33,"integrity":"sha512-kiXcugK5TlP4/2MduN3MJtxWdh/mtQH9T5knz5JmeMtW+QeWiRljiZVuDCte/ERhv+XSF3Cw7dVs3kb7jckhTA==","signatures":[{"sig":"MEYCIQConb2pLA3fT/mknFmZOkspQNjUX226Af0ItwlXfnIAXQIhAJmL3lXmBPcEl83Mv8/nCVXDNvVxTDhl/Q/6edDDqgM8","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@abstractframework%2fui-kit@0.1.8","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":106220},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./theme.css":"./src/theme.css"},"gitHead":"5f37c4960d2953d163651430ddb77090761f06aa","scripts":{"build":"tsc","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:31b8b912-03f2-4163-95af-d1960bbb5301"}},"repository":{"url":"git+https://github.com/lpalbou/AbstractUIC.git","type":"git","directory":"ui-kit"},"_npmVersion":"11.13.0","description":"Shared UI tokens + themes for AbstractFramework thin clients (AbstractFlow, AbstractObserver, etc.).","directories":{},"sideEffects":["*.css"],"_nodeVersion":"24.16.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"react":"^18.0.0","react-dom":"^18.0.0","typescript":"^5.3.3","@types/react":"^18.2.48","@types/react-dom":"^18.2.18"},"peerDependencies":{"react":"^18.0.0","react-dom":"^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ui-kit_0.1.8_1781459576795_0.8117162395147086","host":"s3://npm-registry-packages-npm-production"}},"0.1.9":{"name":"@abstractframework/ui-kit","version":"0.1.9","keywords":["abstractframework","ui","theme","tokens","react"],"author":{"name":"Laurent-Philippe Albou"},"license":"MIT","_id":"@abstractframework/ui-kit@0.1.9","maintainers":[{"name":"lpalbou","email":"lpalbou@gmail.com"}],"homepage":"https://github.com/lpalbou/AbstractUIC#readme","bugs":{"url":"https://github.com/lpalbou/AbstractUIC/issues"},"dist":{"shasum":"e4e69c52716834349e16bd1d8dfcd4da971028d3","tarball":"https://registry.npmjs.org/@abstractframework/ui-kit/-/ui-kit-0.1.9.tgz","fileCount":97,"integrity":"sha512-otvOcU08RcxJFHf6Zwl4aZSBq3FUMNsnMROkjHVt2OEtkHJcHx3Px2WQ2uHCPTKXC/CUXTqTP8ErkQ1aNUz0wQ==","signatures":[{"sig":"MEUCIBRHJ/RVJAqH4KUh9KcKVvw9NCD3SNZY20tNvfgABcokAiEAs3wbiMOWzhKTOmz8/WSJaaGxCmkvZm7mFOA53ySHDL4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@abstractframework%2fui-kit@0.1.9","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":427553},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./theme.css":"./src/theme.css","./palette_seeds.json":"./palette_seeds.json"},"gitHead":"be9c6fc98da6894df366c55340b1d17680e05825","scripts":{"test":"node scripts/check_no_src_twins.mjs && node scripts/check_theme_tokens.mjs && node scripts/generate_palette_seeds.mjs --check && npm run build && node scripts/check_matrix_core.mjs && node scripts/check_matrix_wrapper.mjs && node scripts/check_phase_radio.mjs && node scripts/check_cognition_bloom.mjs && node scripts/check_conduct_core.mjs && node scripts/check_voice_hook.mjs && node scripts/audit_theme_contrast.mjs --strict","build":"tsc","prepublishOnly":"npm test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:31b8b912-03f2-4163-95af-d1960bbb5301"}},"repository":{"url":"git+https://github.com/lpalbou/AbstractUIC.git","type":"git","directory":"ui-kit"},"_npmVersion":"11.17.0","description":"Shared UI tokens + themes for AbstractFramework thin clients (AbstractFlow, AbstractObserver, etc.).","directories":{},"sideEffects":["*.css"],"_nodeVersion":"24.19.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"react":"^18.0.0","react-dom":"^18.0.0","typescript":"^5.3.3","@types/react":"^18.2.48","@types/react-dom":"^18.2.18"},"peerDependencies":{"react":"^18.0.0","react-dom":"^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ui-kit_0.1.9_1787986418316_0.21394285570438298","host":"s3://npm-registry-packages-npm-production"}},"0.1.10":{"name":"@abstractframework/ui-kit","version":"0.1.10","keywords":["abstractframework","ui","theme","tokens","react"],"author":{"name":"Laurent-Philippe Albou"},"license":"MIT","_id":"@abstractframework/ui-kit@0.1.10","maintainers":[{"name":"lpalbou","email":"lpalbou@gmail.com"}],"homepage":"https://github.com/lpalbou/AbstractUIC#readme","bugs":{"url":"https://github.com/lpalbou/AbstractUIC/issues"},"dist":{"shasum":"77118b1ea4f285d2a30ffea225575fe559c56f9c","tarball":"https://registry.npmjs.org/@abstractframework/ui-kit/-/ui-kit-0.1.10.tgz","fileCount":106,"integrity":"sha512-sQdGq4eXTS/DiHlf8uhkgP77CfnvzOsRy/ChVq2WJM21AUbY7GzHUJZGH9+8GmIZ6NzUebJJt0AN9b7cpQTBbg==","signatures":[{"sig":"MEUCIQCB2GZjiXuhAV510stsqzPpiRdYbXdwFuzUCJL7IAzkJwIgLpVpFB5D0kXdImRY/hIefpcx4pPcwfK7oFbH6tNUqoA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIBAWBEjjRatl8SobH3BkBv+ou87IBMHLwuhRst9rMBkXAiAbdOCGryMvMJ4ZcJiSqoLyfpBFa5yfZkvQtpOVhE8CeQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@abstractframework%2fui-kit@0.1.10","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":453207},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./theme.css":"./src/theme.css","./palette_seeds.json":"./palette_seeds.json"},"gitHead":"7f6a854c2a90ce13cbbb9d43443a0b4c80d0aad0","scripts":{"test":"node scripts/check_no_src_twins.mjs && node scripts/check_theme_tokens.mjs && node scripts/generate_palette_seeds.mjs --check && npm run build && node scripts/check_matrix_core.mjs && node scripts/check_matrix_wrapper.mjs && node scripts/check_phase_radio.mjs && node scripts/check_cognition_bloom.mjs && node scripts/check_conduct_core.mjs && node scripts/check_voice_hook.mjs && node scripts/audit_theme_contrast.mjs --strict","build":"tsc","prepublishOnly":"npm test && npm run test:speculation","test:speculation":"npm run build && node scripts/check_speculation.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:31b8b912-03f2-4163-95af-d1960bbb5301"}},"repository":{"url":"git+https://github.com/lpalbou/AbstractUIC.git","type":"git","directory":"ui-kit"},"_npmVersion":"11.19.0","description":"Shared UI tokens + themes for AbstractFramework thin clients (AbstractFlow, AbstractObserver, etc.).","directories":{},"sideEffects":["*.css"],"_nodeVersion":"24.21.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"react":"^18.0.0","react-dom":"^18.0.0","typescript":"^5.3.3","@types/react":"^18.2.48","@types/react-dom":"^18.2.18"},"peerDependencies":{"react":"^18.0.0","react-dom":"^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ui-kit_0.1.10_1790176846331_0.5567995140378423","host":"s3://npm-registry-packages-npm-production"}},"0.1.11":{"name":"@abstractframework/ui-kit","version":"0.1.11","keywords":["abstractframework","ui","theme","tokens","react"],"author":{"name":"Laurent-Philippe Albou"},"license":"MIT","_id":"@abstractframework/ui-kit@0.1.11","maintainers":[{"name":"lpalbou","email":"lpalbou@gmail.com"}],"homepage":"https://github.com/lpalbou/AbstractUIC#readme","bugs":{"url":"https://github.com/lpalbou/AbstractUIC/issues"},"dist":{"shasum":"0c164739fe3a1f54a75fdf63432b796c9cff4647","tarball":"https://registry.npmjs.org/@abstractframework/ui-kit/-/ui-kit-0.1.11.tgz","fileCount":106,"integrity":"sha512-fwh7py58dljtu58/Y1IiVZGd5B9ezqWGl8J2kl+/ktWR9L486xdPYR7TVylMqIpfAIrItB7nkbEUZaYkcwAzCQ==","signatures":[{"sig":"MEUCIHLrDOGi7rVaZ9ZN2DGX17R9tYF+xjFI3ohVxvYoQtjrAiEAupKxlLetOKThU93J+x4ONWr5gc3lcK8kMVJtVHiqbaM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDhaIk9UITNXmFyzsG75JvBG4xmO2zzpmxR43B/lW5ULgIhAJmS7Dutrn/izpSP/hwidlBld2404z5hANRaWHrv825r","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@abstractframework%2fui-kit@0.1.11","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":453715},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./theme.css":"./src/theme.css","./palette_seeds.json":"./palette_seeds.json"},"gitHead":"ccd918451adaba86f53cda3b1c35f4f13832852c","scripts":{"test":"node scripts/check_no_src_twins.mjs && node scripts/check_theme_tokens.mjs && node scripts/generate_palette_seeds.mjs --check && npm run build && node scripts/check_matrix_core.mjs && node scripts/check_matrix_wrapper.mjs && node scripts/check_phase_radio.mjs && node scripts/check_cognition_bloom.mjs && node scripts/check_conduct_core.mjs && node scripts/check_voice_hook.mjs && node scripts/audit_theme_contrast.mjs --strict && tsc -p islands/tsconfig.json && node scripts/check_islands.mjs","build":"tsc","build:islands":"node scripts/build_islands.mjs","prepublishOnly":"npm test && npm run test:speculation","test:speculation":"npm run build && node scripts/check_speculation.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:31b8b912-03f2-4163-95af-d1960bbb5301"}},"repository":{"url":"git+https://github.com/lpalbou/AbstractUIC.git","type":"git","directory":"ui-kit"},"_npmVersion":"11.19.0","description":"Shared UI tokens + themes for AbstractFramework thin clients (AbstractFlow, AbstractObserver, etc.).","directories":{},"sideEffects":["*.css"],"_nodeVersion":"24.21.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"react":"^18.0.0","esbuild":"^0.25.12","react-dom":"^18.0.0","typescript":"^5.3.3","@types/react":"^18.2.48","@types/react-dom":"^18.2.18"},"peerDependencies":{"react":"^18.0.0","react-dom":"^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ui-kit_0.1.11_1790266918482_0.8359501881597833","host":"s3://npm-registry-packages-npm-production"}},"0.1.12":{"name":"@abstractframework/ui-kit","version":"0.1.12","keywords":["abstractframework","ui","theme","tokens","react"],"author":{"name":"Laurent-Philippe Albou"},"license":"MIT","_id":"@abstractframework/ui-kit@0.1.12","maintainers":[{"name":"lpalbou","email":"lpalbou@gmail.com"}],"homepage":"https://github.com/lpalbou/AbstractUIC#readme","bugs":{"url":"https://github.com/lpalbou/AbstractUIC/issues"},"dist":{"shasum":"eb0256d7dc0f541c33b417da951e4f4cdeafa048","tarball":"https://registry.npmjs.org/@abstractframework/ui-kit/-/ui-kit-0.1.12.tgz","fileCount":113,"integrity":"sha512-E9Ke6BuvEqYgjBYYYJT6dARxtHh7htrwh531nnyQr4tnYKwX3DNJDY2Ipr+ZixIVekC0Le7SVD5NU114IFUgFg==","signatures":[{"sig":"MEYCIQC0OLQsgBo3pZsGCEtHVQq38comMUs2XELJQm2myWjIvwIhAO+gSpX4JpsZTYYrgGEaEl8AJqTAK6KPi+Lto1uopU9o","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCA2EHxYqRSQ9glUaiXGSUFFYbjnNEZMwTooKtM5x56qgIhAOEXou2tN5NGXyh0q6IPF4zwvE78q0fXlhhdxfhLlE2H","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@abstractframework%2fui-kit@0.1.12","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":483385},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./theme.css":"./src/theme.css","./palette_seeds.json":"./palette_seeds.json"},"gitHead":"f1b3e00479ddf9e9b8ffa074aad9afba499a3a9d","scripts":{"test":"node scripts/check_no_src_twins.mjs && node scripts/check_theme_tokens.mjs && node scripts/generate_palette_seeds.mjs --check && npm run build && node scripts/check_matrix_core.mjs && node scripts/check_matrix_wrapper.mjs && node scripts/check_phase_radio.mjs && node scripts/check_cognition_bloom.mjs && node scripts/check_conduct_core.mjs && node scripts/check_voice_hook.mjs && node scripts/check_about.mjs && node scripts/audit_theme_contrast.mjs --strict && tsc -p islands/tsconfig.json && node scripts/check_islands.mjs","build":"tsc","build:islands":"node scripts/build_islands.mjs","prepublishOnly":"npm test && npm run test:speculation","test:speculation":"npm run build && node scripts/check_speculation.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:31b8b912-03f2-4163-95af-d1960bbb5301"}},"repository":{"url":"git+https://github.com/lpalbou/AbstractUIC.git","type":"git","directory":"ui-kit"},"_npmVersion":"11.19.0","description":"Shared UI tokens + themes for AbstractFramework thin clients (AbstractFlow, AbstractObserver, etc.).","directories":{},"sideEffects":["*.css"],"_nodeVersion":"24.21.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"react":"^18.0.0","esbuild":"^0.25.12","react-dom":"^18.0.0","typescript":"^5.3.3","@types/react":"^18.2.48","@types/react-dom":"^18.2.18"},"peerDependencies":{"react":"^18.0.0","react-dom":"^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ui-kit_0.1.12_1790407840331_0.7682395265026984","host":"s3://npm-registry-packages-npm-production"}},"0.1.13":{"name":"@abstractframework/ui-kit","version":"0.1.13","keywords":["abstractframework","ui","theme","tokens","react"],"author":{"name":"Laurent-Philippe Albou"},"license":"MIT","_id":"@abstractframework/ui-kit@0.1.13","maintainers":[{"name":"lpalbou","email":"lpalbou@gmail.com"}],"homepage":"https://github.com/lpalbou/AbstractUIC#readme","bugs":{"url":"https://github.com/lpalbou/AbstractUIC/issues"},"dist":{"shasum":"29e380e35781a04b1d83ab5ef48ef8d2277f6f53","tarball":"https://registry.npmjs.org/@abstractframework/ui-kit/-/ui-kit-0.1.13.tgz","fileCount":128,"integrity":"sha512-isPeI5zZMBs3dWWJeGkPoNoKX12KviS5uOEq/9U9LFWl7srKhCr4j0AZSg35aw3qMQUWFAwlLtlggSNd26XonA==","signatures":[{"sig":"MEQCIAekJ0hWdVNIJCLOSTsKF7AgJRfwPEyyO/XAMPpgBtrEAiBbZ6lny0UjJcWl+PnXaqvnzVoxZpUCw2wCm2iQ8Ef3gw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIE+lB+qwVWqWFJK20HCG/1+T1HgVbozudAyzy1ZLldx1AiBeGiiwirSLOqejyGvCwn8Xhd4swcmwqJvHea/YxJO7uA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@abstractframework%2fui-kit@0.1.13","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":617119},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./theme.css":"./src/theme.css","./palette_seeds.json":"./palette_seeds.json"},"gitHead":"68b60ba504138d55f3129354f725dbb1a195e7d2","scripts":{"test":"node scripts/check_no_src_twins.mjs && node scripts/check_theme_tokens.mjs && node scripts/generate_palette_seeds.mjs --check && npm run build && node scripts/check_matrix_core.mjs && node scripts/check_matrix_wrapper.mjs && node scripts/check_phase_radio.mjs && node scripts/check_cognition_bloom.mjs && node scripts/check_conduct_core.mjs && node scripts/check_voice_hook.mjs && node scripts/check_about.mjs && node scripts/check_automation_fixtures.mjs && node scripts/check_automation_client.mjs && node scripts/check_automation_panel.mjs && node scripts/audit_theme_contrast.mjs --strict && tsc -p islands/tsconfig.json && node scripts/check_islands.mjs","build":"tsc","build:islands":"node scripts/build_islands.mjs","prepublishOnly":"npm test && npm run test:speculation","test:speculation":"npm run build && node scripts/check_speculation.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:31b8b912-03f2-4163-95af-d1960bbb5301"}},"repository":{"url":"git+https://github.com/lpalbou/AbstractUIC.git","type":"git","directory":"ui-kit"},"_npmVersion":"11.19.0","description":"Shared UI tokens + themes for AbstractFramework thin clients (AbstractFlow, AbstractObserver, etc.).","directories":{},"sideEffects":["*.css"],"_nodeVersion":"24.21.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"react":"^18.0.0","esbuild":"^0.25.12","react-dom":"^18.0.0","typescript":"^5.3.3","@types/react":"^18.2.48","@types/react-dom":"^18.2.18"},"peerDependencies":{"react":"^18.0.0","react-dom":"^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ui-kit_0.1.13_1790528735083_0.16854575227735635","host":"s3://npm-registry-packages-npm-production"}},"0.1.14":{"name":"@abstractframework/ui-kit","version":"0.1.14","keywords":["abstractframework","ui","theme","tokens","react"],"author":{"name":"Laurent-Philippe Albou"},"license":"MIT","_id":"@abstractframework/ui-kit@0.1.14","maintainers":[{"name":"lpalbou","email":"lpalbou@gmail.com"}],"homepage":"https://github.com/lpalbou/AbstractUIC#readme","bugs":{"url":"https://github.com/lpalbou/AbstractUIC/issues"},"dist":{"shasum":"2e576b05ceee076c95c816172f033edd77e858ee","tarball":"https://registry.npmjs.org/@abstractframework/ui-kit/-/ui-kit-0.1.14.tgz","fileCount":131,"integrity":"sha512-QJwVZXjS0LMFSKbyAZjej0tNKcUG/peq91pGpPnBy5sY33KZVDKY1JNqLCThaXfOI/4JuaSrcWZIcwIOMXCTUA==","signatures":[{"sig":"MEUCIAyC5H/zHDg+j/+9f92dZv2yZ0wE0EnbLU+AEiHtzYi6AiEAu9VUxBNX+wDiS1pJAoO45+WUO6Gq/6Xj0qRFzFOzEWg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIHc8o6SyEpN6FjYjnyEMDWA9eSrys0TTNEk3VHx7DaO5AiAIecZgecGpsXzJbeRRaoD+Ib7TzeVHEuAcNtrXmq9pNQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@abstractframework%2fui-kit@0.1.14","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":634145},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./theme.css":"./src/theme.css","./palette_seeds.json":"./palette_seeds.json"},"gitHead":"d12775f83aa55ddbe2493af481533a15080d6e82","scripts":{"test":"node scripts/check_no_src_twins.mjs && tsc --noEmit --noUnusedLocals --noUnusedParameters -p . && node scripts/check_theme_tokens.mjs && node scripts/generate_palette_seeds.mjs --check && npm run build && node scripts/check_matrix_core.mjs && node scripts/check_matrix_wrapper.mjs && node scripts/check_phase_radio.mjs && node scripts/check_cognition_bloom.mjs && node scripts/check_conduct_core.mjs && node scripts/check_voice_hook.mjs && node scripts/check_about.mjs && node scripts/check_automation_fixtures.mjs && node scripts/check_gateway_paths.mjs && node scripts/check_automation_client.mjs && node scripts/check_automation_panel.mjs && node scripts/audit_theme_contrast.mjs --strict && tsc -p islands/tsconfig.json && node scripts/check_islands.mjs","build":"tsc","build:islands":"node scripts/build_islands.mjs","prepublishOnly":"npm test && npm run test:speculation","test:speculation":"npm run build && node scripts/check_speculation.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:31b8b912-03f2-4163-95af-d1960bbb5301"}},"repository":{"url":"git+https://github.com/lpalbou/AbstractUIC.git","type":"git","directory":"ui-kit"},"_npmVersion":"11.19.0","description":"Shared UI tokens + themes for AbstractFramework thin clients (AbstractFlow, AbstractObserver, etc.).","directories":{},"sideEffects":["*.css"],"_nodeVersion":"24.21.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"react":"^18.0.0","esbuild":"^0.25.12","react-dom":"^18.0.0","typescript":"^5.3.3","@types/react":"^18.2.48","@types/react-dom":"^18.2.18"},"peerDependencies":{"react":"^18.0.0","react-dom":"^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ui-kit_0.1.14_1790563330460_0.7003318224728721","host":"s3://npm-registry-packages-npm-production"}},"0.1.15":{"name":"@abstractframework/ui-kit","version":"0.1.15","keywords":["abstractframework","ui","theme","tokens","react"],"author":{"name":"Laurent-Philippe Albou"},"license":"MIT","_id":"@abstractframework/ui-kit@0.1.15","maintainers":[{"name":"lpalbou","email":"lpalbou@gmail.com"}],"homepage":"https://github.com/lpalbou/AbstractUIC#readme","bugs":{"url":"https://github.com/lpalbou/AbstractUIC/issues"},"dist":{"shasum":"c1460c8e5f8935fba7b4c4b0b1f013c3410da0d5","tarball":"https://registry.npmjs.org/@abstractframework/ui-kit/-/ui-kit-0.1.15.tgz","fileCount":131,"integrity":"sha512-rfZ7N3f4xNjA0iRxrGUJKy1FfTCtHBEJlCVVEL9554Qv/lFYXZLh5TBnxdc+w3jN22I8p3bUX1QK+QiEBLpyRg==","signatures":[{"sig":"MEYCIQCknkGVjov+63quVZ/SXwev5b3920Y0W7u8u0DpYs2vjAIhAIptvlVEHuZlrwul27EAm2+/IxgyKjDAv4kkmwZbsVuQ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDEVcyHDqwxfvcKY3UKajkvFBmvXO5qtk+mcn+60JpkPQIgftuTCGzZMNAcAxS7H4rxbUluC/LFHpiXpJGKSaFwva0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@abstractframework%2fui-kit@0.1.15","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":650946},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./theme.css":"./src/theme.css","./palette_seeds.json":"./palette_seeds.json"},"gitHead":"48a0dbfb7ab6d9db087b9153645d891ad4e2c23d","scripts":{"test":"node scripts/check_no_src_twins.mjs && tsc --noEmit --noUnusedLocals --noUnusedParameters -p . && node scripts/check_theme_tokens.mjs && node scripts/generate_palette_seeds.mjs --check && npm run build && node scripts/check_matrix_core.mjs && node scripts/check_matrix_wrapper.mjs && node scripts/check_phase_radio.mjs && node scripts/check_cognition_bloom.mjs && node scripts/check_conduct_core.mjs && node scripts/check_voice_hook.mjs && node scripts/check_about.mjs && node scripts/check_automation_fixtures.mjs && node scripts/check_gateway_paths.mjs && node scripts/check_automation_client.mjs && node scripts/check_automation_panel.mjs && node scripts/audit_theme_contrast.mjs --strict && tsc -p islands/tsconfig.json && node scripts/check_islands.mjs","build":"tsc","build:islands":"node scripts/build_islands.mjs","prepublishOnly":"npm test && npm run test:speculation","test:speculation":"npm run build && node scripts/check_speculation.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:31b8b912-03f2-4163-95af-d1960bbb5301"}},"repository":{"url":"git+https://github.com/lpalbou/AbstractUIC.git","type":"git","directory":"ui-kit"},"_npmVersion":"11.19.0","description":"Shared UI tokens + themes for AbstractFramework thin clients (AbstractFlow, AbstractObserver, etc.).","directories":{},"sideEffects":["*.css"],"_nodeVersion":"24.21.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"react":"^18.0.0","esbuild":"^0.25.12","react-dom":"^18.0.0","typescript":"^5.3.3","@types/react":"^18.2.48","@types/react-dom":"^18.2.18"},"peerDependencies":{"react":"^18.0.0","react-dom":"^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ui-kit_0.1.15_1790578913382_0.9496536634009294","host":"s3://npm-registry-packages-npm-production"}},"0.1.16":{"name":"@abstractframework/ui-kit","version":"0.1.16","keywords":["abstractframework","ui","theme","tokens","react"],"author":{"name":"Laurent-Philippe Albou"},"license":"MIT","_id":"@abstractframework/ui-kit@0.1.16","maintainers":[{"name":"lpalbou","email":"lpalbou@gmail.com"}],"homepage":"https://github.com/lpalbou/AbstractUIC#readme","bugs":{"url":"https://github.com/lpalbou/AbstractUIC/issues"},"dist":{"shasum":"86526efb3e9b73975b6b9774e93585d10095d003","tarball":"https://registry.npmjs.org/@abstractframework/ui-kit/-/ui-kit-0.1.16.tgz","fileCount":132,"integrity":"sha512-wCfS7WKD5qihWqR4dhWDAfrimNjnIICE+Y07eV3CHBZNsIciO04m9s7XiezUnDC5OR4XxXvSyv5cKrVX30m+OQ==","signatures":[{"sig":"MEQCIER9c9TYiqtGlgM08OyBUSHlloNs/ARDBVDURjAhjtm0AiAduYyV8l8UFuxotaD1toDOAqNK8HFohiCjsvudxE+czQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCHB+4+yskxaBaJje/AnskpvYpf/v2qjRM7f0o0UQw7kgIgUue85lxXECkQ6MENydSHPE6hGaq6SBZNUnsCc1eQ0aw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@abstractframework%2fui-kit@0.1.16","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":658155},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./theme.css":"./src/theme.css","./palette_seeds.json":"./palette_seeds.json"},"gitHead":"854ceb081ee746318c3172619b7dba44d17d341f","scripts":{"test":"node scripts/check_no_src_twins.mjs && tsc --noEmit --noUnusedLocals --noUnusedParameters -p . && node scripts/check_theme_tokens.mjs && node scripts/generate_palette_seeds.mjs --check && npm run build && node scripts/check_matrix_core.mjs && node scripts/check_matrix_wrapper.mjs && node scripts/check_phase_radio.mjs && node scripts/check_cognition_bloom.mjs && node scripts/check_conduct_core.mjs && node scripts/check_voice_hook.mjs && node scripts/check_about.mjs && node scripts/check_automation_fixtures.mjs && node scripts/check_gateway_paths.mjs && node scripts/check_automation_client.mjs && node scripts/check_automation_panel.mjs && node scripts/audit_theme_contrast.mjs --strict && tsc -p islands/tsconfig.json && node scripts/check_islands.mjs","build":"tsc","build:islands":"node scripts/build_islands.mjs","prepublishOnly":"npm test && npm run test:speculation","test:speculation":"npm run build && node scripts/check_speculation.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:31b8b912-03f2-4163-95af-d1960bbb5301"}},"repository":{"url":"git+https://github.com/lpalbou/AbstractUIC.git","type":"git","directory":"ui-kit"},"_npmVersion":"11.19.0","description":"Shared UI tokens + themes for AbstractFramework thin clients (AbstractFlow, AbstractObserver, etc.).","directories":{},"sideEffects":["*.css"],"_nodeVersion":"24.21.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"react":"^18.0.0","esbuild":"^0.25.12","react-dom":"^18.0.0","typescript":"^5.3.3","@types/react":"^18.2.48","@types/react-dom":"^18.2.18"},"peerDependencies":{"react":"^18.0.0","react-dom":"^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ui-kit_0.1.16_1790606677524_0.06564480461172884","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@abstractframework/ui-kit","version":"0.2.0","keywords":["abstractframework","ui","theme","tokens","react"],"author":{"name":"Laurent-Philippe Albou"},"license":"MIT","_id":"@abstractframework/ui-kit@0.2.0","maintainers":[{"name":"lpalbou","email":"lpalbou@gmail.com"}],"homepage":"https://github.com/lpalbou/AbstractUIC#readme","bugs":{"url":"https://github.com/lpalbou/AbstractUIC/issues"},"dist":{"shasum":"8bb948e02f298e2e4063f472e044eec99067f372","tarball":"https://registry.npmjs.org/@abstractframework/ui-kit/-/ui-kit-0.2.0.tgz","fileCount":135,"integrity":"sha512-881wlDNwexdtUlVnc7xgP6MREVaH1CnENuEyseAh3AUN0oYVIZZDsw0InPKBYC/T4B6mHbnN9daetuDM9rgFDg==","signatures":[{"sig":"MEUCIQCAgacH3ZT4tnHgLnEyFut+MN/OSpee6Qr7qaRSRj1avAIgCEVu4bIHLVeTuhF5qoaftUdQKP7ekVhJj548KBE2YmY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCpwhrSoMk5BcJLPZSax+bY00GZA2F/LIBKdRk+JwBKWAIgTQks8eUlzH31fnIYwCMLrCic4PiVuBI+QaSU1GraTAo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@abstractframework%2fui-kit@0.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":704339},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./theme.css":"./src/theme.css","./palette_seeds.json":"./palette_seeds.json"},"gitHead":"b1059cde585c04161f35f7cd90b47b4bc25735d9","scripts":{"test":"node scripts/check_no_src_twins.mjs && tsc --noEmit --noUnusedLocals --noUnusedParameters -p . && node scripts/check_theme_tokens.mjs && node scripts/generate_palette_seeds.mjs --check && npm run build && node scripts/check_matrix_core.mjs && node scripts/check_matrix_wrapper.mjs && node scripts/check_phase_radio.mjs && node scripts/check_cognition_bloom.mjs && node scripts/check_conduct_core.mjs && node scripts/check_voice_hook.mjs && node scripts/check_about.mjs && node scripts/check_automation_fixtures.mjs && node scripts/check_gateway_paths.mjs && node scripts/check_automation_client.mjs && node scripts/check_automation_panel.mjs && node scripts/check_automation_email.mjs && node scripts/audit_theme_contrast.mjs --strict && tsc -p islands/tsconfig.json && node scripts/check_islands.mjs","build":"tsc","build:islands":"node scripts/build_islands.mjs","prepublishOnly":"npm test && npm run test:speculation","test:speculation":"npm run build && node scripts/check_speculation.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"31b8b912-03f2-4163-95af-d1960bbb5301"}},"repository":{"url":"git+https://github.com/lpalbou/AbstractUIC.git","type":"git","directory":"ui-kit"},"_npmVersion":"11.19.0","description":"Shared UI tokens + themes for AbstractFramework thin clients (AbstractFlow, AbstractObserver, etc.).","directories":{},"sideEffects":["*.css"],"_nodeVersion":"24.21.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"react":"^18.0.0","esbuild":"^0.25.12","react-dom":"^18.0.0","typescript":"^5.3.3","@types/react":"^18.2.48","@types/react-dom":"^18.2.18"},"peerDependencies":{"react":"^18.0.0","react-dom":"^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ui-kit_0.2.0_1790737272801_0.666620137413743","host":"s3://npm-registry-packages-npm-production"}},"0.3.2":{"name":"@abstractframework/ui-kit","version":"0.3.2","keywords":["abstractframework","ui","theme","tokens","react"],"author":{"name":"Laurent-Philippe Albou"},"license":"MIT","_id":"@abstractframework/ui-kit@0.3.2","maintainers":[{"name":"lpalbou","email":"lpalbou@gmail.com"}],"homepage":"https://github.com/lpalbou/AbstractUIC#readme","bugs":{"url":"https://github.com/lpalbou/AbstractUIC/issues"},"dist":{"shasum":"a892430689e3cd982c85f2b5dc93eca81e9c93db","tarball":"https://registry.npmjs.org/@abstractframework/ui-kit/-/ui-kit-0.3.2.tgz","fileCount":138,"integrity":"sha512-vzsQSHxoVkPYfcwERlxr8iiykYGbQheGHEsRmUJnSFq/Ijb5jbWJ0aDmjHsQdzs/BDMdU5v67eAcyfxDo3SR4Q==","signatures":[{"sig":"MEUCIBAp7Bm0XDFxaj06de7u+UxMTvmdEDlLoXMKG2DFW0moAiEAsHP+Ede2R+aCFppFrZ07CdskjeBDUpbeA/uW+9ftQHE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIDPFTfYNCI2QFQ5O+VMxMLgKRs1MqHnheM6MQR7wMG6rAiBy7wM3WT86XM4+2WWzHlHW5StfbSORXZmZtG1aw+z9MA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@abstractframework%2fui-kit@0.3.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":736633},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./theme.css":"./src/theme.css","./palette_seeds.json":"./palette_seeds.json"},"gitHead":"0edf79443868d99d5d5830c622c8cc74fa2bd5e8","scripts":{"test":"node scripts/check_no_src_twins.mjs && tsc --noEmit --noUnusedLocals --noUnusedParameters -p . && node scripts/check_theme_tokens.mjs && node scripts/generate_palette_seeds.mjs --check && npm run build && node scripts/check_responsive.mjs && node scripts/check_viewport_vars.mjs && node scripts/check_matrix_core.mjs && node scripts/check_matrix_wrapper.mjs && node scripts/check_phase_radio.mjs && node scripts/check_cognition_bloom.mjs && node scripts/check_conduct_core.mjs && node scripts/check_voice_hook.mjs && node scripts/check_about.mjs && node scripts/check_automation_fixtures.mjs && node scripts/check_gateway_paths.mjs && node scripts/check_automation_client.mjs && node scripts/check_automation_panel.mjs && node scripts/check_automation_email.mjs && node scripts/audit_theme_contrast.mjs --strict && tsc -p islands/tsconfig.json && node scripts/check_islands.mjs","build":"tsc","build:islands":"node scripts/build_islands.mjs","prepublishOnly":"npm test && npm run test:speculation","test:speculation":"npm run build && node scripts/check_speculation.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"31b8b912-03f2-4163-95af-d1960bbb5301"}},"repository":{"url":"git+https://github.com/lpalbou/AbstractUIC.git","type":"git","directory":"ui-kit"},"_npmVersion":"11.19.0","description":"Shared UI tokens + themes for AbstractFramework thin clients (AbstractFlow, AbstractObserver, etc.).","directories":{},"sideEffects":["*.css"],"_nodeVersion":"24.21.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"react":"^18.0.0","esbuild":"^0.25.12","react-dom":"^18.0.0","typescript":"^5.3.3","@types/react":"^18.2.48","@types/react-dom":"^18.2.18"},"peerDependencies":{"react":"^18.0.0","react-dom":"^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ui-kit_0.3.2_1790778102029_0.5063280240091323","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@abstractframework/ui-kit","version":"0.4.0","keywords":["abstractframework","ui","theme","tokens","react"],"author":{"name":"Laurent-Philippe Albou"},"license":"MIT","_id":"@abstractframework/ui-kit@0.4.0","maintainers":[{"name":"lpalbou","email":"lpalbou@gmail.com"}],"homepage":"https://github.com/lpalbou/AbstractUIC#readme","bugs":{"url":"https://github.com/lpalbou/AbstractUIC/issues"},"dist":{"shasum":"b597e3d889f148a9fa2a159b1d43f42d20b67b38","tarball":"https://registry.npmjs.org/@abstractframework/ui-kit/-/ui-kit-0.4.0.tgz","fileCount":159,"integrity":"sha512-C18n7TJfC5PiK24vfe4KB8VUioAvlQXvXDbRzHAH4hdNACLVNVk+51WDNy/FW1mSfxz11sQ1SoDuKqge3nsPZQ==","signatures":[{"sig":"MEUCIQC5QECSvvP3a0bkLWxi9khOA6QtCk998bBn0DKXTpxOnwIgc/j4qbHBeHbE3WQrFV2pgVYwifDYeBTDkJ/+Ewbhlvs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCP44KQv9TXjahbdtpkz3ymikHQ5uWXZhf0QTK3RFmhBwIhAIOfvXqeTELOgpMRRGmVqW4U3jJ8LQeJc2TuunhvYION","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@abstractframework%2fui-kit@0.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":816457},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./theme.css":"./src/theme.css","./palette_seeds.json":"./palette_seeds.json"},"gitHead":"f278678fcb79f0b9bb0949c946da01a5e38e956a","scripts":{"test":"node scripts/check_no_src_twins.mjs && tsc --noEmit --noUnusedLocals --noUnusedParameters -p . && node scripts/check_theme_tokens.mjs && node scripts/generate_palette_seeds.mjs --check && npm run build && node scripts/check_responsive.mjs && node scripts/check_viewport_vars.mjs && node scripts/check_matrix_core.mjs && node scripts/check_matrix_wrapper.mjs && node scripts/check_phase_radio.mjs && node scripts/check_cognition_bloom.mjs && node scripts/check_conduct_core.mjs && node scripts/check_voice_hook.mjs && node scripts/check_about.mjs && node scripts/check_automation_fixtures.mjs && node scripts/check_gateway_paths.mjs && node scripts/check_automation_client.mjs && node scripts/check_automation_panel.mjs && node scripts/check_automation_email.mjs && node scripts/check_state_toggles.mjs && node scripts/check_modal_rows.mjs && node scripts/check_modal.mjs && node scripts/check_random_id.mjs && node scripts/check_forms_signin.mjs && node scripts/audit_theme_contrast.mjs --strict && tsc -p islands/tsconfig.json && node scripts/check_islands.mjs","build":"tsc","build:islands":"node scripts/build_islands.mjs","prepublishOnly":"npm test && npm run test:speculation","test:speculation":"npm run build && node scripts/check_speculation.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"31b8b912-03f2-4163-95af-d1960bbb5301"}},"repository":{"url":"git+https://github.com/lpalbou/AbstractUIC.git","type":"git","directory":"ui-kit"},"_npmVersion":"11.19.0","description":"Shared UI tokens + themes for AbstractFramework thin clients (AbstractFlow, AbstractObserver, etc.).","directories":{},"sideEffects":["*.css"],"_nodeVersion":"24.21.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"react":"^18.0.0","esbuild":"^0.25.12","react-dom":"^18.0.0","typescript":"^5.3.3","@types/react":"^18.2.48","@types/react-dom":"^18.2.18"},"peerDependencies":{"react":"^18.0.0","react-dom":"^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ui-kit_0.4.0_1790816771843_0.8031674445947188","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@abstractframework/ui-kit","version":"0.5.0","keywords":["abstractframework","ui","theme","tokens","react"],"author":{"name":"Laurent-Philippe Albou"},"license":"MIT","_id":"@abstractframework/ui-kit@0.5.0","maintainers":[{"name":"lpalbou","email":"lpalbou@gmail.com"}],"homepage":"https://github.com/lpalbou/AbstractUIC#readme","bugs":{"url":"https://github.com/lpalbou/AbstractUIC/issues"},"dist":{"shasum":"231c7786d7e8f1845cd178d8c8d695424aaa9840","tarball":"https://registry.npmjs.org/@abstractframework/ui-kit/-/ui-kit-0.5.0.tgz","fileCount":171,"integrity":"sha512-OeSvNPD5yOwpzBgbv0R5dlxLO3tB35CG6qiHbGtiix2g/D5BCm85ccjFm7uB6M+KAHGStrvUTe9Annpz5n+xuQ==","signatures":[{"sig":"MEQCIFL3LBWSFcL+n4GAQ462I6vITy1OnzfDhiWbWd7UyDauAiBE7oAuvY4a2J8YuaFxJKbaR96uzKisucctb8dkgy0zEw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIEDo02suw7N1t6CzSS+fR0LGnDzoyqpOsCAYcFz9wUWRAiBOgDZnzCVK8VaoefZwb/LUATxly85DL/kvhFj49fTQdQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@abstractframework%2fui-kit@0.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":885429},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./theme.css":"./src/theme.css","./palette_seeds.json":"./palette_seeds.json"},"gitHead":"6777488434a38e96e155542a7d4bbc98cbb533e1","scripts":{"test":"node scripts/check_no_src_twins.mjs && tsc --noEmit --noUnusedLocals --noUnusedParameters -p . && node scripts/check_theme_tokens.mjs && node scripts/generate_palette_seeds.mjs --check && npm run build && node scripts/check_responsive.mjs && node scripts/check_viewport_vars.mjs && node scripts/check_matrix_core.mjs && node scripts/check_matrix_wrapper.mjs && node scripts/check_phase_radio.mjs && node scripts/check_cognition_bloom.mjs && node scripts/check_conduct_core.mjs && node scripts/check_voice_hook.mjs && node scripts/check_about.mjs && node scripts/check_automation_fixtures.mjs && node scripts/check_gateway_paths.mjs && node scripts/check_automation_client.mjs && node scripts/check_automation_panel.mjs && node scripts/check_automation_email.mjs && node scripts/check_state_toggles.mjs && node scripts/check_modal_rows.mjs && node scripts/check_modal.mjs && node scripts/check_menu.mjs && node scripts/check_random_id.mjs && node scripts/check_forms_signin.mjs && node scripts/audit_theme_contrast.mjs --strict && tsc -p islands/tsconfig.json && node scripts/check_islands.mjs && node scripts/check_sandbox_chat.mjs && node scripts/check_workflow_picker.mjs && node scripts/check_route_picker.mjs","build":"tsc","build:islands":"node scripts/build_islands.mjs","prepublishOnly":"npm test && npm run test:speculation","test:speculation":"npm run build && node scripts/check_speculation.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"31b8b912-03f2-4163-95af-d1960bbb5301"}},"repository":{"url":"git+https://github.com/lpalbou/AbstractUIC.git","type":"git","directory":"ui-kit"},"_npmVersion":"11.19.0","description":"Shared UI tokens + themes for AbstractFramework thin clients (AbstractFlow, AbstractObserver, etc.).","directories":{},"sideEffects":["*.css"],"_nodeVersion":"24.21.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"react":"^18.0.0","esbuild":"^0.25.12","react-dom":"^18.0.0","typescript":"^5.3.3","@types/react":"^18.2.48","@types/react-dom":"^18.2.18"},"peerDependencies":{"react":"^18.0.0","react-dom":"^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ui-kit_0.5.0_1790889070925_0.6591143296462938","host":"s3://npm-registry-packages-npm-production"}},"0.5.1":{"name":"@abstractframework/ui-kit","version":"0.5.1","keywords":["abstractframework","ui","theme","tokens","react"],"author":{"name":"Laurent-Philippe Albou"},"license":"MIT","_id":"@abstractframework/ui-kit@0.5.1","maintainers":[{"name":"lpalbou","email":"lpalbou@gmail.com"}],"homepage":"https://github.com/lpalbou/AbstractUIC#readme","bugs":{"url":"https://github.com/lpalbou/AbstractUIC/issues"},"dist":{"shasum":"4cb3d870a72b5508e62c921468166481d76457a4","tarball":"https://registry.npmjs.org/@abstractframework/ui-kit/-/ui-kit-0.5.1.tgz","fileCount":171,"integrity":"sha512-V9TNrxI1aoYhIcBPn7e3AagC1Lon/xz9YIFr/eHskgfXEATXyDL/kBpwT3EaEQjkyZMt6wIOeDuXEOPQw0jRIQ==","signatures":[{"sig":"MEUCIQCOwDsdp7rZvZi2IHkaZlkjgbc/JqgZx+4Up8ksNOIWlwIgeh0f7HyXjTsM3eZ7itDbVypf1XVfN6Jzxo0cqTe1jeA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCaH/FP5PP+jhreotLc1RDZUz9RCBkH6sRXEqpb1LEtKQIhALY5eeG2thsN47J8GLnHexfK1iRXMjoEJIRQTOqhFMZ+","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@abstractframework%2fui-kit@0.5.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":889528},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./theme.css":"./src/theme.css","./palette_seeds.json":"./palette_seeds.json"},"gitHead":"82a912140d64b05ace7919fd5e15d9806d81167d","scripts":{"test":"node scripts/check_no_src_twins.mjs && tsc --noEmit --noUnusedLocals --noUnusedParameters -p . && node scripts/check_theme_tokens.mjs && node scripts/generate_palette_seeds.mjs --check && npm run build && node scripts/check_responsive.mjs && node scripts/check_viewport_vars.mjs && node scripts/check_matrix_core.mjs && node scripts/check_matrix_wrapper.mjs && node scripts/check_phase_radio.mjs && node scripts/check_cognition_bloom.mjs && node scripts/check_conduct_core.mjs && node scripts/check_voice_hook.mjs && node scripts/check_about.mjs && node scripts/check_automation_fixtures.mjs && node scripts/check_gateway_paths.mjs && node scripts/check_automation_client.mjs && node scripts/check_automation_panel.mjs && node scripts/check_automation_email.mjs && node scripts/check_state_toggles.mjs && node scripts/check_modal_rows.mjs && node scripts/check_modal.mjs && node scripts/check_menu.mjs && node scripts/check_random_id.mjs && node scripts/check_forms_signin.mjs && node scripts/audit_theme_contrast.mjs --strict && tsc -p islands/tsconfig.json && node scripts/check_islands.mjs && node scripts/check_sandbox_chat.mjs && node scripts/check_workflow_picker.mjs && node scripts/check_route_picker.mjs","build":"tsc","build:islands":"node scripts/build_islands.mjs","prepublishOnly":"npm test && npm run test:speculation","test:speculation":"npm run build && node scripts/check_speculation.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"31b8b912-03f2-4163-95af-d1960bbb5301"}},"repository":{"url":"git+https://github.com/lpalbou/AbstractUIC.git","type":"git","directory":"ui-kit"},"_npmVersion":"11.19.0","description":"Shared UI tokens + themes for AbstractFramework thin clients (AbstractFlow, AbstractObserver, etc.).","directories":{},"sideEffects":["*.css"],"_nodeVersion":"24.21.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"react":"^18.0.0","esbuild":"^0.25.12","react-dom":"^18.0.0","typescript":"^5.3.3","@types/react":"^18.2.48","@types/react-dom":"^18.2.18"},"peerDependencies":{"react":"^18.0.0","react-dom":"^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ui-kit_0.5.1_1790961818650_0.5327816188780046","host":"s3://npm-registry-packages-npm-production"}},"0.5.2":{"name":"@abstractframework/ui-kit","version":"0.5.2","keywords":["abstractframework","ui","theme","tokens","react"],"author":{"name":"Laurent-Philippe Albou"},"license":"MIT","_id":"@abstractframework/ui-kit@0.5.2","maintainers":[{"name":"lpalbou","email":"lpalbou@gmail.com"}],"homepage":"https://github.com/lpalbou/AbstractUIC#readme","bugs":{"url":"https://github.com/lpalbou/AbstractUIC/issues"},"dist":{"shasum":"3d8f5fc29279a02b9dcf79024244f5fe4263e23d","tarball":"https://registry.npmjs.org/@abstractframework/ui-kit/-/ui-kit-0.5.2.tgz","fileCount":189,"integrity":"sha512-Q6zn3XV01wIe6pwqNBGhUVUmhfc0WbJYwyFEWYr++lfq57ctwOPGBo1Ij0H+ApKxCITAf/R9xG+2p3/mFmKEjQ==","signatures":[{"sig":"MEYCIQDim4Y838FZjNzmEE20a6gJMop8CrKlRjXfXuTp4u0NGQIhAO4iSJiEvTzV2PBIHYWI6x5dFDxrQnpc7A1tg+c1ea7o","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCICe/zHh/PCUKREns5/5i/3MUtUCs6m6EFbmZKYLdCeBvAiEAqcSrWhoKJsHTZJI5VeY3jDLiBEuXhUPgYXD4U7Xr9c4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@abstractframework%2fui-kit@0.5.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":914728},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./theme.css":"./src/theme.css","./palette_seeds.json":"./palette_seeds.json"},"gitHead":"82fc0b00e6aff1de3293ef288af02fd8f2a9b8a4","scripts":{"test":"node scripts/check_no_src_twins.mjs && tsc --noEmit --noUnusedLocals --noUnusedParameters -p . && node scripts/check_theme_tokens.mjs && node scripts/generate_palette_seeds.mjs --check && npm run build && node scripts/check_responsive.mjs && node scripts/check_viewport_vars.mjs && node scripts/check_matrix_core.mjs && node scripts/check_matrix_wrapper.mjs && node scripts/check_phase_radio.mjs && node scripts/check_cognition_bloom.mjs && node scripts/check_conduct_core.mjs && node scripts/check_voice_hook.mjs && node scripts/check_about.mjs && node scripts/check_automation_fixtures.mjs && node scripts/check_gateway_paths.mjs && node scripts/check_automation_client.mjs && node scripts/check_automation_panel.mjs && node scripts/check_automation_email.mjs && node scripts/check_state_toggles.mjs && node scripts/check_modal_rows.mjs && node scripts/check_modal.mjs && node scripts/check_menu.mjs && node scripts/check_random_id.mjs && node scripts/check_forms_signin.mjs && node scripts/audit_theme_contrast.mjs --strict && tsc -p islands/tsconfig.json && node scripts/check_islands.mjs && node scripts/check_sandbox_chat.mjs && node scripts/check_workflow_picker.mjs && node scripts/check_route_picker.mjs","build":"tsc","build:islands":"node scripts/build_islands.mjs","prepublishOnly":"npm test && npm run test:speculation","test:speculation":"npm run build && node scripts/check_speculation.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"31b8b912-03f2-4163-95af-d1960bbb5301"}},"repository":{"url":"git+https://github.com/lpalbou/AbstractUIC.git","type":"git","directory":"ui-kit"},"_npmVersion":"11.19.0","description":"Shared UI tokens + themes for AbstractFramework thin clients (AbstractFlow, AbstractObserver, etc.).","directories":{},"sideEffects":["*.css"],"_nodeVersion":"24.21.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"react":"^18.0.0","esbuild":"^0.25.12","react-dom":"^18.0.0","typescript":"^5.3.3","@types/react":"^18.2.48","@types/react-dom":"^18.2.18"},"peerDependencies":{"react":"^18.0.0","react-dom":"^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ui-kit_0.5.2_1791006313662_0.29797502685759314","host":"s3://npm-registry-packages-npm-production"}},"0.8.5":{"_id":"@abstractframework/ui-kit@0.8.5","bugs":{"url":"https://github.com/lpalbou/AbstractUIC/issues"},"dist":{"shasum":"67e47fb76e24acc1e9ba3cf93ade8ba41832e86d","tarball":"https://registry.npmjs.org/@abstractframework/ui-kit/-/ui-kit-0.8.5.tgz","fileCount":228,"integrity":"sha512-fp/vaIHtXNVi5fWi6lNZOuHBdqIhdftEMe2TNzTFSqVHdzKN7gt55auByXKbeEed1Fq3oq90p3MdCwPRL1yzXw==","signatures":[{"sig":"MEYCIQDMXjajHDqk4oZneaoVd2gzLhC/8pmlEIeSAY1lXLJK2AIhANEJysKqKTh9IMa019TX7Icr4hUHF7QACiIR78pBcbE7","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCICZGw72jMap5wEdwVJUK7Fb17/tN6IYrpIsSnNvHpdZaAiBwxuJfG/e+ry+I8KTj7p63man+agmeeGrkU/Y7m88axg=="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@abstractframework%2fui-kit@0.8.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1145273},"main":"./dist/index.js","name":"@abstractframework/ui-kit","type":"module","types":"./dist/index.d.ts","author":{"name":"Laurent-Philippe Albou"},"engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./theme.css":"./src/theme.css","./palette_seeds.json":"./palette_seeds.json"},"gitHead":"fff125164e3ca2a1f58f9e21b2aa134b9ad3b33d","license":"MIT","scripts":{"test":"node scripts/check_no_src_twins.mjs && tsc --noEmit --noUnusedLocals --noUnusedParameters -p . && node scripts/check_theme_tokens.mjs && node scripts/generate_palette_seeds.mjs --check && npm run build && node scripts/check_responsive.mjs && node scripts/check_viewport_vars.mjs && node scripts/check_matrix_core.mjs && node scripts/check_matrix_wrapper.mjs && node scripts/check_phase_radio.mjs && node scripts/check_cognition_bloom.mjs && node scripts/check_conduct_core.mjs && node scripts/check_voice_hook.mjs && node scripts/check_about.mjs && node scripts/check_automation_fixtures.mjs && node scripts/check_gateway_paths.mjs && node scripts/check_automation_client.mjs && node scripts/check_automation_panel.mjs && node scripts/check_automation_email.mjs && node scripts/check_state_toggles.mjs && node scripts/check_modal_rows.mjs && node scripts/check_modal.mjs && node scripts/check_menu.mjs && node scripts/check_tooltip.mjs && node scripts/check_random_id.mjs && node scripts/check_timing_line.mjs && node scripts/check_forms_signin.mjs && node scripts/audit_theme_contrast.mjs --strict && tsc -p islands/tsconfig.json && node scripts/check_islands.mjs && node scripts/check_sandbox_chat.mjs && node scripts/check_workflow_picker.mjs && node scripts/check_route_picker.mjs && node scripts/check_rail_viewer.mjs && node scripts/check_audio_player.mjs && node scripts/check_unarchive.mjs && node scripts/check_voice_section.mjs && node scripts/check_workspace_chooser.mjs && node scripts/check_tool_state.mjs","build":"tsc","build:islands":"node scripts/build_islands.mjs","prepublishOnly":"npm test && npm run test:speculation","test:speculation":"npm run build && node scripts/check_speculation.mjs"},"version":"0.8.5","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"31b8b912-03f2-4163-95af-d1960bbb5301"}},"homepage":"https://github.com/lpalbou/AbstractUIC#readme","keywords":["abstractframework","ui","theme","tokens","react"],"repository":{"url":"git+https://github.com/lpalbou/AbstractUIC.git","type":"git","directory":"ui-kit"},"_npmVersion":"11.19.0","description":"Shared UI tokens + themes for AbstractFramework thin clients (AbstractFlow, AbstractObserver, etc.).","directories":{},"maintainers":[{"name":"lpalbou","email":"lpalbou@gmail.com"}],"sideEffects":["*.css"],"_nodeVersion":"24.21.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"react":"^18.0.0","esbuild":"^0.25.12","react-dom":"^18.0.0","typescript":"^5.3.3","@types/react":"^18.2.48","@types/react-dom":"^18.2.18"},"peerDependencies":{"react":"^18.0.0","react-dom":"^18.0.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/ui-kit_0.8.5_1791156494845_0.3040861264835606"}}},"time":{"created":"2026-02-04T08:39:49.230Z","modified":"2026-10-04T23:28:15.248Z","0.1.0":"2026-02-04T08:39:49.489Z","0.1.2":"2026-02-05T08:05:19.011Z","0.1.3":"2026-02-05T10:27:39.649Z","0.1.6":"2026-05-26T02:56:53.008Z","0.1.7":"2026-05-31T07:52:23.338Z","0.1.8":"2026-06-14T17:52:56.946Z","0.1.9":"2026-08-29T06:53:38.458Z","0.1.10":"2026-09-23T15:20:46.441Z","0.1.11":"2026-09-24T16:21:58.604Z","0.1.12":"2026-09-26T07:30:40.427Z","0.1.13":"2026-09-27T17:05:35.186Z","0.1.14":"2026-09-28T02:42:10.551Z","0.1.15":"2026-09-28T07:01:53.718Z","0.1.16":"2026-09-28T14:44:37.621Z","0.2.0":"2026-09-30T03:01:12.881Z","0.3.2":"2026-09-30T14:21:42.115Z","0.4.0":"2026-10-01T01:06:11.966Z","0.5.0":"2026-10-01T21:11:11.048Z","0.5.1":"2026-10-02T17:23:38.819Z","0.5.2":"2026-10-03T05:45:13.768Z","0.8.5":"2026-10-04T23:28:14.937Z"},"bugs":{"url":"https://github.com/lpalbou/AbstractUIC/issues"},"author":{"name":"Laurent-Philippe Albou"},"license":"MIT","homepage":"https://github.com/lpalbou/AbstractUIC#readme","keywords":["abstractframework","ui","theme","tokens","react"],"repository":{"url":"git+https://github.com/lpalbou/AbstractUIC.git","type":"git","directory":"ui-kit"},"description":"Shared UI tokens + themes for AbstractFramework thin clients (AbstractFlow, AbstractObserver, etc.).","maintainers":[{"name":"lpalbou","email":"lpalbou@gmail.com"}],"readme":"# @abstractframework/ui-kit\n\nShared theme tokens and UI components for AbstractFramework apps. The kit owns the theme system\nused by every AbstractFramework UI and the shared app chrome (connection surface, top-right\naction cluster, drawer, appearance dialog).\n\nThis package provides:\n\n- **Theme tokens** (CSS variables + 21 theme classes): `@abstractframework/ui-kit/theme.css`\n- **Theme + typography helpers**: `applyTheme(...)`, `applyTypography(...)`, `THEME_SPECS`\n- **Common inputs**: `AfSelect`, `ThemeSelect`, `ProviderModelSelect`, `ProviderModelPicker`,\n  `SpeculationSelect`, `ToolPolicyEditor`, `VoiceSettings`\n- **Gateway connection UI**: `GatewayConnectModal`, `useGatewayConnection()`,\n  `GatewaySessionSignInCard`\n- **App chrome**: `AfTopBarActions`, `AfDrawer`, `AfRailDrawer` (vertical icon rail at the right\n  edge, panel beside it, resizable, collapses to icons), `AfAppearanceDialog` +\n  `useAppearanceSettings()`, `AfAbout` / `AfAboutDialog` (the compact About card)\n- **Files**: `AfFileViewer` (Markdown via the host renderer, highlighted code, JSON, images,\n  audio, PDF, text; size/date header; download), `AfCodeBlock` / `highlightCode()` and\n  `AfAudioPlayer` (the shared waveform audio player)\n- **Settings rows**: `AfSettingsGroup`, `AfSettingRow`, `AfOverrideRow` (\"Gateway default\" unless\n  overridden), `AfVoiceSection` (the Assistant's Voice layout)\n- **Time**: `formatRelativeTime(ts, nowMs)`, `formatExactTime(ts)` — deterministic, no seconds\n- **Identity**: `appIdentity(id, version)`, `frameworkIdentity()`, `knownAppIds()`,\n  `aboutRows(...)`, `gatewayVersionRows(...)` — the AbstractFramework facts every About screen\n  shows\n- **Run and policy surfaces**: `PhaseCapabilityMatrix`, `CriticalActionDialog`, `SteerComposer`,\n  `DisclosureList`, `AfChip`, `AfPhaseRadio`, cognition gauges\n- **Voice**: `useGatewayVoice()` (streaming TTS + push-to-talk)\n- **Automations**: `AutomationPanel`, `AfScheduleDialog` (schedule and email triggers, Email me the\n  result, allowed recipients), `createAutomationsClient()` and the canonical Gateway fixtures — see [Automations](../docs/automations.md)\n- **Modal and account rows**: `AfModal` (large dialog over a blurred backdrop, full-screen sheet on\n  phones), `bindAfModal()`, the `af-row--admin|user|entity` tints, `af-kind-chip`, `af-nav-group` /\n  `af-nav-footer` — see [Modal, account rows, grouped navigation](../docs/modal.md)\n- **On/off settings and forms**: `AfSwitch` / `AfSwitchInput` (a switch labelled by the feature),\n  `AfTabs`, the `af-form` / `af-card` / `af-tabs` styles, and the guards `findVerbToggleLabels()`\n  and `checkLabelScale()` — see [On/off settings](../docs/state-toggles.md)\n- **Plain http**: `randomId()` (a v4 UUID in every browser context) and\n  `insecureContextReason(feature)` — see [Non-secure contexts](../docs/state-toggles.md#non-secure-contexts)\n- **Icons**: `Icon` (used by `@abstractframework/panel-chat`)\n- **Palette seeds**: `@abstractframework/ui-kit/palette_seeds.json` for non-CSS consumers\n- **Console islands** (repository build, not in the npm package): the kit components as one\n  script for pages that are not React apps — see [Console islands](#console-islands)\n\n## Install\n\n- npm: `npm i @abstractframework/ui-kit`\n- Workspace: add a dependency on `@abstractframework/ui-kit`\n\nPeer dependencies: `react@^18` and `react-dom@^18`.\n\n## Usage\n\nImport the theme tokens once in your app:\n\n```ts\nimport \"@abstractframework/ui-kit/theme.css\";\n```\n\nApply a theme at runtime (optional):\n\n```ts\nimport { applyTheme } from \"@abstractframework/ui-kit\";\n\napplyTheme(\"dark\"); // sets a `theme-*` class on <html>\n```\n\nUse UI components:\n\n```tsx\nimport { ThemeSelect, Icon, ToolPolicyEditor, GatewayConnectModal } from \"@abstractframework/ui-kit\";\n```\n\nThe authoritative export list is `ui-kit/src/index.ts`; the grouped map is in the\n[API reference](../docs/api.md#abstractframeworkui-kit).\n\n### Gateway session sign-in\n\n`GatewaySessionSignInCard` renders the shared Gateway browser-session sign-in card. Host apps\nown the network calls and session storage; the component only collects the Gateway URL\n(optional), user id, token and remember-browser state, and calls the callbacks you provide.\nMost apps use it through `GatewayConnectModal` (below).\n\n### Tool policy editor\n\n`ToolPolicyEditor` renders the shared allowlist + approve/ask picker for gateway tools. It has no\ndeny mode: a tool is denied by removing it from the allowlist. Pass `toolMode` (and optional\n`toolModeLabel` / `toolModeDetail`) to surface the gateway tool execution mode in a banner.\nA tool may carry `state: { label, tooltip?, tone? }` — a server-reported state shown as a badge\nunder its name, with the server's sentence in the kit tooltip (AbstractCode passes the gateway's\ncommand-sandbox state of process-spawning tools). The kit shows what it is given and never derives\na state.\n\nThe default approve/ask classification is exposed as `TOOL_POLICY_DEFAULTS` (mirrors the\nAbstractRuntime `ToolApprovalPolicy` defaults).\n\n### Native MTP control\n\n`SpeculationSelect` is the shared inheritance / Off / depth selector. Pass the execution host's\ncomplete model-capability payload as `capabilities`; only depths advertised under\n`execution.speculation.supported_depths` are offered. Missing capability data is shown as\nunknown, not guessed from a model name. Saved unavailable selections remain visible.\n\n`ProviderModelPicker` includes this control when `enableSpeculation` is true; supply its usual\nprovider-aware capability transport. The `speculation` value is absent for inheritance, `false`\nfor Off, or a native-MTP object with `require_acceleration: true` for an explicit depth. Apps own\npreference storage and omit inherited values from requests. Neither component loads models or\ndownloads heads.\n\n## Gateway connection surface contract\n\nUse `GatewayConnectModal` for connect/disconnect UX. It pairs with the session proxy in\n`@abstractframework/app-server`.\n\n- It is a **centered modal** over a dimmed, blurred backdrop (the kit's `.af-connect-overlay`\n  provides both), never an inline settings block.\n- The **Gateway URL is always visible** (the modal passes `showGatewayUrl`). If you embed\n  `GatewaySessionSignInCard` inside your own modal, pass `showGatewayUrl` yourself.\n- **Tokens never rest client-side**: the proxy exchanges the token for HttpOnly cookies. Do not\n  add localStorage or bearer-token fallbacks in apps.\n- **Auto-open on a resolved disconnect**: when the app resolves as disconnected, the connect\n  modal is the first screen. It never auto-opens over the loading state or a live session; a\n  later sign-out re-arms it. Choose one variant per app: `blocking` (no dismiss; apps with no\n  offline surface) or `dismissable` (dismissable once per signed-out episode; apps with a\n  degraded-but-usable surface keep a banner or badge as re-entry).\n- **Connected follows the session probe, not data**: the session probe\n  (`/api/connection/gateway`) is the only gate for leaving \"Connecting…\". Data fetches fill their\n  panels in after the flip, in parallel, so a slow list degrades its own panel rather than first\n  paint.\n- **Probe once**: apps that probe at boot pass the result to the modal via `initialStatus` so\n  opening it does not re-probe; the modal refreshes itself after sign-in or sign-out.\n- **Use the hook**: `useGatewayConnection({ appName, variant: \"blocking\" | \"dismissable\" })` owns\n  the whole state machine (probe once at boot, auto-open only on a resolved disconnect, close on\n  sign-in success, stay open on sign-out, re-arm per signed-out episode). Spread its\n  `modalProps` into `GatewayConnectModal` rather than re-implementing the machine.\n- **Mid-session losses do not auto-open** under `dismissable`: only boot-resolved disconnects and\n  sign-out episodes open the modal. A live session that drops mid-use (expiry, gateway restart, a\n  transient probe failure) surfaces through the pill or badge. Opt into auto-opening with\n  `autoOpenMidSession: true`. `blocking` apps always auto-open.\n\n## Unified top-right corner\n\nEvery app renders the same upper-right cluster: assistant button → appearance button → About\nbutton → app extras → connection pill, always rightmost.\n\n```tsx\nconst conn = useGatewayConnection({ appName: \"My App\", variant: \"dismissable\" });\nconst [appearance, setAppearance] = useAppearanceSettings(\"my-app\", { legacyKey: \"myapp_ui_v1\" });\n\n<AfTopBarActions\n  assistant={{ open: drawerOpen, onToggle: () => setDrawerOpen((v) => !v) }}\n  appearance={{ onOpen: () => setAppearanceOpen(true) }}\n  about={{ identity: appIdentity(\"abstractflow\", APP_VERSION) }}\n  connection={{ phase: conn.phase, signingOut: conn.signingOut,\n                onConnect: conn.openModal, onDisconnect: () => void conn.signOut() }}\n/>\n<AfDrawer open={drawerOpen} onClose={() => setDrawerOpen(false)} label=\"Assistant\" title=\"Assistant\">\n  <AssistantPanel ask={myTransport} blockedNotice={conn.connected ? undefined : \"Connect to use the assistant.\"} />\n</AfDrawer>\n<AfAppearanceDialog open={appearanceOpen} onClose={() => setAppearanceOpen(false)}\n                    value={appearance} onChange={setAppearance} />\n<GatewayConnectModal {...conn.modalProps} />\n```\n\nRules:\n\n- The connection pill renders the hook's `phase` (`loading` | `connected` | `disconnected`),\n  never a boolean. `signingOut` / `signOutError` are the in-flight and error channels.\n- `AfDrawer` is non-modal and keeps its children mounted when closed (`display:none` + `inert`),\n  so drawers can host long-running work. ESC handling respects `defaultPrevented`; the connect\n  modal sits above drawers (z-order tokens `--z-drawer` < `--z-connect-modal` < `--z-popover`).\n  Below 768 px it is full width; `side=\"left\"` opens it from the left edge and `backdrop` adds a\n  dimmed backdrop that closes it on tap (use both where a docked sidebar becomes a drawer).\n- `AfRailDrawer` is the vertical rail drawer (AbstractEntity / Continuum Teams pattern): put it at\n  the right end of a `position: relative` content row. Docked from 1024 px (the panel takes its\n  width in the flow; drag or arrow-key the separator; `storageKey` remembers it), floating below\n  (backdrop, Escape folds it). The rail is a vertical `tablist`; clicking the open icon folds the\n  panel back to the icons. Panels visited once stay mounted.\n\n```tsx\n<div style={{ display: \"flex\", position: \"relative\", minHeight: 0 }}>\n  <main style={{ flex: 1, minWidth: 0 }}>…</main>\n  <AfRailDrawer ariaLabel=\"Workspace panels\" storageKey=\"myapp.rail.width\" active={panel} onActiveChange={setPanel}\n    items={[{ id: \"files\", label: \"Files\", icon: \"folder\", content: <Files /> },\n            { id: \"settings\", label: \"Settings\", icon: \"cog\", content: <Settings /> }]} />\n</div>\n```\n- `AssistantPanel` (in `@abstractframework/panel-chat`) never fetches: the\n  `ask(question, { signal, history })` transport is injected and may return a Promise or an\n  AsyncIterable of deltas.\n- Appearance persistence is per app via `useAppearanceSettings(appId)` (key\n  `af_appearance_<appId>_v1`, migrates a `legacyKey` once); storage failures fall back to\n  in-memory state.\n\n## About dialog and identity\n\nEvery AbstractFramework app shows the same compact About card: the app's name and version, the\nAbstractFramework and AbstractGateway versions, one row of links (Website, Source, Docs, Issues,\nFeedback, and Contact as a `mailto:`) and the copyright and licence line. It never lists\npackages. The identity facts come from one canonical descriptor that the kit ships as\n`abstractframework_identity.json` (a byte-identical copy of `identity/abstractframework.json` in\nthe [AbstractFramework repository](https://github.com/lpalbou/AbstractFramework)); AbstractCore's\n`abstractcore.utils.identity.about_card_html` renders the same card in Python, so web apps and the\nconsoles agree.\n\nAdd About to the top bar with one prop:\n\n```tsx\nimport { AfTopBarActions, aboutVersionsFromGateway, appIdentity, type AfAboutVersions } from \"@abstractframework/ui-kit\";\n\nconst identity = appIdentity(\"abstractflow\", APP_VERSION); // throws for an unknown id\nconst [versions, setVersions] = useState<AfAboutVersions>({ gatewayNote: \"checking…\" });\nconst refreshVersions = () =>\n  fetchJson(\"/api/gateway/about\").then(\n    (body) => setVersions(aboutVersionsFromGateway(body)),\n    (err) => setVersions(aboutVersionsFromGateway(null, String(err?.message || err))),\n  );\n\n<AfTopBarActions\n  about={{ identity, versions, onOpen: refreshVersions }}\n  connection={...}\n/>\n```\n\n- `appIdentity(id, version)` takes the distribution name in lower case (`knownAppIds()` lists\n  them) and your app's own version. An unknown id throws: an app must not invent identity facts.\n- `versions` is `{ framework?, frameworkNote?, gateway?, gatewayNote? }`. A missing version shows\n  its note, otherwise \"not reported\" (framework) or \"not connected\" (gateway). Build it with\n  `aboutVersionsFromGateway(body)` from the body of `GET /api/gateway/about`: only the framework\n  and gateway versions are read (the payload's package list is ignored), a missing framework says\n  \"not installed on the gateway host\", and a body without a string gateway version says\n  \"unavailable (the gateway did not report its version)\". After a failed request use\n  `aboutVersionsFromGateway(null, reason)` (\"unavailable (<reason>)\"). The kit never fetches;\n  `onOpen` runs each time the dialog opens, a good moment to refresh the versions.\n- The dialog keeps Tab and Shift+Tab inside itself while it is open, closes on Escape, a click\n  outside, or the Close button in its heading row, and returns focus to the About button.\n- Use `<AfAboutDialog open onClose identity versions />` when your About entry lives somewhere\n  else (a menu), or the inline `<AfAbout identity versions />` card on a settings page.\n  `aboutLinks(identity)` and `aboutVersionFacts(versions)` expose the card's links and facts.\n- `aboutRows(identity, extra)` and `gatewayVersionRows(payload, error)` remain available for\n  apps that list About facts as rows (they match the Python `about_fields` and\n  `gateway_version_rows`, checked against `scripts/fixtures/gateway_version_rows.json`); the About\n  card does not render rows.\n\n## Voice settings\n\n`AfVoiceSection` renders a client's Settings → Voice page in four groups: **Engines**\n(Text → speech, Speech → text), **Output** (output device with **Test**, Reply volume),\n**Microphone** (input device with **Test** and a live level meter, Spoken language, Input level)\nand **Replies** (Read aloud, Voice latency). Everything reads \"Gateway default\" until the user\noverrides it; the host stores the overrides.\n\n```tsx\n<AfVoiceSection\n  value={prefs}\n  onChange={setPrefs}\n  fetchCatalog={(provider, model) => gatewayJson(voiceCatalogPath(provider, model))}\n  fetchDefaults={() => gatewayJson(\"/api/gateway/voice/defaults\")}\n  overrideOwner=\"this app\"\n/>\n```\n\n- `fetchDefaults` is required: \"Gateway default · provider / model\" comes only from the gateway's\n  voice defaults (`VoiceDefaults`: `tts` and `stt` routes), \"not set\" when the administrator set\n  none, \"unknown\" when the gateway could not be asked. Pass `defaults` when you already hold them.\n- Device names appear after one microphone permission (**Show names**). Safari does not let a page\n  choose the output device: the picker stays on System default and says so.\n- Send what the user chose with `voiceTtsRequest(prefs)` / `voiceSttRequest(prefs)`, and play or\n  record through `useGatewayVoice({ output_device_id, input_device_id, volume, input_gain })`.\n- `gatewayJson` and `voiceCatalogPath` above stand for your own authenticated transport.\n\n## Audio player\n\n`AfAudioPlayer` is the one audio viewer of every client (AbstractFlow artifacts, `AfFileViewer`\naudio files, panel-chat media):\n\n```tsx\n<AfAudioPlayer src={objectUrl} name=\"speech.wav\" />\n```\n\n- `src` is a URL the browser can play: an object URL of bytes you fetched with your own\n  credentials, or a same-origin URL. `name` labels the controls; `peaks` (0..1 per bar) skips\n  decoding; `className` styles the wrapper.\n- The waveform is decoded from `src` with the Web Audio API. When decoding is unavailable or\n  fails, the bars stay flat with the reason in the waveform's tooltip, and playback still works.\n- Click or drag the waveform to seek. It is a keyboard `slider`: Left/Right move ±5 s, Home/End\n  jump to the start or end, Space/Enter play or pause.\n- Pure helpers: `audioPeaks(samples, bars?)`, `formatAudioTime(seconds)`,\n  `audioSeekTime(x, width, duration)`, `AUDIO_WAVEFORM_BARS`.\n\n### CSS public API (non-React consumers)\n\nThe `.af-topbar-*` and `.af-drawer-*` class families are stable public API, so a server-rendered\npage can render its own HTML against them:\n\n```html\n<div class=\"af-topbar\" role=\"group\" aria-label=\"App actions\">\n  <button class=\"af-topbar__btn\" aria-label=\"Open assistant\">…svg…</button>\n  <button class=\"af-topbar__btn\" aria-label=\"Appearance\">…svg…</button>\n  <span class=\"af-topbar__identity\" title=\"Signed in as alice\">alice</span>\n  <button class=\"af-topbar__pill af-topbar__pill--connected\">\n    <span class=\"af-topbar__dot af-topbar__dot--connected\"></span>\n    <span class=\"af-topbar__pill-label\">Disconnect</span>\n  </button>\n</div>\n<div class=\"af-drawer af-drawer--open\" role=\"complementary\" style=\"width:420px\">\n  <div class=\"af-drawer__header\">\n    <div class=\"af-drawer__title\">Assistant</div>\n    <div class=\"af-drawer__header-actions\"><button class=\"af-drawer__close\">×</button></div>\n  </div>\n  <div class=\"af-drawer__body\">…</div>\n</div>\n```\n\n- Pill modifiers: `--connected | --disconnected | --loading` (the dot matches).\n- `.af-topbar__identity` is a quiet one-line text item (secondary color, ellipsized past 24\n  characters), for example the signed-in identity.\n- Closed drawer: remove `--open` and set `display:none`.\n\n## Console islands\n\nA page that is not a React app can mount the real `AfTopBarActions`, `AfAppearanceDialog` and\n`AfAboutDialog` through the console islands: one self-contained script (React included) that defines\n`window.AfConsoleIslands` with `mountTopBar(el, props)`, `mountAppearance(el, props)`,\n`mountAbout(el, props)`, `appIdentity(id, version)` and `applyAppearance(settings)`. The\nAbstractGateway console uses it.\n\nThe bundle is built from a repository checkout and is **not** part of the npm package:\n\n```bash\nnpm run build:islands -w @abstractframework/ui-kit   # writes ui-kit/islands/dist/af-console-islands.js\nnode ui-kit/scripts/check_islands.mjs                # rebuilds and verifies the API\n```\n\nThe page must also load `theme.css`. API, props and examples: [Console islands](../docs/console-islands.md).\n\n## DisclosureList integration notes\n\n- **Window-level keyboard handlers must yield to the list**: if your app has window-level\n  arrow-key navigation, skip it while `document.activeElement` is inside `.af-disclosure`;\n  otherwise each arrow press moves twice (once in your handler, once in the list's roving\n  tabindex).\n- **Theming the chevron: exclude the spacer**: consumer-scoped rules such as\n  `.your-scope .af-disclosure__chevron` outweigh the kit's spacer transparency and paint a\n  button on non-expandable rows. Theme via\n  `.af-disclosure__chevron:not(.af-disclosure__chevron--spacer)`.\n\n## Theme system\n\nThe kit owns the theme system for every AbstractFramework UI: `theme.css` (21 themes),\n`THEME_SPECS`, `useAppearanceSettings` (per-app persistence + no-flash first paint), and the\nswitcher surfaces (`AfAppearanceDialog`, `ThemeSelect`, `FontScaleSelect`,\n`HeaderDensitySelect`). Apps use these rather than forking them:\n\n1. React apps import `theme.css`, the hook and the dialog.\n2. Surfaces that cannot install npm packages (the AbstractGateway console) serve a generated,\n   verbatim copy of `theme.css` checked against the kit in their own test suite, and mount the\n   [console islands](#console-islands) for the interactive controls.\n3. Native (Qt) surfaces are out of scope; terminals and other non-CSS consumers can use\n   `palette_seeds.json`.\n\nSee [Theming](../docs/theming.md) for the token vocabulary and adoption rules.\n\n## Responsive layout\n\n`theme.css` adapts the kit components to phones, tablets, resized windows and narrow panes. A\nregular desktop window keeps the desktop look.\n\n- **Breakpoints** (literal values, desktop-first):\n  - `xs` `(max-width: 479.98px)`, `sm` `(max-width: 767.98px)`, `md` `(max-width: 1023.98px)`,\n    `lg` `(max-width: 1439.98px)`, `xl` `(min-width: 1440px)`;\n  - `(max-height: 500px)` for phone landscape and `(pointer: coarse)` for touch;\n  - in JavaScript: `AF_BREAKPOINTS`, `AF_MEDIA`, `useAfMedia(query)`.\n- **Touch sizes**: on touch screens every interactive kit control is at least 44 px\n  (`--tap-min`) and form fields use 16 px text (`--font-size-input`), so iOS does not zoom on focus.\n  Native single-choice selects drop the native appearance there and show the\n  `--af-select-chevron` arrow. Interactive chips keep their shape with an invisible 44 px hit area.\n- **Sheets and drawers**:\n  - below 768 px wide or 500 px tall the kit dialogs become bottom sheets with the action row pinned,\n    and they stay above the on-screen keyboard;\n  - `.af-sheet-overlay` / `.af-sheet` give app dialogs the same behaviour;\n  - `AfDrawer` is full width below 768 px and accepts `side=\"left\"` and `backdrop`.\n- **Container queries**: the sign-in card (`af-signin`), dialogs (`af-dialog`), automations\n  (`af-auto`), tool policy editor (`af-tool-policy`) and drawer body (`af-drawer`) adapt to their\n  own width. The narrow layouts start only where the desktop layout no longer fits.\n- **Viewport helpers**: `installViewportVars()` keeps `--vv-height` and `--keyboard-inset` in step\n  with the visual viewport (the on-screen keyboard; a pinch-zoomed page keeps its full height).\n  `--vh-full` and `--safe-*` cover full-height shells and the notch.\n- **Tokens**: `--space-1..6`, `--gutter`, `--tap-min`, `--control-h`, density tokens\n  (`data-density` on `<html>`), `--content-max`, `--reading-max`, `--form-max`, `--drawer-w`, and the\n  text roles `--font-size-body` / `-input` / `-code` / `-2xl`.\n- **Font sizes**: the user's font scale comes first, then the 16 px form-field floor, then your app's\n  own density, then the kit's touch floors. The kit applies those floors only to its own reading\n  surfaces.\n\nSee [Responsive layout](../docs/responsive.md) for the full contract and how to adopt it in your\napp. `scripts/check_responsive.mjs` and `scripts/check_viewport_vars.mjs` pin it.\n\n## Related docs\n\n- Getting started: [`docs/getting-started.md`](../docs/getting-started.md)\n- API reference: [`docs/api.md`](../docs/api.md)\n- Adoption guide: [`docs/adoption-guide.md`](../docs/adoption-guide.md)\n- Theming: [`docs/theming.md`](../docs/theming.md)\n- Modal, account rows, grouped navigation: [`docs/modal.md`](../docs/modal.md)\n- On/off settings, forms, tabs: [`docs/state-toggles.md`](../docs/state-toggles.md)\n- Console islands: [`docs/console-islands.md`](../docs/console-islands.md)\n- Automations: [`docs/automations.md`](../docs/automations.md)\n- Architecture: [`docs/architecture.md`](../docs/architecture.md)\n- Troubleshooting: [`docs/troubleshooting.md`](../docs/troubleshooting.md)\n- Repo docs index: [`docs/README.md`](../docs/README.md)\n","readmeFilename":"README.md"}