{"_id":"@bytive/jewel-try-me","_rev":"10-3aece33aae123ede8437cac2aa0fbb8c","name":"@bytive/jewel-try-me","dist-tags":{"latest":"0.2.8"},"versions":{"0.1.3":{"name":"@bytive/jewel-try-me","version":"0.1.3","keywords":["react","virtual-try-on","jewelry","mediapipe","ar","ecommerce"],"author":"","license":"UNLICENSED","_id":"@bytive/jewel-try-me@0.1.3","maintainers":[{"name":"ted.kishan","email":"ted.kishan@gmail.com"}],"dist":{"shasum":"adc79172c9e4903fe9f1cc79e414aed3d6037355","tarball":"https://registry.npmjs.org/@bytive/jewel-try-me/-/jewel-try-me-0.1.3.tgz","fileCount":9,"integrity":"sha512-3dlGz5A4y54ek8KiDSoHCBEq2qpaeGrjtpfLwuYX9ZXefYcEKZX3brOobmvk1pK2dhfSdB4VON4O0NeHxgpylw==","signatures":[{"sig":"MEUCIA7ySVdBPJTD7fn3y9DRQ/06WQ8jqwNXSWPGZIPgUvsOAiEAqchjZ+LcxsfCLnVR1uPAcKUe7bo4eoUkb7gQt6n4pqI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":833773},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./styles.css":"./dist/styles.css"},"gitHead":"36b864a0ebc9a16c6076d94a28bcceac9ec47330","scripts":{"dev":"tsup --watch","build":"bun run build:js && bun run build:css","build:js":"tsup","build:css":"tailwindcss -i src/styles.css -o dist/styles.css --minify","typecheck":"tsc --noEmit","prepublishOnly":"bun run typecheck && bun run build"},"_npmUser":{"name":"ted.kishan","email":"ted.kishan@gmail.com"},"_npmVersion":"10.9.2","description":"Virtual jewelry try-on React component powered by MediaPipe + Gemini.","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"23.11.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8","react":"^19","react-dom":"^19","typescript":"^5","tailwindcss":"^4","@types/react":"^19","@tailwindcss/cli":"^4","@types/react-dom":"^19","@mediapipe/tasks-vision":"^0.10.33"},"peerDependencies":{"react":">=18","react-dom":">=18","@mediapipe/tasks-vision":">=0.10"},"_npmOperationalInternal":{"tmp":"tmp/jewel-try-me_0.1.3_1778184363711_0.5921307179364281","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@bytive/jewel-try-me","version":"0.1.4","keywords":["react","virtual-try-on","jewelry","mediapipe","ar","ecommerce"],"author":"","license":"UNLICENSED","_id":"@bytive/jewel-try-me@0.1.4","maintainers":[{"name":"ted.kishan","email":"ted.kishan@gmail.com"}],"dist":{"shasum":"59417f29d434e8d1057e49f0b5affbf16e0f5abd","tarball":"https://registry.npmjs.org/@bytive/jewel-try-me/-/jewel-try-me-0.1.4.tgz","fileCount":9,"integrity":"sha512-egvYD3jqKH5n/HbDDwPJNTqKF/s5WrTL588juZ9TxjJbI6vZzETlS48l6JSab6CJyB9m5PZuCRrvy9U/a+el4g==","signatures":[{"sig":"MEQCICKBgoo+9GOX9YEd9vZ7lXRb789NxPSYA1DPISGXPr3WAiA5yHkjSMfKvJruDZUfUm1incbFlC+kW1+WEfPX86Hu1Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":833773},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./styles.css":"./dist/styles.css"},"scripts":{"dev":"tsup --watch","build":"bun run build:js && bun run build:css","build:js":"tsup","build:css":"tailwindcss -i src/styles.css -o dist/styles.css --minify","typecheck":"tsc --noEmit","prepublishOnly":"bun run typecheck && bun run build"},"_npmUser":{"name":"ted.kishan","email":"ted.kishan@gmail.com"},"_npmVersion":"10.9.2","description":"Virtual jewelry try-on React component powered by MediaPipe + Gemini.","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"23.11.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8","react":"^19","react-dom":"^19","typescript":"^5","tailwindcss":"^4","@types/react":"^19","@tailwindcss/cli":"^4","@types/react-dom":"^19","@mediapipe/tasks-vision":"^0.10.33"},"peerDependencies":{"react":">=18","react-dom":">=18","@mediapipe/tasks-vision":">=0.10"},"_npmOperationalInternal":{"tmp":"tmp/jewel-try-me_0.1.4_1778186532571_0.09709461345861081","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@bytive/jewel-try-me","version":"0.1.5","keywords":["react","virtual-try-on","jewelry","mediapipe","ar","ecommerce"],"author":"","license":"UNLICENSED","_id":"@bytive/jewel-try-me@0.1.5","maintainers":[{"name":"ted.kishan","email":"ted.kishan@gmail.com"}],"dist":{"shasum":"870f4fa47acbe9c5fcb5c0b675a0d5ef1a047581","tarball":"https://registry.npmjs.org/@bytive/jewel-try-me/-/jewel-try-me-0.1.5.tgz","fileCount":9,"integrity":"sha512-Qss/poEpts25WZDiOCXIblJZRGkNaZwiccO/d+I+SCtLH5Rlcp4ekOEv/+hnUiSSN0ksGWmfpM2aywqLacqDjg==","signatures":[{"sig":"MEQCICdwRhx8bcMle3YcEH2t2VJX2uqldPDET1mFRa5tU1GKAiALQLaVmRsOY17iR66WDXqIL+Ch4huL2p3lSwsq6jmiDA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":833877},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./styles.css":"./dist/styles.css"},"scripts":{"dev":"tsup --watch","build":"bun run build:js && bun run build:css","build:js":"tsup","build:css":"tailwindcss -i src/styles.css -o dist/styles.css --minify","typecheck":"tsc --noEmit","prepublishOnly":"bun run typecheck && bun run build"},"_npmUser":{"name":"ted.kishan","email":"ted.kishan@gmail.com"},"_npmVersion":"10.9.2","description":"Virtual jewelry try-on React component powered by MediaPipe + Gemini.","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"23.11.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8","react":"^19","react-dom":"^19","typescript":"^5","tailwindcss":"^4","@types/react":"^19","@tailwindcss/cli":"^4","@types/react-dom":"^19","@mediapipe/tasks-vision":"^0.10.33"},"peerDependencies":{"react":">=18","react-dom":">=18","@mediapipe/tasks-vision":">=0.10"},"_npmOperationalInternal":{"tmp":"tmp/jewel-try-me_0.1.5_1778186765376_0.4507530784267473","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@bytive/jewel-try-me","version":"0.2.1","keywords":["react","virtual-try-on","jewelry","mediapipe","ar","ecommerce"],"author":"","license":"UNLICENSED","_id":"@bytive/jewel-try-me@0.2.1","maintainers":[{"name":"ted.kishan","email":"ted.kishan@gmail.com"}],"dist":{"shasum":"49b70734454fbe707fc06eec6513cc2ad4505c51","tarball":"https://registry.npmjs.org/@bytive/jewel-try-me/-/jewel-try-me-0.2.1.tgz","fileCount":9,"integrity":"sha512-AwAe3/HHh+ZoAOeE6UfZ7ilFiupFd494e0kvxjZDnimO/J1Mi6OKB5gAyCaPOax6bvzQjk++kkEDo8tCc9CjxA==","signatures":[{"sig":"MEUCIHeZxgGYvd1TOBBYg87bjsGu5yVr2b4v9rJJnFF8EhwWAiEA0YtDqEbZUtT4a2pX5FsUbix5bk41f2pcCDmWnAphs6g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":11229153},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./styles.css":"./dist/styles.css"},"scripts":{"dev":"tsup --watch","build":"bun run build:js && bun run build:css","build:js":"tsup","build:css":"tailwindcss -i src/styles.css -o dist/styles.css --minify","typecheck":"tsc --noEmit","prepublishOnly":"bun run typecheck && bun run build"},"_npmUser":{"name":"ted.kishan","email":"ted.kishan@gmail.com"},"_npmVersion":"10.9.2","description":"Virtual jewelry try-on React component powered by MediaPipe + Gemini.","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"23.11.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8","react":"^19","react-dom":"^19","typescript":"^5","tailwindcss":"^4","@types/react":"^19","@tailwindcss/cli":"^4","@types/react-dom":"^19","@mediapipe/tasks-vision":"^0.10.33"},"peerDependencies":{"react":">=18","react-dom":">=18","@mediapipe/tasks-vision":">=0.10"},"_npmOperationalInternal":{"tmp":"tmp/jewel-try-me_0.2.1_1778188834817_0.2209900045386224","host":"s3://npm-registry-packages-npm-production"}},"0.2.3":{"name":"@bytive/jewel-try-me","version":"0.2.3","keywords":["react","virtual-try-on","jewelry","mediapipe","ar","ecommerce"],"author":"","license":"UNLICENSED","_id":"@bytive/jewel-try-me@0.2.3","maintainers":[{"name":"ted.kishan","email":"ted.kishan@gmail.com"}],"dist":{"shasum":"cdab281f4236fe4b22b60dcb0e342be43e22b526","tarball":"https://registry.npmjs.org/@bytive/jewel-try-me/-/jewel-try-me-0.2.3.tgz","fileCount":9,"integrity":"sha512-xjN/gfUREFfTTMoiacrlYhwrxcMDOa8oD14eziZU4dJt9uiiR5lkEc8B/omF0EDyEBwngzAW6Vbco1HXQg+WMQ==","signatures":[{"sig":"MEQCIC4ffWwmupxaYDQ88I1Bk3cYDHCWZ3whPDjCnt6FvsxOAiAFmedTpM8tb51y/aGJbQhv+3+IehDOrepMxFVmMNVdFg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":846935},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./styles.css":"./dist/styles.css"},"gitHead":"2dd5110f1e138a40ffee2d39692c966917fcdba7","scripts":{"dev":"tsup --watch","build":"bun run build:js && bun run build:css","build:js":"tsup","build:css":"tailwindcss -i src/styles.css -o dist/styles.css --minify","typecheck":"tsc --noEmit","prepublishOnly":"bun run typecheck && bun run build"},"_npmUser":{"name":"ted.kishan","email":"ted.kishan@gmail.com"},"_npmVersion":"10.9.2","description":"Virtual jewelry try-on React component powered by MediaPipe + Gemini.","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"23.11.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8","react":"^19","react-dom":"^19","typescript":"^5","tailwindcss":"^4","@types/react":"^19","@tailwindcss/cli":"^4","@types/react-dom":"^19","@mediapipe/tasks-vision":"^0.10.33"},"peerDependencies":{"react":">=18","react-dom":">=18","@mediapipe/tasks-vision":">=0.10"},"_npmOperationalInternal":{"tmp":"tmp/jewel-try-me_0.2.3_1778622165248_0.725488812073914","host":"s3://npm-registry-packages-npm-production"}},"0.2.4":{"name":"@bytive/jewel-try-me","version":"0.2.4","keywords":["react","virtual-try-on","jewelry","mediapipe","ar","ecommerce"],"author":"","license":"UNLICENSED","_id":"@bytive/jewel-try-me@0.2.4","maintainers":[{"name":"ted.kishan","email":"ted.kishan@gmail.com"}],"dist":{"shasum":"eed5c1fb7428289ce767d9c9db273506c31577f2","tarball":"https://registry.npmjs.org/@bytive/jewel-try-me/-/jewel-try-me-0.2.4.tgz","fileCount":9,"integrity":"sha512-LbmWauLZgnvCeoEFg+lTG+1R1D1kiNiOeiyW7AycXQJCZpR58DJEMafh8loVZjBPPNBIJ+7oiYK4J16wDIj+Iw==","signatures":[{"sig":"MEQCICu5MbRR39+l3lR3648oQ1EMrS3N24M1Fd3wxDPa/b/8AiBUJoHj+PlvDLt9/Ao5mYIHcP+P9pFQ33DSEm8mJbT6Ow==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":847043},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./styles.css":"./dist/styles.css"},"gitHead":"0f6715aab8be4ba24836cd93d5a6b4594c436810","scripts":{"dev":"tsup --watch","build":"bun run build:js && bun run build:css","build:js":"tsup","build:css":"tailwindcss -i src/styles.css -o dist/styles.css --minify","typecheck":"tsc --noEmit","prepublishOnly":"bun run typecheck && bun run build"},"_npmUser":{"name":"ted.kishan","email":"ted.kishan@gmail.com"},"_npmVersion":"10.9.2","description":"Virtual jewelry try-on React component powered by MediaPipe + Gemini.","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"23.11.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8","react":"^19","react-dom":"^19","typescript":"^5","tailwindcss":"^4","@types/react":"^19","@tailwindcss/cli":"^4","@types/react-dom":"^19","@mediapipe/tasks-vision":"^0.10.33"},"peerDependencies":{"react":">=18","react-dom":">=18","@mediapipe/tasks-vision":">=0.10"},"_npmOperationalInternal":{"tmp":"tmp/jewel-try-me_0.2.4_1778624181909_0.3190259465255918","host":"s3://npm-registry-packages-npm-production"}},"0.2.5":{"name":"@bytive/jewel-try-me","version":"0.2.5","keywords":["react","virtual-try-on","jewelry","mediapipe","ar","ecommerce"],"author":"","license":"UNLICENSED","_id":"@bytive/jewel-try-me@0.2.5","maintainers":[{"name":"ted.kishan","email":"ted.kishan@gmail.com"}],"dist":{"shasum":"5453433ee8258c10c868dad97cca80878d06fd52","tarball":"https://registry.npmjs.org/@bytive/jewel-try-me/-/jewel-try-me-0.2.5.tgz","fileCount":9,"integrity":"sha512-RxC9tLDki8hbWJtJp+eiOfZDhnXxgAd1eFBhTOjIX0cLFzrJ3+/gcXRWg/iSqZH9sS/pjsAzeREVziyvl0A/1A==","signatures":[{"sig":"MEUCIQC6DT7x3Szg7AfgVCEPelkWPh9GXspmtCOrpAUacWqreQIgAzAm3CxkxR3c1jbXE1+Q/Yd8ktAfufNBarwCMPGtko4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":852770},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./styles.css":"./dist/styles.css"},"gitHead":"4a70bec8341b75476c7fb59e81d197ceefa527a3","scripts":{"dev":"tsup --watch","build":"bun run build:js && bun run build:css && bun run sync:frontend","build:js":"tsup","build:css":"tailwindcss -i src/styles.css -o dist/styles.css --minify","typecheck":"tsc --noEmit","sync:frontend":"rm -rf ../frontend/node_modules/@bytive/jewel-try-me/dist && mkdir -p ../frontend/node_modules/@bytive/jewel-try-me/dist && cp -r dist/* ../frontend/node_modules/@bytive/jewel-try-me/dist/ && cp package.json README.md ../frontend/node_modules/@bytive/jewel-try-me/","prepublishOnly":"bun run typecheck && bun run build"},"_npmUser":{"name":"ted.kishan","email":"ted.kishan@gmail.com"},"_npmVersion":"10.9.2","description":"Virtual jewelry try-on React component powered by MediaPipe + Gemini.","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"23.11.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8","react":"^19","react-dom":"^19","typescript":"^5","tailwindcss":"^4","@types/react":"^19","@tailwindcss/cli":"^4","@types/react-dom":"^19","@mediapipe/tasks-vision":"^0.10.33"},"peerDependencies":{"react":">=18","react-dom":">=18","@mediapipe/tasks-vision":">=0.10"},"_npmOperationalInternal":{"tmp":"tmp/jewel-try-me_0.2.5_1778662542250_0.9390643386477442","host":"s3://npm-registry-packages-npm-production"}},"0.2.6":{"name":"@bytive/jewel-try-me","version":"0.2.6","keywords":["react","virtual-try-on","jewelry","mediapipe","ar","ecommerce"],"author":"","license":"UNLICENSED","_id":"@bytive/jewel-try-me@0.2.6","maintainers":[{"name":"ted.kishan","email":"ted.kishan@gmail.com"}],"dist":{"shasum":"05ec770a1bc6fbbcb51c13a2ce175b7440564099","tarball":"https://registry.npmjs.org/@bytive/jewel-try-me/-/jewel-try-me-0.2.6.tgz","fileCount":9,"integrity":"sha512-u7Xi7xbw5ZolZ0frbOpiufP8Faf9PyBt8Zh+uuapOsWJrsp5bBoQkWxPSqpzeGvF6/n3HTTVXWaCdeSNaznciA==","signatures":[{"sig":"MEYCIQDVZMX7HL8+mubkXD807Y3FrFq+cb4Tmt3rUD5WMPw/yQIhALvo2vEU0XLxGhB2cEbB6BFwN8y3k8OHTAdU2GEdr8J8","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":852261},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./styles.css":"./dist/styles.css"},"gitHead":"967198f5665b5c58a967df9cc2a437f8a98b78d1","scripts":{"dev":"tsup --watch","build":"bun run build:js && bun run build:css && bun run sync:frontend","build:js":"tsup","build:css":"tailwindcss -i src/styles.css -o dist/styles.css --minify","typecheck":"tsc --noEmit","sync:frontend":"rm -rf ../frontend/node_modules/@bytive/jewel-try-me/dist && mkdir -p ../frontend/node_modules/@bytive/jewel-try-me/dist && cp -r dist/* ../frontend/node_modules/@bytive/jewel-try-me/dist/ && cp package.json README.md ../frontend/node_modules/@bytive/jewel-try-me/","prepublishOnly":"bun run typecheck && bun run build"},"_npmUser":{"name":"ted.kishan","email":"ted.kishan@gmail.com"},"_npmVersion":"10.9.2","description":"Virtual jewelry try-on React component powered by MediaPipe + Gemini.","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"23.11.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8","react":"^19","react-dom":"^19","typescript":"^5","tailwindcss":"^4","@types/react":"^19","@tailwindcss/cli":"^4","@types/react-dom":"^19","@mediapipe/tasks-vision":"^0.10.33"},"peerDependencies":{"react":">=18","react-dom":">=18","@mediapipe/tasks-vision":">=0.10"},"_npmOperationalInternal":{"tmp":"tmp/jewel-try-me_0.2.6_1778665217171_0.7916264430141999","host":"s3://npm-registry-packages-npm-production"}},"0.2.7":{"name":"@bytive/jewel-try-me","version":"0.2.7","keywords":["react","virtual-try-on","jewelry","mediapipe","ar","ecommerce"],"author":"","license":"UNLICENSED","_id":"@bytive/jewel-try-me@0.2.7","maintainers":[{"name":"ted.kishan","email":"ted.kishan@gmail.com"}],"dist":{"shasum":"eebad79a6b96abee6ed5f961eaa44eedcb9eb111","tarball":"https://registry.npmjs.org/@bytive/jewel-try-me/-/jewel-try-me-0.2.7.tgz","fileCount":9,"integrity":"sha512-bXndT9o1sShjGpqIIjpP2RN6MMnCmaI4PUR1TFHZN0cJpZb74+BA0rBr7l87u5U9YHb8kiG1ZcFvdkGYb1sHkQ==","signatures":[{"sig":"MEUCIQDxzgx24B5lPI4K+c4o5vnC6DCXEyRUl36CxNkpNsU8bwIgYmcHSZ4G1o7e5wJu4pOtbRKNaKj+PSGOVdNjMV72Qf0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":852261},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./styles.css":"./dist/styles.css"},"gitHead":"a774dc72b6fa78f89c1c734b33f229de84875dc2","scripts":{"dev":"tsup --watch","build":"bun run build:js && bun run build:css && bun run sync:frontend","build:js":"tsup","build:css":"tailwindcss -i src/styles.css -o dist/styles.css --minify","typecheck":"tsc --noEmit","sync:frontend":"rm -rf ../frontend/node_modules/@bytive/jewel-try-me/dist && mkdir -p ../frontend/node_modules/@bytive/jewel-try-me/dist && cp -r dist/* ../frontend/node_modules/@bytive/jewel-try-me/dist/ && cp package.json README.md ../frontend/node_modules/@bytive/jewel-try-me/","prepublishOnly":"bun run typecheck && bun run build"},"_npmUser":{"name":"ted.kishan","email":"ted.kishan@gmail.com"},"_npmVersion":"10.9.2","description":"Virtual jewelry try-on React component powered by MediaPipe + Gemini.","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"23.11.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8","react":"^19","react-dom":"^19","typescript":"^5","tailwindcss":"^4","@types/react":"^19","@tailwindcss/cli":"^4","@types/react-dom":"^19","@mediapipe/tasks-vision":"^0.10.33"},"peerDependencies":{"react":">=18","react-dom":">=18","@mediapipe/tasks-vision":">=0.10"},"_npmOperationalInternal":{"tmp":"tmp/jewel-try-me_0.2.7_1778669708250_0.47286877970654695","host":"s3://npm-registry-packages-npm-production"}},"0.2.8":{"name":"@bytive/jewel-try-me","version":"0.2.8","description":"Virtual jewelry try-on React component powered by MediaPipe + Gemini.","type":"module","main":"./dist/index.cjs","module":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./styles.css":"./dist/styles.css"},"sideEffects":["**/*.css","**/styles.generated.*","./dist/index.js","./dist/index.cjs"],"scripts":{"build:js":"tsup","build:css":"tailwindcss -i src/styles.css -o dist/styles.css --minify","build:inject":"node scripts/build-style-injector.mjs","build":"rm -rf dist && bun run build:css && bun run build:inject && bun run build:js && bun run sync:frontend","sync:frontend":"rm -rf ../frontend/node_modules/@bytive/jewel-try-me/dist && mkdir -p ../frontend/node_modules/@bytive/jewel-try-me/dist && cp -r dist/* ../frontend/node_modules/@bytive/jewel-try-me/dist/ && cp package.json README.md ../frontend/node_modules/@bytive/jewel-try-me/","dev":"tsup --watch","typecheck":"tsc --noEmit","prepublishOnly":"bun run typecheck && bun run build"},"publishConfig":{"access":"public"},"keywords":["react","virtual-try-on","jewelry","mediapipe","ar","ecommerce"],"license":"UNLICENSED","peerDependencies":{"react":">=18","react-dom":">=18","@mediapipe/tasks-vision":">=0.10"},"devDependencies":{"@tailwindcss/cli":"^4","@types/react":"^19","@types/react-dom":"^19","react":"^19","react-dom":"^19","@mediapipe/tasks-vision":"^0.10.33","tailwindcss":"^4","tsup":"^8","typescript":"^5"},"author":"","_id":"@bytive/jewel-try-me@0.2.8","gitHead":"7bd080e4d0ec4532ea8a383c68c4b98f84636fbd","_nodeVersion":"23.11.0","_npmVersion":"10.9.2","dist":{"integrity":"sha512-MXxKqfvw8s94m8WUsiD9HKEUtfqAdwjhmA1aaEW9NbsYtjkvqqLwA767i82bURLrftBIH+V4cEGK/u8PflDa1Q==","shasum":"bc39cf82fabaf0ea4cbaf5d932c7ebed9bca919b","tarball":"https://registry.npmjs.org/@bytive/jewel-try-me/-/jewel-try-me-0.2.8.tgz","fileCount":9,"unpackedSize":925289,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIFrC0XjuacdS2QlZXypNpbP9TKXJ3Ge0nnjkeV4rZkyfAiAFN1sxdsXc7hMAsvZc++fk2Ti09rm3W80gcKDXQ/ET1A=="}]},"_npmUser":{"name":"ted.kishan","email":"ted.kishan@gmail.com"},"directories":{},"maintainers":[{"name":"ted.kishan","email":"ted.kishan@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/jewel-try-me_0.2.8_1778670767634_0.5628203974609667"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-07T20:06:03.582Z","modified":"2026-05-13T11:12:47.954Z","0.1.3":"2026-05-07T20:06:03.900Z","0.1.4":"2026-05-07T20:42:12.818Z","0.1.5":"2026-05-07T20:46:05.602Z","0.2.1":"2026-05-07T21:20:35.261Z","0.2.3":"2026-05-12T21:42:45.436Z","0.2.4":"2026-05-12T22:16:22.105Z","0.2.5":"2026-05-13T08:55:42.407Z","0.2.6":"2026-05-13T09:40:17.424Z","0.2.7":"2026-05-13T10:55:08.525Z","0.2.8":"2026-05-13T11:12:47.819Z"},"license":"UNLICENSED","keywords":["react","virtual-try-on","jewelry","mediapipe","ar","ecommerce"],"description":"Virtual jewelry try-on React component powered by MediaPipe + Gemini.","maintainers":[{"name":"ted.kishan","email":"ted.kishan@gmail.com"}],"readme":"# @bytive/jewel-try-me\n\nDrop-in virtual jewelry try-on widget for React. One component renders a \"Try It On\" trigger button on your PDP plus a modal/drawer with three modes: live webcam, photo upload, and a static hand demo with a skin-tone slider.\n\n## Install\n\n```bash\nnpm install @bytive/jewel-try-me @mediapipe/tasks-vision\n# or\nbun add @bytive/jewel-try-me @mediapipe/tasks-vision\n```\n\n`react`, `react-dom`, and `@mediapipe/tasks-vision` are peer deps — your app provides them.\n\n## Usage\n\n```tsx\n'use client'; // Next.js App Router\n\nimport { TryOnWidget, type JewelryItem, type Catalog } from '@bytive/jewel-try-me';\nimport '@bytive/jewel-try-me/styles.css';\n\nconst product: JewelryItem = {\n  id: 'RG001',\n  name: 'Akira Cluster Ring',\n  type: 'ring',\n  imageUrl: '/assets/jewelry/RG001_ring.png',\n  price: 26469,\n  overlayConfig: { anchorType: 'finger', scaleFactor: 1.2, offsetX: 0, offsetY: 0 },\n};\n\nconst catalog: Catalog = {\n  rings: [product /* …others */],\n  necklaces: [/* … */],\n  earrings: [/* … */],\n  bracelets: [/* … */],\n};\n\nexport default function PDP() {\n  return (\n    <TryOnWidget\n      apiKey=\"your_gemini_api_key\"\n      aiApiKey=\"AIza...\"                 // optional — enables Refine with AI\n      product={product}                  // primary item, pre-selected\n      catalog={catalog}                  // alternates, grouped by category\n      onAddToCart={(item) => addToCart(item)}\n    />\n  );\n}\n```\n\nThe component renders its own \"Try It On\" trigger button. Mount it once on your PDP — the modal/drawer is internal.\n\n### Props\n\n| prop | required | what it does |\n|---|---|---|\n| `apiKey` | ✓ | Bytive license key. Sent as `X-Bytive-Key` to the hosted backend. |\n| `product` | ✓ | The product currently shown on your PDP. Pre-selected in its category; name shown in widget header. |\n| `catalog` | ✓ | `{ rings?, necklaces?, earrings?, bracelets? }`. Only the keys you supply appear as chips. |\n| `aiApiKey` | — | Gemini key for the AI Refine feature. If absent, the Refine button is hidden. |\n| `onAddToCart` | — | `(item) => void`. If absent, the Add-to-Cart button is hidden. |\n| `handImageUrls` | — | `[dark, medium, light]` URLs to override the bundled hand photos. |\n| `hideTrigger` | — | Skip the default trigger button — pair with `open` / `onOpenChange` for controlled mode. |\n| `open` / `onOpenChange` | — | Controlled open state. |\n\n### `JewelryItem` shape\n\n```ts\n{\n  id: string;\n  name: string;\n  type: 'ring' | 'necklace' | 'earring' | 'bracelet';\n  imageUrl: string;          // PNG with transparent background\n  price?: number;            // shown as ₹ in footer + grid\n  overlayConfig: {\n    anchorType: 'finger' | 'neck' | 'ears' | 'wrist';\n    scaleFactor: number;     // per-item size knob\n    offsetX: number;         // normalized canvas units\n    offsetY: number;\n    placement?: 'collar' | 'choker' | 'princess' | 'matinee' | 'opera' |\n                'rope' | 'lariat' | 'layered' | 'yPendant';\n    earringStyle?: 'stud' | 'huggie' | 'hoop' | 'drop' | 'chandelier' |\n                   'jacket' | 'threader' | 'climber' | 'cuff' | 'tassel' |\n                   'statement';\n    finger?: 'thumb' | 'index' | 'middle' | 'ring' | 'pinky';\n    ringPosition?: 'base' | 'mid' | 'midi' | 'tip';\n    braceletStyle?: 'watch' | 'tennis' | 'bangle' | 'cuff';\n  };\n}\n```\n\n## Behavior\n\n- **Mobile (<720px)** — bottom drawer with drag handle, slides up.\n- **Desktop (≥720px)** — centered modal, two-column body.\n- **Webcam mode** — live MediaPipe tracking; jewelry composites onto the video stream.\n- **Upload mode** — one-shot detect on an uploaded photo.\n- **Hand mode** — only available for ring & bracelet categories. Static hand photo with three skin tones (slider) and the ring/bracelet composited at fixed positions.\n- **Selection model** — one item per category; necklace + earring + ring + bracelet can be tried on simultaneously.\n\n## Security note (read this)\n\nTwo distinct keys, two distinct lifecycles:\n\n- **`apiKey`** — Bytive license key. It identifies *which customer* the widget is calling on behalf of. Safe to expose in client code.\n- **`aiApiKey`** — your Gemini API key. **Don't** put this in `process.env.NEXT_PUBLIC_*` or hardcode it in the bundle — anyone can extract it.\n\nRecommended pattern: serve the AI key from your own backend after authenticating the user, and pass the short-lived value into `<TryOnWidget aiApiKey={...} />` at runtime.\n\n## Backend\n\nThe component talks to a single hardcoded URL: `https://api.bytive.in/v1/try-on`. The Bytive backend validates `apiKey` and proxies AI requests using the consumer-supplied `aiApiKey`. Nothing for you to host.\n\nFor local development of this package, edit `packages/jewel-try-me/src/lib/config.ts` to point at your local backend (`http://localhost:3002/v1/try-on`) — and remember to flip it back before publishing.\n\n## Develop\n\n```bash\n# from repo root\nbun install\n\n# in packages/jewel-try-me\nbun run dev          # tsup watch mode (JS only)\nbun run build        # build dist/{esm,cjs,d.ts,styles.css}\nbun run typecheck\n```\n\n## Publish\n\n```bash\ncd packages/jewel-try-me\n\n# 1. Verify the production URL is set in src/lib/config.ts\n#    export const BYTIVE_API_URL = 'https://api.bytive.in/v1/try-on';\n\n# 2. Bump version\nnpm version patch   # or minor / major\n\n# 3. Publish (runs typecheck + build via prepublishOnly)\nnpm publish\n```\n\n`publishConfig.access: \"public\"` is set, so scoped `@bytive/...` publishes to the public registry without an extra flag.\n\n## Deploy the backend\n\nThe backend (`backend/` in this repo) is a small Express server with three responsibilities: validate `X-Bytive-Key`, forward image-refinement requests to Gemini using the `X-AI-Key` header, and CORS-allow any origin (the widget is called from arbitrary consumer sites).\n\nMinimal env required in production:\n\n```\nBYTIVE_API_KEY=<your_real_license_key>\nBYPASS_API_KEY=<master_bypass_for_curl>\nPORT=3002\n```\n\nEndpoints:\n\n```\nGET  /v1/try-on/validate       # apiKey-only check\nPOST /v1/try-on/refine         # body: { userImage, jewelryId, jewelryType }\nGET  /health\n```\n\nDeploy as a standard Node service (Fly, Railway, Render, ECS — anything that runs `node dist/index.js`). The component's hardcoded URL must point at the deployed origin.\n\n## Bundle size\n\n- ESM: ~253 KB (includes 3 hand photos as inlined data URLs, ~145 KB)\n- CJS: ~258 KB\n- styles.css: ~18 KB minified\n\nIf size matters, swap the inlined hand photos for CDN URLs by passing `handImageUrls` and removing the inline imports from `src/lib/handAssets.ts`.\n","readmeFilename":"README.md"}