{"_id":"@gks101/luminajs","_rev":"26-e689e3142354ae46e352647fb324d933","name":"@gks101/luminajs","dist-tags":{"latest":"2.1.5","beta":"2.1.5-beta"},"versions":{"1.0.0":{"name":"@gks101/luminajs","version":"1.0.0","keywords":["image-processing","canvas","filter","grayscale","sepia","browser","lightweight"],"author":{"name":"LuminaJS and Gaurav"},"license":"MIT","_id":"@gks101/luminajs@1.0.0","maintainers":[{"name":"gauravkrsingh1","email":"gaurav.kr.singh1@gmail.com"}],"dist":{"shasum":"4382b9f02a7ea9d26f0eb290f633b745c3ae5093","tarball":"https://registry.npmjs.org/@gks101/luminajs/-/luminajs-1.0.0.tgz","fileCount":19,"integrity":"sha512-ClDmhZ3sEUMRq6RC1gkEQf7+9ROuLdsAiXgmmq2KnchLIatNQ/wOP1io04ufSz0sScbX8JJ9y1WeEqDw6Sequg==","signatures":[{"sig":"MEUCIQCyFyYvHch2knJR7A6LLL+EQcyYhyi2N4ASHElz60i81wIgYgX6uSLtVuLoEp6MV9aNF+JYYwzwSTecjTofJj7JUgw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":109778},"main":"./dist/lumina.umd.js","type":"module","types":"./src/index.d.ts","unpkg":"./dist/lumina.min.js","module":"./dist/lumina.esm.js","browser":"./dist/lumina.umd.js","engines":{"node":">=14.0.0"},"exports":{".":{"import":"./src/index.js","require":"./dist/lumina.umd.js"},"./core":"./src/core/index.js","./filters":"./src/filters/index.js"},"gitHead":"a04ce8ae2bc633c62d827a39d3b610d12fc86c6c","scripts":{"dev":"rollup -c -w","test":"echo \"Error: no test specified\" && exit 1","build":"rollup -c"},"_npmUser":{"name":"gauravkrsingh1","email":"gaurav.kr.singh1@gmail.com"},"_npmVersion":"10.8.2","description":"A modular, lightweight JavaScript utility library for browser-based image processing using the HTML5 Canvas API.","directories":{},"_nodeVersion":"20.18.0","_hasShrinkwrap":false,"devDependencies":{"rollup":"^4.0.0","@rollup/plugin-terser":"^0.4.0"},"_npmOperationalInternal":{"tmp":"tmp/luminajs_1.0.0_1776854339949_0.48308654058728817","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@gks101/luminajs","version":"1.0.1","keywords":["image-processing","canvas","filter","grayscale","sepia","browser","lightweight"],"author":{"name":"LuminaJS and Gaurav"},"license":"MIT","_id":"@gks101/luminajs@1.0.1","maintainers":[{"name":"gauravkrsingh1","email":"gaurav.kr.singh1@gmail.com"}],"dist":{"shasum":"8e6c14d9d68af39aceedcfc7c71efe46ef9fd54c","tarball":"https://registry.npmjs.org/@gks101/luminajs/-/luminajs-1.0.1.tgz","fileCount":20,"integrity":"sha512-DBPa7t/0WHJzX1F7ah2j0ECOaJPEN+K8qBaPByodQqJLgePVrHc1FIlk2D88WD3f04BnADl27HwVkIp42pWF6A==","signatures":[{"sig":"MEYCIQCQ07iKF0CNgxE99I5m1JV929mGiOOlg84l4nWWzSD0GAIhAP8AccTFPsUSsqvkLFUPYRry2niLJynAN99Eh3BjvFS8","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":192460},"main":"./dist/lumina.umd.js","type":"module","types":"./src/index.d.ts","unpkg":"./dist/lumina.min.js","module":"./dist/lumina.esm.js","browser":"./dist/lumina.umd.js","engines":{"node":">=14.0.0"},"exports":{".":{"import":"./src/index.js","require":"./dist/lumina.umd.js"},"./core":"./src/core/index.js","./filters":"./src/filters/index.js"},"gitHead":"48f4112ca00efb6edd6909def49bfb9ad3a17e55","scripts":{"dev":"rollup -c -w","test":"echo \"Error: no test specified\" && exit 1","build":"rollup -c"},"_npmUser":{"name":"gauravkrsingh1","email":"gaurav.kr.singh1@gmail.com"},"_npmVersion":"10.8.2","description":"A modular, lightweight JavaScript utility library for browser-based image processing using the HTML5 Canvas API.","directories":{},"_nodeVersion":"20.18.0","_hasShrinkwrap":false,"devDependencies":{"rollup":"^4.0.0","@rollup/plugin-terser":"^0.4.0"},"_npmOperationalInternal":{"tmp":"tmp/luminajs_1.0.1_1776854538011_0.14818760610005932","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@gks101/luminajs","version":"1.0.2","keywords":["image-processing","canvas","filter","grayscale","sepia","browser","lightweight"],"author":{"name":"LuminaJS and Gaurav"},"license":"MIT","_id":"@gks101/luminajs@1.0.2","maintainers":[{"name":"gauravkrsingh1","email":"gaurav.kr.singh1@gmail.com"}],"dist":{"shasum":"68eed502f331c433902e2f396e8c726a600c1b24","tarball":"https://registry.npmjs.org/@gks101/luminajs/-/luminajs-1.0.2.tgz","fileCount":18,"integrity":"sha512-ETAvm2Vto+twG0jdxgDz+aASauP3aMmdeUht/Id9PzX5u0/HncNVthl5lw834wgPgtQXILt1obvExYOImisEqg==","signatures":[{"sig":"MEUCIHgjs6314YIMdfs5AG/sFn/koDPJMkx1zTu537dROeZCAiEAyaIHm+iWaILnwnkGKKu/4wrlOcR91nGJfhWFWSpHe2Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":69337},"main":"./dist/lumina.umd.js","type":"module","types":"./src/index.d.ts","unpkg":"./dist/lumina.min.js","module":"./dist/lumina.esm.js","browser":"./dist/lumina.umd.js","engines":{"node":">=14.0.0"},"exports":{".":{"import":"./src/index.js","require":"./dist/lumina.umd.js"},"./core":"./src/core/index.js","./filters":"./src/filters/index.js"},"gitHead":"48f4112ca00efb6edd6909def49bfb9ad3a17e55","scripts":{"dev":"rollup -c -w","test":"echo \"Error: no test specified\" && exit 1","build":"rollup -c"},"_npmUser":{"name":"gauravkrsingh1","email":"gaurav.kr.singh1@gmail.com"},"_npmVersion":"10.8.2","description":"A modular, lightweight JavaScript utility library for browser-based image processing using the HTML5 Canvas API.","directories":{},"_nodeVersion":"20.18.0","_hasShrinkwrap":false,"devDependencies":{"rollup":"^4.0.0","@rollup/plugin-terser":"^0.4.0"},"_npmOperationalInternal":{"tmp":"tmp/luminajs_1.0.2_1776855395206_0.5352053965330863","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@gks101/luminajs","version":"1.1.0","keywords":["image-processing","canvas","filter","grayscale","sepia","browser","lightweight"],"author":{"name":"LuminaJS and Gaurav"},"license":"MIT","_id":"@gks101/luminajs@1.1.0","maintainers":[{"name":"gauravkrsingh1","email":"gaurav.kr.singh1@gmail.com"}],"dist":{"shasum":"89c7d2cb5f0b0020c3fcac637696801fffb00862","tarball":"https://registry.npmjs.org/@gks101/luminajs/-/luminajs-1.1.0.tgz","fileCount":18,"integrity":"sha512-bfNXY6mvzfHHvoHd7vzT9C/i/7BO7rGJG0onvFuiP/uVFv5ehxYVp6y5SG9fU3YshFv9JIZPtDewGjGWdPx2sQ==","signatures":[{"sig":"MEUCIACDy0Ry4N+kBL7riQY9LBtKSqXvgslxr9utIUMpHi4DAiEArWjCtONW83jZo//xTj1ZveJyMF4zpCQN4Ms7LXIlbsY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":69337},"main":"./dist/lumina.umd.js","type":"module","types":"./src/index.d.ts","unpkg":"./dist/lumina.min.js","module":"./dist/lumina.esm.js","browser":"./dist/lumina.umd.js","engines":{"node":">=14.0.0"},"exports":{".":{"import":"./src/index.js","require":"./dist/lumina.umd.js"},"./core":"./src/core/index.js","./filters":"./src/filters/index.js"},"gitHead":"48f4112ca00efb6edd6909def49bfb9ad3a17e55","scripts":{"dev":"rollup -c -w","test":"echo \"Error: no test specified\" && exit 1","build":"rollup -c"},"_npmUser":{"name":"gauravkrsingh1","email":"gaurav.kr.singh1@gmail.com"},"_npmVersion":"10.8.2","description":"A modular, lightweight JavaScript utility library for browser-based image processing using the HTML5 Canvas API.","directories":{},"_nodeVersion":"20.18.0","_hasShrinkwrap":false,"devDependencies":{"rollup":"^4.0.0","@rollup/plugin-terser":"^0.4.0"},"_npmOperationalInternal":{"tmp":"tmp/luminajs_1.1.0_1776855459150_0.12620074767136513","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@gks101/luminajs","version":"1.1.1","keywords":["image-processing","canvas","filter","grayscale","sepia","browser","lightweight"],"author":{"name":"LuminaJS and Gaurav"},"license":"MIT","_id":"@gks101/luminajs@1.1.1","maintainers":[{"name":"gauravkrsingh1","email":"gaurav.kr.singh1@gmail.com"}],"dist":{"shasum":"3c23514e4279f4ce603308dc787508d1b73895cc","tarball":"https://registry.npmjs.org/@gks101/luminajs/-/luminajs-1.1.1.tgz","fileCount":40,"integrity":"sha512-O1SSRjVQ60Hk+GNOgzVg6Ao5gv3JkTFLG/smZkg6fzhaNEJYom7/GDhJvTT3n/ZjiQNzf+LgGMIFDR8Rj3Sy5w==","signatures":[{"sig":"MEUCIQC9Tk31AjbHB1j4nY1oK32u3oTnkEksLxwh0iktqH3Y0wIgeQkF6vk4Ps6s9fvgV8NxF6u7vuVjElNZLfjrr3jJHl4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":88878},"main":"./dist/lumina.umd.js","type":"module","types":"./dist/types/index.d.ts","unpkg":"./dist/lumina.min.js","module":"./dist/lumina.esm.js","browser":"./dist/lumina.umd.js","engines":{"node":">=14.0.0"},"exports":{".":{"import":"./src/index.js","require":"./dist/lumina.umd.js"},"./core":"./src/core/index.js","./filters":"./src/filters/index.js"},"gitHead":"776c2a5da9ccd9247543677bf3660bbea0726d8f","scripts":{"dev":"rollup -c -w","test":"echo \"Error: no test specified\" && exit 1","build":"rollup -c && npm run build:types","build:types":"tsc"},"_npmUser":{"name":"gauravkrsingh1","email":"gaurav.kr.singh1@gmail.com"},"_npmVersion":"10.8.2","description":"A modular, lightweight JavaScript utility library for browser-based image processing using the HTML5 Canvas API.","directories":{},"_nodeVersion":"20.18.0","_hasShrinkwrap":false,"devDependencies":{"rollup":"^4.0.0","typescript":"^6.0.3","@rollup/plugin-terser":"^0.4.0"},"_npmOperationalInternal":{"tmp":"tmp/luminajs_1.1.1_1776855971118_0.3088439712478952","host":"s3://npm-registry-packages-npm-production"}},"1.1.2":{"name":"@gks101/luminajs","version":"1.1.2","keywords":["image-processing","canvas","filter","grayscale","sepia","browser","lightweight"],"author":{"name":"LuminaJS and Gaurav"},"license":"MIT","_id":"@gks101/luminajs@1.1.2","maintainers":[{"name":"gauravkrsingh1","email":"gaurav.kr.singh1@gmail.com"}],"dist":{"shasum":"b9550e3b501a176bb72d1dba69160146ff88ce1f","tarball":"https://registry.npmjs.org/@gks101/luminajs/-/luminajs-1.1.2.tgz","fileCount":40,"integrity":"sha512-WktS8JH2t6kTAfLvhZoqSA4SV+e66OdNMOQwFMhCRUSm0BWYuSyJtUMhV8TKFORgFuWVEvjt8INWMBFx29ep5A==","signatures":[{"sig":"MEUCIB3OkHVH60ycgPsgm1X7t8oCC25Vn42sGZtG5XDw7HhWAiEAo98tkG0nHNhas6RE6RKCMo7THQht3c4y71+h1sl2FeA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":94679},"main":"./dist/lumina.umd.js","type":"module","types":"./dist/types/index.d.ts","unpkg":"./dist/lumina.min.js","module":"./dist/lumina.esm.js","browser":"./dist/lumina.umd.js","engines":{"node":">=14.0.0"},"exports":{".":{"import":"./src/index.js","require":"./dist/lumina.umd.js"},"./core":"./src/core/index.js","./filters":"./src/filters/index.js"},"gitHead":"1f26d80e9a6612ba2c6c15bf5260294edd1344be","scripts":{"dev":"rollup -c -w","test":"echo \"Error: no test specified\" && exit 1","build":"rollup -c && npm run build:types","build:types":"tsc"},"_npmUser":{"name":"gauravkrsingh1","email":"gaurav.kr.singh1@gmail.com"},"_npmVersion":"10.8.2","description":"A modular, lightweight JavaScript utility library for browser-based image processing using the HTML5 Canvas API.","directories":{},"_nodeVersion":"20.18.0","_hasShrinkwrap":false,"devDependencies":{"rollup":"^4.0.0","typescript":"^6.0.3","@rollup/plugin-terser":"^0.4.0"},"_npmOperationalInternal":{"tmp":"tmp/luminajs_1.1.2_1776953533559_0.7702997444240294","host":"s3://npm-registry-packages-npm-production"}},"1.1.3":{"name":"@gks101/luminajs","version":"1.1.3","keywords":["image-processing","canvas","filter","grayscale","sepia","browser","lightweight"],"author":{"name":"LuminaJS and Gaurav"},"license":"MIT","_id":"@gks101/luminajs@1.1.3","maintainers":[{"name":"gauravkrsingh1","email":"gaurav.kr.singh1@gmail.com"}],"dist":{"shasum":"37448c271066f49d54c889a7f9a598ece20a0699","tarball":"https://registry.npmjs.org/@gks101/luminajs/-/luminajs-1.1.3.tgz","fileCount":44,"integrity":"sha512-QxS+gf0eUsw/passn/ywEEPBXrAAwtf0adqaMn80uOsRwIbu5JbjGLmEeXPq3XkbLbn/VCrI5IAwQ4Hs/dzNqA==","signatures":[{"sig":"MEUCIQCMktsn3H39/geKMUuWye3MkRcapQ4251xbdH8uvIy1xAIgUG66pf2VM8KKGFJGrYlII70wpLrE3MhyZwgY89e0TbY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":115229},"main":"./dist/lumina.umd.js","type":"module","types":"./dist/types/index.d.ts","unpkg":"./dist/lumina.min.js","module":"./dist/lumina.esm.js","browser":"./dist/lumina.umd.js","engines":{"node":">=14.0.0"},"exports":{".":{"import":"./src/index.js","require":"./dist/lumina.umd.js"},"./core":"./src/core/index.js","./filters":"./src/filters/index.js"},"gitHead":"dc44e9472f5e0e9a1a6449854e7bd46c60f7d91f","scripts":{"dev":"rollup -c -w","test":"echo \"Error: no test specified\" && exit 1","build":"rollup -c && npm run build:types","build:types":"tsc"},"_npmUser":{"name":"gauravkrsingh1","email":"gaurav.kr.singh1@gmail.com"},"_npmVersion":"10.8.2","description":"A modular, lightweight JavaScript utility library for browser-based image processing using the HTML5 Canvas API.","directories":{},"_nodeVersion":"20.18.0","_hasShrinkwrap":false,"devDependencies":{"rollup":"^4.0.0","typescript":"^6.0.3","@rollup/plugin-terser":"^0.4.0"},"_npmOperationalInternal":{"tmp":"tmp/luminajs_1.1.3_1777203477788_0.9850897285736588","host":"s3://npm-registry-packages-npm-production"}},"1.1.4":{"name":"@gks101/luminajs","version":"1.1.4","keywords":["image-processing","canvas","filter","grayscale","sepia","browser","lightweight"],"author":{"name":"LuminaJS and Gaurav"},"license":"MIT","_id":"@gks101/luminajs@1.1.4","maintainers":[{"name":"gauravkrsingh1","email":"gaurav.kr.singh1@gmail.com"}],"dist":{"shasum":"8f0e7da18488d341488a78392c186e571d74d6fb","tarball":"https://registry.npmjs.org/@gks101/luminajs/-/luminajs-1.1.4.tgz","fileCount":46,"integrity":"sha512-6ow7Tw/hR8TyHVRavlvt/xle4yFAR1C6w5pv52LwowW5pJ+4MlL5UbzmUBV7C12cd7JdVr6LNtjsi+4L8rGf5Q==","signatures":[{"sig":"MEQCIG7PNAnXXPImCrXZnQVe0qPJLA2Sp7FPiQMreWhPJbs0AiBmHE9gGzHOlmmgDPpmJDfALGpRNVIU0Cs7jssUhZ1VjQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":123849},"main":"./dist/lumina.umd.js","type":"module","types":"./dist/types/index.d.ts","unpkg":"./dist/lumina.min.js","module":"./dist/lumina.esm.js","browser":"./dist/lumina.umd.js","engines":{"node":">=14.0.0"},"exports":{".":{"import":"./src/index.js","require":"./dist/lumina.umd.js"},"./core":"./src/core/index.js","./filters":"./src/filters/index.js"},"gitHead":"3fe4fd434ca993f9ea57e534f55ab7f3873d0f5b","scripts":{"dev":"rollup -c -w","test":"echo \"Error: no test specified\" && exit 1","build":"rollup -c && npm run build:types","build:types":"tsc"},"_npmUser":{"name":"gauravkrsingh1","email":"gaurav.kr.singh1@gmail.com"},"_npmVersion":"10.8.2","description":"A modular, lightweight JavaScript utility library for browser-based image processing using the HTML5 Canvas API.","directories":{},"_nodeVersion":"20.18.0","_hasShrinkwrap":false,"devDependencies":{"rollup":"^4.0.0","typescript":"^6.0.3","@rollup/plugin-terser":"^0.4.0"},"_npmOperationalInternal":{"tmp":"tmp/luminajs_1.1.4_1777220001607_0.5965100309506637","host":"s3://npm-registry-packages-npm-production"}},"1.1.5":{"name":"@gks101/luminajs","version":"1.1.5","keywords":["image-processing","canvas","filter","grayscale","sepia","browser","lightweight"],"author":{"name":"LuminaJS and Gaurav"},"license":"MIT","_id":"@gks101/luminajs@1.1.5","maintainers":[{"name":"gauravkrsingh1","email":"gaurav.kr.singh1@gmail.com"}],"dist":{"shasum":"95b1579f6a19d65c9e98336a93e9fcfc7c10cdbc","tarball":"https://registry.npmjs.org/@gks101/luminajs/-/luminajs-1.1.5.tgz","fileCount":46,"integrity":"sha512-JR/CxGTjfp2ady/2knMocMl7x6vihSe+i0XI9QvWbT579YZbcvmHdUBpZ7zMSZN7HBYYEN0GVV9J+JVuBovKGg==","signatures":[{"sig":"MEUCIQDXBS8vqIcM8fbjwAzsoJDPY/Manblf3ak8EK/yYKH0GAIgGvUljScibJcQBtN5WpicQErfiWaE4UzsSjlLoM2bHeA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":123922},"main":"./dist/lumina.umd.js","type":"module","types":"./dist/types/index.d.ts","unpkg":"./dist/lumina.min.js","module":"./dist/lumina.esm.js","browser":"./dist/lumina.umd.js","engines":{"node":">=14.0.0"},"exports":{".":{"import":"./src/index.js","require":"./dist/lumina.umd.js"},"./core":"./src/core/index.js","./filters":"./src/filters/index.js"},"gitHead":"d5b4539fb862e0cab638b3c85ce76b38d17b0ec5","scripts":{"dev":"rollup -c -w","test":"echo \"Error: no test specified\" && exit 1","build":"rollup -c && npm run build:types","build:types":"tsc"},"_npmUser":{"name":"gauravkrsingh1","email":"gaurav.kr.singh1@gmail.com"},"_npmVersion":"10.8.2","description":"A modular, lightweight JavaScript utility library for browser-based image processing using the HTML5 Canvas API.","directories":{},"_nodeVersion":"20.18.0","_hasShrinkwrap":false,"devDependencies":{"rollup":"^4.0.0","typescript":"^6.0.3","@rollup/plugin-terser":"^0.4.0"},"_npmOperationalInternal":{"tmp":"tmp/luminajs_1.1.5_1777220225312_0.7776588789102787","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@gks101/luminajs","version":"1.2.0","keywords":["image-processing","canvas","filter","grayscale","sepia","browser","lightweight"],"author":{"name":"LuminaJS and Gaurav"},"license":"MIT","_id":"@gks101/luminajs@1.2.0","maintainers":[{"name":"gauravkrsingh1","email":"gaurav.kr.singh1@gmail.com"}],"dist":{"shasum":"8c074adc5dcb874dc17eedd23fb97c21a1732679","tarball":"https://registry.npmjs.org/@gks101/luminajs/-/luminajs-1.2.0.tgz","fileCount":48,"integrity":"sha512-aQzbNZU8YS7obH3B4r5UKWlQGELwEHtlcyGRYOyOjeo89mfhlhxvE7bHXx1N8Nm/K3qM3S4BMcwp92tlQKsE5A==","signatures":[{"sig":"MEUCIQDB2WHRJ2nfaZMcH+9w8wTX7c497QUKYBh9NUDwkbdT9AIgJc8GKL06ZeQoPzw8DlbtBcOhEMe4Nai3Dqfi/Cfwa10=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":134322},"main":"./dist/lumina.umd.js","type":"module","types":"./dist/types/index.d.ts","unpkg":"./dist/lumina.min.js","module":"./dist/lumina.esm.js","browser":"./dist/lumina.umd.js","engines":{"node":">=14.0.0"},"exports":{".":{"import":"./src/index.js","require":"./dist/lumina.umd.js"},"./core":"./src/core/index.js","./filters":"./src/filters/index.js"},"gitHead":"171a6029c8b29c4826605d873a8d66ac3b681908","scripts":{"dev":"rollup -c -w","test":"echo \"Error: no test specified\" && exit 1","build":"rollup -c && npm run build:types","build:types":"tsc"},"_npmUser":{"name":"gauravkrsingh1","email":"gaurav.kr.singh1@gmail.com"},"_npmVersion":"10.8.2","description":"A modular, lightweight JavaScript utility library for browser-based image processing using the HTML5 Canvas API.","directories":{},"_nodeVersion":"20.18.0","_hasShrinkwrap":false,"devDependencies":{"rollup":"^4.0.0","typescript":"^6.0.3","@rollup/plugin-terser":"^0.4.0"},"_npmOperationalInternal":{"tmp":"tmp/luminajs_1.2.0_1777300243201_0.4006669300446106","host":"s3://npm-registry-packages-npm-production"}},"1.3.1":{"name":"@gks101/luminajs","version":"1.3.1","keywords":["image-processing","canvas","filter","grayscale","sepia","browser","lightweight","blur","brightness","contrast","emboss","edgeDetection","gaussianBlur","sharpen","watermark","backgroundBlur"],"author":{"name":"LuminaJS and Gaurav"},"license":"MIT","_id":"@gks101/luminajs@1.3.1","maintainers":[{"name":"gauravkrsingh1","email":"gaurav.kr.singh1@gmail.com"}],"dist":{"shasum":"8e384a4e3b6fe0670e39280faef3d3dc2b35fcd9","tarball":"https://registry.npmjs.org/@gks101/luminajs/-/luminajs-1.3.1.tgz","fileCount":125,"integrity":"sha512-BHWxR78wv+m++4S9STFshu99zWqwNwhGBfPqSyQHjLV9SYfOZoTRN/DJ5R6+hx0SFBv3lWJcUrkEAP8Z4L1khA==","signatures":[{"sig":"MEUCIGygIuppCD1Y5RGU1p45/z25IR+UP2ZcCe1hE3FbE18gAiEAkxx0TZQJvgyipj1qI1Qr0W0LG1nBRZO6U+nHt4KKAGg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2506327},"main":"./dist/lumina.umd.js","type":"module","types":"./dist/types/index.d.ts","unpkg":"./dist/lumina.min.js","module":"./dist/lumina.esm.js","browser":"./dist/lumina.umd.js","engines":{"node":">=14.0.0"},"exports":{".":{"import":"./src/index.js","require":"./dist/lumina.umd.js"},"./core":"./src/core/index.js","./filters":"./src/filters/index.js"},"gitHead":"b164f3881436c539b4f054fee78dac0ed8f3ee44","scripts":{"dev":"rollup -c -w","test":"echo \"Error: no test specified\" && exit 1","build":"rollup -c && npm run build:types && npm run generate-docs","build:types":"tsc","generate-docs":"jsdoc -c jsdoc.json"},"_npmUser":{"name":"gauravkrsingh1","email":"gaurav.kr.singh1@gmail.com"},"_npmVersion":"10.8.2","description":"A modular, lightweight JavaScript utility library for browser-based image processing using the HTML5 Canvas API.","directories":{},"_nodeVersion":"20.18.0","_hasShrinkwrap":false,"devDependencies":{"jsdoc":"^4.0.5","rollup":"^4.0.0","docdash":"^2.0.2","typescript":"^6.0.3","@rollup/plugin-terser":"^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/luminajs_1.3.1_1777556722445_0.9093546170740148","host":"s3://npm-registry-packages-npm-production"}},"1.3.2":{"name":"@gks101/luminajs","version":"1.3.2","keywords":["image-processing","canvas","filter","grayscale","sepia","browser","lightweight","blur","brightness","contrast","emboss","edgeDetection","gaussianBlur","sharpen","watermark","backgroundBlur"],"author":{"name":"LuminaJS and Gaurav"},"license":"MIT","_id":"@gks101/luminajs@1.3.2","maintainers":[{"name":"gauravkrsingh1","email":"gaurav.kr.singh1@gmail.com"}],"dist":{"shasum":"669af2f887f3f349c3b37619f2450a24cb04ec4f","tarball":"https://registry.npmjs.org/@gks101/luminajs/-/luminajs-1.3.2.tgz","fileCount":57,"integrity":"sha512-jFZNCprHBKLwN8Cfj6wYn5qufAKeNIl9NXX+w7fyBeeXQeBjlvVdyWw88vTNjjiYIYoq/RT/52ESpw1OGTTfoA==","signatures":[{"sig":"MEYCIQCcmUwW/L+DrQt+Ud8iz4TVK5mArevqWyJhxrrW7OjWrQIhAKU8RziFEK4cpna7lB3XvwBS1PCxpSTBDSDtXt0Lufgu","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":145759},"main":"./dist/lumina.umd.js","type":"module","types":"./dist/types/index.d.ts","unpkg":"./dist/lumina.min.js","module":"./dist/lumina.esm.js","browser":"./dist/lumina.umd.js","engines":{"node":">=14.0.0"},"exports":{".":{"import":"./src/index.js","require":"./dist/lumina.umd.js"},"./core":"./src/core/index.js","./filters":"./src/filters/index.js"},"gitHead":"3b12f335ff2bba72087fed0de3c32af658cce0f3","scripts":{"dev":"rollup -c -w","test":"echo \"Error: no test specified\" && exit 1","build":"rollup -c && npm run build:types && npm run generate-docs","build:types":"tsc","generate-docs":"jsdoc -c jsdoc.json"},"_npmUser":{"name":"gauravkrsingh1","email":"gaurav.kr.singh1@gmail.com"},"_npmVersion":"10.8.2","description":"A modular, lightweight JavaScript utility library for browser-based image processing using the HTML5 Canvas API.","directories":{},"_nodeVersion":"20.18.0","_hasShrinkwrap":false,"devDependencies":{"jsdoc":"^4.0.5","rollup":"^4.0.0","docdash":"^2.0.2","typescript":"^6.0.3","@rollup/plugin-terser":"^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/luminajs_1.3.2_1777566625001_0.8243905649471419","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"@gks101/luminajs","version":"1.4.0","keywords":["image-processing","canvas","filter","grayscale","sepia","browser","lightweight","blur","brightness","contrast","emboss","edgeDetection","gaussianBlur","sharpen","watermark","backgroundBlur","instagram-filters","image-manipulation","fast-blur","ascii","ascii art","image-editor","canvas-filters","fast-gaussian-blur"],"author":{"name":"LuminaJS and Gaurav"},"license":"MIT","_id":"@gks101/luminajs@1.4.0","maintainers":[{"name":"gauravkrsingh1","email":"gaurav.kr.singh1@gmail.com"}],"homepage":"https://gaurav101.github.io/LuminaJS/","bugs":{"url":"https://github.com/gaurav101/LuminaJS/issues"},"dist":{"shasum":"fc2b6f62a26d4ccbd2fe012cd056af42d191026d","tarball":"https://registry.npmjs.org/@gks101/luminajs/-/luminajs-1.4.0.tgz","fileCount":59,"integrity":"sha512-AQXWMC3gKm33zUOeBHb0LvHwnIgGOzefI95abCHXsEgdg+CGySZsX5QLyLMep3o/wg1+OoTodNWfX2aR3CG2jA==","signatures":[{"sig":"MEUCIQCh0el+tORxzb8ZJ/rnNnGHdPwlhKbNJ0fSQf3tz33POQIgLeSUBwIgy0vElxB+OBrzbndDCodvpiTysziQsJby/Ro=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":180505},"main":"./dist/lumina.umd.js","type":"module","types":"./dist/types/index.d.ts","unpkg":"./dist/lumina.min.js","module":"./dist/lumina.esm.js","browser":"./dist/lumina.umd.js","engines":{"node":">=14.0.0"},"exports":{".":{"import":"./src/index.js","require":"./dist/lumina.umd.js"},"./core":"./src/core/index.js","./filters":"./src/filters/index.js"},"gitHead":"90211102a0bac2796375f84b757bb55689815e23","scripts":{"dev":"rollup -c -w","test":"echo \"Error: no test specified\" && exit 1","build":"rollup -c && npm run build:types && npm run generate-docs","build:types":"tsc","generate-docs":"jsdoc -c jsdoc.json"},"_npmUser":{"name":"gauravkrsingh1","email":"gaurav.kr.singh1@gmail.com"},"repository":{"url":"git+https://github.com/gaurav101/LuminaJS.git","type":"git"},"_npmVersion":"10.8.2","description":"A modular, lightweight JavaScript utility library for browser-based image processing using the HTML5 Canvas API.","directories":{},"_nodeVersion":"20.18.0","_hasShrinkwrap":false,"devDependencies":{"jsdoc":"^4.0.5","rollup":"^4.0.0","docdash":"^2.0.2","typescript":"^6.0.3","@rollup/plugin-terser":"^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/luminajs_1.4.0_1778051091165_0.029499772355842335","host":"s3://npm-registry-packages-npm-production"}},"2.0.0-beta.0":{"name":"@gks101/luminajs","version":"2.0.0-beta.0","keywords":["react","react-hooks","react-component-image-filter","react-hooks-image-filter","react-image-processing","react-filters","react-canvas","react-canvas-filters","react-image-editor","react-image-editor-hooks","react-image-editor-components","image-processing","canvas","filter","grayscale","sepia","browser","lightweight","blur","brightness","contrast","emboss","edgeDetection","gaussianBlur","sharpen","watermark","backgroundBlur","instagram-filters","image-manipulation","fast-blur","ascii","ascii art","image-editor","canvas-filters","fast-gaussian-blur"],"author":{"name":"LuminaJS and Gaurav"},"license":"MIT","_id":"@gks101/luminajs@2.0.0-beta.0","maintainers":[{"name":"gauravkrsingh1","email":"gaurav.kr.singh1@gmail.com"}],"homepage":"https://gaurav101.github.io/LuminaJS/","bugs":{"url":"https://github.com/gaurav101/LuminaJS/issues"},"dist":{"shasum":"aa39b31d2974708f381f0163054d6f7e62ed7f48","tarball":"https://registry.npmjs.org/@gks101/luminajs/-/luminajs-2.0.0-beta.0.tgz","fileCount":54,"integrity":"sha512-tAKX+EanqfTVoaElZDgPTHzmFjiw/Gj1H3UyD/LKl+rJEimdXEJChj9g0X0hFB3H/1b3FpFrR03Eo6RA/ihfCA==","signatures":[{"sig":"MEUCICa0hSr2EfEfhLiUkgDRzEt/jo7DyRDW1tq8ajRYkbbrAiEA43PhQH8L6yfHYie8ePZ00j+vwSpjdAynMI/N6UD60V4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":202365},"main":"./dist/lumina.umd.js","type":"module","types":"./dist/index.d.ts","unpkg":"./dist/lumina.min.js","module":"./dist/lumina.esm.js","browser":"./dist/lumina.umd.js","engines":{"node":">=14.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/lumina.esm.js","require":"./dist/lumina.umd.js"},"./core":{"types":"./dist/core/index.d.ts","import":"./dist/core/index.js"},"./react":{"types":"./dist/react/index.d.ts","import":"./dist/react/index.js","require":"./dist/react/index.js"},"./filters":{"types":"./dist/filters/index.d.ts","import":"./dist/filters/index.js"}},"gitHead":"0e0fb95ea4db2a707d220e1bb0650d79aa1a3c7b","scripts":{"dev":"rollup -c -w","lint":"eslint .","test":"vitest run","build":"rollup -c && npm run build:types && npm run generate-docs && npm run build:examples","format":"prettier --write .","prepare":"if [ \"$NODE_ENV\" != \"production\" ]; then husky; fi","lint:fix":"eslint . --fix","start:demo":"npm run dev --prefix react-demo","test:watch":"vitest","build:types":"npx tsc","format:check":"prettier --check .","generate-docs":"jsdoc -c jsdoc.json","build:examples":"npm run build --prefix ./examples/react && npm run build --prefix ./examples/vanila-js"},"_npmUser":{"name":"gauravkrsingh1","email":"gaurav.kr.singh1@gmail.com"},"repository":{"url":"git+https://github.com/gaurav101/LuminaJS.git","type":"git"},"_npmVersion":"11.12.1","description":"A modular, lightweight JavaScript and react utility library and hooks/components for browser-based image processing using the HTML5 Canvas API. suppport react, typescript and vanilla js","directories":{},"sideEffects":false,"_nodeVersion":"24.15.0","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"husky":"^9.1.7","jsdoc":"^4.0.5","react":"^19.0.0","eslint":"^9.39.4","rollup":"^4.0.0","vitest":"^4.1.5","docdash":"^2.0.2","globals":"^17.6.0","prettier":"^3.8.3","react-dom":"^19.0.0","@eslint/js":"^9.39.4","typescript":"^6.0.3","@types/react":"^19.0.0","@types/react-dom":"^19.0.0","typescript-eslint":"^8.59.2","rollup-plugin-copy":"^3.5.0","eslint-plugin-react":"^7.37.5","@rollup/plugin-terser":"^1.0.0","eslint-config-prettier":"^10.1.8","eslint-plugin-react-hooks":"^7.1.1","rollup-plugin-bundle-size":"^1.0.3","@rollup/plugin-node-resolve":"^16.0.3"},"peerDependencies":{"react":">=16.8.0","react-dom":">=16.8.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/luminajs_2.0.0-beta.0_1778476833574_0.7224404110058313","host":"s3://npm-registry-packages-npm-production"}},"2.0.0-beta.5":{"name":"@gks101/luminajs","version":"2.0.0-beta.5","keywords":["react","react-hooks","react-component-image-filter","react-hooks-image-filter","react-image-processing","react-filters","react-canvas","image-crop","react-image-cropping","react-image-resizing","profile-image-editor","react-canvas-filters","react-image-editor","react-image-editor-hooks","react-image-editor-components","image-processing","canvas","filter","grayscale","sepia","browser","lightweight","blur","brightness","contrast","emboss","edgeDetection","gaussianBlur","sharpen","watermark","backgroundBlur","instagram-filters","image-manipulation","fast-blur","ascii","crop","image-crop","resize","image-resize","ascii art","image-editor","canvas-filters","fast-gaussian-blur"],"author":{"name":"LuminaJS and Gaurav"},"license":"MIT","_id":"@gks101/luminajs@2.0.0-beta.5","maintainers":[{"name":"gauravkrsingh1","email":"gaurav.kr.singh1@gmail.com"}],"homepage":"https://gaurav101.github.io/LuminaJS/","bugs":{"url":"https://github.com/gaurav101/LuminaJS/issues"},"dist":{"shasum":"39ae4ab0ea6674b25cf5924c433f09708f7a7b0f","tarball":"https://registry.npmjs.org/@gks101/luminajs/-/luminajs-2.0.0-beta.5.tgz","fileCount":65,"integrity":"sha512-68DyXo6F5JC98CceMr3V8g6uGr11q7/JEKtVeo0zt+GdWCX4tizEjeOxBGaUFGZwFpBp9ibgLljhwdEmrxbWiQ==","signatures":[{"sig":"MEUCIQDl/K5T5AERDWkn3q12ZV3ZA9Ca85Rxt8uO8PJzk/wMGAIgJff/m2G9Yp5TTEw8ZOOjXqEnaQLAxfOZuzqu1eQZ6YE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@gks101%2fluminajs@2.0.0-beta.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":280344},"main":"./dist/lumina.umd.js","type":"module","types":"./dist/index.d.ts","unpkg":"./dist/lumina.min.js","module":"./dist/lumina.esm.js","browser":"./dist/lumina.umd.js","engines":{"node":">=14.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/lumina.esm.js","require":"./dist/lumina.umd.js"},"./core":{"types":"./dist/core/index.d.ts","import":"./dist/core/index.js"},"./react":{"types":"./dist/react/index.d.ts","import":"./dist/react/index.js","require":"./dist/react/index.js"},"./filters":{"types":"./dist/filters/index.d.ts","import":"./dist/filters/index.js"}},"gitHead":"764ae8fdbf6b6e44eef2851a58d2faee69274d88","scripts":{"dev":"rollup -c -w","lint":"eslint .","test":"vitest run","build":"rollup -c && npm run build:types && npm run generate-docs","format":"prettier --write .","prepare":"if [ \"$NODE_ENV\" != \"production\" ]; then husky; fi","lint:fix":"eslint . --fix","start:demo":"npm run dev --prefix react-demo","test:watch":"vitest","build:types":"tsc","format:check":"prettier --check .","generate-docs":"jsdoc -c jsdoc.json","build:examples":"npm run build --prefix ./examples/react && npm run build --prefix ./examples/vanilla-js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f9492bbc-a90b-4227-b815-782f8b90c74b"}},"repository":{"url":"git+https://github.com/gaurav101/LuminaJS.git","type":"git"},"_npmVersion":"11.14.1","description":"A modular, lightweight JavaScript and react utility library and hooks/components for browser-based image processing using the HTML5 Canvas API. suppport react, typescript and vanilla js","directories":{},"sideEffects":false,"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"husky":"^9.1.7","jsdoc":"^4.0.5","react":"^19.0.0","eslint":"^9.39.4","rollup":"^4.0.0","vitest":"^4.1.5","docdash":"^2.0.2","globals":"^17.6.0","prettier":"^3.8.3","react-dom":"^19.0.0","@eslint/js":"^9.39.4","typescript":"^6.0.3","@types/react":"^19.0.0","@types/react-dom":"^19.0.0","typescript-eslint":"^8.59.2","rollup-plugin-copy":"^3.5.0","eslint-plugin-react":"^7.37.5","@rollup/plugin-terser":"^1.0.0","eslint-config-prettier":"^10.1.8","eslint-plugin-react-hooks":"^7.1.1","rollup-plugin-bundle-size":"^1.0.3","@rollup/plugin-node-resolve":"^16.0.3"},"peerDependencies":{"react":">=16.8.0","react-dom":">=16.8.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/luminajs_2.0.0-beta.5_1778646086293_0.253853948174112","host":"s3://npm-registry-packages-npm-production"}},"2.0.0-beta-10":{"name":"@gks101/luminajs","version":"2.0.0-beta-10","keywords":["react","react-hooks","react-component-image-filter","react-hooks-image-filter","react-image-processing","react-filters","react-canvas","image-crop","react-image-cropping","react-image-resizing","profile-image-editor","react-canvas-filters","react-image-editor","react-image-editor-hooks","react-image-editor-components","image-processing","canvas","filter","grayscale","sepia","browser","lightweight","blur","brightness","contrast","emboss","edgeDetection","gaussianBlur","sharpen","watermark","backgroundBlur","instagram-filters","image-manipulation","fast-blur","ascii","crop","image-crop","resize","image-resize","ascii art","image-editor","canvas-filters","fast-gaussian-blur"],"author":{"name":"LuminaJS and Gaurav"},"license":"MIT","_id":"@gks101/luminajs@2.0.0-beta-10","maintainers":[{"name":"gauravkrsingh1","email":"gaurav.kr.singh1@gmail.com"}],"homepage":"https://gaurav101.github.io/LuminaJS/","bugs":{"url":"https://github.com/gaurav101/LuminaJS/issues"},"dist":{"shasum":"574beba9c73af54e4370f20ae228728c90dbe911","tarball":"https://registry.npmjs.org/@gks101/luminajs/-/luminajs-2.0.0-beta-10.tgz","fileCount":65,"integrity":"sha512-ilG6sYvcvuhoDRceiX0BBDNB0182HVuGUIzMs9BabClNapV1kfLBVBFf2BUAbkZlYFCOq02FNhFIsSPhKohXgg==","signatures":[{"sig":"MEQCIADkkUEd0697nDXJsoCBBEMlrw54qwHmmSxR8EaXsn+rAiBwy843e8e90rvfqaF8MRi0BcACPHKVsa4M+RGHD5nfOg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@gks101%2fluminajs@2.0.0-beta-10","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":283107},"main":"./dist/lumina.umd.js","type":"module","types":"./dist/index.d.ts","unpkg":"./dist/lumina.min.js","module":"./dist/lumina.esm.js","browser":"./dist/lumina.umd.js","engines":{"node":">=14.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/lumina.esm.js","require":"./dist/lumina.umd.js"},"./core":{"types":"./dist/core/index.d.ts","import":"./dist/core/index.js"},"./react":{"types":"./dist/react/index.d.ts","import":"./dist/react/index.js","require":"./dist/react/index.js"},"./filters":{"types":"./dist/filters/index.d.ts","import":"./dist/filters/index.js"}},"gitHead":"c19af9c2b23c421740dfb55c3b5c34dce6595b22","scripts":{"dev":"rollup -c -w","lint":"eslint .","test":"vitest run","build":"rollup -c && npm run build:types && npm run generate-docs","format":"prettier --write .","prepare":"if [ \"$NODE_ENV\" != \"production\" ]; then husky; fi","lint:fix":"eslint . --fix","start:demo":"npm run dev --prefix react-demo","test:watch":"vitest","build:types":"tsc","format:check":"prettier --check .","generate-docs":"jsdoc -c jsdoc.json"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f9492bbc-a90b-4227-b815-782f8b90c74b"}},"repository":{"url":"git+https://github.com/gaurav101/LuminaJS.git","type":"git"},"_npmVersion":"11.14.1","description":"A modular, lightweight JavaScript and react utility library and hooks/components for browser-based image processing using the HTML5 Canvas API. suppport react, typescript and vanilla js","directories":{},"sideEffects":false,"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"husky":"^9.1.7","jsdoc":"^4.0.5","react":"^19.0.0","eslint":"^9.39.4","rollup":"^4.0.0","vitest":"^4.1.5","docdash":"^2.0.2","globals":"^17.6.0","prettier":"^3.8.3","react-dom":"^19.0.0","@eslint/js":"^9.39.4","typescript":"^6.0.3","@babel/core":"^7.29.0","jsdoc-babel":"^0.5.0","@types/react":"^19.0.0","@types/react-dom":"^19.0.0","typescript-eslint":"^8.59.2","rollup-plugin-copy":"^3.5.0","@babel/preset-react":"^7.28.5","eslint-plugin-react":"^7.37.5","@rollup/plugin-terser":"^1.0.0","eslint-config-prettier":"^10.1.8","@babel/preset-typescript":"^7.28.5","eslint-plugin-react-hooks":"^7.1.1","rollup-plugin-bundle-size":"^1.0.3","@rollup/plugin-node-resolve":"^16.0.3"},"peerDependencies":{"react":">=16.8.0","react-dom":">=16.8.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/luminajs_2.0.0-beta-10_1778670353695_0.7420240605081407","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"@gks101/luminajs","version":"2.0.0","keywords":["react","react-hooks","react-component-image-filter","react-hooks-image-filter","react-image-processing","react-filters","react-canvas","image-crop","react-image-cropping","react-image-resizing","profile-image-editor","react-canvas-filters","react-image-editor","react-image-editor-hooks","react-image-editor-components","image-processing","canvas","filter","grayscale","sepia","browser","lightweight","blur","brightness","contrast","emboss","edgeDetection","gaussianBlur","sharpen","watermark","backgroundBlur","instagram-filters","image-manipulation","fast-blur","ascii","crop","image-crop","resize","image-resize","ascii art","image-editor","canvas-filters","fast-gaussian-blur"],"author":{"name":"LuminaJS and Gaurav"},"license":"MIT","_id":"@gks101/luminajs@2.0.0","maintainers":[{"name":"gauravkrsingh1","email":"gaurav.kr.singh1@gmail.com"}],"homepage":"https://gaurav101.github.io/LuminaJS/","bugs":{"url":"https://github.com/gaurav101/LuminaJS/issues"},"dist":{"shasum":"598314b1cbd018efeb9b533d5d35ded31fef2525","tarball":"https://registry.npmjs.org/@gks101/luminajs/-/luminajs-2.0.0.tgz","fileCount":65,"integrity":"sha512-0GPSJ0UKvuzLwAVYq9tt17MsqnSPOCz2p7rhtGoq9Bi9emAUkKUzmk0JWfcY9wOWlynu2DS4IUHXT5M67HhIAA==","signatures":[{"sig":"MEUCIGb1EjQRuT/QvHnSm/aVi/EpVDQ8kGUQLpR8Q+5i1STxAiEAr91VZS/dkJU9YE7lfaOWdYbfRGMDcHa2eC98YUeEVLc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@gks101%2fluminajs@2.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":283099},"main":"./dist/lumina.umd.js","type":"module","types":"./dist/index.d.ts","unpkg":"./dist/lumina.min.js","module":"./dist/lumina.esm.js","browser":"./dist/lumina.umd.js","engines":{"node":">=14.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/lumina.esm.js","require":"./dist/lumina.umd.js"},"./core":{"types":"./dist/core/index.d.ts","import":"./dist/core/index.js"},"./react":{"types":"./dist/react/index.d.ts","import":"./dist/react/index.js","require":"./dist/react/index.js"},"./filters":{"types":"./dist/filters/index.d.ts","import":"./dist/filters/index.js"}},"gitHead":"0ccb5bfdae39ecd244ac1525d31e7bf29a767413","scripts":{"dev":"rollup -c -w","lint":"eslint .","test":"vitest run","build":"rollup -c && npm run build:types && npm run generate-docs","format":"prettier --write .","prepare":"if [ \"$NODE_ENV\" != \"production\" ]; then husky; fi","lint:fix":"eslint . --fix","start:demo":"npm run dev --prefix react-demo","test:watch":"vitest","build:types":"tsc","format:check":"prettier --check .","generate-docs":"jsdoc -c jsdoc.json"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f9492bbc-a90b-4227-b815-782f8b90c74b"}},"repository":{"url":"git+https://github.com/gaurav101/LuminaJS.git","type":"git"},"_npmVersion":"11.14.1","description":"A modular, lightweight JavaScript and react utility library and hooks/components for browser-based image processing using the HTML5 Canvas API. suppport react, typescript and vanilla js","directories":{},"sideEffects":false,"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","jsdoc":"^4.0.5","react":"^19.0.0","eslint":"^9.39.4","rollup":"^4.0.0","vitest":"^4.1.5","docdash":"^2.0.2","globals":"^17.6.0","prettier":"^3.8.3","react-dom":"^19.0.0","@eslint/js":"^9.39.4","typescript":"^6.0.3","@babel/core":"^7.29.0","jsdoc-babel":"^0.5.0","@types/react":"^19.0.0","@types/react-dom":"^19.0.0","typescript-eslint":"^8.59.2","rollup-plugin-copy":"^3.5.0","@babel/preset-react":"^7.28.5","eslint-plugin-react":"^7.37.5","@rollup/plugin-terser":"^1.0.0","eslint-config-prettier":"^10.1.8","@babel/preset-typescript":"^7.28.5","eslint-plugin-react-hooks":"^7.1.1","rollup-plugin-bundle-size":"^1.0.3","@rollup/plugin-node-resolve":"^16.0.3"},"peerDependencies":{"react":">=16.8.0","react-dom":">=16.8.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/luminajs_2.0.0_1778670818462_0.9618324164622518","host":"s3://npm-registry-packages-npm-production"}},"2.0.1":{"name":"@gks101/luminajs","version":"2.0.1","keywords":["react","react-hooks","react-component-image-filter","react-hooks-image-filter","react-image-processing","react-filters","react-canvas","image-crop","react-image-cropping","react-image-resizing","profile-image-editor","react-canvas-filters","react-image-editor","react-image-editor-hooks","react-image-editor-components","image-processing","canvas","filter","grayscale","sepia","browser","lightweight","blur","brightness","contrast","emboss","edgeDetection","gaussianBlur","sharpen","watermark","backgroundBlur","instagram-filters","image-manipulation","fast-blur","ascii","crop","image-crop","resize","image-resize","ascii art","image-editor","canvas-filters","fast-gaussian-blur"],"author":{"name":"LuminaJS and Gaurav"},"license":"MIT","_id":"@gks101/luminajs@2.0.1","maintainers":[{"name":"gauravkrsingh1","email":"gaurav.kr.singh1@gmail.com"}],"homepage":"https://gaurav101.github.io/LuminaJS/","bugs":{"url":"https://github.com/gaurav101/LuminaJS/issues"},"dist":{"shasum":"0b320f8b883e097b70fa07b7e83eba51adf67735","tarball":"https://registry.npmjs.org/@gks101/luminajs/-/luminajs-2.0.1.tgz","fileCount":65,"integrity":"sha512-sQOeQBjQydCSEkC73dg5zy/5pGnHlNY5abB7VuxyyN/1vrpibhSPnRndeaPwBsDAl3WBi5jejoOJZG4VT6WILA==","signatures":[{"sig":"MEYCIQCWBTVRSDgVasFZ+ee79ryQUb+MfPEenLT538CDDrRPJwIhAMTsJEisDSJV6ozxrm1nuF31nJx3iqndTyYefVj0Vdlb","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@gks101%2fluminajs@2.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":283118},"main":"./dist/lumina.umd.js","type":"module","types":"./dist/index.d.ts","unpkg":"./dist/lumina.min.js","module":"./dist/lumina.esm.js","browser":"./dist/lumina.umd.js","engines":{"node":">=14.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/lumina.esm.js","require":"./dist/lumina.umd.js"},"./core":{"types":"./dist/core/index.d.ts","import":"./dist/core/index.js"},"./react":{"types":"./dist/react/index.d.ts","import":"./dist/react/index.js","require":"./dist/react/index.js"},"./filters":{"types":"./dist/filters/index.d.ts","import":"./dist/filters/index.js"}},"gitHead":"f06db566552cbfed5d961ae404cab37a6a6a3d01","scripts":{"dev":"rollup -c -w","lint":"eslint .","test":"vitest run","build":"rollup -c && npm run build:types && npm run generate-docs","format":"prettier --write .","prepare":"if [ \"$NODE_ENV\" != \"production\" ]; then husky; fi","lint:fix":"eslint . --fix","start:demo":"npm run dev --prefix react-demo","test:watch":"vitest","build:types":"tsc","format:check":"prettier --check .","generate-docs":"jsdoc -c jsdoc.json"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f9492bbc-a90b-4227-b815-782f8b90c74b"}},"repository":{"url":"git+https://github.com/gaurav101/LuminaJS.git","type":"git"},"_npmVersion":"11.14.1","description":"A modular, lightweight JavaScript and react utility library and hooks/components for browser-based image processing using the HTML5 Canvas API. suppport react, typescript and vanilla js","directories":{},"sideEffects":false,"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","jsdoc":"^4.0.5","react":"^19.0.0","eslint":"^9.39.4","rollup":"^4.0.0","vitest":"^4.1.5","docdash":"^2.0.2","globals":"^17.6.0","prettier":"^3.8.3","react-dom":"^19.0.0","@eslint/js":"^9.39.4","typescript":"^6.0.3","@babel/core":"^7.29.0","jsdoc-babel":"^0.5.0","@types/react":"^19.0.0","@types/react-dom":"^19.0.0","typescript-eslint":"^8.59.2","rollup-plugin-copy":"^3.5.0","@babel/preset-react":"^7.28.5","eslint-plugin-react":"^7.37.5","@rollup/plugin-terser":"^1.0.0","eslint-config-prettier":"^10.1.8","@babel/preset-typescript":"^7.28.5","eslint-plugin-react-hooks":"^7.1.1","rollup-plugin-bundle-size":"^1.0.3","@rollup/plugin-node-resolve":"^16.0.3"},"peerDependencies":{"react":">=16.8.0","react-dom":">=16.8.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/luminajs_2.0.1_1778671206579_0.09916226126209682","host":"s3://npm-registry-packages-npm-production"}},"2.0.2":{"name":"@gks101/luminajs","version":"2.0.2","keywords":["react","react-hooks","react-component-image-filter","react-hooks-image-filter","react-image-processing","react-filters","react-canvas","image-crop","react-image-cropping","react-image-resizing","profile-image-editor","react-canvas-filters","react-image-editor","react-image-editor-hooks","react-image-editor-components","image-processing","canvas","filter","grayscale","sepia","browser","lightweight","blur","brightness","contrast","emboss","edgeDetection","gaussianBlur","sharpen","watermark","backgroundBlur","instagram-filters","image-manipulation","fast-blur","ascii","crop","image-crop","resize","image-resize","ascii art","image-editor","canvas-filters","fast-gaussian-blur"],"author":{"name":"LuminaJS and Gaurav"},"license":"MIT","_id":"@gks101/luminajs@2.0.2","maintainers":[{"name":"gauravkrsingh1","email":"gaurav.kr.singh1@gmail.com"}],"homepage":"https://gaurav101.github.io/LuminaJS/","bugs":{"url":"https://github.com/gaurav101/LuminaJS/issues"},"dist":{"shasum":"fd2f7c6f104d3b840ef0b5c7c59993dc6f2504c9","tarball":"https://registry.npmjs.org/@gks101/luminajs/-/luminajs-2.0.2.tgz","fileCount":65,"integrity":"sha512-FrHsrZ5c/CLTpGSOBWCM7uG9qYurIwn6RfjS60Q4neuaDz943JMx6tWG+nG+ZZ55qC7a72h7SIeWgGeFbWgpxg==","signatures":[{"sig":"MEUCIHxks3m0lo+Vvd23BVwH4UdfO8ZqoQgGz97eISAr8mkgAiEAsBuuXUjFlugGOw0GvmA4XSXJSUQa6OQIXiS8S1F5v6Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@gks101%2fluminajs@2.0.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":293024},"main":"./dist/lumina.umd.js","type":"module","types":"./dist/index.d.ts","unpkg":"./dist/lumina.min.js","module":"./dist/lumina.esm.js","browser":"./dist/lumina.umd.js","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/lumina.esm.js","require":"./dist/lumina.umd.js"},"./core":{"types":"./dist/core/index.d.ts","import":"./dist/core/index.js"},"./react":{"types":"./dist/react/index.d.ts","import":"./dist/react/index.js","require":"./dist/react/index.js"},"./filters":{"types":"./dist/filters/index.d.ts","import":"./dist/filters/index.js"}},"funding":"https://github.com/sponsors/gaurav101","gitHead":"7848d2dd7b4df5dc101a6260a35780d46cd3f7f6","scripts":{"dev":"rollup -c -w","lint":"eslint .","test":"vitest run","build":"rollup -c && npm run build:types && npm run generate-docs","format":"prettier --write .","prepare":"if [ \"$NODE_ENV\" != \"production\" ]; then husky; fi","lint:fix":"eslint . --fix","start:demo":"npm run dev --prefix react-demo","test:watch":"vitest","build:types":"tsc","format:check":"prettier --check .","generate-docs":"jsdoc -c jsdoc.json"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f9492bbc-a90b-4227-b815-782f8b90c74b"}},"repository":{"url":"git+https://github.com/gaurav101/LuminaJS.git","type":"git"},"_npmVersion":"11.14.1","description":"A modular, lightweight JavaScript and React utility library for browser-based image processing using the HTML5 Canvas API. Supports TypeScript and Vanilla JS.","directories":{},"sideEffects":false,"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","jsdoc":"^4.0.5","react":"^19.0.0","eslint":"^9.39.4","rollup":"^4.0.0","vitest":"^4.1.5","docdash":"^2.0.2","globals":"^17.6.0","prettier":"^3.8.3","react-dom":"^19.0.0","@eslint/js":"^9.39.4","typescript":"^6.0.3","@babel/core":"^7.29.0","jsdoc-babel":"^0.5.0","@types/react":"^19.0.0","@types/react-dom":"^19.0.0","typescript-eslint":"^8.59.2","rollup-plugin-copy":"^3.5.0","@babel/preset-react":"^7.28.5","eslint-plugin-react":"^7.37.5","@rollup/plugin-terser":"^1.0.0","eslint-config-prettier":"^10.1.8","@babel/preset-typescript":"^7.28.5","eslint-plugin-react-hooks":"^7.1.1","rollup-plugin-bundle-size":"^1.0.3","@rollup/plugin-node-resolve":"^16.0.3"},"peerDependencies":{"react":">=16.8.0","react-dom":">=16.8.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/luminajs_2.0.2_1779001019931_0.4486823050136759","host":"s3://npm-registry-packages-npm-production"}},"2.0.4":{"name":"@gks101/luminajs","version":"2.0.4","keywords":["react","react-hooks","react-component-image-filter","react-hooks-image-filter","react-image-processing","react-filters","react-canvas","image-crop","react-image-cropping","react-image-resizing","profile-image-editor","react-canvas-filters","react-image-editor","react-image-editor-hooks","react-image-editor-components","image-processing","canvas","filter","grayscale","sepia","browser","lightweight","blur","brightness","contrast","emboss","edgeDetection","gaussianBlur","sharpen","watermark","backgroundBlur","instagram-filters","image-manipulation","fast-blur","ascii","crop","image-crop","resize","image-resize","ascii art","image-editor","canvas-filters","fast-gaussian-blur","mobile-friendly-cropper","touch-friendly-cropper","responsive-cropper","cross-platform-cropper","browser-cropper","lightweight-cropper"],"author":{"name":"LuminaJS and Gaurav"},"license":"MIT","_id":"@gks101/luminajs@2.0.4","maintainers":[{"name":"gauravkrsingh1","email":"gaurav.kr.singh1@gmail.com"}],"homepage":"https://gaurav101.github.io/LuminaJS/","bugs":{"url":"https://github.com/gaurav101/LuminaJS/issues"},"dist":{"shasum":"f2edc5bf6b677c0d49ce51285baeb6427b3fa1e1","tarball":"https://registry.npmjs.org/@gks101/luminajs/-/luminajs-2.0.4.tgz","fileCount":65,"integrity":"sha512-r1g65QClPq0Yy/a+2V1/Sv+REswCPIJJ/fbundTbOq1y4o59vIsngYXgr/J/FdDcNXLOWsdZEwd9SrTfI7b1AQ==","signatures":[{"sig":"MEYCIQCLWXMDNr0ECwqz4/J9jhD8fV7DMg+LS8BoCJFY8bjrQQIhAI95s/6VCIJJK54F+UXBfMZLgYWia2xM1If/wYkGmp4y","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@gks101%2fluminajs@2.0.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":296580},"main":"./dist/lumina.umd.js","type":"module","types":"./dist/index.d.ts","unpkg":"./dist/lumina.min.js","module":"./dist/lumina.esm.js","browser":"./dist/lumina.umd.js","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/lumina.esm.js","require":"./dist/lumina.umd.js"},"./core":{"types":"./dist/core/index.d.ts","import":"./dist/core/index.js"},"./react":{"types":"./dist/react/index.d.ts","import":"./dist/react/index.js","require":"./dist/react/index.js"},"./filters":{"types":"./dist/filters/index.d.ts","import":"./dist/filters/index.js"}},"funding":"https://github.com/sponsors/gaurav101","gitHead":"9c7bd3a268bcc0dbb51892b950c731cc877d25b5","scripts":{"dev":"rollup -c -w","lint":"eslint .","test":"vitest run","build":"rollup -c && npm run build:types && npm run generate-docs","format":"prettier --write .","prepare":"if [ \"$NODE_ENV\" != \"production\" ]; then husky; fi","lint:fix":"eslint . --fix","start:demo":"npm run dev --prefix react-demo","test:watch":"vitest","build:types":"tsc","format:check":"prettier --check .","generate-docs":"jsdoc -c jsdoc.json"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f9492bbc-a90b-4227-b815-782f8b90c74b"}},"repository":{"url":"git+https://github.com/gaurav101/LuminaJS.git","type":"git"},"_npmVersion":"11.14.1","description":"A lightweight JavaScript and React image-processing library optimized for mobile devices and touch gestures using the HTML5 Canvas API.","directories":{},"sideEffects":false,"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","jsdoc":"^4.0.5","react":"^19.0.0","eslint":"^9.39.4","rollup":"^4.0.0","vitest":"^4.1.5","docdash":"^2.0.2","globals":"^17.6.0","prettier":"^3.8.3","react-dom":"^19.0.0","@eslint/js":"^9.39.4","typescript":"^6.0.3","@babel/core":"^7.29.0","jsdoc-babel":"^0.5.0","@types/react":"^19.0.0","@types/react-dom":"^19.0.0","typescript-eslint":"^8.59.2","rollup-plugin-copy":"^3.5.0","@babel/preset-react":"^7.28.5","eslint-plugin-react":"^7.37.5","@rollup/plugin-terser":"^1.0.0","eslint-config-prettier":"^10.1.8","@babel/preset-typescript":"^7.28.5","eslint-plugin-react-hooks":"^7.1.1","rollup-plugin-bundle-size":"^1.0.3","@rollup/plugin-node-resolve":"^16.0.3"},"peerDependencies":{"react":">=16.8.0","react-dom":">=16.8.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/luminajs_2.0.4_1779006344168_0.6409751589416279","host":"s3://npm-registry-packages-npm-production"}},"2.1.5-beta":{"name":"@gks101/luminajs","version":"2.1.5-beta","keywords":["react","react-hooks","react-component-image-filter","react-hooks-image-filter","react-image-processing","react-filters","react-canvas","image-crop","react-image-cropping","react-image-resizing","profile-image-editor","react-canvas-filters","react-image-editor","react-image-editor-hooks","react-image-editor-components","image-processing","canvas","filter","grayscale","sepia","browser","lightweight","blur","brightness","contrast","emboss","edgeDetection","gaussianBlur","sharpen","watermark","backgroundBlur","instagram-filters","image-manipulation","fast-blur","ascii","crop","image-crop","resize","image-resize","ascii art","image-editor","canvas-filters","fast-gaussian-blur","mobile-friendly-cropper","touch-friendly-cropper","responsive-cropper","cross-platform-cropper","browser-cropper","lightweight-cropper"],"author":{"name":"LuminaJS and Gaurav"},"license":"MIT","_id":"@gks101/luminajs@2.1.5-beta","maintainers":[{"name":"gauravkrsingh1","email":"gaurav.kr.singh1@gmail.com"}],"homepage":"https://gaurav101.github.io/LuminaJS/","bugs":{"url":"https://github.com/gaurav101/LuminaJS/issues"},"dist":{"shasum":"39a2a9caa66cdd15ff129c0d0da1881e6ff506f8","tarball":"https://registry.npmjs.org/@gks101/luminajs/-/luminajs-2.1.5-beta.tgz","fileCount":70,"integrity":"sha512-Oaa+FGKmZeuqgJVLg1CvUoJUNx0wk5CxpK3AVYCklupVRKXw+hwVpZBBBlBHe2rZBmeZHKhlaQmQio0yWTwczg==","signatures":[{"sig":"MEUCIDXJ/Gy/RrBeIQA9XST2Z4M9qFNsy8KQWR4yxfhAU6ImAiEAj14Uv5iitCbQM105O1B82iRXZUTcFJGTZrdIiIYhOx0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@gks101%2fluminajs@2.1.5-beta","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":318365},"main":"./dist/lumina.esm.js","type":"module","types":"./dist/index.d.ts","unpkg":"./dist/lumina.min.js","module":"./dist/lumina.esm.js","browser":"./dist/lumina.esm.js","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/lumina.esm.js","browser":"./dist/lumina.esm.js"},"./core":{"types":"./dist/core/index.d.ts","import":"./dist/core/index.js"},"./react":{"types":"./dist/react/index.d.ts","import":"./dist/react/index.js"},"./filters":{"types":"./dist/filters/index.d.ts","import":"./dist/filters/index.js"},"./lumina-image.css":"./dist/lumina-image.css"},"funding":"https://github.com/sponsors/gaurav101","gitHead":"0df2aa1dc2d656dfae6fc16bd9c6e38d02d3c6b9","scripts":{"dev":"rollup -c -w","lint":"eslint .","test":"vitest run","build":"npm run clean && rollup -c && npm run build:minify:css && npm run build:types && npm run generate-docs","clean":"rm -rf dist","format":"prettier --write .","prepare":"if [ \"$NODE_ENV\" != \"production\" ]; then husky; fi","lint:fix":"eslint . --fix","start:demo":"npm run dev --prefix react-demo","test:watch":"vitest","build:types":"tsc","format:check":"prettier --check .","test:exports":"node scripts/test-exports.mjs","generate-docs":"jsdoc -c jsdoc.json","build:minify:css":"node scripts/minify-lumina-css.mjs","test:examples:react":"npm run build --prefix examples/react"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f9492bbc-a90b-4227-b815-782f8b90c74b"}},"repository":{"url":"git+https://github.com/gaurav101/LuminaJS.git","type":"git"},"_npmVersion":"11.15.0","description":"A lightweight browser-first JavaScript and React image-processing library built on HTML5 Canvas and ImageData.","directories":{},"sideEffects":["./dist/lumina-image.css"],"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"husky":"^9.1.7","jsdoc":"^4.0.5","react":"^19.0.0","eslint":"^9.39.4","rollup":"^4.0.0","vitest":"^4.1.5","docdash":"^2.0.2","globals":"^17.6.0","prettier":"^3.8.3","react-dom":"^19.0.0","@eslint/js":"^9.39.4","typescript":"^6.0.3","@babel/core":"^7.29.0","jsdoc-babel":"^0.5.0","@types/react":"^19.0.0","@types/react-dom":"^19.0.0","typescript-eslint":"^8.59.2","rollup-plugin-copy":"^3.5.0","@babel/preset-react":"^7.28.5","eslint-plugin-react":"^7.37.5","@rollup/plugin-terser":"^1.0.0","eslint-config-prettier":"^10.1.8","@babel/preset-typescript":"^7.28.5","eslint-plugin-react-hooks":"^7.1.1","rollup-plugin-bundle-size":"^1.0.3","@rollup/plugin-node-resolve":"^16.0.3"},"peerDependencies":{"react":">=16.8.0","react-dom":">=16.8.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/luminajs_2.1.5-beta_1779612656854_0.8827687717563675","host":"s3://npm-registry-packages-npm-production"}},"2.1.5":{"name":"@gks101/luminajs","version":"2.1.5","description":"A lightweight browser-first JavaScript and React image-processing library built on HTML5 Canvas and ImageData.","homepage":"https://gaurav101.github.io/LuminaJS/","repository":{"type":"git","url":"git+https://github.com/gaurav101/LuminaJS.git"},"bugs":{"url":"https://github.com/gaurav101/LuminaJS/issues"},"type":"module","sideEffects":["./dist/lumina-image.css"],"types":"./dist/index.d.ts","main":"./dist/lumina.esm.js","module":"./dist/lumina.esm.js","browser":"./dist/lumina.esm.js","unpkg":"./dist/lumina.min.js","exports":{".":{"types":"./dist/index.d.ts","browser":"./dist/lumina.esm.js","import":"./dist/lumina.esm.js"},"./filters":{"types":"./dist/filters/index.d.ts","import":"./dist/filters/index.js"},"./core":{"types":"./dist/core/index.d.ts","import":"./dist/core/index.js"},"./react":{"types":"./dist/react/index.d.ts","import":"./dist/react/index.js"},"./lumina-image.css":"./dist/lumina-image.css"},"scripts":{"build":"npm run clean && rollup -c && npm run build:minify:css && npm run build:types && npm run generate-docs","clean":"rm -rf dist","build:minify:css":"node scripts/minify-lumina-css.mjs","build:types":"tsc","dev":"rollup -c -w","start:demo":"npm run dev --prefix react-demo","test":"vitest run","test:exports":"node scripts/test-exports.mjs","test:examples:react":"npm run build --prefix examples/react","build:examples-docs":"node scripts/build-examples-docs.mjs","test:watch":"vitest","lint":"eslint .","lint:fix":"eslint . --fix","format":"prettier --write .","format:check":"prettier --check .","generate-docs":"jsdoc -c jsdoc.json","prepare":"if [ \"$NODE_ENV\" != \"production\" ]; then husky; fi"},"peerDependencies":{"react":">=16.8.0","react-dom":">=16.8.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"devDependencies":{"@babel/core":"^7.29.0","@babel/preset-react":"^7.28.5","@babel/preset-typescript":"^7.28.5","@eslint/js":"^9.39.4","@rollup/plugin-node-resolve":"^16.0.3","@rollup/plugin-terser":"^1.0.0","@types/react":"^19.0.0","@types/react-dom":"^19.0.0","docdash":"^2.0.2","eslint":"^9.39.4","eslint-config-prettier":"^10.1.8","eslint-plugin-react":"^7.37.5","eslint-plugin-react-hooks":"^7.1.1","globals":"^17.6.0","husky":"^9.1.7","jsdoc":"^4.0.5","jsdoc-babel":"^0.5.0","prettier":"^3.8.3","react":"^19.0.0","react-dom":"^19.0.0","rollup":"^4.0.0","rollup-plugin-bundle-size":"^1.0.3","rollup-plugin-copy":"^3.5.0","typescript":"^6.0.3","typescript-eslint":"^8.59.2","vitest":"^4.1.5"},"keywords":["react","react-hooks","react-component-image-filter","react-hooks-image-filter","react-image-processing","react-filters","react-canvas","image-crop","react-image-cropping","react-image-resizing","profile-image-editor","react-canvas-filters","react-image-editor","react-image-editor-hooks","react-image-editor-components","image-processing","canvas","filter","grayscale","sepia","browser","lightweight","blur","brightness","contrast","emboss","edgeDetection","gaussianBlur","sharpen","watermark","backgroundBlur","instagram-filters","image-manipulation","fast-blur","ascii","crop","image-crop","resize","image-resize","ascii art","image-editor","canvas-filters","fast-gaussian-blur","mobile-friendly-cropper","touch-friendly-cropper","responsive-cropper","cross-platform-cropper","browser-cropper","lightweight-cropper"],"author":{"name":"LuminaJS and Gaurav"},"license":"MIT","engines":{"node":">=20.0.0"},"funding":"https://github.com/sponsors/gaurav101","gitHead":"91e3a2e7187eb73ef74eb9087b64abe6cab69ab2","_id":"@gks101/luminajs@2.1.5","_nodeVersion":"20.20.2","_npmVersion":"11.15.0","dist":{"integrity":"sha512-JKFXczGR6h3c/E/YTw71lmigIwT87stcc/n36lD895Blb+Ng007BGO0QdekyCr1jPLmvT1oxxX33wikIPBHi7Q==","shasum":"81a4d4626d61d6f1117d33fb50f363c2f8c6c661","tarball":"https://registry.npmjs.org/@gks101/luminajs/-/luminajs-2.1.5.tgz","fileCount":69,"unpackedSize":312573,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@gks101%2fluminajs@2.1.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQC5mnTIUzC3VduzM/88Ve8up6+uIuE2TpH+oG+em9gx2QIgfYxabpfAtAb4orYHx30vW5H+Se/S1Z1b623xkStcwdA="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f9492bbc-a90b-4227-b815-782f8b90c74b"}},"directories":{},"maintainers":[{"name":"gauravkrsingh1","email":"gaurav.kr.singh1@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/luminajs_2.1.5_1779874108544_0.09638477490285902"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-22T10:38:59.872Z","modified":"2026-05-27T09:28:28.989Z","1.0.0":"2026-04-22T10:39:00.103Z","1.0.1":"2026-04-22T10:42:18.155Z","1.0.2":"2026-04-22T10:56:35.428Z","1.1.0":"2026-04-22T10:57:39.285Z","1.1.1":"2026-04-22T11:06:11.250Z","1.1.2":"2026-04-23T14:12:13.697Z","1.1.3":"2026-04-26T11:37:57.932Z","1.1.4":"2026-04-26T16:13:21.765Z","1.1.5":"2026-04-26T16:17:05.442Z","1.2.0":"2026-04-27T14:30:43.360Z","1.3.1":"2026-04-30T13:45:22.672Z","1.3.2":"2026-04-30T16:30:25.126Z","1.4.0":"2026-05-06T07:04:51.365Z","2.0.0-beta.0":"2026-05-11T05:20:33.717Z","2.0.0-beta.5":"2026-05-13T04:21:26.432Z","2.0.0-beta-10":"2026-05-13T11:05:53.878Z","2.0.0":"2026-05-13T11:13:38.623Z","2.0.1":"2026-05-13T11:20:06.955Z","2.0.2-beta-1":"2026-05-17T06:33:27.034Z","2.0.2":"2026-05-17T06:57:00.058Z","2.0.3":"2026-05-17T07:58:30.606Z","2.0.4":"2026-05-17T08:25:44.312Z","2.1.5-beta":"2026-05-24T08:50:57.006Z","2.1.5":"2026-05-27T09:28:28.690Z"},"bugs":{"url":"https://github.com/gaurav101/LuminaJS/issues"},"author":{"name":"LuminaJS and Gaurav"},"license":"MIT","homepage":"https://gaurav101.github.io/LuminaJS/","keywords":["react","react-hooks","react-component-image-filter","react-hooks-image-filter","react-image-processing","react-filters","react-canvas","image-crop","react-image-cropping","react-image-resizing","profile-image-editor","react-canvas-filters","react-image-editor","react-image-editor-hooks","react-image-editor-components","image-processing","canvas","filter","grayscale","sepia","browser","lightweight","blur","brightness","contrast","emboss","edgeDetection","gaussianBlur","sharpen","watermark","backgroundBlur","instagram-filters","image-manipulation","fast-blur","ascii","crop","image-crop","resize","image-resize","ascii art","image-editor","canvas-filters","fast-gaussian-blur","mobile-friendly-cropper","touch-friendly-cropper","responsive-cropper","cross-platform-cropper","browser-cropper","lightweight-cropper"],"repository":{"type":"git","url":"git+https://github.com/gaurav101/LuminaJS.git"},"description":"A lightweight browser-first JavaScript and React image-processing library built on HTML5 Canvas and ImageData.","maintainers":[{"name":"gauravkrsingh1","email":"gaurav.kr.singh1@gmail.com"}],"readme":"# LuminaJS\n\n[![bundle size](https://badgen.net/bundlephobia/minzip/%40gks101%2Fluminajs)](https://bundlephobia.com/package/@gks101/luminajs) [![license](https://img.shields.io/badge/license-MIT-green)](LICENSE) [![tree shaking](https://badgen.net/bundlephobia/tree-shaking/%40gks101%2Fluminajs)](https://bundlephobia.com/package/@gks101/luminajs) [![dependency count](https://badgen.net/bundlephobia/dependency-count/%40gks101%2Fluminajs)](https://bundlephobia.com/package/@gks101/luminajs)\n\nLuminaJS is a modular, chainable, lightweight, zero-dependency **browser-first** JavaScript utility library for image processing with the HTML5 Canvas and `ImageData` APIs.\n\n> Scope: LuminaJS is for browser/client runtimes. It is not a universal JS image processor and is not designed for Node.js server-side image pipelines.  \n> For server-side image processing, use tools like **Sharp**, **Jimp**, or **ImageMagick**.\n\n## What LuminaJS Is / Is Not\n\n- **LuminaJS is:** a browser-first Canvas + `ImageData` library for interactive client-side image workflows.\n- **LuminaJS is:** optimized for modern ESM bundlers with modular imports.\n- **LuminaJS is not:** a Node.js/server-side image processing engine.\n- **LuminaJS is not:** a GPU shader/WebGL pipeline; pixel filters run in JavaScript on `ImageData`.\n\n## Demo, Examples, Code and Docs\n\n- [Demo-react](https://gaurav101.github.io/LuminaJS/examples/react)\n- [Demo-react-storybook](https://gaurav101.github.io/LuminaJS/examples/react/storybook/)\n- [Demo-vanila-js](https://gaurav101.github.io/LuminaJS/)\n- [Demo-Lumina-CSS](https://gaurav101.github.io/LuminaJS/css-demo)\n- [Code](https://github.com/gaurav101/LuminaJS)\n- [NPM](https://www.npmjs.com/package/@gks101/luminajs)\n- [Documentation](https://gaurav101.github.io/LuminaJS/docs/)\n- [Lumina Image CSS Guide](./Lumina-IMAGE-CSS.md)\n- [Performance Guide](./PERFORMANCE.md)\n\n## CSS-Only Image Styling\n\nIf you do not need JavaScript image processing and only want to style,\nposition, animate, or visually transform images with CSS, use Lumina Image CSS.\nIt is designed for non-destructive image presentation with utility classes for\nfilters, hover effects, overlays, layout, and responsive media frames.\n\n- [Lumina Image CSS Guide](./Lumina-IMAGE-CSS.md)\n- [Lumina Image CSS Demo](https://gaurav101.github.io/LuminaJS/css-demo)\n\n## Features\n\n- **Responsive Browser Workflows**: Canvas rendering can be browser-optimized; pixel filters run in JavaScript on `ImageData`.\n- **🧩 Modular**: Only import the filters and utilities you need.\n- **🖼️ Canvas-Powered**: Leverages the HTML5 Canvas API for seamless browser integration.\n- **📦 Lightweight**: Zero external dependencies (no jQuery, no Lodash).\n\n### Performance Notes\n\n- Heavy filters (`blur`, `gaussianBlur`, `backgroundBlur`, convolution-based filters) can block the main thread on large images.\n- Resize first for previews/interactions, then process full resolution only for final export.\n- Use Web Workers for expensive operations to keep UI interactions responsive.\n- See [Performance Guide](./PERFORMANCE.md) for benchmark harness and worker examples.\n\n### Why Choose LuminaJS?\n\nWhile libraries like **Jimp** are built for server-side processing, **[LuminaJS](https://www.npmjs.com/package/@gks101/luminajs)** is focused on browser image workflows: previews, crop/resize flows, filters, and export before upload. It trades server-runtime breadth for a small, client-side API.\n\n---\n\n### 🚀 Key Advantages\n\n- **Low-Latency UX:** Canvas rendering/compositing paths can be browser-optimized, while filters run in JavaScript over `ImageData`.\n- **Small Client Footprint:** Zero runtime dependencies, ESM subpath exports, and separately shipped CSS/React entry points help keep app bundles focused on what you import.\n- **Privacy-Centric:** All processing happens on the client’s machine. Sensitive user data never leaves the browser.\n- **Modern DX:** Native **TypeScript** support and a clean, chainable API designed for ESM workflows.\n\n---\n\n### 🎯 Best Use Cases\n\n| Scenario            | [LuminaJS](https://www.npmjs.com/package/@gks101/luminajs) | Jimp/Other                                |\n| ------------------- | ---------------------------------------------------------- | ----------------------------------------- |\n| **Interactive UI**  | **Best.** Real-time filters & previews.                    | Slow; often requires loaders.             |\n| **Edge Cases**      | **Best.** Works in Web Workers.                            | High memory overhead.                     |\n| **Marketing Tools** | **Best.** Dynamic watermarks & social overlays.            | Overkill; increases bounce rates.         |\n| **Server-Side**     | Out of scope (use Sharp/Jimp/ImageMagick)                  | **Best.** Built for Node.js environments. |\n\n---\n\n### ⚡ At a Glance\n\n| Feature          | [LuminaJS](https://www.npmjs.com/package/@gks101/luminajs) | Jimp/Other          |\n| ---------------- | ---------------------------------------------------------- | ------------------- |\n| **Bundle Size**  | Small ESM core; CSS/React shipped separately               | Often much larger   |\n| **Execution**    | JS pixel filters on `ImageData` + Canvas rendering         | Mostly JS pipelines |\n| **Environment**  | Browser / OffscreenCanvas (client-side)                    | Node.js / Browser   |\n| **Dependencies** | **Zero**                                                   | Multiple            |\n| **API Style**    | Chainable & Functional                                     | Chainable           |\n\n**Positioning:** Use **[LuminaJS](https://www.npmjs.com/package/@gks101/luminajs)** when you need browser-side image preview, crop, resize, filter, and export workflows without bringing a server-oriented image stack into your frontend bundle.\n\n```bash\n# npm\nnpm install @gks101/luminajs\n\n# pnpm\npnpm add @gks101/luminajs\n\n# yarn\nyarn add @gks101/luminajs\n```\n\n### React Support\n\nLuminaJS includes first-class React support via hooks and components. See the [React Integration](#react-integration) section for full examples.\n\n> SSR/Next.js: LuminaJS React components and hooks depend on browser APIs (`window`, `<canvas>`, `ImageData`). Use them only on the client side (`'use client'`, `next/dynamic(..., { ssr: false })`, or equivalent).\n\n#### Browser Compatibility\n\nLuminaJS targets modern browsers with Canvas, `ImageData`, `Blob`, and ES module support. Test your exact image sizes on the devices you support.\n\n| Environment                 | Status / Notes                                                                   |\n| --------------------------- | -------------------------------------------------------------------------------- |\n| Chrome / Edge / Firefox     | Primary targets for Canvas + `ImageData` workflows.                              |\n| Safari / iOS Safari         | Supported for standard workflows; large images can hit memory limits sooner.     |\n| Web Workers                 | Recommended for expensive filters when you can pass `ImageData` to a worker.     |\n| Node.js / SSR render passes | Out of scope for processing; import-safe, but runtime image work is client-only. |\n\n#### React Accessibility Notes\n\n- `ImageCropper` / `ImageAreaSelector` support keyboard movement (arrow keys), larger movement (`Shift + Arrow`), and resize (`Alt + Arrow`) once the crop region exists.\n- Apply/Reset controls expose ARIA labels and can be themed via class/style hooks.\n- Current limitation: drag-selection and resize handles are still pointer-first interactions. Screen-reader narration for geometric crop state (x/y/width/height) is limited.\n- For strict WCAG workflows, pair crop interactions with explicit numeric inputs for crop coordinates and dimensions in your surrounding UI.\n\n```bash\n# npm\nnpm install @gks101/luminajs\n\n# pnpm\npnpm add @gks101/luminajs\n\n# yarn\nyarn add @gks101/luminajs\n```\n\n```jsx\nimport { useLumina, LuminaCanvas, ImageCropper } from '@gks101/luminajs/react';\n```\n\n### Lumina Image CSS (CSS-Only Mode)\n\nNeed polished image UI without rewriting pixels? Use [`lumina-image.css`](./Lumina-IMAGE-CSS.md) for CSS-only image effects and non-destructive image styling (filters, hover effects, overlays, layout utilities).\n\nCSS effects are presentation-only: they do not crop pixels, mutate source image data, or export transformed pixel output.\n\n| Capability                           | Lumina Image CSS     | LuminaJS (JS API)                            |\n| ------------------------------------ | -------------------- | -------------------------------------------- |\n| Filters / hover effects / transforms | Yes                  | Yes                                          |\n| Overlays / layout utilities          | Yes                  | Limited (handled in your UI/CSS)             |\n| Pixel crop/resize                    | No                   | Yes (`crop`, `resize`)                       |\n| Blob/data URL export                 | No                   | Yes (`toBlob`, `toDataURL`)                  |\n| Permanent pixel changes              | No (non-destructive) | Yes (`ImageData` processing + export/render) |\n\n```js\nimport '@gks101/luminajs/lumina-image.css';\n```\n\n#### CSS Distribution Policy\n\n- Stable subpath import is kept: `@gks101/luminajs/lumina-image.css`.\n- Current distribution decision: keep Lumina Image CSS inside `@gks101/luminajs` (single package install).\n- Future package decision: **no standalone package yet**. We may introduce `@gks101/lumina-image-css` later if CSS release cadence diverges or consumer demand justifies split packaging.\n- Tree-shaking behavior: CSS is intentionally marked as a side effect in `package.json` (`\"sideEffects\": [\"./dist/lumina-image.css\"]`) so bundlers do not drop it.\n- CSS size target: minified `dist/lumina-image.css` target is **<= 18 KB** (enforced in build).\n\n#### Static HTML Usage (No Bundler)\n\n```html\n<!-- CDN (pin to a version in production) -->\n<link\n  rel=\"stylesheet\"\n  href=\"https://cdn.jsdelivr.net/npm/@gks101/luminajs@2.0.5-beta/dist/lumina-image.css\"\n/>\n```\n\n```html\n<!-- Local package path -->\n<link\n  rel=\"stylesheet\"\n  href=\"node_modules/@gks101/luminajs/dist/lumina-image.css\"\n/>\n```\n\n## Building from Source\n\nIf you want to generate the optimized distributable files locally:\n\n```bash\n# 1. Install dependencies\n# npm\nnpm install\n\n# pnpm\npnpm install\n\n# yarn\nyarn install\n\n# 2. Run the build command\nnpm run build\n```\n\nThe output will be generated in the `dist/` directory.\n\n## Usage\n\n### 💎 Premium Chainable API (Recommended)\n\nThe easiest way to use LuminaJS is via the fluent chainable API. It handles image loading, canvas management, and filter sequencing automatically.\n\n```javascript\nimport { lumina } from '@gks101/luminajs';\n\n// Process an image from a URL, apply filters, and draw to a canvas\nawait lumina('photo.jpg')\n  .brightness(20)\n  .contrast(10)\n  .grayscale()\n  .sharpen()\n  .toCanvas(document.getElementById('myCanvas'));\n\n// Quick display in an <img> tag using an ID\nawait lumina('photo.jpg').sepia().toHtmlElement('myImageElement');\n\n// Or get the result as a Blob for uploading\nconst blob = await lumina(fileInput.files[0])\n  .resize(800, 600)\n  .sepia()\n  .toBlob('image/jpeg', 0.8);\n```\n\n### Golden Path: Upload Preview to Export\n\nThis is the recommended client workflow for upload forms: create a smaller interactive preview first, then generate the final blob when the user saves.\n\n```javascript\nimport { lumina } from '@gks101/luminajs';\n\nconst input = document.querySelector('#avatar-input');\nconst preview = document.querySelector('#avatar-preview');\nconst save = document.querySelector('#save-avatar');\n\nlet selectedFile;\n\ninput.addEventListener('change', async (event) => {\n  selectedFile = event.target.files?.[0];\n  if (!selectedFile) return;\n\n  await lumina(selectedFile)\n    .resize(360, 360)\n    .brightness(8)\n    .contrast(6)\n    .toCanvas(preview);\n});\n\nsave.addEventListener('click', async () => {\n  if (!selectedFile) return;\n\n  const blob = await lumina(selectedFile)\n    .resize(800, 800)\n    .crop(0, 0, 800, 800)\n    .sharpen()\n    .toBlob('image/jpeg', 0.86);\n\n  const body = new FormData();\n  body.append('avatar', blob, 'avatar.jpg');\n  await fetch('/api/avatar', { method: 'POST', body });\n});\n```\n\n### ES Modules (Functional)\n\n```javascript\nimport { loadImage, grayscale } from '@gks101/luminajs';\n```\n\n### Script Tag (Browser)\n\n```html\n<script type=\"module\">\n  import { lumina } from '/node_modules/@gks101/luminajs/dist/lumina.min.js';\n\n  await lumina('photo.jpg')\n    .grayscale()\n    .toCanvas(document.getElementById('preview'));\n</script>\n```\n\n## API Documentation\n\n### Chainable API (`lumina`)\n\n- **`lumina(source)`**: Initiates a processing chain. `source` can be a URL string, `File` object, `HTMLImageElement`, `HTMLCanvasElement`, or `ImageData`.\n  - **`.grayscale()`**: Applies grayscale.\n  - **`.brightness(level)`**: Adjusts brightness.\n  - **`.contrast(level)`**: Adjusts contrast.\n  - **`.sepia()`**: Applies sepia.\n  - **`.blur(radius)`**: Applies box blur.\n  - **`.gaussianBlur(sigma)`**: Applies Gaussian blur.\n  - **`.watermark(text, options)`**: Adds text watermark.\n  - **`.sharpen()` / `.emboss()` / `.edgeDetection()`**: Convolution filters.\n  - **`.resize(w, h)` / `.crop(x, y, w, h)`**: Transformations.\n  - **`.render()`**: Returns `Promise<ImageData>`.\n  - `.toCanvas(canvas)`: Draws to canvas and returns `Promise<HTMLCanvasElement>`.\n  - `.toHtmlElement(elementOrId)`: Displays result in an `<img>` (src) or `<canvas>` element.\n  - `.toBlob(mime, quality)`: Returns `Promise<Blob>`.\n  - **`.toDataURL(mime, quality)`**: Returns `Promise<string>`.\n\n### Core Utilities (`@gks101/luminajs/core`)\n\n- **`loadImage(source)`**: Returns a `Promise` resolving to an `HTMLImageElement`. Supports URL strings and `File` objects.\n- **`getPixelData(image)`**: Extracts `ImageData` from an image using an offscreen canvas.\n- **`putPixelData(canvas, imageData)`**: Writes `ImageData` back to a canvas element.\n- **`canvasToBlob(canvas, mimeType, quality)`**: Async conversion of a canvas to a `Blob`.\n- **`resize(source, width, height)`**: Resizes an image or canvas. Returns a new `HTMLCanvasElement`.\n- **`crop(source, x, y, width, height)`**: Crops an image or canvas. Returns a new `HTMLCanvasElement`.\n\n### Filters (`@gks101/luminajs/filters`)\n\n- **`grayscale(imageData)`**: Converts image to grayscale using ITU-R BT.601.\n- **`brightness(imageData, level)`**: Adjusts brightness [-255, 255].\n- **`contrast(imageData, level)`**: Adjusts contrast [-100, 100].\n- **`sepia(imageData)`**: Applies a classic antique sepia tone.\n- **`ascii(imageData, options)`**: Transforms an image into an ASCII text string. Recommended to use with `getResizedImageData`.\n- **`blur(imageData, radius)`**: Applies a box blur effect. `radius` is the blur intensity (default: 1).\n- **`gaussianBlur(imageData, sigma)`**: Applies a smooth Gaussian blur effect. `sigma` is the standard deviation (default: 2).\n- **`watermark(imageData, text, options)`**: Overlays text on the image. Options include `x`, `y`, `font`, `color`.\n- **`backgroundBlur(imageData, options)`**: Selectively blurs the background. Options include `sigma`, `centerX`, `centerY`, `focusRadius`, `falloff`.\n- **`applyConvolution(data, width, height, kernel)`**: Generic convolution engine for custom matrix operations (e.g., 3x3 kernel).\n- **`sharpen(imageData)`**: Sharpens the image using a convolution kernel.\n- **`emboss(imageData)`**: Applies an emboss effect using a convolution kernel.\n- **`edgeDetection(imageData)`**: Highlights edges using a convolution kernel.\n\n## ASCII Art Example\n\n### 💎 Chainable API (Recommended)\n\n```javascript\nimport { lumina } from '@gks101/luminajs';\n\n// 100 characters wide, auto-calculated height\nconst text = await lumina('photo.jpg').resize(100, 50).ascii().render();\n\nconsole.log(text);\n```\n\n### Functional Approach\n\n```javascript\nimport { loadImage, getResizedImageData, ascii } from '@gks101/luminajs';\n\nconst img = await loadImage('photo.jpg');\n\n// 1. Downsample for text (e.g., 100 characters wide)\nconst smallData = getResizedImageData(img, 100, 50);\n\n// 2. Convert to ASCII\nconst text = ascii(smallData);\n\n// 3. Display\nconsole.log(text);\n```\n\n## Resize and Crop Example\n\n### 💎 Chainable API (Recommended)\n\n```javascript\nimport { lumina } from '@gks101/luminajs';\n\n// Resize and then crop in one go\nawait lumina('photo.jpg')\n  .resize(800, 600)\n  .crop(100, 100, 300, 300)\n  .toCanvas(document.getElementById('myCanvas'));\n```\n\n### Functional Approach\n\n```javascript\nimport { loadImage, resize, crop } from '@gks101/luminajs';\n\nconst img = await loadImage('photo.jpg');\n\n// 1. Resize to 800x600\nconst resizedCanvas = resize(img, 800, 600);\n\n// 2. Crop a 300x300 square from (100, 100)\nconst croppedCanvas = crop(resizedCanvas, 100, 100, 300, 300);\n\ndocument.body.appendChild(croppedCanvas);\n```\n\n## Blur Filter Example\n\n```javascript\nimport { loadImage, getPixelData, putPixelData, blur } from '@gks101/luminajs';\n\nconst img = await loadImage('photo.jpg');\nconst { imageData } = getPixelData(img);\n\n// Apply blur with radius 5\nconst blurredData = blur(imageData, 5);\n\n// Render back to canvas\nconst canvas = document.getElementById('myCanvas');\nputPixelData(canvas, blurredData);\n```\n\n## Gaussian Blur Example\n\n```javascript\nimport {\n  loadImage,\n  getPixelData,\n  putPixelData,\n  gaussianBlur,\n} from '@gks101/luminajs';\n\nconst img = await loadImage('photo.jpg');\nconst { imageData } = getPixelData(img);\n\n// Apply smooth Gaussian blur with sigma 3.5\nconst blurredData = gaussianBlur(imageData, 3.5);\n\n// Render back to canvas\nconst canvas = document.getElementById('myCanvas');\nputPixelData(canvas, blurredData);\n```\n\n## Watermark Example\n\n```javascript\nimport {\n  loadImage,\n  getPixelData,\n  putPixelData,\n  watermark,\n} from '@gks101/luminajs';\n\nconst img = await loadImage('photo.jpg');\nconst { imageData } = getPixelData(img);\n\n// Add a semi-transparent watermark at (20, 20)\nconst watermarkedData = watermark(imageData, '© 2024 LuminaJS', {\n  x: 20,\n  y: 20,\n  font: '32px Arial',\n  color: 'rgba(255, 255, 255, 0.5)',\n});\n\nconst canvas = document.getElementById('myCanvas');\nputPixelData(canvas, watermarkedData);\n```\n\n## Background Blur (Portrait) Example\n\n```javascript\nimport {\n  loadImage,\n  getPixelData,\n  putPixelData,\n  backgroundBlur,\n} from '@gks101/luminajs';\n\nconst img = await loadImage('portrait.jpg');\nconst { imageData } = getPixelData(img);\n\n// Apply a portrait blur effect (sharp center, blurred background)\nconst portraitData = backgroundBlur(imageData, {\n  sigma: 6,\n  focusRadius: 150,\n  falloff: 200,\n});\n\nconst canvas = document.getElementById('myCanvas');\nputPixelData(canvas, portraitData);\n```\n\n## Convolution Filters Example (Sharpen, Emboss, Edge Detection)\n\nLuminaJS provides a generic convolution engine (`applyConvolution`) along with pre-built convolution filters such as `sharpen`, `emboss`, and `edgeDetection`. These filters modify pixels based on the values of their neighbors using a 3x3 matrix.\n\n### Using Built-in Convolution Filters\n\n```javascript\nimport {\n  loadImage,\n  getPixelData,\n  putPixelData,\n  sharpen,\n  emboss,\n  edgeDetection,\n} from '@gks101/luminajs';\n\nconst img = await loadImage('photo.jpg');\nconst { imageData } = getPixelData(img);\n\n// Apply a built-in sharpen filter\nconst sharpenedData = sharpen(imageData);\n\n// Or apply emboss or edge detection\n// const embossedData = emboss(imageData);\n// const edgeData = edgeDetection(imageData);\n\nconst canvas = document.getElementById('myCanvas');\nputPixelData(canvas, sharpenedData);\n```\n\n### Using the Generic Convolution Engine\n\nYou can also pass your own custom 3x3 kernel (as an array of 9 numbers) to `applyConvolution`.\n\n```javascript\nimport {\n  loadImage,\n  getPixelData,\n  putPixelData,\n  applyConvolution,\n} from '@gks101/luminajs';\n\nconst img = await loadImage('photo.jpg');\nconst { imageData } = getPixelData(img);\n\n// Define a custom 3x3 kernel (e.g., an exaggerated edge detection kernel)\nconst customKernel = [-1, -1, -1, -1, 9, -1, -1, -1, -1];\n\n// applyConvolution mutates the array data in place\napplyConvolution(\n  imageData.data,\n  imageData.width,\n  imageData.height,\n  customKernel,\n);\n\nconst canvas = document.getElementById('myCanvas');\nputPixelData(canvas, imageData);\n```\n\n## React Integration\n\nLuminaJS provides a dedicated React entry point with hooks and components.\n\n> Client-only warning: `useLumina`, `LuminaCanvas`, `ImageAreaSelector`, and `ImageCropper` are browser-side features. Do not run them during server rendering.\n\n### `useLumina` Hook\n\nThe `useLumina` hook manages the image processing lifecycle, providing `result`, `loading`, and `error` states. You can pass image editing props directly, or use the `operations` function for advanced chaining. It also returns a `getImage()` function which you can call to generate the image on demand.\n\n```jsx\nimport { useLumina } from '@gks101/luminajs/react';\n\nfunction ImagePreview({ file }) {\n  const { result, loading, error, getImage } = useLumina({\n    source: file,\n    grayscale: true,\n    brightness: 20,\n    sharpen: true,\n    outputType: 'dataUrl', // 'imageData' | 'dataUrl' | 'blob'\n    deps: [file],\n  });\n\n  const handleUpload = async () => {\n    // Generate the blob on demand\n    const blob = await getImage('blob');\n    // await myUploadFunction(blob);\n  };\n\n  if (loading) return <div>Processing image...</div>;\n  if (error) return <div>Error: {error.message}</div>;\n\n  return (\n    <div>\n      <img src={result} alt=\"Processed preview\" />\n      <button onClick={handleUpload}>Upload Processed Image</button>\n    </div>\n  );\n}\n```\n\n### `LuminaCanvas` Component\n\nA declarative way to render processed images directly onto a canvas element. It accepts image editing options directly as props!\n\n```jsx\nimport { LuminaCanvas } from '@gks101/luminajs/react';\n\nfunction App() {\n  const handleImageGenerated = (dataUrl) => {\n    console.log('Got the generated image data URL:', dataUrl);\n  };\n\n  return (\n    <LuminaCanvas\n      source=\"portrait.jpg\"\n      gaussianBlur={3}\n      sepia={true}\n      resize={{ width: 800, height: 600 }}\n      width={800} // HTML attribute\n      height={600} // HTML attribute\n      className=\"my-custom-canvas\"\n      outputType=\"dataUrl\"\n      getImage={handleImageGenerated}\n      onProcessError={(err) => console.error(err)}\n    />\n  );\n}\n```\n\n### `ImageCropper` Component\n\n`ImageCropper` provides a complete drag-to-crop workflow. Draw a crop area, drag inside it to move it, or drag any handle to resize it before clicking Apply Crop. The same component swaps from the original image selector to the cropped `LuminaCanvas` result. The Reset button reloads the original image for another crop. It natively supports mobile touch interactions, including pinch-to-resize for two-finger gestures.\n\n```jsx\nimport { useState } from 'react';\nimport { ImageCropper } from '@gks101/luminajs/react';\n\nfunction AvatarEditor() {\n  const [avatarPreview, setAvatarPreview] = useState('');\n\n  return (\n    <>\n      <ImageCropper\n        src=\"portrait.jpg\"\n        aspectRatio={1}\n        outputFormat=\"dataUrl\"\n        maxWidth={500}\n        maxHeight={500}\n        allowResize={true}\n        onCropComplete={(result) => {\n          if (typeof result === 'string') setAvatarPreview(result);\n        }}\n        onError={(error) => console.error(error.message)}\n      />\n\n      {avatarPreview && <img src={avatarPreview} alt=\"Cropped avatar\" />}\n    </>\n  );\n}\n```\n\nFor uploads, use `outputFormat=\"blob\"`:\n\n```jsx\n<ImageCropper\n  src={file}\n  aspectRatio={16 / 9}\n  outputFormat=\"blob\"\n  onCropComplete={async (result) => {\n    if (!(result instanceof Blob)) return;\n\n    const body = new FormData();\n    body.append('image', result, 'banner.png');\n    await fetch('/api/upload', { method: 'POST', body });\n  }}\n/>\n```\n\n### Available React Props\n\nBoth `useLumina` and `LuminaCanvas` accept these explicit props to make image processing incredibly simple without writing chained operations manually:\n\n| Prop             | Type                                                      | Description                                    |\n| :--------------- | :-------------------------------------------------------- | :--------------------------------------------- |\n| `grayscale`      | `boolean`                                                 | Applies a grayscale filter.                    |\n| `brightness`     | `number`                                                  | Adjusts brightness [-255, 255].                |\n| `contrast`       | `number`                                                  | Adjusts contrast [-100, 100].                  |\n| `sepia`          | `boolean`                                                 | Applies a classic antique sepia tone.          |\n| `blur`           | `number`                                                  | Applies a box blur effect.                     |\n| `gaussianBlur`   | `number`                                                  | Applies a smooth Gaussian blur effect.         |\n| `sharpen`        | `boolean`                                                 | Sharpens the image.                            |\n| `emboss`         | `boolean`                                                 | Applies an emboss effect.                      |\n| `edgeDetection`  | `boolean`                                                 | Highlights edges.                              |\n| `resize`         | `{ width: number, height: number }`                       | Resizes the image to the specified dimensions. |\n| `crop`           | `{ x: number, y: number, width: number, height: number }` | Crops the image.                               |\n| `watermark`      | `{ text: string, options?: any }`                         | Overlays text on the image.                    |\n| `backgroundBlur` | `any`                                                     | Selectively blurs the background.              |\n| `ascii`          | `boolean \\| Record<string, any>`                          | Transforms the image into ASCII text.          |\n\n### Getting the Processed Image (`getImage`)\n\nA common requirement is to retrieve the processed image data so you can upload it to a server or pass it to another component. Both the hook and the component provide an easy way to do this via `getImage`.\n\n#### Using `useLumina`\n\nThe hook returns a `getImage` asynchronous function. This allows you to generate the image on demand (e.g. when a user clicks a \"Save\" button), using the latest props applied.\n\n```jsx\nconst handleUpload = async () => {\n  // You can override the outputType when calling getImage\n  const finalBlob = await getImage('blob');\n  await uploadToServer(finalBlob);\n};\n```\n\n#### Using `LuminaCanvas`\n\nThe component accepts a `getImage` prop. This is a callback that will be triggered automatically as soon as the canvas finishes rendering the processed image.\n\n```jsx\n<LuminaCanvas\n  source=\"photo.jpg\"\n  outputType=\"dataUrl\" // format passed to getImage (dataUrl, blob, imageData, canvas)\n  getImage={(dataUrl) => {\n    // Save to state, send to a parent component, etc.\n    setProcessedImage(dataUrl);\n  }}\n/>\n```\n\n## ImageCropper - Props\n\nThis repository includes the ImageCropper component. New props were added to allow customizing the Apply Crop and Reset buttons:\n\n- allowResize: boolean (optional) - Shows resize handles on the crop area so users can adjust an existing selection before applying. Default: true.\n- applyButtonClassName: string (optional) - CSS class for the Apply button.\n- applyButtonStyle: CSSProperties (optional) - Inline style object for the Apply button.\n- resetButtonClassName: string (optional) - CSS class for the Reset button.\n- resetButtonStyle: CSSProperties (optional) - Inline style object for the Reset button.\n- showPreview: boolean (optional) - Shows the applied crop result inside the cropper after Apply. Default: true. Set false when the parent owns preview/upload UI.\n- buttonPosition: 'top-left' | 'top-right' | 'top-center' | 'bottom-left' | 'bottom-center' | 'bottom-right' (optional) - Position of the Apply/Reset button container. Default: 'top-left'.\n- zIndex: number (internal) - The button container uses a high z-index (1001) to ensure the buttons render above the image selection overlay.\n- onApply: (crop) => boolean | void | Promise<boolean | void> (optional) - Callback invoked when the Apply button is clicked. Returning `false` (or a Promise resolving to `false`) will abort the component's default apply behavior.\n- onReset: () => boolean | void | Promise<boolean | void> (optional) - Callback invoked when Reset is clicked. Returning `false` will abort the default reset.\n\nThese props are optional and backward-compatible.\n\n---\n\n## License\n\nMIT © LuminaJS Team\n","readmeFilename":"README.md"}