{"_id":"@atendesign/javascript-components","_rev":"12-8299b108e83eef0a97e0ea4e0050c34e","name":"@atendesign/javascript-components","dist-tags":{"latest":"1.3.5"},"versions":{"1.0.0":{"name":"@atendesign/javascript-components","version":"1.0.0","author":{"name":"Philip Stier"},"_id":"@atendesign/javascript-components@1.0.0","maintainers":[{"name":"jnettik","email":"james.nettik@gmail.com"},{"name":"pixelwhip","email":"jferris42@gmail.com"},{"name":"atenadmin","email":"admin@atendesigngroup.com"},{"name":"stierpm","email":"stierpm@gmail.com"}],"homepage":"https://github.com/AtenDesignGroup/javascript-components#readme","bugs":{"url":"https://github.com/AtenDesignGroup/javascript-components/issues"},"dist":{"shasum":"2594421aba606dd7570ad5ef767e57dd63535de5","tarball":"https://registry.npmjs.org/@atendesign/javascript-components/-/javascript-components-1.0.0.tgz","fileCount":12,"integrity":"sha512-5ZJLSMNYMYVItkCQFsBTyW/TlQnDKzeikGfJ5gnWX1wzVMkCuOadvbo1Uiw8oPAP5ZFmfpuOQvSfgIfDCHFmEA==","signatures":[{"sig":"MEYCIQCtL3R7PFV+4g/I2AgpbarFzBMv6cJrb/srXLmv7L1i2AIhAO4zSiVBnbooUAi/y3yHRioI4SeEkTn0X2XtfubsYmdi","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":115768},"main":"dist/javascript-components.umd.js","type":"module","scope":"atendesign","module":"dist/javascript-components.esm.js","exports":{".":{"import":"./dist/javascript-components.esm.js","require":"./dist/javascript-components.umd.js"},"./src":"./src/index.js","./components/Accordion":"./src/components/Accordion.js","./components/TabContent":"./src/components/TabContent.js"},"gitHead":"55020c24dc2c394e76450f6677dd87849f8626d6","scripts":{"dev":"rollup -c -w","build":"rollup -c","clean":"rm -rf dist","prebuild":"npm run clean","prepublishOnly":"npm run build"},"_npmUser":{"name":"stierpm","email":"stierpm@gmail.com"},"repository":{"url":"git+https://github.com/AtenDesignGroup/javascript-components.git","type":"git"},"_npmVersion":"11.4.2","description":"A collection of JavaScript libraries that adhere ceremoniously with WCAG guidelines.","directories":{},"_nodeVersion":"22.17.0","_hasShrinkwrap":false,"devDependencies":{"rollup":"^4.0.0","@babel/core":"^7.23.0","@babel/preset-env":"^7.23.0","@rollup/plugin-babel":"^6.0.4","@rollup/plugin-terser":"^0.4.4","@rollup/plugin-commonjs":"^25.0.7","@rollup/plugin-node-resolve":"^15.2.3"},"_npmOperationalInternal":{"tmp":"tmp/javascript-components_1.0.0_1772560866055_0.7126074650180496","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@atendesign/javascript-components","version":"1.0.1","author":{"name":"Philip Stier"},"_id":"@atendesign/javascript-components@1.0.1","maintainers":[{"name":"jnettik","email":"james.nettik@gmail.com"},{"name":"pixelwhip","email":"jferris42@gmail.com"},{"name":"atenadmin","email":"admin@atendesigngroup.com"},{"name":"stierpm","email":"stierpm@gmail.com"}],"homepage":"https://github.com/AtenDesignGroup/javascript-components#readme","bugs":{"url":"https://github.com/AtenDesignGroup/javascript-components/issues"},"dist":{"shasum":"e6a12ae4b57a31c6edccc317ee7ef3623d458adb","tarball":"https://registry.npmjs.org/@atendesign/javascript-components/-/javascript-components-1.0.1.tgz","fileCount":12,"integrity":"sha512-LWB5UWcpVM2kGHZPzpoqbxLuQecrY20qjoHpOzUfFLcdl6woPEVG0vm+h4/mgbIs5HalP/vaicMJBXiXKff2yQ==","signatures":[{"sig":"MEYCIQD7K5BzHNVQEFbqn6hqCzw9AHOCn2ObbfwqgqMwa4PjPQIhALz+s+mqnvf3M2sK+VmINUrVLrB30l35UPnce9yjLQBd","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":130592},"main":"dist/javascript-components.umd.js","type":"module","scope":"atendesign","module":"dist/javascript-components.esm.js","exports":{".":{"import":"./dist/javascript-components.esm.js","require":"./dist/javascript-components.umd.js"},"./src":"./src/index.js","./components/Accordion":"./src/components/Accordion.js","./components/TabContent":"./src/components/TabContent.js"},"gitHead":"d6ca9e3313f36c9b20e4c540dc83c9a339d0965f","scripts":{"build":"rollup -c","clean":"rm -rf dist","watch":"rollup -c -w","prebuild":"npm run clean","prepublishOnly":"npm run build"},"_npmUser":{"name":"stierpm","email":"stierpm@gmail.com"},"repository":{"url":"git+https://github.com/AtenDesignGroup/javascript-components.git","type":"git"},"_npmVersion":"11.4.2","description":"A collection of JavaScript libraries that adhere ceremoniously with WCAG guidelines.","directories":{},"_nodeVersion":"22.17.0","_hasShrinkwrap":false,"devDependencies":{"rollup":"^4.0.0","@babel/core":"^7.23.0","@babel/preset-env":"^7.23.0","@rollup/plugin-babel":"^6.0.4","@rollup/plugin-terser":"^0.4.4","@rollup/plugin-commonjs":"^25.0.7","@rollup/plugin-node-resolve":"^15.2.3"},"_npmOperationalInternal":{"tmp":"tmp/javascript-components_1.0.1_1772564210527_0.265447120556616","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@atendesign/javascript-components","version":"1.1.0","author":{"name":"Philip Stier"},"_id":"@atendesign/javascript-components@1.1.0","maintainers":[{"name":"jnettik","email":"james.nettik@gmail.com"},{"name":"pixelwhip","email":"jferris42@gmail.com"},{"name":"atenadmin","email":"admin@atendesigngroup.com"},{"name":"stierpm","email":"stierpm@gmail.com"}],"homepage":"https://github.com/AtenDesignGroup/javascript-components#readme","bugs":{"url":"https://github.com/AtenDesignGroup/javascript-components/issues"},"dist":{"shasum":"82cecd79d1846f3f3efa9254b7c5a72d36564dcb","tarball":"https://registry.npmjs.org/@atendesign/javascript-components/-/javascript-components-1.1.0.tgz","fileCount":13,"integrity":"sha512-ec5OjUXY7biwfJrkH5zohhiKT+KWMwA8Cwr1eB008AJzI+JtwY3cRVkILdXPavaeY0LKTf7w8fuNpQQigdOv0A==","signatures":[{"sig":"MEUCIAorq/z4qMdFE5DaroIUNbdLX0h/oSIQmQJQe8fc1+v/AiEAi/c1bxn72jTEK+4tAElz4AjYBzHYvnIEuBbn+vtZf7k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":261437},"main":"dist/javascript-components.umd.js","type":"module","scope":"atendesign","module":"dist/javascript-components.esm.js","exports":{".":{"import":"./dist/javascript-components.esm.js","require":"./dist/javascript-components.umd.js"},"./src":"./src/index.js","./components/Menu":"./src/components/Menu.js","./components/Accordion":"./src/components/Accordion.js","./components/TabContent":"./src/components/TabContent.js"},"gitHead":"78b6c7cddbb9ef299472d70d26e9c76b976b4cce","scripts":{"build":"rollup -c","clean":"rm -rf dist","watch":"rollup -c -w","prebuild":"npm run clean","prepublishOnly":"npm run build"},"_npmUser":{"name":"stierpm","email":"stierpm@gmail.com"},"repository":{"url":"git+https://github.com/AtenDesignGroup/javascript-components.git","type":"git"},"_npmVersion":"11.6.3","description":"A collection of JavaScript libraries that adhere ceremoniously with WCAG guidelines.","directories":{},"_nodeVersion":"22.11.0","_hasShrinkwrap":false,"devDependencies":{"rollup":"^4.0.0","@babel/core":"^7.23.0","@babel/preset-env":"^7.23.0","@rollup/plugin-babel":"^6.0.4","@rollup/plugin-terser":"^0.4.4","@rollup/plugin-commonjs":"^25.0.7","@rollup/plugin-node-resolve":"^15.2.3"},"_npmOperationalInternal":{"tmp":"tmp/javascript-components_1.1.0_1773264273437_0.8706636441324431","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@atendesign/javascript-components","version":"1.1.1","author":{"name":"Philip Stier"},"_id":"@atendesign/javascript-components@1.1.1","maintainers":[{"name":"jnettik","email":"james.nettik@gmail.com"},{"name":"pixelwhip","email":"jferris42@gmail.com"},{"name":"atenadmin","email":"admin@atendesigngroup.com"},{"name":"stierpm","email":"stierpm@gmail.com"}],"homepage":"https://github.com/AtenDesignGroup/javascript-components#readme","bugs":{"url":"https://github.com/AtenDesignGroup/javascript-components/issues"},"dist":{"shasum":"1ca1b71decdacf699de130db486270332c83502e","tarball":"https://registry.npmjs.org/@atendesign/javascript-components/-/javascript-components-1.1.1.tgz","fileCount":13,"integrity":"sha512-Ft8hV5P8E/iyaz9LFECsOZGB/G2d0qLfTZaF+Av2U9k47ZgUBvun64oTfucqvwMJwTgZ5qcEaFJqQV7eDXG16g==","signatures":[{"sig":"MEUCIQDvbzwA/IIOIA9j428iGx+GgSUm74G3sOXP9CwCRbfM0wIgSHnRTElpZHjM6+XGUEtoW2x2sTyoprLSNJILoHZiSnY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":261437},"main":"dist/javascript-components.umd.js","type":"module","scope":"atendesign","module":"dist/javascript-components.esm.js","exports":{".":{"import":"./dist/javascript-components.esm.js","require":"./dist/javascript-components.umd.js"},"./src":"./src/index.js","./components/Menu":"./src/components/Menu.js","./components/Accordion":"./src/components/Accordion.js","./components/TabContent":"./src/components/TabContent.js"},"gitHead":"813f6897258ec83f297880ae9ea2df6133176e0c","scripts":{"build":"rollup -c","clean":"rm -rf dist","watch":"rollup -c -w","prebuild":"npm run clean","prepublishOnly":"npm run build"},"_npmUser":{"name":"stierpm","email":"stierpm@gmail.com"},"repository":{"url":"git+https://github.com/AtenDesignGroup/javascript-components.git","type":"git"},"_npmVersion":"11.6.3","description":"A collection of JavaScript libraries that adhere ceremoniously with WCAG guidelines.","directories":{},"_nodeVersion":"22.11.0","_hasShrinkwrap":false,"devDependencies":{"rollup":"^4.0.0","@babel/core":"^7.23.0","@babel/preset-env":"^7.23.0","@rollup/plugin-babel":"^6.0.4","@rollup/plugin-terser":"^0.4.4","@rollup/plugin-commonjs":"^25.0.7","@rollup/plugin-node-resolve":"^15.2.3"},"_npmOperationalInternal":{"tmp":"tmp/javascript-components_1.1.1_1773264965822_0.0503846565609698","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@atendesign/javascript-components","version":"1.2.0","author":{"name":"Philip Stier"},"_id":"@atendesign/javascript-components@1.2.0","maintainers":[{"name":"jnettik","email":"james.nettik@gmail.com"},{"name":"pixelwhip","email":"jferris42@gmail.com"},{"name":"atenadmin","email":"admin@atendesigngroup.com"},{"name":"stierpm","email":"stierpm@gmail.com"}],"homepage":"https://github.com/AtenDesignGroup/javascript-components#readme","bugs":{"url":"https://github.com/AtenDesignGroup/javascript-components/issues"},"dist":{"shasum":"b319251c23f289383eb69d617903da8147b65556","tarball":"https://registry.npmjs.org/@atendesign/javascript-components/-/javascript-components-1.2.0.tgz","fileCount":14,"integrity":"sha512-vIu8im7ohZwhVGPoYoCMz3ZKJwbWVfv3H+ayGu+aJ2uO+56dK13XqrucMTnc0tEc/ItSp56oRJ3C7AL5Ky5VzA==","signatures":[{"sig":"MEUCIQC76QGHMR/ygdoQhWPUpjjXoXFSzPc48m+kgYxESzK2KQIgVaxuSGjiYh4HRGEkDTW7uMOD+KKw0jCB1vu+OlsUNlI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":315287},"main":"dist/javascript-components.umd.js","type":"module","scope":"atendesign","module":"dist/javascript-components.esm.js","exports":{".":{"import":"./dist/javascript-components.esm.js","require":"./dist/javascript-components.umd.js"},"./src":"./src/index.js","./components/Menu":"./src/components/Menu.js","./components/Accordion":"./src/components/Accordion.js","./components/TabContent":"./src/components/TabContent.js"},"gitHead":"c5c788e408bddc347aefdebb60227c782e105d9d","scripts":{"build":"rollup -c","clean":"rm -rf dist","watch":"rollup -c -w","prebuild":"npm run clean","prepublishOnly":"npm run build"},"_npmUser":{"name":"stierpm","email":"stierpm@gmail.com"},"repository":{"url":"git+https://github.com/AtenDesignGroup/javascript-components.git","type":"git"},"_npmVersion":"11.6.3","description":"A collection of JavaScript libraries that adhere ceremoniously with WCAG guidelines.","directories":{},"_nodeVersion":"22.11.0","_hasShrinkwrap":false,"devDependencies":{"rollup":"^4.0.0","@babel/core":"^7.23.0","@babel/preset-env":"^7.23.0","@rollup/plugin-babel":"^6.0.4","@rollup/plugin-terser":"^0.4.4","@rollup/plugin-commonjs":"^25.0.7","@rollup/plugin-node-resolve":"^15.2.3"},"_npmOperationalInternal":{"tmp":"tmp/javascript-components_1.2.0_1773333245823_0.3458884605884891","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@atendesign/javascript-components","version":"1.3.0","author":{"name":"Philip Stier"},"_id":"@atendesign/javascript-components@1.3.0","maintainers":[{"name":"jnettik","email":"james.nettik@gmail.com"},{"name":"pixelwhip","email":"jferris42@gmail.com"},{"name":"atenadmin","email":"admin@atendesigngroup.com"},{"name":"stierpm","email":"stierpm@gmail.com"}],"homepage":"https://github.com/AtenDesignGroup/javascript-components#readme","bugs":{"url":"https://github.com/AtenDesignGroup/javascript-components/issues"},"dist":{"shasum":"2ca06221d15ac91605e4b046bc54289610a8ea07","tarball":"https://registry.npmjs.org/@atendesign/javascript-components/-/javascript-components-1.3.0.tgz","fileCount":15,"integrity":"sha512-JlF28Sn7fkVUkP9GcqYiF8V3tQ/UEB1zi/MW9a8CAI63R2MTs9LqBGt/hR+9//2KlPkqjCBzFZUYE2b9geLF3w==","signatures":[{"sig":"MEUCICIr3qzvprOXgaykOSYPaySovj0IgZqv1F+3xWLg1Cg0AiEA5aOE1HMLxT4gqzjRmBQ77J5TRHb1HzJdjV/XaSsg0W0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":393120},"main":"dist/javascript-components.umd.js","type":"module","scope":"atendesign","module":"dist/javascript-components.esm.js","exports":{".":{"import":"./dist/javascript-components.esm.js","require":"./dist/javascript-components.umd.js"},"./src":"./src/index.js","./components/Menu":"./src/components/Menu.js","./components/Modal":"./src/components/Modal.js","./components/Accordion":"./src/components/Accordion.js","./components/TabContent":"./src/components/TabContent.js"},"gitHead":"c52d8ef34069712664a410d0b2fb1d005d7b28ed","scripts":{"build":"rollup -c","clean":"rm -rf dist","watch":"rollup -c -w","prebuild":"npm run clean","prepublishOnly":"npm run build"},"_npmUser":{"name":"stierpm","email":"stierpm@gmail.com"},"repository":{"url":"git+https://github.com/AtenDesignGroup/javascript-components.git","type":"git"},"_npmVersion":"11.6.3","description":"A collection of JavaScript libraries that adhere ceremoniously with WCAG guidelines.","directories":{},"_nodeVersion":"22.11.0","_hasShrinkwrap":false,"devDependencies":{"rollup":"^4.0.0","@babel/core":"^7.23.0","@babel/preset-env":"^7.23.0","@rollup/plugin-babel":"^6.0.4","@rollup/plugin-terser":"^0.4.4","@rollup/plugin-commonjs":"^25.0.7","@rollup/plugin-node-resolve":"^15.2.3"},"_npmOperationalInternal":{"tmp":"tmp/javascript-components_1.3.0_1773337668045_0.700760018709186","host":"s3://npm-registry-packages-npm-production"}},"1.3.1":{"name":"@atendesign/javascript-components","version":"1.3.1","author":{"name":"Philip Stier"},"_id":"@atendesign/javascript-components@1.3.1","maintainers":[{"name":"jnettik","email":"james.nettik@gmail.com"},{"name":"pixelwhip","email":"jferris42@gmail.com"},{"name":"atenadmin","email":"admin@atendesigngroup.com"},{"name":"stierpm","email":"stierpm@gmail.com"}],"homepage":"https://github.com/AtenDesignGroup/javascript-components#readme","bugs":{"url":"https://github.com/AtenDesignGroup/javascript-components/issues"},"dist":{"shasum":"d81ac286e6a17c026755f84959b2a5742d4979f0","tarball":"https://registry.npmjs.org/@atendesign/javascript-components/-/javascript-components-1.3.1.tgz","fileCount":15,"integrity":"sha512-Ch7grKzRGjAMUTHXs8nZKn7eKz/swa/slQcp9EYVEzPqk6m8BcWwXZMjb7aND2DfCvFq5mIxuIG+OESry63rng==","signatures":[{"sig":"MEYCIQDCUVqmZ7CyyFdXQilzCevN4chlCI5pnlBK36vE7JsIngIhAJ0Mv0JS03zgQ2YGnFTBS/4ezoBBfJQvHNO3rQvSKwHa","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":413548},"main":"dist/javascript-components.umd.js","type":"module","scope":"atendesign","module":"dist/javascript-components.esm.js","exports":{".":{"import":"./dist/javascript-components.esm.js","require":"./dist/javascript-components.umd.js"},"./src":"./src/index.js","./components/Menu":"./src/components/Menu.js","./components/Modal":"./src/components/Modal.js","./components/Accordion":"./src/components/Accordion.js","./components/TabContent":"./src/components/TabContent.js"},"gitHead":"55f07ee4f1c5600e9e64800a4db4228c348b4e36","scripts":{"build":"rollup -c","clean":"rm -rf dist","watch":"rollup -c -w","prebuild":"npm run clean","prepublishOnly":"npm run build"},"_npmUser":{"name":"stierpm","email":"stierpm@gmail.com"},"repository":{"url":"git+https://github.com/AtenDesignGroup/javascript-components.git","type":"git"},"_npmVersion":"11.6.3","description":"A collection of JavaScript libraries that adhere ceremoniously with WCAG guidelines.","directories":{},"_nodeVersion":"22.11.0","_hasShrinkwrap":false,"devDependencies":{"rollup":"^4.0.0","@babel/core":"^7.23.0","@babel/preset-env":"^7.23.0","@rollup/plugin-babel":"^6.0.4","@rollup/plugin-terser":"^0.4.4","@rollup/plugin-commonjs":"^25.0.7","@rollup/plugin-node-resolve":"^15.2.3"},"_npmOperationalInternal":{"tmp":"tmp/javascript-components_1.3.1_1773346457123_0.13098516057746434","host":"s3://npm-registry-packages-npm-production"}},"1.3.2":{"name":"@atendesign/javascript-components","version":"1.3.2","author":{"name":"Philip Stier"},"_id":"@atendesign/javascript-components@1.3.2","maintainers":[{"name":"jnettik","email":"james.nettik@gmail.com"},{"name":"pixelwhip","email":"jferris42@gmail.com"},{"name":"atenadmin","email":"admin@atendesigngroup.com"},{"name":"stierpm","email":"stierpm@gmail.com"}],"homepage":"https://atendesigngroup.github.io/javascript-components","bugs":{"url":"https://github.com/AtenDesignGroup/javascript-components/issues"},"dist":{"shasum":"11e745a09e71bac0e77070b462fe2099a0761d02","tarball":"https://registry.npmjs.org/@atendesign/javascript-components/-/javascript-components-1.3.2.tgz","fileCount":15,"integrity":"sha512-kR+TsuledUVAgZO7bSqvk5XFrD8F6g6FUmcQbVqjhkaEpdQDHwAhsF19Hb6saNKld9FVvAch3gE4zlRrrJgYrw==","signatures":[{"sig":"MEQCIAdUHGBR3MImeDIW97bWmxmFb9WPiHDaMV38qT61XYsKAiA+NF4gwaItoQ3vJRWXMf78qlfKQzcswj1mODvgHbSu8A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":413540},"main":"dist/javascript-components.umd.js","type":"module","scope":"atendesign","module":"dist/javascript-components.esm.js","exports":{".":{"import":"./dist/javascript-components.esm.js","require":"./dist/javascript-components.umd.js"},"./src":"./src/index.js","./components/Menu":"./src/components/Menu.js","./components/Modal":"./src/components/Modal.js","./components/Accordion":"./src/components/Accordion.js","./components/TabContent":"./src/components/TabContent.js"},"gitHead":"cb7ebdd95a44b275bd78b79803236df4fc8d1077","scripts":{"build":"rollup -c","clean":"rm -rf dist","watch":"rollup -c -w","prebuild":"npm run clean","prepublishOnly":"npm run build"},"_npmUser":{"name":"stierpm","email":"stierpm@gmail.com"},"repository":{"url":"git+https://github.com/AtenDesignGroup/javascript-components.git","type":"git"},"_npmVersion":"11.6.3","description":"A collection of JavaScript libraries that adhere ceremoniously with WCAG guidelines.","directories":{},"_nodeVersion":"22.11.0","_hasShrinkwrap":false,"devDependencies":{"rollup":"^4.0.0","@babel/core":"^7.23.0","@babel/preset-env":"^7.23.0","@rollup/plugin-babel":"^6.0.4","@rollup/plugin-terser":"^0.4.4","@rollup/plugin-commonjs":"^25.0.7","@rollup/plugin-node-resolve":"^15.2.3"},"_npmOperationalInternal":{"tmp":"tmp/javascript-components_1.3.2_1773346685555_0.6736249559646437","host":"s3://npm-registry-packages-npm-production"}},"1.3.3":{"name":"@atendesign/javascript-components","version":"1.3.3","author":{"name":"Philip Stier"},"_id":"@atendesign/javascript-components@1.3.3","maintainers":[{"name":"jnettik","email":"james.nettik@gmail.com"},{"name":"pixelwhip","email":"jferris42@gmail.com"},{"name":"atenadmin","email":"admin@atendesigngroup.com"},{"name":"stierpm","email":"stierpm@gmail.com"}],"homepage":"https://atendesigngroup.github.io/javascript-components","bugs":{"url":"https://github.com/AtenDesignGroup/javascript-components/issues"},"dist":{"shasum":"25b41c377772c992354e771353adf86e2fde2ecb","tarball":"https://registry.npmjs.org/@atendesign/javascript-components/-/javascript-components-1.3.3.tgz","fileCount":15,"integrity":"sha512-yw+tvoF2A7y4TkdzXTmb5S5LEhlBhyaLdNdjcFqP1AYQx6j0wFYr5RVObesT7aQi+2rk968WVBfBQWRXSFTq1A==","signatures":[{"sig":"MEYCIQCdpVSJ/pLhgebLbCBibikrb+pNkp8rG/8j2jwN0ih2FQIhAPv+FKcYkjQS9zRWwKMN8sOm7bqZa7wP7Kb7+A8yPTBj","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":413736},"main":"dist/javascript-components.umd.js","type":"module","scope":"atendesign","module":"dist/javascript-components.esm.js","exports":{".":{"import":"./dist/javascript-components.esm.js","require":"./dist/javascript-components.umd.js"},"./src":"./src/index.js","./components/Menu":"./src/components/Menu.js","./components/Modal":"./src/components/Modal.js","./components/Accordion":"./src/components/Accordion.js","./components/TabContent":"./src/components/TabContent.js"},"gitHead":"bd347ef262b356523b0d63ea1fbcbb7da6cb4b52","scripts":{"build":"rollup -c","clean":"rm -rf dist","watch":"rollup -c -w","prebuild":"npm run clean","prepublishOnly":"npm run build"},"_npmUser":{"name":"stierpm","email":"stierpm@gmail.com"},"repository":{"url":"git+https://github.com/AtenDesignGroup/javascript-components.git","type":"git"},"_npmVersion":"11.6.3","description":"A collection of JavaScript libraries that adhere ceremoniously with WCAG guidelines.","directories":{},"_nodeVersion":"22.11.0","_hasShrinkwrap":false,"devDependencies":{"rollup":"^4.0.0","@babel/core":"^7.23.0","@babel/preset-env":"^7.23.0","@rollup/plugin-babel":"^6.0.4","@rollup/plugin-terser":"^0.4.4","@rollup/plugin-commonjs":"^25.0.7","@rollup/plugin-node-resolve":"^15.2.3"},"_npmOperationalInternal":{"tmp":"tmp/javascript-components_1.3.3_1776180006411_0.6389266252324928","host":"s3://npm-registry-packages-npm-production"}},"1.3.4":{"name":"@atendesign/javascript-components","version":"1.3.4","author":{"name":"Philip Stier"},"_id":"@atendesign/javascript-components@1.3.4","maintainers":[{"name":"jnettik","email":"james.nettik@gmail.com"},{"name":"pixelwhip","email":"jferris42@gmail.com"},{"name":"atenadmin","email":"admin@atendesigngroup.com"},{"name":"stierpm","email":"stierpm@gmail.com"},{"name":"jldust","email":"dust.jennifer@gmail.com"}],"homepage":"https://atendesigngroup.github.io/javascript-components","bugs":{"url":"https://github.com/AtenDesignGroup/javascript-components/issues"},"dist":{"shasum":"89fe7da8ffb708dae381b9028f122075de9cf071","tarball":"https://registry.npmjs.org/@atendesign/javascript-components/-/javascript-components-1.3.4.tgz","fileCount":15,"integrity":"sha512-nA0YpbZXq0mHhRwHTeLxzO6S7f4q8YtT9/DtrR1YA+oAQfFtOO2S6nijE2WR/YDIedWOj+uCYX+HYmsCKqHmqA==","signatures":[{"sig":"MEUCIQD5mAippjwUIp2ZweTSi/l5PHOBpgoSaJ36MhT/XnSmmwIgU2eiZMHjc3s55KaCtMfhRGaWopbBZoCMwk6ynYcJdaQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":418184},"main":"dist/javascript-components.umd.js","type":"module","scope":"atendesign","module":"dist/javascript-components.esm.js","exports":{".":{"import":"./dist/javascript-components.esm.js","require":"./dist/javascript-components.umd.js"},"./src":"./src/index.js","./components/Menu":"./src/components/Menu.js","./components/Modal":"./src/components/Modal.js","./components/Accordion":"./src/components/Accordion.js","./components/TabContent":"./src/components/TabContent.js"},"gitHead":"85952bd7ae378d87aa449c10abd634709681e383","scripts":{"build":"rollup -c","clean":"rm -rf dist","watch":"rollup -c -w","prebuild":"npm run clean","prepublishOnly":"npm run build"},"_npmUser":{"name":"stierpm","email":"stierpm@gmail.com"},"repository":{"url":"git+https://github.com/AtenDesignGroup/javascript-components.git","type":"git"},"_npmVersion":"11.6.3","description":"A collection of JavaScript libraries that adhere ceremoniously with WCAG guidelines.","directories":{},"_nodeVersion":"22.11.0","_hasShrinkwrap":false,"devDependencies":{"rollup":"^4.0.0","@babel/core":"^7.23.0","@babel/preset-env":"^7.23.0","@rollup/plugin-babel":"^6.0.4","@rollup/plugin-terser":"^0.4.4","@rollup/plugin-commonjs":"^25.0.7","@rollup/plugin-node-resolve":"^15.2.3"},"_npmOperationalInternal":{"tmp":"tmp/javascript-components_1.3.4_1782505286406_0.23244190190029834","host":"s3://npm-registry-packages-npm-production"}},"1.3.5":{"name":"@atendesign/javascript-components","version":"1.3.5","description":"A collection of JavaScript libraries that adhere ceremoniously with WCAG guidelines.","scope":"atendesign","main":"dist/javascript-components.umd.js","module":"dist/javascript-components.esm.js","type":"module","scripts":{"build":"rollup -c","watch":"rollup -c -w","clean":"rm -rf dist","prebuild":"npm run clean","prepublishOnly":"npm run build"},"exports":{".":{"import":"./dist/javascript-components.esm.js","require":"./dist/javascript-components.umd.js"},"./src":"./src/index.js","./components/Accordion":"./src/components/Accordion.js","./components/Menu":"./src/components/Menu.js","./components/Modal":"./src/components/Modal.js","./components/TabContent":"./src/components/TabContent.js","./components/Sticky":"./src/components/Sticky.js"},"author":{"name":"Philip Stier"},"devDependencies":{"@babel/core":"^7.23.0","@babel/preset-env":"^7.23.0","@rollup/plugin-babel":"^6.0.4","@rollup/plugin-commonjs":"^25.0.7","@rollup/plugin-node-resolve":"^15.2.3","@rollup/plugin-terser":"^0.4.4","rollup":"^4.0.0"},"repository":{"type":"git","url":"git+https://github.com/AtenDesignGroup/javascript-components.git"},"bugs":{"url":"https://github.com/AtenDesignGroup/javascript-components/issues"},"homepage":"https://atendesigngroup.github.io/javascript-components","gitHead":"eb9218f32a0abb905477eaa39927c1fc194c4168","_id":"@atendesign/javascript-components@1.3.5","_nodeVersion":"22.11.0","_npmVersion":"11.6.3","dist":{"integrity":"sha512-9Flq9VlMLbdMOUSgZlXMFKVUL671Rk6ubu81ATE/X5mVu+q3KteoYrJJtFbtgl0glEfebuTRtcnm/hxANO2o8A==","shasum":"b97f29fc8f2eb2b12077a67f2b5aff182261ddce","tarball":"https://registry.npmjs.org/@atendesign/javascript-components/-/javascript-components-1.3.5.tgz","fileCount":15,"unpackedSize":421284,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCsY1c4uCxPHiAvfDUKy48M+AhXrqSn1MGQJTIeTro+xQIgFgTwcJlbiucRqIXsAZaQ7qyA6eylwBNIxVVKDCoudE0="}]},"_npmUser":{"name":"stierpm","email":"stierpm@gmail.com"},"directories":{},"maintainers":[{"name":"jnettik","email":"james.nettik@gmail.com"},{"name":"pixelwhip","email":"jferris42@gmail.com"},{"name":"atenadmin","email":"admin@atendesigngroup.com"},{"name":"stierpm","email":"stierpm@gmail.com"},{"name":"jldust","email":"dust.jennifer@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/javascript-components_1.3.5_1783358621251_0.6586386234240353"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-03T18:01:05.791Z","modified":"2026-07-06T17:23:41.606Z","1.0.0":"2026-03-03T18:01:06.221Z","1.0.1":"2026-03-03T18:56:50.682Z","1.1.0":"2026-03-11T21:24:33.604Z","1.1.1":"2026-03-11T21:36:05.967Z","1.2.0":"2026-03-12T16:34:06.008Z","1.3.0":"2026-03-12T17:47:48.187Z","1.3.1":"2026-03-12T20:14:17.257Z","1.3.2":"2026-03-12T20:18:05.720Z","1.3.3":"2026-04-14T15:20:06.546Z","1.3.4":"2026-06-26T20:21:26.529Z","1.3.5":"2026-07-06T17:23:41.404Z"},"bugs":{"url":"https://github.com/AtenDesignGroup/javascript-components/issues"},"author":{"name":"Philip Stier"},"homepage":"https://atendesigngroup.github.io/javascript-components","repository":{"type":"git","url":"git+https://github.com/AtenDesignGroup/javascript-components.git"},"description":"A collection of JavaScript libraries that adhere ceremoniously with WCAG guidelines.","maintainers":[{"name":"jnettik","email":"james.nettik@gmail.com"},{"name":"pixelwhip","email":"jferris42@gmail.com"},{"name":"atenadmin","email":"admin@atendesigngroup.com"},{"name":"stierpm","email":"stierpm@gmail.com"},{"name":"jldust","email":"dust.jennifer@gmail.com"}],"readme":"# Aten Design Group -- JavaScript Components\n\n[![npm version](https://badge.fury.io/js/%40atendesign%2Fjavascript-components.svg)](https://badge.fury.io/js/%40atendesign%2Fjavascript-components)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\nA collection of JavaScript libraries that adhere ceremoniously with WCAG guidelines. This package provides accessible, keyboard-navigable UI components with full ARIA support and responsive design capabilities.\n\n## 🐛 Issues & Support\n\nFound a bug or have a feature request? Please [open an issue](https://github.com/AtenDesignGroup/javascript-components/issues) on GitHub.\n\n## 👤 Author\n\n**Philip Stier - Tech Lead, Senior Developer**\n\n---\n01. [Installation](#installation)\n02. [Accordion](#accordion)\n03. [Tab Content](#tab-content)\n04. [Menu](#menu)\n05. [Sticky](#sticky)\n06. [Modal](#modal)\n---\n\n## Installation\n\n`npm install @atendesign/javascript-components`\n\n## Accordion\n\n### Features\n\n- 🌟 Fully accessible implementation\n- ⌨️ Keyboard navigation support\n- 📱 Responsive design\n- 🎨 Customizable styling\n- 🔄 Toggle state management\n\n### Basic Usage\n\n**HTML**\n\n```\n<div class=\"accordion\">\n    <h3 class=\"accordion__heading\">\n        <button id=\"accordion-trigger-01\" class=\"accordion__trigger\" aria-expanded=\"false\" aria-controls=\"accordion-section-01>\n            Accordion Section\n        </button>\n    </h3>\n\n    <div id=\"accordion-section-01\" class=\"accordion__content\" role=\"region\" aria-labelledby=\"accordion-trigger-01\">\n        <p>This is the accordion content.</p>\n    </div>\n</div>\n```\n\n**JavaScript**\n\n```\nimport { Accordion } from '@atendesign/javascript-components';\n\ndocument.addEventListener('DOMContentLoaded', function() { \n    document.querySelectorAll('.accordion').forEach(accordion => {\n        const accordionComponent = new Accordion(accordion, {options});\n        accordionComponent.init();\n    });\n});\n\n```\n\n### Options\n\n| Option | Type | Default                                | Description |\n|--------|------|----------------------------------------|-------------|\n| `selectors.trigger` | string | `'.accordion__trigger[aria-controls]'` | CSS selector for accordion trigger buttons |\n| `classes.expanded` | string | `'is-expanded'`                        | CSS class applied to expanded accordion state |\n\n### Custom Options Example\n\n```javascript\nconst accordionComponent = new Accordion(accordionElement, {\n    selectors: {\n        trigger: '.my-accordion__trigger[aria-controls]',\n    },\n    classes: {\n        expanded: 'is-open',\n    },\n});\n\naccordionComponent.init();\n```\n\n### Required HTML Attributes\n\n- `aria-expanded` on trigger button (automatically managed by the component)\n- `aria-controls` on trigger button (must match content panel's ID)\n- `id` on content panel (must match trigger's aria-controls value)\n- `aria-labelledby` on content panel (must match trigger button's ID)\n- `role=\"region\"` on content panel\n\n### Keyboard Support\n\n- `Enter` or `Space`: Toggle accordion section\n- Mouse click: Toggle accordion section\n\n## Tab Content\n\n### Features\n\n- 🌟 Fully accessible implementation\n- ⌨️ Keyboard navigation support\n- 📱 Responsive design\n- 🎨 Customizable styling\n- 🔄 Tab state management\n\n### Basic Usage\n\n**HTML**\n\n```\n<div class=\"tab-content\">\n  <div role=\"tablist\" class=\"tab-content__navigation\"></div>\n\n  <div id=\"tab-content-01\"\n       class=\"tab-content__group is-expanded\"\n       role=\"tabpanel\"\n       aria-labelledby=\"tab-tab-content-01\">\n    <button type=\"button\"\n            id=\"tab-tab-content-01\"\n            class=\"tab-content__trigger is-expanded\"\n            role=\"tab\"\n            aria-haspopup=\"true\"\n            aria-selected=\"true\"\n            aria-expanded=\"true\"\n            aria-controls=\"tab-content-01\">\n      Tab 01\n    </button>\n\n    <div class=\"tab-content__content\">\n      <p>Text content goes here - Tab 01</p>\n    </div>\n  </div>\n</div>\n```\n\n**JavaScript**\n\n```\nimport { TabContent } from '@atendesign/javascript-components';\n\ndocument.addEventListener('DOMContentLoaded', function() { \n    document.querySelectorAll('.tab-content').forEach(tabContent => {\n        const tabContentComponent = new TabContent(tabContent);\n        tabContentComponent.init();\n    });\n});\n```\n\n### Options\n\n| Option               | Type    | Default                      | Description                                         |\n|----------------------|---------|------------------------------|-----------------------------------------------------|\n| `selectors.navigation` | string  | `'.tab-content__navigation'` | CSS selector for desktop tab navigation container   |\n| `selectors.group`      | string  | `'.tab-content__group'`      | CSS selector for tab groups                         |\n| `selectors.trigger`    | string  | `'.tab-content__trigger'`    | CSS selector for tab trigger buttons                |\n| `classes.expanded`     | string  | `'is-expanded'`              | CSS class applied to expanded tabs/groups           |\n| `breakpoint`           | number  | `768`                        | Media breakpoint where tabs switch to accordions    |\n\n### Custom Options Example\n\n```javascript\nconst tabContentComponent = new TabContent(tabContentElement, {\n    selectors: {\n        navigation: '.my-tabs__navigation',\n        group: '.my-tabs__group',\n        trigger: '.my-tabs__trigger',\n    },\n    classes: {\n        expanded: 'is-open',\n    },\n    breakpoint: 1024,\n});\n\ntabContentComponent.init();\n```\n\n### Required HTML Attributes\n\n- `role=\"tablist\"` on tab container\n- `role=\"tab\"` on each tab button\n- `role=\"tabpanel\"` on each content panel\n- `aria-selected` on tab buttons (automatically managed by the component)\n- `aria-controls` on tab buttons (must match panel's ID)\n- `id` on content panels (must match tab's aria-controls value)\n- `aria-labelledby` on content panels (must match tab button's ID)\n- `tabindex` on tab buttons (automatically managed by the component)\n\n### Keyboard Support\n\n- `Arrow Left/Right`: Navigate between tabs\n- `Home`: Move to first tab\n- `End`: Move to last tab\n- `Enter` or `Space`: Activate focused tab\n- Mouse click: Activate tab\n\n## Menu\n\n### Features\n\n- 🌟 Fully accessible implementation\n- ⌨️ Keyboard navigation support\n- 📱 Responsive design (desktop/mobile state)\n- 🎨 Customizable styling\n- 🔄 Submenu expand/collapse management\n- 🖱️ Click-outside to close\n\n### Basic Usage\n\n**HTML**\n\n```html\n<nav class=\"menu\">\n  <ul class=\"menu__items\">\n    <li class=\"menu__item\">\n      <a class=\"menu__link\" href=\"#\">Home</a>\n    </li>\n    <li class=\"menu__item\">\n      <button class=\"menu__dropdown-trigger\" aria-expanded=\"false\">About</button>\n      <div class=\"menu__dropdown\">\n        <ul class=\"menu__items\">\n          <li class=\"menu__item\">\n            <a class=\"menu__link\" href=\"#\">Our Team</a>\n          </li>\n          <li class=\"menu__item\">\n            <a class=\"menu__link\" href=\"#\">Our Story</a>\n          </li>\n        </ul>\n      </div>\n    </li>\n    <li class=\"menu__item\">\n      <a class=\"menu__link\" href=\"#\">Services</a>\n    </li>\n  </ul>\n</nav>\n```\n\n**JavaScript**\n\n```javascript\nimport { Menu } from '@atendesign/javascript-components';\n\ndocument.addEventListener('DOMContentLoaded', function() {\n    document.querySelectorAll('.menu').forEach(menu => {\n        const menuComponent = new Menu(menu);\n        menuComponent.mount();\n    });\n});\n```\n\n### Options\n\n| Option | Type | Default | Description |\n|--------|------|---------|-------------|\n| `selectors.trigger` | string | `'.menu__dropdown-trigger'` | CSS selector for dropdown trigger buttons |\n| `selectors.items` | string | `'.menu__items'` | CSS selector for the menu items container |\n| `selectors.item` | string | `'.menu__item'` | CSS selector for individual menu items |\n| `selectors.link` | string | `'.menu__link'` | CSS selector for menu item links |\n| `selectors.dropdown` | string | `'.menu__dropdown'` | CSS selector for dropdown containers |\n| `classes.expanded` | string | `'is-expanded'` | CSS class applied to expanded dropdown state |\n| `breakpoint` | number | `768` | Viewport width (px) at which the menu switches between mobile and desktop behaviour |\n\n### Custom Options Example\n\n```javascript\nconst menuComponent = new Menu(menuElement, {\n    selectors: {\n        trigger: '.my-menu__dropdown-trigger',\n        items: '.my-menu__items',\n        item: '.my-menu__item',\n        link: '.my-menu__link',\n        dropdown: '.my-menu__dropdown',\n    },\n    classes: {\n        expanded: 'is-open',\n    },\n    breakpoint: 1024,\n});\n\nmenuComponent.mount();\n```\n\n### Required HTML Attributes\n\n- `aria-expanded` on dropdown trigger buttons (automatically managed by the component)\n\n### Keyboard Support\n\n| Key | Action |\n|-----|--------|\n| `Enter` or `Space` | Expand focused submenu and move focus to its first item |\n| `Arrow Down` | Expand submenu (focus first item) or move to the next sibling item |\n| `Arrow Up` | Expand submenu (focus last item) or move to the previous sibling item |\n| `Arrow Right` | When inside a submenu, collapse it and move focus to the next top-level item |\n| `Arrow Left` | When inside a submenu, collapse it and move focus to the previous top-level item |\n| `Escape` | Collapse the open submenu and return focus to its trigger |\n| `Home` | Close all submenus and focus the first top-level menu item |\n| `End` | Close all submenus and focus the last top-level menu item |\n| Mouse click | Toggle submenu / close all when clicking outside the menu |\n\n### Lifecycle Methods\n\n| Method | Description |\n|--------|-------------|\n| `mount()` | Attaches all event listeners and initialises the responsive media query |\n| `destroy()` | Removes all event listeners and cleans up the component |\n\n## Sticky\n\n### Features\n\n- 🌟 Scroll-aware positioning bounded within a parent container\n- ⚡ Optimised with `requestAnimationFrame` throttling — one update per frame\n- 📐 `ResizeObserver` keeps layout measurements accurate after DOM reflow\n- 🎨 Customizable class names and top-spacing\n- 🔄 Three-state lifecycle: `default` → `stuck` → `bottom`\n\n### Basic Usage\n\n**HTML**\n\n```html\n<div class=\"sticky-parent\">\n  <aside class=\"sticky-element\">\n    I stick within my parent!\n  </aside>\n  <div class=\"sticky-content\">\n    <!-- tall content -->\n  </div>\n</div>\n```\n\n**CSS**\n\n```css\n/* The parent receives position: relative automatically if not already set. */\n.sticky-element.is-stuck {\n  position: absolute;\n}\n\n.sticky-element.is-bottom {\n  position: absolute;\n  bottom: 0;\n}\n```\n\n**JavaScript**\n\n```javascript\nimport { Sticky } from '@atendesign/javascript-components';\n\ndocument.addEventListener('DOMContentLoaded', function() {\n    document.querySelectorAll('.is-sticky').forEach(el => {\n        const stickyComponent = new Sticky(el);\n        stickyComponent.mount();\n    });\n});\n```\n\n### Options\n\n| Option | Type | Default | Description |\n|--------|------|---------|-------------|\n| `topSpacing` | number | `40` | Gap in pixels between the viewport top and the stuck element |\n| `classes.stuck` | string | `'is-stuck'` | CSS class applied when the element is in the sticky (viewport-tracking) state |\n| `classes.bottom` | string | `'is-bottom'` | CSS class applied when the element has reached the bottom boundary of its parent |\n\n### Custom Options Example\n\n```javascript\nconst stickyComponent = new Sticky(el, {\n    topSpacing: 80,\n    classes: {\n        stuck: 'is-pinned',\n        bottom: 'is-anchored',\n    },\n});\n\nstickyComponent.mount();\n```\n\n### How It Works\n\nThe element transitions between three states as the page scrolls:\n\n| State | Condition | Description |\n|-------|-----------|-------------|\n| `default` | Before the sticky zone | Element stays in its natural document position |\n| `stuck` | Inside the sticky zone | Tracks the viewport via `position: absolute` + an inline `top` offset |\n| `bottom` | Past the parent's boundary | Anchored to the parent's bottom edge |\n\n### Lifecycle Methods\n\n| Method | Description |\n|--------|-------------|\n| `mount()` | Caches layout values, attaches scroll and resize listeners, and applies the initial state |\n| `destroy()` | Removes the scroll listener and disconnects the `ResizeObserver` |\n\n## Modal\n\n### Features\n\n- 🌟 Fully accessible implementation\n- ⌨️ Full keyboard support with focus trapping\n- 🔒 Body scroll locked while open\n- 🖱️ Overlay click to close\n- 🔄 Focus restored to the triggering element on close\n- 📌 Modal relocated to `<body>` on mount for reliable fixed positioning\n\n### Basic Usage\n\n**HTML**\n\n```html\n<button type=\"button\" aria-controls=\"my-modal\" aria-expanded=\"false\">\n  Open Modal\n</button>\n\n<div id=\"my-modal\"\n     class=\"modal\"\n     role=\"dialog\"\n     aria-modal=\"true\"\n     aria-labelledby=\"my-modal-title\"\n     aria-hidden=\"true\">\n  <div class=\"modal__overlay\">\n    <div class=\"modal__dialog\">\n      <button type=\"button\" class=\"modal__close\" aria-label=\"Close modal\">Close</button>\n      <h2 id=\"my-modal-title\">Modal Title</h2>\n      <p>Modal content goes here.</p>\n    </div>\n  </div>\n</div>\n```\n\n**JavaScript**\n\n```javascript\nimport { Modal } from '@atendesign/javascript-components';\n\ndocument.addEventListener('DOMContentLoaded', function() {\n    document.querySelectorAll('.modal').forEach(modal => {\n        const modalComponent = new Modal(modal);\n        modalComponent.mount();\n    });\n});\n```\n\n### Options\n\n| Option | Type | Default | Description |\n|--------|------|---------|-------------|\n| `selectors.trigger` | string | `'[aria-controls=\"{id}\"]'` | CSS selector for trigger buttons (scoped to the whole document) |\n| `selectors.closeButton` | string | `'.modal__close'` | CSS selector for close buttons inside the modal |\n| `selectors.overlay` | string | `'.modal__overlay'` | CSS selector for the overlay element; clicking it closes the modal |\n| `classes.expanded` | string | `'is-expanded'` | CSS class applied to the modal element when it is open |\n\n### Custom Options Example\n\n```javascript\nconst modalComponent = new Modal(modalElement, {\n    selectors: {\n        trigger: '.my-open-button',\n        closeButton: '.my-modal__close',\n        overlay: '.my-modal__overlay',\n    },\n    classes: {\n        expanded: 'is-open',\n    },\n});\n\nmodalComponent.mount();\n```\n\n### Required HTML Attributes\n\n- `id` on the modal element (must match each trigger's `aria-controls` value)\n- `role=\"dialog\"` on the modal element\n- `aria-modal=\"true\"` on the modal element\n- `aria-labelledby` on the modal element (should reference the dialog heading's ID)\n- `aria-hidden=\"true\"` on the modal element (automatically managed by the component)\n- `aria-controls` on trigger buttons (must match the modal element's ID)\n- `aria-expanded` on trigger buttons (automatically managed by the component)\n- `aria-label` or visible label on each close button\n\n### Keyboard Support\n\n| Key | Action |\n|-----|--------|\n| `Escape` | Close the modal and return focus to the triggering element |\n| `Tab` | Move focus to the next focusable element; wraps from last to first |\n| `Shift+Tab` | Move focus to the previous focusable element; wraps from first to last |\n\n### Lifecycle Methods\n\n| Method | Description |\n|--------|-------------|\n| `mount()` | Relocates the modal to `<body>`, caches internal elements, and attaches all event listeners |\n| `destroy()` | Removes all event listeners attached by `mount()` |\n","readmeFilename":"README.md"}