{"_id":"@bunnyland/ui-web","_rev":"7-41e427be70556b98eaa01cb6763aa85b","name":"@bunnyland/ui-web","dist-tags":{"latest":"0.2.6"},"versions":{"0.2.0":{"name":"@bunnyland/ui-web","version":"0.2.0","license":"AGPL-3.0-or-later","_id":"@bunnyland/ui-web@0.2.0","maintainers":[{"name":"thalismind","email":"thalismind@gmail.com"}],"homepage":"https://github.com/thalismind/bunnyland-ui-web#readme","bugs":{"url":"https://github.com/thalismind/bunnyland-ui-web/issues"},"dist":{"shasum":"742742ed08874bed81c00b61f5814612bf3ec3ef","tarball":"https://registry.npmjs.org/@bunnyland/ui-web/-/ui-web-0.2.0.tgz","fileCount":57,"integrity":"sha512-GP07B2lZWaYyDwUYLfNpQq2ZU+6L2N4u8/Eob79+DD4JEfuevtxwmnHlsx09xcb4jXvN3MFctUl37zgtNFa8Aw==","signatures":[{"sig":"MEQCIEvI5lOxam32Exp7UiN0AsmEVzxKh7A5y397xNgzL+47AiBWROudf56eyv8Gp95uFSMPS3XxIw6x18PmBJaKGSTCDA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bunnyland%2fui-web@0.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":503534},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./api":{"types":"./dist/api.d.ts","default":"./dist/api.js"},"./play":{"types":"./dist/play.d.ts","default":"./dist/play.js"},"./theme":{"types":"./dist/theme.d.ts","default":"./dist/theme.js"},"./preact":{"types":"./dist/preact.d.ts","default":"./dist/preact.js"},"./widgets":{"types":"./dist/widgets.d.ts","default":"./dist/widgets.js"},"./admin-widgets":{"types":"./dist/admin-widgets.d.ts","default":"./dist/admin-widgets.js"},"./player-widgets":{"types":"./dist/player-widgets.d.ts","default":"./dist/player-widgets.js"},"./assets/bunnyland-ui.js":"./assets/bunnyland-ui.js","./assets/bunnyland-api.js":"./assets/bunnyland-api.js","./assets/bunnyland-ui.css":"./assets/bunnyland-ui.css","./assets/bunnyland-play.js":"./assets/bunnyland-play.js"},"gitHead":"2b874fb179629500b77edcef8f2081352f086098","scripts":{"lint":"eslint src test storybook/preact-story.tsx scripts vite.config.ts vite.storybook.config.ts vitest.config.ts","test":"node --test && vitest run","build":"tsc -p tsconfig.json && vite build","check":"npm run lint && npm run build && npm run test:coverage && npm run test:components","prepack":"npm run build","storybook":"npm run build && npm run storybook:bundle && node scripts/build-storybook.mjs","pack:artifact":"node scripts/package-artifact.mjs","test:coverage":"node --test --experimental-test-coverage","test:components":"vitest run","storybook:bundle":"vite build --config vite.storybook.config.ts","check:release-tag":"node scripts/check-release-tag.mjs"},"_npmUser":{"name":"thalismind","email":"thalismind@gmail.com"},"repository":{"url":"git+https://github.com/thalismind/bunnyland-ui-web.git","type":"git"},"_npmVersion":"11.16.0","description":"Shared web UI helpers, themes, and widgets for Bunnyland browser clients.","directories":{},"sideEffects":["./assets/*.css","./assets/*.js"],"_nodeVersion":"24.18.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.1.0","jsdom":"^29.1.1","eslint":"^10.5.0","preact":"^10.29.0","vitest":"^4.0.0","globals":"^17.6.0","@eslint/js":"^10.0.1","playwright":"^1.61.1","typescript":"^5.6.0","typescript-eslint":"^8.49.0","@preact/preset-vite":"^2.10.0","@testing-library/preact":"^3.2.0"},"peerDependencies":{"preact":"^10.29.0"},"_npmOperationalInternal":{"tmp":"tmp/ui-web_0.2.0_1784601556370_0.4650409124409747","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@bunnyland/ui-web","version":"0.2.1","license":"AGPL-3.0-or-later","_id":"@bunnyland/ui-web@0.2.1","maintainers":[{"name":"thalismind","email":"thalismind@gmail.com"}],"homepage":"https://github.com/thalismind/bunnyland-ui-web#readme","bugs":{"url":"https://github.com/thalismind/bunnyland-ui-web/issues"},"dist":{"shasum":"cad255549cac5b9bccac973b5fcb92eabff2e106","tarball":"https://registry.npmjs.org/@bunnyland/ui-web/-/ui-web-0.2.1.tgz","fileCount":57,"integrity":"sha512-VjnobxLlPdgnNq1IWuC6rfNjY4XfmTJAyhP+yovjI9vg1DFIyv45hRHIJFwLzItIKubPMOLUyBkRcrUTfR2SQA==","signatures":[{"sig":"MEUCICStKkUbmmBpBnblnM8jWFZNTFKh14F5Wh3tqapGu8YyAiEAyJTg4vCbdLtdZHMxaaTgxMv2MqfiG8L860KIQ2s4dBc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bunnyland%2fui-web@0.2.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":504286},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./api":{"types":"./dist/api.d.ts","default":"./dist/api.js"},"./play":{"types":"./dist/play.d.ts","default":"./dist/play.js"},"./theme":{"types":"./dist/theme.d.ts","default":"./dist/theme.js"},"./preact":{"types":"./dist/preact.d.ts","default":"./dist/preact.js"},"./widgets":{"types":"./dist/widgets.d.ts","default":"./dist/widgets.js"},"./admin-widgets":{"types":"./dist/admin-widgets.d.ts","default":"./dist/admin-widgets.js"},"./player-widgets":{"types":"./dist/player-widgets.d.ts","default":"./dist/player-widgets.js"},"./assets/bunnyland-ui.js":"./assets/bunnyland-ui.js","./assets/bunnyland-api.js":"./assets/bunnyland-api.js","./assets/bunnyland-ui.css":"./assets/bunnyland-ui.css","./assets/bunnyland-play.js":"./assets/bunnyland-play.js"},"gitHead":"710aa78ab0a2e61de7e56ce544fd9bbe2fd73d93","scripts":{"lint":"eslint src test storybook/preact-story.tsx scripts vite.config.ts vite.storybook.config.ts vitest.config.ts","test":"node --test && vitest run","build":"tsc -p tsconfig.json && vite build","check":"npm run lint && npm run build && npm run test:coverage && npm run test:components","prepack":"npm run build","storybook":"npm run build && npm run storybook:bundle && node scripts/build-storybook.mjs","pack:artifact":"node scripts/package-artifact.mjs","test:coverage":"node --test --experimental-test-coverage","test:components":"vitest run","storybook:bundle":"vite build --config vite.storybook.config.ts","check:release-tag":"node scripts/check-release-tag.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7e6f478b-f56d-4dfc-8c42-34e5950a219d"}},"repository":{"url":"git+https://github.com/thalismind/bunnyland-ui-web.git","type":"git"},"_npmVersion":"11.16.0","description":"Shared web UI helpers, themes, and widgets for Bunnyland browser clients.","directories":{},"sideEffects":["./assets/*.css","./assets/*.js"],"_nodeVersion":"24.18.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.1.0","jsdom":"^29.1.1","eslint":"^10.5.0","preact":"^10.29.0","vitest":"^4.0.0","globals":"^17.6.0","@eslint/js":"^10.0.1","playwright":"^1.61.1","typescript":"^5.6.0","typescript-eslint":"^8.49.0","@preact/preset-vite":"^2.10.0","@testing-library/preact":"^3.2.0"},"peerDependencies":{"preact":"^10.29.0"},"_npmOperationalInternal":{"tmp":"tmp/ui-web_0.2.1_1784654113430_0.1252939530404944","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"@bunnyland/ui-web","version":"0.2.2","license":"AGPL-3.0-or-later","_id":"@bunnyland/ui-web@0.2.2","maintainers":[{"name":"thalismind","email":"thalismind@gmail.com"}],"homepage":"https://github.com/thalismind/bunnyland-ui-web#readme","bugs":{"url":"https://github.com/thalismind/bunnyland-ui-web/issues"},"dist":{"shasum":"3f6b001eb9728a90006c369383e99b9f4feed087","tarball":"https://registry.npmjs.org/@bunnyland/ui-web/-/ui-web-0.2.2.tgz","fileCount":57,"integrity":"sha512-hTXI30yADB2JeTMEFEabGKXCNG/PePWLbLduUtOnbe8l6egTKit12mWvQLwQPFoK6mu1SpnTkxZpd5nXfjEbUQ==","signatures":[{"sig":"MEUCIQD9vB+1KeEIsHK+uJXoUoCdYOiA5leoEknJj1io+c6USAIgRwoTsMbINe9BMzf4N99Ew8iO//Pw6Ki1OCCXKiWaCSs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bunnyland%2fui-web@0.2.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":512776},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./api":{"types":"./dist/api.d.ts","default":"./dist/api.js"},"./play":{"types":"./dist/play.d.ts","default":"./dist/play.js"},"./theme":{"types":"./dist/theme.d.ts","default":"./dist/theme.js"},"./preact":{"types":"./dist/preact.d.ts","default":"./dist/preact.js"},"./widgets":{"types":"./dist/widgets.d.ts","default":"./dist/widgets.js"},"./admin-widgets":{"types":"./dist/admin-widgets.d.ts","default":"./dist/admin-widgets.js"},"./player-widgets":{"types":"./dist/player-widgets.d.ts","default":"./dist/player-widgets.js"},"./assets/bunnyland-ui.js":"./assets/bunnyland-ui.js","./assets/bunnyland-api.js":"./assets/bunnyland-api.js","./assets/bunnyland-ui.css":"./assets/bunnyland-ui.css","./assets/bunnyland-play.js":"./assets/bunnyland-play.js"},"gitHead":"c2653391a23565a6cac2fc4bdf6be080618e0812","scripts":{"lint":"eslint src test storybook/preact-story.tsx scripts vite.config.ts vite.storybook.config.ts vitest.config.ts","test":"node --test && vitest run","build":"tsc -p tsconfig.json && vite build","check":"npm run lint && npm run build && npm run test:coverage && npm run test:components","prepack":"npm run build","storybook":"npm run build && npm run storybook:bundle && node scripts/build-storybook.mjs","pack:artifact":"node scripts/package-artifact.mjs","test:coverage":"node --test --experimental-test-coverage","test:components":"vitest run","storybook:bundle":"vite build --config vite.storybook.config.ts","check:release-tag":"node scripts/check-release-tag.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7e6f478b-f56d-4dfc-8c42-34e5950a219d"}},"repository":{"url":"git+https://github.com/thalismind/bunnyland-ui-web.git","type":"git"},"_npmVersion":"11.16.0","description":"Shared web UI helpers, themes, and widgets for Bunnyland browser clients.","directories":{},"sideEffects":["./assets/*.css","./assets/*.js"],"_nodeVersion":"24.18.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.1.0","jsdom":"^29.1.1","eslint":"^10.5.0","preact":"^10.29.0","vitest":"^4.0.0","globals":"^17.6.0","@eslint/js":"^10.0.1","playwright":"^1.61.1","typescript":"^5.6.0","typescript-eslint":"^8.49.0","@preact/preset-vite":"^2.10.0","@testing-library/preact":"^3.2.0"},"peerDependencies":{"preact":"^10.29.0"},"_npmOperationalInternal":{"tmp":"tmp/ui-web_0.2.2_1784668896122_0.053345184784513","host":"s3://npm-registry-packages-npm-production"}},"0.2.3":{"name":"@bunnyland/ui-web","version":"0.2.3","license":"AGPL-3.0-or-later","_id":"@bunnyland/ui-web@0.2.3","maintainers":[{"name":"thalismind","email":"thalismind@gmail.com"}],"homepage":"https://github.com/thalismind/bunnyland-ui-web#readme","bugs":{"url":"https://github.com/thalismind/bunnyland-ui-web/issues"},"dist":{"shasum":"80b047fae4b083827de99a5068d8321b475379fe","tarball":"https://registry.npmjs.org/@bunnyland/ui-web/-/ui-web-0.2.3.tgz","fileCount":57,"integrity":"sha512-LFMLP0K9yjuhiFwwmXPfHthf5nb1fWrV/v6F1nxX1UveIZ0dVqOwK3HQHKkbZmkakARhEfDbLBsErKufbZrpOQ==","signatures":[{"sig":"MEUCIFlCLF95eLNsgi9Yn1b4Y3ksxgwnJPqu9VA1d3Vevj5cAiEA8RIF5n/V0xeb0tVs3D4JMQeo5Zq6oN1BTiP/lL29iH0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bunnyland%2fui-web@0.2.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":513407},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./api":{"types":"./dist/api.d.ts","default":"./dist/api.js"},"./play":{"types":"./dist/play.d.ts","default":"./dist/play.js"},"./theme":{"types":"./dist/theme.d.ts","default":"./dist/theme.js"},"./preact":{"types":"./dist/preact.d.ts","default":"./dist/preact.js"},"./widgets":{"types":"./dist/widgets.d.ts","default":"./dist/widgets.js"},"./admin-widgets":{"types":"./dist/admin-widgets.d.ts","default":"./dist/admin-widgets.js"},"./player-widgets":{"types":"./dist/player-widgets.d.ts","default":"./dist/player-widgets.js"},"./assets/bunnyland-ui.js":"./assets/bunnyland-ui.js","./assets/bunnyland-api.js":"./assets/bunnyland-api.js","./assets/bunnyland-ui.css":"./assets/bunnyland-ui.css","./assets/bunnyland-play.js":"./assets/bunnyland-play.js"},"gitHead":"831bfe608bde6bca00008bb4ef9caee7c1ed4dbd","scripts":{"lint":"eslint src test storybook/preact-story.tsx scripts vite.config.ts vite.storybook.config.ts vitest.config.ts","test":"node --test && vitest run","build":"tsc -p tsconfig.json && vite build","check":"npm run lint && npm run build && npm run test:coverage && npm run test:components","prepack":"npm run build","storybook":"npm run build && npm run storybook:bundle && node scripts/build-storybook.mjs","pack:artifact":"node scripts/package-artifact.mjs","test:coverage":"node --test --experimental-test-coverage","test:components":"vitest run","storybook:bundle":"vite build --config vite.storybook.config.ts","check:release-tag":"node scripts/check-release-tag.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7e6f478b-f56d-4dfc-8c42-34e5950a219d"}},"repository":{"url":"git+https://github.com/thalismind/bunnyland-ui-web.git","type":"git"},"_npmVersion":"11.16.0","description":"Shared web UI helpers, themes, and widgets for Bunnyland browser clients.","directories":{},"sideEffects":["./assets/*.css","./assets/*.js"],"_nodeVersion":"24.18.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.1.0","jsdom":"^29.1.1","eslint":"^10.5.0","preact":"^10.29.0","vitest":"^4.0.0","globals":"^17.6.0","@eslint/js":"^10.0.1","playwright":"^1.61.1","typescript":"^5.6.0","typescript-eslint":"^8.49.0","@preact/preset-vite":"^2.10.0","@testing-library/preact":"^3.2.0"},"peerDependencies":{"preact":"^10.29.0"},"_npmOperationalInternal":{"tmp":"tmp/ui-web_0.2.3_1784686135178_0.001062610723282953","host":"s3://npm-registry-packages-npm-production"}},"0.2.4":{"name":"@bunnyland/ui-web","version":"0.2.4","license":"AGPL-3.0-or-later","_id":"@bunnyland/ui-web@0.2.4","maintainers":[{"name":"thalismind","email":"thalismind@gmail.com"}],"homepage":"https://github.com/thalismind/bunnyland-ui-web#readme","bugs":{"url":"https://github.com/thalismind/bunnyland-ui-web/issues"},"dist":{"shasum":"7bdfef3463a1a0fc35ad6a58279d085fb69755df","tarball":"https://registry.npmjs.org/@bunnyland/ui-web/-/ui-web-0.2.4.tgz","fileCount":50,"integrity":"sha512-TSEj5s20MUei1XNLPVTMirTNaTISnMEFNT3PvQOVIYmR1GbtqRiGxwisWoDKW3XOf4WKACqr/JHxBEfolD1/Aw==","signatures":[{"sig":"MEUCIDdRz+QAZLIFhWCVZH3h4Ezno+xaJ2mKHo4UDp5QmxS5AiEA6le/2f8AbVdA13jOvSprNCw8IupuIU4++QJn0ELtJmY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bunnyland%2fui-web@0.2.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":375776},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./api":{"types":"./dist/api.d.ts","default":"./dist/api.js"},"./play":{"types":"./dist/play.d.ts","default":"./dist/play.js"},"./theme":{"types":"./dist/theme.d.ts","default":"./dist/theme.js"},"./preact":{"types":"./dist/preact.d.ts","default":"./dist/preact.js"},"./widgets":{"types":"./dist/widgets.d.ts","default":"./dist/widgets.js"},"./admin-widgets":{"types":"./dist/admin-widgets.d.ts","default":"./dist/admin-widgets.js"},"./player-widgets":{"types":"./dist/player-widgets.d.ts","default":"./dist/player-widgets.js"},"./assets/bunnyland-ui.js":"./assets/bunnyland-ui.js","./assets/bunnyland-api.js":"./assets/bunnyland-api.js","./assets/bunnyland-ui.css":"./assets/bunnyland-ui.css","./assets/bunnyland-play.js":"./assets/bunnyland-play.js"},"gitHead":"d305bb477720f2be3942fe0c6cea66eb48c8203b","scripts":{"lint":"eslint src test storybook/preact-story.tsx scripts vite.config.ts vite.storybook.config.ts vitest.config.ts","test":"node --test && vitest run","build":"tsc -p tsconfig.json && vite build","check":"npm run lint && npm run build && npm run test:coverage && npm run test:components","prepack":"npm run build","storybook":"npm run build && npm run storybook:bundle && node scripts/build-storybook.mjs","pack:artifact":"node scripts/package-artifact.mjs","test:coverage":"node --test --experimental-test-coverage","test:components":"vitest run","storybook:bundle":"vite build --config vite.storybook.config.ts","check:release-tag":"node scripts/check-release-tag.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7e6f478b-f56d-4dfc-8c42-34e5950a219d"}},"repository":{"url":"git+https://github.com/thalismind/bunnyland-ui-web.git","type":"git"},"_npmVersion":"11.16.0","description":"Shared web UI helpers, themes, and widgets for Bunnyland browser clients.","directories":{},"sideEffects":["./assets/*.css","./assets/*.js"],"_nodeVersion":"24.18.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.1.0","jsdom":"^29.1.1","eslint":"^10.5.0","preact":"^10.29.0","vitest":"^4.0.0","globals":"^17.6.0","@eslint/js":"^10.0.1","playwright":"^1.61.1","typescript":"^5.6.0","typescript-eslint":"^8.49.0","@preact/preset-vite":"^2.10.0","@testing-library/preact":"^3.2.0"},"peerDependencies":{"preact":"^10.29.0"},"_npmOperationalInternal":{"tmp":"tmp/ui-web_0.2.4_1785361797421_0.503654260599169","host":"s3://npm-registry-packages-npm-production"}},"0.2.5":{"name":"@bunnyland/ui-web","version":"0.2.5","license":"AGPL-3.0-or-later","_id":"@bunnyland/ui-web@0.2.5","maintainers":[{"name":"thalismind","email":"thalismind@gmail.com"}],"homepage":"https://github.com/thalismind/bunnyland-ui-web#readme","bugs":{"url":"https://github.com/thalismind/bunnyland-ui-web/issues"},"dist":{"shasum":"ef4c019a804ed38a7e0fd528cfd691de0defbbd6","tarball":"https://registry.npmjs.org/@bunnyland/ui-web/-/ui-web-0.2.5.tgz","fileCount":50,"integrity":"sha512-Z+Q5UUneqYG6aXzidAFg+u0/7n68yWuESFZ3IeK9t9GWZCc1MVarLMVmj8MyAqXH4ypBO6h6+sJox4QNec+J5A==","signatures":[{"sig":"MEUCIQCED2c+FiSFZC3A8/kG04Bp56p3fNvJnWiviTl8VdCIFgIgO03BJyHITr60MziW94HeNrImh7QFiZ7ElsrtUSYc300=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bunnyland%2fui-web@0.2.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":380748},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./api":{"types":"./dist/api.d.ts","default":"./dist/api.js"},"./play":{"types":"./dist/play.d.ts","default":"./dist/play.js"},"./theme":{"types":"./dist/theme.d.ts","default":"./dist/theme.js"},"./preact":{"types":"./dist/preact.d.ts","default":"./dist/preact.js"},"./widgets":{"types":"./dist/widgets.d.ts","default":"./dist/widgets.js"},"./admin-widgets":{"types":"./dist/admin-widgets.d.ts","default":"./dist/admin-widgets.js"},"./player-widgets":{"types":"./dist/player-widgets.d.ts","default":"./dist/player-widgets.js"},"./assets/bunnyland-ui.js":"./assets/bunnyland-ui.js","./assets/bunnyland-api.js":"./assets/bunnyland-api.js","./assets/bunnyland-ui.css":"./assets/bunnyland-ui.css","./assets/bunnyland-play.js":"./assets/bunnyland-play.js"},"gitHead":"06d0a625864cf259c94a8552cb488a3543ba47b8","scripts":{"lint":"eslint src test storybook/preact-story.tsx scripts vite.config.ts vite.storybook.config.ts vitest.config.ts","test":"node --test && vitest run","build":"tsc -p tsconfig.json && vite build","check":"npm run lint && npm run build && npm run test:coverage && npm run test:components","prepack":"npm run build","storybook":"npm run build && npm run storybook:bundle && node scripts/build-storybook.mjs","pack:artifact":"node scripts/package-artifact.mjs","test:coverage":"node --test --experimental-test-coverage","test:components":"vitest run","storybook:bundle":"vite build --config vite.storybook.config.ts","check:release-tag":"node scripts/check-release-tag.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7e6f478b-f56d-4dfc-8c42-34e5950a219d"}},"repository":{"url":"git+https://github.com/thalismind/bunnyland-ui-web.git","type":"git"},"_npmVersion":"11.16.0","description":"Shared web UI helpers, themes, and widgets for Bunnyland browser clients.","directories":{},"sideEffects":["./assets/*.css","./assets/*.js"],"_nodeVersion":"24.18.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.1.0","jsdom":"^29.1.1","eslint":"^10.5.0","preact":"^10.29.0","vitest":"^4.0.0","globals":"^17.6.0","@eslint/js":"^10.0.1","playwright":"^1.61.1","typescript":"^5.6.0","typescript-eslint":"^8.49.0","@preact/preset-vite":"^2.10.0","@testing-library/preact":"^3.2.0"},"peerDependencies":{"preact":"^10.29.0"},"_npmOperationalInternal":{"tmp":"tmp/ui-web_0.2.5_1785585176915_0.8455220199141666","host":"s3://npm-registry-packages-npm-production"}},"0.2.6":{"name":"@bunnyland/ui-web","version":"0.2.6","type":"module","description":"Shared web UI helpers, themes, and widgets for Bunnyland browser clients.","license":"AGPL-3.0-or-later","repository":{"type":"git","url":"git+https://github.com/thalismind/bunnyland-ui-web.git"},"homepage":"https://github.com/thalismind/bunnyland-ui-web#readme","bugs":{"url":"https://github.com/thalismind/bunnyland-ui-web/issues"},"publishConfig":{"access":"public","provenance":true,"registry":"https://registry.npmjs.org/"},"sideEffects":["./assets/*.css","./assets/*.js"],"main":"./dist/index.js","module":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./api":{"types":"./dist/api.d.ts","default":"./dist/api.js"},"./play":{"types":"./dist/play.d.ts","default":"./dist/play.js"},"./theme":{"types":"./dist/theme.d.ts","default":"./dist/theme.js"},"./widgets":{"types":"./dist/widgets.d.ts","default":"./dist/widgets.js"},"./player-widgets":{"types":"./dist/player-widgets.d.ts","default":"./dist/player-widgets.js"},"./admin-widgets":{"types":"./dist/admin-widgets.d.ts","default":"./dist/admin-widgets.js"},"./preact":{"types":"./dist/preact.d.ts","default":"./dist/preact.js"},"./assets/bunnyland-ui.css":"./assets/bunnyland-ui.css","./assets/bunnyland-ui.js":"./assets/bunnyland-ui.js","./assets/bunnyland-api.js":"./assets/bunnyland-api.js","./assets/bunnyland-play.js":"./assets/bunnyland-play.js"},"scripts":{"build":"tsc -p tsconfig.json && vite build","lint":"eslint src test storybook/preact-story.tsx scripts vite.config.ts vite.storybook.config.ts vitest.config.ts","test":"node --test && vitest run","test:coverage":"node --test --experimental-test-coverage","test:components":"vitest run","check":"npm run lint && npm run build && npm run test:coverage && npm run test:components","check:release-tag":"node scripts/check-release-tag.mjs","prepack":"npm run build","pack:artifact":"node scripts/package-artifact.mjs","storybook:bundle":"vite build --config vite.storybook.config.ts","storybook":"npm run build && npm run storybook:bundle && node scripts/build-storybook.mjs"},"peerDependencies":{"preact":"^10.29.0"},"devDependencies":{"@eslint/js":"^10.0.1","@preact/preset-vite":"^2.10.0","@testing-library/preact":"^3.2.0","eslint":"^10.5.0","globals":"^17.6.0","jsdom":"^29.1.1","playwright":"^1.61.1","preact":"^10.29.0","typescript":"^5.6.0","typescript-eslint":"^8.49.0","vite":"^8.1.0","vitest":"^4.0.0"},"gitHead":"6a4358bb63df5523d2fce54b3bab62a91bc17ae4","_id":"@bunnyland/ui-web@0.2.6","_nodeVersion":"24.18.0","_npmVersion":"11.16.0","dist":{"integrity":"sha512-SGk/gpMwG4YIbQ80QNkdHeSgTpRPqNm0JLs1tzYaLiT748w4uS81iHXEdcRVRe5OzYTaK2OhyZMK68f/1J53Ew==","shasum":"38d4490f3f8389f7039c61014eefa67d4f7a3f59","tarball":"https://registry.npmjs.org/@bunnyland/ui-web/-/ui-web-0.2.6.tgz","fileCount":50,"unpackedSize":387702,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bunnyland%2fui-web@0.2.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDLPuQDzdz/gPTNTbZLCpEk7mPcmEqcH2jcmQpZopCQAwIhAISpNP+WRJIq6gl82DtU5NDZRmeuh1B65+kYtdp9s1xp"}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7e6f478b-f56d-4dfc-8c42-34e5950a219d"}},"directories":{},"maintainers":[{"name":"thalismind","email":"thalismind@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/ui-web_0.2.6_1786411702725_0.21640545313614745"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-21T02:39:16.253Z","modified":"2026-08-11T01:28:23.234Z","0.2.0":"2026-07-21T02:39:16.510Z","0.2.1":"2026-07-21T17:15:13.576Z","0.2.2":"2026-07-21T21:21:36.265Z","0.2.3":"2026-07-22T02:08:55.318Z","0.2.4":"2026-07-29T21:49:57.560Z","0.2.5":"2026-08-01T11:52:57.069Z","0.2.6":"2026-08-11T01:28:22.869Z"},"bugs":{"url":"https://github.com/thalismind/bunnyland-ui-web/issues"},"license":"AGPL-3.0-or-later","homepage":"https://github.com/thalismind/bunnyland-ui-web#readme","repository":{"type":"git","url":"git+https://github.com/thalismind/bunnyland-ui-web.git"},"description":"Shared web UI helpers, themes, and widgets for Bunnyland browser clients.","maintainers":[{"name":"thalismind","email":"thalismind@gmail.com"}],"readme":"# Bunnyland UI Web\n\nShared Preact components, web UI assets, browser helpers, and gameplay display utilities for\nBunnyland browser clients. The package is publish-ready as `@bunnyland/ui-web` and keeps its\nlegacy browser globals intact while clients migrate incrementally.\n\n## Static Browser Clients\n\nStatic clients can copy these assets into their served `assets/` directory:\n\n- `assets/bunnyland-ui.css`\n- `assets/bunnyland-ui.js`\n- `assets/bunnyland-api.js`\n- `assets/bunnyland-play.js`\n\nThe JavaScript assets preserve the browser globals used by the existing clients:\n\n- `window.BunnylandUI`\n- `window.BunnylandApi`\n- `window.BunnylandPlay`\n\n## Vite, TypeScript, And Preact Clients\n\nInstall the package and its deliberately small Preact peer dependency:\n\n```sh\nnpm install @bunnyland/ui-web preact\n```\n\nThen import the typed helpers. Prefer narrow modules so Vite and Rollup can tree shake unrelated admin or player code:\n\n```ts\nimport { requestSceneImage } from '@bunnyland/ui-web/api';\nimport { filterActions } from '@bunnyland/ui-web/play';\nimport { bindThemeSelect } from '@bunnyland/ui-web/theme';\nimport { renderGalleryItems } from '@bunnyland/ui-web/player-widgets';\nimport '@bunnyland/ui-web/assets/bunnyland-ui.css';\n```\n\nUse direct Preact imports for shared functional components and hooks; React and\n`preact/compat` are not required:\n\n```tsx\nimport { render } from 'preact';\nimport { useState } from 'preact/hooks';\nimport {\n  Button,\n  Field,\n  Pane,\n  SearchSelect,\n  ThemeSelect,\n  Toolbar,\n  ToolbarRow,\n  useTheme,\n} from '@bunnyland/ui-web/preact';\n```\n\n`preact` is a peer dependency so each application owns one runtime and Vite can deduplicate\nit. The library build externalizes `preact` and `preact/hooks` rather than bundling a second\ncopy. See the canonical [Bunnyland web design language](docs/developer/design-language.md)\nfor component boundaries, interaction states, and migration rules.\n\n## Package Releases\n\nStable GitHub releases publish the matching package version to the public npm registry with\nprovenance. The release tag must exactly match `v<package.json version>`; for example,\npackage version `0.2.0` is published from tag `v0.2.0`. The dedicated `publish.yml` workflow\nruns the complete package gate again before publishing.\n\nThe first publication needs a granular npm automation token with access to the `@bunnyland`\nscope in the repository's `NPM_TOKEN` Actions secret. Once the package exists, configure its\nnpm trusted publisher with organization `thalismind`, repository `bunnyland-ui-web`, workflow\n`publish.yml`, and the `npm publish` action. Then revoke the bootstrap token; the same\nworkflow uses GitHub Actions OIDC and automatically attaches npm provenance.\n\nConsumers should pin an exact registry version:\n\n```sh\nnpm install --save-exact @bunnyland/ui-web@0.2.0 preact\n```\n\n## Versioned Package Artifact\n\nBuild a standalone npm tarball for local package inspection with:\n\n```sh\nnpm ci\nnpm run pack:artifact\n```\n\nThe output is `artifacts/bunnyland-ui-web-<version>.tgz`. It contains `package.json`, typed\n`dist/` entry points, legacy `assets/`, source maps, and documentation, and has no dependency\non an adjacent checkout. CI uploads this tarball for every checked revision as a diagnostic\nartifact. Release consumers use the exact published registry version, never an adjacent\nsource directory or a checked-in tarball.\n\n## Themes\n\nThe package owns the shared `--bl-*` CSS variables and theme selector helpers. Built-in\npalette names are:\n\n- `midnight`\n- `candy`\n- `earth`\n- `ocean`\n- `sunset`\n- `high-contrast`\n\nEach palette follows `prefers-color-scheme` by default. The shared client menu can force\nDark or Light appearance, or return to Auto (System). Use `bindThemeSelect(select)` for\npalette selectors, `bindColorSchemeSelect(select)` for appearance selectors, and\n`setTheme(theme)` or `setColorScheme(scheme)` for direct changes. Old paired values such as\n`anime-light` continue to load as migration aliases (`candy` with Light forced), as do the\nformer `purple-blue` values (`midnight`). New colors should be added as CSS variables before\nclients depend on them.\n\nDeployments can add their own theme choices without changing this package:\n\n```ts\nimport { registerThemeOptions } from '@bunnyland/ui-web/theme';\n\nregisterThemeOptions([\n  { value: 'server-night', label: 'Server Night' },\n]);\n```\n\nThen serve CSS for the matching root class:\n\n```css\n:root.bl-theme-server-night {\n  color-scheme: dark;\n  --bl-bg: #101218;\n  --bl-surface: #202532;\n  --bl-text: #f0f4ff;\n  --bl-accent: #74c7ec;\n}\n```\n\nStatic browser clients also read a `themes` array from deployment `config.json` and register\nthose options automatically. Theme values must use lowercase letters, numbers, and hyphens so\nthe value maps directly to `bl-theme-<value>`. Set `theme` in `config.json` to make one of\nthose values the deployment default, or share a link with `?theme=<value>` to choose a theme\nfrom the URL.\n\nSee [custom web themes](docs/admin/custom-web-themes.md) for the server-admin setup guide.\n\n## Widgets\n\nThe framework-neutral widget helpers are split by audience:\n\n- `@bunnyland/ui-web/widgets`: common storage, escaping, and simple data helpers.\n- `@bunnyland/ui-web/player-widgets`: contextual player controls such as photo galleries.\n- `@bunnyland/ui-web/admin-widgets`: detailed admin/editor controls such as tag editors and search dropdowns.\n\nFramework-specific UI packages can wrap these behaviors in components without duplicating the underlying logic. Use narrow imports instead of the root package when a client only needs one audience-specific surface.\n\nPlayer clients should favor contextual, rich controls for interacting with the current room, visible entities, exits, inventory, queued actions, and images. Admin clients should favor detailed inspection and editing controls such as structured fields, sliders, selectors, tag editors, and lower-level component data. Keep those surfaces separate when adding reusable widgets.\n\n## Player live updates and disclosed facts\n\n`@bunnyland/ui-web/play` owns the shared remote-player update coordinator. It authenticates\nthe character WebSocket in the first frame so claim secrets never appear in URLs, coalesces\nbursts into serialized refreshes, reconnects with backoff, and resumes the character-scoped\nrecent-event fallback while disconnected. It deduplicates at-least-once event delivery by\n`event_id`, detects `stream_sequence` gaps, and refreshes the character projection after a\ngap or `resync`. Use one coordinator per claimed character rather than giving each panel its\nown socket or polling loop.\n\nPlayer activity renderers understand serialized `facts` entries with stable `key`, `text`,\nand numeric `detail`. Render the provided text in server order; do not reinterpret component\nstate or apply a second client-side cutoff. Action controls likewise consume the serialized\nregistry `actions` and `target_groups`. Missing metadata means an empty/disabled action state,\nnot a static browser verb catalogue.\n\n## Storybook\n\nA component storybook renders the shared Preact foundation, theme selector, form controls,\nlegacy widget helpers, and every semantic state as a live gallery. Build it with:\n\n```sh\nnpm run storybook\n```\n\nThat builds the package and writes `storybook-dist/`:\n\n- `index.html` — the live, interactive storybook (theme selector, tag editor, search dropdown, client menu).\n- `screenshots.html` — a gallery of one PNG per theme plus the client-menu overlay.\n- `screenshots/*.png` — the captured screenshots.\n- `storybook.zip` — an offline bundle of the HTML, CSS, JS, and screenshots.\n\nThe capture uses Playwright's bundled Chromium (`npx playwright install chromium`) and falls\nback to a system Chrome via `STORYBOOK_BROWSER_CHANNEL` when the bundled browser is missing.\n\nCI publishes the `storybook-dist/` directory and `storybook.zip` as build artifacts and builds\n`Dockerfile.storybook` into an nginx image (`bunnyland-ui-web-storybook`) that serves the\nbrowsable storybook.\n\n## Checks\n\nRun:\n\n```sh\nnpm run check\n```\n\nThat runs ESLint, the Vite 8 library build, TypeScript declaration generation, Node test\ncoverage, and the Preact component tests in a browser-like DOM.\n\n## License\n\nLicensed under the GNU Affero General Public License v3.0 or later. See\n[LICENSE](LICENSE).\n","readmeFilename":"README.md"}