{"_id":"topiray-auth-react","_rev":"32-c7bba9ae32320ca4fdaf4d1afc3b1f20","name":"topiray-auth-react","dist-tags":{"alpha":"1.0.5-alpha.15","latest":"1.2.0"},"versions":{"1.0.0":{"name":"topiray-auth-react","version":"1.0.0","keywords":["react","authentication","components","ui","library"],"author":"","license":"ISC","_id":"topiray-auth-react@1.0.0","maintainers":[{"name":"jayarrowz","email":"arrowzflame321@gmail.com"}],"dist":{"shasum":"f8a6c5535a055bcdb3168db77c6c5cff96f46bab","tarball":"https://registry.npmjs.org/topiray-auth-react/-/topiray-auth-react-1.0.0.tgz","fileCount":30,"integrity":"sha512-FZeUAnRYLweZnECql6uDaEJeUaYAD/xeuU1N/WYfme7Kvt+RUwBzr6+4uARu3KTaf96Mmueq+seveYKcZMULjg==","signatures":[{"sig":"MEUCIQCGv2VxISB8qvfDvFwRm2rkCAIQ2t7aJ7/pcNS84BRPJgIgZ3jwawEuBFm83QiailUwKfEDZBt79vzvI7igH2uiR3A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":582980},"main":"dist/index.es.js","type":"module","types":"dist/index.d.ts","module":"dist/index.es.js","gitHead":"e96d384809dbbf661c4298d6d25f5e55c451677a","scripts":{"dev":"vite","demo":"vite","test":"echo \"Error: no test specified\" && exit 1","build":"vite build","preview":"vite preview","build:demo":"vite build --mode demo"},"_npmUser":{"name":"jayarrowz","email":"arrowzflame321@gmail.com"},"_npmVersion":"10.9.0","description":"A customizable React authentication component library","directories":{},"_nodeVersion":"23.2.0","dependencies":{"qrcode":"^1.5.4","lucide-react":"^0.525.0","@mui/material":"^7.2.0","@types/qrcode":"^1.5.5","@emotion/react":"^11.14.0","@emotion/styled":"^11.14.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.0.1","typescript":"^5.8.3","@types/node":"^24.0.10","@types/react":"^19.1.8","vite-plugin-dts":"^4.5.4","@types/react-dom":"^19.1.6","rollup-plugin-dts":"^6.2.1","@vitejs/plugin-react":"^4.6.0","@rollup/plugin-terser":"^0.4.4"},"peerDependencies":{"react":"^19.1.0","react-dom":"^19.1.0"},"_npmOperationalInternal":{"tmp":"tmp/topiray-auth-react_1.0.0_1754311571081_0.7897300870733561","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-alpha.7":{"name":"topiray-auth-react","version":"1.0.0-alpha.7","keywords":["react","authentication","components","ui","library"],"author":"","license":"ISC","_id":"topiray-auth-react@1.0.0-alpha.7","maintainers":[{"name":"jayarrowz","email":"arrowzflame321@gmail.com"}],"dist":{"shasum":"3dc5b694571f1ab6a65d6a74dd440409a0b09cd9","tarball":"https://registry.npmjs.org/topiray-auth-react/-/topiray-auth-react-1.0.0-alpha.7.tgz","fileCount":30,"integrity":"sha512-OuNaZUOvM50e4mfAXOyJ6II3qdCGjf4GCzLX930Xh2jFTDh9B9aETVLVq/sb5CNUG40ue1gYg6jR3JdB6D/YwA==","signatures":[{"sig":"MEUCIQDkkJIdNhPKGtyjPEPlRxU7FaLwSRnmZC1rJmcPfq5PxQIgM/2NfjdwDhAD1jrdtUFwaRcYDqHYxfjFL6e8SE5JArU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":487422},"main":"dist/index.es.js","type":"module","types":"dist/index.d.ts","module":"dist/index.es.js","gitHead":"8fc7a0e837a6bb4063943b8111a8afdae4a8cc0e","scripts":{"dev":"vite","demo":"vite","test":"echo \"Error: no test specified\" && exit 1","build":"vite build","preview":"vite preview","build:demo":"vite build --mode demo"},"_npmUser":{"name":"jayarrowz","email":"arrowzflame321@gmail.com"},"_npmVersion":"10.8.2","description":"A customizable React authentication component library","directories":{},"_nodeVersion":"18.20.8","dependencies":{"qrcode":"^1.5.4","lucide-react":"^0.525.0","@mui/material":"^7.2.0","@types/qrcode":"^1.5.5","@emotion/react":"^11.14.0","@emotion/styled":"^11.14.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"vite":"^7.0.1","typescript":"^5.8.3","@types/node":"^24.0.10","@types/react":"^19.1.8","vite-plugin-dts":"^4.5.4","@types/react-dom":"^19.1.6","rollup-plugin-dts":"^6.2.1","@vitejs/plugin-react":"^4.6.0","@rollup/plugin-terser":"^0.4.4"},"peerDependencies":{"react":"^19.1.0","react-dom":"^19.1.0"},"_npmOperationalInternal":{"tmp":"tmp/topiray-auth-react_1.0.0-alpha.7_1756981015200_0.48422325191313464","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"topiray-auth-react","version":"1.0.1","keywords":["react","authentication","components","ui","library"],"author":"","license":"ISC","_id":"topiray-auth-react@1.0.1","maintainers":[{"name":"jayarrowz","email":"arrowzflame321@gmail.com"}],"dist":{"shasum":"6879435f8e048e8f56cb4bafd9fb8146b45d2e69","tarball":"https://registry.npmjs.org/topiray-auth-react/-/topiray-auth-react-1.0.1.tgz","fileCount":30,"integrity":"sha512-f61ak0KlsPIt1FHr49MY373zTs5b9/6d3HIeodzQQMsFPD2SHqU72jjWgSns4/oJOSE/BjLQUJzWW+gjOJufSg==","signatures":[{"sig":"MEUCIQD7iqp/LuFAEkXrS+OlJE6PwADiRu7ZRMa+PBnZTmOH6gIgCzx2x3L1n/6wBneyybN0PFZ8/Bx9v02ZV4sIr9cLFis=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":586256},"main":"dist/index.es.js","type":"module","types":"dist/index.d.ts","module":"dist/index.es.js","gitHead":"328a3697fae5dacbcb83b7a504869a9d696b2622","scripts":{"dev":"vite","demo":"vite","test":"echo \"Error: no test specified\" && exit 1","build":"vite build","preview":"vite preview","build:demo":"vite build --mode demo"},"_npmUser":{"name":"jayarrowz","email":"arrowzflame321@gmail.com"},"_npmVersion":"10.9.0","description":"A customizable React authentication component library","directories":{},"_nodeVersion":"23.2.0","dependencies":{"qrcode":"^1.5.4","lucide-react":"^0.525.0","@mui/material":"^7.2.0","@types/qrcode":"^1.5.5","@emotion/react":"^11.14.0","@emotion/styled":"^11.14.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.0.1","typescript":"^5.8.3","@types/node":"^24.0.10","@types/react":"^19.1.8","vite-plugin-dts":"^4.5.4","@types/react-dom":"^19.1.6","rollup-plugin-dts":"^6.2.1","@vitejs/plugin-react":"^4.6.0","@rollup/plugin-terser":"^0.4.4"},"peerDependencies":{"react":"^19.1.0","react-dom":"^19.1.0"},"_npmOperationalInternal":{"tmp":"tmp/topiray-auth-react_1.0.1_1756981568045_0.3396652475309645","host":"s3://npm-registry-packages-npm-production"}},"1.0.1-alpha.8":{"name":"topiray-auth-react","version":"1.0.1-alpha.8","keywords":["react","authentication","components","ui","library"],"author":"","license":"ISC","_id":"topiray-auth-react@1.0.1-alpha.8","maintainers":[{"name":"jayarrowz","email":"arrowzflame321@gmail.com"}],"dist":{"shasum":"f645ebd1b9668e0eb7b181cf6917a9355bd848aa","tarball":"https://registry.npmjs.org/topiray-auth-react/-/topiray-auth-react-1.0.1-alpha.8.tgz","fileCount":30,"integrity":"sha512-nJDkxZC60nPGmEa9EsVfff7h8937/arvPTAonkvsTy+BhRYz/ycTsE66RPv1k4b8roA9Ci6kQIzUxVfWK3qOzA==","signatures":[{"sig":"MEQCIFQCYb9vkLs9eVmQefSU+3t6fk4OLg803gWoVzN5rhXvAiAr6bSBrYbB6VP1yuDqmUCCEYaRstcc1SF/UFWs8UeA1Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":487643},"main":"dist/index.es.js","type":"module","types":"dist/index.d.ts","module":"dist/index.es.js","gitHead":"0b41528dbb36d665622e74d64d5780b69d0dc9a2","scripts":{"dev":"vite","demo":"vite","test":"echo \"Error: no test specified\" && exit 1","build":"vite build","preview":"vite preview","build:demo":"vite build --mode demo"},"_npmUser":{"name":"jayarrowz","email":"arrowzflame321@gmail.com"},"_npmVersion":"10.8.2","description":"A customizable React authentication component library","directories":{},"_nodeVersion":"18.20.8","dependencies":{"qrcode":"^1.5.4","lucide-react":"^0.525.0","@mui/material":"^7.2.0","@types/qrcode":"^1.5.5","@emotion/react":"^11.14.0","@emotion/styled":"^11.14.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"vite":"^7.0.1","typescript":"^5.8.3","@types/node":"^24.0.10","@types/react":"^19.1.8","vite-plugin-dts":"^4.5.4","@types/react-dom":"^19.1.6","rollup-plugin-dts":"^6.2.1","@vitejs/plugin-react":"^4.6.0","@rollup/plugin-terser":"^0.4.4"},"peerDependencies":{"react":"^19.1.0","react-dom":"^19.1.0"},"_npmOperationalInternal":{"tmp":"tmp/topiray-auth-react_1.0.1-alpha.8_1764423731819_0.047210536194339126","host":"s3://npm-registry-packages-npm-production"}},"1.0.1-alpha.9":{"name":"topiray-auth-react","version":"1.0.1-alpha.9","keywords":["react","authentication","components","ui","library"],"author":"","license":"ISC","_id":"topiray-auth-react@1.0.1-alpha.9","maintainers":[{"name":"jayarrowz","email":"arrowzflame321@gmail.com"}],"dist":{"shasum":"5c62349fba324273e3d6028eb9ecc6e0961fb1a8","tarball":"https://registry.npmjs.org/topiray-auth-react/-/topiray-auth-react-1.0.1-alpha.9.tgz","fileCount":30,"integrity":"sha512-2PZL9BTwhWvVFIpFbQrksIKSLYWR4DakoxND/IbRn4jwyuv6+3paWWJdAygXIVjKIgYbMv26Hk6OpqtGrfypJg==","signatures":[{"sig":"MEUCIQD2qne5NYHtWJegFK+GxdC5aN4P44N7x7VfRwQsuvVxKwIgWZgrIZg5PYvHvnOAARc8BNeUrDWSoUvOIeH3PpWba2M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":487663},"main":"dist/index.es.js","type":"module","types":"dist/index.d.ts","module":"dist/index.es.js","gitHead":"be131f36a42b2fbad5423c808ca17db7d7059581","scripts":{"dev":"vite","demo":"vite","test":"echo \"Error: no test specified\" && exit 1","build":"vite build","preview":"vite preview","build:demo":"vite build --mode demo"},"_npmUser":{"name":"jayarrowz","email":"arrowzflame321@gmail.com"},"_npmVersion":"10.8.2","description":"A customizable React authentication component library","directories":{},"_nodeVersion":"18.20.8","dependencies":{"qrcode":"^1.5.4","lucide-react":"^0.525.0","@mui/material":"^7.2.0","@types/qrcode":"^1.5.5","@emotion/react":"^11.14.0","@emotion/styled":"^11.14.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"vite":"^7.0.1","typescript":"^5.8.3","@types/node":"^24.0.10","@types/react":"^19.1.8","vite-plugin-dts":"^4.5.4","@types/react-dom":"^19.1.6","rollup-plugin-dts":"^6.2.1","@vitejs/plugin-react":"^4.6.0","@rollup/plugin-terser":"^0.4.4"},"peerDependencies":{"react":"^19.1.0","react-dom":"^19.1.0"},"_npmOperationalInternal":{"tmp":"tmp/topiray-auth-react_1.0.1-alpha.9_1764424883792_0.2968767733846711","host":"s3://npm-registry-packages-npm-production"}},"1.0.1-alpha.10":{"name":"topiray-auth-react","version":"1.0.1-alpha.10","keywords":["react","authentication","components","ui","library"],"author":"","license":"ISC","_id":"topiray-auth-react@1.0.1-alpha.10","maintainers":[{"name":"jayarrowz","email":"arrowzflame321@gmail.com"}],"dist":{"shasum":"391154ccbced7bcf64cb5e1e8dda9249b09fd898","tarball":"https://registry.npmjs.org/topiray-auth-react/-/topiray-auth-react-1.0.1-alpha.10.tgz","fileCount":30,"integrity":"sha512-0vfK7LUZFNvDm7BJRilspGbe86CBQI54lC1BwWrTw7UZ+uTongvU7aboExv0WXw0/Z/1jhjk83eRGQWFRhgi4w==","signatures":[{"sig":"MEUCIFJRLNUUBCLdm094xMuPKOJ9m0lqnv1v6Kzl6+aMUBFGAiEAywX0eEO+8O2VpcQGr7yBX9aE8f+1NlzeY8Q3xrEHbZk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":488062},"main":"dist/index.es.js","type":"module","types":"dist/index.d.ts","module":"dist/index.es.js","gitHead":"dca5c871dc82c8f0197158cabce4dba2ae996c9e","scripts":{"dev":"vite","demo":"vite","test":"echo \"Error: no test specified\" && exit 1","build":"vite build","preview":"vite preview","build:demo":"vite build --mode demo"},"_npmUser":{"name":"jayarrowz","email":"arrowzflame321@gmail.com"},"_npmVersion":"10.8.2","description":"A customizable React authentication component library","directories":{},"_nodeVersion":"18.20.8","dependencies":{"qrcode":"^1.5.4","lucide-react":"^0.525.0","@mui/material":"^7.2.0","@types/qrcode":"^1.5.5","@emotion/react":"^11.14.0","@emotion/styled":"^11.14.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"vite":"^7.0.1","typescript":"^5.8.3","@types/node":"^24.0.10","@types/react":"^19.1.8","vite-plugin-dts":"^4.5.4","@types/react-dom":"^19.1.6","rollup-plugin-dts":"^6.2.1","@vitejs/plugin-react":"^4.6.0","@rollup/plugin-terser":"^0.4.4"},"peerDependencies":{"react":"^19.1.0","react-dom":"^19.1.0"},"_npmOperationalInternal":{"tmp":"tmp/topiray-auth-react_1.0.1-alpha.10_1764424975322_0.4989782140379566","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"topiray-auth-react","version":"1.0.2","keywords":["react","authentication","components","ui","library"],"author":"","license":"ISC","_id":"topiray-auth-react@1.0.2","maintainers":[{"name":"jayarrowz","email":"arrowzflame321@gmail.com"}],"dist":{"shasum":"b776120fb08c427001ddf11f5f82ef947cf025f9","tarball":"https://registry.npmjs.org/topiray-auth-react/-/topiray-auth-react-1.0.2.tgz","fileCount":30,"integrity":"sha512-7msAs1OsWQnZEwfr2FX7Rux0DYc3XphjSoUGz53zIu6ePS9KamJEZPn3Ly8rcJiLn4JNV4fjiEwviMBq+7kTqw==","signatures":[{"sig":"MEUCIQC9EtviJKu/1vfvRsr7XIcVK/FScVmXWZFy3mFUzd589AIgK8feGoT8z1VRdoMAfDcjM+zHPx/bCr/vDuIboFY/T20=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":586685},"main":"dist/index.es.js","type":"module","types":"dist/index.d.ts","module":"dist/index.es.js","gitHead":"e103150ac7edc0e474f214987f01428909537633","scripts":{"dev":"vite","demo":"vite","test":"echo \"Error: no test specified\" && exit 1","build":"vite build","preview":"vite preview","build:demo":"vite build --mode demo"},"_npmUser":{"name":"jayarrowz","email":"arrowzflame321@gmail.com"},"_npmVersion":"10.8.2","description":"A customizable React authentication component library","directories":{},"_nodeVersion":"20.19.0","dependencies":{"qrcode":"^1.5.4","lucide-react":"^0.525.0","@mui/material":"^7.2.0","@types/qrcode":"^1.5.5","@emotion/react":"^11.14.0","@emotion/styled":"^11.14.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.0.1","typescript":"^5.8.3","@types/node":"^24.0.10","@types/react":"^19.1.8","vite-plugin-dts":"^4.5.4","@types/react-dom":"^19.1.6","rollup-plugin-dts":"^6.2.1","@vitejs/plugin-react":"^4.6.0","@rollup/plugin-terser":"^0.4.4"},"peerDependencies":{"react":"^19.1.0","react-dom":"^19.1.0"},"_npmOperationalInternal":{"tmp":"tmp/topiray-auth-react_1.0.2_1764425041530_0.11416977646915671","host":"s3://npm-registry-packages-npm-production"}},"1.0.2-alpha.11":{"name":"topiray-auth-react","version":"1.0.2-alpha.11","keywords":["react","authentication","components","ui","library"],"author":"","license":"ISC","_id":"topiray-auth-react@1.0.2-alpha.11","maintainers":[{"name":"jayarrowz","email":"arrowzflame321@gmail.com"}],"dist":{"shasum":"3ce2870d38c5b5f5a5d52750873e1f09bc9cb4ca","tarball":"https://registry.npmjs.org/topiray-auth-react/-/topiray-auth-react-1.0.2-alpha.11.tgz","fileCount":30,"integrity":"sha512-jzsygcifVpx8BG8RM2Owi7C5FGt9sJ5UDcMYbYUk0D53JtsDBKmpkMyZwm2yr8giHlE+qdfbBmvHVwBd8SAqcQ==","signatures":[{"sig":"MEYCIQDQj1dCGxF0GYAcUrF45UBb9Sx48pe0azFEYl05dDXmogIhAMAa5KF79DvkvvF7smauTNG7wML2lrw1tkNN/+2IzkRi","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":488062},"main":"dist/index.es.js","type":"module","types":"dist/index.d.ts","module":"dist/index.es.js","gitHead":"e103150ac7edc0e474f214987f01428909537633","scripts":{"dev":"vite","demo":"vite","test":"echo \"Error: no test specified\" && exit 1","build":"vite build","preview":"vite preview","build:demo":"vite build --mode demo"},"_npmUser":{"name":"jayarrowz","email":"arrowzflame321@gmail.com"},"_npmVersion":"10.8.2","description":"A customizable React authentication component library","directories":{},"_nodeVersion":"18.20.8","dependencies":{"qrcode":"^1.5.4","lucide-react":"^0.525.0","@mui/material":"^7.2.0","@types/qrcode":"^1.5.5","@emotion/react":"^11.14.0","@emotion/styled":"^11.14.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"vite":"^7.0.1","typescript":"^5.8.3","@types/node":"^24.0.10","@types/react":"^19.1.8","vite-plugin-dts":"^4.5.4","@types/react-dom":"^19.1.6","rollup-plugin-dts":"^6.2.1","@vitejs/plugin-react":"^4.6.0","@rollup/plugin-terser":"^0.4.4"},"peerDependencies":{"react":"^19.1.0","react-dom":"^19.1.0"},"_npmOperationalInternal":{"tmp":"tmp/topiray-auth-react_1.0.2-alpha.11_1764425092810_0.798599157602528","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"topiray-auth-react","version":"1.0.3","keywords":["react","authentication","components","ui","library"],"author":"","license":"ISC","_id":"topiray-auth-react@1.0.3","maintainers":[{"name":"jayarrowz","email":"arrowzflame321@gmail.com"}],"dist":{"shasum":"36e87e7badbebc62196e6ff15d0e1c961f19566e","tarball":"https://registry.npmjs.org/topiray-auth-react/-/topiray-auth-react-1.0.3.tgz","fileCount":30,"integrity":"sha512-H+QqMmr7zPFj7jfPxb4SoRXz37eUenzCBp7eeitQYCSmrN4jHx7Aw+j+VrD2rl7gt+yi6x9fgYW+pbNe7yfdmg==","signatures":[{"sig":"MEQCICHVY/8XC8EaEgW08KRKJ6GygJUWrsM4gCxoPmsRBZaHAiAh06paAs4D6L+/HlbpYIBhhutGsg6y/tAKHZvl7fjBfA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":586685},"main":"dist/index.es.js","type":"module","types":"dist/index.d.ts","module":"dist/index.es.js","gitHead":"36d94ea16e6c41426698eee34094673927781100","scripts":{"dev":"vite","demo":"vite","test":"echo \"Error: no test specified\" && exit 1","build":"vite build","preview":"vite preview","build:demo":"vite build --mode demo"},"_npmUser":{"name":"jayarrowz","email":"arrowzflame321@gmail.com"},"_npmVersion":"10.8.2","description":"A customizable React authentication component library","directories":{},"_nodeVersion":"20.19.0","dependencies":{"qrcode":"^1.5.4","lucide-react":"^0.525.0","@mui/material":"^7.2.0","@types/qrcode":"^1.5.5","@emotion/react":"^11.14.0","@emotion/styled":"^11.14.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.0.1","typescript":"^5.8.3","@types/node":"^24.0.10","@types/react":"^19.1.8","vite-plugin-dts":"^4.5.4","@types/react-dom":"^19.1.6","rollup-plugin-dts":"^6.2.1","@vitejs/plugin-react":"^4.6.0","@rollup/plugin-terser":"^0.4.4"},"peerDependencies":{"react":"^19.1.0","react-dom":"^19.1.0"},"_npmOperationalInternal":{"tmp":"tmp/topiray-auth-react_1.0.3_1764428917077_0.7767119263487572","host":"s3://npm-registry-packages-npm-production"}},"1.0.2-alpha.12":{"name":"topiray-auth-react","version":"1.0.2-alpha.12","keywords":["react","authentication","components","ui","library"],"author":"","license":"ISC","_id":"topiray-auth-react@1.0.2-alpha.12","maintainers":[{"name":"jayarrowz","email":"arrowzflame321@gmail.com"}],"dist":{"shasum":"e79b6b5c8775151181e9cb3832956033436f337a","tarball":"https://registry.npmjs.org/topiray-auth-react/-/topiray-auth-react-1.0.2-alpha.12.tgz","fileCount":30,"integrity":"sha512-8H2sPplEyEpDgKap7DOqhSI/7da3X5rSHWJsM8Kmi1G9uxpweg4CbTamt9kuvEMaNXsMuPSzZWRlHJmD7b0CMA==","signatures":[{"sig":"MEUCIETKrOcBG8zhD/1zFB6JwsuFW9i0jyyi8s/FKHnh+fP5AiEAi4pAPZ974fpqeeirxc58fKByHspLUpkCAb1H7FwsF6s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":488141},"main":"dist/index.es.js","type":"module","types":"dist/index.d.ts","module":"dist/index.es.js","gitHead":"144270e9673b19b4f2f8295000c20da1bbba940f","scripts":{"dev":"vite","demo":"vite","test":"echo \"Error: no test specified\" && exit 1","build":"vite build","preview":"vite preview","build:demo":"vite build --mode demo"},"_npmUser":{"name":"jayarrowz","email":"arrowzflame321@gmail.com"},"_npmVersion":"10.8.2","description":"A customizable React authentication component library","directories":{},"_nodeVersion":"18.20.8","dependencies":{"qrcode":"^1.5.4","lucide-react":"^0.525.0","@mui/material":"^7.2.0","@types/qrcode":"^1.5.5","@emotion/react":"^11.14.0","@emotion/styled":"^11.14.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"vite":"^7.0.1","typescript":"^5.8.3","@types/node":"^24.0.10","@types/react":"^19.1.8","vite-plugin-dts":"^4.5.4","@types/react-dom":"^19.1.6","rollup-plugin-dts":"^6.2.1","@vitejs/plugin-react":"^4.6.0","@rollup/plugin-terser":"^0.4.4"},"peerDependencies":{"react":"^19.1.0","react-dom":"^19.1.0"},"_npmOperationalInternal":{"tmp":"tmp/topiray-auth-react_1.0.2-alpha.12_1764428946974_0.9089466784584084","host":"s3://npm-registry-packages-npm-production"}},"1.0.3-alpha.13":{"name":"topiray-auth-react","version":"1.0.3-alpha.13","keywords":["react","authentication","components","ui","library"],"author":"","license":"ISC","_id":"topiray-auth-react@1.0.3-alpha.13","maintainers":[{"name":"jayarrowz","email":"arrowzflame321@gmail.com"}],"dist":{"shasum":"7e80683f558cdc551f5ee844c723fd8c2a13a94a","tarball":"https://registry.npmjs.org/topiray-auth-react/-/topiray-auth-react-1.0.3-alpha.13.tgz","fileCount":30,"integrity":"sha512-E+9IT3Uqg3LGSJJluJywvNWzZUxyxUoI5qEkFur1R10DoS9vduNWLTfjhSDi1olfDXv5ZWhhQXYBlKR/UR0zpw==","signatures":[{"sig":"MEQCIGSo52EQ2uztINf0a8qBMXjpgf21H+gGuDVLxNSBgteNAiB0CRq/lANk12dbFSS3lWzut/AkWkyE6D52w2NTmYvJjQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":488141},"main":"dist/index.es.js","type":"module","types":"dist/index.d.ts","module":"dist/index.es.js","gitHead":"36d94ea16e6c41426698eee34094673927781100","scripts":{"dev":"vite","demo":"vite","test":"echo \"Error: no test specified\" && exit 1","build":"vite build","preview":"vite preview","build:demo":"vite build --mode demo"},"_npmUser":{"name":"jayarrowz","email":"arrowzflame321@gmail.com"},"_npmVersion":"10.8.2","description":"A customizable React authentication component library","directories":{},"_nodeVersion":"18.20.8","dependencies":{"qrcode":"^1.5.4","lucide-react":"^0.525.0","@mui/material":"^7.2.0","@types/qrcode":"^1.5.5","@emotion/react":"^11.14.0","@emotion/styled":"^11.14.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"vite":"^7.0.1","typescript":"^5.8.3","@types/node":"^24.0.10","@types/react":"^19.1.8","vite-plugin-dts":"^4.5.4","@types/react-dom":"^19.1.6","rollup-plugin-dts":"^6.2.1","@vitejs/plugin-react":"^4.6.0","@rollup/plugin-terser":"^0.4.4"},"peerDependencies":{"react":"^19.1.0","react-dom":"^19.1.0"},"_npmOperationalInternal":{"tmp":"tmp/topiray-auth-react_1.0.3-alpha.13_1764428957897_0.8322781227909686","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"topiray-auth-react","version":"1.0.4","keywords":["react","authentication","components","ui","library"],"author":"","license":"ISC","_id":"topiray-auth-react@1.0.4","maintainers":[{"name":"jayarrowz","email":"arrowzflame321@gmail.com"}],"dist":{"shasum":"78d6a885d63ef7e6d8ec6209d9b767219acd60ec","tarball":"https://registry.npmjs.org/topiray-auth-react/-/topiray-auth-react-1.0.4.tgz","fileCount":30,"integrity":"sha512-Q5gXhOym10DT3tTyv6TRUONS5wMrAjfr02uCBrDUzT9a8Jp856MZSx1UJfDjq/MOxPPPyMnak2tjd9eaBoBIkg==","signatures":[{"sig":"MEQCIBCD5onOVD1/+HHhgCBa6/+zWqzzZTtL/yeAqwD9Xc3WAiBp/W8NfU7XJPD4wLJiAh1m+YRYbSg9X6PddaZciGEK1w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":586787},"main":"dist/index.es.js","type":"module","types":"dist/index.d.ts","module":"dist/index.es.js","gitHead":"43510a66c61a26feb876550614f922b9f7fbe929","scripts":{"dev":"vite","demo":"vite","test":"echo \"Error: no test specified\" && exit 1","build":"vite build","preview":"vite preview","build:demo":"vite build --mode demo"},"_npmUser":{"name":"jayarrowz","email":"arrowzflame321@gmail.com"},"_npmVersion":"10.8.2","description":"A customizable React authentication component library","directories":{},"_nodeVersion":"20.19.0","dependencies":{"qrcode":"^1.5.4","lucide-react":"^0.525.0","@mui/material":"^7.2.0","@types/qrcode":"^1.5.5","@emotion/react":"^11.14.0","@emotion/styled":"^11.14.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.0.1","typescript":"^5.8.3","@types/node":"^24.0.10","@types/react":"^19.1.8","vite-plugin-dts":"^4.5.4","@types/react-dom":"^19.1.6","rollup-plugin-dts":"^6.2.1","@vitejs/plugin-react":"^4.6.0","@rollup/plugin-terser":"^0.4.4"},"peerDependencies":{"react":"^19.1.0","react-dom":"^19.1.0"},"_npmOperationalInternal":{"tmp":"tmp/topiray-auth-react_1.0.4_1764429857839_0.06685131594672544","host":"s3://npm-registry-packages-npm-production"}},"1.0.4-alpha.14":{"name":"topiray-auth-react","version":"1.0.4-alpha.14","keywords":["react","authentication","components","ui","library"],"author":"","license":"ISC","_id":"topiray-auth-react@1.0.4-alpha.14","maintainers":[{"name":"jayarrowz","email":"arrowzflame321@gmail.com"}],"dist":{"shasum":"b0643042fd024c6f4af87f36e5e5bae1c654106b","tarball":"https://registry.npmjs.org/topiray-auth-react/-/topiray-auth-react-1.0.4-alpha.14.tgz","fileCount":30,"integrity":"sha512-DiWjZiVNibYmv7Wt/KdiZ2EAKaP5AnGBZkUPry+W8kyzVULcn61APsXoOl0JP0EMfGg28RYMoTu5eNuDGQB+YA==","signatures":[{"sig":"MEQCIHX77wP+fGTJWwCiBotaQVLhzizwU0lT/3UT5Bshi7MmAiApegkjAP1zcnVy47eD0HcgbHoZ3Jh4/yxtvI+vCxuEJw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":488141},"main":"dist/index.es.js","type":"module","types":"dist/index.d.ts","module":"dist/index.es.js","gitHead":"43510a66c61a26feb876550614f922b9f7fbe929","scripts":{"dev":"vite","demo":"vite","test":"echo \"Error: no test specified\" && exit 1","build":"vite build","preview":"vite preview","build:demo":"vite build --mode demo"},"_npmUser":{"name":"jayarrowz","email":"arrowzflame321@gmail.com"},"_npmVersion":"10.8.2","description":"A customizable React authentication component library","directories":{},"_nodeVersion":"18.20.8","dependencies":{"qrcode":"^1.5.4","lucide-react":"^0.525.0","@mui/material":"^7.2.0","@types/qrcode":"^1.5.5","@emotion/react":"^11.14.0","@emotion/styled":"^11.14.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"vite":"^7.0.1","typescript":"^5.8.3","@types/node":"^24.0.10","@types/react":"^19.1.8","vite-plugin-dts":"^4.5.4","@types/react-dom":"^19.1.6","rollup-plugin-dts":"^6.2.1","@vitejs/plugin-react":"^4.6.0","@rollup/plugin-terser":"^0.4.4"},"peerDependencies":{"react":"^19.1.0","react-dom":"^19.1.0"},"_npmOperationalInternal":{"tmp":"tmp/topiray-auth-react_1.0.4-alpha.14_1764429900235_0.45129073604218983","host":"s3://npm-registry-packages-npm-production"}},"1.0.5-alpha.15":{"name":"topiray-auth-react","version":"1.0.5-alpha.15","keywords":["react","authentication","components","ui","library"],"author":"","license":"ISC","_id":"topiray-auth-react@1.0.5-alpha.15","maintainers":[{"name":"jayarrowz","email":"arrowzflame321@gmail.com"}],"dist":{"shasum":"7aafd8e16ccf04930ae51d49798fb5baa746eeda","tarball":"https://registry.npmjs.org/topiray-auth-react/-/topiray-auth-react-1.0.5-alpha.15.tgz","fileCount":30,"integrity":"sha512-/Vg9Gbmb5nc4GuqbxVblPjFRNXO+2npokjNrJBVCqVJTFsMnxktgOGAUoy+H+l/gXx2/wZN7DUY8TMNCWhj+eA==","signatures":[{"sig":"MEQCIA2gVAdi8KlcrNyJlMGERq+6UNQ/2G3wL3WkhYZ92o83AiADWekPkY7OPYBJtN0yXtySh7VN2jhmRp8ZzwzKPkM+3Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":487962},"main":"dist/index.es.js","type":"module","types":"dist/index.d.ts","module":"dist/index.es.js","gitHead":"2650138b1c099ef9beae6743c8838d02c5e67a11","scripts":{"dev":"vite","demo":"vite","test":"echo \"Error: no test specified\" && exit 1","build":"vite build","preview":"vite preview","build:demo":"vite build --mode demo"},"_npmUser":{"name":"jayarrowz","email":"arrowzflame321@gmail.com"},"_npmVersion":"10.8.2","description":"A customizable React authentication component library","directories":{},"_nodeVersion":"18.20.8","dependencies":{"qrcode":"^1.5.4","lucide-react":"^0.525.0","@mui/material":"^7.2.0","@types/qrcode":"^1.5.5","@emotion/react":"^11.14.0","@emotion/styled":"^11.14.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"vite":"^7.0.1","typescript":"^5.8.3","@types/node":"^24.0.10","@types/react":"^19.1.8","vite-plugin-dts":"^4.5.4","@types/react-dom":"^19.1.6","rollup-plugin-dts":"^6.2.1","@vitejs/plugin-react":"^4.6.0","@rollup/plugin-terser":"^0.4.4"},"peerDependencies":{"react":"^19.1.0","react-dom":"^19.1.0"},"_npmOperationalInternal":{"tmp":"tmp/topiray-auth-react_1.0.5-alpha.15_1764597444666_0.4326925285933749","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"topiray-auth-react","version":"1.0.5","keywords":["react","authentication","components","ui","library"],"author":"","license":"ISC","_id":"topiray-auth-react@1.0.5","maintainers":[{"name":"jayarrowz","email":"arrowzflame321@gmail.com"}],"dist":{"shasum":"a75394f6dc7ffb9cefa0083d005ee04c4aff2bb7","tarball":"https://registry.npmjs.org/topiray-auth-react/-/topiray-auth-react-1.0.5.tgz","fileCount":30,"integrity":"sha512-d5Sdx1LGnsAJqe1B5S0A2AIFGwS6xyCnoMaffv094Vuw/YPuZFMmXGv62VwUA3siy1ZzVV26yx7sJoHjMQnr2A==","signatures":[{"sig":"MEUCIQDn95NsxdLP5zDmCExAL95hhLK1NkTctSkFfeyj7ywVHwIgW9pHll5+RyNYbnP/GzQCREKvdp6MzZxZfV9yQ6n/hkY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":585588},"main":"dist/index.es.js","type":"module","types":"dist/index.d.ts","module":"dist/index.es.js","gitHead":"2650138b1c099ef9beae6743c8838d02c5e67a11","scripts":{"dev":"vite","demo":"vite","test":"echo \"Error: no test specified\" && exit 1","build":"vite build","preview":"vite preview","build:demo":"vite build --mode demo"},"_npmUser":{"name":"jayarrowz","email":"arrowzflame321@gmail.com"},"_npmVersion":"10.8.2","description":"A customizable React authentication component library","directories":{},"_nodeVersion":"20.19.0","dependencies":{"qrcode":"^1.5.4","lucide-react":"^0.525.0","@mui/material":"^7.2.0","@types/qrcode":"^1.5.5","@emotion/react":"^11.14.0","@emotion/styled":"^11.14.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.0.1","typescript":"^5.8.3","@types/node":"^24.0.10","@types/react":"^19.1.8","vite-plugin-dts":"^4.5.4","@types/react-dom":"^19.1.6","rollup-plugin-dts":"^6.2.1","@vitejs/plugin-react":"^4.6.0","@rollup/plugin-terser":"^0.4.4"},"peerDependencies":{"react":"^19.1.0","react-dom":"^19.1.0"},"_npmOperationalInternal":{"tmp":"tmp/topiray-auth-react_1.0.5_1764597479229_0.595969516857545","host":"s3://npm-registry-packages-npm-production"}},"1.0.6":{"name":"topiray-auth-react","version":"1.0.6","keywords":["react","authentication","components","ui","library"],"author":"","license":"ISC","_id":"topiray-auth-react@1.0.6","maintainers":[{"name":"jayarrowz","email":"arrowzflame321@gmail.com"}],"dist":{"shasum":"9b6c7c4356f407ae79e3471c7bddf10a4097dfb0","tarball":"https://registry.npmjs.org/topiray-auth-react/-/topiray-auth-react-1.0.6.tgz","fileCount":30,"integrity":"sha512-RkdvzohhFYOw8Eqz8jO4GkEfb5iqsr1di3zpB/7DiaTQgpff7LvEKR4bjFq6UW6UVE6nkMc9FWfQzZLPyBvVmQ==","signatures":[{"sig":"MEUCID7bTtDNqpAiTC2WyggJcXZ0MnBq2x2K0STOH0bYmN81AiEA7othTOOsh1lxLDxEn48ph1oE81rma0rAr2CraqRmbVE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":585588},"main":"dist/index.es.js","type":"module","types":"dist/index.d.ts","module":"dist/index.es.js","gitHead":"d6183526fbd41a4680e478200df05c3dcda3d4f4","scripts":{"dev":"vite","demo":"vite","test":"echo \"Error: no test specified\" && exit 1","build":"vite build","preview":"vite preview","build:demo":"vite build --mode demo"},"_npmUser":{"name":"jayarrowz","email":"arrowzflame321@gmail.com"},"_npmVersion":"11.6.2","description":"A customizable React authentication component library","directories":{},"_nodeVersion":"24.12.0","dependencies":{"qrcode":"^1.5.4","lucide-react":"^0.525.0","@mui/material":"^7.2.0","@types/qrcode":"^1.5.5","@emotion/react":"^11.14.0","@emotion/styled":"^11.14.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.0.1","typescript":"^5.8.3","@types/node":"^24.0.10","@types/react":"^19.1.8","vite-plugin-dts":"^4.5.4","@types/react-dom":"^19.1.6","rollup-plugin-dts":"^6.2.1","@vitejs/plugin-react":"^4.6.0","@rollup/plugin-terser":"^0.4.4"},"peerDependencies":{"react":"^19.1.0","react-dom":"^19.1.0"},"_npmOperationalInternal":{"tmp":"tmp/topiray-auth-react_1.0.6_1770382930150_0.5062561660911351","host":"s3://npm-registry-packages-npm-production"}},"1.0.7":{"name":"topiray-auth-react","version":"1.0.7","keywords":["react","authentication","components","ui","library"],"author":"","license":"ISC","_id":"topiray-auth-react@1.0.7","maintainers":[{"name":"jayarrowz","email":"arrowzflame321@gmail.com"}],"dist":{"shasum":"50687b4ff563a304295f472e957c96ac9dcb5ed7","tarball":"https://registry.npmjs.org/topiray-auth-react/-/topiray-auth-react-1.0.7.tgz","fileCount":30,"integrity":"sha512-yKddU256I7ObiIxMWiaPGk7+DHxl43kWEOtUZ5TaIoi4urGF0MOPCCWJrVZ6aVx0Nq2dEvyiHkqAj1e0Cap8tw==","signatures":[{"sig":"MEYCIQDbUApGvqk9oI7JygFDVY1eSlOgjyGChGB7wVoCP7jkBwIhAO1g0MtnJCdqzNcXK6/BzlOxX/k8OBbqTVAvaH9WoJUd","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":585588},"main":"dist/index.es.js","type":"module","types":"dist/index.d.ts","module":"dist/index.es.js","gitHead":"82ca63d20fd9e5836d19bd563eb80bcccbdb4020","scripts":{"dev":"vite","demo":"vite","test":"echo \"Error: no test specified\" && exit 1","build":"vite build","preview":"vite preview","build:demo":"vite build --mode demo"},"_npmUser":{"name":"jayarrowz","email":"arrowzflame321@gmail.com"},"_npmVersion":"11.6.2","description":"A customizable React authentication component library","directories":{},"_nodeVersion":"24.12.0","dependencies":{"qrcode":"^1.5.4","lucide-react":"^0.525.0","@mui/material":"^7.2.0","@types/qrcode":"^1.5.5","@emotion/react":"^11.14.0","@emotion/styled":"^11.14.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.0.1","typescript":"^5.8.3","@types/node":"^24.0.10","@types/react":"^19.1.8","vite-plugin-dts":"^4.5.4","@types/react-dom":"^19.1.6","rollup-plugin-dts":"^6.2.1","@vitejs/plugin-react":"^4.6.0","@rollup/plugin-terser":"^0.4.4"},"peerDependencies":{"react":"^19.1.0","react-dom":"^19.1.0"},"_npmOperationalInternal":{"tmp":"tmp/topiray-auth-react_1.0.7_1770383232574_0.8138602319908004","host":"s3://npm-registry-packages-npm-production"}},"1.0.8":{"name":"topiray-auth-react","version":"1.0.8","keywords":["react","authentication","components","ui","library"],"author":"","license":"ISC","_id":"topiray-auth-react@1.0.8","maintainers":[{"name":"jayarrowz","email":"arrowzflame321@gmail.com"}],"dist":{"shasum":"cc007385fc4421d6e8485fc3c5dee4285723aa3f","tarball":"https://registry.npmjs.org/topiray-auth-react/-/topiray-auth-react-1.0.8.tgz","fileCount":31,"integrity":"sha512-h5EM52ghrshZRi5a16k/uFRI9vgtb7eDbcwTsJoBOHJ8eGFozWEfcYwRgGfRqR5pheV7cDLTilBMBnK0hLDw0A==","signatures":[{"sig":"MEUCIQCYgTPQWaNb09ABWszgYc1h8IBKBxdeXm1Y2zmwnJB6aQIgKM2lKQW9ujvpc4xSO+skJ4ZymcWDSc85ayRERg7mtVM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":596614},"main":"dist/index.es.js","type":"module","types":"dist/index.d.ts","module":"dist/index.es.js","gitHead":"bbfec8725a6ba6f676f822055eb097b909d70f27","scripts":{"dev":"vite","demo":"vite","test":"echo \"Error: no test specified\" && exit 1","build":"vite build","preview":"vite preview","build:demo":"vite build --mode demo"},"_npmUser":{"name":"jayarrowz","email":"arrowzflame321@gmail.com"},"_npmVersion":"11.6.2","description":"A customizable React authentication component library","directories":{},"_nodeVersion":"24.12.0","dependencies":{"qrcode":"^1.5.4","lucide-react":"^0.525.0","@mui/material":"^7.2.0","@types/qrcode":"^1.5.5","@emotion/react":"^11.14.0","@emotion/styled":"^11.14.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.0.1","typescript":"^5.8.3","@types/node":"^24.0.10","@types/react":"^19.1.8","vite-plugin-dts":"^4.5.4","@types/react-dom":"^19.1.6","rollup-plugin-dts":"^6.2.1","@vitejs/plugin-react":"^4.6.0","@rollup/plugin-terser":"^0.4.4"},"peerDependencies":{"react":"^19.1.0","react-dom":"^19.1.0"},"_npmOperationalInternal":{"tmp":"tmp/topiray-auth-react_1.0.8_1770383554676_0.5473580636532309","host":"s3://npm-registry-packages-npm-production"}},"1.0.9":{"name":"topiray-auth-react","version":"1.0.9","keywords":["react","authentication","components","ui","library"],"author":"","license":"ISC","_id":"topiray-auth-react@1.0.9","maintainers":[{"name":"jayarrowz","email":"arrowzflame321@gmail.com"}],"dist":{"shasum":"508ea2c2f9dfc3fd95f4aaf600b78499de23f423","tarball":"https://registry.npmjs.org/topiray-auth-react/-/topiray-auth-react-1.0.9.tgz","fileCount":31,"integrity":"sha512-tnhg+zwIkscXyCH4LhMzEEA5r3a8NOaGkNMHb9rFsVg9LARMwzN0xtBX9EutKTd6rOSj7DSGrTVfOsuLI8mSOA==","signatures":[{"sig":"MEYCIQC5q7sKeixV2R8TjLlNNVZIDXDGBG3ZYta939QYSZRxyAIhAJ3QjthCz6dM2fpAthev+H1BMIVVAV/6PPp5JLJaYnC8","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":596993},"main":"dist/index.es.js","type":"module","types":"dist/index.d.ts","module":"dist/index.es.js","gitHead":"cc943929aadcbaf5c72ceaa67d5a2b55558918f0","scripts":{"dev":"vite","demo":"vite","test":"echo \"Error: no test specified\" && exit 1","build":"vite build","preview":"vite preview","build:demo":"vite build --mode demo"},"_npmUser":{"name":"jayarrowz","email":"arrowzflame321@gmail.com"},"_npmVersion":"11.6.2","description":"A customizable React authentication component library","directories":{},"_nodeVersion":"24.12.0","dependencies":{"qrcode":"^1.5.4","lucide-react":"^0.525.0","@mui/material":"^7.2.0","@types/qrcode":"^1.5.5","@emotion/react":"^11.14.0","@emotion/styled":"^11.14.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.0.1","typescript":"^5.8.3","@types/node":"^24.0.10","@types/react":"^19.1.8","vite-plugin-dts":"^4.5.4","@types/react-dom":"^19.1.6","rollup-plugin-dts":"^6.2.1","@vitejs/plugin-react":"^4.6.0","@rollup/plugin-terser":"^0.4.4"},"peerDependencies":{"react":"^19.1.0","react-dom":"^19.1.0"},"_npmOperationalInternal":{"tmp":"tmp/topiray-auth-react_1.0.9_1770385108345_0.13664304139970773","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"topiray-auth-react","version":"1.1.0","keywords":["react","authentication","components","ui","library"],"author":"","license":"ISC","_id":"topiray-auth-react@1.1.0","maintainers":[{"name":"jayarrowz","email":"arrowzflame321@gmail.com"}],"dist":{"shasum":"852f6cadba7a56b8e667ca2f29982faa7078de39","tarball":"https://registry.npmjs.org/topiray-auth-react/-/topiray-auth-react-1.1.0.tgz","fileCount":31,"integrity":"sha512-7MQdsemyn3fAY/1wvQQGY2vvrjnyCAqQ8BrgC4rHUcWK012rvgrUaFQ/eF2Lq2AhBkv+CP86Z5F9+4cT3q60XA==","signatures":[{"sig":"MEUCIQC+Zp312rNQsoWvBdE70P0Z4GyURgHq65ou2GWLqztaqgIgHuaM4d6yC7FV9bAgu0Do4akQENkRK8GMflt6Os4hd8g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":596691},"main":"dist/index.es.js","type":"module","types":"dist/index.d.ts","module":"dist/index.es.js","gitHead":"0ea174a2f0fdc1f34d283b55b43361b41ec40a7b","scripts":{"dev":"vite","demo":"vite","test":"echo \"Error: no test specified\" && exit 1","build":"vite build","preview":"vite preview","build:demo":"vite build --mode demo"},"_npmUser":{"name":"jayarrowz","email":"arrowzflame321@gmail.com"},"_npmVersion":"11.6.2","description":"A customizable React authentication component library","directories":{},"_nodeVersion":"24.12.0","dependencies":{"qrcode":"^1.5.4","lucide-react":"^0.525.0","@mui/material":"^7.2.0","@types/qrcode":"^1.5.5","@emotion/react":"^11.14.0","@emotion/styled":"^11.14.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.0.1","typescript":"^5.8.3","@types/node":"^24.0.10","@types/react":"^19.1.8","vite-plugin-dts":"^4.5.4","@types/react-dom":"^19.1.6","rollup-plugin-dts":"^6.2.1","@vitejs/plugin-react":"^4.6.0","@rollup/plugin-terser":"^0.4.4"},"peerDependencies":{"react":"^19.1.0","react-dom":"^19.1.0"},"_npmOperationalInternal":{"tmp":"tmp/topiray-auth-react_1.1.0_1770389945680_0.26989264168722915","host":"s3://npm-registry-packages-npm-production"}},"1.1.2":{"name":"topiray-auth-react","version":"1.1.2","keywords":["react","authentication","components","ui","library"],"author":"","license":"ISC","_id":"topiray-auth-react@1.1.2","maintainers":[{"name":"jayarrowz","email":"arrowzflame321@gmail.com"}],"dist":{"shasum":"5b54234d57363083be949a8344704beb0c3866d1","tarball":"https://registry.npmjs.org/topiray-auth-react/-/topiray-auth-react-1.1.2.tgz","fileCount":31,"integrity":"sha512-6krCB3ZoPYc1qq/VZpvIzVQIeFXgOFu9u38rJqgHmKmGatWyek+hLV26R3L+fBPAdLOM6xt1wiigYaTUac312A==","signatures":[{"sig":"MEUCIDS2Pk1KpLtkY0WAPSv3Idbv4xdHiW74p/TPgKWgw1uKAiEAkztQ8Dbx/y5PZKhc+56YFcEduIADsN4mZQPYAx5ZmO8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":581637},"main":"dist/index.es.js","type":"module","types":"dist/index.d.ts","module":"dist/index.es.js","gitHead":"99ee3c021943bcfc7ee8a25deb5d9e537e5b9551","scripts":{"dev":"vite","demo":"vite","test":"echo \"Error: no test specified\" && exit 1","build":"vite build","preview":"vite preview","build:demo":"vite build --mode demo"},"_npmUser":{"name":"jayarrowz","email":"arrowzflame321@gmail.com"},"_npmVersion":"11.6.2","description":"A customizable React authentication component library","directories":{},"_nodeVersion":"24.12.0","dependencies":{"qrcode":"^1.5.4","lucide-react":"^0.525.0","@mui/material":"^7.2.0","@types/qrcode":"^1.5.5","@emotion/react":"^11.14.0","@emotion/styled":"^11.14.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.0.1","typescript":"^5.8.3","@types/node":"^24.0.10","@types/react":"^19.1.8","vite-plugin-dts":"^4.5.4","@types/react-dom":"^19.1.6","rollup-plugin-dts":"^6.2.1","@vitejs/plugin-react":"^4.6.0","@rollup/plugin-terser":"^0.4.4"},"peerDependencies":{"react":"^19.1.0","react-dom":"^19.1.0"},"_npmOperationalInternal":{"tmp":"tmp/topiray-auth-react_1.1.2_1770424715546_0.9319534708935977","host":"s3://npm-registry-packages-npm-production"}},"1.1.3":{"name":"topiray-auth-react","version":"1.1.3","keywords":["react","authentication","components","ui","library"],"author":"","license":"ISC","_id":"topiray-auth-react@1.1.3","maintainers":[{"name":"jayarrowz","email":"arrowzflame321@gmail.com"}],"dist":{"shasum":"bdd604eaad98625eab3ba461fd7ecaa0e22b30d2","tarball":"https://registry.npmjs.org/topiray-auth-react/-/topiray-auth-react-1.1.3.tgz","fileCount":30,"integrity":"sha512-s0bFXMNnEF/r7rq5Q6azsVbRRX4B4vYLdYPTZ3wTAiRjIPSJefFpdln9Knmr31vqVWdimgXc7fsEhNPHDxU7Rg==","signatures":[{"sig":"MEUCIEsNzbVA/tdupuVoLku+tfSCmemI+ZbLRM1qI0/OR/gDAiEA6zNowwRtYefJKSjeZb2CJW29SCyay6Y8VkC4JJu/oBs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":407837},"main":"dist/index.es.js","type":"module","types":"dist/index.d.ts","module":"dist/index.es.js","gitHead":"aff0b9b4677930ef60592e88cf61069b37c8df1f","scripts":{"dev":"vite","demo":"vite","test":"echo \"Error: no test specified\" && exit 1","build":"vite build","preview":"vite preview","build:demo":"vite build --mode demo"},"_npmUser":{"name":"jayarrowz","email":"arrowzflame321@gmail.com"},"_npmVersion":"11.6.2","description":"A customizable React authentication component library","directories":{},"_nodeVersion":"24.12.0","dependencies":{"qrcode":"^1.5.4","lucide-react":"^0.525.0","@mui/material":"^7.2.0","@types/qrcode":"^1.5.5","@emotion/react":"^11.14.0","@emotion/styled":"^11.14.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.0.1","typescript":"^5.8.3","@types/node":"^24.0.10","@types/react":"^19.1.8","vite-plugin-dts":"^4.5.4","@types/react-dom":"^19.1.6","rollup-plugin-dts":"^6.2.1","@vitejs/plugin-react":"^4.6.0","@rollup/plugin-terser":"^0.4.4"},"peerDependencies":{"react":"^19.1.0","react-dom":"^19.1.0"},"_npmOperationalInternal":{"tmp":"tmp/topiray-auth-react_1.1.3_1770426287692_0.49226434599517854","host":"s3://npm-registry-packages-npm-production"}},"1.1.4":{"name":"topiray-auth-react","version":"1.1.4","keywords":["react","authentication","components","ui","library"],"author":"","license":"ISC","_id":"topiray-auth-react@1.1.4","maintainers":[{"name":"jayarrowz","email":"arrowzflame321@gmail.com"}],"dist":{"shasum":"7f7ccedd0fd24e2c3d2dedeee28bd55e5c99ec8f","tarball":"https://registry.npmjs.org/topiray-auth-react/-/topiray-auth-react-1.1.4.tgz","fileCount":34,"integrity":"sha512-JD152fzn/PJn1ElhqkT910rvNI55/HE7OQ0kRzGwXGdtI5Rrys/3tFMTraknR+NZFonM6SXAWabwZEjZy0mEGQ==","signatures":[{"sig":"MEQCIAykaHnCowqPYIOcFj5joQeXvVxhoPW5ULQnWPZPIfXvAiB5kF/hu9sJqkCMYRGlz/5BIyFltTW5moRkilNyfKdaDQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":518823},"main":"dist/index.es.js","type":"module","types":"dist/index.d.ts","module":"dist/index.es.js","gitHead":"e7baa1caa97692d7bbb5d8f591ba27dc42074bd8","scripts":{"dev":"vite","demo":"vite","test":"echo \"Error: no test specified\" && exit 1","build":"vite build","preview":"vite preview","build:demo":"vite build --mode demo"},"_npmUser":{"name":"jayarrowz","email":"arrowzflame321@gmail.com"},"_npmVersion":"11.6.2","description":"A customizable React authentication component library","directories":{},"_nodeVersion":"24.12.0","dependencies":{"qrcode":"^1.5.4","lucide-react":"^0.525.0","@mui/material":"^7.2.0","@types/qrcode":"^1.5.5","@emotion/react":"^11.14.0","@emotion/styled":"^11.14.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.0.1","typescript":"^5.8.3","@types/node":"^24.0.10","@types/react":"^19.1.8","vite-plugin-dts":"^4.5.4","@types/react-dom":"^19.1.6","rollup-plugin-dts":"^6.2.1","@vitejs/plugin-react":"^4.6.0","@rollup/plugin-terser":"^0.4.4"},"peerDependencies":{"react":"^19.1.0","react-dom":"^19.1.0"},"_npmOperationalInternal":{"tmp":"tmp/topiray-auth-react_1.1.4_1775503064133_0.04732550253846357","host":"s3://npm-registry-packages-npm-production"}},"1.1.5":{"name":"topiray-auth-react","version":"1.1.5","keywords":["react","authentication","components","ui","library"],"author":"","license":"ISC","_id":"topiray-auth-react@1.1.5","maintainers":[{"name":"jayarrowz","email":"arrowzflame321@gmail.com"}],"dist":{"shasum":"ad2b508911389b047413deb094d0f051ff0d4a06","tarball":"https://registry.npmjs.org/topiray-auth-react/-/topiray-auth-react-1.1.5.tgz","fileCount":34,"integrity":"sha512-nz2BAOloCs3Klj11wsXlH0H95BlkpqOX2k1Lr1/g+KSI7otpZONRR8THbq/LsMj2TjHpJ9UX4SNtRrd0T7ArKw==","signatures":[{"sig":"MEUCIHgetu14j5c/gnp8Dh5dZEFZ5F02kfnIZVMpnB2xZx5FAiEAsh2SMnMVj3TPxTgOlke+vJX+PXf0H3u+Dv9WBvxFCOk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":430263},"main":"dist/index.es.js","type":"module","types":"dist/index.d.ts","module":"dist/index.es.js","gitHead":"8b65217e072252a7dd028247a273fae7f1487150","scripts":{"dev":"vite","demo":"vite","test":"echo \"Error: no test specified\" && exit 1","build":"vite build","preview":"vite preview","build:demo":"vite build --mode demo"},"_npmUser":{"name":"jayarrowz","email":"arrowzflame321@gmail.com"},"_npmVersion":"11.6.2","description":"A customizable React authentication component library","directories":{},"_nodeVersion":"24.12.0","dependencies":{"qrcode":"^1.5.4","lucide-react":"^0.525.0","@mui/material":"^7.2.0","@types/qrcode":"^1.5.5","@emotion/react":"^11.14.0","@emotion/styled":"^11.14.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.0.1","typescript":"^5.8.3","@types/node":"^24.0.10","@types/react":"^19.1.8","vite-plugin-dts":"^4.5.4","@types/react-dom":"^19.1.6","rollup-plugin-dts":"^6.2.1","@vitejs/plugin-react":"^4.6.0","@rollup/plugin-terser":"^0.4.4"},"peerDependencies":{"react":"^19.1.0","react-dom":"^19.1.0"},"_npmOperationalInternal":{"tmp":"tmp/topiray-auth-react_1.1.5_1775503241899_0.41638418184429393","host":"s3://npm-registry-packages-npm-production"}},"1.1.6":{"name":"topiray-auth-react","version":"1.1.6","keywords":["react","authentication","components","ui","library"],"author":"","license":"ISC","_id":"topiray-auth-react@1.1.6","maintainers":[{"name":"jayarrowz","email":"arrowzflame321@gmail.com"}],"dist":{"shasum":"e823be08db4c4e1a115c49d919624d6367209d44","tarball":"https://registry.npmjs.org/topiray-auth-react/-/topiray-auth-react-1.1.6.tgz","fileCount":34,"integrity":"sha512-34gryhpXVn1EDgQ/4LYdhdZHBkIKd7sew7r2Px0yG3m3ya+RiVfpsJ4poOOiP7t40w1/9HoBluSuX7wovtWlVQ==","signatures":[{"sig":"MEQCIC7nknoPWoyNyhmNStjapdA2HMzgl6krdQYIBVnhL7JlAiBNeDMWyPKH3OOMkjnCPLXvQPCmFwhHBpvo56bDd8KspQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":430263},"main":"dist/index.es.js","type":"module","types":"dist/index.d.ts","module":"dist/index.es.js","gitHead":"8b65217e072252a7dd028247a273fae7f1487150","scripts":{"dev":"vite","demo":"vite","test":"echo \"Error: no test specified\" && exit 1","build":"vite build","preview":"vite preview","build:demo":"vite build --mode demo"},"_npmUser":{"name":"jayarrowz","email":"arrowzflame321@gmail.com"},"_npmVersion":"11.6.2","description":"A customizable React authentication component library","directories":{},"_nodeVersion":"24.12.0","dependencies":{"qrcode":"^1.5.4","lucide-react":"^0.525.0","@mui/material":"^7.2.0","@types/qrcode":"^1.5.5","@emotion/react":"^11.14.0","@emotion/styled":"^11.14.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.0.1","typescript":"^5.8.3","@types/node":"^24.0.10","@types/react":"^19.1.8","vite-plugin-dts":"^4.5.4","@types/react-dom":"^19.1.6","rollup-plugin-dts":"^6.2.1","@vitejs/plugin-react":"^4.6.0","@rollup/plugin-terser":"^0.4.4"},"peerDependencies":{"react":"^19.1.0","react-dom":"^19.1.0"},"_npmOperationalInternal":{"tmp":"tmp/topiray-auth-react_1.1.6_1775503445526_0.95766166025213","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"topiray-auth-react","version":"1.2.0","type":"module","description":"A customizable React authentication component library","main":"dist/index.es.js","module":"dist/index.es.js","types":"dist/index.d.ts","scripts":{"dev":"vite","demo":"vite","build":"vite build","build:demo":"vite build --mode demo","preview":"vite preview","test":"playwright test","test:a11y":"playwright test --project=chromium","test:a11y:ui":"playwright test --ui","a11y":"vite --port 5177 --strictPort"},"keywords":["react","authentication","components","ui","library"],"author":"","license":"ISC","peerDependencies":{"react":"^19.1.0","react-dom":"^19.1.0"},"devDependencies":{"@axe-core/playwright":"^4.13.0","@playwright/test":"^1.62.1","@rollup/plugin-terser":"^0.4.4","@types/node":"^24.0.10","@types/react":"^19.1.8","@types/react-dom":"^19.1.6","@vitejs/plugin-react":"^4.6.0","axe-core":"^4.13.0","rollup-plugin-dts":"^6.2.1","typescript":"^5.8.3","vite":"^7.0.1","vite-plugin-dts":"^4.5.4"},"dependencies":{"@emotion/react":"^11.14.0","@emotion/styled":"^11.14.0","@mui/material":"^7.2.0","@types/qrcode":"^1.5.5","lucide-react":"^0.525.0","qrcode":"^1.5.4"},"gitHead":"95f063d8ac46099957e5b273ec5fa271c6e4e7bc","_id":"topiray-auth-react@1.2.0","_nodeVersion":"24.19.0","_npmVersion":"11.17.0","dist":{"integrity":"sha512-3PG4K61dh3Xx/q+NOPgjAa6jG9490Zg9QfTBxm2r6BbT0MWLzkv2JcBtJE7BthhF2A/+zYYbbIMAtTeMbKegnA==","shasum":"7af29a8422194a9e0be8724947d1b28149e6d1d2","tarball":"https://registry.npmjs.org/topiray-auth-react/-/topiray-auth-react-1.2.0.tgz","fileCount":36,"unpackedSize":469343,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCXUujgZbQKv1nnrFQO0ANzo/5DLqbtLhoCrUt4GS9BXwIgV2j9W0o2Cmgc9rmZtlK9aT3UWARrwnOJDtqfg09ZSyQ="}]},"_npmUser":{"name":"jayarrowz","email":"arrowzflame321@gmail.com"},"directories":{},"maintainers":[{"name":"jayarrowz","email":"arrowzflame321@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/topiray-auth-react_1.2.0_1788192993431_0.8500846743694965"},"_hasShrinkwrap":false}},"time":{"created":"2025-08-04T12:46:11.080Z","modified":"2026-08-31T16:16:33.732Z","1.0.0-alpha.2":"2025-07-04T20:39:13.056Z","1.0.0-alpha.3":"2025-07-04T20:51:43.953Z","1.0.0-alpha.4":"2025-07-04T21:23:41.804Z","1.0.0-alpha.5":"2025-07-04T21:28:25.969Z","1.0.0-alpha.6":"2025-07-06T17:33:14.565Z","1.0.0":"2025-08-04T12:46:11.342Z","1.0.0-alpha.7":"2025-09-04T10:16:55.395Z","1.0.1":"2025-09-04T10:26:08.283Z","1.0.1-alpha.8":"2025-11-29T13:42:12.081Z","1.0.1-alpha.9":"2025-11-29T14:01:24.128Z","1.0.1-alpha.10":"2025-11-29T14:02:55.588Z","1.0.2":"2025-11-29T14:04:01.778Z","1.0.2-alpha.11":"2025-11-29T14:04:52.989Z","1.0.3":"2025-11-29T15:08:37.314Z","1.0.2-alpha.12":"2025-11-29T15:09:07.216Z","1.0.3-alpha.13":"2025-11-29T15:09:18.154Z","1.0.4":"2025-11-29T15:24:18.080Z","1.0.4-alpha.14":"2025-11-29T15:25:00.457Z","1.0.5-alpha.15":"2025-12-01T13:57:24.871Z","1.0.5":"2025-12-01T13:57:59.456Z","1.0.6":"2026-02-06T13:02:10.335Z","1.0.7":"2026-02-06T13:07:12.797Z","1.0.8":"2026-02-06T13:12:34.880Z","1.0.9":"2026-02-06T13:38:28.497Z","1.1.0":"2026-02-06T14:59:05.867Z","1.1.2":"2026-02-07T00:38:35.693Z","1.1.3":"2026-02-07T01:04:47.867Z","1.1.4":"2026-04-06T19:17:44.352Z","1.1.5":"2026-04-06T19:20:42.098Z","1.1.6":"2026-04-06T19:24:05.675Z","1.2.0":"2026-08-31T16:16:33.558Z"},"license":"ISC","keywords":["react","authentication","components","ui","library"],"description":"A customizable React authentication component library","maintainers":[{"name":"jayarrowz","email":"arrowzflame321@gmail.com"}],"readme":"# Topiray Auth React Component Library\n![NPM Version](https://img.shields.io/npm/v/topiray-auth-react)\n![NPM Downloads](https://img.shields.io/npm/dm/topiray-auth-react)\n![NPM License](https://img.shields.io/npm/l/topiray-auth-react)\n\nA comprehensive, themeable React component library for authentication flows. Built with TypeScript and CSS Modules, designed for customization, and tested against WCAG 2.2 Level AA — see [Accessibility](#accessibility).\n\n## Features\n\n- 🎨 **Fully Themeable** - Customize colors, fonts, spacing, and more\n- 🔧 **CSS Modules** - Strongly-typed, scoped styling\n- 📱 **Responsive Design** - Mobile-first approach with breakpoint support\n- ♿ **Accessible** - ARIA labels, keyboard navigation, focus management\n- 🔐 **Complete Auth Flow** - Sign in/up, 2FA, email verification, password reset\n- ⚡ **TypeScript** - Full type safety and IntelliSense support\n- 🎯 **Tree Shakeable** - Import only what you need\n- 🌐 **i18n Support** - Built-in internationalization with customizable translations\n\n<img width=\"1910\" height=\"892\" alt=\"image\" src=\"https://github.com/user-attachments/assets/1eb04b72-be57-477a-96de-2879d2fc9191\" />\n<img width=\"1910\" height=\"892\" alt=\"image\" src=\"https://github.com/user-attachments/assets/089695f9-9558-4cea-af24-fec94ecd2ebb\" />\n<img width=\"1910\" height=\"892\" alt=\"image\" src=\"https://github.com/user-attachments/assets/dfc87f46-eb1d-4247-9404-6ab136fc5055\" />\n\n\n## Installation\n\n```bash\nnpm install topiray-auth-react\n# or\nyarn add topiray-auth-react\n```\n\n### Peer Dependencies\n\n```bash\nnpm install react react-dom lucide-react @mui/material\n```\n\n### CSS Import\n\n**Important**: You must import the CSS file for proper styling:\n\n```tsx\n// Import the CSS file in your main App component or index file\nimport 'topiray-auth-react/dist/topiray-auth-react.css'\n```\n\nOr if you're using a bundler that supports CSS imports:\n\n```css\n/* In your main CSS file */\n@import 'topiray-auth-react/dist/topiray-auth-react.css';\n```\n\n## Quick Start\n\n```tsx\nimport React from 'react'\nimport { \n  ThemeProvider, \n  defaultTheme, \n  TwoPanelLayout, \n  AuthCard, \n  SignInForm \n} from 'topiray-auth-react'\n\n// Import the CSS file\nimport 'topiray-auth-react/dist/topiray-auth-react.css'\n\nfunction App() {\n  const handleSignIn = (email: string, password: string) => {\n    console.log('Sign in:', { email, password })\n  }\n\n  return (\n    <ThemeProvider theme={defaultTheme}>\n      <TwoPanelLayout\n        rightContent={\n          <AuthCard>\n            <SignInForm\n              onSubmit={handleSignIn}\n              onForgotPassword={() => console.log('Forgot password')}\n              onSignUp={() => console.log('Sign up')}\n              onSocialLogin={(provider) => console.log('Social:', provider)}\n              authProviders={['google', 'apple', 'facebook']}\n            />\n          </AuthCard>\n        }\n      />\n    </ThemeProvider>\n  )\n}\n```\n\n## Components\n\n### Auth Components\n\n#### AuthCard\nContainer wrapper for auth forms with consistent styling.\n\n```tsx\nimport { AuthCard } from 'topiray-auth-react'\n\n<AuthCard>\n  {/* Your auth form content */}\n</AuthCard>\n```\n\n#### SignInForm\nComplete sign-in form with email/password and customizable social login options.\n\n```tsx\nimport { SignInForm } from 'topiray-auth-react'\n\n<SignInForm\n  onSubmit={(email, password) => handleSignIn(email, password)}\n  onForgotPassword={() => navigate('/forgot-password')}\n  onSignUp={() => navigate('/sign-up')}\n  onSocialLogin={(provider) => handleSocialLogin(provider)}\n  authProviders={['google', 'apple', 'facebook']}\n  isLoading={isSigningIn}\n  logoSrc=\"/your-logo.png\"\n/>\n```\n\n#### SignUpForm\nAccount creation form with business/individual selection and customizable social login.\n\n```tsx\nimport { SignUpForm } from 'topiray-auth-react'\n\n<SignUpForm\n  onSubmit={(email, password, accountType) => handleSignUp(email, password, accountType)}\n  onSignIn={() => navigate('/sign-in')}\n  onSocialLogin={(provider) => handleSocialLogin(provider)}\n  authProviders={['google', 'apple', 'facebook']}\n  isLoading={isSigningUp}\n  logoSrc=\"/your-logo.png\"\n/>\n```\n\n#### ForgottenPasswordForm\nPassword reset request form.\n\n```tsx\nimport { ForgottenPasswordForm } from 'topiray-auth-react'\n\n<ForgottenPasswordForm\n  onSubmit={(email) => handlePasswordReset(email)}\n  isLoading={isLoading}\n/>\n```\n\n#### VerifyEmailForm\nEmail verification flow with resend functionality.\n\n```tsx\nimport { VerifyEmailForm } from 'topiray-auth-react'\n\n<VerifyEmailForm\n  onSubmit={() => navigate('/sign-in')}\n  onResendEmail={() => handleResendEmail()}\n  email=\"user@example.com\"\n  isLoading={isLoading}\n/>\n```\n\n### Two-Factor Authentication\n\n#### TwoFactorSetupForm\nQR code setup for authenticator apps.\n\n```tsx\nimport { TwoFactorSetupForm } from 'topiray-auth-react'\n\n<TwoFactorSetupForm\n  onNext={() => navigate('/2fa/verify')}\n  onCancel={() => navigate('/dashboard')}\n  qrCodeUri=\"otpauth://totp/App:user@example.com?secret=SECRET&issuer=App\"\n  sharedKey=\"JBSWY3DPEHPK3PXP\"\n  isLoading={isLoading}\n/>\n```\n\n#### TwoFactorSetupEnterVerificationForm\n6-digit code entry with auto-focus and paste support.\n\n```tsx\nimport { TwoFactorSetupEnterVerificationForm } from 'topiray-auth-react'\n\n<TwoFactorSetupEnterVerificationForm\n  onVerify={(code) => handleVerification(code)}\n  isLoading={isVerifying}\n  error={error}\n  backRoute=\"/2fa/setup\"\n/>\n```\n\n#### TwoFactorSetupCompleteForm\nBackup codes display with copy/download functionality.\n\n```tsx\nimport { TwoFactorSetupCompleteForm } from 'topiray-auth-react'\n\n<TwoFactorSetupCompleteForm\n  onDone={() => navigate('/dashboard')}\n  backupCodes={recoveryCodes}\n  isLoading={isLoading}\n/>\n```\n\n### Layout Components\n\n#### TwoPanelLayout\nResponsive layout with left branding panel and right content area.\n\n```tsx\nimport { TwoPanelLayout } from 'topiray-auth-react'\n\n<TwoPanelLayout\n  leftContent={<YourBrandingContent />}\n  rightContent={<YourAuthForm />}\n  leftBackgroundImage=\"/background.jpg\"\n  logoSrc=\"/logo.png\"\n/>\n```\n\n#### NavLinksLayout\nFlexible content layout for pages with navigation.\n\n```tsx\nimport { NavLinksLayout } from 'topiray-auth-react'\n\n<NavLinksLayout\n  middle={<MainContent />}\n  right={<SidebarContent />}\n/>\n```\n\n### Common Components\n\n#### Button\nVersatile button with loading states and variants.\n\n```tsx\nimport { Button } from 'topiray-auth-react'\n\n<Button variant=\"primary\" isLoading={isLoading} fullWidth>\n  Sign In\n</Button>\n\n<Button variant=\"secondary\" icon=\"google\">\n  Sign in with Google\n</Button>\n```\n\n#### AlertMessage\nDismissible alert messages for different states.\n\n```tsx\nimport { AlertMessage } from 'topiray-auth-react'\n\n<AlertMessage \n  type=\"error\" \n  message=\"Invalid credentials\" \n  dismissible\n  onDismiss={() => setError(null)}\n/>\n```\n\n#### SocialLoginButtons\nPre-configured social login buttons.\n\n```tsx\nimport { SocialLoginButtons } from 'topiray-auth-react'\n\n<SocialLoginButtons\n  onSocialLogin={(provider) => handleSocialLogin(provider)}\n  providers={['google', 'apple', 'facebook']}\n  orientation=\"vertical\"\n  isLoading={isLoading}\n/>\n```\n\n### Customizing Social Login Providers\n\nYou can customize which social login providers are displayed using the `authProviders` prop on both `SignInForm` and `SignUpForm`:\n\n```tsx\n// Show only Google and Apple\n<SignInForm\n  authProviders={['google', 'apple']}\n  onSocialLogin={(provider) => handleSocialLogin(provider)}\n  // ... other props\n/>\n\n// Show all available providers (default)\n<SignUpForm\n  authProviders={['apple', 'google', 'facebook']}\n  onSocialLogin={(provider) => handleSocialLogin(provider)}\n  // ... other props\n/>\n\n// Show only Google\n<SignInForm\n  authProviders={['google']}\n  onSocialLogin={(provider) => handleSocialLogin(provider)}\n  // ... other props\n/>\n\n// Hide social login entirely by setting empty array or omitting the prop\n<SignInForm\n  authProviders={[]}\n  // ... other props (onSocialLogin not needed if no providers)\n/>\n```\n\n**Available providers:**\n- `'apple'` - Apple Sign In\n- `'google'` - Google Sign In  \n- `'facebook'` - Facebook Login\n\n**Default behavior:** If `authProviders` is not specified, it defaults to `['apple', 'google', 'facebook']`.\n\n## Real-World Usage Examples\n\n### Complete Sign-In Page\n\n```tsx\nimport React, { useState, useEffect } from 'react'\nimport { useNavigate, useLocation } from 'react-router-dom'\nimport {\n  ThemeProvider,\n  defaultTheme,\n  TwoPanelLayout,\n  AuthCard,\n  SignInForm,\n  AlertMessage\n} from 'topiray-auth-react'\n\n// Import the CSS file\nimport 'topiray-auth-react/dist/topiray-auth-react.css'\n\nfunction SignInPage() {\n  const navigate = useNavigate()\n  const location = useLocation()\n  const [error, setError] = useState<string | null>(null)\n  const [isLoading, setIsLoading] = useState(false)\n\n  // Get success message from registration\n  const successMessage = location.state?.message\n\n  const handleSignIn = async (email: string, password: string) => {\n    try {\n      setError(null)\n      setIsLoading(true)\n      \n      const result = await signInAPI(email, password)\n      \n      if (result.succeeded) {\n        navigate('/dashboard')\n      } else if (result.requiresTwoFactor) {\n        navigate('/2fa/signin', { state: { userId: result.userId } })\n      } else if (result.isNotAllowed) {\n        navigate(`/verify-email?email=${encodeURIComponent(email)}`)\n      } else {\n        setError('Invalid email or password.')\n      }\n    } catch (error) {\n      setError('An error occurred during sign in.')\n    } finally {\n      setIsLoading(false)\n    }\n  }\n\n  const handleSocialLogin = async (provider: 'google' | 'apple' | 'facebook') => {\n    try {\n      setError(null)\n      setIsLoading(true)\n      \n      // Initiate social login flow\n      await socialSignInAPI(provider)\n    } catch (error) {\n      setError(`Failed to sign in with ${provider}`)\n    } finally {\n      setIsLoading(false)\n    }\n  }\n\n  return (\n    <ThemeProvider theme={defaultTheme}>\n      <TwoPanelLayout\n        rightContent={\n          <AuthCard>\n            {successMessage && (\n              <AlertMessage message={successMessage} type=\"success\" />\n            )}\n            {error && (\n              <AlertMessage message={error} type=\"error\" />\n            )}\n            <SignInForm\n              onSubmit={handleSignIn}\n              onForgotPassword={() => navigate('/forgot-password')}\n              onSignUp={() => navigate('/sign-up')}\n              onSocialLogin={handleSocialLogin}\n              authProviders={['google', 'apple']} // Only show Google and Apple\n              isLoading={isLoading}\n            />\n          </AuthCard>\n        }\n      />\n    </ThemeProvider>\n  )\n}\n```\n\n### Two-Factor Setup with QR Code\n\n```tsx\nimport React, { useEffect, useState } from 'react'\nimport { useNavigate } from 'react-router-dom'\nimport QRCode from 'qrcode'\nimport {\n  TwoPanelLayout,\n  AuthCard,\n  TwoFactorSetupForm,\n  AlertMessage\n} from 'topiray-auth-react'\n\nfunction TwoFactorSetupPage() {\n  const navigate = useNavigate()\n  const [qrCodeDataUrl, setQrCodeDataUrl] = useState<string | null>(null)\n  const [sharedKey, setSharedKey] = useState<string | null>(null)\n  const [error, setError] = useState<string | null>(null)\n  const [isLoading, setIsLoading] = useState(false)\n\n  useEffect(() => {\n    generateQRCode()\n  }, [])\n\n  const generateQRCode = async () => {\n    try {\n      setIsLoading(true)\n      const result = await createAuthenticatorKeyAPI()\n      \n      if (result.authenticatorUri && result.sharedKey) {\n        const qrDataUrl = await QRCode.toDataURL(result.authenticatorUri, {\n          width: 200,\n          margin: 2\n        })\n        \n        setQrCodeDataUrl(qrDataUrl)\n        setSharedKey(result.sharedKey)\n        \n        // Render QR code\n        setTimeout(() => {\n          const container = document.getElementById('qr-code-container')\n          if (container && qrDataUrl) {\n            container.innerHTML = `<img src=\"${qrDataUrl}\" alt=\"QR Code\" />`\n          }\n        }, 100)\n      } else {\n        setError('Failed to generate QR code.')\n      }\n    } catch (error) {\n      setError('Failed to generate QR code.')\n    } finally {\n      setIsLoading(false)\n    }\n  }\n\n  return (\n    <TwoPanelLayout\n      rightContent={\n        <AuthCard>\n          {error && <AlertMessage message={error} type=\"error\" />}\n          <TwoFactorSetupForm\n            onNext={() => navigate('/2fa/verify')}\n            onCancel={() => navigate('/dashboard')}\n            qrCodeUri={qrCodeDataUrl}\n            sharedKey={sharedKey}\n            isLoading={isLoading}\n          />\n        </AuthCard>\n      }\n    />\n  )\n}\n```\n\n## Theming\n\n### Using Built-in Themes\n\n```tsx\nimport { ThemeProvider, defaultTheme, darkTheme } from 'topiray-auth-react'\n\n// Light theme\n<ThemeProvider theme={defaultTheme}>\n  <App />\n</ThemeProvider>\n\n// Dark theme\n<ThemeProvider theme={darkTheme}>\n  <App />\n</ThemeProvider>\n```\n\n### Creating Custom Themes\n\n```tsx\nimport { createCustomTheme } from 'topiray-auth-react'\n\nconst corporateTheme = createCustomTheme({\n  colors: {\n    primary: '#0066cc',\n    secondary: '#6b7280',\n    tertiary: \"#f3f4f6\",\n    background: '#ffffff',\n    surface: '#f9fafb',\n    text: '#111827',\n    textSecondary: '#6b7280',\n    border: '#d1d5db',\n    success: '#10b981',\n    warning: '#f59e0b',\n    error: '#ef4444',\n    info: '#3b82f6',\n    hover: '#f3f4f6',\n    active: '#e5e7eb',\n    disabled: '#9ca3af',\n    inputBackground: '#ffffff',\n    inputBorder: '#d1d5db',\n    inputText: '#111827',\n    inputPlaceholder: '#9ca3af',\n    buttonPrimary: '#0066cc',\n    buttonPrimaryText: '#ffffff',\n    buttonSecondary: '#6b7280',\n    buttonSecondaryText: '#ffffff',\n    buttonSocial: '#374151',\n    buttonSocialText: '#ffffff'\n  },\n  brand: {\n    logo: '/corporate-logo.png',\n    logoAlt: 'Corporate Logo'\n  },\n  customization: {\n    showFormHeader: true,\n    showSocialLogin: true,\n    showBackArrow: true,\n    showLogo: true,\n    roundedCorners: true,\n    animations: true\n  }\n})\n\n<ThemeProvider theme={corporateTheme}>\n  <App />\n</ThemeProvider>\n```\n\n### Advanced Theme Customization\n\n```tsx\nconst advancedTheme = createCustomTheme({\n  colors: {\n    // Custom color palette\n    primary: '#7c3aed',\n    secondary: '#64748b',\n    // ... other colors\n  },\n  components: {\n    spacing: {\n      xs: '0.25rem',\n      sm: '0.5rem',\n      md: '1rem',\n      lg: '1.5rem',\n      xl: '2rem'\n    },\n    borderRadius: {\n      sm: '0.25rem',\n      md: '0.5rem',\n      lg: '0.75rem',\n      xl: '1rem'\n    },\n    typography: {\n      fontFamily: '\"Inter\", system-ui, sans-serif',\n      fontSize: {\n        xs: '0.75rem',\n        sm: '0.875rem',\n        md: '1rem',\n        lg: '1.125rem',\n        xl: '1.25rem',\n        xxl: '1.5rem'\n      }\n    }\n  },\n  customization: {\n    backgroundImage: '/custom-background.jpg',\n    leftPanelContent: <CustomBrandingComponent />\n  }\n})\n```\n\n## CSS Custom Properties\n\nThe library uses CSS custom properties for theming. Make sure to import the CSS file first, then you can override these properties:\n\n```tsx\n// First, import the CSS file\nimport 'topiray-auth-react/dist/topiray-auth-react.css'\n```\n\n```css\n/* Then override custom properties in your CSS */\n:root {\n  --topiray-color-primary: #your-brand-color;\n  --topiray-color-surface: #your-surface-color;\n  --topiray-font-family: 'Your Font', sans-serif;\n  --topiray-radius-md: 12px;\n  --topiray-spacing-lg: 24px;\n}\n```\n\n### Properties with a contrast threshold\n\nThese carry an accessibility requirement, so if you override one, measure it. Each is\nalso settable through the theme object (`focusRing`, `link`, `errorSurface`,\n`errorText`, and so on for `success`, `warning` and `info`).\n\n| Property | Requirement |\n|---|---|\n| `--topiray-color-focus-ring` | 3:1 against the page background — it is the only thing showing where the keyboard is (1.4.11) |\n| `--topiray-color-link` | 4.5:1 against the background behind it (1.4.3) |\n| `--topiray-color-input-border` | 3:1 against the surface behind the field, or the field's own fill must supply that contrast (1.4.11) |\n| `--topiray-button-primary` and `--topiray-button-primary-text` | 4.5:1 against each other (1.4.3) |\n| `--topiray-color-error-surface` / `-error-text` | 4.5:1 against each other. Likewise `success`, `warning`, `info` |\n\nTwo of these are worth spelling out, because both were wrong in this library until they\nwere measured:\n\n- **A tint of an accent colour is not a background you can put that accent colour on.**\n  The alerts used a 10% alpha tint of each state colour with the state colour as text,\n  which measured between 1.91:1 and 3.16:1. Alpha also meant the true ratio depended on\n  whatever was painted behind the alert, so it could not be relied on at all.\n- **A focus ring flush against a control has no guaranteed contrast with it.** The ring\n  is drawn with `outline-offset`, so it sits on the page background — a blue ring\n  directly on a blue button is a 1:1 ratio however carefully the colour was picked.\n\n## Integration Patterns\n\n### With React Router\n\n```tsx\nimport { BrowserRouter, Routes, Route } from 'react-router-dom'\n\n// Import the CSS file once at the app level\nimport 'topiray-auth-react/dist/topiray-auth-react.css'\n\nfunction App() {\n  return (\n    <ThemeProvider theme={defaultTheme}>\n      <BrowserRouter>\n        <Routes>\n          <Route path=\"/signin\" element={<SignInPage />} />\n          <Route path=\"/signup\" element={<SignUpPage />} />\n          <Route path=\"/forgot-password\" element={<ForgotPasswordPage />} />\n          <Route path=\"/verify-email\" element={<VerifyEmailPage />} />\n          <Route path=\"/2fa/setup\" element={<TwoFactorSetupPage />} />\n          <Route path=\"/2fa/verify\" element={<TwoFactorVerifyPage />} />\n          <Route path=\"/2fa/complete\" element={<TwoFactorCompletePage />} />\n        </Routes>\n      </BrowserRouter>\n    </ThemeProvider>\n  )\n}\n```\n\n### With State Management\n\n```tsx\n// Using React Context\nconst AuthContext = createContext()\n\nfunction AuthProvider({ children }) {\n  const [user, setUser] = useState(null)\n  const [isLoading, setIsLoading] = useState(false)\n\n  const login = async (email, password) => {\n    setIsLoading(true)\n    try {\n      const result = await signInAPI(email, password)\n      setUser(result.user)\n      return result\n    } finally {\n      setIsLoading(false)\n    }\n  }\n\n  return (\n    <AuthContext.Provider value={{ user, isLoading, login }}>\n      {children}\n    </AuthContext.Provider>\n  )\n}\n```\n\n### With Form Validation\n\n```tsx\nimport { z } from 'zod'\n\nconst signInSchema = z.object({\n  email: z.string().email('Invalid email address'),\n  password: z.string().min(8, 'Password must be at least 8 characters')\n})\n\nfunction SignInPage() {\n  const [errors, setErrors] = useState({})\n\n  const handleSignIn = (email, password) => {\n    try {\n      signInSchema.parse({ email, password })\n      setErrors({})\n      // Proceed with sign in\n    } catch (error) {\n      setErrors(error.flatten().fieldErrors)\n    }\n  }\n\n  return (\n    <SignInForm\n      onSubmit={handleSignIn}\n      authProviders={['google', 'apple']}\n      // Pass validation errors to form\n    />\n  )\n}\n```\n\n## TypeScript Support\n\nFull TypeScript support with comprehensive type definitions:\n\n```tsx\nimport type { \n  ThemeConfig, \n  SignInFormProps, \n  AuthCardProps \n} from 'topiray-auth-react'\n\n// Custom theme with full type safety\nconst myTheme: ThemeConfig = {\n  colors: {\n    primary: '#0066cc',\n    // ... TypeScript will validate all required properties\n  },\n  // ... rest of theme configuration\n}\n\n// Component props are fully typed\nconst handleSignIn: SignInFormProps['onSubmit'] = (email, password) => {\n  // email and password are properly typed as strings\n}\n\n// Social login providers are strictly typed\nconst handleSocialLogin = (provider: 'google' | 'apple' | 'facebook') => {\n  // provider parameter is type-safe\n}\n```\n\n## Accessibility\n\nThe library targets **WCAG 2.2 Level AA**, which is the standard UK public sector bodies\nare held to by the Public Sector Bodies (Websites and Mobile Applications) (No. 2)\nAccessibility Regulations 2018.\n\n### What is checked, and how\n\nConformance is measured rather than asserted. `npm test` runs a suite against a real\nbrowser — every component, in both the light and dark themes, at desktop width and at\n320 CSS px:\n\n| Check | Covers |\n|---|---|\n| [axe-core](https://github.com/dequelabs/axe-core) via `@axe-core/playwright`, tags `wcag2a, wcag2aa, wcag21a, wcag21aa, wcag22aa` | 1.1.1, 1.3.1, 1.4.3, 3.3.2, 4.1.2 and everything else a rule engine can decide |\n| Focus visibility | 2.4.7 — each control is photographed focused and unfocused and the two must differ |\n| Target size | 2.5.8 — 24x24 CSS px, implementing the criterion's inline and spacing exceptions |\n| Non-text contrast | 1.4.11 — control boundaries at 3:1, which axe has no rule for |\n| Reflow | 1.4.10 — no horizontal scrolling at 320 CSS px |\n| Semantics | Labels that survive typing, autocomplete tokens, live regions, heading levels, radio group behaviour |\n\nThe last row exists because a rule engine cannot see the failures that matter most here.\naxe raised no objection to the credential fields when they were labelled by placeholder\nalone: a placeholder *does* contribute an accessible name, so the rule passes — and the\nname still disappears the moment somebody types. **A clean axe run is evidence, not a\nconformance claim.**\n\nAreas that remain unverified are listed honestly: no screen reader pass (NVDA, JAWS,\nVoiceOver) has been carried out, and no testing has been done with disabled users.\nAutomated testing finds somewhere between a third and a half of real accessibility\nproblems and none of the ones requiring judgement.\n\n### What the components do for you\n\n- **Visible, persistent labels** on every credential field, associated by `for`/`id`.\n  Not placeholders (3.3.2, 2.5.3).\n- **Autofill tokens** — `email`, `current-password`, `new-password`, `one-time-code` —\n  so a password manager can recognise the field (1.3.5, 3.3.8).\n- **Headings** for form titles, at a level you choose with `headingLevel`, defaulting\n  to `h1` (1.3.1, 2.4.6).\n- **A visible focus indicator** on every control: a 3px outline offset from the control\n  so it lands on the page background rather than on the control's own fill (2.4.7, 1.4.11).\n- **Colours measured against their own surfaces**, including the four alert styles and\n  the primary button (1.4.3).\n- **Live regions** for status messages, so \"Copied!\" reaches somebody who is not\n  looking at the button (4.1.3).\n- **A submit button that keeps focus while it is working** — marked `aria-disabled` and\n  `aria-busy` rather than natively disabled, which would drop the keyboard user back to\n  the top of the document at the moment they pressed it.\n- **Reduced motion** honoured — every transition and hover translation is switched off\n  under `prefers-reduced-motion: reduce`.\n- **Translated accessible names.** Every name assistive technology reads comes from the\n  dictionary, so a Welsh page does not announce its buttons in English.\n\n### Choosing a heading level\n\nEach form renders its title as an `h1` by default, which is right when the form is the\npage. If your application already renders an `h1` around it, say so:\n\n```tsx\n<SignInForm headingLevel=\"h2\" onSubmit={handleSignIn} />\n```\n\n### Running the suite\n\n```bash\nnpm test                 # the whole suite, headless\nnpm run test:a11y:ui     # the Playwright UI, for working through a failure\nnpm run a11y             # the harness on its own, at http://127.0.0.1:5177/a11y.html\n```\n\nA failure stops a release: the accessibility job in the publish workflow is a blocking\ngate, not an advisory one.\n\n## Internationalization (i18n)\n\nAll auth components support internationalization out of the box. English is the default language. You can provide custom translations for any language by wrapping your app with the `I18nProvider`.\n\n### Default Behavior (English)\n\nWithout any i18n configuration, all components render in English. No setup is required.\n\n### Adding a New Language\n\n1. Create a translation JSON file following the same structure as the built-in English translations. All keys live under the `topiray.auth` namespace:\n\n```json\n// fr.json\n{\n  \"topiray\": {\n    \"auth\": {\n      \"signIn\": {\n        \"title\": \"Se connecter\",\n        \"emailPlaceholder\": \"E-mail\",\n        \"passwordPlaceholder\": \"Mot de passe\",\n        \"submitButton\": \"Continuer\",\n        \"submittingButton\": \"Connexion en cours...\",\n        \"dividerText\": \"ou se connecter avec\",\n        \"forgotPassword\": \"Mot de passe oublié ?\",\n        \"noAccount\": \"Vous n'avez pas de compte ?\",\n        \"signUpLink\": \"S'inscrire\"\n      },\n      \"signUp\": {\n        \"title\": \"Créez votre compte\",\n        \"emailPlaceholder\": \"E-mail\",\n        \"passwordPlaceholder\": \"Mot de passe\",\n        \"submitButton\": \"Créer un compte\",\n        \"submittingButton\": \"Création du compte...\",\n        \"dividerText\": \"ou s'inscrire avec\",\n        \"hasAccount\": \"Vous avez déjà un compte ?\",\n        \"signInLink\": \"Se connecter\"\n      },\n      \"forgottenPassword\": {\n        \"title\": \"Mot de passe oublié ?\",\n        \"description\": \"Entrez l'adresse e-mail associée à votre compte et nous vous enverrons un lien unique pour réinitialiser votre mot de passe.\",\n        \"emailPlaceholder\": \"E-mail\",\n        \"submitButton\": \"Réinitialiser le mot de passe\",\n        \"submittingButton\": \"Envoi en cours...\"\n      },\n      \"resetPassword\": {\n        \"title\": \"Réinitialiser votre mot de passe\",\n        \"description\": \"Entrez votre nouveau mot de passe ci-dessous. Assurez-vous qu'il est sécurisé et comporte au moins 8 caractères.\",\n        \"newPasswordPlaceholder\": \"Nouveau mot de passe\",\n        \"confirmPasswordPlaceholder\": \"Confirmer le mot de passe\",\n        \"submitButton\": \"Réinitialiser le mot de passe\",\n        \"submittingButton\": \"Réinitialisation...\",\n        \"errors\": {\n          \"passwordRequired\": \"Le mot de passe est requis\",\n          \"confirmPasswordRequired\": \"La confirmation du mot de passe est requise\",\n          \"passwordsMismatch\": \"Les mots de passe ne correspondent pas\"\n        }\n      },\n      \"verifyEmail\": {\n        \"title\": \"Vérifiez votre e-mail\",\n        \"imageAlt\": \"Vérification de l'e-mail\",\n        \"descriptionPrefix\": \"Nous avons envoyé un e-mail de vérification à\",\n        \"descriptionSuffix\": \". Veuillez cliquer sur le lien dans cet e-mail pour continuer.\",\n        \"emailFallback\": \"[votre e-mail]\",\n        \"checkInbox\": \"Vérifier ma boîte de réception\",\n        \"resendEmail\": \"Renvoyer l'e-mail\",\n        \"resendingEmail\": \"Envoi en cours...\"\n      },\n      \"twoFactor\": {\n        \"setup\": {\n          \"title\": \"Authentification multi-facteurs\",\n          \"description\": \"Utilisez votre application d'authentification pour scanner ce code QR. Si vous n'avez pas d'application d'authentification sur votre appareil, vous devrez en installer une maintenant.\",\n          \"learnMore\": \"En savoir plus\",\n          \"cantScanQr\": \"Impossible de scanner le code QR ?\",\n          \"qrPlaceholder\": \"Le code QR apparaîtra ici\",\n          \"manualEntryKey\": \"Clé de saisie manuelle :\",\n          \"cancelButton\": \"Annuler\",\n          \"nextButton\": \"Suivant\",\n          \"loadingButton\": \"Chargement...\"\n        },\n        \"verify\": {\n          \"title\": \"Entrez votre code de vérification\",\n          \"description\": \"Entrez le code que vous voyez dans votre application d'authentification\",\n          \"verifyButton\": \"Vérifier\",\n          \"verifyingButton\": \"Vérification...\",\n          \"helpText\": \"Vous pouvez aussi coller votre code à 6 chiffres\"\n        },\n        \"complete\": {\n          \"title\": \"Vous êtes prêt\",\n          \"descriptionLine1\": \"Vous pouvez maintenant utiliser l'application d'authentification mobile pour obtenir un code d'authentification chaque fois que vous vous connectez.\",\n          \"descriptionLine2\": \"Enregistrez ces codes de secours à usage unique dans un endroit sûr.\",\n          \"copyButton\": \"Copier\",\n          \"copiedButton\": \"Copié !\",\n          \"downloadButton\": \"Télécharger\",\n          \"footerText\": \"Ces codes de secours vous permettent de vous connecter si vous ne pouvez pas recevoir de SMS ou si vous n'avez pas accès à vos autres méthodes d'authentification à deux facteurs.\",\n          \"doneButton\": \"Terminé\",\n          \"loadingButton\": \"Chargement...\",\n          \"copyCodesButton\": \"Copier les codes\",\n          \"copiedCodesButton\": \"Copié !\"\n        }\n      }\n    }\n  }\n}\n```\n\n2. Wrap your app with the `I18nProvider` and pass your translations:\n\n```tsx\nimport { ThemeProvider, I18nProvider, defaultTheme } from 'topiray-auth-react'\nimport fr from './i18n/fr.json'\n\nfunction App() {\n  return (\n    <ThemeProvider theme={defaultTheme}>\n      <I18nProvider translations={fr}>\n        {/* Your auth components */}\n      </I18nProvider>\n    </ThemeProvider>\n  )\n}\n```\n\n### Partial Translations\n\nYou only need to provide the keys you want to override. Any missing keys will automatically fall back to the default English translations:\n\n```tsx\nimport { I18nProvider } from 'topiray-auth-react'\n\nconst customTranslations = {\n  topiray: {\n    auth: {\n      signIn: {\n        title: \"Welcome back\",\n        submitButton: \"Log in\"\n      }\n    }\n  }\n}\n\n<I18nProvider translations={customTranslations}>\n  {/* SignInForm will show \"Welcome back\" and \"Log in\", \n      all other strings fall back to English */}\n</I18nProvider>\n```\n\n### Dynamic Language Switching\n\nSwitch languages at runtime by updating the translations passed to `I18nProvider`:\n\n```tsx\nimport { I18nProvider, en } from 'topiray-auth-react'\nimport fr from './i18n/fr.json'\nimport de from './i18n/de.json'\n\nconst languages = { en, fr, de }\n\nfunction App() {\n  const [locale, setLocale] = useState('en')\n\n  return (\n    <I18nProvider translations={languages[locale]}>\n      <select onChange={(e) => setLocale(e.target.value)} value={locale}>\n        <option value=\"en\">English</option>\n        <option value=\"fr\">Français</option>\n        <option value=\"de\">Deutsch</option>\n      </select>\n      {/* Your auth components */}\n    </I18nProvider>\n  )\n}\n```\n\n### Translation Keys Reference\n\nAll translation keys are nested under `topiray.auth`. Here is the full key structure:\n\n| Namespace | Keys |\n|-----------|------|\n| `topiray.auth.signIn` | `title`, `emailPlaceholder`, `passwordPlaceholder`, `submitButton`, `submittingButton`, `dividerText`, `forgotPassword`, `noAccount`, `signUpLink` |\n| `topiray.auth.signUp` | `title`, `emailPlaceholder`, `passwordPlaceholder`, `submitButton`, `submittingButton`, `dividerText`, `hasAccount`, `signInLink` |\n| `topiray.auth.forgottenPassword` | `title`, `description`, `emailPlaceholder`, `submitButton`, `submittingButton` |\n| `topiray.auth.resetPassword` | `title`, `description`, `newPasswordPlaceholder`, `confirmPasswordPlaceholder`, `submitButton`, `submittingButton`, `errors.passwordRequired`, `errors.confirmPasswordRequired`, `errors.passwordsMismatch` |\n| `topiray.auth.verifyEmail` | `title`, `imageAlt`, `descriptionPrefix`, `descriptionSuffix`, `emailFallback`, `checkInbox`, `resendEmail`, `resendingEmail` |\n| `topiray.auth.twoFactor.setup` | `title`, `description`, `learnMore`, `cantScanQr`, `qrPlaceholder`, `manualEntryKey`, `cancelButton`, `nextButton`, `loadingButton` |\n| `topiray.auth.twoFactor.verify` | `title`, `description`, `verifyButton`, `verifyingButton`, `helpText` |\n| `topiray.auth.twoFactor.complete` | `title`, `descriptionLine1`, `descriptionLine2`, `copyButton`, `copiedButton`, `downloadButton`, `footerText`, `doneButton`, `loadingButton`, `copyCodesButton`, `copiedCodesButton` |\n\n## Browser Support\n\n- Chrome 90+\n- Firefox 88+\n- Safari 14+\n- Edge 90+\n\n## Authors\n\nJayArrowz\n\n## Contributing\n\n1. Fork the repository\n2. Create a feature branch\n3. Make your changes\n4. Add tests for new functionality\n5. Submit a pull request\n\n## Support\n\nFor questions and support:\n- Create an issue on GitHub\n- Check the documentation\n- Review the demo application\n\n---\n\nBuilt with ❤️ for the React community\n","readmeFilename":"README.md"}