{"_id":"@a13y/react","_rev":"8-705b9e6cb4a9dabb1c2ad1971e61a877","name":"@a13y/react","dist-tags":{"latest":"0.1.6"},"versions":{"0.1.0":{"name":"@a13y/react","version":"0.1.0","keywords":["accessibility","a11y","react","hooks","components","wcag","aria","focus-trap","keyboard-navigation","typescript","type-safe"],"author":{"url":"https://github.com/DiegoAneli","name":"Diego Aneli"},"license":"MIT","_id":"@a13y/react@0.1.0","maintainers":[{"name":"diegoaneli","email":"diegoaneli@gmail.com"}],"homepage":"https://github.com/a13y/a13y#readme","bugs":{"url":"https://github.com/a13y/a13y/issues"},"dist":{"shasum":"d9e5504d030ab33e64db2e33f1f86145e8bb8be9","tarball":"https://registry.npmjs.org/@a13y/react/-/react-0.1.0.tgz","fileCount":16,"integrity":"sha512-nc9n1v9K20FDWtLnSOYO+6bTaouWB34JT/uAzHLnvj4JDRgu/+ABgS0VdDeCuT3w6O4HvalQTiRKj9mExa00og==","signatures":[{"sig":"MEQCICoupMToKYXK5sovGdcDxWmWc2A2coaOYNEzz2zkOrTxAiAQnoT3SBRF/BtZTKdGE674F/Rzdnv90ewQHvyqwofnSA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":564645},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./hooks":{"types":"./dist/hooks/index.d.ts","import":"./dist/hooks/index.js","default":"./dist/hooks/index.js"},"./patterns":{"types":"./dist/patterns/index.d.ts","import":"./dist/patterns/index.js","default":"./dist/patterns/index.js"},"./components":{"types":"./dist/components/index.d.ts","import":"./dist/components/index.js","default":"./dist/components/index.js"},"./package.json":"./package.json"},"gitHead":"98b27473d5e1c1bb8782c3be1d1874d7ce4fb61c","scripts":{"dev":"tsup --watch","test":"vitest","build":"tsup","typecheck":"tsc --noEmit","prepublishOnly":"pnpm build"},"_npmUser":{"name":"diegoaneli","email":"diegoaneli@gmail.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","repository":{"url":"git+https://github.com/a13y/a13y.git","type":"git","directory":"packages/react"},"_npmVersion":"10.9.3","description":"Runtime-enforced React hooks and components for accessibility","directories":{},"sideEffects":false,"_nodeVersion":"22.20.0","dependencies":{"@a13y/core":"workspace:*"},"publishConfig":{"access":"public","dependencies":{"@a13y/core":"^0.1.0"}},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","react":"^19.0.0","vitest":"^4.0.16","@types/node":"^25.0.3","@types/react":"^19.2.7","@a13y/devtools":"workspace:*"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","@a13y/devtools":"^0.1.0"},"peerDependenciesMeta":{"@a13y/devtools":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/react_0.1.0_1767382852574_0.9926019196298517","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@a13y/react","version":"0.1.1","keywords":["accessibility","a11y","react","hooks","components","wcag","aria","focus-trap","keyboard-navigation","typescript","type-safe"],"author":{"url":"https://github.com/DiegoAneli","name":"Diego Aneli"},"license":"MIT","_id":"@a13y/react@0.1.1","maintainers":[{"name":"diegoaneli","email":"diegoaneli@gmail.com"}],"homepage":"https://github.com/DiegoAneli/a13y#readme","bugs":{"url":"https://github.com/DiegoAneli/a13y/issues"},"dist":{"shasum":"6d9e2e7d8b78543648d9b35448e22b397abc5b3f","tarball":"https://registry.npmjs.org/@a13y/react/-/react-0.1.1.tgz","fileCount":16,"integrity":"sha512-6STlh/BA97agSLb7Q7pu2Lorc0/r0YngJa6aOWivjchbGCMI+QLPC0nQebCK6d1UOyh/WI0rjNeQPQS7TZtcGQ==","signatures":[{"sig":"MEYCIQCTCJwDhda2yAxP5kEVpPYjgChm2fLbUjr9pU3LhRm74AIhAKcskC8uDoRAlhhFN6Hya3NexbRm2yONEfoHafKww1dI","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":564486},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./hooks":{"types":"./dist/hooks/index.d.ts","import":"./dist/hooks/index.js","default":"./dist/hooks/index.js"},"./patterns":{"types":"./dist/patterns/index.d.ts","import":"./dist/patterns/index.js","default":"./dist/patterns/index.js"},"./components":{"types":"./dist/components/index.d.ts","import":"./dist/components/index.js","default":"./dist/components/index.js"},"./package.json":"./package.json"},"gitHead":"98b27473d5e1c1bb8782c3be1d1874d7ce4fb61c","scripts":{"dev":"tsup --watch","test":"vitest","build":"tsup","typecheck":"tsc --noEmit","prepublishOnly":"pnpm build"},"_npmUser":{"name":"diegoaneli","email":"diegoaneli@gmail.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","repository":{"url":"git+https://github.com/DiegoAneli/a13y.git","type":"git","directory":"packages/react"},"_npmVersion":"10.9.3","description":"Runtime-enforced React hooks and components for accessibility","directories":{},"sideEffects":false,"_nodeVersion":"22.20.0","dependencies":{"@a13y/core":"workspace:*"},"publishConfig":{"access":"public","dependencies":{"@a13y/core":"^0.1.0"}},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","react":"^19.0.0","vitest":"^4.0.16","@types/node":"^25.0.3","@types/react":"^19.2.7","@a13y/devtools":"workspace:*"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","@a13y/devtools":"^0.1.0"},"peerDependenciesMeta":{"@a13y/devtools":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/react_0.1.1_1767391628344_0.10751549294427232","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@a13y/react","version":"0.1.2","keywords":["accessibility","a11y","react","hooks","components","wcag","aria","focus-trap","keyboard-navigation","typescript","type-safe"],"author":{"url":"https://github.com/DiegoAneli","name":"Diego Aneli"},"license":"MIT","_id":"@a13y/react@0.1.2","maintainers":[{"name":"diegoaneli","email":"diegoaneli@gmail.com"}],"homepage":"https://github.com/DiegoAneli/a13y#readme","bugs":{"url":"https://github.com/DiegoAneli/a13y/issues"},"dist":{"shasum":"5c1acbb881f88b050c60dc7ba618910ac9331e64","tarball":"https://registry.npmjs.org/@a13y/react/-/react-0.1.2.tgz","fileCount":16,"integrity":"sha512-2tNs677dBoDiCCtrYplKuq/3AOGuKTkdjpj7WlY/Mya58SGqmtGG42l55o5xE0Nj9hshtKegpSgPk+iMvU/VjA==","signatures":[{"sig":"MEUCIQDDJ+TRuuNs+O+hx+KapvsbecJV1hjnyYMyyW4MYCYZfgIgatNez/MWZybhRNc78sD5TXBYQmsojjtLsvvnxx+p/Tc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":564486},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./hooks":{"types":"./dist/hooks/index.d.ts","import":"./dist/hooks/index.js","default":"./dist/hooks/index.js"},"./patterns":{"types":"./dist/patterns/index.d.ts","import":"./dist/patterns/index.js","default":"./dist/patterns/index.js"},"./components":{"types":"./dist/components/index.d.ts","import":"./dist/components/index.js","default":"./dist/components/index.js"},"./package.json":"./package.json"},"gitHead":"5e79fcfbc7e114ae79ebc49a13dbbc79cb78a74b","scripts":{"dev":"tsup --watch","test":"vitest","build":"tsup","typecheck":"tsc --noEmit","prepublishOnly":"pnpm build"},"_npmUser":{"name":"diegoaneli","email":"diegoaneli@gmail.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","repository":{"url":"git+https://github.com/DiegoAneli/a13y.git","type":"git","directory":"packages/react"},"_npmVersion":"10.9.3","description":"Runtime-enforced React hooks and components for accessibility","directories":{},"sideEffects":false,"_nodeVersion":"22.20.0","dependencies":{"@a13y/core":"workspace:*"},"publishConfig":{"access":"public","dependencies":{"@a13y/core":"^0.1.2"}},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","react":"^19.0.0","vitest":"^4.0.16","@types/node":"^25.0.3","@types/react":"^19.2.7","@a13y/devtools":"workspace:*"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","@a13y/devtools":"^0.1.2"},"peerDependenciesMeta":{"@a13y/devtools":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/react_0.1.2_1767393854857_0.8373030604629483","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@a13y/react","version":"0.1.3","keywords":["accessibility","a11y","react","hooks","components","wcag","aria","focus-trap","keyboard-navigation","typescript","type-safe"],"author":{"url":"https://github.com/DiegoAneli","name":"Diego Aneli"},"license":"MIT","_id":"@a13y/react@0.1.3","maintainers":[{"name":"diegoaneli","email":"diegoaneli@gmail.com"}],"homepage":"https://github.com/DiegoAneli/a13y#readme","bugs":{"url":"https://github.com/DiegoAneli/a13y/issues"},"dist":{"shasum":"2e11dd817a0edddd2d6e0926aef064b0d99bde1a","tarball":"https://registry.npmjs.org/@a13y/react/-/react-0.1.3.tgz","fileCount":16,"integrity":"sha512-Nyh9Lp7i0SRPqOFv20MwmffYmWmFXtPlpdHIBY8LLad9jqMAZJOwSoFnnd8hIZvOuWsJfvMUZd7UFhKqhADjdg==","signatures":[{"sig":"MEYCIQDrFqzXaykT7ytonK8xsx6vksKnPbwX3RA6xk6OqxXiwAIhAOHZx7+d4qLasVyLJAGJLSqxhi+B7I5SV8lpq5PalMry","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1205277},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./hooks":{"types":"./dist/hooks/index.d.ts","import":"./dist/hooks/index.js","default":"./dist/hooks/index.js"},"./patterns":{"types":"./dist/patterns/index.d.ts","import":"./dist/patterns/index.js","default":"./dist/patterns/index.js"},"./components":{"types":"./dist/components/index.d.ts","import":"./dist/components/index.js","default":"./dist/components/index.js"},"./package.json":"./package.json"},"gitHead":"702774de8229cd9905a14e1bdb1f100efdf49a83","scripts":{"dev":"tsup --watch","test":"vitest","build":"tsup","typecheck":"tsc --noEmit","prepublishOnly":"pnpm build"},"_npmUser":{"name":"diegoaneli","email":"diegoaneli@gmail.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","repository":{"url":"git+https://github.com/DiegoAneli/a13y.git","type":"git","directory":"packages/react"},"_npmVersion":"10.9.3","description":"Runtime-enforced React hooks and components for accessibility","directories":{},"sideEffects":false,"_nodeVersion":"22.20.0","dependencies":{"@a13y/core":"workspace:*"},"publishConfig":{"access":"public","dependencies":{"@a13y/core":"^0.1.3"}},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","react":"^19.0.0","vitest":"^4.0.16","@types/node":"^25.0.3","@types/react":"^19.2.7","@a13y/devtools":"workspace:*"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","@a13y/devtools":"^0.1.3"},"peerDependenciesMeta":{"@a13y/devtools":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/react_0.1.3_1767628694600_0.9777429135682598","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@a13y/react","version":"0.1.4","keywords":["accessibility","a11y","react","hooks","components","wcag","aria","focus-trap","keyboard-navigation","typescript","type-safe"],"author":{"url":"https://github.com/DiegoAneli","name":"Diego Aneli"},"license":"MIT","_id":"@a13y/react@0.1.4","maintainers":[{"name":"diegoaneli","email":"diegoaneli@gmail.com"}],"homepage":"https://a13y.dev","bugs":{"url":"https://github.com/DiegoAneli/a13y/issues"},"dist":{"shasum":"8226050611f8650388ca9ec522925b7ce649ae02","tarball":"https://registry.npmjs.org/@a13y/react/-/react-0.1.4.tgz","fileCount":16,"integrity":"sha512-mSTl0S+cQtPi9rxSS+hggOBz/TEcI0fHtrEKvEC+GC0HXB4Hv9tMFKsqkiwrUGb64oFmwHiawMdXuxLY3T2DyQ==","signatures":[{"sig":"MEUCIHWvJeTsesPoYyaGYYPuYoUpufV3l7DgMAIKmcCyvz87AiEAnADWw6ZHJId54RWvB76721yBul6qXYejpUqEB+Y1xPs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1205252},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./hooks":{"types":"./dist/hooks/index.d.ts","import":"./dist/hooks/index.js","default":"./dist/hooks/index.js"},"./patterns":{"types":"./dist/patterns/index.d.ts","import":"./dist/patterns/index.js","default":"./dist/patterns/index.js"},"./components":{"types":"./dist/components/index.d.ts","import":"./dist/components/index.js","default":"./dist/components/index.js"},"./package.json":"./package.json"},"gitHead":"14e8956264983d2e2ceaf48959642a3e9e8977c6","scripts":{"dev":"tsup --watch","test":"vitest","build":"tsup","typecheck":"tsc --noEmit","prepublishOnly":"pnpm build"},"_npmUser":{"name":"diegoaneli","email":"diegoaneli@gmail.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","repository":{"url":"git+https://github.com/DiegoAneli/a13y.git","type":"git","directory":"packages/react"},"_npmVersion":"10.9.3","description":"Runtime-enforced React hooks and components for accessibility","directories":{},"sideEffects":false,"_nodeVersion":"22.20.0","dependencies":{"@a13y/core":"workspace:*"},"publishConfig":{"access":"public","dependencies":{"@a13y/core":"^0.1.4"}},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","react":"^19.0.0","vitest":"^4.0.16","@types/node":"^25.0.3","@types/react":"^19.2.7","@a13y/devtools":"workspace:*"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","@a13y/devtools":"^0.1.4"},"peerDependenciesMeta":{"@a13y/devtools":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/react_0.1.4_1767729499000_0.08980523122633399","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@a13y/react","version":"0.1.5","keywords":["accessibility","a11y","react","hooks","components","wcag","aria","focus-trap","keyboard-navigation","typescript","type-safe"],"author":{"url":"https://github.com/DiegoAneli","name":"Diego Aneli"},"license":"MIT","_id":"@a13y/react@0.1.5","maintainers":[{"name":"diegoaneli","email":"diegoaneli@gmail.com"}],"homepage":"https://a13y.dev","bugs":{"url":"https://github.com/DiegoAneli/a13y/issues"},"dist":{"shasum":"e0341c9335d9b8cea0b2ce39988274e129e8b3de","tarball":"https://registry.npmjs.org/@a13y/react/-/react-0.1.5.tgz","fileCount":16,"integrity":"sha512-PpB8OnAQciBjmzo7KvwR9Jb9YBST/aUl+2tOWvg2Uj5pnWgXDbaSPg/r4U1VhLNfjYErL3XTaOwyFxw41bqVfQ==","signatures":[{"sig":"MEUCIQDgEWeapJ0Y9NbspLdwL6Sy/IGGrHRfQZwWPPcIY+L3HQIgN5c8vgHohuOz1Xh40vmM1EZkvrR7zxAcQf5TwAW2tXc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1207800},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./hooks":{"types":"./dist/hooks/index.d.ts","import":"./dist/hooks/index.js","default":"./dist/hooks/index.js"},"./patterns":{"types":"./dist/patterns/index.d.ts","import":"./dist/patterns/index.js","default":"./dist/patterns/index.js"},"./components":{"types":"./dist/components/index.d.ts","import":"./dist/components/index.js","default":"./dist/components/index.js"},"./package.json":"./package.json"},"gitHead":"14e8956264983d2e2ceaf48959642a3e9e8977c6","scripts":{"dev":"tsup --watch","test":"vitest","build":"tsup","typecheck":"tsc --noEmit","prepublishOnly":"pnpm build"},"_npmUser":{"name":"diegoaneli","email":"diegoaneli@gmail.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","repository":{"url":"git+https://github.com/DiegoAneli/a13y.git","type":"git","directory":"packages/react"},"_npmVersion":"10.9.3","description":"Runtime-enforced React hooks and components for accessibility","directories":{},"sideEffects":false,"_nodeVersion":"22.20.0","dependencies":{"@a13y/core":"workspace:*"},"publishConfig":{"access":"public","dependencies":{"@a13y/core":"^0.1.5"}},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","react":"^19.0.0","vitest":"^4.0.16","@types/node":"^25.0.3","@types/react":"^19.2.7","@a13y/devtools":"workspace:*"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","@a13y/devtools":"^0.1.5"},"peerDependenciesMeta":{"@a13y/devtools":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/react_0.1.5_1767921050113_0.41313266945449145","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"@a13y/react","version":"0.1.6","type":"module","description":"Runtime-enforced React hooks and components for accessibility","license":"MIT","author":{"name":"Diego Aneli","url":"https://github.com/DiegoAneli"},"repository":{"type":"git","url":"git+https://github.com/DiegoAneli/a13y.git","directory":"packages/react"},"bugs":{"url":"https://github.com/DiegoAneli/a13y/issues"},"homepage":"https://a13y.dev","keywords":["accessibility","a11y","react","hooks","components","wcag","aria","focus-trap","keyboard-navigation","typescript","type-safe"],"sideEffects":false,"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./hooks":{"types":"./dist/hooks/index.d.ts","import":"./dist/hooks/index.js","default":"./dist/hooks/index.js"},"./components":{"types":"./dist/components/index.d.ts","import":"./dist/components/index.js","default":"./dist/components/index.js"},"./patterns":{"types":"./dist/patterns/index.d.ts","import":"./dist/patterns/index.js","default":"./dist/patterns/index.js"},"./package.json":"./package.json"},"main":"./dist/index.js","module":"./dist/index.js","types":"./dist/index.d.ts","scripts":{"build":"tsup","dev":"tsup --watch","test":"vitest","typecheck":"tsc --noEmit","prepublishOnly":"pnpm build"},"dependencies":{"@a13y/core":"workspace:*"},"peerDependencies":{"@a13y/devtools":"^0.1.6","react":"^18.0.0 || ^19.0.0"},"peerDependenciesMeta":{"@a13y/devtools":{"optional":true}},"engines":{"node":">=18.0.0"},"publishConfig":{"access":"public","dependencies":{"@a13y/core":"^0.1.6"}},"devDependencies":{"@a13y/devtools":"workspace:*","@types/node":"^25.0.3","@types/react":"^19.2.7","react":"^19.0.0","tsup":"^8.5.1","vitest":"^4.0.16"},"gitHead":"14e8956264983d2e2ceaf48959642a3e9e8977c6","_id":"@a13y/react@0.1.6","_nodeVersion":"24.16.0","_npmVersion":"11.13.0","dist":{"integrity":"sha512-bN044U4FOS2YDgPJhhJsTL8xl0bWEBK1/d0GjFJLNHqdt9yWiNt9o6yDt5QBmPVbpDo5SyYkjFacuhKxATnNYQ==","shasum":"cb1497dbcc7025e79fa48c88edde73a5454a986c","tarball":"https://registry.npmjs.org/@a13y/react/-/react-0.1.6.tgz","fileCount":16,"unpackedSize":1207800,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDvnbtAinEANmmYBPoeWyl0INq8th35TMXEAfPD8mv9lwIhAOQPoLMv3gE7DkF4ndxJpgRR+73lp2qjpcDNM5e23hRc"}]},"_npmUser":{"name":"diegoaneli","email":"diegoaneli@gmail.com"},"directories":{},"maintainers":[{"name":"diegoaneli","email":"diegoaneli@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/react_0.1.6_1780607150101_0.9246542355199405"},"_hasShrinkwrap":false}},"time":{"created":"2026-01-02T19:40:52.428Z","modified":"2026-06-04T21:05:50.420Z","0.1.0":"2026-01-02T19:40:52.724Z","0.1.1":"2026-01-02T22:07:08.547Z","0.1.2":"2026-01-02T22:44:15.024Z","0.1.3":"2026-01-05T15:58:14.773Z","0.1.4":"2026-01-06T19:58:19.186Z","0.1.5":"2026-01-09T01:10:50.332Z","0.1.6":"2026-06-04T21:05:50.307Z"},"bugs":{"url":"https://github.com/DiegoAneli/a13y/issues"},"author":{"name":"Diego Aneli","url":"https://github.com/DiegoAneli"},"license":"MIT","homepage":"https://a13y.dev","keywords":["accessibility","a11y","react","hooks","components","wcag","aria","focus-trap","keyboard-navigation","typescript","type-safe"],"repository":{"type":"git","url":"git+https://github.com/DiegoAneli/a13y.git","directory":"packages/react"},"description":"Runtime-enforced React hooks and components for accessibility","maintainers":[{"name":"diegoaneli","email":"diegoaneli@gmail.com"}],"readme":"# @a13y/react\n\n**Type-safe React hooks for accessibility with compile-time guarantees**\n\n---\n\n\n## Features\n\n- **Type-Safe**: Restrictive TypeScript signatures prevent misuse\n- **Props Enforcement**: Required props enforced at compile-time\n- **Automatic ARIA**: Correct ARIA attributes applied automatically\n- **Keyboard Support**: Enter, Space, Arrow keys handled correctly\n- **Focus Management**: Focus trap, restoration, roving tabindex\n- **Dev Validation**: Runtime warnings in development (via @a13y/devtools)\n- **Zero Overhead**: All dev code stripped in production\n\n## Installation\n\n```bash\nnpm install @a13y/react @a13y/core\n```\n\nOptional devtools for development warnings:\n\n```bash\nnpm install -D @a13y/devtools\n```\n\n## Hooks\n\n### useAccessibleButton\n\nCreates accessible buttons with keyboard support.\n\n```tsx\nimport { useAccessibleButton } from '@a13y/react';\n\nfunction DeleteButton() {\n  const { buttonProps } = useAccessibleButton({\n    label: 'Delete item', // Required for icon-only buttons\n    onPress: (event) => {\n      console.log(event.type); // 'mouse' | 'keyboard'\n      console.log(event.key); // 'Enter' | ' ' | undefined\n    },\n  });\n\n  return <button {...buttonProps}>🗑️</button>;\n}\n```\n\n**Props:**\n- `label?: string` - Accessible label (required for icon-only buttons)\n- `onPress: (event: PressEvent) => void` - Called on click or Enter/Space\n- `isDisabled?: boolean` - Whether button is disabled\n- `role?: 'button' | 'link'` - ARIA role (default: 'button')\n- `elementType?: 'button' | 'a'` - HTML element type (default: 'button')\n\n### useAccessibleDialog\n\nCreates accessible modals/dialogs with focus trap.\n\n```tsx\nimport { useAccessibleDialog } from '@a13y/react';\n\nfunction ConfirmDialog({ isOpen, onClose }) {\n  const { dialogProps, titleProps, descriptionProps, backdropProps } =\n    useAccessibleDialog({\n      isOpen,\n      onClose,\n      title: 'Confirm Action', // ✅ Required\n      description: 'This action cannot be undone',\n    });\n\n  if (!isOpen) return null;\n\n  return (\n    <>\n      {backdropProps && <div className=\"backdrop\" {...backdropProps} />}\n      <div className=\"dialog\" {...dialogProps}>\n        <h2 {...titleProps}>Confirm Action</h2>\n        <p {...descriptionProps}>This action cannot be undone</p>\n        <button onClick={onClose}>Cancel</button>\n      </div>\n    </>\n  );\n}\n```\n\n**Props:**\n- `isOpen: boolean` - Whether dialog is open\n- `onClose: () => void` - Called when dialog should close\n- `title: string` - Dialog title (REQUIRED for accessibility)\n- `description?: string` - Dialog description\n- `role?: 'dialog' | 'alertdialog'` - ARIA role (default: 'dialog')\n- `isModal?: boolean` - Whether dialog is modal/blocking (default: true)\n- `closeOnBackdropClick?: boolean` - Close on backdrop click (default: true)\n\n### useFocusTrap\n\nCreates a focus trap for modals and popups.\n\n```tsx\nimport { useFocusTrap } from '@a13y/react';\n\nfunction Modal({ isOpen, onClose }) {\n  const { trapRef } = useFocusTrap({\n    isActive: isOpen,\n    onEscape: onClose,\n    restoreFocus: true, // Restore focus on close\n    autoFocus: true, // Auto-focus first element\n  });\n\n  if (!isOpen) return null;\n\n  return (\n    <div ref={trapRef} className=\"modal\">\n      <h2>Modal Title</h2>\n      <button onClick={onClose}>Close</button>\n    </div>\n  );\n}\n```\n\n**Props:**\n- `isActive: boolean` - Whether focus trap is active\n- `onEscape?: () => void` - Called when Escape key is pressed\n- `restoreFocus?: boolean` - Restore focus on deactivation (default: true)\n- `autoFocus?: boolean` - Auto-focus first element (default: true)\n\n### useKeyboardNavigation\n\nImplements roving tabindex keyboard navigation.\n\n```tsx\nimport { useKeyboardNavigation } from '@a13y/react';\n\nfunction Toolbar() {\n  const { containerProps, getItemProps, currentIndex } =\n    useKeyboardNavigation({\n      orientation: 'horizontal', // Arrow Left/Right\n      loop: true, // Wrap around at edges\n    });\n\n  const tools = ['Cut', 'Copy', 'Paste', 'Undo', 'Redo'];\n\n  return (\n    <div className=\"toolbar\" {...containerProps}>\n      {tools.map((tool, index) => (\n        <button\n          key={tool}\n          {...getItemProps(index)}\n          className={index === currentIndex ? 'focused' : ''}\n        >\n          {tool}\n        </button>\n      ))}\n    </div>\n  );\n}\n```\n\n**Props:**\n- `orientation: 'horizontal' | 'vertical' | 'both'` - Navigation direction\n- `loop?: boolean` - Whether to loop at boundaries (default: false)\n- `onNavigate?: (index: number) => void` - Called when navigation occurs\n- `defaultIndex?: number` - Initial focused index (default: 0)\n- `currentIndex?: number` - Controlled current index\n\n## Type Safety\n\n### Forbidden Props\n\nThe hooks prevent misuse by forbidding certain props:\n\n```tsx\nconst { buttonProps } = useAccessibleButton({ onPress: () => {} });\n\n// ❌ TypeScript Error: These props are managed by the hook\n<button {...buttonProps} onClick={() => {}} />\n<button {...buttonProps} onKeyDown={() => {}} />\n```\n\n### Required Props\n\nRequired props are enforced at compile-time:\n\n```tsx\n// ❌ TypeScript Error: 'title' is required\nuseAccessibleDialog({\n  isOpen: true,\n  onClose: () => {},\n  // title: missing!\n});\n```\n\n## Development Warnings\n\nWhen `@a13y/devtools` is installed, you get runtime warnings in development:\n\n```tsx\n// ⚠️ Console warning: Element is missing an accessible name\n<button {...buttonProps}></button>\n\n// ⚠️ Console warning: Focus trap has no focusable elements\n<div ref={trapRef}></div>\n```\n\nAll warnings include:\n- Clear description of the issue\n- WCAG 2.2 criterion reference\n- Multiple fix suggestions with code examples\n\n## Production Build\n\nZero overhead in production:\n\n```tsx\n// Development build\nuseAccessibleButton({ onPress: () => {} });\n// ✅ Includes validation code from @a13y/devtools\n\n// Production build (NODE_ENV=production)\nuseAccessibleButton({ onPress: () => {} });\n// ✅ All validation code removed via dead code elimination\n```\n\n## Examples\n\nSee [EXAMPLES.md](./EXAMPLES.md) for complete usage examples.\n\n## Author\n\nCreated and maintained by **Diego Aneli** ([@DiegoAneli](https://github.com/DiegoAneli))\n\n## License\n\nMIT © Diego Aneli and contributors\n","readmeFilename":"README.md"}