{"_id":"@curia_/curia-chat-modal","_rev":"23-c060b06723d4859fafad9b8ef8100868","name":"@curia_/curia-chat-modal","dist-tags":{"latest":"4.0.2"},"versions":{"1.0.0":{"name":"@curia_/curia-chat-modal","version":"1.0.0","license":"MIT","_id":"@curia_/curia-chat-modal@1.0.0","maintainers":[{"name":"flotob","email":"florian@glatz-mahlberg.de"}],"dist":{"shasum":"f66000717a6f9be1a79a50c02a148213b079c03e","tarball":"https://registry.npmjs.org/@curia_/curia-chat-modal/-/curia-chat-modal-1.0.0.tgz","fileCount":23,"integrity":"sha512-0R2qtRNrmZhmFJGuMnW4W+zuPLRlL9kCyQCQ8l28Fj9CsXZ3N4fcAUaZ4k8SUWB6SJB/+YtEkW5R5VwQJ1RETQ==","signatures":[{"sig":"MEUCIQCLUfwAJvgt3IWEfUJwAe8TFGSrZYsqnCnXD0mPsFUpBAIgOshxvQx2+kJI3EA4KM8hZjKvjIGieglT14ePfwhGkD4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17664},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"66d2ad1d97827cadcba41b0f8a1bb6fce248c3ef","scripts":{"dev":"tsc --watch","build":"tsc","clean":"rimraf dist"},"_npmUser":{"name":"flotob","email":"florian@glatz-mahlberg.de"},"_npmVersion":"11.2.0","description":"Chat modal package for embedding The Lounge IRC client in Curia forum","directories":{},"_nodeVersion":"22.14.0","dependencies":{"clsx":"^2.1.1","lucide-react":"^0.453.0","tailwind-merge":"^2.5.4","class-variance-authority":"^0.7.1"},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^6.0.0","typescript":"^5","@types/react":"^19.0.0","@types/react-dom":"^19.0.0"},"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/curia-chat-modal_1.0.0_1754069641607_0.942959798351668","host":"s3://npm-registry-packages-npm-production"}},"1.3.3":{"name":"@curia_/curia-chat-modal","version":"1.3.3","license":"MIT","_id":"@curia_/curia-chat-modal@1.3.3","maintainers":[{"name":"flotob","email":"florian@glatz-mahlberg.de"}],"dist":{"shasum":"612b5b63b5b306290739ed0e17c08c662ab87597","tarball":"https://registry.npmjs.org/@curia_/curia-chat-modal/-/curia-chat-modal-1.3.3.tgz","fileCount":29,"integrity":"sha512-ZAQNwxMSP0PJz+4hh0+jbq1u/Ehj3El67kR4A6qF+3WD8ZPxo6P6xyTQoZz/hbM9abDzOxH8JpwanLwib92gWw==","signatures":[{"sig":"MEYCIQC/Pqe26U/j5gM/eOkk+GRRRVg5FrkdrNxgBUDKZJRP3gIhAIfR1ex/E3zmPljXulOAfHCUHBrWjp8/K+KDW2dtuWIU","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":35969},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"1cde15b58598f9aa596ec2abec8955423838043e","scripts":{"dev":"tsc --watch","build":"tsc","clean":"rimraf dist"},"_npmUser":{"name":"flotob","email":"florian@glatz-mahlberg.de"},"_npmVersion":"11.2.0","description":"Chat modal package for embedding The Lounge IRC client in Curia forum","directories":{},"_nodeVersion":"22.14.0","dependencies":{"clsx":"^2.1.1","bcryptjs":"^3.0.2","lucide-react":"^0.453.0","tailwind-merge":"^2.5.4","class-variance-authority":"^0.7.1"},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^6.0.0","typescript":"^5","@types/react":"^19.0.0","@types/bcryptjs":"^3.0.0","@types/react-dom":"^19.0.0"},"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/curia-chat-modal_1.3.3_1754135321392_0.08105950006546836","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"@curia_/curia-chat-modal","version":"1.4.0","license":"MIT","_id":"@curia_/curia-chat-modal@1.4.0","maintainers":[{"name":"flotob","email":"florian@glatz-mahlberg.de"}],"dist":{"shasum":"2d53cb44250fe498e7893a67ec9ca44b9d98dcb1","tarball":"https://registry.npmjs.org/@curia_/curia-chat-modal/-/curia-chat-modal-1.4.0.tgz","fileCount":36,"integrity":"sha512-ZbwvdMaCGJxhtXE5oSe8CHU0T4oLlIRPa2ifx5x99RHxLpZCu/YYWH4VSqrixT/pKqQu/5RpCI/OqTK5PsvwDA==","signatures":[{"sig":"MEUCIQCTLdZvWmdHuQ9oHgv8olHDPK67OYl7t0Kjm4ToRd3qpQIgQrzLyHUsybqM5q9Akjb/DxkQfuIN8fC0Vz3Gv68+l3M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":35576},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"dev":"tsc --watch","build":"tsc","clean":"rimraf dist"},"_npmUser":{"name":"flotob","email":"florian@glatz-mahlberg.de"},"description":"Chat modal package for embedding The Lounge IRC client in Curia forum","directories":{},"dependencies":{"clsx":"^2.1.1","bcryptjs":"^3.0.2","lucide-react":"^0.453.0","tailwind-merge":"^2.5.4","class-variance-authority":"^0.7.1"},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^6.0.0","typescript":"^5","@types/react":"^19.0.0","@types/bcryptjs":"^3.0.0","@types/react-dom":"^19.0.0"},"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/curia-chat-modal_1.4.0_1754169190963_0.6616208208898495","host":"s3://npm-registry-packages-npm-production"}},"1.4.1":{"name":"@curia_/curia-chat-modal","version":"1.4.1","license":"MIT","_id":"@curia_/curia-chat-modal@1.4.1","maintainers":[{"name":"flotob","email":"florian@glatz-mahlberg.de"}],"dist":{"shasum":"790caa0fc7a8de7986d75067d17087ca4b3f7e70","tarball":"https://registry.npmjs.org/@curia_/curia-chat-modal/-/curia-chat-modal-1.4.1.tgz","fileCount":29,"integrity":"sha512-CLtJE2r6RIbQ7n1IdonkZKe9eUDUGphPgoBonahr+gCRe2NBvkMH8kVdHcxYSqY6kEsVUCQesLpTk39fCaLDjw==","signatures":[{"sig":"MEUCICqZW6E11dF2Rgq3ROWME4gJURuypeqKywtuSsiB38NrAiEAg52fiDrztGEFsfjVq40ZO4utYBqTYbXhQRBiyYtPQM8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":35673},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"9455e3c79b2e94bba39210bae3e89419d3a9f7b3","scripts":{"dev":"tsc --watch","build":"tsc","clean":"rimraf dist"},"_npmUser":{"name":"flotob","email":"florian@glatz-mahlberg.de"},"_npmVersion":"11.2.0","description":"Chat modal package for embedding The Lounge IRC client in Curia forum","directories":{},"_nodeVersion":"22.14.0","dependencies":{"clsx":"^2.1.1","bcryptjs":"^3.0.2","lucide-react":"^0.453.0","tailwind-merge":"^2.5.4","class-variance-authority":"^0.7.1"},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^6.0.0","typescript":"^5","@types/react":"^19.0.0","@types/bcryptjs":"^3.0.0","@types/react-dom":"^19.0.0"},"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/curia-chat-modal_1.4.1_1754226152855_0.6388087417802892","host":"s3://npm-registry-packages-npm-production"}},"1.4.2":{"name":"@curia_/curia-chat-modal","version":"1.4.2","license":"MIT","_id":"@curia_/curia-chat-modal@1.4.2","maintainers":[{"name":"flotob","email":"florian@glatz-mahlberg.de"}],"dist":{"shasum":"bb49803ae7bd92780b7aecde7c4d461ccb7c88e8","tarball":"https://registry.npmjs.org/@curia_/curia-chat-modal/-/curia-chat-modal-1.4.2.tgz","fileCount":29,"integrity":"sha512-YXbvSD96ZqCFIgvpqh1G0qrKuKHAaEwY7r5llgpT9I9loURrfrnKbMVkDmuEgfXoeZvLoYxWaifIYXiyJIevOQ==","signatures":[{"sig":"MEQCIEQKiyWL+QAZ5CU7/1TFOYPaWk1Lw5b/3rhWpyxo5uYNAiAUDCOzj5EwqNLexW0N9PiCJq3bFyF+lag8KMJYILMjlw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":35562},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"3e26a0d381c801a66444b73242d0879ee68c50a2","scripts":{"dev":"tsc --watch","build":"tsc","clean":"rimraf dist"},"_npmUser":{"name":"flotob","email":"florian@glatz-mahlberg.de"},"_npmVersion":"11.2.0","description":"Chat modal package for embedding The Lounge IRC client in Curia forum","directories":{},"_nodeVersion":"22.14.0","dependencies":{"clsx":"^2.1.1","bcryptjs":"^3.0.2","lucide-react":"^0.453.0","tailwind-merge":"^2.5.4","class-variance-authority":"^0.7.1"},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^6.0.0","typescript":"^5","@types/react":"^19.0.0","@types/bcryptjs":"^3.0.0","@types/react-dom":"^19.0.0"},"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/curia-chat-modal_1.4.2_1754227309491_0.2558466669859447","host":"s3://npm-registry-packages-npm-production"}},"1.4.3":{"name":"@curia_/curia-chat-modal","version":"1.4.3","license":"MIT","_id":"@curia_/curia-chat-modal@1.4.3","maintainers":[{"name":"flotob","email":"florian@glatz-mahlberg.de"}],"dist":{"shasum":"a61c76fc83d073d4407577b54a86ce8503f46c50","tarball":"https://registry.npmjs.org/@curia_/curia-chat-modal/-/curia-chat-modal-1.4.3.tgz","fileCount":29,"integrity":"sha512-5Kkf4p7f4096+zGGp8aeZmESacwzcUh/ZS8FHl6M8GtJZmcYZWM9YyFEsSayQQTdoU9I7hlQorYklGoofO8yNQ==","signatures":[{"sig":"MEQCICYDbdLuOn+ztWjWmYKtuGhgdir66kEQw/aNiRv29XJVAiALkeUdFxZSXHa+nLu5tgFRGaa4CZLHybURJ+IuMUHQSA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":35562},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"92a95a0ce4d363dc81f4fe7a7299df1398e1469f","scripts":{"dev":"tsc --watch","build":"tsc","clean":"rimraf dist"},"_npmUser":{"name":"flotob","email":"florian@glatz-mahlberg.de"},"_npmVersion":"11.2.0","description":"Chat modal package for embedding The Lounge IRC client in Curia forum","directories":{},"_nodeVersion":"22.14.0","dependencies":{"clsx":"^2.1.1","bcryptjs":"^3.0.2","lucide-react":"^0.453.0","tailwind-merge":"^2.5.4","class-variance-authority":"^0.7.1"},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^6.0.0","typescript":"^5","@types/react":"^19.0.0","@types/bcryptjs":"^3.0.0","@types/react-dom":"^19.0.0"},"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/curia-chat-modal_1.4.3_1754230885309_0.24229583650112452","host":"s3://npm-registry-packages-npm-production"}},"1.4.4":{"name":"@curia_/curia-chat-modal","version":"1.4.4","license":"MIT","_id":"@curia_/curia-chat-modal@1.4.4","maintainers":[{"name":"flotob","email":"florian@glatz-mahlberg.de"}],"dist":{"shasum":"67068faae4a74467d480c85d38ba7243acfab652","tarball":"https://registry.npmjs.org/@curia_/curia-chat-modal/-/curia-chat-modal-1.4.4.tgz","fileCount":29,"integrity":"sha512-dPDj9CtO8P1GpzfMFAHdH1xLOaVaGD6woQU2RsvAwL7L7bxJso/Y+NGM/jbweqp6ySJzHLVCwdU+KR8Ry9HoZQ==","signatures":[{"sig":"MEQCICxnaOx+fI4O2T4zbspL6nw7pLFMEMsiEVQycXf9UZRGAiB1QmFPJpntU8TzOziVqCpjBNxAmkANNmMZTl1yhx/HHg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":35562},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"e623b9275f035196f3248200d8c8ca04a79633b4","scripts":{"dev":"tsc --watch","build":"tsc","clean":"rimraf dist"},"_npmUser":{"name":"flotob","email":"florian@glatz-mahlberg.de"},"_npmVersion":"11.2.0","description":"Chat modal package for embedding The Lounge IRC client in Curia forum","directories":{},"_nodeVersion":"22.14.0","dependencies":{"clsx":"^2.1.1","bcryptjs":"^3.0.2","lucide-react":"^0.453.0","tailwind-merge":"^2.5.4","class-variance-authority":"^0.7.1"},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^6.0.0","typescript":"^5","@types/react":"^19.0.0","@types/bcryptjs":"^3.0.0","@types/react-dom":"^19.0.0"},"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/curia-chat-modal_1.4.4_1754231187235_0.02868323765297931","host":"s3://npm-registry-packages-npm-production"}},"1.4.5":{"name":"@curia_/curia-chat-modal","version":"1.4.5","license":"MIT","_id":"@curia_/curia-chat-modal@1.4.5","maintainers":[{"name":"flotob","email":"florian@glatz-mahlberg.de"}],"dist":{"shasum":"7ac9ce3a4d1dd4692b08ab0cbf9b030c19a5b9ed","tarball":"https://registry.npmjs.org/@curia_/curia-chat-modal/-/curia-chat-modal-1.4.5.tgz","fileCount":29,"integrity":"sha512-RpHaGCR36hXI6EnHTVp591/EXNk8WzI/5aVsq1jKmsYdiMlSc3WuS4iTPbOMKIJ0GNCDx4ie/4l9mDaj4aVlqQ==","signatures":[{"sig":"MEUCIQCTkOFr88wvFmhGcAs5+me7OnGB8wZEyjkKOQetn0YoZAIgXq+5GbtBbwUfAQZ9y/5Q2aL97GcfDpHYU0+Pf6fl9HQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":37717},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"8c1977a3fcea34db775df189e93bae2af86a7807","scripts":{"dev":"tsc --watch","build":"tsc","clean":"rimraf dist"},"_npmUser":{"name":"flotob","email":"florian@glatz-mahlberg.de"},"_npmVersion":"11.2.0","description":"Chat modal package for embedding The Lounge IRC client in Curia forum","directories":{},"_nodeVersion":"22.14.0","dependencies":{"clsx":"^2.1.1","bcryptjs":"^3.0.2","lucide-react":"^0.453.0","tailwind-merge":"^2.5.4","class-variance-authority":"^0.7.1"},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^6.0.0","typescript":"^5","@types/react":"^19.0.0","@types/bcryptjs":"^3.0.0","@types/react-dom":"^19.0.0"},"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/curia-chat-modal_1.4.5_1754231264706_0.9732493854017434","host":"s3://npm-registry-packages-npm-production"}},"1.5.0":{"name":"@curia_/curia-chat-modal","version":"1.5.0","license":"MIT","_id":"@curia_/curia-chat-modal@1.5.0","maintainers":[{"name":"flotob","email":"florian@glatz-mahlberg.de"}],"dist":{"shasum":"d72490d694b781ba039a89e632d42a34c0ac2d02","tarball":"https://registry.npmjs.org/@curia_/curia-chat-modal/-/curia-chat-modal-1.5.0.tgz","fileCount":36,"integrity":"sha512-euFC7X3Y5PpzV2VMW9kixhdbFA60VBBqHOR83DhojhP4Ua0tab+4yiPIsJlXFgtuUsNA21j7OU1iBkca4kProg==","signatures":[{"sig":"MEYCIQChZcHQUcSnx445ejaFemFlBDbPw0ObsRsbYf6wNACvnwIhAIUk7aJgIpZuE4TvXSmr8MgYcU+ndTix4K6sJ8HuBJCV","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":37771},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"dev":"tsc --watch","build":"tsc","clean":"rimraf dist"},"_npmUser":{"name":"flotob","email":"florian@glatz-mahlberg.de"},"description":"Chat modal package for embedding The Lounge IRC client in Curia forum","directories":{},"dependencies":{"clsx":"^2.1.1","bcryptjs":"^3.0.2","lucide-react":"^0.453.0","tailwind-merge":"^2.5.4","class-variance-authority":"^0.7.1"},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^6.0.0","typescript":"^5","@types/react":"^19.0.0","@types/bcryptjs":"^3.0.0","@types/react-dom":"^19.0.0"},"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/curia-chat-modal_1.5.0_1754235826984_0.47599558221019533","host":"s3://npm-registry-packages-npm-production"}},"1.5.1":{"name":"@curia_/curia-chat-modal","version":"1.5.1","license":"MIT","_id":"@curia_/curia-chat-modal@1.5.1","maintainers":[{"name":"flotob","email":"florian@glatz-mahlberg.de"}],"dist":{"shasum":"011f55a613171dfaf85e8c9ebcf0ffa604b9e4f8","tarball":"https://registry.npmjs.org/@curia_/curia-chat-modal/-/curia-chat-modal-1.5.1.tgz","fileCount":29,"integrity":"sha512-KASgynGEJCp8HfblySYUDLopijm7fXw/w8A3OHJPzyhDM5CZTpUP6IJTBJCnGuCvwUqesRKh/eMimvr4obfZyw==","signatures":[{"sig":"MEUCIQCXrCKoaIlUupKOcysqvbW+HQQuZ1KOZ4c57XHDSLaS/gIgbL+9i9XBrocAn0Z2qxWKvhCoCQ/7olVW6FpP7fm1H9o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":37735},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"8c1977a3fcea34db775df189e93bae2af86a7807","scripts":{"dev":"tsc --watch","build":"tsc","clean":"rimraf dist"},"_npmUser":{"name":"flotob","email":"florian@glatz-mahlberg.de"},"_npmVersion":"11.2.0","description":"Chat modal package for embedding The Lounge IRC client in Curia forum","directories":{},"_nodeVersion":"22.14.0","dependencies":{"clsx":"^2.1.1","bcryptjs":"^3.0.2","lucide-react":"^0.453.0","tailwind-merge":"^2.5.4","class-variance-authority":"^0.7.1"},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^6.0.0","typescript":"^5","@types/react":"^19.0.0","@types/bcryptjs":"^3.0.0","@types/react-dom":"^19.0.0"},"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/curia-chat-modal_1.5.1_1754237259087_0.9928020718892938","host":"s3://npm-registry-packages-npm-production"}},"1.5.2":{"name":"@curia_/curia-chat-modal","version":"1.5.2","license":"MIT","_id":"@curia_/curia-chat-modal@1.5.2","maintainers":[{"name":"flotob","email":"florian@glatz-mahlberg.de"}],"dist":{"shasum":"95079186b8ebb59dc6fb5e85f63bbd956bf68cf5","tarball":"https://registry.npmjs.org/@curia_/curia-chat-modal/-/curia-chat-modal-1.5.2.tgz","fileCount":29,"integrity":"sha512-0uWApT+zm1Wry58r9qIRUah38qcqpDDYAEcg4KSGNPFtK66K7CyFN+tdcLq6EMRtOrH1GNtANpz4iyd5HJdMww==","signatures":[{"sig":"MEUCIB6BvoG1rlyCtMXIy2jkZEnmI+XMfv8Ox5vqkpZFhwvMAiEAvlJI6CiHaQ3CcZjhkKwdACD+QNQ5AlHVNg0KKfAFXco=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":37737},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"8c1977a3fcea34db775df189e93bae2af86a7807","scripts":{"dev":"tsc --watch","build":"tsc","clean":"rimraf dist"},"_npmUser":{"name":"flotob","email":"florian@glatz-mahlberg.de"},"_npmVersion":"11.2.0","description":"Chat modal package for embedding The Lounge IRC client in Curia forum","directories":{},"_nodeVersion":"22.14.0","dependencies":{"clsx":"^2.1.1","bcryptjs":"^3.0.2","lucide-react":"^0.453.0","tailwind-merge":"^2.5.4","class-variance-authority":"^0.7.1"},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^6.0.0","typescript":"^5","@types/react":"^19.0.0","@types/bcryptjs":"^3.0.0","@types/react-dom":"^19.0.0"},"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/curia-chat-modal_1.5.2_1754238257296_0.6951899076831352","host":"s3://npm-registry-packages-npm-production"}},"1.5.3":{"name":"@curia_/curia-chat-modal","version":"1.5.3","license":"MIT","_id":"@curia_/curia-chat-modal@1.5.3","maintainers":[{"name":"flotob","email":"florian@glatz-mahlberg.de"}],"dist":{"shasum":"1a22f9c4a602da271be7a14308661825fe4616d1","tarball":"https://registry.npmjs.org/@curia_/curia-chat-modal/-/curia-chat-modal-1.5.3.tgz","fileCount":29,"integrity":"sha512-PsaEPsdjs+DtAWiZ0FFqbKhgEd14aM8jK0uUURFSINMGy9INi+HmsTSzHlX70jNx8J7ljbkiGKgUfdGnIGmmgQ==","signatures":[{"sig":"MEUCIQCPSf9aTWyRj6/NfdVwIbJLSGbmbWwF0YbWGEyLkSz6fgIgY8XuH7c1rGR4mu/ct1nwlOz417iZeSCwbRAD5fVkogc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":37861},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"456ecb990592ecf6edff154005a1750f263c3bc4","scripts":{"dev":"tsc --watch","build":"tsc","clean":"rimraf dist"},"_npmUser":{"name":"flotob","email":"florian@glatz-mahlberg.de"},"_npmVersion":"11.2.0","description":"Chat modal package for embedding The Lounge IRC client in Curia forum","directories":{},"_nodeVersion":"22.14.0","dependencies":{"clsx":"^2.1.1","bcryptjs":"^3.0.2","lucide-react":"^0.453.0","tailwind-merge":"^2.5.4","class-variance-authority":"^0.7.1"},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^6.0.0","typescript":"^5","@types/react":"^19.0.0","@types/bcryptjs":"^3.0.0","@types/react-dom":"^19.0.0"},"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/curia-chat-modal_1.5.3_1754239089559_0.9069961030898601","host":"s3://npm-registry-packages-npm-production"}},"1.5.4":{"name":"@curia_/curia-chat-modal","version":"1.5.4","license":"MIT","_id":"@curia_/curia-chat-modal@1.5.4","maintainers":[{"name":"flotob","email":"florian@glatz-mahlberg.de"}],"dist":{"shasum":"acc4a2515d34f552f4760d69ab9ed002584b1a8f","tarball":"https://registry.npmjs.org/@curia_/curia-chat-modal/-/curia-chat-modal-1.5.4.tgz","fileCount":29,"integrity":"sha512-mLjXVl0AY4lIIukWKyODm2w4MhV39k8Dvur4hYLNytjsOG5ckJo2rBmYs5fa1JsmDwREvA9FYYFIt23GUesESw==","signatures":[{"sig":"MEQCIBG5TwawPq2CkdJ7Fv9kzYayRusuKxvvuGrAn+b2KTDjAiAyS7lLykUpZLP+Mmn+/+vXN/6ia/ploUmcBMJCvGgKBw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":37737},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"456ecb990592ecf6edff154005a1750f263c3bc4","scripts":{"dev":"tsc --watch","build":"tsc","clean":"rimraf dist"},"_npmUser":{"name":"flotob","email":"florian@glatz-mahlberg.de"},"_npmVersion":"11.2.0","description":"Chat modal package for embedding The Lounge IRC client in Curia forum","directories":{},"_nodeVersion":"22.14.0","dependencies":{"clsx":"^2.1.1","bcryptjs":"^3.0.2","lucide-react":"^0.453.0","tailwind-merge":"^2.5.4","class-variance-authority":"^0.7.1"},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^6.0.0","typescript":"^5","@types/react":"^19.0.0","@types/bcryptjs":"^3.0.0","@types/react-dom":"^19.0.0"},"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/curia-chat-modal_1.5.4_1754239244767_0.15848712255596498","host":"s3://npm-registry-packages-npm-production"}},"1.6.0":{"name":"@curia_/curia-chat-modal","version":"1.6.0","license":"MIT","_id":"@curia_/curia-chat-modal@1.6.0","maintainers":[{"name":"flotob","email":"florian@glatz-mahlberg.de"}],"dist":{"shasum":"4cd708fa2727a41db3acd1df471212edf6a80607","tarball":"https://registry.npmjs.org/@curia_/curia-chat-modal/-/curia-chat-modal-1.6.0.tgz","fileCount":29,"integrity":"sha512-YHPX+g14QD/CACxrwIwavz+oPk3oq33ePL/e5gD6nLryKbBV5oGCXx1JSdlNTK6TULZvPNzIU+IUzRUBaWY95A==","signatures":[{"sig":"MEUCIQCDT08gE5zu1M9k6YcebaKlEG1XqnHJnKiJ7s1sNZlDbgIgBRm7GFCKfdkkJs+ccnQtyN8ILWSTGny3d/g2sA5KUrM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":38049},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"449478d6bc8e9f183a9b35fdcc55520df7ae1ef8","scripts":{"dev":"tsc --watch","build":"tsc","clean":"rimraf dist"},"_npmUser":{"name":"flotob","email":"florian@glatz-mahlberg.de"},"_npmVersion":"11.2.0","description":"Chat modal package for embedding The Lounge IRC client in Curia forum","directories":{},"_nodeVersion":"22.14.0","dependencies":{"clsx":"^2.1.1","bcryptjs":"^3.0.2","lucide-react":"^0.453.0","tailwind-merge":"^2.5.4","class-variance-authority":"^0.7.1"},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^6.0.0","typescript":"^5","@types/react":"^19.0.0","@types/bcryptjs":"^3.0.0","@types/react-dom":"^19.0.0"},"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/curia-chat-modal_1.6.0_1754399468143_0.9580146743381919","host":"s3://npm-registry-packages-npm-production"}},"1.6.1":{"name":"@curia_/curia-chat-modal","version":"1.6.1","license":"MIT","_id":"@curia_/curia-chat-modal@1.6.1","maintainers":[{"name":"flotob","email":"florian@glatz-mahlberg.de"}],"dist":{"shasum":"312edc87113b06338b0eb496274b1fa8b6eb9ba6","tarball":"https://registry.npmjs.org/@curia_/curia-chat-modal/-/curia-chat-modal-1.6.1.tgz","fileCount":29,"integrity":"sha512-tzqSMBfvS1+WPHKkvhbJ/LKPM0ezfkp27UuJ8w7TutcX7ueEZC8sJ/eKRr7sguBJ95uTVtRJ725wF8DO+nmlkQ==","signatures":[{"sig":"MEYCIQCkDS4NNvMGithEcOxu6GIpCWftx/1Wtm/AL0pAjBbs1AIhAJEc/DLyGVSpuwuVl54bTAy5vLNiBIkjo4gcNJsUEeYP","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":38049},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"f31f638cca0931d540041fb5a6ea21ce48f9da24","scripts":{"dev":"tsc --watch","build":"tsc","clean":"rimraf dist"},"_npmUser":{"name":"flotob","email":"florian@glatz-mahlberg.de"},"_npmVersion":"11.2.0","description":"Chat modal package for embedding The Lounge IRC client in Curia forum","directories":{},"_nodeVersion":"22.14.0","dependencies":{"clsx":"^2.1.1","bcryptjs":"^3.0.2","lucide-react":"^0.453.0","tailwind-merge":"^2.5.4","class-variance-authority":"^0.7.1"},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^6.0.0","typescript":"^5","@types/react":"^19.0.0","@types/bcryptjs":"^3.0.0","@types/react-dom":"^19.0.0"},"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/curia-chat-modal_1.6.1_1754408229991_0.22883089896347109","host":"s3://npm-registry-packages-npm-production"}},"1.6.2":{"name":"@curia_/curia-chat-modal","version":"1.6.2","license":"MIT","_id":"@curia_/curia-chat-modal@1.6.2","maintainers":[{"name":"flotob","email":"florian@glatz-mahlberg.de"}],"dist":{"shasum":"1974bafec5c682eff0790288bdccfe693ea0b635","tarball":"https://registry.npmjs.org/@curia_/curia-chat-modal/-/curia-chat-modal-1.6.2.tgz","fileCount":29,"integrity":"sha512-uUnUXgBBtjxqo6XzcBqdSNc9VbuqDqO5pkoPOMWL9I7f2if/LkRSe4U2Qc2O1qu1ch5luQoiHiAhcJksVH51Qw==","signatures":[{"sig":"MEQCICmXAQDvDyiWkPaIPt7IS79dZ3bnsP3xF6FHHXHqZs5DAiAydO/C1KH5E3IJ60mKO9tw0b7bU4c1LODpBzYlRgbAXg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":38011},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"f31f638cca0931d540041fb5a6ea21ce48f9da24","scripts":{"dev":"tsc --watch","build":"tsc","clean":"rimraf dist"},"_npmUser":{"name":"flotob","email":"florian@glatz-mahlberg.de"},"_npmVersion":"11.2.0","description":"Chat modal package for embedding The Lounge IRC client in Curia forum","directories":{},"_nodeVersion":"22.14.0","dependencies":{"clsx":"^2.1.1","bcryptjs":"^3.0.2","lucide-react":"^0.453.0","tailwind-merge":"^2.5.4","class-variance-authority":"^0.7.1"},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^6.0.0","typescript":"^5","@types/react":"^19.0.0","@types/bcryptjs":"^3.0.0","@types/react-dom":"^19.0.0"},"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/curia-chat-modal_1.6.2_1754409092738_0.7308962406043513","host":"s3://npm-registry-packages-npm-production"}},"1.6.3":{"name":"@curia_/curia-chat-modal","version":"1.6.3","license":"MIT","_id":"@curia_/curia-chat-modal@1.6.3","maintainers":[{"name":"flotob","email":"florian@glatz-mahlberg.de"}],"dist":{"shasum":"1012897ae91381b08c7a6b0edace3048fd47789c","tarball":"https://registry.npmjs.org/@curia_/curia-chat-modal/-/curia-chat-modal-1.6.3.tgz","fileCount":29,"integrity":"sha512-eHbSReKj1HwatCgdLYa9i3kd4dqaCPohfMfEM5tw5PsrToB1MSwskqvVP3arJDJKY7Ygp+k/P9UYfYX0mQbUkg==","signatures":[{"sig":"MEUCIHK99z+7c/mP+D4R5mCbvTvn3UIawSJ9N85eZGqsMyoYAiEArl1FWKJVtywwMdet9Y8xJEmle+X9qn6Al3swWQZWNYk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":38206},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"f31f638cca0931d540041fb5a6ea21ce48f9da24","scripts":{"dev":"tsc --watch","build":"tsc","clean":"rimraf dist"},"_npmUser":{"name":"flotob","email":"florian@glatz-mahlberg.de"},"_npmVersion":"11.2.0","description":"Chat modal package for embedding The Lounge IRC client in Curia forum","directories":{},"_nodeVersion":"22.14.0","dependencies":{"clsx":"^2.1.1","bcryptjs":"^3.0.2","lucide-react":"^0.453.0","tailwind-merge":"^2.5.4","class-variance-authority":"^0.7.1"},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^6.0.0","typescript":"^5","@types/react":"^19.0.0","@types/bcryptjs":"^3.0.0","@types/react-dom":"^19.0.0"},"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/curia-chat-modal_1.6.3_1754410636896_0.18762732347787026","host":"s3://npm-registry-packages-npm-production"}},"1.6.4":{"name":"@curia_/curia-chat-modal","version":"1.6.4","license":"MIT","_id":"@curia_/curia-chat-modal@1.6.4","maintainers":[{"name":"flotob","email":"florian@glatz-mahlberg.de"}],"dist":{"shasum":"ba5ebffe17ed3376881031df988a029d67667552","tarball":"https://registry.npmjs.org/@curia_/curia-chat-modal/-/curia-chat-modal-1.6.4.tgz","fileCount":30,"integrity":"sha512-Law/Ba3s9cFZgb1OKIfde76tabsHcmwtP3Zlcr/dDZSwHqW9QLuT4vlCQDEK1LIEjUIMtWNq1nVc6ty+KHIQDg==","signatures":[{"sig":"MEUCIQDs9NAA2cpFgJ51KopqxpfVK/6wSnk5XZxCelQiKtsr+wIgKtfNW/zVxFG7yUz0EHjWFlOtDBYbVN51S6PNe7Jo+4E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":39164},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"f31f638cca0931d540041fb5a6ea21ce48f9da24","scripts":{"dev":"tsc --watch","build":"tsc && cp -r src/styles dist/","clean":"rimraf dist"},"_npmUser":{"name":"flotob","email":"florian@glatz-mahlberg.de"},"_npmVersion":"11.2.0","description":"Chat modal package for embedding The Lounge IRC client in Curia forum","directories":{},"_nodeVersion":"22.14.0","dependencies":{"clsx":"^2.1.1","bcryptjs":"^3.0.2","lucide-react":"^0.453.0","tailwind-merge":"^2.5.4","class-variance-authority":"^0.7.1"},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^6.0.0","typescript":"^5","@types/react":"^19.0.0","@types/bcryptjs":"^3.0.0","@types/react-dom":"^19.0.0"},"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/curia-chat-modal_1.6.4_1754411017183_0.536935061450371","host":"s3://npm-registry-packages-npm-production"}},"1.6.5":{"name":"@curia_/curia-chat-modal","version":"1.6.5","license":"MIT","_id":"@curia_/curia-chat-modal@1.6.5","maintainers":[{"name":"flotob","email":"florian@glatz-mahlberg.de"}],"dist":{"shasum":"348a8024140cf1d462c6f91699b88e536dbd3bd4","tarball":"https://registry.npmjs.org/@curia_/curia-chat-modal/-/curia-chat-modal-1.6.5.tgz","fileCount":30,"integrity":"sha512-m/0nazcEV32bUycCd67N09J6nqOjhc+aj1aQv4arBxrPPLv59eoCiVFrLtZlMB3WpF6F76ks9MMZbe4rklj+FQ==","signatures":[{"sig":"MEYCIQDglGZ3WyU1BgMumV0ZtlsbB20mfBZSquin/OcTVOs++QIhAJXqxjstNBC6+u0bW7eAS97pHjTPQsCFAyQGdq5eLjiA","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":37784},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"f31f638cca0931d540041fb5a6ea21ce48f9da24","scripts":{"dev":"tsc --watch","build":"tsc && cp -r src/styles dist/","clean":"rimraf dist"},"_npmUser":{"name":"flotob","email":"florian@glatz-mahlberg.de"},"_npmVersion":"11.2.0","description":"Chat modal package for embedding The Lounge IRC client in Curia forum","directories":{},"_nodeVersion":"22.14.0","dependencies":{"clsx":"^2.1.1","bcryptjs":"^3.0.2","lucide-react":"^0.453.0","tailwind-merge":"^2.5.4","class-variance-authority":"^0.7.1"},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^6.0.0","typescript":"^5","@types/react":"^19.0.0","@types/bcryptjs":"^3.0.0","@types/react-dom":"^19.0.0"},"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/curia-chat-modal_1.6.5_1754411768197_0.8317563342988465","host":"s3://npm-registry-packages-npm-production"}},"1.7.0":{"name":"@curia_/curia-chat-modal","version":"1.7.0","license":"MIT","_id":"@curia_/curia-chat-modal@1.7.0","maintainers":[{"name":"flotob","email":"florian@glatz-mahlberg.de"}],"dist":{"shasum":"3e2fd08bf26bef0bd6ab699bc400ff8815e01d6b","tarball":"https://registry.npmjs.org/@curia_/curia-chat-modal/-/curia-chat-modal-1.7.0.tgz","fileCount":30,"integrity":"sha512-3vKSL7f5cDz1F7L25mMUh5ITP69HGOjtqx9P/zgy/n8f4IrTYAzUw1PZkIzv+IaN2jMs5JT4lhse9haKHsQZCg==","signatures":[{"sig":"MEUCIQCp/pVdcucryEJwOqWwmiiPV2ikG8PuFj98B/oAPv2pfQIgGfbCDCiiHlbkJ2oD4YaZ1RfHBrfvCBYe5Adn4viWqx0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":38164},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"cb75d0c63cf696e7199746af807d653baf17157f","scripts":{"dev":"tsc --watch","build":"tsc && cp -r src/styles dist/","clean":"rimraf dist"},"_npmUser":{"name":"flotob","email":"florian@glatz-mahlberg.de"},"_npmVersion":"11.2.0","description":"Chat modal package for embedding The Lounge IRC client in Curia forum","directories":{},"_nodeVersion":"22.14.0","dependencies":{"clsx":"^2.1.1","bcryptjs":"^3.0.2","lucide-react":"^0.453.0","tailwind-merge":"^2.5.4","class-variance-authority":"^0.7.1"},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^6.0.0","typescript":"^5","@types/react":"^19.0.0","@types/bcryptjs":"^3.0.0","@types/react-dom":"^19.0.0"},"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/curia-chat-modal_1.7.0_1754412472547_0.44077419001004925","host":"s3://npm-registry-packages-npm-production"}},"4.0.0":{"name":"@curia_/curia-chat-modal","version":"4.0.0","license":"MIT","_id":"@curia_/curia-chat-modal@4.0.0","maintainers":[{"name":"flotob","email":"florian@glatz-mahlberg.de"}],"dist":{"shasum":"23504482c13c6293e607bbf0c7263daae357bb88","tarball":"https://registry.npmjs.org/@curia_/curia-chat-modal/-/curia-chat-modal-4.0.0.tgz","fileCount":69,"integrity":"sha512-n9hPeC5or6RQXgBCgIjddFLy03Bkk1alTKHtFjyQWJ2htd+Z5fToi/GFPV8NblYHBmQxUKZEDI1b42E1rY5c6A==","signatures":[{"sig":"MEUCIQDesHvv8OAc2cCQeXcs4uNR3XMHnWMcVL68S2bdKBU0fgIgE/cO9x9a+A9B/w3Kk1zzak+wo7XtQJ6tuskYo1rfEk8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":69638},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"dev":"tsc --watch","build":"tsc && cp -r src/styles dist/","clean":"rimraf dist"},"_npmUser":{"name":"flotob","email":"florian@glatz-mahlberg.de"},"description":"Chat modal package for embedding The Lounge IRC client in Curia forum","directories":{},"dependencies":{"clsx":"^2.1.1","bcryptjs":"^3.0.2","lucide-react":"^0.453.0","tailwind-merge":"^2.5.4","class-variance-authority":"^0.7.1"},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^6.0.0","typescript":"^5","@types/react":"^19.0.0","@types/bcryptjs":"^3.0.0","@types/react-dom":"^19.0.0"},"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/curia-chat-modal_4.0.0_1754498256973_0.2927855126593044","host":"s3://npm-registry-packages-npm-production"}},"4.0.1":{"name":"@curia_/curia-chat-modal","version":"4.0.1","license":"MIT","_id":"@curia_/curia-chat-modal@4.0.1","maintainers":[{"name":"flotob","email":"florian@glatz-mahlberg.de"}],"dist":{"shasum":"d4bb80e503fee97414ad076f59289815fc973f75","tarball":"https://registry.npmjs.org/@curia_/curia-chat-modal/-/curia-chat-modal-4.0.1.tgz","fileCount":69,"integrity":"sha512-yafSZ7P+HhxmHaSwwKHDZcP2tMzj7z8cVCPRRht+Kh7JufZoin422+dMOCKqbi8bDkmbNhmeQwZfhTKbE2hZPg==","signatures":[{"sig":"MEUCIDDLxavtPQw2kb7WqxAQX00pnc39cfPARBfbV2OPT8Q8AiEA3MQu9ToxkPP0gk0PHHuJvwGVcBs6NKQaW9r0h9xlDdA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":69616},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"dev":"tsc --watch","build":"tsc && cp -r src/styles dist/","clean":"rimraf dist"},"_npmUser":{"name":"flotob","email":"florian@glatz-mahlberg.de"},"description":"Chat modal package for embedding The Lounge IRC client in Curia forum","directories":{},"dependencies":{"clsx":"^2.1.1","bcryptjs":"^3.0.2","lucide-react":"^0.453.0","tailwind-merge":"^2.5.4","class-variance-authority":"^0.7.1"},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^6.0.0","typescript":"^5","@types/react":"^19.0.0","@types/bcryptjs":"^3.0.0","@types/react-dom":"^19.0.0"},"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/curia-chat-modal_4.0.1_1754598840053_0.693493022569331","host":"s3://npm-registry-packages-npm-production"}},"4.0.2":{"name":"@curia_/curia-chat-modal","version":"4.0.2","description":"Chat modal package for embedding The Lounge IRC client in Curia forum","main":"dist/index.js","types":"dist/index.d.ts","license":"MIT","scripts":{"build":"tsc && cp -r src/styles dist/","dev":"tsc --watch","clean":"rimraf dist"},"dependencies":{"bcryptjs":"^3.0.2","class-variance-authority":"^0.7.1","clsx":"^2.1.1","lucide-react":"^0.453.0","tailwind-merge":"^2.5.4"},"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0"},"devDependencies":{"@types/bcryptjs":"^3.0.0","@types/react":"^19.0.0","@types/react-dom":"^19.0.0","rimraf":"^6.0.0","typescript":"^5"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"_id":"@curia_/curia-chat-modal@4.0.2","dist":{"shasum":"78500c68fc666b318f10dd1fefc9c7ed97051ba9","integrity":"sha512-RXSTjl4h4nhTtR8rpm0Ulucm3pRLfax666G5Vp7kKoGr9GkCoF8BnW8rav/Sc/tvV7V20XIlIq3q8uvDCMBCLQ==","tarball":"https://registry.npmjs.org/@curia_/curia-chat-modal/-/curia-chat-modal-4.0.2.tgz","fileCount":69,"unpackedSize":69474,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCICm9CmzH5Sl4D5kVLl6y1PY2tPU3t/3j9RWb3RczpGmwAiAdOkJteS4yXcH3KOin0Ic/ele3RO61ZD24lJcpv5l4dg=="}]},"_npmUser":{"name":"flotob","email":"florian@glatz-mahlberg.de"},"directories":{},"maintainers":[{"name":"flotob","email":"florian@glatz-mahlberg.de"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/curia-chat-modal_4.0.2_1754634498045_0.3036289534679639"},"_hasShrinkwrap":false}},"time":{"created":"2025-08-01T17:34:01.525Z","modified":"2025-08-08T06:28:18.749Z","1.0.0":"2025-08-01T17:34:01.782Z","1.3.3":"2025-08-02T11:48:41.601Z","1.4.0":"2025-08-02T21:13:11.119Z","1.4.1":"2025-08-03T13:02:33.046Z","1.4.2":"2025-08-03T13:21:49.705Z","1.4.3":"2025-08-03T14:21:25.498Z","1.4.4":"2025-08-03T14:26:27.425Z","1.4.5":"2025-08-03T14:27:44.948Z","1.5.0":"2025-08-03T15:43:47.231Z","1.5.1":"2025-08-03T16:07:39.307Z","1.5.2":"2025-08-03T16:24:17.477Z","1.5.3":"2025-08-03T16:38:09.750Z","1.5.4":"2025-08-03T16:40:44.966Z","1.6.0":"2025-08-05T13:11:08.340Z","1.6.1":"2025-08-05T15:37:10.234Z","1.6.2":"2025-08-05T15:51:32.921Z","1.6.3":"2025-08-05T16:17:17.104Z","1.6.4":"2025-08-05T16:23:37.392Z","1.6.5":"2025-08-05T16:36:08.383Z","1.7.0":"2025-08-05T16:47:52.757Z","4.0.0":"2025-08-06T16:37:37.169Z","4.0.1":"2025-08-07T20:34:00.246Z","4.0.2":"2025-08-08T06:28:18.498Z"},"license":"MIT","description":"Chat modal package for embedding The Lounge IRC client in Curia forum","maintainers":[{"name":"flotob","email":"florian@glatz-mahlberg.de"}],"readme":"# Curia Chat Modal\n\nA React package for embedding The Lounge IRC client in a responsive modal interface with session-aware architecture.\n\n## Overview\n\nThis package provides a **session-aware chat modal system** designed for integration with IRC-based chat systems. It requires the parent application to handle IRC provisioning, channel management, and session state, while the modal focuses purely on UI presentation.\n\n## Architecture\n\n### Session-Aware Pattern\n\nThe chat modal uses a **two-phase initialization pattern**:\n\n1. **Session Initialization (Parent App)**: IRC provisioning + channel fetching happens once per user session\n2. **Modal Invocation (This Package)**: Pre-provisioned data is passed as props for instant display\n\nThis eliminates the 2-3 second delay on each modal open while providing better error handling and retry capabilities.\n\n## Installation\n\n```bash\nyarn add @curia_/curia-chat-modal\n```\n\n## Integration Guide\n\n### 1. Parent App Setup\n\n#### A. Install Dependencies\n\n```bash\nyarn add sonner  # For toast notifications\n```\n\n#### B. IRC Provisioning API\n\nCreate an IRC user provisioning endpoint in your app:\n\n```typescript\n// /api/irc-user-provision\nexport async function POST(req: NextRequest) {\n  const user = req.user; // From your auth middleware\n  \n  try {\n    // Generate IRC credentials\n    const ircUsername = generateIrcUsername(user.name, user.id);\n    const ircPassword = generateSecurePassword();\n    \n    // Provision user in your IRC bouncer (e.g., Soju)\n    await sojuAdminService.provisionUser({\n      ircUsername,\n      ircPassword,\n      nickname: generateIrcNickname(user.name),\n      realname: user.name || ircUsername\n    });\n\n    return NextResponse.json({\n      success: true,\n      ircUsername,\n      ircPassword,\n      networkName: 'your-network-name'\n    });\n  } catch (error) {\n    return NextResponse.json({ error: error.message }, { status: 500 });\n  }\n}\n```\n\n#### C. Chat Channels API\n\nCreate a chat channels endpoint:\n\n```typescript\n// /api/communities/[communityId]/chat-channels\nexport async function GET(req: AuthenticatedRequest, context: RouteContext) {\n  const { communityId } = await context.params;\n  \n  try {\n    // Get channels from database\n    let channels = await ChatChannelQueries.getChannelsByCommunity(communityId);\n    \n    // AUTO-CREATE DEFAULT CHANNEL if none exist\n    if (channels.length === 0) {\n      const communityResult = await query(\n        'SELECT name FROM communities WHERE id = $1',\n        [communityId]\n      );\n      \n      const communityName = communityResult.rows[0]?.name;\n      \n      const defaultChannel = await ChatChannelQueries.createChannel({\n        community_id: communityId,\n        name: communityName,\n        description: `Main chat for ${communityName}`,\n        irc_channel_name: generateIrcChannelName(communityName),\n        is_single_mode: true,\n        is_default: true,\n        settings: {\n          irc: { autoconnect: true, lockchannel: true, nofocus: true },\n          ui: { defaultTheme: 'auto', allowThemeSwitch: true }\n        }\n      });\n      \n      channels = [defaultChannel];\n    }\n    \n    return NextResponse.json(channels);\n  } catch (error) {\n    return NextResponse.json({ error: 'Failed to fetch channels' }, { status: 500 });\n  }\n}\n```\n\n#### D. Chat Session Hook\n\nCreate a session management hook in your app:\n\n```typescript\n// hooks/useChatSession.ts\nimport { useState, useEffect, useCallback } from 'react';\nimport { toast } from 'sonner';\n\nexport function useChatSession() {\n  const { user, token } = useAuth();\n  const [sessionData, setSessionData] = useState(null);\n  const [isInitialized, setIsInitialized] = useState(false);\n  const [isLoading, setIsLoading] = useState(false);\n  const [initError, setInitError] = useState(null);\n  const [retryCount, setRetryCount] = useState(0);\n  const [isRetrying, setIsRetrying] = useState(false);\n\n  // Retry logic with exponential backoff (3 attempts total)\n  const initializeSessionWithRetry = useCallback(async (attemptNumber = 1) => {\n    try {\n      setIsLoading(attemptNumber === 1);\n      setIsRetrying(attemptNumber > 1);\n      setRetryCount(attemptNumber);\n      setInitError(null);\n      \n      // 1. Provision IRC credentials\n      const ircCredentials = await provisionIrcUser(\n        token,\n        process.env.NEXT_PUBLIC_CHAT_BASE_URL || '',\n        process.env.NEXT_PUBLIC_CURIA_BASE_URL || ''\n      );\n      \n      // 2. Fetch available channels\n      const channels = await authFetchJson(\n        `/api/communities/${user.cid}/chat-channels`,\n        { token }\n      );\n      \n      // 3. Identify default channel\n      const defaultChannel = channels.find(ch => ch.is_default) || channels[0];\n      \n      if (!defaultChannel) {\n        throw new Error('No chat channels available for community');\n      }\n\n      setSessionData({ ircCredentials, channels, defaultChannel });\n      setIsInitialized(true);\n      \n      // Success toast\n      toast.success(\"Chat connected! 💬\");\n      \n    } catch (error) {\n      if (attemptNumber < 3) {\n        // Retry with exponential backoff: 1s, 2s delays\n        const delay = Math.pow(2, attemptNumber - 1) * 1000;\n        setTimeout(() => initializeSessionWithRetry(attemptNumber + 1), delay);\n      } else {\n        // Final failure\n        setInitError(error.message);\n        setIsInitialized(false);\n        toast.error(\"Chat connection failed. Please refresh the page to retry.\", {\n          duration: 10000,\n        });\n      }\n    } finally {\n      setIsLoading(false);\n      setIsRetrying(false);\n    }\n  }, [user?.cid, token]);\n\n  useEffect(() => {\n    if (user && token && user.cid) {\n      initializeSessionWithRetry(1);\n    }\n  }, [user?.userId, user?.cid, user, token, initializeSessionWithRetry]);\n\n  const retryInitialization = useCallback(() => {\n    setRetryCount(0);\n    setInitError(null);\n    setIsRetrying(false);\n    setIsInitialized(false);\n    setSessionData(null);\n    \n    if (user && token && user.cid) {\n      initializeSessionWithRetry(1);\n    }\n  }, [user, token, initializeSessionWithRetry]);\n\n  return {\n    sessionData,\n    isInitialized,\n    isLoading,\n    initError,\n    retryCount,\n    isRetrying,\n    retryInitialization,\n    getChannelById: (channelId) => sessionData?.channels.find(ch => ch.id === channelId)\n  };\n}\n```\n\n#### E. Chat Modal Wrapper\n\nCreate a wrapper component that handles all states:\n\n```typescript\n// components/ChatModalWrapper.tsx\nimport React from 'react';\nimport { ChatModal, useChatModal } from '@curia_/curia-chat-modal';\nimport { useChatSession } from '@/hooks/useChatSession';\nimport { ChatLoadingModal } from '@/components/chat/ChatLoadingModal';\nimport { ChatErrorModal } from '@/components/chat/ChatErrorModal';\n\nexport function ChatModalWrapper() {\n  const { isChatOpen, selectedChannelId, closeChat } = useChatModal();\n  const { \n    sessionData, \n    isInitialized, \n    isLoading, \n    initError, \n    retryCount, \n    isRetrying, \n    retryInitialization \n  } = useChatSession();\n  const theme = useEffectiveTheme();\n  \n  if (!isChatOpen) return null;\n\n  // Show loading during initialization/retries\n  if (isLoading || isRetrying) {\n    const message = isRetrying \n      ? `Retrying connection (${retryCount}/3)...`\n      : \"Connecting to chat...\";\n    \n    return <ChatLoadingModal message={message} onClose={closeChat} />;\n  }\n\n  // Show error after all retries failed\n  if (initError && !isRetrying && retryCount >= 3) {\n    return (\n      <ChatErrorModal \n        error={initError}\n        retryCount={retryCount}\n        onRetry={retryInitialization}\n        onClose={closeChat}\n      />\n    );\n  }\n\n  if (!isInitialized || !sessionData) return null;\n\n  // Determine target channel\n  const targetChannel = selectedChannelId \n    ? sessionData.channels.find(ch => ch.id === selectedChannelId)\n    : sessionData.defaultChannel;\n\n  if (!targetChannel) {\n    return (\n      <ChatErrorModal \n        error=\"Selected chat channel not found.\"\n        onRetry={() => closeChat()}\n        onClose={closeChat}\n      />\n    );\n  }\n\n  return (\n    <ChatModal\n      ircCredentials={sessionData.ircCredentials}\n      channel={targetChannel}\n      chatBaseUrl={process.env.NEXT_PUBLIC_CHAT_BASE_URL}\n      theme={theme}\n      mode={targetChannel.is_single_mode ? 'single' : 'normal'}\n      onClose={closeChat}\n    />\n  );\n}\n```\n\n### 2. Sidebar Action Listener (Optional)\n\nFor parent app integration (e.g., iframe communication):\n\n```typescript\n// components/SidebarActionListener.tsx\n'use client';\n\nimport { useEffect } from 'react';\nimport { useChatModal } from '@curia_/curia-chat-modal';\n\nexport function SidebarActionListener() {\n  const { openChat, closeChat } = useChatModal();\n\n  useEffect(() => {\n    const handleMessage = (event: MessageEvent) => {\n      if (event.data?.type === 'sidebar_action') {\n        const { action, data } = event.data;\n        \n        if (action === 'messages') {\n          console.log('[SidebarActionListener] Opening chat modal');\n          openChat(data?.channelId); // Optional channel selection\n        }\n      }\n    };\n\n    window.addEventListener('message', handleMessage);\n    return () => window.removeEventListener('message', handleMessage);\n  }, [openChat, closeChat]);\n\n  return null; // This component only listens for events\n}\n```\n\n### 3. App Integration\n\n```typescript\n// app/layout.tsx or app/providers.tsx\nimport { ChatProvider } from '@curia_/curia-chat-modal';\nimport { ChatModalWrapper } from '@/components/ChatModalWrapper';\nimport { SidebarActionListener } from '@/components/SidebarActionListener';\n\nexport default function RootLayout({ children }) {\n  return (\n    <html>\n      <body>\n        <ChatProvider>\n          {/* Your app content */}\n          {children}\n          \n          {/* Chat integration components */}\n          <SidebarActionListener />\n          <ChatModalWrapper />\n        </ChatProvider>\n      </body>\n    </html>\n  );\n}\n```\n\n## API Reference\n\n### ChatModal Props\n\n```typescript\ninterface ChatModalProps {\n  ircCredentials: IrcCredentials;     // Pre-provisioned IRC credentials\n  channel: ApiChatChannel;            // Pre-selected channel data\n  chatBaseUrl?: string;               // Base URL for The Lounge IRC client\n  theme?: 'light' | 'dark';          // Current app theme\n  mode?: 'single' | 'normal';        // Channel display mode\n  onClose: () => void;                // Close handler\n}\n\ninterface IrcCredentials {\n  success: boolean;\n  ircUsername: string;\n  ircPassword: string;\n  networkName: string;\n}\n\ninterface ApiChatChannel {\n  id: number;\n  community_id: string;\n  name: string;\n  description: string | null;\n  irc_channel_name: string;\n  is_single_mode: boolean;\n  is_default: boolean;\n  settings: ChatChannelSettings;\n  created_at: string;\n  updated_at: string;\n}\n```\n\n### Context API\n\n```typescript\n// Chat context for modal state management\ninterface ChatContextType {\n  isChatOpen: boolean;\n  selectedChannelId: number | null;\n  openChat: (channelId?: number) => void;\n  closeChat: () => void;\n}\n\n// Usage\nconst { isChatOpen, openChat, closeChat } = useChatModal();\n```\n\n## Environment Variables\n\n```bash\n# Required for local development\nNEXT_PUBLIC_CHAT_BASE_URL=http://localhost:9000\nNEXT_PUBLIC_CURIA_BASE_URL=http://localhost:3000\n```\n\n## Features\n\n- 📱 **Responsive Design**: Desktop sidebar (25rem width), mobile full-screen\n- 🔄 **Retry Logic**: 3 attempts with exponential backoff (1s, 2s delays)\n- 🎨 **Theme Support**: Light/dark mode with CSS custom properties\n- ⌨️ **Keyboard Navigation**: ESC to close, proper focus management\n- 🔒 **Secure Iframe**: Sandboxed with necessary permissions\n- 🌐 **Configurable URLs**: Support for local development and production\n- 👥 **Multi-Channel**: Channel selection and single-channel mode\n- 🎯 **Session-Aware**: Pre-provisioned credentials for instant loading\n- 📢 **Toast Notifications**: Success/failure feedback via Sonner\n- 🔧 **Error Recovery**: Manual retry with comprehensive error handling\n\n## IRC Stack Requirements\n\nThis package is designed to work with:\n\n- **IRC Server**: Ergo IRCd or compatible\n- **IRC Bouncer**: Soju with admin interface enabled\n- **Web Client**: The Lounge with auto-login support\n- **Backend API**: IRC user provisioning endpoint\n- **Database**: Chat channels management system\n\n## Migration from Legacy Patterns\n\nIf migrating from a direct API-calling chat modal:\n\n1. **Move IRC provisioning** from modal to parent app session hook\n2. **Implement channel management** API endpoints\n3. **Add retry logic** with exponential backoff\n4. **Update modal props** to accept pre-provisioned data\n5. **Add error handling** modals and toast notifications\n6. **Configure environment variables** for local development\n\nThis architecture provides better performance, reliability, and user experience compared to per-modal-open provisioning patterns.","readmeFilename":"README.md"}