{"_id":"@bedlamhotel/attr-manager","_rev":"7-ca8af149559b4d15f93005761b590801","name":"@bedlamhotel/attr-manager","dist-tags":{"latest":"0.4.0"},"versions":{"0.3.0":{"name":"@bedlamhotel/attr-manager","version":"0.3.0","keywords":["html","DOM"],"author":{"name":"Christopher Torgalson"},"license":"GPL-2.0-or-later","_id":"@bedlamhotel/attr-manager@0.3.0","maintainers":[{"name":"bhotel","email":"manager@bedlamhotel.com"}],"homepage":"https://github.com/ctorgalson/attr-manager","bugs":{"url":"https://github.com/ctorgalson/attrmanager/issues"},"dist":{"shasum":"919ba37968f91a9c5e79794d82b54cc85bcfdbfa","tarball":"https://registry.npmjs.org/@bedlamhotel/attr-manager/-/attr-manager-0.3.0.tgz","fileCount":15,"integrity":"sha512-/VJk5KelnKtR+wsnJ6CSQwgycqW4Uio4qfnpH/Q7FB8OP9QQqvsRYEUprm4XUlK3aUoICLt49BYsoGUXag19KA==","signatures":[{"sig":"MEUCIQDtht+fQe9kDQgksaNROEwR/bYcagpQyPd4UzYpmnJnpQIgKjICX6O1ko/aU64hSgJpfp8JrK9RMh8n4AcA+H39f6k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":65604},"main":"dist/js/attr-manager.js","type":"module","types":"dist/js/attr-manager.d.ts","module":"dist/js/attr-manager.esm.js","exports":{".":{"types":"dist/js/attr-manager.d.ts","import":"dist/js/attr-manager.esm.js","browser":"dist/js/attr-manager.js","require":"dist/js/attr-manager.cjs"},"./*":"./*"},"gitHead":"452d6ab598caa057edd86be49537ea29e6863c46","scripts":{"dev":"vite","test":"vitest run","build":"concurrently --raw npm:build:*","start":"npm run build ; npm run watch","watch":"concurrently --kill-others --raw npm:watch:*","preview":"vite preview","build:ts":"rollup --config","watch:md":"onchange 'README.md' -- npm run build:docs","watch:ts":"onchange 'src/**/*.ts' -- concurrently --raw npm:build:ts npm:build:docs","build:docs":"typedoc --logLevel Verbose --coverageLabel 'Docs' --coverageOutputType json && node scripts/typedoc-coverage.cjs","test:watch":"vitest","test:coverage":"vitest run --coverage && node scripts/vitest-coverage.cjs","coverage:badges":"node scripts/typedoc-coverage.cjs && node scripts/vitest-coverage.cjs"},"_npmUser":{"name":"bhotel","email":"manager@bedlamhotel.com"},"repository":{"url":"git+https://github.com/ctorgalson/attrmanager.git","type":"git"},"_npmVersion":"11.12.1","description":"Utility library for toggling HTML attributes and optionally restoring them to their original values.","directories":{},"_nodeVersion":"24.15.0","_hasShrinkwrap":false,"devDependencies":{"vite":"^8.2.2","jsdom":"^30.0.1","rollup":"^4.63.0","vitest":"^4.1.11","onchange":"^7.1.0","prettier":"^3.9.6","typescript":"~6.0.2","badge-maker":"^6.0.0","concurrently":"^10.0.5","@vitest/coverage-v8":"^4.1.11","@rollup/plugin-terser":"^1.0.0","typedoc-plugin-coverage":"^4.0.3","typedoc-plugin-markdown":"^4.13.0","typedoc-plugin-mdn-links":"^5.1.1","@rollup/plugin-typescript":"^12.3.0","@rollup/plugin-node-resolve":"^16.0.3","typedoc-plugin-rename-defaults":"^0.7.3"},"_npmOperationalInternal":{"tmp":"tmp/attr-manager_0.3.0_1788129837523_0.7031060899963246","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@bedlamhotel/attr-manager","version":"0.3.1","keywords":["html","DOM"],"author":{"name":"Christopher Torgalson"},"license":"GPL-2.0-or-later","_id":"@bedlamhotel/attr-manager@0.3.1","maintainers":[{"name":"bhotel","email":"manager@bedlamhotel.com"}],"homepage":"https://github.com/ctorgalson/attr-manager","bugs":{"url":"https://github.com/ctorgalson/attrmanager/issues"},"dist":{"shasum":"550b47d3dec87ed22400ab5d7287b92d8d711dea","tarball":"https://registry.npmjs.org/@bedlamhotel/attr-manager/-/attr-manager-0.3.1.tgz","fileCount":10,"integrity":"sha512-aA/US0CZbDzhYXcuvtZ0l7Y6G/1uYDa+42MPzYNTyeG3OJ4ebo0uE1/SjxUNzYFI9NwLhIqQyw9u2lpzwRX10Q==","signatures":[{"sig":"MEQCIDfLAvSzXBnHpbCa9EGVaOB8dWHjWUqKQAw5jDok7M8tAiAMeafyvNmGTt0BaToIXUvT3S5fM9A4EOM9phBXBVluYA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":52270},"main":"dist/js/attr-manager.js","type":"module","types":"dist/js/attr-manager.d.ts","module":"dist/js/attr-manager.esm.js","exports":{".":{"types":"dist/js/attr-manager.d.ts","import":"dist/js/attr-manager.esm.js","browser":"dist/js/attr-manager.js","require":"dist/js/attr-manager.cjs"},"./*":"./*"},"gitHead":"0ef82141cfa44ae6456856ea2657bf4225b5bed5","scripts":{"dev":"vite","test":"vitest run","build":"concurrently --raw npm:build:*","start":"npm run build ; npm run watch","watch":"concurrently --kill-others --raw npm:watch:*","preview":"vite preview","build:ts":"rollup --config","watch:md":"onchange 'README.md' -- npm run build:docs","watch:ts":"onchange 'src/**/*.ts' -- concurrently --raw npm:build:ts npm:build:docs","build:docs":"typedoc --logLevel Verbose --coverageLabel 'Docs' --coverageOutputType json && node scripts/typedoc-coverage.cjs","test:watch":"vitest","test:coverage":"vitest run --coverage && node scripts/vitest-coverage.cjs","coverage:badges":"node scripts/typedoc-coverage.cjs && node scripts/vitest-coverage.cjs"},"_npmUser":{"name":"bhotel","email":"manager@bedlamhotel.com"},"repository":{"url":"git+https://github.com/ctorgalson/attrmanager.git","type":"git"},"_npmVersion":"11.17.0","description":"Utility library for toggling HTML attributes and optionally restoring them to their original values.","directories":{},"_nodeVersion":"24.19.0","_hasShrinkwrap":false,"devDependencies":{"vite":"^8.2.2","jsdom":"^30.0.1","rollup":"^4.63.0","vitest":"^4.1.11","onchange":"^7.1.0","prettier":"^3.9.6","typescript":"~6.0.2","badge-maker":"^6.0.0","concurrently":"^10.0.5","@vitest/coverage-v8":"^4.1.11","@rollup/plugin-terser":"^1.0.0","typedoc-plugin-coverage":"^4.0.3","typedoc-plugin-markdown":"^4.13.0","typedoc-plugin-mdn-links":"^5.1.1","@rollup/plugin-typescript":"^12.3.0","@rollup/plugin-node-resolve":"^16.0.3","typedoc-plugin-rename-defaults":"^0.7.3"},"_npmOperationalInternal":{"tmp":"tmp/attr-manager_0.3.1_1788130936880_0.5384965791698664","host":"s3://npm-registry-packages-npm-production"}},"0.3.2":{"name":"@bedlamhotel/attr-manager","version":"0.3.2","keywords":["html","DOM"],"author":{"name":"Christopher Torgalson"},"license":"GPL-2.0-or-later","_id":"@bedlamhotel/attr-manager@0.3.2","maintainers":[{"name":"bhotel","email":"manager@bedlamhotel.com"}],"homepage":"https://github.com/ctorgalson/attr-manager","bugs":{"url":"https://github.com/ctorgalson/attrmanager/issues"},"dist":{"shasum":"e33f3da52f5ffe59b3b0bbe4e3fe42b4699e3a4b","tarball":"https://registry.npmjs.org/@bedlamhotel/attr-manager/-/attr-manager-0.3.2.tgz","fileCount":10,"integrity":"sha512-/2/CKogU/SJ3EfapgXESmL1r1z4zQmGVLQ0lQCCgRL4yIX5+JOuNapfYGhNhyc9JyIYwRsLXqWka+4NtInuDLQ==","signatures":[{"sig":"MEUCIQC5TjYcp/tuFXb6PxfirjnfhVPQlnM5vZREdbVdXywkDwIgZfJz9CYBU6CLUZBl59wAWOsijkDly/GYE9IZxMQyIuI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":52678},"main":"dist/js/attr-manager.js","type":"module","types":"dist/js/attr-manager.d.ts","module":"dist/js/attr-manager.esm.js","exports":{".":{"types":"dist/js/attr-manager.d.ts","import":"dist/js/attr-manager.esm.js","browser":"dist/js/attr-manager.js","require":"dist/js/attr-manager.cjs"},"./*":"./*"},"gitHead":"04bd5b210e6f40eee0e5478b5e7690f4f2e564e2","scripts":{"dev":"vite","test":"vitest run","build":"concurrently --raw npm:build:*","start":"npm run build ; npm run watch","watch":"concurrently --kill-others --raw npm:watch:*","preview":"vite preview","build:ts":"rollup --config","watch:md":"onchange 'README.md' -- npm run build:docs","watch:ts":"onchange 'src/**/*.ts' -- concurrently --raw npm:build:ts npm:build:docs","build:docs":"typedoc --logLevel Verbose --coverageLabel 'Docs' --coverageOutputType json && node scripts/typedoc-coverage.cjs","test:watch":"vitest","test:coverage":"vitest run --coverage && node scripts/vitest-coverage.cjs","coverage:badges":"node scripts/typedoc-coverage.cjs && node scripts/vitest-coverage.cjs"},"_npmUser":{"name":"bhotel","email":"manager@bedlamhotel.com"},"repository":{"url":"git+https://github.com/ctorgalson/attrmanager.git","type":"git"},"_npmVersion":"11.17.0","description":"Utility library for toggling HTML attributes and optionally restoring them to their original values.","directories":{},"_nodeVersion":"24.19.0","_hasShrinkwrap":false,"devDependencies":{"vite":"^8.2.2","jsdom":"^30.0.1","rollup":"^4.63.0","vitest":"^4.1.11","onchange":"^7.1.0","prettier":"^3.9.6","typescript":"~6.0.2","badge-maker":"^6.0.0","concurrently":"^10.0.5","@vitest/coverage-v8":"^4.1.11","@rollup/plugin-terser":"^1.0.0","typedoc-plugin-coverage":"^4.0.3","typedoc-plugin-markdown":"^4.13.0","typedoc-plugin-mdn-links":"^5.1.1","@rollup/plugin-typescript":"^12.3.0","@rollup/plugin-node-resolve":"^16.0.3","typedoc-plugin-rename-defaults":"^0.7.3"},"_npmOperationalInternal":{"tmp":"tmp/attr-manager_0.3.2_1788131249070_0.3224875111863976","host":"s3://npm-registry-packages-npm-production"}},"0.3.3":{"name":"@bedlamhotel/attr-manager","version":"0.3.3","keywords":["html","DOM"],"author":{"name":"Christopher Torgalson"},"license":"GPL-2.0-or-later","_id":"@bedlamhotel/attr-manager@0.3.3","maintainers":[{"name":"bhotel","email":"manager@bedlamhotel.com"}],"homepage":"https://github.com/ctorgalson/attr-manager","bugs":{"url":"https://github.com/ctorgalson/attr-manager/issues"},"dist":{"shasum":"fba4ead0359c5973fe8bf721990acb56dfe9cdfb","tarball":"https://registry.npmjs.org/@bedlamhotel/attr-manager/-/attr-manager-0.3.3.tgz","fileCount":10,"integrity":"sha512-jK17vvmuWgt6I7CpMpFFNvlU9EFtELJt0cLYzn99H1PllN6f801P1qFKnYpYYonM7BuZZrOrh62aX6QattZF4Q==","signatures":[{"sig":"MEQCIGkb+Y2jv5RvJSG1xYLvJYqrEWkfS4Th2tvlloR7MrBlAiAHYYvMO6GqQ0RjeLmHnWEZ6wNOqofFUZUGtkO5W8aCCg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":52671},"main":"dist/js/attr-manager.js","type":"module","types":"dist/js/attr-manager.d.ts","module":"dist/js/attr-manager.esm.js","exports":{".":{"types":"dist/js/attr-manager.d.ts","import":"dist/js/attr-manager.esm.js","browser":"dist/js/attr-manager.js","require":"dist/js/attr-manager.cjs"},"./*":"./*"},"gitHead":"746408d06e5ceb5fad2eaa12aaf4a1fa6f7be634","scripts":{"dev":"vite","test":"vitest run","build":"concurrently --raw npm:build:*","start":"npm run build ; npm run watch","watch":"concurrently --kill-others --raw npm:watch:*","preview":"vite preview","build:ts":"rollup --config","watch:md":"onchange 'README.md' -- npm run build:docs","watch:ts":"onchange 'src/**/*.ts' -- concurrently --raw npm:build:ts npm:build:docs","build:docs":"typedoc --logLevel Verbose --coverageLabel 'Docs' --coverageOutputType json && node scripts/typedoc-coverage.cjs","test:watch":"vitest","test:coverage":"vitest run --coverage && node scripts/vitest-coverage.cjs","coverage:badges":"node scripts/typedoc-coverage.cjs && node scripts/vitest-coverage.cjs"},"_npmUser":{"name":"bhotel","email":"manager@bedlamhotel.com"},"repository":{"url":"git+https://github.com/ctorgalson/attr-manager.git","type":"git"},"_npmVersion":"11.17.0","description":"Utility library for toggling HTML attributes and optionally restoring them to their original values.","directories":{},"_nodeVersion":"24.19.0","_hasShrinkwrap":false,"devDependencies":{"vite":"^8.2.2","jsdom":"^30.0.1","rollup":"^4.63.0","vitest":"^4.1.11","onchange":"^7.1.0","prettier":"^3.9.6","typescript":"~6.0.2","badge-maker":"^6.0.0","concurrently":"^10.0.5","@vitest/coverage-v8":"^4.1.11","@rollup/plugin-terser":"^1.0.0","typedoc-plugin-coverage":"^4.0.3","typedoc-plugin-markdown":"^4.13.0","typedoc-plugin-mdn-links":"^5.1.1","@rollup/plugin-typescript":"^12.3.0","@rollup/plugin-node-resolve":"^16.0.3","typedoc-plugin-rename-defaults":"^0.7.3"},"_npmOperationalInternal":{"tmp":"tmp/attr-manager_0.3.3_1788131517846_0.3900560096013539","host":"s3://npm-registry-packages-npm-production"}},"0.3.4":{"name":"@bedlamhotel/attr-manager","version":"0.3.4","keywords":["html","DOM"],"author":{"name":"Christopher Torgalson"},"license":"GPL-2.0-or-later","_id":"@bedlamhotel/attr-manager@0.3.4","maintainers":[{"name":"bhotel","email":"manager@bedlamhotel.com"}],"homepage":"https://github.com/ctorgalson/attr-manager","bugs":{"url":"https://github.com/ctorgalson/attr-manager/issues"},"dist":{"shasum":"18413c63c66bab994d8dd7d4eb2a289c579b56be","tarball":"https://registry.npmjs.org/@bedlamhotel/attr-manager/-/attr-manager-0.3.4.tgz","fileCount":10,"integrity":"sha512-6XtMRw0KTpDYHlW6gU45nlRuLOgLFI4Cfc5bM3LARjt8OiFJ4VGvyuL4R59XSoqk62/Cws4Ok9i40DZqWlRJSQ==","signatures":[{"sig":"MEYCIQDtX4U7AvR46oddKZXuEo8KhzTP6V8kv3+kuKWEmoF1DQIhAMQl7ebIfS0HuH/fy6/Mhk226yGFyMHfNWbglURwGlOe","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":52727},"main":"dist/js/attr-manager.js","type":"module","types":"dist/js/attr-manager.d.ts","module":"dist/js/attr-manager.esm.js","exports":{".":{"types":"dist/js/attr-manager.d.ts","import":"dist/js/attr-manager.esm.js","browser":"dist/js/attr-manager.js","require":"dist/js/attr-manager.cjs"},"./*":"./*"},"gitHead":"2525d398416d2fe3ea2bd7ec23123821d1f4ceb7","scripts":{"dev":"vite","test":"vitest run","build":"concurrently --raw npm:build:*","start":"npm run build ; npm run watch","watch":"concurrently --kill-others --raw npm:watch:*","preview":"vite preview","build:ts":"rollup --config","watch:md":"onchange 'README.md' -- npm run build:docs","watch:ts":"onchange 'src/**/*.ts' -- concurrently --raw npm:build:ts npm:build:docs","build:docs":"typedoc --logLevel Verbose --coverageLabel 'Docs' --coverageOutputType json && node scripts/typedoc-coverage.cjs","test:watch":"vitest","test:coverage":"vitest run --coverage && sed -i \"s|$(pwd)/||g\" coverage/coverage-summary.json && node scripts/vitest-coverage.cjs","coverage:badges":"node scripts/typedoc-coverage.cjs && node scripts/vitest-coverage.cjs"},"_npmUser":{"name":"bhotel","email":"manager@bedlamhotel.com"},"repository":{"url":"git+https://github.com/ctorgalson/attr-manager.git","type":"git"},"_npmVersion":"11.17.0","description":"Utility library for toggling HTML attributes and optionally restoring them to their original values.","directories":{},"_nodeVersion":"24.19.0","_hasShrinkwrap":false,"devDependencies":{"vite":"^8.2.2","jsdom":"^30.0.1","rollup":"^4.63.0","vitest":"^4.1.11","onchange":"^7.1.0","prettier":"^3.9.6","typescript":"~6.0.2","badge-maker":"^6.0.0","concurrently":"^10.0.5","@vitest/coverage-v8":"^4.1.11","@rollup/plugin-terser":"^1.0.0","typedoc-plugin-coverage":"^4.0.3","typedoc-plugin-markdown":"^4.13.0","typedoc-plugin-mdn-links":"^5.1.1","@rollup/plugin-typescript":"^12.3.0","@rollup/plugin-node-resolve":"^16.0.3","typedoc-plugin-rename-defaults":"^0.7.3"},"_npmOperationalInternal":{"tmp":"tmp/attr-manager_0.3.4_1788131973816_0.20667679583972176","host":"s3://npm-registry-packages-npm-production"}},"0.3.5":{"name":"@bedlamhotel/attr-manager","version":"0.3.5","keywords":["html","DOM"],"author":{"name":"Christopher Torgalson"},"license":"GPL-2.0-or-later","_id":"@bedlamhotel/attr-manager@0.3.5","maintainers":[{"name":"bhotel","email":"manager@bedlamhotel.com"}],"homepage":"https://github.com/ctorgalson/attr-manager","bugs":{"url":"https://github.com/ctorgalson/attr-manager/issues"},"dist":{"shasum":"26a8fc14f0bf77204eee53cf89bf0606e2d61d84","tarball":"https://registry.npmjs.org/@bedlamhotel/attr-manager/-/attr-manager-0.3.5.tgz","fileCount":10,"integrity":"sha512-Jv0wQFcobLOjq9p8TTfVeyoOBkSHH2BI9eTXVKCEG2ahayrwYBcaX/YATdJ9r+T7D+Gr4J17sDb3/9+urScwKw==","signatures":[{"sig":"MEQCIFF0y5RE00P9euyhpsFQt5k+Zdj07AC5rYyexJPTNu1JAiAyVLHv5Ap31i0JJEZ9zS37OvgjycLF3WOfoxx3UiKq+Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":53565},"main":"dist/js/attr-manager.js","type":"module","types":"dist/js/attr-manager.d.ts","module":"dist/js/attr-manager.esm.js","exports":{".":{"types":"dist/js/attr-manager.d.ts","import":"dist/js/attr-manager.esm.js","browser":"dist/js/attr-manager.js","require":"dist/js/attr-manager.cjs"},"./*":"./*"},"gitHead":"00a7ca4893c2605f017dfcb9907b4e5f453ba980","scripts":{"dev":"vite","test":"vitest run","build":"concurrently --raw npm:build:*","start":"npm run build ; npm run watch","watch":"concurrently --kill-others --raw npm:watch:*","preview":"vite preview","build:ts":"rollup --config","watch:md":"onchange 'README.md' -- npm run build:docs","watch:ts":"onchange 'src/**/*.ts' -- concurrently --raw npm:build:ts npm:build:docs","build:docs":"typedoc --logLevel Verbose --coverageLabel 'Docs' --coverageOutputType json && node scripts/typedoc-coverage.cjs","test:watch":"vitest","test:coverage":"vitest run --coverage && sed -i \"s|$(pwd)/||g\" coverage/coverage-summary.json && node scripts/vitest-coverage.cjs","coverage:badges":"node scripts/typedoc-coverage.cjs && node scripts/vitest-coverage.cjs"},"_npmUser":{"name":"bhotel","email":"manager@bedlamhotel.com"},"repository":{"url":"git+https://github.com/ctorgalson/attr-manager.git","type":"git"},"_npmVersion":"11.17.0","description":"Utility library for toggling HTML attributes and optionally restoring them to their original values.","directories":{},"_nodeVersion":"24.19.0","_hasShrinkwrap":false,"devDependencies":{"vite":"^8.2.2","jsdom":"^30.0.1","rollup":"^4.63.0","vitest":"^4.1.11","onchange":"^7.1.0","prettier":"^3.9.6","typescript":"~6.0.2","badge-maker":"^6.0.0","concurrently":"^10.0.5","@vitest/coverage-v8":"^4.1.11","@rollup/plugin-terser":"^1.0.0","typedoc-plugin-coverage":"^4.0.3","typedoc-plugin-markdown":"^4.13.0","typedoc-plugin-mdn-links":"^5.1.1","@rollup/plugin-typescript":"^12.3.0","@rollup/plugin-node-resolve":"^16.0.3","typedoc-plugin-rename-defaults":"^0.7.3"},"_npmOperationalInternal":{"tmp":"tmp/attr-manager_0.3.5_1788132339418_0.29172924715437665","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@bedlamhotel/attr-manager","type":"module","version":"0.4.0","description":"Utility library for toggling HTML attributes and optionally restoring them to their original values.","homepage":"https://github.com/ctorgalson/attr-manager","license":"GPL-2.0-or-later","main":"dist/js/attr-manager.js","module":"dist/js/attr-manager.esm.js","types":"dist/js/attr-manager.d.ts","exports":{".":{"import":"./dist/js/attr-manager.esm.js","browser":"./dist/js/attr-manager.js","require":"./dist/js/attr-manager.cjs","types":"./dist/js/attr-manager.d.ts"},"./*":"./*"},"keywords":["html","DOM"],"author":{"name":"Christopher Torgalson"},"repository":{"type":"git","url":"git+https://github.com/ctorgalson/attr-manager.git"},"scripts":{"dev":"vite","preview":"vite preview","build":"concurrently --raw npm:build:*","build:docs":"typedoc --logLevel Verbose --coverageLabel 'Docs' --coverageOutputType json && node scripts/typedoc-coverage.cjs","build:ts":"rollup --config","start":"npm run build ; npm run watch","test":"vitest run","test:coverage":"vitest run --coverage && sed -i \"s|$(pwd)/||g\" coverage/coverage-summary.json && node scripts/vitest-coverage.cjs","test:watch":"vitest","coverage:badges":"node scripts/typedoc-coverage.cjs && node scripts/vitest-coverage.cjs","watch":"concurrently --kill-others --raw npm:watch:*","watch:md":"onchange 'README.md' -- npm run build:docs","watch:ts":"onchange 'src/**/*.ts' -- concurrently --raw npm:build:ts npm:build:docs"},"devDependencies":{"@rollup/plugin-terser":"^1.0.0","@rollup/plugin-typescript":"^12.3.0","@vitest/coverage-v8":"^4.1.11","badge-maker":"^6.0.0","concurrently":"^10.0.5","jsdom":"^30.0.1","onchange":"^7.1.0","prettier":"^3.9.6","rollup":"^4.63.0","typedoc-plugin-coverage":"^4.0.3","typedoc-plugin-markdown":"^4.13.0","typedoc-plugin-mdn-links":"^5.1.1","typedoc-plugin-rename-defaults":"^0.7.3","typescript":"~6.0.2","vite":"^8.2.2","vitest":"^4.1.11","@rollup/plugin-node-resolve":"^16.0.3"},"gitHead":"c8a6d44bba3e185dac8241724db9e9917f68f4ed","_id":"@bedlamhotel/attr-manager@0.4.0","bugs":{"url":"https://github.com/ctorgalson/attr-manager/issues"},"_nodeVersion":"24.19.0","_npmVersion":"11.17.0","dist":{"integrity":"sha512-+lSLgHE0SCWTljzTP+X5mRwXHt+wR1c51+SM0zzzQ5UXcotAPOF4cctYe0QPJcxmBJAHplU+dR4tgFIc+YGy9w==","shasum":"3eb9e3c826aaf45552b77303dafd9027e15cf730","tarball":"https://registry.npmjs.org/@bedlamhotel/attr-manager/-/attr-manager-0.4.0.tgz","fileCount":10,"unpackedSize":53573,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQD8vklDj6VpZrphumTHTfWxuhrqBUQubPbftUUthG/AFwIgB1cMOfrlDZaAgLuZzaHoLM9hRCANRSFniJ+gVlqZ9sA="}]},"_npmUser":{"name":"bhotel","email":"manager@bedlamhotel.com"},"directories":{},"maintainers":[{"name":"bhotel","email":"manager@bedlamhotel.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/attr-manager_0.4.0_1788147499831_0.8165423774863731"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-30T22:43:57.366Z","modified":"2026-08-31T03:38:20.171Z","0.3.0":"2026-08-30T22:43:57.662Z","0.3.1":"2026-08-30T23:02:17.024Z","0.3.2":"2026-08-30T23:07:29.218Z","0.3.3":"2026-08-30T23:11:57.986Z","0.3.4":"2026-08-30T23:19:33.943Z","0.3.5":"2026-08-30T23:25:39.549Z","0.4.0":"2026-08-31T03:38:19.968Z"},"bugs":{"url":"https://github.com/ctorgalson/attr-manager/issues"},"author":{"name":"Christopher Torgalson"},"license":"GPL-2.0-or-later","homepage":"https://github.com/ctorgalson/attr-manager","keywords":["html","DOM"],"repository":{"type":"git","url":"git+https://github.com/ctorgalson/attr-manager.git"},"description":"Utility library for toggling HTML attributes and optionally restoring them to their original values.","maintainers":[{"name":"bhotel","email":"manager@bedlamhotel.com"}],"readme":"# AttrManager\n\n## Test coverage\n\n- documentation: <img src=\"https://raw.githubusercontent.com/ctorgalson/attr-manager/main/docs/coverage.svg\" alt=\"Documentation coverage\">\n- branches: <img src=\"https://raw.githubusercontent.com/ctorgalson/attr-manager/main/coverage/branches.svg\" alt=\"Test coverage: branches\">\n- functions: <img src=\"https://raw.githubusercontent.com/ctorgalson/attr-manager/main/coverage/functions.svg\" alt=\"Test coverage: functions\">\n- lines: <img src=\"https://raw.githubusercontent.com/ctorgalson/attr-manager/main/coverage/lines.svg\" alt=\"Test coverage: lines\">\n- statements: <img src=\"https://raw.githubusercontent.com/ctorgalson/attr-manager/main/coverage/statements.svg\" alt=\"Test coverage: statements\">\n\nA TypeScript class for managing HTMLElement attribute values based on a boolean\n`currentState`. Automatically handles attribute toggling, restoration to original\nDOM state, and lifecycle cleanup.\n\n## Documentation\n\nFor detailed API documentation and reference, see:\n\n- [Full API Reference](https://github.com/ctorgalson/attr-manager/blob/main/docs/README.md)\n- [Class: AttrManager](https://github.com/ctorgalson/attr-manager/blob/main/docs/classes/AttrManager.md)\n- [Constructor Options](https://github.com/ctorgalson/attr-manager/blob/main/docs/classes/AttrManager.md#constructor)\n- [Methods](https://github.com/ctorgalson/attr-manager/blob/main/docs/classes/AttrManager.md#methods)\n\n## Installation\n\n```bash\nnpm install @bedlamhotel/attr-manager\n```\n\n## Basic Usage\n\n```typescript\nimport AttrManager from '@bedlamhotel/attr-manager';\n\nconst manager = new AttrManager(element, {\n  'data-active': {\n    whenTrue: 'true',\n    whenFalse: null,\n    initial: 'whenTrue'\n  }\n});\n\n// Toggle the attributes\nmanager.toggle();\nmanager.toggle(false);\nmanager.toggle(true);\n\n// Restore to original DOM state\nmanager.restore();\n```\n\n## Examples\n\n### Multiple Attributes Per Instance\n\nManage multiple related attributes together - useful for components like\ncarousel slides:\n\n```typescript\nconst slideElement = document.querySelector('[data-slide]') as HTMLElement;\n\nconst slideAttrs = new AttrManager(slideElement, {\n  'tabindex': {\n    whenTrue: '0',      // Focusable when active\n    whenFalse: '-1',    // Not focusable when inactive\n    initial: 'whenTrue' // Start focused\n  },\n  'aria-current': {\n    whenTrue: 'page',   // Mark current slide\n    whenFalse: null,    // Remove attribute when not current\n    initial: 'whenTrue' // Start as current slide\n  },\n  'data-hidden': {\n    whenTrue: 'false',\n    whenFalse: 'true',\n    initial: 'whenFalse' // Hide by default\n  }\n});\n\n// When switching to next slide:\nactiveSlide.destroy();        // Clean up previous slide\nslideAttrs.toggle(false);     // Deactivate old slide\nnewSlideAttrs.toggle(true);   // Activate new slide\n```\n\n### Boolean-Style Attributes\n\nHandle attributes that are present/absent rather than value-based:\n\n```typescript\nconst checkbox = document.querySelector('input[type=\"checkbox\"]') as HTMLInputElement;\n\nconst checkedState = new AttrManager(checkbox, {\n  'checked': {\n    whenTrue: '',       // Empty string means attribute is present (boolean)\n    whenFalse: null,    // null removes the attribute\n    initial: null       // No \"initial\" key - don't set at construction\n  }\n});\n\n// Manually check/uncheck the box\ncheckedState.toggle();           // Check\ncheckedState.toggle(false);      // Uncheck\n\n// Or use explicit booleans\ncheckedState.toggle(true);       // Check\ncheckedState.toggle(false);      // Uncheck\n```\n\nAnother example with `hidden`:\n\n```typescript\nconst dialog = document.querySelector('.modal-dialog') as HTMLElement;\n\nconst hiddenState = new AttrManager(dialog, {\n  'hidden': {\n    whenTrue: '',    // Attribute present = visible state\n    whenFalse: null, // Attribute removed = hidden state\n    initial: null    // Start based on existing DOM state\n  }\n});\n```\n\n### Global DOM Restoration via Restorers Array\n\nTrack multiple managers and restore all at once (e.g., responsive mode change):\n\n```typescript\n// Create a shared restorer array\nconst globalRestorers: RestorerEntry[] = [];\n\n// Register managers with the same restorer array\nconst slide1Attrs = new AttrManager(\n  slide1Element,\n  {\n    tabindex: { whenTrue: '0', whenFalse: '-1', initial: 'whenTrue' },\n    'aria-selected': { whenTrue: 'true', whenFalse: 'false', initial: 'whenTrue' }\n  },\n  globalRestorers\n);\n\nconst slide2Attrs = new AttrManager(\n  slide2Element,\n  {\n    tabindex: { whenTrue: '0', whenFalse: '-1', initial: 'whenFalse' }\n  },\n  globalRestorers\n);\n\n// Later - restore entire carousel to original state\nglobalRestorers.forEach(({ restore }) => restore());\n\n// Or selectively destroy specific managers while keeping others\nslide1Attrs.destroy();  // Removes from restorers, clears internal state\nglobalRestorers.forEach(({ restore }) => restore());  // Remaining restored\n```\n\n**Note:** By default, `restore()` on a restorer entry does NOT call `destroy()` -\nit only reverts DOM changes, keeping the manager usable. To also destroy:\n\n```typescript\n// Restore and destroy this specific manager\nslide1Attrs.restore(true);  // Teardown = true\n\n// Or call destroy explicitly\nslide1Attrs.destroy();\n```\n\n### Single Instance DOM Restoration\n\n#### With Automatic Cleanup (Default)\n\n```typescript\nconst slider = new AttrManager(element, {\n  'aria-hidden': {\n    whenTrue: 'false',\n    whenFalse: 'true',\n    initial: 'whenTrue'\n  }\n});\n\n// Do some work...\n\n// Default behavior: restore DOM without clearing internal state\nslider.restore();  // Same as slider.restore(false)\n// Can still toggle after restore:\nslider.toggle(true);\nslider.toggle(false);\n```\n\n#### With Cleanup (Teardown)\n\n```typescript\nconst slider = new AttrManager(element, {\n  'aria-hidden': {\n    whenTrue: 'false',\n    whenFalse: 'true',\n    initial: 'whenTrue'\n  }\n});\n\n// Do some work...\n\n// Restore DOM AND clear internal state\nslider.restore(true);\n// Manager is now unusable (internal state cleared)\n```\n\n#### Explicit Destroy Without Restore\n\n```typescript\nconst slider = new AttrManager(element, {\n  'aria-hidden': {\n    whenTrue: 'false',\n    whenFalse: 'true',\n    initial: 'whenTrue'\n  }\n});\n\n// Current state: aria-hidden=\"false\"\n\n// Just clear internal state - DOM stays as-is\nslider.destroy();\n// aria-hidden is still \"false\", but manager internals are gone\n// This is rare - typically you'd restore first, then destroy\n```\n\n### Independent `destroy()` Usage\n\nWhen you have a reference but no restorer array:\n\n```typescript\n// No restorers provided\nconst standalone = new AttrManager(element, {\n  'data-state': {\n    whenTrue: 'active',\n    whenFalse: 'inactive',\n    initial: 'active'\n  }\n});\n\nstandalone.toggle(false);  // data-state=\"inactive\"\n\n// When done, just destroy - no global cleanup needed\nstandalone.destroy();\n// Internal state cleared, but no automatic restorer removal (none registered)\n```\n\n## API Reference\n\n### Types\n\n```typescript\ntype AttrInitialValue = \"whenTrue\" | \"whenFalse\" | null;  // See: [AttrInitialValue](https://github.com/ctorgalson/attr-manager/blob/main/docs/type-aliases/AttrInitialValue.md)\n\ninterface AttrConfig {  // See: [AttrConfig](https://github.com/ctorgalson/attr-manager/blob/main/docs/type-aliases/AttrConfig.md)\n  [key: string]: {\n    whenTrue: string | null;\n    whenFalse?: string | null;\n    initial?: AttrInitialValue;\n    fixed?: boolean;  // Skip this attribute during toggle()\n  };\n}\n```\n\n### Constructor Options\n\n```typescript\nconstructor(\n  el: HTMLElement,\n  config: AttrConfig,\n  restorers?: RestorerEntry[],\n)\n```\n\n| Parameter   | Description                                              |\n| ----------- | -------------------------------------------------------- |\n| [`el`](https://github.com/ctorgalson/attr-manager/blob/main/docs/classes/AttrManager.md#constructor)        | The element to manage attributes on                      |\n| [`config`](https://github.com/ctorgalson/attr-manager/blob/main/docs/classes/AttrManager.md#constructor)    | Configuration object mapping attribute names ([AttrConfig](https://github.com/ctorgalson/attr-manager/blob/main/docs/type-aliases/AttrConfig.md)) |\n| [`restorers`](https://github.com/ctorgalson/attr-manager/blob/main/docs/classes/AttrManager.md#constructor) | Optional array for tracking managers ([RestorerEntry](https://github.com/ctorgalson/attr-manager/blob/main/docs/interfaces/RestorerEntry.md)) |\n\n### Methods\n\n| Method          | Signature                | Description                              |\n| --------------- | ------------------------ | ---------------------------------------- |\n| [`toggle()`](https://github.com/ctorgalson/attr-manager/blob/main/docs/classes/AttrManager.md#toggle)  | `(condition?: boolean)`  | Toggle all managed attributes            |\n| [`restore()`](https://github.com/ctorgalson/attr-manager/blob/main/docs/classes/AttrManager.md#restore)| `(teardown?: boolean)`   | Revert to original DOM state             |\n| [`destroy()`](https://github.com/ctorgalson/attr-manager/blob/main/docs/classes/AttrManager.md#destroy)| `()`                     | Clear internal state and remove if regen |\n\n### Lifecycle Flow\n\n```\n┌─────────────────┐\n│  constructor()  │ → Captures original DOM state\n│                 │ → Applies initial values\n│                 │ → Optionally registers in restorers\n└────────┬────────┘\n         │\n         ├─────────────→ toggle() → Change all managed attributes\n         │\n         ├─────────────→ restore([teardown]) → Revert to originals\n         │                         └── teardown=true: also destroy\n         │\n         └─────────────→ destroy() → Clear state + self-remove\n```\n\n## Error Handling\n\nInvalid configurations throw descriptive errors:\n\n```typescript\n// Missing required whenTrue field\nnew AttrManager(el, {\n  myAttr: {\n    whenFalse: 'x',  // ❌ Error: must supply a `whenTrue` value\n    initial: 'whenTrue'\n  }\n});\n\n// Invalid initial value\nnew AttrManager(el, {\n  myAttr: {\n    whenTrue: 'a',\n    whenFalse: 'b',\n    initial: 'invalid'  // ❌ Error: must be one of whenTrue, whenFalse, or null\n  }\n});\n```\n\n## Best Practices\n\n1. **Group related attributes** - Use one manager per logical unit (e.g., a\n   carousel slide)\n2. **Use `fixed: true` sparingly** - Only when certain attributes should never\n   toggle\n3. **Clean up properly** - Call `destroy()` when removing from DOM, or let\n   global restorers handle it\n4. **Consider boolean semantics** - `null` removes the attribute, empty string\n   `''` adds it (for boolean attrs)\n","readmeFilename":"README.md"}