{"_id":"popupable","_rev":"29-b0afc6f95e10ac15466910e4e7eec40d","name":"popupable","dist-tags":{"latest":"1.11.0"},"versions":{"1.0.0":{"name":"popupable","version":"1.0.0","author":{"name":"Ewan Howell","email":"ewanhowell5195"},"license":"MIT","_id":"popupable@1.0.0","maintainers":[{"name":"ewanhowell5195","email":"ewan@ewanhowell.com"}],"homepage":"https://github.com/ewanhowell5195/popupable#readme","bugs":{"url":"https://github.com/ewanhowell5195/popupable/issues"},"dist":{"shasum":"02f616a571a74d2d98a529ba689ea1d3296928fb","tarball":"https://registry.npmjs.org/popupable/-/popupable-1.0.0.tgz","fileCount":4,"integrity":"sha512-Mp02izSlmeDmGJaZ6K/dEBtxAnD2K7cr8cPJLYIqwJFwL/2RKDwyjWI5SUGaNaFJpo2qzVVwZfKOblKBRL39dA==","signatures":[{"sig":"MEUCIEZwl65XoOgbueuSyW8zwh8cZEttWpS7V4Q1+k4vkLP/AiEAhOKdbx6LB5hMpv6t7VoGk+Xz2+MAy0jWxGT/9xO0Gno=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":38412},"main":"./dist/popupable.min.js","type":"module","style":"./dist/popupable.min.css","exports":{".":"./dist/popupable.min.js","./styles.css":"./dist/popupable.min.css"},"gitHead":"882c51d9d1704fb112ee0c4c1a1f9d5d657f15cc","scripts":{"build":"node build.js"},"_npmUser":{"name":"ewanhowell5195","email":"ewan@ewanhowell.com"},"repository":{"url":"git+https://github.com/ewanhowell5195/popupable.git","type":"git"},"_npmVersion":"11.9.0","description":"A lightweight, zero-dependency lightbox library using modern JavaScript and CSS.","directories":{},"_nodeVersion":"22.19.0","_hasShrinkwrap":false,"devDependencies":{"terser":"^5.43.1","clean-css":"^5.3.3"},"_npmOperationalInternal":{"tmp":"tmp/popupable_1.0.0_1772465941711_0.23780193182953435","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"popupable","version":"1.0.1","author":{"name":"Ewan Howell","email":"ewanhowell5195"},"license":"MIT","_id":"popupable@1.0.1","maintainers":[{"name":"ewanhowell5195","email":"ewan@ewanhowell.com"}],"homepage":"https://github.com/ewanhowell5195/popupable#readme","bugs":{"url":"https://github.com/ewanhowell5195/popupable/issues"},"dist":{"shasum":"3b231c6b322c7142d421343f0f1b5b8783cc75c0","tarball":"https://registry.npmjs.org/popupable/-/popupable-1.0.1.tgz","fileCount":4,"integrity":"sha512-9bP4j5hJXNgXigfkBNdf7ymPlevClIdjEq1WHQyZVZ0uMhyxrMrkCsscJy3s2aCMmqy9vKTB5JjWcjM78629mA==","signatures":[{"sig":"MEUCIF81TiO5sWSdjL82+Cx9KaB9t6rhajDoFnHEB030S/z/AiEAwI3wiYK6RrXSJWNubLeOQnxW3ianpPWRUlsdvazIi70=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":38466},"main":"./dist/popupable.min.js","type":"module","style":"./dist/popupable.min.css","exports":{".":"./dist/popupable.min.js","./styles.css":"./dist/popupable.min.css"},"gitHead":"810378344ad35aa463509a2492377eb04224f09a","scripts":{"build":"node build.js"},"_npmUser":{"name":"ewanhowell5195","email":"ewan@ewanhowell.com"},"repository":{"url":"git+https://github.com/ewanhowell5195/popupable.git","type":"git"},"_npmVersion":"11.9.0","description":"A lightweight, zero-dependency lightbox library using modern JavaScript and CSS.","directories":{},"_nodeVersion":"22.19.0","_hasShrinkwrap":false,"devDependencies":{"terser":"^5.43.1","clean-css":"^5.3.3"},"_npmOperationalInternal":{"tmp":"tmp/popupable_1.0.1_1772493029312_0.9684993487280344","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"popupable","version":"1.0.2","author":{"name":"Ewan Howell","email":"ewanhowell5195"},"license":"MIT","_id":"popupable@1.0.2","maintainers":[{"name":"ewanhowell5195","email":"ewan@ewanhowell.com"}],"homepage":"https://github.com/ewanhowell5195/popupable#readme","bugs":{"url":"https://github.com/ewanhowell5195/popupable/issues"},"dist":{"shasum":"80a54d27be7520b853db59f4a883b2f113c15230","tarball":"https://registry.npmjs.org/popupable/-/popupable-1.0.2.tgz","fileCount":4,"integrity":"sha512-YNqvF3JIj8vLQgc+YXWVqVh3ynryAiSG6+Li93e59pud16Wmi0emk6M4phrflzCmY0E+ZclRD2LHPs332utWmQ==","signatures":[{"sig":"MEUCIAULm1wqd+zcT2tNF84L65YTaugQyKPKSUXSYQ4QxzJnAiEAjluI+4gMT6kiBlM0xagsQ8/25gxQtjUePbaak+zKkiE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":38538},"main":"./dist/popupable.min.js","type":"module","style":"./dist/popupable.min.css","exports":{".":"./dist/popupable.min.js","./styles.css":"./dist/popupable.min.css"},"gitHead":"18c9b52004f1f47a7d8d5354d69a146ee4baebbe","scripts":{"build":"node build.js"},"_npmUser":{"name":"ewanhowell5195","email":"ewan@ewanhowell.com"},"repository":{"url":"git+https://github.com/ewanhowell5195/popupable.git","type":"git"},"_npmVersion":"11.9.0","description":"A lightweight, zero-dependency lightbox library using modern JavaScript and CSS.","directories":{},"_nodeVersion":"22.19.0","_hasShrinkwrap":false,"devDependencies":{"terser":"^5.43.1","clean-css":"^5.3.3"},"_npmOperationalInternal":{"tmp":"tmp/popupable_1.0.2_1772666350789_0.5364391631974232","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"popupable","version":"1.0.3","author":{"name":"Ewan Howell","email":"ewanhowell5195"},"license":"MIT","_id":"popupable@1.0.3","maintainers":[{"name":"ewanhowell5195","email":"ewan@ewanhowell.com"}],"homepage":"https://github.com/ewanhowell5195/popupable#readme","bugs":{"url":"https://github.com/ewanhowell5195/popupable/issues"},"dist":{"shasum":"965c7260ba8cec356a8e976c5dd969fcaf643d69","tarball":"https://registry.npmjs.org/popupable/-/popupable-1.0.3.tgz","fileCount":4,"integrity":"sha512-R3H7O6ls329+Wz0fhgjg4Z4X84C3gm5CUwAu6CxvOt+mdIVSSIUsoUbQYOI0HA9AZcriCIwugYMPy/325580sQ==","signatures":[{"sig":"MEYCIQDh4whnJsiElFi4PVvOX9Ke5iDcyLws/CbH4FMGz+1UnQIhANWOtUxIDoyylMPW+Z/GxEAkmglDhWlIknuD5k+5HpPX","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":38658},"main":"./dist/popupable.min.js","type":"module","style":"./dist/popupable.min.css","exports":{".":"./dist/popupable.min.js","./styles.css":"./dist/popupable.min.css"},"gitHead":"dfc69d15af96e2e3ffc7376c7c54a4c7da262d06","scripts":{"build":"node build.js"},"_npmUser":{"name":"ewanhowell5195","email":"ewan@ewanhowell.com"},"repository":{"url":"git+https://github.com/ewanhowell5195/popupable.git","type":"git"},"_npmVersion":"11.9.0","description":"A lightweight, zero-dependency lightbox library using modern JavaScript and CSS.","directories":{},"_nodeVersion":"22.19.0","_hasShrinkwrap":false,"devDependencies":{"terser":"^5.43.1","clean-css":"^5.3.3"},"_npmOperationalInternal":{"tmp":"tmp/popupable_1.0.3_1772667829584_0.011895109318534436","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"popupable","version":"1.1.0","author":{"name":"Ewan Howell","email":"ewanhowell5195"},"license":"MIT","_id":"popupable@1.1.0","maintainers":[{"name":"ewanhowell5195","email":"ewan@ewanhowell.com"}],"homepage":"https://github.com/ewanhowell5195/popupable#readme","bugs":{"url":"https://github.com/ewanhowell5195/popupable/issues"},"dist":{"shasum":"8d8c5fad2e3596f2f3c66bc6158adca68f2c9bdb","tarball":"https://registry.npmjs.org/popupable/-/popupable-1.1.0.tgz","fileCount":4,"integrity":"sha512-rchECOHxkAv9BAxbtN9iWmhIdQJld6B8EwVQv6NlIMhHl7FJdCX2d13BtLnMAszBb6OL2AfYiwe6gXL+tNcRMg==","signatures":[{"sig":"MEYCIQCxUbnuiLR/ojfFcmg2UrkcwiDLfePzcePizHy87nZIswIhAI0gJyp1nW2mggF9wwjABGBGrO/smGT/Blq5yTflJtPR","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":38792},"main":"./dist/popupable.min.js","type":"module","style":"./dist/popupable.min.css","exports":{".":"./dist/popupable.min.js","./styles.css":"./dist/popupable.min.css"},"gitHead":"768cad8ec1b8a74d0f2d909c9ad8a547eb236942","scripts":{"build":"node build.js"},"_npmUser":{"name":"ewanhowell5195","email":"ewan@ewanhowell.com"},"repository":{"url":"git+https://github.com/ewanhowell5195/popupable.git","type":"git"},"_npmVersion":"11.9.0","description":"A lightweight, zero-dependency lightbox library using modern JavaScript and CSS.","directories":{},"_nodeVersion":"22.19.0","_hasShrinkwrap":false,"devDependencies":{"terser":"^5.43.1","clean-css":"^5.3.3"},"_npmOperationalInternal":{"tmp":"tmp/popupable_1.1.0_1772678529259_0.66270050667342","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"popupable","version":"1.2.0","author":{"name":"Ewan Howell","email":"ewanhowell5195"},"license":"MIT","_id":"popupable@1.2.0","maintainers":[{"name":"ewanhowell5195","email":"ewan@ewanhowell.com"}],"homepage":"https://github.com/ewanhowell5195/popupable#readme","bugs":{"url":"https://github.com/ewanhowell5195/popupable/issues"},"dist":{"shasum":"7998827ecdf70bd132a0b9a290537d1b3d686eb3","tarball":"https://registry.npmjs.org/popupable/-/popupable-1.2.0.tgz","fileCount":4,"integrity":"sha512-1Cp573V2JFpdPyEboTb/8I1ByWsH/6bU12PS98OX8bkeO2n4wTI4LeA860Wz2Mm8JTW5PSBDW/MVLkSZ4Hn3qg==","signatures":[{"sig":"MEYCIQDD2C8L3LhNa43+Wc1PSXMfV0oBMooJDJsIuzQ10QFQuQIhAN1TfIYs25oW5iudqy6K31oaRtg6GaWTLguMPn489YFy","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":39180},"main":"./dist/popupable.min.js","type":"module","style":"./dist/popupable.min.css","exports":{".":"./dist/popupable.min.js","./styles.css":"./dist/popupable.min.css"},"gitHead":"0f684dd7220f43a3ed6aefc5971c1a4fa937b25c","scripts":{"build":"node build.js"},"_npmUser":{"name":"ewanhowell5195","email":"ewan@ewanhowell.com"},"repository":{"url":"git+https://github.com/ewanhowell5195/popupable.git","type":"git"},"_npmVersion":"11.9.0","description":"A lightweight, zero-dependency lightbox library using modern JavaScript and CSS.","directories":{},"_nodeVersion":"22.19.0","_hasShrinkwrap":false,"devDependencies":{"terser":"^5.43.1","clean-css":"^5.3.3"},"_npmOperationalInternal":{"tmp":"tmp/popupable_1.2.0_1772707505487_0.7802575694851626","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"popupable","version":"1.3.0","author":{"name":"Ewan Howell","email":"ewanhowell5195"},"license":"MIT","_id":"popupable@1.3.0","maintainers":[{"name":"ewanhowell5195","email":"ewan@ewanhowell.com"}],"homepage":"https://github.com/ewanhowell5195/popupable#readme","bugs":{"url":"https://github.com/ewanhowell5195/popupable/issues"},"dist":{"shasum":"ef1752d36ed7cfaee7fb5fca13e8f0a438ca7fdb","tarball":"https://registry.npmjs.org/popupable/-/popupable-1.3.0.tgz","fileCount":4,"integrity":"sha512-d9fsKdYtF1gVCt768Gj9vSTR44rkyHcCgOXsrL8iQLDoAPu5KgsmkwBu42C60KMZxA+ILZKq/VdAd8UjTTWQlQ==","signatures":[{"sig":"MEQCIG9gjqS/6UBHlA1KKS3h/bTy0CGlJ+cnxJVUe6d68Jn1AiBL1gKC/WdX9LEcHJysgJR0fucroSb40qbr+YVeI3FzjQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":39175},"main":"./dist/popupable.min.js","type":"module","style":"./dist/popupable.min.css","exports":{".":"./dist/popupable.min.js","./styles.css":"./dist/popupable.min.css"},"gitHead":"7dc31305cd34e239a857dcacf18ee99551d382ba","scripts":{"build":"node build.js"},"_npmUser":{"name":"ewanhowell5195","email":"ewan@ewanhowell.com"},"repository":{"url":"git+https://github.com/ewanhowell5195/popupable.git","type":"git"},"_npmVersion":"11.9.0","description":"A lightweight, zero-dependency lightbox library using modern JavaScript and CSS.","directories":{},"_nodeVersion":"22.19.0","_hasShrinkwrap":false,"devDependencies":{"terser":"^5.43.1","clean-css":"^5.3.3"},"_npmOperationalInternal":{"tmp":"tmp/popupable_1.3.0_1772723057416_0.02702427929320672","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"popupable","version":"1.4.0","author":{"name":"Ewan Howell","email":"ewanhowell5195"},"license":"MIT","_id":"popupable@1.4.0","maintainers":[{"name":"ewanhowell5195","email":"ewan@ewanhowell.com"}],"homepage":"https://github.com/ewanhowell5195/popupable#readme","bugs":{"url":"https://github.com/ewanhowell5195/popupable/issues"},"dist":{"shasum":"821d4a918f21b59429ecbd61cf672024e66d5fb9","tarball":"https://registry.npmjs.org/popupable/-/popupable-1.4.0.tgz","fileCount":4,"integrity":"sha512-8RxAsg13WNR5hfUPP9uIzFwm2keNepUr7Sr5Js6MDqvz3TzTr0Q4xZDRsIi0glQsvtw9hNyu6PhPmwe0umM4HA==","signatures":[{"sig":"MEUCIFY/cySlUPhF2MD3mtjMPmb9gdtCRk+GJgkGPppWJzDZAiEArQHWyCJlIbjE0vNWFBW1Q3/uN9p35dyLumABspB7Gyw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":44812},"main":"./dist/popupable.min.js","type":"module","style":"./dist/popupable.min.css","exports":{".":"./dist/popupable.min.js","./styles.css":"./dist/popupable.min.css"},"gitHead":"743135b28bdc006b668e15e559c8c7a942cda7e4","scripts":{"build":"node build.js"},"_npmUser":{"name":"ewanhowell5195","email":"ewan@ewanhowell.com"},"repository":{"url":"git+https://github.com/ewanhowell5195/popupable.git","type":"git"},"_npmVersion":"11.9.0","description":"A lightweight, zero-dependency lightbox library using modern JavaScript and CSS.","directories":{},"_nodeVersion":"22.19.0","_hasShrinkwrap":false,"devDependencies":{"terser":"^5.43.1","clean-css":"^5.3.3"},"_npmOperationalInternal":{"tmp":"tmp/popupable_1.4.0_1773054315034_0.22610564034929315","host":"s3://npm-registry-packages-npm-production"}},"1.4.1":{"name":"popupable","version":"1.4.1","author":{"name":"Ewan Howell","email":"ewanhowell5195"},"license":"MIT","_id":"popupable@1.4.1","maintainers":[{"name":"ewanhowell5195","email":"ewan@ewanhowell.com"}],"homepage":"https://github.com/ewanhowell5195/popupable#readme","bugs":{"url":"https://github.com/ewanhowell5195/popupable/issues"},"dist":{"shasum":"155cc6e905dae6ddb4c15476bb08795b9dc98df5","tarball":"https://registry.npmjs.org/popupable/-/popupable-1.4.1.tgz","fileCount":4,"integrity":"sha512-Adq86JIz/SplKUoCZBTFHCzrzQMxWSIY84Yzc8RChAPl7EE/NxqTZhS3rGLlezl0r37FeUL/Vzu98H3AqYkIGw==","signatures":[{"sig":"MEYCIQCulBSPcBruSBw1u+jeBPOp0/vmML5IEzcVOYdwlikN6QIhAKwOVxqOzHnOhnVVMAtG5h+X+8HogU3Ao0wO/m3l2VMJ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":44812},"main":"./dist/popupable.min.js","type":"module","style":"./dist/popupable.min.css","exports":{".":"./dist/popupable.min.js","./styles.css":"./dist/popupable.min.css"},"gitHead":"fb23617875711333a861b7ab5973e186b8622cbe","scripts":{"build":"node build.js"},"_npmUser":{"name":"ewanhowell5195","email":"ewan@ewanhowell.com"},"repository":{"url":"git+https://github.com/ewanhowell5195/popupable.git","type":"git"},"_npmVersion":"11.9.0","description":"A lightweight, zero-dependency lightbox library using modern JavaScript and CSS.","directories":{},"_nodeVersion":"22.19.0","_hasShrinkwrap":false,"devDependencies":{"terser":"^5.43.1","clean-css":"^5.3.3"},"_npmOperationalInternal":{"tmp":"tmp/popupable_1.4.1_1773066389654_0.3381852833288832","host":"s3://npm-registry-packages-npm-production"}},"1.5.0":{"name":"popupable","version":"1.5.0","author":{"name":"Ewan Howell","email":"ewanhowell5195"},"license":"MIT","_id":"popupable@1.5.0","maintainers":[{"name":"ewanhowell5195","email":"ewan@ewanhowell.com"}],"homepage":"https://github.com/ewanhowell5195/popupable#readme","bugs":{"url":"https://github.com/ewanhowell5195/popupable/issues"},"dist":{"shasum":"f833d8ae236ec48b7ac05e717a265e121e19d272","tarball":"https://registry.npmjs.org/popupable/-/popupable-1.5.0.tgz","fileCount":4,"integrity":"sha512-05rskfAsm1hkJkl1HU26d8V5JUtnAYZ8LPajj7/AGTJUB/495hbNWs/4G8ZEuwh/uVwbMilw+yWoQ9tJ5yoGWg==","signatures":[{"sig":"MEQCIGGDpMXJ/F+4Amb29SmU9DAXr55eiA21egnp/su44ABhAiB0rx/dHEaYiVkiA9aQXvDFMLEwMQTcKABvbFcF5XuWxw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":44974},"main":"./dist/popupable.min.js","type":"module","style":"./dist/popupable.min.css","exports":{".":"./dist/popupable.min.js","./styles.css":"./dist/popupable.min.css"},"gitHead":"ec0e07de1c5708230f435729a07f99d3b9a63340","scripts":{"build":"node build.js"},"_npmUser":{"name":"ewanhowell5195","email":"ewan@ewanhowell.com"},"repository":{"url":"git+https://github.com/ewanhowell5195/popupable.git","type":"git"},"_npmVersion":"11.9.0","description":"A lightweight, zero-dependency lightbox library using modern JavaScript and CSS.","directories":{},"_nodeVersion":"22.19.0","_hasShrinkwrap":false,"devDependencies":{"terser":"^5.43.1","clean-css":"^5.3.3"},"_npmOperationalInternal":{"tmp":"tmp/popupable_1.5.0_1773067496626_0.10306195606987778","host":"s3://npm-registry-packages-npm-production"}},"1.5.1":{"name":"popupable","version":"1.5.1","author":{"name":"Ewan Howell","email":"ewanhowell5195"},"license":"MIT","_id":"popupable@1.5.1","maintainers":[{"name":"ewanhowell5195","email":"ewan@ewanhowell.com"}],"homepage":"https://github.com/ewanhowell5195/popupable#readme","bugs":{"url":"https://github.com/ewanhowell5195/popupable/issues"},"dist":{"shasum":"ee29bdaae5ed20c5ac914e8d98423f4dc85912e3","tarball":"https://registry.npmjs.org/popupable/-/popupable-1.5.1.tgz","fileCount":4,"integrity":"sha512-AXYi2YOCPKFmeHO1LfmTu60KVwhGe54xIRIJp/mkO1qGWv+tCfvydsRJ19dW1izEZDHJukmpJVyXj6X5YcnE+Q==","signatures":[{"sig":"MEUCIQC3DFGj/h2z6+7rFHakU5AvulHBW7c/B/PhjA8WrPNI2QIgR6hmV8/2A+QZxIXBKKmk54wXsY1L17z9CwWjabQsKDg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":44974},"main":"./dist/popupable.min.js","type":"module","style":"./dist/popupable.min.css","exports":{".":"./dist/popupable.min.js","./styles.css":"./dist/popupable.min.css"},"gitHead":"87b55c216171b79a26bab3eb2bc2780a37cb3a7c","scripts":{"build":"node build.js"},"_npmUser":{"name":"ewanhowell5195","email":"ewan@ewanhowell.com"},"repository":{"url":"git+https://github.com/ewanhowell5195/popupable.git","type":"git"},"_npmVersion":"11.9.0","description":"A lightweight, zero-dependency lightbox library using modern JavaScript and CSS.","directories":{},"_nodeVersion":"22.19.0","_hasShrinkwrap":false,"devDependencies":{"terser":"^5.43.1","clean-css":"^5.3.3"},"_npmOperationalInternal":{"tmp":"tmp/popupable_1.5.1_1773067783872_0.7265528015590406","host":"s3://npm-registry-packages-npm-production"}},"1.5.2":{"name":"popupable","version":"1.5.2","author":{"name":"Ewan Howell","email":"ewanhowell5195"},"license":"MIT","_id":"popupable@1.5.2","maintainers":[{"name":"ewanhowell5195","email":"ewan@ewanhowell.com"}],"homepage":"https://github.com/ewanhowell5195/popupable#readme","bugs":{"url":"https://github.com/ewanhowell5195/popupable/issues"},"dist":{"shasum":"bb3bdd2fcc5e34c998a31578535b1563fe4042cb","tarball":"https://registry.npmjs.org/popupable/-/popupable-1.5.2.tgz","fileCount":4,"integrity":"sha512-tvbhcp/FA12xpx/K01+sinLHLKxXTuJhLA3DCOI3bvNZlKBOO3CXhWa0oyD66P4IMW4iY7c7wFZ7cJXrY0MiLg==","signatures":[{"sig":"MEYCIQCsJRj9jv0pzLX+NlWTUxNeGE70h8bevzjlFMNxo4MLaQIhAKjOt1qkFz2tXiYuN0RrOjZxNSI/R+KKrXZVYMpZMiBX","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":45249},"main":"./dist/popupable.min.js","type":"module","style":"./dist/popupable.min.css","exports":{".":"./dist/popupable.min.js","./styles.css":"./dist/popupable.min.css"},"gitHead":"bb6778fc54700115d4eec0124fc1d47cbcd96b73","scripts":{"build":"node build.js"},"_npmUser":{"name":"ewanhowell5195","email":"ewan@ewanhowell.com"},"repository":{"url":"git+https://github.com/ewanhowell5195/popupable.git","type":"git"},"_npmVersion":"11.9.0","description":"A lightweight, zero-dependency lightbox library using modern JavaScript and CSS.","directories":{},"_nodeVersion":"22.19.0","_hasShrinkwrap":false,"devDependencies":{"terser":"^5.43.1","clean-css":"^5.3.3"},"_npmOperationalInternal":{"tmp":"tmp/popupable_1.5.2_1773096528412_0.9147024288650019","host":"s3://npm-registry-packages-npm-production"}},"1.6.0":{"name":"popupable","version":"1.6.0","author":{"name":"Ewan Howell","email":"ewanhowell5195"},"license":"MIT","_id":"popupable@1.6.0","maintainers":[{"name":"ewanhowell5195","email":"ewan@ewanhowell.com"}],"homepage":"https://github.com/ewanhowell5195/popupable#readme","bugs":{"url":"https://github.com/ewanhowell5195/popupable/issues"},"dist":{"shasum":"7e14aed4b56d5868305159806691babeec465ab3","tarball":"https://registry.npmjs.org/popupable/-/popupable-1.6.0.tgz","fileCount":4,"integrity":"sha512-FTjvUjxe90CHcXaRqlqDnWmxLXbgpgQ7PyRc7QyQLl20McbZNzoLcifUQU6Pd8d0ISD/YikX8cAApcATxHkP4Q==","signatures":[{"sig":"MEUCIQCD4yoWvU5rbP0WpiN21JRWQ5eQXjXNU6Ke6UDkfgsYbAIgQp3GJSZ8yEPHbQNgMNfpgJbaNU2OD8lYwAZokuz2Ipo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":46952},"main":"./dist/popupable.min.js","type":"module","style":"./dist/popupable.min.css","exports":{".":"./dist/popupable.min.js","./styles.css":"./dist/popupable.min.css"},"gitHead":"6bb9480f94a7d176f65a2c0e83a3836e1fb0b4f7","scripts":{"build":"node build.js"},"_npmUser":{"name":"ewanhowell5195","email":"ewan@ewanhowell.com"},"repository":{"url":"git+https://github.com/ewanhowell5195/popupable.git","type":"git"},"_npmVersion":"11.9.0","description":"A lightweight, zero-dependency lightbox library using modern JavaScript and CSS.","directories":{},"_nodeVersion":"22.19.0","_hasShrinkwrap":false,"devDependencies":{"terser":"^5.43.1","clean-css":"^5.3.3"},"_npmOperationalInternal":{"tmp":"tmp/popupable_1.6.0_1773175827851_0.4477508067555682","host":"s3://npm-registry-packages-npm-production"}},"1.6.1":{"name":"popupable","version":"1.6.1","author":{"name":"Ewan Howell","email":"ewanhowell5195"},"license":"MIT","_id":"popupable@1.6.1","maintainers":[{"name":"ewanhowell5195","email":"ewan@ewanhowell.com"}],"homepage":"https://github.com/ewanhowell5195/popupable#readme","bugs":{"url":"https://github.com/ewanhowell5195/popupable/issues"},"dist":{"shasum":"91e1f0331046d6faa6880e8e309a924ef00f2e9d","tarball":"https://registry.npmjs.org/popupable/-/popupable-1.6.1.tgz","fileCount":4,"integrity":"sha512-26VCx2zhl4PtvdeaXu8gsRuQLGSbTxCOEBQPJnc7Js3A5BrPoujI9RdkQrSeoFqVuipQcM9/e/FfKV+m+OZolQ==","signatures":[{"sig":"MEUCIQC6ZZSqoL46RS60DZFWGfU9YM5VoqgbKVn1GfjW8FUZQwIgD4U7rb4JQ5t43ATKJbTQEX4jZvJ4U8WHF5E8pTqO9ik=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":46990},"main":"./dist/popupable.min.js","type":"module","style":"./dist/popupable.min.css","exports":{".":"./dist/popupable.min.js","./styles.css":"./dist/popupable.min.css"},"gitHead":"111885b304c120f19818172e82b9e938095968e7","scripts":{"build":"node build.js"},"_npmUser":{"name":"ewanhowell5195","email":"ewan@ewanhowell.com"},"repository":{"url":"git+https://github.com/ewanhowell5195/popupable.git","type":"git"},"_npmVersion":"11.9.0","description":"A lightweight, zero-dependency lightbox library using modern JavaScript and CSS.","directories":{},"_nodeVersion":"22.19.0","_hasShrinkwrap":false,"devDependencies":{"terser":"^5.43.1","clean-css":"^5.3.3"},"_npmOperationalInternal":{"tmp":"tmp/popupable_1.6.1_1773176910959_0.5141365509946585","host":"s3://npm-registry-packages-npm-production"}},"1.6.3":{"name":"popupable","version":"1.6.3","keywords":["lightbox","popup","modal","image-viewer","gallery","zoom","pinch-zoom","javascript","zero-dependency"],"author":{"name":"Ewan Howell","email":"ewanhowell5195"},"license":"MIT","_id":"popupable@1.6.3","maintainers":[{"name":"ewanhowell5195","email":"ewan@ewanhowell.com"}],"homepage":"https://popupable.ewanhowell.com/","bugs":{"url":"https://github.com/ewanhowell5195/popupable/issues"},"dist":{"shasum":"cf535ed2347f8934eb604db49699d7aea5ff0054","tarball":"https://registry.npmjs.org/popupable/-/popupable-1.6.3.tgz","fileCount":4,"integrity":"sha512-J4nqnI5OTzjz/bEjS9co2/F0fgoMidCvld4e850JJub/dqd//Chz3T8a5iPkYZ7mfxJQBdZH8tKvGqsIAHBlcQ==","signatures":[{"sig":"MEYCIQDR8Qi/Kg7Vp50hVVIjxbTdeEntQ1hN0bvsSTtxbg+bgAIhAI9mpIUMXA3xo86itHYPcaO6IdBAFXAWrrEiZEhUIgSJ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":47388},"main":"./dist/popupable.min.js","type":"module","style":"./dist/popupable.min.css","exports":{".":"./dist/popupable.min.js","./styles.css":"./dist/popupable.min.css"},"gitHead":"d29c8741070b6949d108e33c5f397172952c7e44","scripts":{"build":"node build.js"},"_npmUser":{"name":"ewanhowell5195","email":"ewan@ewanhowell.com"},"repository":{"url":"git+https://github.com/ewanhowell5195/popupable.git","type":"git"},"_npmVersion":"11.9.0","description":"A lightweight, zero-dependency lightbox library using modern JavaScript and CSS.","directories":{},"_nodeVersion":"22.19.0","_hasShrinkwrap":false,"devDependencies":{"terser":"^5.43.1","clean-css":"^5.3.3"},"_npmOperationalInternal":{"tmp":"tmp/popupable_1.6.3_1773278261953_0.5127194848627634","host":"s3://npm-registry-packages-npm-production"}},"1.7.0":{"name":"popupable","version":"1.7.0","keywords":["lightbox","popup","modal","image-viewer","gallery","zoom","pinch-zoom","javascript","zero-dependency"],"author":{"name":"Ewan Howell","email":"ewanhowell5195"},"license":"MIT","_id":"popupable@1.7.0","maintainers":[{"name":"ewanhowell5195","email":"ewan@ewanhowell.com"}],"homepage":"https://popupable.ewanhowell.com/","bugs":{"url":"https://github.com/ewanhowell5195/popupable/issues"},"dist":{"shasum":"72e939797b00a01138c484ef0c7e5ca1604ffba2","tarball":"https://registry.npmjs.org/popupable/-/popupable-1.7.0.tgz","fileCount":5,"integrity":"sha512-8eq98NAXsXUNAm57piu59oI2A6407KPGxJxrctP4wEquTWcllfHVEcFLAw0N6GZ+VKZenQhMM0kaEDk2UxvqlQ==","signatures":[{"sig":"MEYCIQDT1K0FejgxxJ+XpsNxvW/HLCK5C5c2r315ziKKSJD3BwIhAILIUQ0QdQ13JTDWSiAaafr7k27hXiKNVZjWxXix2CUk","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":60822},"main":"./dist/popupable.min.js","type":"module","style":"./dist/popupable.min.css","exports":{".":"./dist/popupable.min.js","./styles.css":"./dist/popupable.min.css"},"gitHead":"a09f2a2c91714b8262372f8ed5c5d86e362a6a5a","scripts":{"build":"node build.js"},"_npmUser":{"name":"ewanhowell5195","email":"ewan@ewanhowell.com"},"repository":{"url":"git+https://github.com/ewanhowell5195/popupable.git","type":"git"},"_npmVersion":"10.9.7","description":"A lightweight, zero-dependency lightbox library using modern JavaScript and CSS.","directories":{},"_nodeVersion":"22.22.2","_hasShrinkwrap":false,"devDependencies":{"terser":"^5.43.1","clean-css":"^5.3.3"},"_npmOperationalInternal":{"tmp":"tmp/popupable_1.7.0_1778706452958_0.2536995286549777","host":"s3://npm-registry-packages-npm-production"}},"1.7.1":{"name":"popupable","version":"1.7.1","keywords":["lightbox","popup","modal","image-viewer","gallery","zoom","pinch-zoom","javascript","zero-dependency"],"author":{"name":"Ewan Howell","email":"ewanhowell5195"},"license":"MIT","_id":"popupable@1.7.1","maintainers":[{"name":"ewanhowell5195","email":"ewan@ewanhowell.com"}],"homepage":"https://popupable.ewanhowell.com/","bugs":{"url":"https://github.com/ewanhowell5195/popupable/issues"},"dist":{"shasum":"45b2d023003e8eb1f330c6c11d99d7edb42fd569","tarball":"https://registry.npmjs.org/popupable/-/popupable-1.7.1.tgz","fileCount":5,"integrity":"sha512-EExmXLogYQdhCQ2zSkIHm5zu/dt7bTmHTJG3TGcsyYci7YQ0e6tuvLC+yhcz4hmE4tS4+KHNd4qXLbW/P9ffSQ==","signatures":[{"sig":"MEUCIQDwC3+vdGw4SFeIF8AJy0A3rw+3nY9OyKRs3iOfLVPNsgIgVCPB+aSrtZlKQT9HLnF1CCqUoSmJLVkvcjwyrZbG1fg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":60884},"main":"./dist/popupable.min.js","type":"module","style":"./dist/popupable.min.css","exports":{".":"./dist/popupable.min.js","./styles.css":"./dist/popupable.min.css"},"gitHead":"1adcc8e962647ce377ef887b1793f1cb531935c7","scripts":{"build":"node build.js"},"_npmUser":{"name":"ewanhowell5195","email":"ewan@ewanhowell.com"},"repository":{"url":"git+https://github.com/ewanhowell5195/popupable.git","type":"git"},"_npmVersion":"10.9.7","description":"A lightweight, zero-dependency lightbox library using modern JavaScript and CSS.","directories":{},"_nodeVersion":"22.22.2","_hasShrinkwrap":false,"devDependencies":{"terser":"^5.43.1","clean-css":"^5.3.3"},"_npmOperationalInternal":{"tmp":"tmp/popupable_1.7.1_1778709626480_0.6077699822535998","host":"s3://npm-registry-packages-npm-production"}},"1.7.2":{"name":"popupable","version":"1.7.2","keywords":["lightbox","popup","modal","image-viewer","gallery","zoom","pinch-zoom","javascript","zero-dependency"],"author":{"name":"Ewan Howell","email":"ewanhowell5195"},"license":"MIT","_id":"popupable@1.7.2","maintainers":[{"name":"ewanhowell5195","email":"ewan@ewanhowell.com"}],"homepage":"https://popupable.ewanhowell.com/","bugs":{"url":"https://github.com/ewanhowell5195/popupable/issues"},"dist":{"shasum":"5396cc701c22fa7ed330dd8b58c887a27d751690","tarball":"https://registry.npmjs.org/popupable/-/popupable-1.7.2.tgz","fileCount":5,"integrity":"sha512-TaF5jh4+UoMbL3sZ1nfY36ElFAXddRdsAru/2qBQO35tdF/OnUV3cBhFeu+rtAfgvCXZJnQ2kBzeO3aPSutuBg==","signatures":[{"sig":"MEQCIGgxJuIFuBvKH+aRJBgoK6gdY4AqxKH18tkFZUeNi+9uAiAxZtLuolpHjywANjtybW2aBGO466LMLiZcF/GAGHsG6Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":62108},"main":"./dist/popupable.min.js","type":"module","style":"./dist/popupable.min.css","exports":{".":"./dist/popupable.min.js","./styles.css":"./dist/popupable.min.css"},"gitHead":"da6f1c47c1b6491e50ecc631e16e1279b1698240","scripts":{"build":"node build.js"},"_npmUser":{"name":"ewanhowell5195","email":"ewan@ewanhowell.com"},"repository":{"url":"git+https://github.com/ewanhowell5195/popupable.git","type":"git"},"_npmVersion":"10.9.7","description":"A lightweight, zero-dependency lightbox library using modern JavaScript and CSS.","directories":{},"_nodeVersion":"22.22.2","_hasShrinkwrap":false,"devDependencies":{"terser":"^5.43.1","clean-css":"^5.3.3"},"_npmOperationalInternal":{"tmp":"tmp/popupable_1.7.2_1778711918143_0.6983629920088756","host":"s3://npm-registry-packages-npm-production"}},"1.8.0":{"name":"popupable","version":"1.8.0","keywords":["lightbox","popup","modal","image-viewer","gallery","zoom","pinch-zoom","javascript","zero-dependency"],"author":{"name":"Ewan Howell","email":"ewanhowell5195"},"license":"MIT","_id":"popupable@1.8.0","maintainers":[{"name":"ewanhowell5195","email":"ewan@ewanhowell.com"}],"homepage":"https://popupable.ewanhowell.com/","bugs":{"url":"https://github.com/ewanhowell5195/popupable/issues"},"dist":{"shasum":"3bafd4470053247bb7401fd1c313383a73767273","tarball":"https://registry.npmjs.org/popupable/-/popupable-1.8.0.tgz","fileCount":5,"integrity":"sha512-QNtwzbZFCquA9mqhfiJBkgc+ZgO7r4WFdK9+jEy7H9fPqyplr1dF3O12E9yNK8v955uq56/67k2+Op89b+Mh0A==","signatures":[{"sig":"MEYCIQD6UV1W+yR8206dm18V/2e007ASpuI70x7CGAdl/WdC6gIhAJU17EniBFE38sDIrCzU9xbRZ2PV6OBm7eaXMqJ8glzn","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":62964},"main":"./dist/popupable.min.js","type":"module","style":"./dist/popupable.min.css","exports":{".":"./dist/popupable.min.js","./styles.css":"./dist/popupable.min.css"},"gitHead":"8430d0cb3cc39034e1a14a8dc4d96a90412a0965","scripts":{"build":"node build.js"},"_npmUser":{"name":"ewanhowell5195","email":"ewan@ewanhowell.com"},"repository":{"url":"git+https://github.com/ewanhowell5195/popupable.git","type":"git"},"_npmVersion":"10.9.7","description":"A lightweight, zero-dependency lightbox library using modern JavaScript and CSS.","directories":{},"_nodeVersion":"22.22.2","_hasShrinkwrap":false,"devDependencies":{"terser":"^5.43.1","clean-css":"^5.3.3"},"_npmOperationalInternal":{"tmp":"tmp/popupable_1.8.0_1778718126554_0.4208381157832828","host":"s3://npm-registry-packages-npm-production"}},"1.8.1":{"name":"popupable","version":"1.8.1","keywords":["lightbox","popup","modal","image-viewer","gallery","zoom","pinch-zoom","javascript","zero-dependency"],"author":{"name":"Ewan Howell","email":"ewanhowell5195"},"license":"MIT","_id":"popupable@1.8.1","maintainers":[{"name":"ewanhowell5195","email":"ewan@ewanhowell.com"}],"homepage":"https://popupable.ewanhowell.com/","bugs":{"url":"https://github.com/ewanhowell5195/popupable/issues"},"dist":{"shasum":"d3bb04db330484cd40d9cae0a437e5d271e95b1e","tarball":"https://registry.npmjs.org/popupable/-/popupable-1.8.1.tgz","fileCount":5,"integrity":"sha512-I6KPuzrKZds+anKaUw8CKc/Ok4l41M/eZtlu1gknohqW9aFyk22Pii1ZYwJ+h4XFG12O74XJ7CFj/2AU2z3JZg==","signatures":[{"sig":"MEUCIQDvXAhvYMaJbQASBAhSKoSeledv4k30Ymix+bKaL8ZIzgIgN0LeFam9z7BHu5H07tQuQv8UoHugpJMMUTNoiUIKsYg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":63311},"main":"./dist/popupable.min.js","type":"module","style":"./dist/popupable.min.css","exports":{".":"./dist/popupable.min.js","./styles.css":"./dist/popupable.min.css"},"gitHead":"f78f6b96681e05909ab5951378a5ef5337e7cf4d","scripts":{"build":"node build.js"},"_npmUser":{"name":"ewanhowell5195","email":"ewan@ewanhowell.com"},"repository":{"url":"git+https://github.com/ewanhowell5195/popupable.git","type":"git"},"_npmVersion":"10.9.7","description":"A lightweight, zero-dependency lightbox library using modern JavaScript and CSS.","directories":{},"_nodeVersion":"22.22.2","_hasShrinkwrap":false,"devDependencies":{"terser":"^5.43.1","clean-css":"^5.3.3"},"_npmOperationalInternal":{"tmp":"tmp/popupable_1.8.1_1778719920471_0.016780745834584776","host":"s3://npm-registry-packages-npm-production"}},"1.8.2":{"name":"popupable","version":"1.8.2","keywords":["lightbox","popup","modal","image-viewer","gallery","zoom","pinch-zoom","javascript","zero-dependency"],"author":{"name":"Ewan Howell","email":"ewanhowell5195"},"license":"MIT","_id":"popupable@1.8.2","maintainers":[{"name":"ewanhowell5195","email":"ewan@ewanhowell.com"}],"homepage":"https://popupable.ewanhowell.com/","bugs":{"url":"https://github.com/ewanhowell5195/popupable/issues"},"dist":{"shasum":"5cfed3a87f5f57a188e995c0f905cbceea71ab1d","tarball":"https://registry.npmjs.org/popupable/-/popupable-1.8.2.tgz","fileCount":5,"integrity":"sha512-SdeZ/vefcQngc0oyNqlv72F0hprCPK9RB764DgUQRqPR2f23tSK7/YBIBYXUqyHxYM+hvVph8chDcoNtXBBGTQ==","signatures":[{"sig":"MEUCIH5+lTRn55cCUymOAMH/8899h69S3fi3C3oPXfR05mFOAiEA4wGm6HZs8dgzxUteFL1R+vpKKZxJfdyF0ZZEKjOVaXE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":63862},"main":"./dist/popupable.min.js","type":"module","style":"./dist/popupable.min.css","exports":{".":"./dist/popupable.min.js","./styles.css":"./dist/popupable.min.css"},"gitHead":"3e648bf9022bbda1286e93c09c762495a4cb2b93","scripts":{"build":"node build.js"},"_npmUser":{"name":"ewanhowell5195","email":"ewan@ewanhowell.com"},"repository":{"url":"git+https://github.com/ewanhowell5195/popupable.git","type":"git"},"_npmVersion":"10.9.7","description":"A lightweight, zero-dependency lightbox library using modern JavaScript and CSS.","directories":{},"_nodeVersion":"22.22.2","_hasShrinkwrap":false,"devDependencies":{"terser":"^5.43.1","clean-css":"^5.3.3"},"_npmOperationalInternal":{"tmp":"tmp/popupable_1.8.2_1778749213103_0.19737424825892758","host":"s3://npm-registry-packages-npm-production"}},"1.9.0":{"name":"popupable","version":"1.9.0","keywords":["lightbox","popup","modal","image-viewer","gallery","zoom","pinch-zoom","javascript","zero-dependency"],"author":{"name":"Ewan Howell","email":"ewanhowell5195"},"license":"MIT","_id":"popupable@1.9.0","maintainers":[{"name":"ewanhowell5195","email":"ewan@ewanhowell.com"}],"homepage":"https://popupable.ewanhowell.com/","bugs":{"url":"https://github.com/ewanhowell5195/popupable/issues"},"dist":{"shasum":"30ce530ec8488d6438d69c037221381280b3334b","tarball":"https://registry.npmjs.org/popupable/-/popupable-1.9.0.tgz","fileCount":5,"integrity":"sha512-mU6TYHLKOi3WBDrrzorWhgL+2dylMn9yPAUnpTI40CeK+V9WyPeKa+40Ban2+u35IrpIBad5e4zpjqUiZ6p1bQ==","signatures":[{"sig":"MEYCIQDJ6i6tmrUmjp6wfFKxNw7FyiVzoTXB7LshY6+wzyp/ogIhAJvkhai0DZtBihkicfk7EG5m9mSRUJV0oMZJn2VCkQW7","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":67276},"main":"./dist/popupable.min.js","type":"module","style":"./dist/popupable.min.css","exports":{".":"./dist/popupable.min.js","./styles.css":"./dist/popupable.min.css"},"gitHead":"e3faf97536eda47deaec64ef405167c9fd6c23b3","scripts":{"build":"node build.js"},"_npmUser":{"name":"ewanhowell5195","email":"ewan@ewanhowell.com"},"repository":{"url":"git+https://github.com/ewanhowell5195/popupable.git","type":"git"},"_npmVersion":"10.9.7","description":"A lightweight, zero-dependency lightbox library using modern JavaScript and CSS.","directories":{},"_nodeVersion":"22.22.2","_hasShrinkwrap":false,"devDependencies":{"terser":"^5.43.1","clean-css":"^5.3.3"},"_npmOperationalInternal":{"tmp":"tmp/popupable_1.9.0_1779036164238_0.7013819975662534","host":"s3://npm-registry-packages-npm-production"}},"1.9.1":{"name":"popupable","version":"1.9.1","keywords":["lightbox","popup","modal","image-viewer","gallery","zoom","pinch-zoom","javascript","zero-dependency"],"author":{"name":"Ewan Howell","email":"ewanhowell5195"},"license":"MIT","_id":"popupable@1.9.1","maintainers":[{"name":"ewanhowell5195","email":"ewan@ewanhowell.com"}],"homepage":"https://popupable.ewanhowell.com/","bugs":{"url":"https://github.com/ewanhowell5195/popupable/issues"},"dist":{"shasum":"4547b59464ef8c3fc54c6ffbba55edfa240b41c2","tarball":"https://registry.npmjs.org/popupable/-/popupable-1.9.1.tgz","fileCount":5,"integrity":"sha512-nmqo56cJTizu6Un4q/g33tZOPnH/Z6PsHn+V7G102FhdAoxLaFkA+X8PKU4rpYkk6XdgZKS5TwnAANJtbchmHg==","signatures":[{"sig":"MEUCIG4DITVEnj+qf+QjVpJ2i3Y6ks7j3RGaHb4Vg2ZP/JXuAiEAjbJRbDfQc//F86tEOF73fqfi7FrjrmKN6ogA7ZleSPQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":67281},"main":"./dist/popupable.min.js","type":"module","style":"./dist/popupable.min.css","exports":{".":"./dist/popupable.min.js","./styles.css":"./dist/popupable.min.css"},"gitHead":"d01478c3c1019dcc18becfae7db345b2aab3368c","scripts":{"build":"node build.js"},"_npmUser":{"name":"ewanhowell5195","email":"ewan@ewanhowell.com"},"repository":{"url":"git+https://github.com/ewanhowell5195/popupable.git","type":"git"},"_npmVersion":"10.9.7","description":"A lightweight, zero-dependency lightbox library using modern JavaScript and CSS.","directories":{},"_nodeVersion":"22.22.2","_hasShrinkwrap":false,"devDependencies":{"terser":"^5.43.1","clean-css":"^5.3.3"},"_npmOperationalInternal":{"tmp":"tmp/popupable_1.9.1_1780348286046_0.051660517044394894","host":"s3://npm-registry-packages-npm-production"}},"1.9.2":{"name":"popupable","version":"1.9.2","keywords":["lightbox","popup","modal","image-viewer","gallery","zoom","pinch-zoom","javascript","zero-dependency"],"author":{"name":"Ewan Howell","email":"ewanhowell5195"},"license":"MIT","_id":"popupable@1.9.2","maintainers":[{"name":"ewanhowell5195","email":"ewan@ewanhowell.com"}],"homepage":"https://popupable.ewanhowell.com/","bugs":{"url":"https://github.com/ewanhowell5195/popupable/issues"},"dist":{"shasum":"0d310f39ad9f33d86dc7038bca1d1a4eba38dd83","tarball":"https://registry.npmjs.org/popupable/-/popupable-1.9.2.tgz","fileCount":5,"integrity":"sha512-xoO298vXWDbbMg032paEfMxaFX1g70/1jepHZUhsaz+d80N1pS35Dy2jtcCT9U2ifetbtceCYFlsZnyyxn4Ksg==","signatures":[{"sig":"MEUCIQCnLgl/idcxu5axsZ2use34btQnTiMfqJvJkAYJPwiU6AIgdlBktAbHGQiPlE5GPjLNDOuU2ctD93anyY1fplcXP5I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":67448},"main":"./dist/popupable.min.js","type":"module","style":"./dist/popupable.min.css","exports":{".":"./dist/popupable.min.js","./styles.css":"./dist/popupable.min.css"},"gitHead":"7fcbe339e9ebc784d9d98f8d54ddaa5825b1353c","scripts":{"build":"node build.js"},"_npmUser":{"name":"ewanhowell5195","email":"ewan@ewanhowell.com"},"repository":{"url":"git+https://github.com/ewanhowell5195/popupable.git","type":"git"},"_npmVersion":"10.9.7","description":"A lightweight, zero-dependency lightbox library using modern JavaScript and CSS.","directories":{},"_nodeVersion":"22.22.2","_hasShrinkwrap":false,"devDependencies":{"terser":"^5.43.1","clean-css":"^5.3.3"},"_npmOperationalInternal":{"tmp":"tmp/popupable_1.9.2_1780414320407_0.47615561988295485","host":"s3://npm-registry-packages-npm-production"}},"1.9.3":{"name":"popupable","version":"1.9.3","keywords":["lightbox","popup","modal","image-viewer","gallery","zoom","pinch-zoom","javascript","zero-dependency"],"author":{"name":"Ewan Howell","email":"ewanhowell5195"},"license":"MIT","_id":"popupable@1.9.3","maintainers":[{"name":"ewanhowell5195","email":"ewan@ewanhowell.com"}],"homepage":"https://popupable.ewanhowell.com/","bugs":{"url":"https://github.com/ewanhowell5195/popupable/issues"},"dist":{"shasum":"7e5509adf51447e741fc3f766c84baadbcd69de0","tarball":"https://registry.npmjs.org/popupable/-/popupable-1.9.3.tgz","fileCount":5,"integrity":"sha512-lObimco0hmiJzPkkVNXrJUkbAd4m/UB5a8IiEgThk/Q7VOdLTXOW/aF7ok16qum5DtR+410xGrAxkXUkm9PXrQ==","signatures":[{"sig":"MEYCIQDdK40xdHConDPUXHsJUdDjZB+zYShfhVD8qjVHnDEUUgIhAMS6Gkry8ujKtmIU3yEtaZrm3v5G9nYeSPU36nLd6zI0","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":67674},"main":"./dist/popupable.min.js","type":"module","style":"./dist/popupable.min.css","exports":{".":"./dist/popupable.min.js","./styles.css":"./dist/popupable.min.css"},"gitHead":"d2487d5e04a97950f5b87bb3144d406a5d09a0fe","scripts":{"build":"node build.js"},"_npmUser":{"name":"ewanhowell5195","email":"ewan@ewanhowell.com"},"repository":{"url":"git+https://github.com/ewanhowell5195/popupable.git","type":"git"},"_npmVersion":"10.9.7","description":"A lightweight, zero-dependency lightbox library using modern JavaScript and CSS.","directories":{},"_nodeVersion":"22.22.2","_hasShrinkwrap":false,"devDependencies":{"terser":"^5.43.1","clean-css":"^5.3.3"},"_npmOperationalInternal":{"tmp":"tmp/popupable_1.9.3_1780486566807_0.08489124253644409","host":"s3://npm-registry-packages-npm-production"}},"1.10.0":{"name":"popupable","version":"1.10.0","keywords":["lightbox","popup","modal","image-viewer","gallery","zoom","pinch-zoom","javascript","zero-dependency"],"author":{"name":"Ewan Howell","email":"ewanhowell5195"},"license":"MIT","_id":"popupable@1.10.0","maintainers":[{"name":"ewanhowell5195","email":"ewan@ewanhowell.com"}],"homepage":"https://popupable.ewanhowell.com/","bugs":{"url":"https://github.com/ewanhowell5195/popupable/issues"},"dist":{"shasum":"87ce85535b11a7bd594dcbebd5ca47e8dc09b44b","tarball":"https://registry.npmjs.org/popupable/-/popupable-1.10.0.tgz","fileCount":5,"integrity":"sha512-3JwIt1QV/d32f0U+y1P9WYCYQe3QlU+ya130PImdB3yMgnUBN1Oq4wIZJQwpp25jyRcF2Y12QVYX52vd1A5Wqg==","signatures":[{"sig":"MEUCICSxtR3VaA57USQcstw+aUGJkHJLW5v8kJtnQD01NinvAiEAy8W4diyH4uo92HuKXmO50JezUWoWsJHh/AivrVqwfXU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":68846},"main":"./dist/popupable.min.js","type":"module","style":"./dist/popupable.min.css","exports":{".":"./dist/popupable.min.js","./styles.css":"./dist/popupable.min.css"},"gitHead":"17324a57dee7c100f020c8839dbb5cbcb6e4e091","scripts":{"build":"node build.js"},"_npmUser":{"name":"ewanhowell5195","email":"ewan@ewanhowell.com"},"repository":{"url":"git+https://github.com/ewanhowell5195/popupable.git","type":"git"},"_npmVersion":"10.9.7","description":"A lightweight, zero-dependency lightbox library using modern JavaScript and CSS.","directories":{},"_nodeVersion":"22.22.2","_hasShrinkwrap":false,"devDependencies":{"terser":"^5.43.1","clean-css":"^5.3.3"},"_npmOperationalInternal":{"tmp":"tmp/popupable_1.10.0_1780625382004_0.949168756216128","host":"s3://npm-registry-packages-npm-production"}},"1.11.0":{"name":"popupable","version":"1.11.0","description":"A lightweight, zero-dependency lightbox library using modern JavaScript and CSS.","author":{"name":"Ewan Howell","email":"ewanhowell5195"},"license":"MIT","type":"module","main":"./dist/popupable.min.js","style":"./dist/popupable.min.css","exports":{".":"./dist/popupable.min.js","./styles.css":"./dist/popupable.min.css"},"repository":{"type":"git","url":"git+https://github.com/ewanhowell5195/popupable.git"},"bugs":{"url":"https://github.com/ewanhowell5195/popupable/issues"},"homepage":"https://popupable.ewanhowell.com/","scripts":{"build":"node build.js"},"devDependencies":{"clean-css":"^5.3.3","terser":"^5.43.1"},"keywords":["lightbox","popup","modal","image-viewer","gallery","zoom","pinch-zoom","javascript","zero-dependency"],"_id":"popupable@1.11.0","gitHead":"51ff3afffc643e82f2e222d56c62e21e69aa2061","_nodeVersion":"22.22.2","_npmVersion":"10.9.7","dist":{"integrity":"sha512-aXDD2CGT14oXTN4G7uKJIj2OdIdFk1QOk8HrIZKbm20/0adOxr8Q7yVc+T+x37ubi9BIjpzDPdR+ZiVLjPVqXQ==","shasum":"ec0639f53c2c4f61c1df83bca104db7a645c0422","tarball":"https://registry.npmjs.org/popupable/-/popupable-1.11.0.tgz","fileCount":5,"unpackedSize":81361,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIFiKjek3yOiq5RCreNDwPQaEvxQzKZIw+a7w3P5KjgiRAiBVbkS4yi+6EhQ+eJa5zweoLjkYxDo8+sur1+0Qyf3ODQ=="}]},"_npmUser":{"name":"ewanhowell5195","email":"ewan@ewanhowell.com"},"directories":{},"maintainers":[{"name":"ewanhowell5195","email":"ewan@ewanhowell.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/popupable_1.11.0_1787190740782_0.8270494030970374"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-02T15:39:01.711Z","modified":"2026-08-20T01:52:21.136Z","1.0.0":"2026-03-02T15:39:01.872Z","1.0.1":"2026-03-02T23:10:29.482Z","1.0.2":"2026-03-04T23:19:10.955Z","1.0.3":"2026-03-04T23:43:49.737Z","1.1.0":"2026-03-05T02:42:09.412Z","1.2.0":"2026-03-05T10:45:05.631Z","1.3.0":"2026-03-05T15:04:17.562Z","1.4.0":"2026-03-09T11:05:15.189Z","1.4.1":"2026-03-09T14:26:29.806Z","1.5.0":"2026-03-09T14:44:56.792Z","1.5.1":"2026-03-09T14:49:44.025Z","1.5.2":"2026-03-09T22:48:48.568Z","1.6.0":"2026-03-10T20:50:27.990Z","1.6.1":"2026-03-10T21:08:31.182Z","1.6.2":"2026-03-11T22:06:58.207Z","1.6.3":"2026-03-12T01:17:42.098Z","1.7.0":"2026-05-13T21:07:33.096Z","1.7.1":"2026-05-13T22:00:26.647Z","1.7.2":"2026-05-13T22:38:38.286Z","1.8.0":"2026-05-14T00:22:06.798Z","1.8.1":"2026-05-14T00:52:00.644Z","1.8.2":"2026-05-14T09:00:13.242Z","1.9.0":"2026-05-17T16:42:44.381Z","1.9.1":"2026-06-01T21:11:26.214Z","1.9.2":"2026-06-02T15:32:00.565Z","1.9.3":"2026-06-03T11:36:06.942Z","1.10.0":"2026-06-05T02:09:42.191Z","1.11.0":"2026-08-20T01:52:20.996Z"},"bugs":{"url":"https://github.com/ewanhowell5195/popupable/issues"},"author":{"name":"Ewan Howell","email":"ewanhowell5195"},"license":"MIT","homepage":"https://popupable.ewanhowell.com/","keywords":["lightbox","popup","modal","image-viewer","gallery","zoom","pinch-zoom","javascript","zero-dependency"],"repository":{"type":"git","url":"git+https://github.com/ewanhowell5195/popupable.git"},"description":"A lightweight, zero-dependency lightbox library using modern JavaScript and CSS.","maintainers":[{"name":"ewanhowell5195","email":"ewan@ewanhowell.com"}],"readme":"# popupable\n\nA lightweight, zero-dependency lightbox library using modern JavaScript and CSS.\nJust add `data-popupable` to any image!\n\n[![npm version](https://badge.fury.io/js/popupable.svg)](https://www.npmjs.com/package/popupable)\n[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/popupable/badge)](https://www.jsdelivr.com/package/npm/popupable)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\n[**Live Demo**](https://popupable.ewanhowell.com/)\n\n## Features\n\n* No dependencies\n* Animates open from the element's original position\n* Multiple built-in animation styles, with support for custom ones\n* Works with mouse, touch, and keyboard\n* Gallery groups with swipe, scroll, keyboard, and button navigation\n* Supports images, videos, and live-mirrored canvases\n* Thumbnail strip and image counter\n* Pinch-to-zoom on touch, with optional click/tap-to-zoom support\n* Checkerboard background for transparent images\n* Attribute inheritance - set options on a parent to apply to all children\n* Customizable via CSS variables\n* Works in Vue, React, Svelte, and more\n\n## Quick Start\n\n### Install via npm\n```bash\nnpm install popupable\n```\n\n```js\nimport \"popupable/styles.css\"\nimport \"popupable\"\n```\n\n### Or use via CDN\nhttps://www.jsdelivr.com/package/npm/popupable\n\n### Add popups to your images\n\n```html\n<img src=\"photo.jpg\" data-popupable>\n<img src=\"thumbnail.jpg\" data-popupable data-popupable-src=\"full-res.jpg\">\n<img src=\"photo.jpg\" data-popupable data-popupable-title=\"Sunset\" data-popupable-description=\"Taken in July 2024\">\n```\n\nClose by clicking again, or pressing Escape, Backspace, or Delete.\n\n## Settings\n\n| Attribute | Description |\n|---|---|\n| `data-popupable` | Required. Marks an image as openable. Optionally set a value to give the popup a CSS `id`. |\n| `data-popupable-src=\"url\"` | A different image to display when the popup is open, e.g. a higher resolution version. |\n| `data-popupable-title=\"text\"` | Title text shown alongside the image. |\n| `data-popupable-description=\"text\"` | Description text shown alongside the image. |\n| `data-popupable-content=\"selector\"` | Element whose markup is shown as the popup content: an id (with or without `#`), a CSS selector, or the keywords `next`/`prev` for the next/previous sibling element. Replaces `data-popupable-title` and `data-popupable-description` when present. |\n| `data-popupable-fixed-content-height` | Sizes the content area to the tallest content in the group so it doesn't resize while navigating. Content is vertically centered within it. |\n| `data-popupable-transparent` | Shows a checkerboard background behind transparent images. |\n| `data-popupable-maintain-aspect` | Uses the element's rendered aspect ratio instead of the image's natural dimensions. |\n| `data-popupable-no-upscale` | Prevents the popup from scaling the image beyond its native resolution. |\n| `data-popupable-zoomable` | Enables click/tap-to-zoom and scroll wheel zoom. |\n| `data-popupable-anim=\"name\"` | Sets the open/close animation style. |\n| `data-popupable-group=\"name\"` | Groups images into a navigable gallery. Can be placed on a container element to group all `data-popupable` children. |\n| `data-popupable-looping` | Makes a group loop: next from the last item goes back to the first, and prev from the first goes to the last. |\n| `data-popupable-counter` | Shows a \"1 / N\" counter when in a group. |\n| `data-popupable-thumbnails` | Shows a thumbnail strip when in a group. |\n| `data-popupable-thumb=\"url\"` | Image to use for this element in the thumbnail strip. Falls back to `data-popupable-src` and then `src`. Useful for serving a small thumbnail image instead of letting the strip render the full popup source, which keeps the strip lightweight even with many large images. |\n| `data-popupable-order=\"...\"` | Controls the order of UI elements. |\n| `data-popupable-type=\"image\\|video\"` | Forces popupable to treat the source as an image or video regardless of its tag name or file extension. |\n| `data-popupable-poster=\"url\"` | Poster image to show before a video has loaded. Also used as the placeholder for video thumbnails. |\n| `data-popupable-attr=\"...\"` | Comma-separated list of properties to set on the `<video>` element. See [Videos](#videos). |\n\n### Inheritance\n\nAll `data-popupable-*` attributes except `data-popupable` itself are **inherited**. If an attribute isn't on the element, popupable walks up the DOM tree to find it on a parent. This lets you set options once on a container instead of repeating them on every child.\n\nSet an attribute to `\"false\"` to explicitly unset an inherited value:\n\n```html\n<div data-popupable-anim=\"pop\" data-popupable-counter data-popupable-thumbnails>\n  <img src=\"photo1.jpg\" data-popupable>\n  <img src=\"photo2.jpg\" data-popupable data-popupable-counter=\"false\">\n</div>\n```\n\n## Advanced Usage\n\n### Non-image elements\n\nAny element can be made popupable. Use `src` or `data-popupable-src` to specify the image to display:\n\n```html\n<div src=\"photo.jpg\" style=\"background-image: url(photo.jpg)\" data-popupable></div>\n<div style=\"background-image: url(photo.jpg)\" data-popupable data-popupable-src=\"photo.jpg\"></div>\n```\n\n### Hi-res source\n\nUse `data-popupable-src` to display a different (e.g. higher resolution) image when the popup is open:\n\n```html\n<img src=\"thumbnail.jpg\" data-popupable data-popupable-src=\"full-res.jpg\">\n```\n\n### Transparent images\n\nAdd `data-popupable-transparent` to show a checkerboard background behind transparent images:\n\n```html\n<img src=\"icon.png\" data-popupable data-popupable-transparent>\n```\n\n### Maintain aspect ratio\n\nBy default, the popup size is calculated from the image's natural dimensions. Add `data-popupable-maintain-aspect` to use the element's rendered aspect ratio instead, which is useful when the image is cropped or stretched via CSS:\n\n```html\n<img src=\"photo.jpg\" data-popupable data-popupable-maintain-aspect>\n```\n\n### Prevent upscaling\n\nAdd `data-popupable-no-upscale` to prevent the popup from scaling the image beyond its native resolution:\n\n```html\n<img src=\"pixel-art.png\" data-popupable data-popupable-no-upscale>\n```\n\n### Videos\n\npopupable supports videos in the same gallery flow as images. A source is treated as a video if any of these are true:\n\n* The element is a `<video>` tag.\n* The URL ends in one of: `.mp4`, `.m4v`, `.webm`, `.ogv`, `.mov`, `.3gp`, `.m3u8`, `.flv`.\n* `data-popupable-type=\"video\"` is set on the element (or inherited from a parent).\n\nUse `data-popupable-type` explicitly when the tag/extension doesn't match what you actually want — for example, when the URL doesn't reveal the underlying format (a proxied URL, a query-string-only URL), or when you want to force a `<video>` element or a `.mp4`-extensioned URL to be rendered as an image:\n\n```html\n<!-- Force video on a URL that doesn't end with a video extension -->\n<div data-popupable data-popupable-type=\"video\" src=\"/video/clip\"></div>\n\n<!-- Force image on a URL or tag that would otherwise be detected as video -->\n<div data-popupable data-popupable-type=\"image\" src=\"/render/clip.mp4\"></div>\n```\n\n#### Poster images\n\nAdd `data-popupable-poster` to provide a still image to show before the video has loaded:\n\n```html\n<video src=\"clip.mp4\" poster=\"clip.jpg\" data-popupable></video>\n<div data-popupable data-popupable-type=\"video\" src=\"/video/clip\" data-popupable-poster=\"/preview/clip.jpg\"></div>\n```\n\nIf the source is a `<video>` element, its `poster` attribute is also used automatically.\n\n> **Recommended for large galleries.** When a video has a poster, popupable uses an `<img>` for its thumbnail strip entry instead of a `<video>`. Posters load much faster than a video's metadata range request, especially across many thumbnails at once, so the strip fills in quickly even with hundreds of items.\n\n#### Passing attributes to the `<video>` element\n\nUse `data-popupable-attr` to set properties on the underlying `<video>` element. The value is a comma-separated list of `name` or `name=value` pairs. Values are parsed as `true`/`false`, numbers, or strings.\n\nNames are JavaScript property names (e.g. `playbackRate`, `playsInline`, `disablePictureInPicture`). They are matched case-insensitively, so both the camelCase property style and the lowercase HTML-attribute style (`playsinline`, `disablepictureinpicture`) are supported.\n\n```html\n<!-- Hide the controls bar -->\n<div data-popupable data-popupable-type=\"video\" data-popupable-attr=\"controls=false\" src=\"/video/clip\"></div>\n\n<!-- Autoplay muted, looping, at 1.5x speed -->\n<div data-popupable data-popupable-type=\"video\" data-popupable-attr=\"muted,loop,autoplay,playbackRate=1.5\" src=\"/video/clip\"></div>\n```\n\n`data-popupable-attr` is inherited, so you can set defaults on a group container.\n\nNotes on `controls`:\n\n* By default, videos get `controls=true` when opened.\n* If `controls` is mentioned in `data-popupable-attr` (e.g. `controls`, `controls=true`, `controls=false`), that explicit value is respected.\n* `data-popupable-zoomable` always forces `controls=false`, regardless of `data-popupable-attr`, because zoomable mode uses click and scroll for zoom/pan.\n\nVideos are always rendered with `playsInline`.\n\n### Custom HTML content\n\n`data-popupable-title` and `data-popupable-description` render as plain text. For styled captions (bold text, links, custom markup), point `data-popupable-content` at an element. The element is cloned into the popup's content area, replacing the title and description.\n\nThe value is matched by id first, then as a CSS selector, so `photo-caption` and `#photo-caption` both work:\n\n```html\n<img src=\"photo.jpg\" data-popupable data-popupable-content=\"photo-caption\">\n\n<template id=\"photo-caption\">\n  <div class=\"popupable-title\">Sunset over <em>Santorini</em></div>\n  <div class=\"popupable-description\">Shot on a <strong>Canon R5</strong> - <a href=\"/gallery\">more photos</a></div>\n</template>\n```\n\nOr use the keyword `next` to pull content from the next DOM element, or `prev` for the previous one. The source element is automatically hidden on the page:\n\n```html\n<img src=\"photo.jpg\" data-popupable data-popupable-content=\"next\">\n<div>\n  <div class=\"popupable-title\">Sunset over <em>Santorini</em></div>\n  <div class=\"popupable-description\">With <strong>bold</strong> and <a href=\"/gallery\">links</a></div>\n</div>\n```\n\nNotes:\n\n* A `<template>` is the cleanest source since it never renders on the page. Any other element also works: hide it with the `hidden` attribute or an inline `display: none`; both are stripped from the clone so it shows inside the popup.\n* **Frameworks that compile templates (e.g. Vue) treat `<template>` as their own construct** and strip its children, leaving an empty element in the DOM. Inside a Vue component, use a hidden element (`<div hidden>`) instead, or declare the `<template>` in `index.html` outside the app's render tree.\n* Reusing the `popupable-title` and `popupable-description` classes inside your markup gives it the same styling as the plain-text attributes, but any markup works.\n* The element is cloned, so event listeners attached to the source with `addEventListener` do not carry over.\n* Like all attributes it inherits, so a group container can set shared content, and individual items can override it or opt out with `data-popupable-content=\"false\"`.\n\n### Fixed content height\n\nBy default the content area resizes (with a transition) to fit each item's title/description/content as you navigate a gallery. Add `data-popupable-fixed-content-height` to size it once to the tallest content in the group instead, so the image area stays put while browsing. Content is vertically centered in the fixed area:\n\n```html\n<div data-popupable-group=\"holiday\" data-popupable-fixed-content-height>\n  <img src=\"photo1.jpg\" data-popupable data-popupable-description=\"Short caption\">\n  <img src=\"photo2.jpg\" data-popupable data-popupable-description=\"A much longer caption that wraps onto multiple lines\">\n</div>\n```\n\n### Canvases\n\n`<canvas>` elements are supported directly, no attributes needed beyond `data-popupable`:\n\n```html\n<canvas width=\"800\" height=\"450\" data-popupable></canvas>\n```\n\nThe popup shows a **live mirror** of the canvas: anything drawn to it while the popup is open (animations, games, charts) is reflected in the popup in real time. Gallery thumbnails for canvases are live mirrors too.\n\nMirrors only redraw while actually visible: off-screen gallery slides pause until they slide into view, and thumbnails update at a reduced rate and pause entirely when scrolled out of the strip.\n\n`data-popupable-src` works the same as on images: the canvas mirror is used for the seamless expand animation, and the alternate source loads in on top:\n\n```html\n<canvas width=\"320\" height=\"180\" data-popupable data-popupable-src=\"full-res.png\"></canvas>\n```\n\nCanvases can be grouped and mixed freely with images and videos in galleries.\n\n### Zoom\n\nAll images support pinch-to-zoom. Add `data-popupable-zoomable` to also enable tap/click-to-zoom and scroll wheel zoom:\n\n```html\n<img src=\"map.jpg\" data-popupable data-popupable-zoomable>\n```\n\nWhen zoomed in, pan by dragging and zoom in/out with the scroll wheel. Click the image or background, or pinch back to scale 1, to unzoom. A close button also appears in the corner when `data-popupable-zoomable` is set.\n\n### Groups / Galleries\n\nGroup multiple images together with `data-popupable-group`. Users can navigate with arrow buttons, swipe gestures, scroll wheel, or keyboard shortcuts.\n\nPlace `data-popupable-group` directly on elements or on a container to group all `data-popupable` children:\n\n```html\n<!-- On each element -->\n<img src=\"photo1.jpg\" data-popupable data-popupable-group=\"holiday\">\n<img src=\"photo2.jpg\" data-popupable data-popupable-group=\"holiday\">\n<img src=\"photo3.jpg\" data-popupable data-popupable-group=\"holiday\">\n\n<!-- Or on a container (inherited) -->\n<div data-popupable-group=\"holiday\">\n  <img src=\"photo1.jpg\" data-popupable>\n  <img src=\"photo2.jpg\" data-popupable>\n  <img src=\"photo3.jpg\" data-popupable>\n</div>\n```\n\n#### Looping\n\nAdd `data-popupable-looping` to make a gallery wrap around: navigating next from the last item flies back to the first, and prev from the first flies to the last. The arrow buttons never disable. Like other attributes it can go on the group container:\n\n```html\n<div data-popupable-group=\"holiday\" data-popupable-looping>\n  <img src=\"photo1.jpg\" data-popupable>\n  <img src=\"photo2.jpg\" data-popupable>\n  <img src=\"photo3.jpg\" data-popupable>\n</div>\n```\n\n### Counter and thumbnails\n\nAdd `data-popupable-counter` and/or `data-popupable-thumbnails` to show those UI elements in a gallery. These inherit, so placing them on the group container applies them to all members:\n\n```html\n<div data-popupable-group=\"holiday\" data-popupable-counter data-popupable-thumbnails>\n  <img src=\"photo1.jpg\" data-popupable>\n  <img src=\"photo2.jpg\" data-popupable>\n  <img src=\"photo3.jpg\" data-popupable>\n</div>\n```\n\n### Custom UI order\n\nControl the order of UI elements around the image with `data-popupable-order`. The `image` token marks where the image sits; everything before it goes in the header, everything after goes in the footer.\n\n```html\n<!-- Counter above image, thumbnails and content below -->\n<img data-popupable data-popupable-order=\"counter,image,thumbnails,content\">\n```\n\nDefault order: `counter,image,content,thumbnails`\n\n### Keyboard navigation\n\n| Keys | Action |\n|---|---|\n| `→` `↓` `Page Down` `D` `S` | Next image |\n| `←` `↑` `Page Up` `A` `W` | Previous image |\n| `Home` | First image |\n| `End` | Last image |\n| `1`–`9` | Jump to image by number |\n\n### Large galleries\n\npopupable is designed to handle galleries with many items. Only the slides near the active one are kept loaded; the rest are unloaded automatically and shown as a blurred-gradient placeholder until you scroll back to them. Prefetching adjusts as you drag, so slides you scroll onto are loaded by the time they reach view.\n\n### Custom IDs\n\nSet the value of `data-popupable` to give the popup a CSS `id`, useful for per-popup styling. In a gallery, the `id` updates as you navigate, so each image can have its own style:\n\n```html\n<img src=\"red.jpg\"   data-popupable=\"theme-red\"   data-popupable-group=\"themed\">\n<img src=\"green.jpg\" data-popupable=\"theme-green\" data-popupable-group=\"themed\">\n<img src=\"blue.jpg\"  data-popupable=\"theme-blue\"  data-popupable-group=\"themed\">\n```\n\n```css\n#theme-red   { --popupable-background: #3a0000cc; }\n#theme-green { --popupable-background: #003a00cc; }\n#theme-blue  { --popupable-background: #00003acc; }\n```\n\n### Animation styles\n\nUse `data-popupable-anim` to choose an open/close animation style. The default is `expand`.\n\n| Value | Description |\n|---|---|\n| `expand` | Expands from the image's original position (default) |\n| `pop` | Scales up from a slightly smaller version at the final position |\n| `line` | Expands vertically from a thin horizontal line at the center, like a CRT TV powering on |\n| `float` | Fades in while rising upward into position |\n\n```html\n<img src=\"photo.jpg\" data-popupable data-popupable-anim=\"line\">\n```\n\nThe popup container receives a `popupable-anim-{name}` class (e.g. `popupable-anim-float`), which can be used to apply custom CSS for that animation style.\n\n#### Styling the source while its popup is open\n\nWhile a popup is open, popupable marks the source element it was opened from so you can style it:\n\n| Class | Applied when | Effect |\n|---|---|---|\n| `popupable-hide` | The animation has `hideSource` (built-in: `expand`) | Hides the source with `visibility: hidden` so it doesn't show behind the popup |\n| `popupable-source-open` | The animation does **not** have `hideSource` (built-in: `pop`, `line`, `float`) | No built-in styling. A hook for you to style the still-visible source however you like |\n\nThe two are mutually exclusive: a source gets exactly one of them depending on the animation. They are added when the popup starts opening and removed when it finishes closing. In a gallery the class stays on the element the popup was opened from; it does not move as you navigate.\n\n`popupable-source-open` lets you react to the still-visible source. For example, dim it while its `line` popup is open:\n\n```css\n.popupable-source-open { opacity: 0.4; transition: opacity 0.2s; }\n```\n\n#### What's inherited from the source element\n\nAnimations with `styles: true` (built-in: `expand`) copy the following from the source element to the popup clone at open, then transition them away as it grows:\n\n* `border-radius`\n* `border`\n* `outline`\n* `box-shadow`\n* Effective `opacity` (cumulative through ancestors, so a thumbnail inside a half-transparent wrapper inherits the combined opacity). If the animation also has `fade: true`, opacity inheritance is skipped so the fade goes from `0`.\n\nThis is what makes the open animation feel continuous with the page. Animations without `styles: true` (built-ins: `pop`, `line`, `float`) skip this so they don't carry decorations they don't need.\n\n#### Custom animation styles\n\nRegister your own animation style by adding an object to `window.popupableAnimTypes`. The object must have a `position` method that receives the original element and the final expanded rect, and returns the starting rect for the open animation (which is also the ending rect for close). Additional static flags control the animation behaviour.\n\n| Property | Type | Description |\n|---|---|---|\n| `position(el, rect)` | function | Returns `{ top, left, width, height }` for the start of the open animation |\n| `styles` | boolean | Copies border-radius, border, outline, box-shadow, and effective opacity from the element to the popup clone, then transitions them out |\n| `fade` | boolean | Fades opacity in/out alongside the geometry. Overrides the opacity inheritance from `styles` so the animation always fades from `0`. |\n| `crossfade` | boolean | Crossfades between the thumbnail and alternate source image as it opens |\n| `hideSource` | boolean | Hides the original element while the popup is open |\n| `close` | object | Optional close-time fallback, see below |\n\nIf your `position` reads from the original element, the close animation can break when the element is no longer where the popup opened from:\n\n* It became `display: none`\n* It was removed from the DOM\n* It scrolled out of view\n* It got clipped by an `overflow` container\n\nProvide a `close` rule to fall back to a source-independent animation in that case:\n\n| `close` property | Type | Description |\n|---|---|---|\n| `condition(original)` | function | Return `true` if this animation is still valid for the close. If it returns `false`, the `fallback` animation is used to close instead. |\n| `fallback` | string | Name of the animation to close with when `condition` returns `false`. Should be a source-independent style (`pop`, `line`, `float`). The fallback runs directly; its own `close.condition` is not evaluated. |\n\nThe built-in `expand` style uses this to fall back to `pop` when the source element isn't visible at close time.\n\n```js\nwindow.popupableAnimTypes.myAnim = {\n  fade: true,\n  position(original, rect) {\n    return {\n      top: rect.top + rect.height / 2,\n      left: rect.left,\n      width: rect.width,\n      height: 0\n    }\n  }\n}\n```\n\n### Events\n\npopupable dispatches CustomEvents on the source element a popup was opened from:\n\n| Event | Fired when |\n|---|---|\n| `popupable:open` | The element's popup starts opening. Also fires again if a closing popup is reopened before its close animation finishes. |\n| `popupable:switch` | A gallery navigates to another item. Fires on the element switched **to**; `detail.previous` is the element switched from and `detail.index` is the new index. |\n| `popupable:close` | The popup has fully closed and been removed from the DOM. |\n\nAll events bubble and cross shadow DOM boundaries, so they can also be listened for on `document`. `event.target` is the relevant source element and `event.detail.popup` is the popup container element.\n\n```js\ndocument.addEventListener(\"popupable:open\", e => {\n  console.log(\"popup opened from\", e.target)\n})\n\ndocument.addEventListener(\"popupable:switch\", e => {\n  console.log(\"switched to\", e.target, \"from\", e.detail.previous)\n})\n\ndocument.addEventListener(\"popupable:close\", e => {\n  console.log(\"popup closed\", e.detail.popup)\n})\n```\n\n`popupable:open` and `popupable:close` always fire on the element the popup was opened from, even after navigating a gallery. `popupable:switch` fires once per navigation action: a fling that skips multiple items fires a single event for the item landed on, with `detail.previous` being the item the fling started from.\n\n### Shadow DOM\n\npopupable works inside open shadow roots out of the box. Clicks, attribute inheritance, and gallery grouping all cross shadow boundaries. Place `data-popupable-*` attributes on any ancestor and they will inherit into images inside shadow DOM.\n\nWhat can't be auto-injected before a popup first opens is document-level CSS, because it doesn't reach into shadow roots: the hover cursor, and the auto-hiding of `next`/`prev` content sources. Add this to any shadow root that hosts popupable elements:\n\n```css\n[data-popupable], [data-popupable] * { cursor: pointer }\n[data-popupable-content=\"next\"] + *, *:has(+ [data-popupable-content=\"prev\"]) { display: none }\n```\n\nClosed shadow roots (`mode: \"closed\"`) are not supported from the outside. To use popupable inside a closed shadow root, load it from within that root yourself so it has direct access to the contents.\n\n## Customization\n\nPopups can be styled using CSS variables:\n\n```css\n:root {\n  /* Overlay */\n  --popupable-background: #000B;        /* Backdrop color */\n  --popupable-blur: 6px;                /* Backdrop blur amount */\n\n  /* UI elements (header, footer, buttons) */\n  --popupable-ui-background: #0008;     /* Header/footer/button background */\n  --popupable-text-color: #fff;         /* Text and icon color */\n\n  /* Spacing */\n  --popupable-screen-padding: 40px;     /* Minimum gap between image and viewport edge */\n\n  /* Animation */\n  --popupable-open-duration: .25s;      /* Open/close transition duration */\n  --popupable-open-easing: ease;        /* Open/close transition easing */\n  --popupable-switch-duration: .25s;    /* Gallery navigation transition duration */\n  --popupable-switch-easing: ease;      /* Gallery navigation transition easing */\n  --popupable-zoom-duration: .25s;      /* Zoom in/out transition duration */\n  --popupable-zoom-easing: ease;        /* Zoom in/out transition easing */\n}\n```\n\n## How it works\n\npopupable uses a clone-and-expand technique:\n\n1. **Clones the image** at its exact on-screen position and size\n2. **Hides the original** and appends the clone as a fixed overlay\n3. **Animates the clone** to fill the viewport, respecting aspect ratio and padding\n4. **On close**, reverses the animation back to the original position, then removes the overlay\n\nThis gives a seamless visual transition with no layout shifts.\n\n## License\n\nMIT © [Ewan Howell](https://ewanhowell.com/)","readmeFilename":"README.md"}