{"_id":"@bloomreach/lit-sdk","_rev":"8-94d507c7fba6dea3814c83e857242eea","name":"@bloomreach/lit-sdk","dist-tags":{"latest":"28.1.0"},"versions":{"27.3.0":{"name":"@bloomreach/lit-sdk","version":"27.3.0","keywords":["bloomreach","sdk","lit","web-components"],"author":{"name":"Bloomreach B.V."},"license":"Apache-2.0","_id":"@bloomreach/lit-sdk@27.3.0","maintainers":[{"name":"beetlerom","email":"beetlerom@gmail.com"},{"name":"joerideg","email":"joeri.degooijer@bloomreach.com"},{"name":"abogaart","email":"a.bogaart@icloud.com"},{"name":"rishabh.chhabda","email":"rishabh.chhabda@bloomreach.com"},{"name":"rameshbr","email":"rameshkumar.arumugam@bloomreach.com"},{"name":"pcentgraf-bloomreach","email":"peter.centgraf@bloomreach.com"},{"name":"mjmetter","email":"michael.metternich@bloomreach.com"},{"name":"vlets","email":"georgevle93@gmail.com"},{"name":"pauledwardsbloomreach","email":"paul.edwards@bloomreach.com"},{"name":"davidboyd1","email":"david@davidboyd.com"},{"name":"drq","email":"drq@nxfinc.com"},{"name":"ntrajkovski","email":"nikola.trajkovski@bloomreach.com"},{"name":"bcanvural","email":"bcanvural@gmail.com"},{"name":"lachire","email":"charlie.chen@bloomreach.com"},{"name":"glm-bloomreach","email":"giacomo.lamonaco@bloomreach.com"},{"name":"mgiusto","email":"matteo.giusto@bloomreach.com"},{"name":"boudekerk","email":"bartosz.oudekerk@bloomreach.com"},{"name":"aakash.anand","email":"aakash.anand@bloomreach.com"},{"name":"prateek.pandey","email":"prateek.pandey@bloomreach.com"},{"name":"jeroenhoffman","email":"jeroen.hoffman@bloomreach.com"},{"name":"vahid.mehrjouei","email":"vahid.mehrjouei@bloomreach.com"},{"name":"shivanayak.dharavath2","email":"shiva.dharavath@bloomreach.com"},{"name":"wenjun.li","email":"wenjun.li@bloomreach.com"}],"homepage":"https://www.bloomreach.com","bugs":{"url":"https://bloomreach.atlassian.net/projects/SPASDK/issues"},"dist":{"shasum":"5a91e470e3bcf50aab227ec7735180d52df6e42f","tarball":"https://registry.npmjs.org/@bloomreach/lit-sdk/-/lit-sdk-27.3.0.tgz","fileCount":8,"integrity":"sha512-7HlBplYcbAu5K9XYb8BDz/NcMiV6VrvzpvyBlHaAsVR947K9OUld/hIs1IdaOulEH73OhruJvQmrmzVa0ukRiw==","signatures":[{"sig":"MEUCIQDsaoD0B7P5NTpoag/Au4ks+NXw+taZsbKePCLl3otfoQIgUS4EmrRMSaMwkYLoAlGwl+hPcN8ig+QoAbSZcRun7Do=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":201789},"main":"./dist/index.umd.cjs","type":"module","_from":"file:bloomreach-lit-sdk-27.3.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.umd.cjs"}}},"scripts":{"dev":"vite build --watch","lint":"eslint src","test":"vitest run","build":"vite build","test:watch":"vitest"},"_npmUser":{"name":"lachire","email":"charlie.chen@bloomreach.com"},"_resolved":"/private/var/folders/vz/zphgmm9j6_1cry76w4pwtj1r0000gn/T/0ca70062c0bf9530e3ffcabd4b220a3c/bloomreach-lit-sdk-27.3.0.tgz","_integrity":"sha512-7HlBplYcbAu5K9XYb8BDz/NcMiV6VrvzpvyBlHaAsVR947K9OUld/hIs1IdaOulEH73OhruJvQmrmzVa0ukRiw==","repository":{"url":"git+https://github.com/bloomreach/spa-sdk.git","type":"git","directory":"packages/lit-sdk"},"_npmVersion":"10.8.2","description":"Bloomreach SPA SDK for Lit web components","directories":{},"_nodeVersion":"20.19.5","dependencies":{"@bloomreach/spa-sdk":"27.3.0"},"_hasShrinkwrap":false,"devDependencies":{"lit":"3.3.2","vite":"6.4.2","jsdom":"26.1.0","eslint":"9.17.0","vitest":"3.2.4","@eslint/js":"9.17.0","typescript":"5.9.3","@lit/context":"1.1.6","vite-plugin-dts":"4.5.4","typescript-eslint":"8.53.0","eslint-plugin-import":"2.31.0","eslint-config-airbnb-base":"15.0.0"},"peerDependencies":{"lit":"^3.2.0","@lit/context":"^1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/lit-sdk_27.3.0_1778152392929_0.43911908504681585","host":"s3://npm-registry-packages-npm-production"}},"27.3.1":{"name":"@bloomreach/lit-sdk","version":"27.3.1","keywords":["bloomreach","sdk","lit","web-components"],"author":{"name":"Bloomreach B.V."},"license":"Apache-2.0","_id":"@bloomreach/lit-sdk@27.3.1","maintainers":[{"name":"beetlerom","email":"beetlerom@gmail.com"},{"name":"joerideg","email":"joeri.degooijer@bloomreach.com"},{"name":"abogaart","email":"arthur.bogaart@bloomreach.com"},{"name":"rishabh.chhabda","email":"rishabh.chhabda@bloomreach.com"},{"name":"rameshbr","email":"rameshkumar.arumugam@bloomreach.com"},{"name":"pcentgraf-bloomreach","email":"peter.centgraf@bloomreach.com"},{"name":"mjmetter","email":"michael.metternich@bloomreach.com"},{"name":"vlets","email":"georgevle93@gmail.com"},{"name":"pauledwardsbloomreach","email":"paul.edwards@bloomreach.com"},{"name":"davidboyd1","email":"david@davidboyd.com"},{"name":"drq","email":"drq@nxfinc.com"},{"name":"ntrajkovski","email":"nikola.trajkovski@bloomreach.com"},{"name":"bcanvural","email":"bcanvural@gmail.com"},{"name":"lachire","email":"charlie.chen@bloomreach.com"},{"name":"glm-bloomreach","email":"giacomo.lamonaco@bloomreach.com"},{"name":"mgiusto","email":"matteo.giusto@bloomreach.com"},{"name":"boudekerk","email":"bartosz.oudekerk@bloomreach.com"},{"name":"aakash.anand","email":"aakash.anand@bloomreach.com"},{"name":"prateek.pandey","email":"prateek.pandey@bloomreach.com"},{"name":"jeroenhoffman","email":"jeroen.hoffman@bloomreach.com"},{"name":"vahid.mehrjouei","email":"vahid.mehrjouei@bloomreach.com"},{"name":"shivanayak.dharavath2","email":"shiva.dharavath@bloomreach.com"},{"name":"wenjun.li","email":"wenjun.li@bloomreach.com"}],"homepage":"https://www.bloomreach.com","bugs":{"url":"https://bloomreach.atlassian.net/projects/SPASDK/issues"},"dist":{"shasum":"10dd494d9ad35464172b0b016c414ca3b49b6251","tarball":"https://registry.npmjs.org/@bloomreach/lit-sdk/-/lit-sdk-27.3.1.tgz","fileCount":8,"integrity":"sha512-ioojWu0t2cjGrt0l6wwuL6NgxMLegYdnSEJ/zVK4U40MpnBPubR2Jy18ijCx8W7Q1a9CBtgnXddssjZyPsSHqA==","signatures":[{"sig":"MEUCIHbWPd0Pd4Asv7EQ0VE+UBQPlP+bsevszdr251NgCzJOAiEA5sYfl0BCkdkHF94aO7vqEjfWatenAQzFAWxoq9jrDuI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":201789},"main":"./dist/index.umd.cjs","type":"module","_from":"file:bloomreach-lit-sdk-27.3.1.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.umd.cjs"}}},"gitHead":"094145434dee8cab356993d08543f0a552030f08","scripts":{"dev":"vite build --watch","lint":"eslint src","test":"vitest run","build":"vite build","test:watch":"vitest"},"_npmUser":{"name":"lachire","email":"charlie.chen@bloomreach.com"},"_resolved":"/tmp/ff8ef95b18fd423df91e980306d7703a/bloomreach-lit-sdk-27.3.1.tgz","_integrity":"sha512-ioojWu0t2cjGrt0l6wwuL6NgxMLegYdnSEJ/zVK4U40MpnBPubR2Jy18ijCx8W7Q1a9CBtgnXddssjZyPsSHqA==","repository":{"url":"git+https://github.com/bloomreach/spa-sdk.git","type":"git","directory":"packages/lit-sdk"},"_npmVersion":"10.8.2","description":"Bloomreach SPA SDK for Lit web components","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@bloomreach/spa-sdk":"27.3.1"},"_hasShrinkwrap":false,"devDependencies":{"lit":"3.3.2","vite":"6.4.2","jsdom":"26.1.0","eslint":"9.17.0","vitest":"3.2.4","@eslint/js":"9.17.0","typescript":"5.9.3","@lit/context":"1.1.6","vite-plugin-dts":"4.5.4","typescript-eslint":"8.53.0","eslint-plugin-import":"2.31.0","eslint-config-airbnb-base":"15.0.0"},"peerDependencies":{"lit":"^3.2.0","@lit/context":"^1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/lit-sdk_27.3.1_1779373839073_0.5668913330135639","host":"s3://npm-registry-packages-npm-production"}},"28.0.0":{"name":"@bloomreach/lit-sdk","version":"28.0.0","keywords":["bloomreach","sdk","lit","web-components"],"author":{"name":"Bloomreach B.V."},"license":"Apache-2.0","_id":"@bloomreach/lit-sdk@28.0.0","maintainers":[{"name":"beetlerom","email":"beetlerom@gmail.com"},{"name":"joerideg","email":"joeri.degooijer@bloomreach.com"},{"name":"abogaart","email":"arthur.bogaart@bloomreach.com"},{"name":"rishabh.chhabda","email":"rishabh.chhabda@bloomreach.com"},{"name":"rameshbr","email":"rameshkumar.arumugam@bloomreach.com"},{"name":"pcentgraf-bloomreach","email":"peter.centgraf@bloomreach.com"},{"name":"mjmetter","email":"michael.metternich@bloomreach.com"},{"name":"vlets","email":"georgevle93@gmail.com"},{"name":"pauledwardsbloomreach","email":"paul.edwards@bloomreach.com"},{"name":"davidboyd1","email":"david@davidboyd.com"},{"name":"drq","email":"drq@nxfinc.com"},{"name":"ntrajkovski","email":"nikola.trajkovski@bloomreach.com"},{"name":"bcanvural","email":"bcanvural@gmail.com"},{"name":"lachire","email":"charlie.chen@bloomreach.com"},{"name":"glm-bloomreach","email":"giacomo.lamonaco@bloomreach.com"},{"name":"mgiusto","email":"matteo.giusto@bloomreach.com"},{"name":"boudekerk","email":"bartosz.oudekerk@bloomreach.com"},{"name":"aakash.anand","email":"aakash.anand@bloomreach.com"},{"name":"prateek.pandey","email":"prateek.pandey@bloomreach.com"},{"name":"jeroenhoffman","email":"jeroen.hoffman@bloomreach.com"},{"name":"vahid.mehrjouei","email":"vahid.mehrjouei@bloomreach.com"},{"name":"shivanayak.dharavath2","email":"shiva.dharavath@bloomreach.com"},{"name":"wenjun.li","email":"wenjun.li@bloomreach.com"}],"homepage":"https://www.bloomreach.com","bugs":{"url":"https://bloomreach.atlassian.net/projects/SPASDK/issues"},"dist":{"shasum":"da17f85c8216a85269d7c3b0421cc3cf891add50","tarball":"https://registry.npmjs.org/@bloomreach/lit-sdk/-/lit-sdk-28.0.0.tgz","fileCount":8,"integrity":"sha512-75isLgS5qcn2Bo5C7tYFRPbZc+U8leHgkNJ9Kn8t9hYZCZMNsD8GQzvivXNHfe++WHyplq5e2rDPLdNr0PIDfw==","signatures":[{"sig":"MEYCIQDtCaG66WWxhIRV4mvEK0XzuhbRORRhTQMs1dcU0etR2gIhAOc6FA0NBfp1kLrumAIc23rPtgUMKSNCUiuIErgFc/he","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":196170},"main":"./dist/index.umd.cjs","type":"module","_from":"file:bloomreach-lit-sdk-28.0.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.umd.cjs"}}},"gitHead":"741e5b715519d145277c361cdfb0a4b5e2eac3d7","scripts":{"dev":"vite build --watch","lint":"eslint src","test":"vitest run","build":"vite build","test:watch":"vitest"},"_npmUser":{"name":"lachire","email":"charlie.chen@bloomreach.com"},"_resolved":"/tmp/2c7320fc8d1767a840fee44ccd187486/bloomreach-lit-sdk-28.0.0.tgz","_integrity":"sha512-75isLgS5qcn2Bo5C7tYFRPbZc+U8leHgkNJ9Kn8t9hYZCZMNsD8GQzvivXNHfe++WHyplq5e2rDPLdNr0PIDfw==","repository":{"url":"git+https://github.com/bloomreach/spa-sdk.git","type":"git","directory":"packages/lit-sdk"},"_npmVersion":"10.8.2","description":"Bloomreach SPA SDK for Lit web components","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@bloomreach/spa-sdk":"28.0.0"},"_hasShrinkwrap":false,"devDependencies":{"lit":"3.3.2","vite":"6.4.2","jsdom":"26.1.0","eslint":"9.17.0","vitest":"3.2.4","@eslint/js":"9.17.0","typescript":"5.9.3","@lit/context":"1.1.6","vite-plugin-dts":"4.5.4","typescript-eslint":"8.53.0","eslint-plugin-import":"2.31.0","eslint-config-airbnb-base":"15.0.0"},"peerDependencies":{"lit":"^3.2.0","@lit/context":"^1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/lit-sdk_28.0.0_1781864891728_0.9650033487072074","host":"s3://npm-registry-packages-npm-production"}},"28.0.1-beta.0":{"name":"@bloomreach/lit-sdk","version":"28.0.1-beta.0","keywords":["bloomreach","sdk","lit","web-components"],"author":{"name":"Bloomreach B.V."},"license":"Apache-2.0","_id":"@bloomreach/lit-sdk@28.0.1-beta.0","maintainers":[{"name":"beetlerom","email":"beetlerom@gmail.com"},{"name":"joerideg","email":"joeri.degooijer@bloomreach.com"},{"name":"abogaart","email":"arthur.bogaart@bloomreach.com"},{"name":"rishabh.chhabda","email":"rishabh.chhabda@bloomreach.com"},{"name":"rameshbr","email":"rameshkumar.arumugam@bloomreach.com"},{"name":"pcentgraf-bloomreach","email":"peter.centgraf@bloomreach.com"},{"name":"mjmetter","email":"michael.metternich@bloomreach.com"},{"name":"vlets","email":"georgevle93@gmail.com"},{"name":"pauledwardsbloomreach","email":"paul.edwards@bloomreach.com"},{"name":"davidboyd1","email":"david@davidboyd.com"},{"name":"drq","email":"drq@nxfinc.com"},{"name":"ntrajkovski","email":"nikola.trajkovski@bloomreach.com"},{"name":"bcanvural","email":"bcanvural@gmail.com"},{"name":"lachire","email":"charlie.chen@bloomreach.com"},{"name":"glm-bloomreach","email":"giacomo.lamonaco@bloomreach.com"},{"name":"mgiusto","email":"matteo.giusto@bloomreach.com"},{"name":"boudekerk","email":"bartosz.oudekerk@bloomreach.com"},{"name":"aakash.anand","email":"aakash.anand@bloomreach.com"},{"name":"prateek.pandey","email":"prateek.pandey@bloomreach.com"},{"name":"jeroenhoffman","email":"jeroen.hoffman@bloomreach.com"},{"name":"vahid.mehrjouei","email":"vahid.mehrjouei@bloomreach.com"},{"name":"shivanayak.dharavath2","email":"shiva.dharavath@bloomreach.com"},{"name":"wenjun.li","email":"wenjun.li@bloomreach.com"}],"homepage":"https://www.bloomreach.com","bugs":{"url":"https://bloomreach.atlassian.net/projects/SPASDK/issues"},"dist":{"shasum":"9a387d3e45030ac00e103a88df86caceff72c01e","tarball":"https://registry.npmjs.org/@bloomreach/lit-sdk/-/lit-sdk-28.0.1-beta.0.tgz","fileCount":8,"integrity":"sha512-2IgES5J91H+VNa5arQzAwTSYbm16AViWhVZzS8UbBvpMOfCZS5AhR6dpg9/9zA+8JKH31dGMrm4KEu+7bB0tQQ==","signatures":[{"sig":"MEUCIQD3ZKKyZY/lhA31Zerw4d6Bly7RDdFpRauK3LMsw62htgIgJbYj3rBFc+62zvp9UvLmyWrWyBaHhhpmEHbGkBe+ZfU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":190482},"main":"./dist/index.umd.cjs","type":"module","_from":"file:bloomreach-lit-sdk-28.0.1-beta.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.umd.cjs"}}},"scripts":{"dev":"vite build --watch","lint":"eslint src","test":"vitest run","build":"vite build","test:watch":"vitest"},"_npmUser":{"name":"lachire","email":"charlie.chen@bloomreach.com"},"_resolved":"/private/var/folders/vz/zphgmm9j6_1cry76w4pwtj1r0000gn/T/bb2162e5d65b693250369770ed975220/bloomreach-lit-sdk-28.0.1-beta.0.tgz","_integrity":"sha512-2IgES5J91H+VNa5arQzAwTSYbm16AViWhVZzS8UbBvpMOfCZS5AhR6dpg9/9zA+8JKH31dGMrm4KEu+7bB0tQQ==","repository":{"url":"git+https://github.com/bloomreach/spa-sdk.git","type":"git","directory":"packages/lit-sdk"},"_npmVersion":"10.8.2","description":"Bloomreach SPA SDK for Lit web components","directories":{},"_nodeVersion":"20.19.5","dependencies":{"@bloomreach/spa-sdk":"28.0.1-beta.0"},"_hasShrinkwrap":false,"devDependencies":{"lit":"3.3.2","vite":"6.4.2","jsdom":"26.1.0","eslint":"9.17.0","vitest":"3.2.4","@eslint/js":"9.17.0","typescript":"5.9.3","@lit/context":"1.1.6","vite-plugin-dts":"4.5.4","typescript-eslint":"8.53.0","eslint-plugin-import":"2.31.0","eslint-config-airbnb-base":"15.0.0"},"peerDependencies":{"lit":"^3.2.0","@lit/context":"^1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/lit-sdk_28.0.1-beta.0_1785491692747_0.604928069778196","host":"s3://npm-registry-packages-npm-production"}},"28.1.0":{"name":"@bloomreach/lit-sdk","version":"28.1.0","keywords":["bloomreach","sdk","lit","web-components"],"author":{"name":"Bloomreach B.V."},"license":"Apache-2.0","_id":"@bloomreach/lit-sdk@28.1.0","maintainers":[{"name":"beetlerom","email":"beetlerom@gmail.com"},{"name":"joerideg","email":"joeri.degooijer@bloomreach.com"},{"name":"abogaart","email":"arthur.bogaart@bloomreach.com"},{"name":"rishabh.chhabda","email":"rishabh.chhabda@bloomreach.com"},{"name":"rameshbr","email":"rameshkumar.arumugam@bloomreach.com"},{"name":"pcentgraf-bloomreach","email":"peter.centgraf@bloomreach.com"},{"name":"mjmetter","email":"michael.metternich@bloomreach.com"},{"name":"vlets","email":"georgevle93@gmail.com"},{"name":"pauledwardsbloomreach","email":"paul.edwards@bloomreach.com"},{"name":"davidboyd1","email":"david@davidboyd.com"},{"name":"drq","email":"drq@nxfinc.com"},{"name":"ntrajkovski","email":"nikola.trajkovski@bloomreach.com"},{"name":"bcanvural","email":"bcanvural@gmail.com"},{"name":"lachire","email":"charlie.chen@bloomreach.com"},{"name":"glm-bloomreach","email":"giacomo.lamonaco@bloomreach.com"},{"name":"mgiusto","email":"matteo.giusto@bloomreach.com"},{"name":"boudekerk","email":"bartosz.oudekerk@bloomreach.com"},{"name":"aakash.anand","email":"aakash.anand@bloomreach.com"},{"name":"prateek.pandey","email":"prateek.pandey@bloomreach.com"},{"name":"jeroenhoffman","email":"jeroen.hoffman@bloomreach.com"},{"name":"vahid.mehrjouei","email":"vahid.mehrjouei@bloomreach.com"},{"name":"shivanayak.dharavath2","email":"shiva.dharavath@bloomreach.com"},{"name":"wenjun.li","email":"wenjun.li@bloomreach.com"}],"homepage":"https://www.bloomreach.com","bugs":{"url":"https://bloomreach.atlassian.net/projects/SPASDK/issues"},"dist":{"shasum":"b00311c5df0f1bd0c2e2d8f20f635fd0bdcc031a","tarball":"https://registry.npmjs.org/@bloomreach/lit-sdk/-/lit-sdk-28.1.0.tgz","fileCount":8,"integrity":"sha512-UdoiWw/YRvvEDvlXfzxWQG5rsplQGJkPtTvVIO+q7OSxs6bWSOnwZEYbrUG8VbwF7NwYHw24M7dhmcLC+bY7Ig==","signatures":[{"sig":"MEUCICeoq1DgxPOLB4xvGZfz2IQ+YCoX7wseCRrpTwU6TX5VAiEAiVFdJWFfR7cIRTmJ+gf/G0v1NlkFf8tvV/XNJ0P5+RU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":190426},"main":"./dist/index.umd.cjs","type":"module","_from":"file:bloomreach-lit-sdk-28.1.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.umd.cjs"}}},"gitHead":"2ac1091046537b073351b1f22476d6579af5eacf","scripts":{"dev":"vite build --watch","lint":"eslint src","test":"vitest run","build":"vite build","test:watch":"vitest"},"_npmUser":{"name":"lachire","email":"charlie.chen@bloomreach.com"},"_resolved":"/tmp/652f28a0005176586e533ea812954bf6/bloomreach-lit-sdk-28.1.0.tgz","_integrity":"sha512-UdoiWw/YRvvEDvlXfzxWQG5rsplQGJkPtTvVIO+q7OSxs6bWSOnwZEYbrUG8VbwF7NwYHw24M7dhmcLC+bY7Ig==","repository":{"url":"git+https://github.com/bloomreach/spa-sdk.git","type":"git","directory":"packages/lit-sdk"},"_npmVersion":"10.8.2","description":"Bloomreach SPA SDK for Lit web components","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@bloomreach/spa-sdk":"28.1.0"},"_hasShrinkwrap":false,"devDependencies":{"lit":"3.3.2","vite":"6.4.2","jsdom":"26.1.0","eslint":"9.17.0","vitest":"3.2.4","@eslint/js":"9.17.0","typescript":"5.9.3","@lit/context":"1.1.6","vite-plugin-dts":"4.5.4","typescript-eslint":"8.53.0","eslint-plugin-import":"2.31.0","eslint-config-airbnb-base":"15.0.0"},"peerDependencies":{"lit":"^3.2.0","@lit/context":"^1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/lit-sdk_28.1.0_1786029661592_0.02947182036225282","host":"s3://npm-registry-packages-npm-production"}}},"time":{"created":"2026-05-07T11:13:12.928Z","modified":"2026-09-04T10:07:36.296Z","27.3.0":"2026-05-07T11:13:13.063Z","27.3.1":"2026-05-21T14:30:39.227Z","28.0.0":"2026-06-19T10:28:11.856Z","28.0.1-beta.0":"2026-07-31T09:54:52.888Z","28.1.0":"2026-08-06T15:21:01.790Z"},"bugs":{"url":"https://bloomreach.atlassian.net/projects/SPASDK/issues"},"author":{"name":"Bloomreach B.V."},"license":"Apache-2.0","homepage":"https://www.bloomreach.com","keywords":["bloomreach","sdk","lit","web-components"],"repository":{"url":"git+https://github.com/bloomreach/spa-sdk.git","type":"git","directory":"packages/lit-sdk"},"description":"Bloomreach SPA SDK for Lit web components","maintainers":[{"email":"beetlerom@gmail.com","name":"beetlerom"},{"email":"joeri.degooijer@bloomreach.com","name":"joerideg"},{"email":"arthur.bogaart@bloomreach.com","name":"abogaart"},{"email":"rishabh.chhabda@bloomreach.com","name":"rishabh.chhabda"},{"email":"rameshkumar.arumugam@bloomreach.com","name":"rameshbr"},{"email":"peter.centgraf@bloomreach.com","name":"pcentgraf-bloomreach"},{"email":"georgevle93@gmail.com","name":"vlets"},{"email":"paul.edwards@bloomreach.com","name":"pauledwardsbloomreach"},{"email":"david@davidboyd.com","name":"davidboyd1"},{"email":"drq@nxfinc.com","name":"drq"},{"email":"nikola.trajkovski@bloomreach.com","name":"ntrajkovski"},{"email":"bcanvural@gmail.com","name":"bcanvural"},{"email":"charlie.chen@bloomreach.com","name":"lachire"},{"email":"giacomo.lamonaco@bloomreach.com","name":"glm-bloomreach"},{"email":"matteo.giusto@bloomreach.com","name":"mgiusto"},{"email":"bartosz.oudekerk@bloomreach.com","name":"boudekerk"},{"email":"aakash.anand@bloomreach.com","name":"aakash.anand"},{"email":"prateek.pandey@bloomreach.com","name":"prateek.pandey"},{"email":"jeroen.hoffman@bloomreach.com","name":"jeroenhoffman"},{"email":"vahid.mehrjouei@bloomreach.com","name":"vahid.mehrjouei"},{"email":"wenjun.li@bloomreach.com","name":"wenjun.li"},{"email":"shiva.dharavath@bloomreach.com","name":"shivanayak.dharavath2"}],"readme":"# Bloomreach Lit SDK\n\nBloomreach Lit SDK integration for [Lit](https://lit.dev/) web components. This package provides the same component set as the React, Angular, and Vue SDKs — built with Lit patterns: custom elements, decorators, and `@lit/context` for state propagation.\n\n## Features\n\n- Lit custom elements for Bloomreach page rendering\n- Dynamic component mapping (brXM `ctype` to Lit tag name)\n- Experience Manager preview integration with live editing\n- Context-based state propagation via `@lit/context`\n- Full TypeScript support with re-exported spa-sdk types\n\n## Installation\n\n```bash\nnpm install @bloomreach/lit-sdk @bloomreach/spa-sdk\n```\n\n## Quick Start\n\n### 1. Create the app shell\n\n```typescript\nimport { LitElement, html } from 'lit';\nimport { customElement } from 'lit/decorators.js';\nimport type { Configuration } from '@bloomreach/spa-sdk';\nimport '@bloomreach/lit-sdk';\n\nimport './my-banner.js';\nimport './my-content.js';\n\nconst MAPPING: Record<string, string> = {\n  'Banner': 'my-banner',\n  'Content': 'my-content',\n};\n\n@customElement('my-app')\nexport class MyApp extends LitElement {\n  private get _config(): Configuration {\n    return {\n      endpoint: 'http://localhost:8080/site/resourceapi',\n      httpClient: async (config) => {\n        const response = await fetch(config.url, {\n          method: config.method,\n          headers: config.headers as Record<string, string>,\n          body: config.data,\n        });\n        return { data: await response.json() };\n      },\n      path: `${window.location.pathname}${window.location.search}`,\n    } as Configuration;\n  }\n\n  createRenderRoot() { return this; }\n\n  render() {\n    return html`\n      <br-page .configuration=${this._config} .mapping=${MAPPING}>\n        <header>\n          <br-component name=\"menu\"></br-component>\n        </header>\n        <main>\n          <br-component name=\"main\"></br-component>\n        </main>\n        <footer>\n          <br-component name=\"footer\"></br-component>\n        </footer>\n      </br-page>\n    `;\n  }\n}\n```\n\n### 2. Create a mapped component\n\nEvery mapped component receives `component` (ContainerItem) and `page` (Page) properties from the SDK:\n\n```typescript\nimport { LitElement, html, nothing } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport type { ContainerItem, Page } from '@bloomreach/spa-sdk';\nimport { getDocumentData } from '@bloomreach/lit-sdk';\n\ninterface BannerData {\n  title: string;\n  content: { value: string };\n}\n\n@customElement('my-banner')\nexport class MyBanner extends LitElement {\n  @property({ type: Object }) component?: ContainerItem;\n  @property({ type: Object }) page?: Page;\n\n  createRenderRoot() { return this; }\n\n  render() {\n    if (!this.component || !this.page) return nothing;\n    const data = getDocumentData<BannerData>(this.component, this.page);\n    if (!data) return nothing;\n\n    return html`\n      <div class=\"banner\">\n        <br-manage-content-button\n          .content=${this.page.getContent(this.component.getModels().document)}\n          .page=${this.page}\n        ></br-manage-content-button>\n        <h1>${data.title}</h1>\n      </div>\n    `;\n  }\n}\n```\n\n> **Note:** Use `createRenderRoot() { return this; }` (light DOM) on components that need `<br-manage-content-button>` or `<br-manage-menu-button>`, so the Experience Manager can find the meta comments.\n\n## Components\n\n### `<br-page>`\n\nRoot SDK component. Initializes the SPA SDK and provides Page, Component, and mapping to descendants via Lit Context.\n\n| Property | Type | Required | Description |\n|---|---|---|---|\n| `configuration` | `Configuration` | Yes | SPA SDK configuration (endpoint, httpClient, etc.) |\n| `mapping` | `Record<string, string>` | Yes | Maps brXM `ctype` strings to Lit custom element tag names |\n\nTwo rendering modes:\n- **Auto-render** (no children) — renders the full component tree\n- **Custom layout** (with children) — you control layout with `<br-component name=\"...\">`\n\n> **Note:** Auto-render mode uses a slot fallback internally. Ensure no whitespace or text nodes exist between the opening and closing `<br-page>` tags, as any light DOM content (including whitespace) will suppress the fallback. This is not an issue when using Lit template bindings.\n\n### `<br-component>`\n\nTraverses the brXM component tree by name and renders children recursively.\n\n| Property | Type | Required | Description |\n|---|---|---|---|\n| `name` | `string` | No | Name of the child component to resolve |\n\nThe `name` values correspond to component names in the brXM page layout (e.g., `menu`, `main`, `footer`).\n\n### `<br-manage-content-button>`\n\nRenders an \"Edit content\" overlay in Experience Manager preview mode.\n\n| Property | Type | Required | Description |\n|---|---|---|---|\n| `content` | `Document` | No | The content object to edit |\n| `page` | `Page` | No | Direct page reference |\n| `documentTemplateQuery` | `string` | No | Template query for new documents |\n| `folderTemplateQuery` | `string` | No | Template query for new folders |\n| `parameter` | `string` | No | Component parameter name |\n| `relative` | `boolean` | No | Store as relative path |\n| `root` | `string` | No | Root folder path |\n| `pickerSelectableNodeTypes` | `string` | No | Selectable node types for picker |\n| `pickerConfiguration` | `string` | No | CMS picker configuration path |\n| `pickerInitialPath` | `string` | No | Initial path for the picker |\n\n### `<br-manage-menu-button>`\n\nRenders an \"Edit menu\" overlay in Experience Manager preview mode.\n\n| Property | Type | Required | Description |\n|---|---|---|---|\n| `menu` | `Menu` | Yes | The menu model to edit |\n| `page` | `Page` | No | Direct page reference |\n\n## Component Mapping\n\nThe `mapping` property on `<br-page>` maps brXM `ctype` strings to Lit custom element tag names:\n\n```typescript\nconst MAPPING: Record<string, string> = {\n  'Banner': 'my-banner',\n  'Content': 'my-content',\n  'News List': 'my-news-list',\n  'Simple Content': 'my-content',   // multiple ctypes can map to one element\n};\n```\n\nThe `ctype` is read from `ContainerItem.getType()` (falls back to the component label). Unmapped ctypes produce a console warning.\n\n## Data Extraction\n\n### `getDocumentData<T>(component, page)`\n\nResolves document data for container items using the standard `models.document` pattern:\n\n```typescript\nimport { getDocumentData } from '@bloomreach/lit-sdk';\n\nconst data = getDocumentData<BannerData>(component, page);\n```\n\n### `getContainerItemContent<T>(component, page)`\n\nResolves content from the `content` field pattern (alternative to document references):\n\n```typescript\nimport { getContainerItemContent } from '@bloomreach/lit-sdk';\n\nconst data = getContainerItemContent<BannerData>(component, page);\n```\n\n## Context System\n\nThe SDK uses `@lit/context` to propagate state without prop-drilling:\n\n| Context | Type | Provider | Description |\n|---|---|---|---|\n| `brPageContext` | `Page` | `<br-page>` | The initialized Page object |\n| `brComponentContext` | `Component` | `<br-page>`, `<br-component>` | Current component in the tree |\n| `brMappingContext` | `Record<string, string>` | `<br-page>` | The ctype-to-tag-name mapping |\n\nYou typically don't consume these directly — the SDK passes `component` and `page` as properties to mapped elements. For components outside the mapping (e.g., a menu), consume the context:\n\n```typescript\nimport { consume } from '@lit/context';\nimport { brPageContext } from '@bloomreach/lit-sdk';\n\n@customElement('my-menu')\nclass MyMenu extends LitElement {\n  @consume({ context: brPageContext, subscribe: true })\n  private page?: Page;\n}\n```\n\n## Experience Manager Preview\n\nWhen running in the Experience Manager iframe, the SDK automatically handles:\n\n1. **JWT Authentication** — Token from `?token=` included in API requests\n2. **DOM Comments** — Meta comments injected for editing overlays\n3. **`page.sync()`** — Called after renders to reposition overlays\n4. **Live updates** — Re-renders on content editor changes\n\n---\n\n## Advanced Topics\n\n### Internal components\n\n`<br-container>` and `<br-container-item>` are internal components instantiated automatically by `<br-component>`. You don't use them directly. `<br-container-item>` resolves the `ctype`, creates the mapped element, sets `component`/`page` properties, and handles the `isHidden()` Relevance feature.\n\n### Shadow DOM vs Light DOM\n\n| Component | DOM Mode | Reason |\n|---|---|---|\n| `<br-page>` | Shadow DOM | Uses `<slot>` for layout projection |\n| `<br-component>`, `<br-container>`, `<br-container-item>` | Light DOM | EM meta comments need light DOM |\n| `<br-manage-content-button>`, `<br-manage-menu-button>` | Light DOM | EM meta comments need light DOM |\n| **Your mapped components** | Either | Use light DOM if the component needs a manage button |\n\nYour app shell should also use light DOM (`createRenderRoot() { return this; }`).\n\n### Shadow DOM manage button (`renderTarget`)\n\nIf your mapped component must use Shadow DOM but needs a manage button, pass `renderTarget` to inject meta comments in the light DOM:\n\n```html\n<br-manage-content-button\n  .content=${document}\n  .page=${this.page}\n  .renderTarget=${this}\n></br-manage-content-button>\n```\n\n### Field name mapping\n\nbrXM compound fields may use type-specific names (e.g., `featureitem` instead of `items`). Inspect the Delivery API response and map fields in your component:\n\n```typescript\nconst raw = getDocumentData<any>(this.component, this.page);\nconst data = { ...raw, items: raw.featureitem ?? raw.items ?? [] };\n```\n\n### Dual-mode components\n\nComponents that work both with the SDK and standalone data props:\n\n```typescript\n@customElement('my-component')\nexport class MyComponent extends LitElement {\n  @property({ type: Object }) data?: MyData;\n  @property({ type: Object }) component?: ContainerItem;\n  @property({ type: Object }) page?: Page;\n\n  private _getData(): MyData | undefined {\n    if (this.component && this.page) {\n      return getDocumentData<MyData>(this.component, this.page);\n    }\n    return this.data;\n  }\n}\n```\n\n### API Reference\n\n**Components:** `BrPage`, `BrComponent`, `BrComponentNode`, `BrContainer`, `BrContainerItem`, `BrManageContentButton`, `BrManageMenuButton`\n\n**Contexts:** `brPageContext`, `brComponentContext`, `brMappingContext`\n\n**Utilities:** `getDocumentData`, `getContainerItemContent`, `isInternalLink`, `isExternalLink`\n\n**Type guards** (re-exported from `@bloomreach/spa-sdk`): `isComponent`, `isContainer`, `isContainerItem`, `isDocument`, `isImageSet`, `isLink`, `isMenu`, `isMetaComment`, `isMeta`, `isPage`, `isPagination`, `isReference`\n\n**Types** (re-exported from `@bloomreach/spa-sdk`): `Page`, `Component`, `ContainerItem`, `Container`, `Document`, `ImageSet`, `Image`, `Link`, `Menu`, `MenuItem`, `MetaCollection`, `MetaComment`, `Meta`, `PageModel`, `Configuration`, `ManageContentButton`, `Reference`\n\n**Functions** (re-exported from `@bloomreach/spa-sdk`): `initialize`, `destroy`\n\n### Troubleshooting\n\n- **\"this.httpClient is not a function\"** — Provide an `httpClient` in the configuration. See [Quick Start](#quick-start).\n- **\"No mapping found for ctype\"** — The `ctype` from brXM doesn't match your mapping keys. Check the Delivery API response for exact values (case-sensitive).\n- **Components render empty** — Verify `getDocumentData()` returns data. Check the Network tab for API responses.\n- **Context not reaching components** — Ensure your app shell uses light DOM.\n- **EM overlays not appearing** — Check `page.isPreview()`, CORS headers, and preview URL configuration.\n","readmeFilename":"README.md"}