{"_id":"@picoframe/frame","_rev":"30-d74314548ce70b94bbb6505edc36bc15","name":"@picoframe/frame","dist-tags":{"latest":"0.9.1"},"versions":{"0.0.1":{"name":"@picoframe/frame","version":"0.0.1","license":"MIT","_id":"@picoframe/frame@0.0.1","maintainers":[{"name":"tomjn","email":"npm@tomjn.com"}],"homepage":"https://github.com/tomjn/picoframe#readme","bugs":{"url":"https://github.com/tomjn/picoframe/issues"},"dist":{"shasum":"b5998352eaafaffd2e8db9b0824f8b06e9506d86","tarball":"https://registry.npmjs.org/@picoframe/frame/-/frame-0.0.1.tgz","fileCount":38,"integrity":"sha512-Rb+nEKL/ToFjwnfI5OZ6gARb5E6imfobbUqiG1bZOCntvrMqZhjood8z3FEoM4LkLQlM5nqGTf043/Y11ueUKg==","signatures":[{"sig":"MEQCIGJf8pZvnJwfewDkex8p2TqRFpUA0qsmZlFM8TwMgwtPAiAU363zCjp3EjcJf+25oIp1l0oWciqLYtiet5WLEBhH7Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":30873},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./theme.css":"./src/theme.css"},"gitHead":"9b8242f4cb342767fa56584c8454db4970919c60","scripts":{"build":"tsc -p tsconfig.build.json"},"_npmUser":{"name":"tomjn","email":"npm@tomjn.com"},"repository":{"url":"git+https://github.com/tomjn/picoframe.git","type":"git","directory":"packages/frame"},"_npmVersion":"11.6.2","description":"Reusable Tauri v2 app-frame React shell: sidebar, top bar, hash routing, nav and slot composition, theme","directories":{},"_nodeVersion":"24.11.1","dependencies":{"clsx":"^2.1.1","lucide-react":"^1.16.0","tailwind-merge":"^3.6.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0","react-router":"^7.6.0","@tauri-apps/api":"^2.11.0","@picoframe/plugin-sdk":"*"},"_npmOperationalInternal":{"tmp":"tmp/frame_0.0.1_1782238466459_0.31520851009651696","host":"s3://npm-registry-packages-npm-production"}},"0.0.2":{"name":"@picoframe/frame","version":"0.0.2","license":"MIT","_id":"@picoframe/frame@0.0.2","maintainers":[{"name":"tomjn","email":"npm@tomjn.com"}],"homepage":"https://github.com/tomjn/picoframe#readme","bugs":{"url":"https://github.com/tomjn/picoframe/issues"},"dist":{"shasum":"8411d30cd053dcbb7e33be79894a86ca00f7f7e7","tarball":"https://registry.npmjs.org/@picoframe/frame/-/frame-0.0.2.tgz","fileCount":46,"integrity":"sha512-3iR5nmSpdPpOIFgSvpVhXs4uAG4PwH3ZqK1NC6imB29s16H7jv8nmiD+2GkBXWfmllzAiZq1uldjb11y0KBlPg==","signatures":[{"sig":"MEUCIEsuNAACmdjNeV4/HaoJRLAaF1ei7iJH8tE5RUYxoZ7AAiEAxhunYQJkzaiFF74EzeRYy0cB+duyY1TZ3w5TfplMyWE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":37695},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./theme.css":"./src/theme.css"},"gitHead":"411d146c60fe2b5553d4888e74dbab9abc5f147e","scripts":{"build":"tsc -p tsconfig.build.json"},"_npmUser":{"name":"tomjn","email":"npm@tomjn.com"},"repository":{"url":"git+https://github.com/tomjn/picoframe.git","type":"git","directory":"packages/frame"},"_npmVersion":"11.6.2","description":"Reusable Tauri v2 app-frame React shell: sidebar, top bar, hash routing, nav and slot composition, theme","directories":{},"_nodeVersion":"24.11.1","dependencies":{"clsx":"^2.1.1","lucide-react":"^1.16.0","tailwind-merge":"^3.6.0","class-variance-authority":"^0.7.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0","react-router":"^7.6.0","@tauri-apps/api":"^2.11.0","@picoframe/plugin-sdk":"*"},"_npmOperationalInternal":{"tmp":"tmp/frame_0.0.2_1782248774543_0.8769798746397488","host":"s3://npm-registry-packages-npm-production"}},"0.0.3":{"name":"@picoframe/frame","version":"0.0.3","license":"MIT","_id":"@picoframe/frame@0.0.3","maintainers":[{"name":"tomjn","email":"npm@tomjn.com"}],"homepage":"https://github.com/tomjn/picoframe#readme","bugs":{"url":"https://github.com/tomjn/picoframe/issues"},"dist":{"shasum":"8442d84c7b93253d477c38fa77c7403bd15195f6","tarball":"https://registry.npmjs.org/@picoframe/frame/-/frame-0.0.3.tgz","fileCount":46,"integrity":"sha512-NCYQ7JOMfr5mBfAb/lhmnJuk1vkhiYChvP1fMUgqbV6WupvOLfESgWTmhUvkGqHh8mjKQI2mLXKXzJYPjbSm6A==","signatures":[{"sig":"MEYCIQDm322uhQ8MlfLZGp9YxY5gYaYEZygUktrYc23jPHxUqQIhANpIZYyLX8hdm9FCUNUMj0ZERrv7pUERQSFGt/zufhXx","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":39305},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./theme.css":"./src/theme.css"},"gitHead":"9040d352476fa34d190a67b4192deaa946c1f875","scripts":{"build":"tsc -p tsconfig.build.json"},"_npmUser":{"name":"tomjn","email":"npm@tomjn.com"},"repository":{"url":"git+https://github.com/tomjn/picoframe.git","type":"git","directory":"packages/frame"},"_npmVersion":"11.6.2","description":"Reusable Tauri v2 app-frame React shell: sidebar, top bar, hash routing, nav and slot composition, theme","directories":{},"_nodeVersion":"24.11.1","dependencies":{"clsx":"^2.1.1","lucide-react":"^1.16.0","tailwind-merge":"^3.6.0","class-variance-authority":"^0.7.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0","react-router":"^7.6.0","@tauri-apps/api":"^2.11.0","@picoframe/plugin-sdk":"*"},"_npmOperationalInternal":{"tmp":"tmp/frame_0.0.3_1782250498381_0.7909548531664148","host":"s3://npm-registry-packages-npm-production"}},"0.0.4":{"name":"@picoframe/frame","version":"0.0.4","license":"MIT","_id":"@picoframe/frame@0.0.4","maintainers":[{"name":"tomjn","email":"npm@tomjn.com"}],"homepage":"https://github.com/tomjn/picoframe#readme","bugs":{"url":"https://github.com/tomjn/picoframe/issues"},"dist":{"shasum":"1af6d36a2c3dab9d3af4eb4e8607236ff5286945","tarball":"https://registry.npmjs.org/@picoframe/frame/-/frame-0.0.4.tgz","fileCount":50,"integrity":"sha512-ME5Pkr+MSPHfED6Tz870mrt5tDw9cbQeOiz1VcLFXK3fI59T6BQeoUjKpX3cGSbWECsnVNjT9+OPnQTVDiRP9g==","signatures":[{"sig":"MEUCIGLsGp0jVrmlyiEpUf2ZKqQTu7JPKErBhvBcOR+XorGbAiEA1oJj4oBIjsYiEp340WymVLaxNM+3/uahqX81K6OmD5M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":43758},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./theme.css":"./src/theme.css"},"gitHead":"27ff59b2194471e1071105e8bcde27aae27aa52f","scripts":{"build":"tsc -p tsconfig.build.json"},"_npmUser":{"name":"tomjn","email":"npm@tomjn.com"},"repository":{"url":"git+https://github.com/tomjn/picoframe.git","type":"git","directory":"packages/frame"},"_npmVersion":"11.6.2","description":"Reusable Tauri v2 app-frame React shell: sidebar, top bar, hash routing, nav and slot composition, theme","directories":{},"_nodeVersion":"24.11.1","dependencies":{"clsx":"^2.1.1","lucide-react":"^1.16.0","tailwind-merge":"^3.6.0","class-variance-authority":"^0.7.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0","react-router":"^7.6.0","@tauri-apps/api":"^2.11.0","@picoframe/plugin-sdk":"*"},"_npmOperationalInternal":{"tmp":"tmp/frame_0.0.4_1782254252534_0.5968876672507744","host":"s3://npm-registry-packages-npm-production"}},"0.0.5":{"name":"@picoframe/frame","version":"0.0.5","license":"MIT","_id":"@picoframe/frame@0.0.5","maintainers":[{"name":"tomjn","email":"npm@tomjn.com"}],"homepage":"https://github.com/tomjn/picoframe#readme","bugs":{"url":"https://github.com/tomjn/picoframe/issues"},"dist":{"shasum":"6240ff037df6edf091be8ec11e740bf69db57335","tarball":"https://registry.npmjs.org/@picoframe/frame/-/frame-0.0.5.tgz","fileCount":50,"integrity":"sha512-GJgOKHEWv7jHvN1goIl/a3jkOb5FbA3Q576ggrNlOSTCnky75ASQuHjow8j8J2btzl9fyQChTdfUfDo8ilw3dQ==","signatures":[{"sig":"MEYCIQDXIUWkGTvGZD/7URt9O9JFEUYI00oXhh907cLdr/tbXAIhAI/IaS8XfSXbQW0fSZuDOxjS/rgqtoflMP6vdiZzzBCj","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":44380},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./theme.css":"./src/theme.css"},"gitHead":"0a6ac617ea664407ab4a9e749652a71f268cc2b0","scripts":{"build":"tsc -p tsconfig.build.json"},"_npmUser":{"name":"tomjn","email":"npm@tomjn.com"},"repository":{"url":"git+https://github.com/tomjn/picoframe.git","type":"git","directory":"packages/frame"},"_npmVersion":"11.6.2","description":"Reusable Tauri v2 app-frame React shell: sidebar, top bar, hash routing, nav and slot composition, theme","directories":{},"_nodeVersion":"24.11.1","dependencies":{"clsx":"^2.1.1","lucide-react":"^1.16.0","tailwind-merge":"^3.6.0","class-variance-authority":"^0.7.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0","react-router":"^7.6.0","@tauri-apps/api":"^2.11.0","@picoframe/plugin-sdk":"*"},"_npmOperationalInternal":{"tmp":"tmp/frame_0.0.5_1782293193131_0.3649942870960212","host":"s3://npm-registry-packages-npm-production"}},"0.0.6":{"name":"@picoframe/frame","version":"0.0.6","license":"MIT","_id":"@picoframe/frame@0.0.6","maintainers":[{"name":"tomjn","email":"npm@tomjn.com"}],"homepage":"https://github.com/tomjn/picoframe#readme","bugs":{"url":"https://github.com/tomjn/picoframe/issues"},"dist":{"shasum":"42f443ca5e80b95647c07441c01a4d93b63e023a","tarball":"https://registry.npmjs.org/@picoframe/frame/-/frame-0.0.6.tgz","fileCount":69,"integrity":"sha512-W/djgFIaeYIYePvowurzPJpHaahNhN1JmafAMJWw9XRxxsbk+aJlPOgxjJTKTuYr7yeNbZpqSC4TL3yqe/v6KQ==","signatures":[{"sig":"MEQCIB0DM401G83yAS7CBYXgwa0NuH/gppiHYxAF+SseUBCMAiAyGAd0AduErd0KCLFbEcs0pIvZeUeYic69Si0jWF3Fmg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":67265},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./theme.css":"./src/theme.css"},"gitHead":"90dfee8a4858b9437201a29a5dc6fd0cec9a57de","scripts":{"build":"tsc -p tsconfig.build.json"},"_npmUser":{"name":"tomjn","email":"npm@tomjn.com"},"repository":{"url":"git+https://github.com/tomjn/picoframe.git","type":"git","directory":"packages/frame"},"_npmVersion":"11.6.2","description":"Reusable Tauri v2 app-frame React shell: sidebar, top bar, hash routing, nav and slot composition, theme","directories":{},"_nodeVersion":"24.11.1","dependencies":{"clsx":"^2.1.1","radix-ui":"^1.6.0","lucide-react":"^1.16.0","tailwind-merge":"^3.6.0","class-variance-authority":"^0.7.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0","react-router":"^7.6.0","@tauri-apps/api":"^2.11.0","@picoframe/plugin-sdk":"*"},"_npmOperationalInternal":{"tmp":"tmp/frame_0.0.6_1782299652966_0.6793473052284051","host":"s3://npm-registry-packages-npm-production"}},"0.0.7":{"name":"@picoframe/frame","version":"0.0.7","license":"MIT","_id":"@picoframe/frame@0.0.7","maintainers":[{"name":"tomjn","email":"npm@tomjn.com"}],"homepage":"https://github.com/tomjn/picoframe#readme","bugs":{"url":"https://github.com/tomjn/picoframe/issues"},"dist":{"shasum":"912c41bd357197cb37835254e9dce15da1f8e0b2","tarball":"https://registry.npmjs.org/@picoframe/frame/-/frame-0.0.7.tgz","fileCount":69,"integrity":"sha512-w4Q0aKprNADB7ohSqUr5slsf0cNtKXSk/iKFpuNJikV2qqJ1NN+e8K8uJ41N6/oD2eJOfeNci1b7NDTAIraGug==","signatures":[{"sig":"MEUCIBpshTHdS8l+u02LMV7/PMZfZA0AA9gFgLlkbXhUyg+iAiEAsag1Sm58bvy5HStDRwsDvgXH8J4UInL0kqHXiO0cvEc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":67274},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./theme.css":"./src/theme.css"},"gitHead":"0004be733e7e5b7c5ef7c0a6bc83a1f6ae69a822","scripts":{"build":"tsc -p tsconfig.build.json"},"_npmUser":{"name":"tomjn","email":"npm@tomjn.com"},"repository":{"url":"git+https://github.com/tomjn/picoframe.git","type":"git","directory":"packages/frame"},"_npmVersion":"11.6.2","description":"Reusable Tauri v2 app-frame React shell: sidebar, top bar, hash routing, nav and slot composition, theme","directories":{},"_nodeVersion":"24.11.1","dependencies":{"clsx":"^2.1.1","radix-ui":"^1.6.0","lucide-react":"^1.16.0","tailwind-merge":"^3.6.0","class-variance-authority":"^0.7.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0","react-router":"^7.6.0","@tauri-apps/api":"^2.11.0","@picoframe/plugin-sdk":"*"},"_npmOperationalInternal":{"tmp":"tmp/frame_0.0.7_1782301577987_0.8338371544482683","host":"s3://npm-registry-packages-npm-production"}},"0.0.8":{"name":"@picoframe/frame","version":"0.0.8","license":"MIT","_id":"@picoframe/frame@0.0.8","maintainers":[{"name":"tomjn","email":"npm@tomjn.com"}],"homepage":"https://github.com/tomjn/picoframe#readme","bugs":{"url":"https://github.com/tomjn/picoframe/issues"},"dist":{"shasum":"1ce16afb06bc72e52c705bcf9442e348c2d4508b","tarball":"https://registry.npmjs.org/@picoframe/frame/-/frame-0.0.8.tgz","fileCount":71,"integrity":"sha512-8IFVPBx5GFKO+4Q6SMdQ3UW6tdo5kOm5dSIP6qHKxFuurftlY93l9UhD0ensqebZKK0q4EcwBDzy3B0RLpxHgQ==","signatures":[{"sig":"MEQCIEPGkM5ePK+7W3RB1xvjBlKy7tAlCb3lxrwwnecJfh6PAiBMzcKjDVnGrWL68ooraxQ/O6b8zoWTcTdSesuudOG5pQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":71386},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./theme.css":"./src/theme.css"},"gitHead":"e8b4c8e77f90bf2f99486b265bc9ccaca07815ac","scripts":{"build":"tsc -p tsconfig.build.json"},"_npmUser":{"name":"tomjn","email":"npm@tomjn.com"},"repository":{"url":"git+https://github.com/tomjn/picoframe.git","type":"git","directory":"packages/frame"},"_npmVersion":"11.6.2","description":"Reusable Tauri v2 app-frame React shell: sidebar, top bar, hash routing, nav and slot composition, theme","directories":{},"_nodeVersion":"24.11.1","dependencies":{"clsx":"^2.1.1","radix-ui":"^1.6.0","lucide-react":"^1.16.0","tailwind-merge":"^3.6.0","class-variance-authority":"^0.7.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0","react-router":"^7.6.0","@tauri-apps/api":"^2.11.0","@picoframe/plugin-sdk":"*"},"_npmOperationalInternal":{"tmp":"tmp/frame_0.0.8_1782418933644_0.09904912213102857","host":"s3://npm-registry-packages-npm-production"}},"0.0.9":{"name":"@picoframe/frame","version":"0.0.9","license":"MIT","_id":"@picoframe/frame@0.0.9","maintainers":[{"name":"tomjn","email":"npm@tomjn.com"}],"homepage":"https://github.com/tomjn/picoframe#readme","bugs":{"url":"https://github.com/tomjn/picoframe/issues"},"dist":{"shasum":"64fdadd7772c1ec6fc9252a264af32b51cb3e520","tarball":"https://registry.npmjs.org/@picoframe/frame/-/frame-0.0.9.tgz","fileCount":73,"integrity":"sha512-sGFi7wsYceO7rXXqc/3Wx7b8u7PTXc+R5VKp7kT6U7BFbtT/vaV2KA59xAOwAqGGtSEM8pbJPDv28BIvwWsENA==","signatures":[{"sig":"MEQCIEnwEGTKItV0t6KmHRErjzFPHyjFbCc2FfUQ7aNiWLJiAiAzmhWlosXoXISGr509N0IFSfBmwppPPMNUAf+64UCkWg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":78838},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./theme.css":"./src/theme.css"},"gitHead":"54b19f76abf0e44b7a7861d619ad65e3bad4b46a","scripts":{"build":"tsc -p tsconfig.build.json"},"_npmUser":{"name":"tomjn","email":"npm@tomjn.com"},"repository":{"url":"git+https://github.com/tomjn/picoframe.git","type":"git","directory":"packages/frame"},"_npmVersion":"11.6.2","description":"Reusable Tauri v2 app-frame React shell: sidebar, top bar, hash routing, nav and slot composition, theme","directories":{},"_nodeVersion":"24.11.1","dependencies":{"clsx":"^2.1.1","radix-ui":"^1.6.0","lucide-react":"^1.16.0","tailwind-merge":"^3.6.0","class-variance-authority":"^0.7.1","@tauri-apps/plugin-opener":"^2.5.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0","react-router":"^7.6.0","@tauri-apps/api":"^2.11.0","@picoframe/plugin-sdk":"*"},"_npmOperationalInternal":{"tmp":"tmp/frame_0.0.9_1782495758847_0.27198133934729873","host":"s3://npm-registry-packages-npm-production"}},"0.0.10":{"name":"@picoframe/frame","version":"0.0.10","license":"MIT","_id":"@picoframe/frame@0.0.10","maintainers":[{"name":"tomjn","email":"npm@tomjn.com"}],"homepage":"https://github.com/tomjn/picoframe#readme","bugs":{"url":"https://github.com/tomjn/picoframe/issues"},"dist":{"shasum":"38cfc3a7996a7473c98a36460d55d784ad79a7ca","tarball":"https://registry.npmjs.org/@picoframe/frame/-/frame-0.0.10.tgz","fileCount":73,"integrity":"sha512-dTk9aCxax2lWDWtiB+F1Pmty9gfmTulb6SJQNmHjt1X3J/+Dq7PbygMCABA15uDe9IKJB8Zg7/ATLJXS1SD9vA==","signatures":[{"sig":"MEUCIGPMYWfqkF/y4tzhB2XX/wUfY7Zyi+ZKvBnTswIitvMKAiEAxbgWv/XEVeatPRlyCr1jO2n0M/UyBpwwL+/zK/m3S5I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":84015},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./theme.css":"./src/theme.css"},"gitHead":"f4f751c4bde0c1c71f38f9d92ea6ab1c8b19f7cb","scripts":{"build":"tsc -p tsconfig.build.json"},"_npmUser":{"name":"tomjn","email":"npm@tomjn.com"},"repository":{"url":"git+https://github.com/tomjn/picoframe.git","type":"git","directory":"packages/frame"},"_npmVersion":"11.6.2","description":"Reusable Tauri v2 app-frame React shell: sidebar, top bar, hash routing, nav and slot composition, theme","directories":{},"_nodeVersion":"24.11.1","dependencies":{"clsx":"^2.1.1","radix-ui":"^1.6.0","lucide-react":"^1.16.0","tailwind-merge":"^3.6.0","class-variance-authority":"^0.7.1","@tauri-apps/plugin-opener":"^2.5.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0","react-router":"^7.6.0","@tauri-apps/api":"^2.11.0","@picoframe/plugin-sdk":"*"},"_npmOperationalInternal":{"tmp":"tmp/frame_0.0.10_1782934794566_0.4156065243764344","host":"s3://npm-registry-packages-npm-production"}},"0.0.11":{"name":"@picoframe/frame","version":"0.0.11","license":"MIT","_id":"@picoframe/frame@0.0.11","maintainers":[{"name":"tomjn","email":"npm@tomjn.com"}],"dist":{"shasum":"510f7d26b3a08e100ee148d8570bf06f7240603d","tarball":"https://registry.npmjs.org/@picoframe/frame/-/frame-0.0.11.tgz","fileCount":75,"integrity":"sha512-DiWPOT+ZerZprRLSFWbwXAAxO193Y/RLrTeLK2vDIYH6wjWVb1JVxKJ8g7Gkely+JZzDdWEVcOqFO4pIaoIcbw==","signatures":[{"sig":"MEUCIH7q0z5mcbdWXRVhXQh4N4IYBcNjxkRppdxM7s7/wiT+AiEAmDYUFlBjP0SyOrVYuro9N7VwMvzbmR2B6r4UQ2GgNfU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":86243},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","shasum":"510f7d26b3a08e100ee148d8570bf06f7240603d","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./theme.css":"./src/theme.css"},"scripts":{"build":"tsc -p tsconfig.build.json"},"_npmUser":{"name":"tomjn","email":"npm@tomjn.com"},"_integrity":"sha512-DiWPOT+ZerZprRLSFWbwXAAxO193Y/RLrTeLK2vDIYH6wjWVb1JVxKJ8g7Gkely+JZzDdWEVcOqFO4pIaoIcbw==","repository":{"url":"git+https://github.com/tomjn/picoframe.git","type":"git","directory":"packages/frame"},"_npmVersion":"10.8.3","description":"Reusable Tauri v2 app-frame React shell: sidebar, top bar, hash routing, nav and slot composition, theme","directories":{},"_nodeVersion":"24.3.0","dependencies":{"clsx":"^2.1.1","radix-ui":"^1.6.0","lucide-react":"^1.16.0","tailwind-merge":"^3.6.0","class-variance-authority":"^0.7.1","@tauri-apps/plugin-opener":"^2.5.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0","react-router":"^7.6.0","@tauri-apps/api":"^2.11.0","@picoframe/plugin-sdk":"*"},"_npmOperationalInternal":{"tmp":"tmp/frame_0.0.11_1783079938241_0.6802750299292921","host":"s3://npm-registry-packages-npm-production"}},"0.0.12":{"name":"@picoframe/frame","version":"0.0.12","license":"MIT","_id":"@picoframe/frame@0.0.12","maintainers":[{"name":"tomjn","email":"npm@tomjn.com"}],"dist":{"shasum":"09ca0a4bb0f55331673ae9a347f106310a656e39","tarball":"https://registry.npmjs.org/@picoframe/frame/-/frame-0.0.12.tgz","fileCount":75,"integrity":"sha512-Myc1qBPQp+PYhvNIrjQs201SxngSnr1GhoEzNHv56OvdmO/MnrVBYZHtVqBTp1eoulLV+JGm0TZKO3XgK467ZA==","signatures":[{"sig":"MEQCIGRiX1yV9eY1Yde6WerWcuH+M7yYCxP2RZXooLW36QlxAiBnSqW3wRARrlgMf+7Tsoa2d8cFAY0UYRB1B6bdALL9LQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":86707},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","shasum":"09ca0a4bb0f55331673ae9a347f106310a656e39","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./theme.css":"./src/theme.css"},"scripts":{"build":"tsc -p tsconfig.build.json"},"_npmUser":{"name":"tomjn","email":"npm@tomjn.com"},"_integrity":"sha512-Myc1qBPQp+PYhvNIrjQs201SxngSnr1GhoEzNHv56OvdmO/MnrVBYZHtVqBTp1eoulLV+JGm0TZKO3XgK467ZA==","repository":{"url":"git+https://github.com/tomjn/picoframe.git","type":"git","directory":"packages/frame"},"_npmVersion":"10.8.3","description":"Reusable Tauri v2 app-frame React shell: sidebar, top bar, hash routing, nav and slot composition, theme","directories":{},"_nodeVersion":"24.3.0","dependencies":{"clsx":"^2.1.1","radix-ui":"^1.6.0","lucide-react":"^1.16.0","tailwind-merge":"^3.6.0","class-variance-authority":"^0.7.1","@tauri-apps/plugin-opener":"^2.5.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0","react-router":"^7.6.0","@tauri-apps/api":"^2.11.0","@picoframe/plugin-sdk":"*"},"_npmOperationalInternal":{"tmp":"tmp/frame_0.0.12_1783081735603_0.887197150217339","host":"s3://npm-registry-packages-npm-production"}},"0.0.13":{"name":"@picoframe/frame","version":"0.0.13","license":"MIT","_id":"@picoframe/frame@0.0.13","maintainers":[{"name":"tomjn","email":"npm@tomjn.com"}],"dist":{"shasum":"00de1bda28980f24365e601e714c4b237a16eab9","tarball":"https://registry.npmjs.org/@picoframe/frame/-/frame-0.0.13.tgz","fileCount":77,"integrity":"sha512-ET4EeEzgtME9ajx48OHNDEnPKjkBL/7QSqRx6DTP+tXY7tYr5XKBjo7K5i118Z8klunRx5cCZ5HRKSpZhZawvg==","signatures":[{"sig":"MEUCIEui7PgKLi8la6GlvM+NEBGZuQgV1z85tnt+PK8dR45HAiEAlNRqunPYSRQrK8erWhMqilyv/7CCqgJHHcbcov0kUgs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":89013},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","shasum":"00de1bda28980f24365e601e714c4b237a16eab9","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./theme.css":"./src/theme.css"},"scripts":{"build":"tsc -p tsconfig.build.json"},"_npmUser":{"name":"tomjn","email":"npm@tomjn.com"},"_integrity":"sha512-ET4EeEzgtME9ajx48OHNDEnPKjkBL/7QSqRx6DTP+tXY7tYr5XKBjo7K5i118Z8klunRx5cCZ5HRKSpZhZawvg==","repository":{"url":"git+https://github.com/tomjn/picoframe.git","type":"git","directory":"packages/frame"},"_npmVersion":"10.8.3","description":"Reusable Tauri v2 app-frame React shell: sidebar, top bar, hash routing, nav and slot composition, theme","directories":{},"_nodeVersion":"24.3.0","dependencies":{"clsx":"^2.1.1","radix-ui":"^1.6.0","lucide-react":"^1.16.0","tailwind-merge":"^3.6.0","class-variance-authority":"^0.7.1","@tauri-apps/plugin-opener":"^2.5.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0","react-router":"^7.6.0","@tauri-apps/api":"^2.11.0","@picoframe/plugin-sdk":"*"},"_npmOperationalInternal":{"tmp":"tmp/frame_0.0.13_1783084543179_0.29988624697491617","host":"s3://npm-registry-packages-npm-production"}},"0.0.14":{"name":"@picoframe/frame","version":"0.0.14","license":"MIT","_id":"@picoframe/frame@0.0.14","maintainers":[{"name":"tomjn","email":"npm@tomjn.com"}],"homepage":"https://github.com/tomjn/picoframe#readme","bugs":{"url":"https://github.com/tomjn/picoframe/issues"},"dist":{"shasum":"99b782c7b9f7d6df4de0c587bb70a46f8220feb9","tarball":"https://registry.npmjs.org/@picoframe/frame/-/frame-0.0.14.tgz","fileCount":77,"integrity":"sha512-E2zdQGM8fgxIUVvlvmKs5TKVYBrqHMtLu6FOe5ZyHmrIoLdulfA1K6Zb97yg8fyvokXUhGznXoL1jbkJ+TlJ4g==","signatures":[{"sig":"MEQCID85X00awpoYmrl6yYxQd1PK0dg/SXlUvZtHv9r6jIBYAiA67yCyMxbYKEFwDEaaocHTDFfdOvELFjQeTwD14x+z/w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":94062},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./theme.css":"./src/theme.css"},"gitHead":"942fdcad07c8b59129471aa0b11544c76bdb7c64","scripts":{"build":"tsc -p tsconfig.build.json"},"_npmUser":{"name":"tomjn","email":"npm@tomjn.com"},"repository":{"url":"git+https://github.com/tomjn/picoframe.git","type":"git","directory":"packages/frame"},"_npmVersion":"11.6.2","description":"Reusable Tauri v2 app-frame React shell: sidebar, top bar, hash routing, nav and slot composition, theme","directories":{},"_nodeVersion":"24.11.1","dependencies":{"clsx":"^2.1.1","radix-ui":"^1.6.0","lucide-react":"^1.16.0","tailwind-merge":"^3.6.0","class-variance-authority":"^0.7.1","@tauri-apps/plugin-opener":"^2.5.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0","react-router":"^7.6.0","@tauri-apps/api":"^2.11.0","@picoframe/plugin-sdk":"*"},"_npmOperationalInternal":{"tmp":"tmp/frame_0.0.14_1783116781949_0.5434109879139029","host":"s3://npm-registry-packages-npm-production"}},"0.0.15":{"name":"@picoframe/frame","version":"0.0.15","license":"MIT","_id":"@picoframe/frame@0.0.15","maintainers":[{"name":"tomjn","email":"npm@tomjn.com"}],"homepage":"https://github.com/tomjn/picoframe#readme","bugs":{"url":"https://github.com/tomjn/picoframe/issues"},"dist":{"shasum":"1ad64cc7a3a09fdc1a39ada57e4f1e6e05fb361a","tarball":"https://registry.npmjs.org/@picoframe/frame/-/frame-0.0.15.tgz","fileCount":77,"integrity":"sha512-vdM/EYigkLzQ2/ipSzTy6FzzCWJJB7uZF3dB+nGtVBGQj0g3Mr5SttP/WlOPGFI/LVX+WB2jN/eQzyzBMsxVOQ==","signatures":[{"sig":"MEUCIQCzzLmJRoC8AYqFGbeHpZlckPR0ZUALvQbzvVmlBGpQAAIgCliqk0c9qeB4cs82QfB5SVcTpeload7vZkcCmFLmSfk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":94893},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./theme.css":"./src/theme.css"},"gitHead":"75d12a32f0f5c3bfbafa82e14fd02d7b5413d0a5","scripts":{"build":"tsc -p tsconfig.build.json"},"_npmUser":{"name":"tomjn","email":"npm@tomjn.com"},"repository":{"url":"git+https://github.com/tomjn/picoframe.git","type":"git","directory":"packages/frame"},"_npmVersion":"11.6.2","description":"Reusable Tauri v2 app-frame React shell: sidebar, top bar, hash routing, nav and slot composition, theme","directories":{},"_nodeVersion":"24.11.1","dependencies":{"clsx":"^2.1.1","radix-ui":"^1.6.0","lucide-react":"^1.16.0","tailwind-merge":"^3.6.0","class-variance-authority":"^0.7.1","@tauri-apps/plugin-opener":"^2.5.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0","react-router":"^7.6.0","@tauri-apps/api":"^2.11.0","@picoframe/plugin-sdk":"*"},"_npmOperationalInternal":{"tmp":"tmp/frame_0.0.15_1783117698469_0.825762978132728","host":"s3://npm-registry-packages-npm-production"}},"0.0.16":{"name":"@picoframe/frame","version":"0.0.16","license":"MIT","_id":"@picoframe/frame@0.0.16","maintainers":[{"name":"tomjn","email":"npm@tomjn.com"}],"homepage":"https://github.com/tomjn/picoframe#readme","bugs":{"url":"https://github.com/tomjn/picoframe/issues"},"dist":{"shasum":"9d04cbfa3070ea47c70d52ae64eab5fbf7791cd9","tarball":"https://registry.npmjs.org/@picoframe/frame/-/frame-0.0.16.tgz","fileCount":77,"integrity":"sha512-UgTgIJc9/y404sKFSI4TIL46mSHDSuoBHzcPTlF6CUL6jJtgyTYtfPBCnVTdR5OPbA6X3uEXHVm70Droo8g17g==","signatures":[{"sig":"MEUCIQDc09Psb043j9rNleG6U20hgrFrPA8G7uRptsWzqToyrwIgCffqwv5Qi9CyQ4O85VVmXxJW6BhPU2EYkzOMNPIrosQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":95670},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./theme.css":"./src/theme.css"},"gitHead":"4ed4a302f57300497f53631daa66a2630ec3ce6a","scripts":{"build":"tsc -p tsconfig.build.json"},"_npmUser":{"name":"tomjn","email":"npm@tomjn.com"},"repository":{"url":"git+https://github.com/tomjn/picoframe.git","type":"git","directory":"packages/frame"},"_npmVersion":"11.6.2","description":"Reusable Tauri v2 app-frame React shell: sidebar, top bar, hash routing, nav and slot composition, theme","directories":{},"_nodeVersion":"24.11.1","dependencies":{"clsx":"^2.1.1","radix-ui":"^1.6.0","lucide-react":"^1.16.0","tailwind-merge":"^3.6.0","class-variance-authority":"^0.7.1","@tauri-apps/plugin-opener":"^2.5.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0","react-router":"^7.6.0","@tauri-apps/api":"^2.11.0","@picoframe/plugin-sdk":"*"},"_npmOperationalInternal":{"tmp":"tmp/frame_0.0.16_1783165783799_0.4765607612866838","host":"s3://npm-registry-packages-npm-production"}},"0.0.17":{"name":"@picoframe/frame","version":"0.0.17","license":"MIT","_id":"@picoframe/frame@0.0.17","maintainers":[{"name":"tomjn","email":"npm@tomjn.com"}],"homepage":"https://github.com/tomjn/picoframe#readme","bugs":{"url":"https://github.com/tomjn/picoframe/issues"},"dist":{"shasum":"4f4d88698ccca6719c43ecc24a3a22095bbb9424","tarball":"https://registry.npmjs.org/@picoframe/frame/-/frame-0.0.17.tgz","fileCount":77,"integrity":"sha512-TBJY3foaLDnkNPRZvbKAZHUpStJbee1OL4JBihCliUHwUt85sJnViVIdCPlQMZZUy/arw/66Krhk4DsmQP9FQA==","signatures":[{"sig":"MEYCIQCjylgnDUXpp5LqPn1g8dAfNUNMw5mgWI8IDgS9SrF+eQIhAIUKOUUx8ONrybJh29xEziNTjuObkqyeY8Pk31Lc31KD","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":97079},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./theme.css":"./src/theme.css"},"gitHead":"4fc2aaa8fc1ffe729c006e7b48d947fefa09b5c5","scripts":{"build":"tsc -p tsconfig.build.json"},"_npmUser":{"name":"tomjn","email":"npm@tomjn.com"},"repository":{"url":"git+https://github.com/tomjn/picoframe.git","type":"git","directory":"packages/frame"},"_npmVersion":"11.6.2","description":"Reusable Tauri v2 app-frame React shell: sidebar, top bar, hash routing, nav and slot composition, theme","directories":{},"_nodeVersion":"24.11.1","dependencies":{"clsx":"^2.1.1","radix-ui":"^1.6.0","lucide-react":"^1.16.0","tailwind-merge":"^3.6.0","class-variance-authority":"^0.7.1","@tauri-apps/plugin-opener":"^2.5.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0","react-router":"^7.6.0","@tauri-apps/api":"^2.11.0","@picoframe/plugin-sdk":"*"},"_npmOperationalInternal":{"tmp":"tmp/frame_0.0.17_1783168547795_0.4269208529594315","host":"s3://npm-registry-packages-npm-production"}},"0.0.18":{"name":"@picoframe/frame","version":"0.0.18","license":"MIT","_id":"@picoframe/frame@0.0.18","maintainers":[{"name":"tomjn","email":"npm@tomjn.com"}],"homepage":"https://github.com/tomjn/picoframe#readme","bugs":{"url":"https://github.com/tomjn/picoframe/issues"},"dist":{"shasum":"2d9c0fde1e73389f69009d2395f2943e7345ad60","tarball":"https://registry.npmjs.org/@picoframe/frame/-/frame-0.0.18.tgz","fileCount":77,"integrity":"sha512-TknuIfoJc0Svy/DHnQkkXWaWF0VbAKgniBDqq/SPF5RrVJJp1bNze1KbjyM54UZtSuaT20dHr6akH0XFQQjRrA==","signatures":[{"sig":"MEUCIQCJ9+7mk0biDNmUXac8tJSoV3wKqnWoo7LXCbNJUovSVwIgXVXRjQKYT/SZaylKSnZBLo5luYs5naEmWKa5OUtenFc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":97769},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./theme.css":"./src/theme.css"},"gitHead":"3413ede3dd7fb21a4c014dacf9b24a8cfe197245","scripts":{"build":"tsc -p tsconfig.build.json"},"_npmUser":{"name":"tomjn","email":"npm@tomjn.com"},"repository":{"url":"git+https://github.com/tomjn/picoframe.git","type":"git","directory":"packages/frame"},"_npmVersion":"11.6.2","description":"Reusable Tauri v2 app-frame React shell: sidebar, top bar, hash routing, nav and slot composition, theme","directories":{},"_nodeVersion":"24.11.1","dependencies":{"clsx":"^2.1.1","radix-ui":"^1.6.0","lucide-react":"^1.16.0","tailwind-merge":"^3.6.0","class-variance-authority":"^0.7.1","@tauri-apps/plugin-opener":"^2.5.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0","react-router":"^7.6.0","@tauri-apps/api":"^2.11.0","@picoframe/plugin-sdk":"*"},"_npmOperationalInternal":{"tmp":"tmp/frame_0.0.18_1783283875855_0.4963694553375755","host":"s3://npm-registry-packages-npm-production"}},"0.1.0":{"name":"@picoframe/frame","version":"0.1.0","license":"MIT","_id":"@picoframe/frame@0.1.0","maintainers":[{"name":"tomjn","email":"npm@tomjn.com"}],"homepage":"https://github.com/tomjn/picoframe#readme","bugs":{"url":"https://github.com/tomjn/picoframe/issues"},"dist":{"shasum":"7c6287ef4f97b59ee00fc674d10d5cabafcba5b3","tarball":"https://registry.npmjs.org/@picoframe/frame/-/frame-0.1.0.tgz","fileCount":83,"integrity":"sha512-6VZDXcefZPOaqMBscgzNQptJs4q9Ir+Vd4pcnvnxFFopEeQ4v675tq26iWsnxPZLTggDiy/v4/cq1PaICxvapQ==","signatures":[{"sig":"MEYCIQDZskBnNksiWHTQI8iIactUlHwU0RfD67ymUmDOxoC9XwIhAP9vM8lClghkHMXemfoy607kJMcyPdKMaspQXa1eSeWk","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":134261},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./theme.css":"./src/theme.css"},"gitHead":"b93cdabeb3766b941da228c416e2cf6ffb0fed62","scripts":{"build":"tsc -p tsconfig.build.json"},"_npmUser":{"name":"tomjn","email":"npm@tomjn.com"},"repository":{"url":"git+https://github.com/tomjn/picoframe.git","type":"git","directory":"packages/frame"},"_npmVersion":"11.6.2","description":"Reusable Tauri v2 app-frame React shell: sidebar, top bar, hash routing, nav and slot composition, theme","directories":{},"_nodeVersion":"24.11.1","dependencies":{"clsx":"^2.1.1","radix-ui":"^1.6.0","lucide-react":"^1.16.0","tailwind-merge":"^3.6.0","class-variance-authority":"^0.7.1","@tauri-apps/plugin-opener":"^2.5.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0","react-router":"^7.6.0","@tauri-apps/api":"^2.11.0","@picoframe/plugin-sdk":"*"},"_npmOperationalInternal":{"tmp":"tmp/frame_0.1.0_1783778973456_0.09702797318070555","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@picoframe/frame","version":"0.2.0","license":"MIT","_id":"@picoframe/frame@0.2.0","maintainers":[{"name":"tomjn","email":"npm@tomjn.com"}],"homepage":"https://github.com/tomjn/picoframe#readme","bugs":{"url":"https://github.com/tomjn/picoframe/issues"},"dist":{"shasum":"f62114f7ab4a3db6cab403ffd0501442221be015","tarball":"https://registry.npmjs.org/@picoframe/frame/-/frame-0.2.0.tgz","fileCount":83,"integrity":"sha512-Ovs934KpgtYNE4EtVKAqr0XGW7MQuARb+bWswFZyqpHI3li0ynhgU4rkJs6YXKsD2ajQRt33xqCLTO3N7D8xNQ==","signatures":[{"sig":"MEUCIE/+xzUzsanEWFC+9trMs+RYRoi1aH2PP4doSnY9i4g1AiEAyq6kN+LIhYWfYF7gZzLQlbOfID7mMk0/slWUIf7SaXQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":142067},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./theme.css":"./src/theme.css"},"gitHead":"ce4c4dd97487e38d4be530d41736d47fdf3508e2","scripts":{"build":"tsc -p tsconfig.build.json"},"_npmUser":{"name":"tomjn","email":"npm@tomjn.com"},"repository":{"url":"git+https://github.com/tomjn/picoframe.git","type":"git","directory":"packages/frame"},"_npmVersion":"11.6.2","description":"Reusable Tauri v2 app-frame React shell: sidebar, top bar, hash routing, nav and slot composition, theme","directories":{},"_nodeVersion":"24.11.1","dependencies":{"clsx":"^2.1.1","radix-ui":"^1.6.0","lucide-react":"^1.16.0","tailwind-merge":"^3.6.0","class-variance-authority":"^0.7.1","@tauri-apps/plugin-opener":"^2.5.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0","react-router":"^7.6.0","@tauri-apps/api":"^2.11.0","@picoframe/plugin-sdk":"*"},"_npmOperationalInternal":{"tmp":"tmp/frame_0.2.0_1783942349418_0.6826573442322006","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@picoframe/frame","version":"0.5.0","license":"MIT","_id":"@picoframe/frame@0.5.0","maintainers":[{"name":"tomjn","email":"npm@tomjn.com"}],"homepage":"https://github.com/tomjn/picoframe#readme","bugs":{"url":"https://github.com/tomjn/picoframe/issues"},"dist":{"shasum":"95e9d1ff50a7b874e454975eee38742d0fd0764b","tarball":"https://registry.npmjs.org/@picoframe/frame/-/frame-0.5.0.tgz","fileCount":91,"integrity":"sha512-LFC911yy+YZlgfv0geGmV9E8kEw5/ZqR6KUfpCsEnBVHPKswY4c1vWBkc3uw1uygKrK2Bs3ZHASxrzJorqFe1g==","signatures":[{"sig":"MEQCIFLvoD731i2c9+giei8oWqMfT2DMonUbI9DybXxlnSqPAiBLwdlFtSqZdKu8LNOzbKBisItLfQfP1mgTUxa7eYuycQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":167504},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./theme.css":"./src/theme.css"},"gitHead":"b467894907cc49087062241e424c6cab31a8ab56","scripts":{"build":"tsc -p tsconfig.build.json"},"_npmUser":{"name":"tomjn","email":"npm@tomjn.com"},"repository":{"url":"git+https://github.com/tomjn/picoframe.git","type":"git","directory":"packages/frame"},"_npmVersion":"11.6.2","description":"Reusable Tauri v2 app-frame React shell: sidebar, top bar, hash routing, nav and slot composition, theme","directories":{},"_nodeVersion":"24.11.1","dependencies":{"clsx":"^2.1.1","sonner":"^2.0.0","radix-ui":"^1.6.0","lucide-react":"^1.16.0","tailwind-merge":"^3.6.0","class-variance-authority":"^0.7.1","@tauri-apps/plugin-opener":"^2.5.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0","react-router":"^7.6.0","@tauri-apps/api":"^2.11.0","@picoframe/plugin-sdk":"*"},"_npmOperationalInternal":{"tmp":"tmp/frame_0.5.0_1784032513448_0.4025008614651957","host":"s3://npm-registry-packages-npm-production"}},"0.5.1":{"name":"@picoframe/frame","version":"0.5.1","license":"MIT","_id":"@picoframe/frame@0.5.1","maintainers":[{"name":"tomjn","email":"npm@tomjn.com"}],"homepage":"https://github.com/tomjn/picoframe#readme","bugs":{"url":"https://github.com/tomjn/picoframe/issues"},"dist":{"shasum":"afe246626a78dcb61e186745887caa6f964bb022","tarball":"https://registry.npmjs.org/@picoframe/frame/-/frame-0.5.1.tgz","fileCount":95,"integrity":"sha512-h6sF+nx24FHAQkesxrqU+Qe3cH6eP3CNH99WxG3eSfEBdQHiUCgqfeAOAX5NxZqpSuF7G4buC0BIPwD0fSafMg==","signatures":[{"sig":"MEYCIQCUK+AXncakdxB8K488LrpUcqMNJJhc4U2F8pYCwwW+VgIhAPw5fO79XxUCnEitbocbuMszLxt6gvPqN4vsvDKMOmmF","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":176200},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./theme.css":"./src/theme.css"},"gitHead":"edf704f9e21b9a54a1e440041991c9412a579d51","scripts":{"build":"tsc -p tsconfig.build.json"},"_npmUser":{"name":"tomjn","email":"npm@tomjn.com"},"repository":{"url":"git+https://github.com/tomjn/picoframe.git","type":"git","directory":"packages/frame"},"_npmVersion":"11.6.2","description":"Reusable Tauri v2 app-frame React shell: sidebar, top bar, hash routing, nav and slot composition, theme","directories":{},"_nodeVersion":"24.11.1","dependencies":{"clsx":"^2.1.1","sonner":"^2.0.0","radix-ui":"^1.6.0","lucide-react":"^1.16.0","tailwind-merge":"^3.6.0","class-variance-authority":"^0.7.1","@tauri-apps/plugin-opener":"^2.5.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0","react-router":"^7.6.0","@tauri-apps/api":"^2.11.0","@picoframe/plugin-sdk":"*"},"_npmOperationalInternal":{"tmp":"tmp/frame_0.5.1_1784071692103_0.9657146233355745","host":"s3://npm-registry-packages-npm-production"}},"0.5.2":{"name":"@picoframe/frame","version":"0.5.2","license":"MIT","_id":"@picoframe/frame@0.5.2","maintainers":[{"name":"tomjn","email":"npm@tomjn.com"}],"homepage":"https://github.com/tomjn/picoframe#readme","bugs":{"url":"https://github.com/tomjn/picoframe/issues"},"dist":{"shasum":"962c5b5cdbe19d76285cf74a6476b137492c5b12","tarball":"https://registry.npmjs.org/@picoframe/frame/-/frame-0.5.2.tgz","fileCount":95,"integrity":"sha512-ud4xmIEcD8ZY9pNX+DFL6gZy35SU7H1MFgqZCdaR2o7esLuw7X8yEVabTX0pVkFmpz/vcp7hNQQP1HY7o4CElQ==","signatures":[{"sig":"MEQCIGh4aq7YaaxNJDm7pvXhnmZ5a7ffDVmhi7pBdhB231yZAiA3zXS5zhHUV/5JeD51eEe8DR2UU1h/TWVArhO3kq6cdg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":176460},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./theme.css":"./src/theme.css"},"gitHead":"332eca604a7141e4ae21646a5a7282dc339ae497","scripts":{"build":"tsc -p tsconfig.build.json"},"_npmUser":{"name":"tomjn","email":"npm@tomjn.com"},"repository":{"url":"git+https://github.com/tomjn/picoframe.git","type":"git","directory":"packages/frame"},"_npmVersion":"11.6.2","description":"Reusable Tauri v2 app-frame React shell: sidebar, top bar, hash routing, nav and slot composition, theme","directories":{},"_nodeVersion":"24.11.1","dependencies":{"clsx":"^2.1.1","sonner":"^2.0.0","radix-ui":"^1.6.0","lucide-react":"^1.16.0","tailwind-merge":"^3.6.0","class-variance-authority":"^0.7.1","@tauri-apps/plugin-opener":"^2.5.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0","react-router":"^7.6.0","@tauri-apps/api":"^2.11.0","@picoframe/plugin-sdk":"*"},"_npmOperationalInternal":{"tmp":"tmp/frame_0.5.2_1784144040514_0.5597415388981943","host":"s3://npm-registry-packages-npm-production"}},"0.5.3":{"name":"@picoframe/frame","version":"0.5.3","license":"MIT","_id":"@picoframe/frame@0.5.3","maintainers":[{"name":"tomjn","email":"npm@tomjn.com"}],"homepage":"https://github.com/tomjn/picoframe#readme","bugs":{"url":"https://github.com/tomjn/picoframe/issues"},"dist":{"shasum":"5de2585ce913cb25c2b1e333d61721f5c2c261cb","tarball":"https://registry.npmjs.org/@picoframe/frame/-/frame-0.5.3.tgz","fileCount":95,"integrity":"sha512-5/oC0f62CTPVHsWta90fGqjx8j9Srj9gbqaD0OvkkqjRi+G1kaFcpHxBNmbu73cKyI7FPgF0mtDPmsxP1AJ1Yg==","signatures":[{"sig":"MEYCIQD6r11Vn6wZwLdRqut4hXiqQ8kU0ao41CCWlPWzdW/juQIhAM5rG7GIbDmwmuFiDENgfv4/nI8+Rf85c9uozuwifAEF","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":176460},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./theme.css":"./src/theme.css"},"gitHead":"297570fa6afd53b46839b7138efc462bae7be340","scripts":{"build":"tsc -p tsconfig.build.json"},"_npmUser":{"name":"tomjn","email":"npm@tomjn.com"},"repository":{"url":"git+https://github.com/tomjn/picoframe.git","type":"git","directory":"packages/frame"},"_npmVersion":"11.6.2","description":"Reusable Tauri v2 app-frame React shell: sidebar, top bar, hash routing, nav and slot composition, theme","directories":{},"_nodeVersion":"24.11.1","dependencies":{"clsx":"^2.1.1","sonner":"^2.0.0","radix-ui":"^1.6.7","lucide-react":"^1.16.0","tailwind-merge":"^3.6.0","class-variance-authority":"^0.7.1","@tauri-apps/plugin-opener":"^2.5.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0","react-router":"^7.6.0","@tauri-apps/api":"^2.11.0","@picoframe/plugin-sdk":"*"},"_npmOperationalInternal":{"tmp":"tmp/frame_0.5.3_1785001827087_0.5012698751787672","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@picoframe/frame","version":"0.6.0","license":"MIT","_id":"@picoframe/frame@0.6.0","maintainers":[{"name":"tomjn","email":"npm@tomjn.com"}],"homepage":"https://github.com/tomjn/picoframe#readme","bugs":{"url":"https://github.com/tomjn/picoframe/issues"},"dist":{"shasum":"91edfff61e122f42a90ab85a84d8b23a192615b1","tarball":"https://registry.npmjs.org/@picoframe/frame/-/frame-0.6.0.tgz","fileCount":99,"integrity":"sha512-99F+efsTXvOxUs3+fRl27DY3yF2JT28En5sR7wTVd/BPp5lPMLzk7mhwqzu9FFjhlPqqzWexS50PJgVU9c2XFg==","signatures":[{"sig":"MEYCIQDheD98xIkkkTVjsdxclcgYO1m0WCuUh3bvjUIk2t2nfwIhAMRqjKkEfzYvAJCosReCFyHUv4++arTw2zQsnYRgisGV","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":193336},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./theme.css":"./src/theme.css"},"gitHead":"9ca257b4b6f3027a1a58176bc8ba0dcbda37fc96","scripts":{"build":"tsc -p tsconfig.build.json"},"_npmUser":{"name":"tomjn","email":"npm@tomjn.com"},"repository":{"url":"git+https://github.com/tomjn/picoframe.git","type":"git","directory":"packages/frame"},"_npmVersion":"11.6.2","description":"Reusable Tauri v2 app-frame React shell: sidebar, top bar, hash routing, nav and slot composition, theme","directories":{},"_nodeVersion":"24.11.1","dependencies":{"clsx":"^2.1.1","sonner":"^2.0.0","radix-ui":"^1.6.7","lucide-react":"^1.16.0","tailwind-merge":"^3.6.0","class-variance-authority":"^0.7.1","@tauri-apps/plugin-opener":"^2.5.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0","react-router":"^7.6.0","@tauri-apps/api":"^2.11.0","@picoframe/plugin-sdk":"*"},"_npmOperationalInternal":{"tmp":"tmp/frame_0.6.0_1785100965918_0.22651474930114612","host":"s3://npm-registry-packages-npm-production"}},"0.6.1":{"name":"@picoframe/frame","version":"0.6.1","license":"MIT","_id":"@picoframe/frame@0.6.1","maintainers":[{"name":"tomjn","email":"npm@tomjn.com"}],"homepage":"https://github.com/tomjn/picoframe#readme","bugs":{"url":"https://github.com/tomjn/picoframe/issues"},"dist":{"shasum":"293ac0720b1f03ebc251795dffbe0fa392ddc911","tarball":"https://registry.npmjs.org/@picoframe/frame/-/frame-0.6.1.tgz","fileCount":99,"integrity":"sha512-AK2cLSkc//REt5S674+gQN6PhlFfgVgpAtrrvnDwB7RYIyr8SHFqqfSQc7LdBpTyBMe2Ex5qRcJmFL4ikfRcHA==","signatures":[{"sig":"MEQCIG8k+3BGDLI+vOnuMIAgR3vb3ENfgAkzoEEwLk+Mj2EEAiASy2MPVzwBHPcuKa9ZKxEMvm/fcgL0PRotzUOoVaLMOA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":194905},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./theme.css":"./src/theme.css"},"gitHead":"0709f3b870060857895b08f4af7662d6166ffd58","scripts":{"build":"tsc -p tsconfig.build.json"},"_npmUser":{"name":"tomjn","email":"npm@tomjn.com"},"repository":{"url":"git+https://github.com/tomjn/picoframe.git","type":"git","directory":"packages/frame"},"_npmVersion":"11.6.2","description":"Reusable Tauri v2 app-frame React shell: sidebar, top bar, hash routing, nav and slot composition, theme","directories":{},"_nodeVersion":"24.11.1","dependencies":{"clsx":"^2.1.1","sonner":"^2.0.0","radix-ui":"^1.6.7","lucide-react":"^1.16.0","tailwind-merge":"^3.6.0","class-variance-authority":"^0.7.1","@tauri-apps/plugin-opener":"^2.5.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0","react-router":"^7.6.0","@tauri-apps/api":"^2.11.0","@picoframe/plugin-sdk":"*"},"_npmOperationalInternal":{"tmp":"tmp/frame_0.6.1_1786986190648_0.5646078147399638","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"@picoframe/frame","version":"0.7.0","license":"MIT","_id":"@picoframe/frame@0.7.0","maintainers":[{"name":"tomjn","email":"npm@tomjn.com"}],"homepage":"https://github.com/tomjn/picoframe#readme","bugs":{"url":"https://github.com/tomjn/picoframe/issues"},"dist":{"shasum":"062b5af7d131a8a12ce7c28dcaba12e59177dd10","tarball":"https://registry.npmjs.org/@picoframe/frame/-/frame-0.7.0.tgz","fileCount":105,"integrity":"sha512-9/aofgJFu30GsRZPhKp07fOnxRnYQjrfyn4XQ0qqKcdqvHGC7Ga0zKLG8DwfrvsrmzWsp8x3zk2vrJAjv8PA0A==","signatures":[{"sig":"MEYCIQD4ChmcEDTzfUsN1z6fSvQIbNxQ1NIQjrUISn+80iPjKgIhAJKfSJXihysOv7Ko4Vz3+CBxnJX3cQhcwCxx7fDz9BN1","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":209453},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./theme.css":"./src/theme.css"},"gitHead":"22d7716a5308e48fdc74e5b473c5d6903a84a142","scripts":{"build":"tsc -p tsconfig.build.json"},"_npmUser":{"name":"tomjn","email":"npm@tomjn.com"},"repository":{"url":"git+https://github.com/tomjn/picoframe.git","type":"git","directory":"packages/frame"},"_npmVersion":"11.6.2","description":"Reusable Tauri v2 app-frame React shell: sidebar, top bar, hash routing, nav and slot composition, theme","directories":{},"_nodeVersion":"24.11.1","dependencies":{"clsx":"^2.1.1","sonner":"^2.0.0","radix-ui":"^1.6.7","lucide-react":"^1.16.0","tailwind-merge":"^3.6.0","class-variance-authority":"^0.7.1","@tauri-apps/plugin-opener":"^2.5.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0","react-router":"^7.6.0","@tauri-apps/api":"^2.11.0","@picoframe/plugin-sdk":"*"},"_npmOperationalInternal":{"tmp":"tmp/frame_0.7.0_1787261321160_0.15623824444418277","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"@picoframe/frame","version":"0.8.0","license":"MIT","_id":"@picoframe/frame@0.8.0","maintainers":[{"name":"tomjn","email":"npm@tomjn.com"}],"homepage":"https://github.com/tomjn/picoframe#readme","bugs":{"url":"https://github.com/tomjn/picoframe/issues"},"dist":{"shasum":"f6ea6659fd7b251d17f0b3376373289199a471d3","tarball":"https://registry.npmjs.org/@picoframe/frame/-/frame-0.8.0.tgz","fileCount":105,"integrity":"sha512-yblA0nlNeKFPi4BXsZw9gHwuUlm59/tS6GncVk/doo+OfvMBvXl/DODibbrGg5GPljo+Rl3Vum6AaPF9iyfZsA==","signatures":[{"sig":"MEQCIFp7dxoqd9gA/EE7qU/lRdjKyVjf7o20/uPYU5gSJpPXAiBTihZsKNAu077SypAHnrQDv/mWYovMM/w03CcDHSU6ag==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":213368},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./theme.css":"./src/theme.css"},"gitHead":"4e98e79e30af734a0c7ebcc1cf8d422c72072b8a","scripts":{"build":"tsc -p tsconfig.build.json"},"_npmUser":{"name":"tomjn","email":"npm@tomjn.com"},"repository":{"url":"git+https://github.com/tomjn/picoframe.git","type":"git","directory":"packages/frame"},"_npmVersion":"11.6.2","description":"Reusable Tauri v2 app-frame React shell: sidebar, top bar, hash routing, nav and slot composition, theme","directories":{},"_nodeVersion":"24.11.1","dependencies":{"clsx":"^2.1.1","sonner":"^2.0.0","radix-ui":"^1.6.7","lucide-react":"^1.16.0","tailwind-merge":"^3.6.0","class-variance-authority":"^0.7.1","@tauri-apps/plugin-opener":"^2.5.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0","react-router":"^7.6.0","@tauri-apps/api":"^2.11.0","@picoframe/plugin-sdk":"*"},"_npmOperationalInternal":{"tmp":"tmp/frame_0.8.0_1788341238813_0.9321730522099423","host":"s3://npm-registry-packages-npm-production"}},"0.9.0":{"name":"@picoframe/frame","version":"0.9.0","license":"MIT","_id":"@picoframe/frame@0.9.0","maintainers":[{"name":"tomjn","email":"npm@tomjn.com"}],"homepage":"https://github.com/tomjn/picoframe#readme","bugs":{"url":"https://github.com/tomjn/picoframe/issues"},"dist":{"shasum":"756ed2be1d11a54d0720b06c83b3ec5816b1ae6a","tarball":"https://registry.npmjs.org/@picoframe/frame/-/frame-0.9.0.tgz","fileCount":105,"integrity":"sha512-9pq6QrSJhZuy06/6zaN2GqDTqO+vIZGKdc2okBFz7iqGcEDw0ON+Bvleauxc7v4dIxrqBYfI3g2M9UJksDrNfA==","signatures":[{"sig":"MEUCIQDO0pVuxsp1SXxMTlfydPss68W7EA2miH8YuH3cUgNkFgIgdBUJa4wHzcVbQ+rhHTt5a6RxdeDPDRMvZ8Ak71vuHO8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":213369},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./theme.css":"./src/theme.css"},"gitHead":"2cd0c63d317f5bb14c60bccad323f87078f01966","scripts":{"build":"tsc -p tsconfig.build.json"},"_npmUser":{"name":"tomjn","email":"npm@tomjn.com"},"repository":{"url":"git+https://github.com/tomjn/picoframe.git","type":"git","directory":"packages/frame"},"_npmVersion":"11.6.2","description":"Reusable Tauri v2 app-frame React shell: sidebar, top bar, hash routing, nav and slot composition, theme","directories":{},"_nodeVersion":"24.11.1","dependencies":{"clsx":"^2.1.1","sonner":"^2.0.0","radix-ui":"^1.6.7","lucide-react":"^1.16.0","tailwind-merge":"^3.6.0","class-variance-authority":"^0.7.1","@tauri-apps/plugin-opener":"^2.5.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0","react-router":"^7.18.2","@tauri-apps/api":"^2.11.0","@picoframe/plugin-sdk":"*"},"_npmOperationalInternal":{"tmp":"tmp/frame_0.9.0_1788523332047_0.5377781026844073","host":"s3://npm-registry-packages-npm-production"}},"0.9.1":{"name":"@picoframe/frame","version":"0.9.1","description":"Reusable Tauri v2 app-frame React shell: sidebar, top bar, hash routing, nav and slot composition, theme","license":"MIT","repository":{"type":"git","url":"git+https://github.com/tomjn/picoframe.git","directory":"packages/frame"},"type":"module","main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./theme.css":"./src/theme.css"},"publishConfig":{"access":"public"},"scripts":{"build":"tsc -p tsconfig.build.json"},"dependencies":{"@tauri-apps/plugin-opener":"^2.5.0","class-variance-authority":"^0.7.1","clsx":"^2.1.1","radix-ui":"^1.6.7","sonner":"^2.0.0","tailwind-merge":"^3.6.0","lucide-react":"^1.16.0"},"peerDependencies":{"@picoframe/plugin-sdk":"*","@tauri-apps/api":"^2.11.0","react":"^19.0.0","react-dom":"^19.0.0","react-router":"^7.18.2"},"gitHead":"f8e0d448c6103d76036f1996706c4a9455e213bc","_id":"@picoframe/frame@0.9.1","bugs":{"url":"https://github.com/tomjn/picoframe/issues"},"homepage":"https://github.com/tomjn/picoframe#readme","_nodeVersion":"24.11.1","_npmVersion":"11.19.1","dist":{"integrity":"sha512-Oiops0NsWFn3P7cNAACEAAvnhlc0/fO9rfiZ7TMU2u6T5v9rqSNfBg9gVoqBxqUjqpnZKSlnY08KpwXFOFRXpg==","shasum":"859baa5ece549ba5ce74b23616894743c998d21b","tarball":"https://registry.npmjs.org/@picoframe/frame/-/frame-0.9.1.tgz","fileCount":107,"unpackedSize":220334,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIG5+gXVGcxX/DSjrZkJLCD0JNsY3LZV+k9dHaUq7Q29YAiBheEEugLc1E7oeqefKtPFbI6vMvGZWjPVZ6ichVG/MFw=="}]},"_npmUser":{"name":"tomjn","email":"npm@tomjn.com"},"directories":{},"maintainers":[{"name":"tomjn","email":"npm@tomjn.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/frame_0.9.1_1788885408616_0.6379976820679407"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-23T18:14:26.376Z","modified":"2026-09-08T16:36:49.053Z","0.0.1":"2026-06-23T18:14:26.677Z","0.0.2":"2026-06-23T21:06:14.688Z","0.0.3":"2026-06-23T21:34:58.537Z","0.0.4":"2026-06-23T22:37:32.658Z","0.0.5":"2026-06-24T09:26:33.244Z","0.0.6":"2026-06-24T11:14:13.125Z","0.0.7":"2026-06-24T11:46:18.118Z","0.0.8":"2026-06-25T20:22:13.936Z","0.0.9":"2026-06-26T17:42:38.983Z","0.0.10":"2026-07-01T19:39:54.734Z","0.0.11":"2026-07-03T11:58:58.403Z","0.0.12":"2026-07-03T12:28:55.743Z","0.0.13":"2026-07-03T13:15:43.318Z","0.0.14":"2026-07-03T22:13:02.070Z","0.0.15":"2026-07-03T22:28:18.608Z","0.0.16":"2026-07-04T11:49:43.930Z","0.0.17":"2026-07-04T12:35:47.972Z","0.0.18":"2026-07-05T20:37:55.998Z","0.1.0":"2026-07-11T14:09:33.576Z","0.2.0":"2026-07-13T11:32:29.546Z","0.5.0":"2026-07-14T12:35:13.642Z","0.5.1":"2026-07-14T23:28:12.237Z","0.5.2":"2026-07-15T19:34:00.662Z","0.5.3":"2026-07-25T17:50:27.232Z","0.6.0":"2026-07-26T21:22:46.068Z","0.6.1":"2026-08-17T17:03:10.871Z","0.7.0":"2026-08-20T21:28:41.310Z","0.8.0":"2026-09-02T09:27:18.951Z","0.9.0":"2026-09-04T12:02:12.195Z","0.9.1":"2026-09-08T16:36:48.761Z"},"bugs":{"url":"https://github.com/tomjn/picoframe/issues"},"license":"MIT","homepage":"https://github.com/tomjn/picoframe#readme","repository":{"type":"git","url":"git+https://github.com/tomjn/picoframe.git","directory":"packages/frame"},"description":"Reusable Tauri v2 app-frame React shell: sidebar, top bar, hash routing, nav and slot composition, theme","maintainers":[{"name":"tomjn","email":"npm@tomjn.com"}],"readme":"# @picoframe/frame\n\nThe reusable **Tauri v2 app-frame** React shell: collapsible grouped sidebar, top bar,\nhash routing, forward/back navigation, slot composition, and theming. Apps are\nassembled by composing full-stack plugins into the frame.\n\n```bash\nnpm install @picoframe/frame\n```\n\n```tsx\nimport { AppFrame } from \"@picoframe/frame\";\nimport { plugins } from \"./app.plugins\";\n\ncreateRoot(root).render(<AppFrame plugins={plugins} title=\"My app\" />);\n```\n\n## What this package exports\n\n| Export | What it is |\n| --- | --- |\n| `AppFrame` | The application shell component |\n| `framePlugin` | Built-in plugin (home route launcher) |\n| `useFrame`, `useNavigationStack`, `useDrawer`, `useSidebarState`, `useHideSidebar` | Hooks |\n| `ThemeProvider`, `useTheme` | Theming |\n| `DrawerProvider`, `DrawerHost`, `Drawer` | Drawer building blocks, and the controlled form |\n| `Slot` | Named slot for plugin contributions |\n| `cn` | Class-name merge helper |\n| `Button`, `Input` | The **only** UI primitives shipped here (see below) |\n| `FramePlugin`, `NavGroup`, `NavItem`, `defineCommand`, … | Re-exported plugin-sdk contract |\n\n## UI components: frame vs. the registry\n\npicoframe has **two separate `@picoframe/` channels** — don't confuse them:\n\n| | `@picoframe/frame` (this package) | `@picoframe/registry` |\n| --- | --- | --- |\n| How you get it | `import { Button } from \"@picoframe/frame\"` | `npx shadcn@latest add @picoframe/select` |\n| Mechanism | compiled JS/`.d.ts` you import from npm | shadcn **source** registry — copies `.tsx` into your app |\n| UI components | **only `Button` and `Input`** | `select`, `input`, `textarea`, `label`, `checkbox`, `radio-group`, `switch`, `slider`, `form`, `dialog`, `tooltip`, `popover`, `collapsible`, … |\n\n`Button` and `Input` are exported here because **npm-published plugins** need\nimportable primitives (a plugin can't use the consumer app's copied-in registry\nfiles). Every other component is app-level and lives in the registry, where the app\nauthor owns the copied source. `Select`/`Checkbox`/`Textarea`/etc. will **never** be\nexports of this package — use `shadcn add @picoframe/<name>`. See\n[`../registry/README.md`](../registry/README.md) and the repo `AGENTS.md`.\n\n## Drawer\n\nOne frame-managed drawer, opened from anywhere via `useDrawer()`. `open()` replaces the current\ncontent; `close()` dismisses it. Esc and a backdrop click close it too.\n\n```tsx\nconst { open } = useDrawer();\nopen({ title: \"Details\", content: <Details /> });\n```\n\n`open()` options:\n\n| Option | Default | What it does |\n| --- | --- | --- |\n| `content` | — | The drawer body (required). |\n| `direction` | `\"right\"` | `\"left\"` / `\"right\"` side sheet, or `\"bottom\"` bottom sheet. |\n| `size` | `\"md\"` | `\"sm\"` / `\"md\"` / `\"lg\"` / `\"full\"` — a width (side) or height (bottom). |\n| `width` / `height` | — | Explicit CSS size overriding `size` for that axis. |\n| `container` | provider default → `document.body` | Portal target (see below). |\n| `onOpenAutoFocus` / `onCloseAutoFocus` | none | Take focus over as the drawer opens or closes (see Focus below). |\n| `title`, `description` | — | Accessible name/description; omit to keep them screen-reader-only. |\n\n### Container targeting\n\nBy default the drawer portals to `document.body` and covers the whole window (modal: scroll-locked,\nfocus-trapped). Pass a `container` — an `HTMLElement`, a `() => HTMLElement | null` (resolved lazily,\nfor targets that mount after the provider), or `null` — to portal into a bounded region instead. When\ncontained, the drawer switches to `absolute` positioning and a **non-modal** dialog, so its overlay is\nscoped to that element and the rest of the app (e.g. the sidebar) stays interactive.\n\nThe container must be `position: relative` (and typically `overflow: hidden`, so the panel and scrim\nrespect its rounded corners):\n\n```tsx\nopen({ direction: \"bottom\", size: \"lg\", container: () => panelRef.current, content: <Panel /> });\n```\n\nSet a **provider-level default** for every drawer via `<AppFrame drawer={{ container }} />`; a per-open\n`container` overrides it. See the demo's \"Drawer lab\" page for a worked example.\n\n### Controlled drawers, and drawers outside the frame\n\n`useDrawer()` takes a snapshot of `content` when you call `open()`, so it can't express content\nthat changes while the drawer is open. `<Drawer>` is the controlled form for that: async loading\nstates, an error and its retry, a multi-step form. It takes the same options as props, plus\n`open` / `onOpenChange`, and renders its `children` live.\n\n```tsx\n<Drawer open={open} onOpenChange={setOpen} title=\"Details\" size=\"lg\">\n  {loading ? <Spinner /> : <Details data={data} />}\n</Drawer>\n```\n\nIt owns its own dialog rather than the frame's single global one, so it needs no provider and\nseveral can coexist.\n\nFor the imperative API outside `AppFrame` (a secondary window, or an app adopting the frame a\npiece at a time), mount the building blocks yourself. `useDrawer()` then works anywhere under\nthe provider:\n\n```tsx\n<DrawerProvider container={panelRef.current}>\n  <App />\n  <DrawerHost />\n</DrawerProvider>\n```\n\n### Focus\n\nClosing a drawer hands focus back to whatever had it when the drawer opened, unless focus has\nsince moved somewhere outside the drawer, in which case it is left where the user put it.\n\nA drawer whose job is to send you somewhere needs focus to land on the thing it sent you to\ninstead. For a keyboard or screen reader user, that focus move is the navigation. Handle\n`onCloseAutoFocus`, call `preventDefault()` on the event, and focus what you like:\n\n```tsx\n<Drawer\n  open={open}\n  onOpenChange={setOpen}\n  onCloseAutoFocus={(event) => {\n    event.preventDefault();\n    document.getElementById(\"field-3\")?.focus();\n  }}\n>\n```\n\n`useDrawer().open()` takes the same option, and `onOpenAutoFocus` is its mirror for the way in,\nfor when the drawer's first focusable element is the wrong place to start. Both fire at the right\npoint in the drawer's lifecycle, so nothing has to be timed against the exit animation.\n\n### Native `<select>` caveat\n\nThe dialog focus trap fights the browser's native `<select>` popup, so a native `<select>` inside a\ndrawer misbehaves. Use the registry `select` component (`npx shadcn add @picoframe/select`) instead.\n\n## Toasts & sidecar progress\n\nThe frame mounts a theme-aware toast surface (`Toaster`, built on [sonner](https://sonner.emilkowal.ski/)) automatically, and re-exports `toast` so a plugin can raise notifications without importing sonner or a registry component:\n\n```tsx\nimport { toast } from \"@picoframe/frame\";\ntoast.success(\"Saved\");\n```\n\nFor plugins backed by a [sidecar](../../docs/sidecar.md) (a long-lived local server), `useSidecarProgress` drives a single self-updating toast from the sidecar's streamed progress:\n\n```tsx\nuseSidecarProgress(\"picoframe://sidecar/worker\"); // listens on \".../progress\"\n```\n\nThis progress primitive lives in the frame (not the registry) because npm-published plugins can only import from `@picoframe/frame`.\n\n## Settings footer badge\n\nThe frame's Settings footer link can carry an indicator so an app can surface \"something in\nsettings needs you\" (e.g. a stale integration credential). `useSettingsBadge()` reads and sets\nit from anywhere inside `<AppFrame>`:\n\n```tsx\nimport { useSettingsBadge } from \"@picoframe/frame\";\n\nconst { setBadge } = useSettingsBadge();\nuseEffect(() => setBadge(credentialStale), [credentialStale]);\n```\n\nThe badge value is `true` (an attention dot), a number (a count bubble), any other node\n(rendered in the bubble), or `false`/`null` (nothing). It's a single shared slot — one\napp-level owner, last writer wins.\n\n## Sidebar collapse\n\nThe frame owns the docked sidebar's collapse state. `useSidebarState()` exposes it so an\napp-level command surface (command palette, keyboard shortcut) can drive it:\n\n```tsx\nimport { useSidebarState } from \"@picoframe/frame\";\n\nconst { collapsed, setCollapsed, toggle } = useSidebarState();\n// wire `toggle` into a \"Toggle sidebar\" command\n```\n\nIt is backed by the frame's shared persistent store, so this hook and the top-bar toggle\nstay in sync live. This controls the *docked* rail; in `popover` layout mode the sidebar is\na separate overlay, so `toggle` has no visible effect there.\n\nThe `sidebar.collapseWhenNarrow` layout option adds a width-driven variant of the same\noverlay. Below the breakpoint the docked rail gives way to the top bar's menu button, which\nopens the nav fullscreen beneath the top bar. It leaves the persisted collapse state alone, so\nwidening the window restores the rail exactly as the user left it.\n\nThe breakpoint defaults to 640px. An app whose content needs more room can raise it:\n\n```tsx\n<AppFrame\n  layout={{\n    sidebar: {\n      collapseWhenNarrow: { default: true, userConfigurable: true },\n      narrowBreakpoint: 900,\n    },\n  }}\n/>\n```\n\n`narrowBreakpoint` is app-author config only, so it is not exposed as a user setting.\n\n## Hiding the sidebar on one page\n\nA page that wants the full width (a focus editor, a wizard, a canvas) calls `useHideSidebar()`.\nThe docked rail goes for as long as that component is mounted:\n\n```tsx\nimport { useHideSidebar } from \"@picoframe/frame\";\n\nfunction CanvasPage() {\n  useHideSidebar();\n  return <Canvas />;\n}\n```\n\nPass a boolean to make it conditional on page state, so a page can drop the sidebar only in\nits own full-screen mode:\n\n```tsx\nconst [zen, setZen] = useState(false);\nuseHideSidebar(zen);\n```\n\nThe nav is never lost. The frame falls back to its `popover` presentation, so the top bar's\nmenu button still opens the full nav as an overlay. Like `collapseWhenNarrow`, it leaves the\npersisted collapse state and width alone, so navigating away restores the rail exactly as the\nuser had it. Requests from several mounted components compose: the rail comes back when the\nlast one unmounts or turns its request off.\n\n## Forcing light or dark on one route\n\nMost routes should follow the user's theme setting. A page whose content is inherently one\nappearance is the exception: a photo or video canvas, a map, a print preview. Left alone, the\ntop bar and sidebar keep the user's setting and clash with it.\n\nSet `appearance` on the route and the whole window follows, chrome included:\n\n```tsx\nroutes: [\n  { path: \"gallery\", lazy: () => import(\"./Gallery\"), appearance: \"dark\" },\n];\n```\n\nIt is a route-level declaration rather than something the page does on mount, so the frame\nknows the appearance before the page renders and there is no flash of the old one on the way\nin. The user's stored setting is untouched, so the Appearance panel still shows what they\nchose and navigating away restores it. Nested routes inherit it, and the most specific\nmatching route wins, so a child can opt back out.\n\n## Theming\n\nThe frame's design tokens ship as `@picoframe/frame/theme.css` (mode / accent / base axes).\nSee [THEMING.md](THEMING.md) for the token model, a copy-pasteable **app-local token overlay**\nsnippet (semantic status/link tokens layered on without forking the theme), guidance on when an\noverlay should track the accent/base, and how to consume `theme.css` standalone before adopting\n`AppFrame`.\n\n## License\n\nMIT\n","readmeFilename":"README.md"}