{"_id":"@astra-camp/lens","_rev":"12-77eb5b49c212a9ed7840be704c49fd00","name":"@astra-camp/lens","dist-tags":{"latest":"0.1.11"},"versions":{"0.1.0":{"name":"@astra-camp/lens","version":"0.1.0","keywords":["react","webgl","3d","lens"],"author":{"name":"smkhalsa"},"license":"ISC","_id":"@astra-camp/lens@0.1.0","maintainers":[{"name":"smkhalsa","email":"smkhalsa@gmail.com"}],"homepage":"https://github.com/astra-camp/lens#readme","bugs":{"url":"https://github.com/astra-camp/lens/issues"},"dist":{"shasum":"68be1b21d43424b30ee326bca3c570ebb68249c0","tarball":"https://registry.npmjs.org/@astra-camp/lens/-/lens-0.1.0.tgz","fileCount":36,"integrity":"sha512-eJ9Z0SR12th6OMaqF2Zc0E3XDlvcIILhwfDpFsAf6KijK+8QfF1si0q1SSbRE1QkJ2HYum0WzlSQKgY8jHqMpQ==","signatures":[{"sig":"MEUCIQCkciq/XDpXbU7l7cXTzanPP/lF8R3c4iEGQFQ5txeNVgIgWCXC1F3xGnrFtPPO8rClH6L2ZoOE2w8yKrwzSXWP9hQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2464986},"main":"dist/index.cjs.js","types":"dist/index.d.ts","module":"dist/index.esm.js","browser":"dist/index.umd.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.esm.js","default":"./dist/index.umd.js","require":"./dist/index.cjs.js"},"./package.json":"./package.json"},"gitHead":"e3426aecdfcb2954b3d73863adf31ad9e3081560","private":false,"scripts":{"dev":"vite","lint":"eslint . --ext .ts,.tsx","size":"size-limit","test":"vitest","build":"vite build","prepack":"npm run build","release":"semantic-release","storybook":"storybook dev -p 6006","build-storybook":"storybook build"},"_npmUser":{"name":"smkhalsa","actor":{"name":"smkhalsa","type":"user","email":"smkhalsa@gmail.com"},"email":"smkhalsa@gmail.com"},"repository":{"url":"git+https://github.com/astra-camp/lens.git","type":"git"},"size-limit":[{"path":"dist/index.esm.js","limit":"40 KB"},{"path":"dist/index.umd.js","limit":"60 KB"}],"_npmVersion":"10.9.0","description":"A modern, plugin-based WebGL rendering engine built with TypeScript and React.","directories":{},"sideEffects":false,"_nodeVersion":"23.3.0","dependencies":{"regl":"^2.1.1","gl-matrix":"^3.4.3"},"eslintConfig":{"extends":["plugin:storybook/recommended"]},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.3.5","react":"^19.1.0","eslint":"^9.27.0","vitest":"^3.1.4","storybook":"^8.6.14","playwright":"^1.52.0","prop-types":"^15.8.1","size-limit":"^11.2.0","@types/react":"^19.1.5","@storybook/test":"^8.6.14","@vitest/browser":"3.1.4","vite-plugin-dts":"^4.5.4","@storybook/react":"^8.6.14","@storybook/blocks":"^8.6.14","@vitest/coverage-v8":"3.1.4","@vitejs/plugin-react":"^4.4.1","@storybook/addon-docs":"^8.6.14","@storybook/react-vite":"^8.6.14","eslint-plugin-storybook":"^0.12.0","@chromatic-com/storybook":"^3","@storybook/addon-essentials":"^8.6.14","@storybook/addon-onboarding":"^8.6.14","@size-limit/preset-small-lib":"^11.2.0","@storybook/addon-interactions":"^8.6.14","@storybook/experimental-addon-test":"^8.6.14"},"peerDependencies":{"react":">=17 <21","react-dom":">=17 <21"},"_npmOperationalInternal":{"tmp":"tmp/lens_0.1.0_1751406312229_0.7489165168145977","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@astra-camp/lens","version":"0.1.1","keywords":["react","webgl","3d","lens"],"author":{"name":"smkhalsa"},"license":"ISC","_id":"@astra-camp/lens@0.1.1","maintainers":[{"name":"smkhalsa","email":"smkhalsa@gmail.com"}],"homepage":"https://github.com/astra-camp/lens#readme","bugs":{"url":"https://github.com/astra-camp/lens/issues"},"dist":{"shasum":"e8d638eaa80b5165bd6792e8d0694cb8de9a37fe","tarball":"https://registry.npmjs.org/@astra-camp/lens/-/lens-0.1.1.tgz","fileCount":36,"integrity":"sha512-VCBEgSz8SVoUTGrX+yn7qZCspPORyu03B2vGqOagEbAYUcDaH83ATCi1tjqdgi3nqkYSqHT3MIQMDLGAUbIe/Q==","signatures":[{"sig":"MEUCIQCnAoaY3tGnQVXSw49Bhhd4DasyUzjC0//1KMU3Q7PWGAIgS+gPBv1SIoQfzjyCF+t5RIG0+j1RutAdKKr9Vn3lDl8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2464308},"main":"dist/index.cjs.js","types":"dist/index.d.ts","module":"dist/index.esm.js","browser":"dist/index.umd.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.esm.js","default":"./dist/index.umd.js","require":"./dist/index.cjs.js"},"./package.json":"./package.json"},"gitHead":"24252c3cf4edde836073954af69e3c78ac8ff1dd","private":false,"scripts":{"dev":"vite","lint":"eslint . --ext .ts,.tsx","size":"size-limit","test":"vitest","build":"vite build","prepack":"npm run build","release":"semantic-release","storybook":"storybook dev -p 6006","build-storybook":"storybook build"},"_npmUser":{"name":"smkhalsa","actor":{"name":"smkhalsa","type":"user","email":"smkhalsa@gmail.com"},"email":"smkhalsa@gmail.com"},"repository":{"url":"git+https://github.com/astra-camp/lens.git","type":"git"},"size-limit":[{"path":"dist/index.esm.js","limit":"40 KB"},{"path":"dist/index.umd.js","limit":"60 KB"}],"_npmVersion":"10.9.0","description":"A modern, plugin-based WebGL rendering engine built with TypeScript and React.","directories":{},"sideEffects":false,"_nodeVersion":"23.3.0","dependencies":{"regl":"^2.1.1","gl-matrix":"^3.4.3"},"eslintConfig":{"extends":["plugin:storybook/recommended"]},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.3.5","react":"^19.1.0","eslint":"^9.27.0","vitest":"^3.1.4","storybook":"^8.6.14","playwright":"^1.52.0","prop-types":"^15.8.1","size-limit":"^11.2.0","@types/react":"^19.1.5","@storybook/test":"^8.6.14","@vitest/browser":"3.1.4","vite-plugin-dts":"^4.5.4","@storybook/react":"^8.6.14","@storybook/blocks":"^8.6.14","@vitest/coverage-v8":"3.1.4","@vitejs/plugin-react":"^4.4.1","@storybook/addon-docs":"^8.6.14","@storybook/react-vite":"^8.6.14","eslint-plugin-storybook":"^0.12.0","@chromatic-com/storybook":"^3","@storybook/addon-essentials":"^8.6.14","@storybook/addon-onboarding":"^8.6.14","@size-limit/preset-small-lib":"^11.2.0","@storybook/addon-interactions":"^8.6.14","@storybook/experimental-addon-test":"^8.6.14"},"peerDependencies":{"react":">=17 <21","react-dom":">=17 <21"},"_npmOperationalInternal":{"tmp":"tmp/lens_0.1.1_1751408673055_0.2824337748810821","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@astra-camp/lens","version":"0.1.2","keywords":["react","webgl","3d","lens"],"author":{"name":"smkhalsa"},"license":"ISC","_id":"@astra-camp/lens@0.1.2","maintainers":[{"name":"smkhalsa","email":"smkhalsa@gmail.com"}],"homepage":"https://github.com/astra-camp/lens#readme","bugs":{"url":"https://github.com/astra-camp/lens/issues"},"dist":{"shasum":"e4ffeeff14df6f04ec876334140d4333a781c62c","tarball":"https://registry.npmjs.org/@astra-camp/lens/-/lens-0.1.2.tgz","fileCount":37,"integrity":"sha512-0y411JzLEcHifGI45r0txHLxDhOvRM6/MujjJScSjyUfNVwA0HpucCrOvEGapGNxUAQPGjijZsZ2OhPH7nrMYg==","signatures":[{"sig":"MEUCIG6+Q5iLzaSyAydEpobrB58+2x14idoq4aYwr6hWnFxbAiEA8o1+A4zKAtt7Bbr4M6V3yhhBc3D9E1SMgGHkkSm2AvM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2497018},"main":"dist/index.cjs.js","types":"dist/index.d.ts","module":"dist/index.esm.js","browser":"dist/index.umd.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.esm.js","default":"./dist/index.umd.js","require":"./dist/index.cjs.js"},"./package.json":"./package.json"},"gitHead":"15ee49b6a040f1802e50f1481a48d558709b70ee","private":false,"scripts":{"dev":"vite","lint":"eslint . --ext .ts,.tsx","size":"size-limit","test":"vitest","build":"vite build","prepack":"npm run build","release":"semantic-release","storybook":"storybook dev -p 6006","build-storybook":"storybook build"},"_npmUser":{"name":"smkhalsa","actor":{"name":"smkhalsa","type":"user","email":"smkhalsa@gmail.com"},"email":"smkhalsa@gmail.com"},"repository":{"url":"git+https://github.com/astra-camp/lens.git","type":"git"},"size-limit":[{"path":"dist/index.esm.js","limit":"40 KB"},{"path":"dist/index.umd.js","limit":"60 KB"}],"_npmVersion":"10.9.0","description":"A modern, plugin-based WebGL rendering engine built with TypeScript and React.","directories":{},"sideEffects":false,"_nodeVersion":"23.3.0","dependencies":{"regl":"^2.1.1","gl-matrix":"^3.4.3"},"eslintConfig":{"extends":["plugin:storybook/recommended"]},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.3.5","react":"^19.1.0","eslint":"^9.27.0","vitest":"^3.1.4","storybook":"^8.6.14","playwright":"^1.52.0","prop-types":"^15.8.1","size-limit":"^11.2.0","@types/react":"^19.1.5","@storybook/test":"^8.6.14","@vitest/browser":"3.1.4","vite-plugin-dts":"^4.5.4","@storybook/react":"^8.6.14","@storybook/blocks":"^8.6.14","@vitest/coverage-v8":"3.1.4","@vitejs/plugin-react":"^4.4.1","@storybook/addon-docs":"^8.6.14","@storybook/react-vite":"^8.6.14","eslint-plugin-storybook":"^0.12.0","@chromatic-com/storybook":"^3","@storybook/addon-essentials":"^8.6.14","@storybook/addon-onboarding":"^8.6.14","@size-limit/preset-small-lib":"^11.2.0","@storybook/addon-interactions":"^8.6.14","@storybook/experimental-addon-test":"^8.6.14"},"peerDependencies":{"react":">=17 <21","react-dom":">=17 <21"},"_npmOperationalInternal":{"tmp":"tmp/lens_0.1.2_1751442322530_0.2611011484429593","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@astra-camp/lens","version":"0.1.3","keywords":["react","webgl","3d","lens"],"author":{"name":"smkhalsa"},"license":"ISC","_id":"@astra-camp/lens@0.1.3","maintainers":[{"name":"smkhalsa","email":"smkhalsa@gmail.com"}],"homepage":"https://github.com/astra-camp/lens#readme","bugs":{"url":"https://github.com/astra-camp/lens/issues"},"dist":{"shasum":"0caf5fe7eca4d8b7f807d406bc37627f6c92b318","tarball":"https://registry.npmjs.org/@astra-camp/lens/-/lens-0.1.3.tgz","fileCount":37,"integrity":"sha512-WRHu9qtHYSLCJf6EdX9sIOkWtcRgX5oBqyn8rSEGDbIkrCDwdd7VHQUMWj/brjj1/au7IW+OsxiviDj+S70rZg==","signatures":[{"sig":"MEQCIGWLxoBpBbZwKi1DptzmsIj3SGjgdJ/sXfJcJSiaeXlrAiAOoCz6h37cEzyirezCN4CeVQNwxTNbRJ6lgTRivXKlVQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2507925},"main":"dist/index.cjs.js","types":"dist/index.d.ts","module":"dist/index.esm.js","browser":"dist/index.umd.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.esm.js","default":"./dist/index.umd.js","require":"./dist/index.cjs.js"},"./package.json":"./package.json"},"gitHead":"21824531a9c3c9fd6cecd553a97f3232437941fa","private":false,"scripts":{"dev":"vite","lint":"eslint . --ext .ts,.tsx","size":"size-limit","test":"vitest","build":"vite build","prepack":"npm run build","release":"semantic-release","storybook":"storybook dev -p 6006","build-storybook":"storybook build"},"_npmUser":{"name":"smkhalsa","actor":{"name":"smkhalsa","type":"user","email":"smkhalsa@gmail.com"},"email":"smkhalsa@gmail.com"},"repository":{"url":"git+https://github.com/astra-camp/lens.git","type":"git"},"size-limit":[{"path":"dist/index.esm.js","limit":"40 KB"},{"path":"dist/index.umd.js","limit":"60 KB"}],"_npmVersion":"10.9.0","description":"A modern, plugin-based WebGL rendering engine built with TypeScript and React.","directories":{},"sideEffects":false,"_nodeVersion":"23.3.0","dependencies":{"regl":"^2.1.1","gl-matrix":"^3.4.3"},"eslintConfig":{"extends":["plugin:storybook/recommended"]},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.3.5","react":"^19.1.0","eslint":"^9.27.0","vitest":"^3.1.4","storybook":"^8.6.14","playwright":"^1.52.0","prop-types":"^15.8.1","size-limit":"^11.2.0","@types/react":"^19.1.5","@storybook/test":"^8.6.14","@vitest/browser":"3.1.4","vite-plugin-dts":"^4.5.4","@storybook/react":"^8.6.14","@storybook/blocks":"^8.6.14","@vitest/coverage-v8":"3.1.4","@vitejs/plugin-react":"^4.4.1","@storybook/addon-docs":"^8.6.14","@storybook/react-vite":"^8.6.14","eslint-plugin-storybook":"^0.12.0","@chromatic-com/storybook":"^3","@storybook/addon-essentials":"^8.6.14","@storybook/addon-onboarding":"^8.6.14","@size-limit/preset-small-lib":"^11.2.0","@storybook/addon-interactions":"^8.6.14","@storybook/experimental-addon-test":"^8.6.14"},"peerDependencies":{"react":">=17 <21","react-dom":">=17 <21"},"_npmOperationalInternal":{"tmp":"tmp/lens_0.1.3_1751443972887_0.4019202834648956","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@astra-camp/lens","version":"0.1.4","keywords":["react","webgl","3d","lens"],"author":{"name":"smkhalsa"},"license":"ISC","_id":"@astra-camp/lens@0.1.4","maintainers":[{"name":"smkhalsa","email":"smkhalsa@gmail.com"}],"homepage":"https://github.com/astra-camp/lens#readme","bugs":{"url":"https://github.com/astra-camp/lens/issues"},"dist":{"shasum":"29812853fb375cdc87daa42d944800b56c3d6958","tarball":"https://registry.npmjs.org/@astra-camp/lens/-/lens-0.1.4.tgz","fileCount":37,"integrity":"sha512-qbBCaYOP7Dkn/YtRoLyn/4Fal8NfKayit+O9k7gg2RTVgHHe3x11X+ccJLWR1io3IhkWkyqyiy86Zp/MKzVEhg==","signatures":[{"sig":"MEYCIQDA1qX3rIjJ+Iv7/12slkgLGKo1h5Yr/hFro2NnB+crSAIhANgWghy+SXxm5w3KdTeIf3Vbrqz/2YnphCHfC9uwoimg","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2508717},"main":"dist/index.cjs.js","types":"dist/index.d.ts","module":"dist/index.esm.js","browser":"dist/index.umd.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.esm.js","default":"./dist/index.umd.js","require":"./dist/index.cjs.js"},"./package.json":"./package.json"},"gitHead":"7d5b901db2b44f2a4c4fa8f3f16c92d7bb632fc2","private":false,"scripts":{"dev":"vite","lint":"eslint . --ext .ts,.tsx","size":"size-limit","test":"vitest","build":"vite build","prepack":"npm run build","release":"semantic-release","storybook":"storybook dev -p 6006","build-storybook":"storybook build"},"_npmUser":{"name":"smkhalsa","actor":{"name":"smkhalsa","type":"user","email":"smkhalsa@gmail.com"},"email":"smkhalsa@gmail.com"},"repository":{"url":"git+https://github.com/astra-camp/lens.git","type":"git"},"size-limit":[{"path":"dist/index.esm.js","limit":"40 KB"},{"path":"dist/index.umd.js","limit":"60 KB"}],"_npmVersion":"10.9.0","description":"A modern, plugin-based WebGL rendering engine built with TypeScript and React.","directories":{},"sideEffects":false,"_nodeVersion":"23.3.0","dependencies":{"regl":"^2.1.1","gl-matrix":"^3.4.3"},"eslintConfig":{"extends":["plugin:storybook/recommended"]},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.3.5","react":"^19.1.0","eslint":"^9.27.0","vitest":"^3.1.4","storybook":"^8.6.14","playwright":"^1.52.0","prop-types":"^15.8.1","size-limit":"^11.2.0","@types/react":"^19.1.5","@storybook/test":"^8.6.14","@vitest/browser":"3.1.4","vite-plugin-dts":"^4.5.4","@storybook/react":"^8.6.14","@storybook/blocks":"^8.6.14","@vitest/coverage-v8":"3.1.4","@vitejs/plugin-react":"^4.4.1","@storybook/addon-docs":"^8.6.14","@storybook/react-vite":"^8.6.14","eslint-plugin-storybook":"^0.12.0","@chromatic-com/storybook":"^3","@storybook/addon-essentials":"^8.6.14","@storybook/addon-onboarding":"^8.6.14","@size-limit/preset-small-lib":"^11.2.0","@storybook/addon-interactions":"^8.6.14","@storybook/experimental-addon-test":"^8.6.14"},"peerDependencies":{"react":">=17 <21","react-dom":">=17 <21"},"_npmOperationalInternal":{"tmp":"tmp/lens_0.1.4_1751444504051_0.8592750758304486","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@astra-camp/lens","version":"0.1.5","keywords":["react","webgl","3d","lens"],"author":{"name":"smkhalsa"},"license":"ISC","_id":"@astra-camp/lens@0.1.5","maintainers":[{"name":"smkhalsa","email":"smkhalsa@gmail.com"}],"homepage":"https://github.com/astra-camp/lens#readme","bugs":{"url":"https://github.com/astra-camp/lens/issues"},"dist":{"shasum":"8d55204198ef36fe8661cdbb9ca80da992950e74","tarball":"https://registry.npmjs.org/@astra-camp/lens/-/lens-0.1.5.tgz","fileCount":37,"integrity":"sha512-90pnM4bqolCO8VFu+JfxoR6NiyRrxh21tceTQ9QFfYAMFm+brK85LkmGNDtCSQ1Kztja163uYwKcEaYMVWGM5A==","signatures":[{"sig":"MEUCIHKoZ75rdFFlNaT+AaTVa+OIkpY88Dv4EiTLphk8XRFVAiEA8iDrHaRkDiiQYnuxNYmW8gvfp1xGu2NmzeZPkBPJAtY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2508302},"main":"dist/index.cjs.js","types":"dist/index.d.ts","module":"dist/index.esm.js","browser":"dist/index.umd.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.esm.js","default":"./dist/index.umd.js","require":"./dist/index.cjs.js"},"./package.json":"./package.json"},"gitHead":"7f2033eaafa8fcb49e52f323935c7f155e240a8d","private":false,"scripts":{"dev":"vite","lint":"eslint . --ext .ts,.tsx","size":"size-limit","test":"vitest","build":"vite build","prepack":"npm run build","release":"semantic-release","storybook":"storybook dev -p 6006","build-storybook":"storybook build"},"_npmUser":{"name":"smkhalsa","actor":{"name":"smkhalsa","type":"user","email":"smkhalsa@gmail.com"},"email":"smkhalsa@gmail.com"},"repository":{"url":"git+https://github.com/astra-camp/lens.git","type":"git"},"size-limit":[{"path":"dist/index.esm.js","limit":"40 KB"},{"path":"dist/index.umd.js","limit":"60 KB"}],"_npmVersion":"10.9.0","description":"A modern, plugin-based WebGL rendering engine built with TypeScript and React.","directories":{},"sideEffects":false,"_nodeVersion":"23.3.0","dependencies":{"regl":"^2.1.1","gl-matrix":"^3.4.3"},"eslintConfig":{"extends":["plugin:storybook/recommended"]},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.3.5","react":"^19.1.0","eslint":"^9.27.0","vitest":"^3.1.4","storybook":"^8.6.14","playwright":"^1.52.0","prop-types":"^15.8.1","size-limit":"^11.2.0","@types/react":"^19.1.5","@storybook/test":"^8.6.14","@vitest/browser":"3.1.4","vite-plugin-dts":"^4.5.4","@storybook/react":"^8.6.14","@storybook/blocks":"^8.6.14","@vitest/coverage-v8":"3.1.4","@vitejs/plugin-react":"^4.4.1","@storybook/addon-docs":"^8.6.14","@storybook/react-vite":"^8.6.14","eslint-plugin-storybook":"^0.12.0","@chromatic-com/storybook":"^3","@storybook/addon-essentials":"^8.6.14","@storybook/addon-onboarding":"^8.6.14","@size-limit/preset-small-lib":"^11.2.0","@storybook/addon-interactions":"^8.6.14","@storybook/experimental-addon-test":"^8.6.14"},"peerDependencies":{"react":">=17 <21","react-dom":">=17 <21"},"_npmOperationalInternal":{"tmp":"tmp/lens_0.1.5_1751467353704_0.8949142582571521","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"@astra-camp/lens","version":"0.1.6","keywords":["react","webgl","3d","lens"],"author":{"name":"smkhalsa"},"license":"ISC","_id":"@astra-camp/lens@0.1.6","maintainers":[{"name":"smkhalsa","email":"smkhalsa@gmail.com"}],"homepage":"https://github.com/astra-camp/lens#readme","bugs":{"url":"https://github.com/astra-camp/lens/issues"},"dist":{"shasum":"48e286bf6fc4a109af8ca82a465af5204aec4cd5","tarball":"https://registry.npmjs.org/@astra-camp/lens/-/lens-0.1.6.tgz","fileCount":37,"integrity":"sha512-BSwdOtku3Ch/KrejmmPJYW+7eR88y3+1muVnCHncWMqvE+3hVVM4tUGTZPPoaER+cG0FpwNC7oTNduDTaxmDEA==","signatures":[{"sig":"MEQCIA+JSv3ISeo3tMPqzqxFlDThWdljMs6p4sFHzoorxVOhAiBMejl8kXE9YCkVNisa0VYjFl9QzjxCLUDIz2X6vE5exg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2510427},"main":"dist/index.cjs.js","types":"dist/index.d.ts","module":"dist/index.esm.js","browser":"dist/index.umd.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.esm.js","default":"./dist/index.umd.js","require":"./dist/index.cjs.js"},"./package.json":"./package.json"},"gitHead":"b549192c9696fa5b27521ba96e35661d25df28b7","private":false,"scripts":{"dev":"vite","lint":"eslint . --ext .ts,.tsx","size":"size-limit","test":"vitest","build":"vite build","prepack":"npm run build","release":"semantic-release","storybook":"storybook dev -p 6006","build-storybook":"storybook build"},"_npmUser":{"name":"smkhalsa","actor":{"name":"smkhalsa","type":"user","email":"smkhalsa@gmail.com"},"email":"smkhalsa@gmail.com"},"repository":{"url":"git+https://github.com/astra-camp/lens.git","type":"git"},"size-limit":[{"path":"dist/index.esm.js","limit":"40 KB"},{"path":"dist/index.umd.js","limit":"60 KB"}],"_npmVersion":"10.9.0","description":"A modern, plugin-based WebGL rendering engine built with TypeScript and React.","directories":{},"sideEffects":false,"_nodeVersion":"23.3.0","dependencies":{"regl":"^2.1.1","gl-matrix":"^3.4.3"},"eslintConfig":{"extends":["plugin:storybook/recommended"]},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.3.5","react":"^19.1.0","eslint":"^9.27.0","vitest":"^3.1.4","storybook":"^8.6.14","playwright":"^1.52.0","prop-types":"^15.8.1","size-limit":"^11.2.0","@types/react":"^19.1.5","@storybook/test":"^8.6.14","@vitest/browser":"3.1.4","vite-plugin-dts":"^4.5.4","@storybook/react":"^8.6.14","@storybook/blocks":"^8.6.14","@vitest/coverage-v8":"3.1.4","@vitejs/plugin-react":"^4.4.1","@storybook/addon-docs":"^8.6.14","@storybook/react-vite":"^8.6.14","eslint-plugin-storybook":"^0.12.0","@chromatic-com/storybook":"^3","@storybook/addon-essentials":"^8.6.14","@storybook/addon-onboarding":"^8.6.14","@size-limit/preset-small-lib":"^11.2.0","@storybook/addon-interactions":"^8.6.14","@storybook/experimental-addon-test":"^8.6.14"},"peerDependencies":{"react":">=17 <21","react-dom":">=17 <21"},"_npmOperationalInternal":{"tmp":"tmp/lens_0.1.6_1751467971093_0.5151459742829028","host":"s3://npm-registry-packages-npm-production"}},"0.1.7":{"name":"@astra-camp/lens","version":"0.1.7","keywords":["react","webgl","3d","lens"],"author":{"name":"smkhalsa"},"license":"ISC","_id":"@astra-camp/lens@0.1.7","maintainers":[{"name":"smkhalsa","email":"smkhalsa@gmail.com"}],"homepage":"https://github.com/astra-camp/lens#readme","bugs":{"url":"https://github.com/astra-camp/lens/issues"},"dist":{"shasum":"967cf1b8745672bf2f9ef936049c576d1e522443","tarball":"https://registry.npmjs.org/@astra-camp/lens/-/lens-0.1.7.tgz","fileCount":37,"integrity":"sha512-o4KZeAHtimof3HEXDgUTZfHJigDQB2znkY97Esx+7rEatDAUsTdIFnhUMpqlBl/vzm+GjQtPivvCt/qhstJLlw==","signatures":[{"sig":"MEYCIQCSJ/I7i7P4B/jSFQvGlYG1TBLiYBz2sxbi5yCMLJKGlQIhAJaoPWujgqvE3dr2fpxme+ovhE7SdBO3LDFifs1TKH7W","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2511484},"main":"dist/index.cjs.js","types":"dist/index.d.ts","module":"dist/index.esm.js","browser":"dist/index.umd.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.esm.js","default":"./dist/index.umd.js","require":"./dist/index.cjs.js"},"./package.json":"./package.json"},"gitHead":"ca601f547c2b8df151be6056ad82500889bf0edc","private":false,"scripts":{"dev":"vite","lint":"eslint . --ext .ts,.tsx","size":"size-limit","test":"vitest","build":"vite build","prepack":"npm run build","release":"semantic-release","storybook":"storybook dev -p 6006","build-storybook":"storybook build"},"_npmUser":{"name":"smkhalsa","actor":{"name":"smkhalsa","type":"user","email":"smkhalsa@gmail.com"},"email":"smkhalsa@gmail.com"},"repository":{"url":"git+https://github.com/astra-camp/lens.git","type":"git"},"size-limit":[{"path":"dist/index.esm.js","limit":"40 KB"},{"path":"dist/index.umd.js","limit":"60 KB"}],"_npmVersion":"10.9.0","description":"A modern, plugin-based WebGL rendering engine built with TypeScript and React.","directories":{},"sideEffects":false,"_nodeVersion":"23.3.0","dependencies":{"regl":"^2.1.1","gl-matrix":"^3.4.3"},"eslintConfig":{"extends":["plugin:storybook/recommended"]},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.3.5","react":"^19.1.0","eslint":"^9.27.0","vitest":"^3.1.4","storybook":"^8.6.14","playwright":"^1.52.0","prop-types":"^15.8.1","size-limit":"^11.2.0","@types/react":"^19.1.5","@storybook/test":"^8.6.14","@vitest/browser":"3.1.4","vite-plugin-dts":"^4.5.4","@storybook/react":"^8.6.14","@storybook/blocks":"^8.6.14","@vitest/coverage-v8":"3.1.4","@vitejs/plugin-react":"^4.4.1","@storybook/addon-docs":"^8.6.14","@storybook/react-vite":"^8.6.14","eslint-plugin-storybook":"^0.12.0","@chromatic-com/storybook":"^3","@storybook/addon-essentials":"^8.6.14","@storybook/addon-onboarding":"^8.6.14","@size-limit/preset-small-lib":"^11.2.0","@storybook/addon-interactions":"^8.6.14","@storybook/experimental-addon-test":"^8.6.14"},"peerDependencies":{"react":">=17 <21","react-dom":">=17 <21"},"_npmOperationalInternal":{"tmp":"tmp/lens_0.1.7_1751471288641_0.24307556317189682","host":"s3://npm-registry-packages-npm-production"}},"0.1.8":{"name":"@astra-camp/lens","version":"0.1.8","keywords":["react","webgl","3d","lens"],"author":{"name":"smkhalsa"},"license":"ISC","_id":"@astra-camp/lens@0.1.8","maintainers":[{"name":"smkhalsa","email":"smkhalsa@gmail.com"}],"homepage":"https://github.com/astra-camp/lens#readme","bugs":{"url":"https://github.com/astra-camp/lens/issues"},"dist":{"shasum":"a88618babb8677d11b34a7169878f15106767b62","tarball":"https://registry.npmjs.org/@astra-camp/lens/-/lens-0.1.8.tgz","fileCount":37,"integrity":"sha512-WuGvO/6Za3x0roilsSgpDtxYhre7EyXaICbv1VJN7uwgvncx1OXZ9gtrdHJuXjdeVPS4mFid+C0+hP6s7VOaOA==","signatures":[{"sig":"MEUCIF1d4QltrRQyi2ESRPGmDXSoCMiEiHeXYBSBD9/RB9BjAiEAtMW+RD8qEbJFLJY48pAP1DtJUAxnMaTMRmOTVzBcCtc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2510099},"main":"dist/index.cjs.js","types":"dist/index.d.ts","module":"dist/index.esm.js","browser":"dist/index.umd.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.esm.js","default":"./dist/index.umd.js","require":"./dist/index.cjs.js"},"./package.json":"./package.json"},"gitHead":"6ecf23aafe768c92b9f555f17d230f854f5dd643","private":false,"scripts":{"dev":"vite","lint":"eslint . --ext .ts,.tsx","size":"size-limit","test":"vitest","build":"vite build","prepack":"npm run build","release":"semantic-release","storybook":"storybook dev -p 6006","build-storybook":"storybook build"},"_npmUser":{"name":"smkhalsa","actor":{"name":"smkhalsa","type":"user","email":"smkhalsa@gmail.com"},"email":"smkhalsa@gmail.com"},"repository":{"url":"git+https://github.com/astra-camp/lens.git","type":"git"},"size-limit":[{"path":"dist/index.esm.js","limit":"40 KB"},{"path":"dist/index.umd.js","limit":"60 KB"}],"_npmVersion":"10.9.0","description":"A modern, plugin-based WebGL rendering engine built with TypeScript and React.","directories":{},"sideEffects":false,"_nodeVersion":"23.3.0","dependencies":{"regl":"^2.1.1","gl-matrix":"^3.4.3"},"eslintConfig":{"extends":["plugin:storybook/recommended"]},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.3.5","react":"^19.1.0","eslint":"^9.27.0","vitest":"^3.1.4","storybook":"^8.6.14","playwright":"^1.52.0","prop-types":"^15.8.1","size-limit":"^11.2.0","@types/react":"^19.1.5","@storybook/test":"^8.6.14","@vitest/browser":"3.1.4","vite-plugin-dts":"^4.5.4","@storybook/react":"^8.6.14","@storybook/blocks":"^8.6.14","@vitest/coverage-v8":"3.1.4","@vitejs/plugin-react":"^4.4.1","@storybook/addon-docs":"^8.6.14","@storybook/react-vite":"^8.6.14","eslint-plugin-storybook":"^0.12.0","@chromatic-com/storybook":"^3","@storybook/addon-essentials":"^8.6.14","@storybook/addon-onboarding":"^8.6.14","@size-limit/preset-small-lib":"^11.2.0","@storybook/addon-interactions":"^8.6.14","@storybook/experimental-addon-test":"^8.6.14"},"peerDependencies":{"react":">=17 <21","react-dom":">=17 <21"},"_npmOperationalInternal":{"tmp":"tmp/lens_0.1.8_1751475211650_0.6855775692826274","host":"s3://npm-registry-packages-npm-production"}},"0.1.9":{"name":"@astra-camp/lens","version":"0.1.9","keywords":["react","webgl","3d","lens"],"author":{"name":"smkhalsa"},"license":"ISC","_id":"@astra-camp/lens@0.1.9","maintainers":[{"name":"smkhalsa","email":"smkhalsa@gmail.com"}],"homepage":"https://github.com/astra-camp/lens#readme","bugs":{"url":"https://github.com/astra-camp/lens/issues"},"dist":{"shasum":"c83f4070f080bb4dea780acdde5642d308dcf6a6","tarball":"https://registry.npmjs.org/@astra-camp/lens/-/lens-0.1.9.tgz","fileCount":37,"integrity":"sha512-D5jiCpToI6I0HgCi/jRxaqrDL+Qf6FPiEU0bUodPWc+UQu0QA6L8oEveNLBq+abx55fwRI/RLqsxhezqP21/EQ==","signatures":[{"sig":"MEYCIQDc0sF5/aytk8fZEFF6btUlcrq49g3fosMw6X/B5MzE6QIhANwFZPumcMRny+CU+ZO6Az/dCqe3vi7XnJbBnk0AHOtH","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2510123},"main":"dist/index.cjs.js","types":"dist/index.d.ts","module":"dist/index.esm.js","browser":"dist/index.umd.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.esm.js","default":"./dist/index.umd.js","require":"./dist/index.cjs.js"},"./package.json":"./package.json"},"gitHead":"0bb47eb9f8d7ac20d92a43d0bec9f99d4f9292a9","private":false,"scripts":{"dev":"vite","lint":"eslint . --ext .ts,.tsx","size":"size-limit","test":"vitest","build":"vite build","prepack":"npm run build","release":"semantic-release","storybook":"storybook dev -p 6006","build-storybook":"storybook build"},"_npmUser":{"name":"smkhalsa","actor":{"name":"smkhalsa","type":"user","email":"smkhalsa@gmail.com"},"email":"smkhalsa@gmail.com"},"repository":{"url":"git+https://github.com/astra-camp/lens.git","type":"git"},"size-limit":[{"path":"dist/index.esm.js","limit":"40 KB"},{"path":"dist/index.umd.js","limit":"60 KB"}],"_npmVersion":"10.9.0","description":"A modern, plugin-based WebGL rendering engine built with TypeScript and React.","directories":{},"sideEffects":false,"_nodeVersion":"23.3.0","dependencies":{"regl":"^2.1.1","gl-matrix":"^3.4.3"},"eslintConfig":{"extends":["plugin:storybook/recommended"]},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.3.5","react":"^19.1.0","eslint":"^9.27.0","vitest":"^3.1.4","storybook":"^8.6.14","playwright":"^1.52.0","prop-types":"^15.8.1","size-limit":"^11.2.0","@types/react":"^19.1.5","@storybook/test":"^8.6.14","@vitest/browser":"3.1.4","vite-plugin-dts":"^4.5.4","@storybook/react":"^8.6.14","@storybook/blocks":"^8.6.14","@vitest/coverage-v8":"3.1.4","@vitejs/plugin-react":"^4.4.1","@storybook/addon-docs":"^8.6.14","@storybook/react-vite":"^8.6.14","eslint-plugin-storybook":"^0.12.0","@chromatic-com/storybook":"^3","@storybook/addon-essentials":"^8.6.14","@storybook/addon-onboarding":"^8.6.14","@size-limit/preset-small-lib":"^11.2.0","@storybook/addon-interactions":"^8.6.14","@storybook/experimental-addon-test":"^8.6.14"},"peerDependencies":{"react":">=17 <21","react-dom":">=17 <21"},"_npmOperationalInternal":{"tmp":"tmp/lens_0.1.9_1751475400909_0.4489229031414892","host":"s3://npm-registry-packages-npm-production"}},"0.1.10":{"name":"@astra-camp/lens","version":"0.1.10","keywords":["react","webgl","3d","lens"],"author":{"name":"smkhalsa"},"license":"ISC","_id":"@astra-camp/lens@0.1.10","maintainers":[{"name":"smkhalsa","email":"smkhalsa@gmail.com"}],"homepage":"https://github.com/astra-camp/lens#readme","bugs":{"url":"https://github.com/astra-camp/lens/issues"},"dist":{"shasum":"c43d309f1a3df1d56ea55474245883f4b8aeccf2","tarball":"https://registry.npmjs.org/@astra-camp/lens/-/lens-0.1.10.tgz","fileCount":37,"integrity":"sha512-z6sjxKxRPnnvvQXDpFwgBhtNIovdYz5XHU72Bn1JDvfXhKWUWKToX799/Dozoo4Zvg/VJTSbNUZwCPKQ/akZMw==","signatures":[{"sig":"MEYCIQDRSJZbMw3L4GytY0O0ShdZH05I6/zaJ1ok75bB0iudYAIhAPVLYfI1m2zstLNCBn/PBT9+tlNa3SOumZX4NJzHf+Nv","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2510667},"main":"dist/index.cjs.js","types":"dist/index.d.ts","module":"dist/index.esm.js","browser":"dist/index.umd.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.esm.js","default":"./dist/index.umd.js","require":"./dist/index.cjs.js"},"./package.json":"./package.json"},"gitHead":"ea78b74bccfeea1ca26b3e51975b2351a077c311","private":false,"scripts":{"dev":"vite","lint":"eslint . --ext .ts,.tsx","size":"size-limit","test":"vitest","build":"vite build","prepack":"npm run build","release":"semantic-release","storybook":"storybook dev -p 6006","build-storybook":"storybook build"},"_npmUser":{"name":"smkhalsa","actor":{"name":"smkhalsa","type":"user","email":"smkhalsa@gmail.com"},"email":"smkhalsa@gmail.com"},"repository":{"url":"git+https://github.com/astra-camp/lens.git","type":"git"},"size-limit":[{"path":"dist/index.esm.js","limit":"40 KB"},{"path":"dist/index.umd.js","limit":"60 KB"}],"_npmVersion":"10.9.0","description":"A modern, plugin-based WebGL rendering engine built with TypeScript and React.","directories":{},"sideEffects":false,"_nodeVersion":"23.3.0","dependencies":{"regl":"^2.1.1","gl-matrix":"^3.4.3"},"eslintConfig":{"extends":["plugin:storybook/recommended"]},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.3.5","react":"^19.1.0","eslint":"^9.27.0","vitest":"^3.1.4","storybook":"^8.6.14","playwright":"^1.52.0","prop-types":"^15.8.1","size-limit":"^11.2.0","@types/react":"^19.1.5","@storybook/test":"^8.6.14","@vitest/browser":"3.1.4","vite-plugin-dts":"^4.5.4","@storybook/react":"^8.6.14","@storybook/blocks":"^8.6.14","@vitest/coverage-v8":"3.1.4","@vitejs/plugin-react":"^4.4.1","@storybook/addon-docs":"^8.6.14","@storybook/react-vite":"^8.6.14","eslint-plugin-storybook":"^0.12.0","@chromatic-com/storybook":"^3","@storybook/addon-essentials":"^8.6.14","@storybook/addon-onboarding":"^8.6.14","@size-limit/preset-small-lib":"^11.2.0","@storybook/addon-interactions":"^8.6.14","@storybook/experimental-addon-test":"^8.6.14"},"peerDependencies":{"react":">=17 <21","react-dom":">=17 <21"},"_npmOperationalInternal":{"tmp":"tmp/lens_0.1.10_1751475735012_0.7569562777242302","host":"s3://npm-registry-packages-npm-production"}},"0.1.11":{"name":"@astra-camp/lens","version":"0.1.11","private":false,"description":"A modern, plugin-based WebGL rendering engine built with TypeScript and React.","keywords":["react","webgl","3d","lens"],"homepage":"https://github.com/astra-camp/lens#readme","repository":{"type":"git","url":"git+https://github.com/astra-camp/lens.git"},"bugs":{"url":"https://github.com/astra-camp/lens/issues"},"main":"dist/index.cjs.js","module":"dist/index.esm.js","browser":"dist/index.umd.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.esm.js","require":"./dist/index.cjs.js","default":"./dist/index.umd.js"},"./package.json":"./package.json"},"sideEffects":false,"peerDependencies":{"react":">=17 <21","react-dom":">=17 <21"},"dependencies":{"gl-matrix":"^3.4.3","regl":"^2.1.1"},"devDependencies":{"@chromatic-com/storybook":"^3","@size-limit/preset-small-lib":"^11.2.0","@storybook/addon-docs":"^8.6.14","@storybook/addon-essentials":"^8.6.14","@storybook/addon-interactions":"^8.6.14","@storybook/addon-onboarding":"^8.6.14","@storybook/blocks":"^8.6.14","@storybook/experimental-addon-test":"^8.6.14","@storybook/react":"^8.6.14","@storybook/react-vite":"^8.6.14","@storybook/test":"^8.6.14","@types/react":"^19.1.5","@vitejs/plugin-react":"^4.4.1","@vitest/browser":"3.1.4","@vitest/coverage-v8":"3.1.4","eslint":"^9.27.0","eslint-plugin-storybook":"^0.12.0","playwright":"^1.52.0","prop-types":"^15.8.1","react":"^19.1.0","size-limit":"^11.2.0","storybook":"^8.6.14","vite":"^6.3.5","vite-plugin-dts":"^4.5.4","vitest":"^3.1.4"},"scripts":{"prepack":"npm run build","build":"vite build","dev":"vite","storybook":"storybook dev -p 6006","build-storybook":"storybook build","lint":"eslint . --ext .ts,.tsx","test":"vitest","size":"size-limit","release":"semantic-release"},"size-limit":[{"path":"dist/index.esm.js","limit":"40 KB"},{"path":"dist/index.umd.js","limit":"60 KB"}],"eslintConfig":{"extends":["plugin:storybook/recommended"]},"author":{"name":"smkhalsa"},"license":"ISC","_id":"@astra-camp/lens@0.1.11","gitHead":"8cfb92326e1214d0db8ef678ddcfaa1119eecd26","_nodeVersion":"23.3.0","_npmVersion":"10.9.0","dist":{"integrity":"sha512-OyFoCc2arnc8Lu86hx8L+Mop/9ffBnr3v6NgAjHn4KCTSDWNjmXQFtLK3Nndoz6iFzrm67LS04rEro/EOdICCQ==","shasum":"7fa333c7dd3f3820d2fdda56edf98c774a4949e4","tarball":"https://registry.npmjs.org/@astra-camp/lens/-/lens-0.1.11.tgz","fileCount":37,"unpackedSize":2511490,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIESz1OktQOVEhzcVaadmq/wvfG5Kvn68XyrBikNwmTDFAiEA33T4kTvY6AE7VPVQDXIs3T4GWWVRSYuE684/DDzQS2A="}]},"_npmUser":{"name":"smkhalsa","email":"smkhalsa@gmail.com","actor":{"name":"smkhalsa","email":"smkhalsa@gmail.com","type":"user"}},"directories":{},"maintainers":[{"name":"smkhalsa","email":"smkhalsa@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/lens_0.1.11_1751477850646_0.6319949925915609"},"_hasShrinkwrap":false}},"time":{"created":"2025-07-01T21:45:12.173Z","modified":"2025-07-02T17:37:31.173Z","0.1.0":"2025-07-01T21:45:12.436Z","0.1.1":"2025-07-01T22:24:33.229Z","0.1.2":"2025-07-02T07:45:22.760Z","0.1.3":"2025-07-02T08:12:53.139Z","0.1.4":"2025-07-02T08:21:44.291Z","0.1.5":"2025-07-02T14:42:33.959Z","0.1.6":"2025-07-02T14:52:51.342Z","0.1.7":"2025-07-02T15:48:08.866Z","0.1.8":"2025-07-02T16:53:31.892Z","0.1.9":"2025-07-02T16:56:41.133Z","0.1.10":"2025-07-02T17:02:15.256Z","0.1.11":"2025-07-02T17:37:30.943Z"},"bugs":{"url":"https://github.com/astra-camp/lens/issues"},"author":{"name":"smkhalsa"},"license":"ISC","homepage":"https://github.com/astra-camp/lens#readme","keywords":["react","webgl","3d","lens"],"repository":{"type":"git","url":"git+https://github.com/astra-camp/lens.git"},"description":"A modern, plugin-based WebGL rendering engine built with TypeScript and React.","maintainers":[{"name":"smkhalsa","email":"smkhalsa@gmail.com"}],"readme":"# Lens\n\nA modern, plugin-based WebGL rendering engine built with TypeScript and React. Lens provides a flexible and extensible architecture for creating interactive 3D experiences, with a particular focus on panoramic viewing and virtual tours.\n\n## Features\n\n- 🎥 Plugin-based architecture for easy extensibility\n- 🖼️ Built-in support for equirectangular panoramas\n- 🎮 Interactive camera controls (orbit, click)\n- 🔍 Hotspot system for interactive elements\n- ⚛️ First-class React integration\n- 📱 Responsive design with proper device pixel ratio handling\n- 🎯 TypeScript support with comprehensive type definitions\n\n## Installation\n\n```bash\nnpm install @astra-camp/lens\n# or\nyarn add @astra-camp/lens\n```\n\n## Quick Start\n\n```tsx\nimport { useLens } from '@astra-camp/lens';\nimport { equirectangularPano } from '@astra-camp/lens/plugins/geometry';\nimport { orbitControls } from '@astra-camp/lens/plugins/interaction';\n\nfunction PanoramaViewer() {\n  const plugins = useMemo(() => [\n    equirectangularPano({ image: panoramaImage }),\n    orbitControls(),\n  ], [panoramaImage]);\n\n  const { canvasRef } = useLens({ plugins });\n\n  return (\n    <canvas\n      ref={canvasRef}\n      style={{ width: '100%', height: '100vh' }}\n    />\n  );\n}\n```\n\n## Core Concepts\n\n### Plugins\n\nLens uses a plugin-based architecture that allows you to extend its functionality. Each plugin can:\n- Modify the rendering state\n- Add draw commands\n- Register lifecycle callbacks\n- Handle user interactions\n\nExample plugin:\n```typescript\nimport { Plugin } from '@astra-camp/lens';\n\nconst myPlugin: Plugin = (getState, setState, registerCallbacks) => {\n  // Register setup callback\n  registerCallbacks.onSetup(() => {\n    // Initialize resources\n  });\n\n  // Register frame callback\n  registerCallbacks.onFrame(({ dt, elapsed }) => {\n    // Update state each frame\n  });\n\n  // Register cleanup callback\n  registerCallbacks.onCleanup(() => {\n    // Clean up resources\n  });\n\n  // Return initial state update\n  return {\n    // State updates\n  };\n};\n```\n\n### State Management\n\nLens maintains a central state that includes:\n- Camera parameters (yaw, pitch, FOV)\n- WebGL context and resources\n- Draw commands\n- Canvas properties\n\nState updates are handled immutably through the `setState` function:\n\n```typescript\nsetState((state) => ({\n  camera: {\n    ...state.camera,\n    yaw: newYaw,\n    pitch: newPitch\n  }\n}));\n```\n\n## Built-in Plugins\n\n### Geometry\n\n- `equirectangularPano`: Renders equirectangular panorama images\n- `sphereMesh`: Creates sphere meshes for panorama viewing\n\n### Interaction\n\n- `orbitControls`: Provides orbit camera controls\n- `clickRay`: Handles click interactions and ray casting\n- `pointerPan`: Base plugin for pointer-based panning\n\n### Tour\n\n- `drawHotSpots`: Renders interactive hotspots\n- `hotSpotClick`: Handles hotspot click interactions\n\n## React Integration\n\nLens provides a `useLens` hook for easy integration with React:\n\n```typescript\nconst { canvasRef, setState } = useLens({\n  plugins: [...],\n  reglOptions: {...},\n  clearOptions: {...}\n});\n```\n\nThe hook handles:\n- Canvas lifecycle management\n- Device pixel ratio\n- Window resizing\n- Plugin initialization and cleanup\n\n## Performance Considerations\n\n- Lens automatically handles device pixel ratio for crisp rendering\n- Draw commands are batched and optimized\n- Resources are properly cleaned up when components unmount\n- State updates are immutable and efficient\n\n## Contributing\n\nContributions are welcome! Please feel free to submit a Pull Request.\n\n","readmeFilename":"README.md"}