{"_id":"@microsoft/focusgroup-polyfill","_rev":"15-21ebdd66f8d28299e96a31586011583e","name":"@microsoft/focusgroup-polyfill","dist-tags":{"latest":"1.6.0"},"versions":{"1.0.0":{"name":"@microsoft/focusgroup-polyfill","version":"1.0.0","keywords":["focusgroup","polyfill","edge","html"],"author":{"name":"Microsoft"},"license":"MIT","_id":"@microsoft/focusgroup-polyfill@1.0.0","maintainers":[{"name":"microsoft1es","email":"npmjs@microsoft.com"},{"name":"microsoft-oss-releases","email":"microsoft-oss-publishing@microsoft.com"}],"homepage":"https://github.com/microsoft/polyfills/tree/main/packages/focusgroup#readme","bugs":{"url":"https://github.com/Microsoft/polyfills/issues"},"dist":{"shasum":"04fa58b10bfc0ec58b22d55226f584f4fa773309","tarball":"https://registry.npmjs.org/@microsoft/focusgroup-polyfill/-/focusgroup-polyfill-1.0.0.tgz","fileCount":6,"integrity":"sha512-RBhx2MBCeuMJrO+ZF6DloV9ILFgbtC0VXQw9Sc593fhRCr7hYNaKSaJ9bzEOzkwjcImTsNKEN7mX0LxbhV9E5w==","signatures":[{"sig":"MEYCIQDAkP5EjnhvwfL0svPLkPnHYGOYVCf/OLKBKwEbBB7b4QIhALisKYyMzFGXJxdUt2/rECgYG8QyjfzPxkLYafZ+9yb2","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":98298},"type":"module","_from":"file:M:\\SvcFab\\_App\\MS.Ess.PackageManager.Publisher_App2\\temp\\52becf45-926f-4cd5-a51c-29636584bd1e\\1-microsoft-focusgroup-polyfill-1.0.0.tgz","module":"./build/focusgroup-polyfill.min.mjs","exports":{".":{"import":"./build/focusgroup-polyfill.min.mjs"},"./shadowless":{"import":"./build/focusgroup-polyfill-shadowless.min.mjs"},"./unminified":{"import":"./build/focusgroup-polyfill.mjs"},"./shadowless-unminified":{"import":"./build/focusgroup-polyfill-shadowless.mjs"}},"scripts":{"dev":"vite","size":"size-limit","test":"playwright test","build":"npm run build:lib && npm run build:lib:min && npm run build:lib:shadowless && npm run build:lib:shadowless-min","test:ci":"npm test -- --project=chromium --project=firefox --project=webkit","build:app":"vite build","build:lib":"vite build --config vite.config.lib.js","build:lib:min":"npm run build:lib -- --mode minified","build:lib:shadowless":"npm run build:lib -- --mode shadowless","build:lib:shadowless-min":"npm run build:lib -- --mode shadowless-minified"},"_npmUser":{"name":"microsoft1es","email":"npmjs@microsoft.com"},"_resolved":"M:\\SvcFab\\_App\\MS.Ess.PackageManager.Publisher_App2\\temp\\52becf45-926f-4cd5-a51c-29636584bd1e\\1-microsoft-focusgroup-polyfill-1.0.0.tgz","_integrity":"sha512-RBhx2MBCeuMJrO+ZF6DloV9ILFgbtC0VXQw9Sc593fhRCr7hYNaKSaJ9bzEOzkwjcImTsNKEN7mX0LxbhV9E5w==","repository":{"url":"git+https://github.com/Microsoft/polyfills.git","type":"git","directory":"packages/focusgroup"},"size-limit":[{"gzip":true,"path":"build/focusgroup-polyfill.min.mjs","limit":"10 kB"},{"path":"build/focusgroup-polyfill.min.mjs","limit":"10 kB"}],"description":"A polyfill for the focusgroup HTML attribute.","directories":{},"_nodeVersion":"18.5.0","_hasShrinkwrap":false,"devDependencies":{"vite":"8.0.3","terser":"5.46.1","size-limit":"12.0.1","@types/node":"^25.4.0","@playwright/test":"1.59.1","@size-limit/preset-small-lib":"12.0.1"},"_npmOperationalInternal":{"tmp":"tmp/focusgroup-polyfill_1.0.0_1775250818402_0.57568075596043","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@microsoft/focusgroup-polyfill","version":"1.1.0","keywords":["focusgroup","polyfill","edge","html"],"author":{"name":"Microsoft"},"license":"MIT","_id":"@microsoft/focusgroup-polyfill@1.1.0","maintainers":[{"name":"microsoft1es","email":"npmjs@microsoft.com"},{"name":"microsoft-oss-releases","email":"microsoft-oss-publishing@microsoft.com"}],"homepage":"https://github.com/microsoft/polyfills/tree/main/packages/focusgroup#readme","bugs":{"url":"https://github.com/Microsoft/polyfills/issues"},"dist":{"shasum":"25e540fb028612d5a5217ab2c97d560ace4f1e19","tarball":"https://registry.npmjs.org/@microsoft/focusgroup-polyfill/-/focusgroup-polyfill-1.1.0.tgz","fileCount":7,"integrity":"sha512-fnuE0vJXBNKTpkChU4NiOgF9m2zYVif2A9GPuvKpvYcfC+XOd22kVde/Q0JkUutXx4jppMuRTClNGFbx98Vb9g==","signatures":[{"sig":"MEYCIQCEmASkxzwp4FZp+dWpJisWdmhoA9JZYsHYdBr8pKQr+gIhAJFfGxwdAW17InDN9cpfuDEeGgFLvxvNfkoz3bQKywnC","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":98912},"type":"module","_from":"file:M:\\SvcFab\\_App\\MS.Ess.PackageManager.Publisher_App2\\temp\\9a5bb842-391c-4c3a-956d-41201ef7155b\\1-microsoft-focusgroup-polyfill-1.1.0.tgz","types":"./build/index.d.ts","module":"./build/focusgroup-polyfill.min.mjs","exports":{".":{"types":"./build/index.d.ts","import":"./build/focusgroup-polyfill.min.mjs"},"./shadowless":{"types":"./build/index.d.ts","import":"./build/focusgroup-polyfill-shadowless.min.mjs"},"./unminified":{"types":"./build/index.d.ts","import":"./build/focusgroup-polyfill.mjs"},"./shadowless-unminified":{"types":"./build/index.d.ts","import":"./build/focusgroup-polyfill-shadowless.mjs"}},"scripts":{"dev":"vite","size":"size-limit","test":"playwright test","build":"npm run build:lib && npm run build:lib:min && npm run build:lib:shadowless && npm run build:lib:shadowless-min","test:ci":"npm test -- --project=chromium --project=firefox --project=webkit","build:app":"vite build","build:lib":"vite build --config vite.config.lib.js","build:lib:min":"npm run build:lib -- --mode minified","build:lib:shadowless":"npm run build:lib -- --mode shadowless","build:lib:shadowless-min":"npm run build:lib -- --mode shadowless-minified"},"_npmUser":{"name":"microsoft1es","email":"npmjs@microsoft.com"},"_resolved":"M:\\SvcFab\\_App\\MS.Ess.PackageManager.Publisher_App2\\temp\\9a5bb842-391c-4c3a-956d-41201ef7155b\\1-microsoft-focusgroup-polyfill-1.1.0.tgz","_integrity":"sha512-fnuE0vJXBNKTpkChU4NiOgF9m2zYVif2A9GPuvKpvYcfC+XOd22kVde/Q0JkUutXx4jppMuRTClNGFbx98Vb9g==","repository":{"url":"git+https://github.com/Microsoft/polyfills.git","type":"git","directory":"packages/focusgroup"},"size-limit":[{"gzip":true,"path":"build/focusgroup-polyfill.min.mjs","limit":"10 kB"},{"path":"build/focusgroup-polyfill.min.mjs","limit":"10 kB"}],"description":"A polyfill for the focusgroup HTML attribute.","directories":{},"_nodeVersion":"18.5.0","_hasShrinkwrap":false,"devDependencies":{"vite":"8.0.3","terser":"5.46.1","size-limit":"12.0.1","@types/node":"^25.4.0","@playwright/test":"1.59.1","@size-limit/preset-small-lib":"12.0.1"},"_npmOperationalInternal":{"tmp":"tmp/focusgroup-polyfill_1.1.0_1775261076058_0.15948304957964132","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@microsoft/focusgroup-polyfill","version":"1.2.0","keywords":["focusgroup","polyfill","edge","html"],"author":{"name":"Microsoft"},"license":"MIT","_id":"@microsoft/focusgroup-polyfill@1.2.0","maintainers":[{"name":"microsoft1es","email":"npmjs@microsoft.com"},{"name":"microsoft-oss-releases","email":"microsoft-oss-publishing@microsoft.com"}],"homepage":"https://github.com/microsoft/polyfills/tree/main/packages/focusgroup#readme","bugs":{"url":"https://github.com/Microsoft/polyfills/issues"},"dist":{"shasum":"aca58b960643eac033a01e271c0fb3fb582c8fd5","tarball":"https://registry.npmjs.org/@microsoft/focusgroup-polyfill/-/focusgroup-polyfill-1.2.0.tgz","fileCount":7,"integrity":"sha512-2M6QIHp83en8dLGEnf/y2HNbA6NXLYVhFcf3JHlDmuOi9FY5FZjKiUaF4ft+j0hZHVw/Yu5QXkwFPqVYmV5hfA==","signatures":[{"sig":"MEYCIQDewjB7h58Nj8oPabivzUy5vmbp49Q5uEamf0HacT1FxwIhAM1Fs/nLOAqXpWHf4PZhi4z8eTlh6ppKsyVRFFQeK8yD","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":105954},"type":"module","_from":"file:M:\\SvcFab\\_App\\MS.Ess.PackageManager.Publisher_App2\\temp\\1cf6cd6c-0bc6-4343-b414-5cee139aa321\\1-microsoft-focusgroup-polyfill-1.2.0.tgz","types":"./build/index.d.ts","module":"./build/focusgroup-polyfill.min.mjs","exports":{".":{"types":"./build/index.d.ts","import":"./build/focusgroup-polyfill.min.mjs"},"./shadowless":{"types":"./build/index.d.ts","import":"./build/focusgroup-polyfill-shadowless.min.mjs"},"./unminified":{"types":"./build/index.d.ts","import":"./build/focusgroup-polyfill.mjs"},"./shadowless-unminified":{"types":"./build/index.d.ts","import":"./build/focusgroup-polyfill-shadowless.mjs"}},"scripts":{"dev":"vite","size":"size-limit","test":"playwright test","build":"npm run build:lib && npm run build:lib:min && npm run build:lib:shadowless && npm run build:lib:shadowless-min","test:ci":"npm test -- --project=chromium --project=firefox --project=webkit","build:app":"vite build","build:lib":"vite build --config vite.config.lib.js","build:lib:min":"npm run build:lib -- --mode minified","build:lib:shadowless":"npm run build:lib -- --mode shadowless","build:lib:shadowless-min":"npm run build:lib -- --mode shadowless-minified"},"_npmUser":{"name":"microsoft1es","email":"npmjs@microsoft.com"},"_resolved":"M:\\SvcFab\\_App\\MS.Ess.PackageManager.Publisher_App2\\temp\\1cf6cd6c-0bc6-4343-b414-5cee139aa321\\1-microsoft-focusgroup-polyfill-1.2.0.tgz","_integrity":"sha512-2M6QIHp83en8dLGEnf/y2HNbA6NXLYVhFcf3JHlDmuOi9FY5FZjKiUaF4ft+j0hZHVw/Yu5QXkwFPqVYmV5hfA==","repository":{"url":"git+https://github.com/Microsoft/polyfills.git","type":"git","directory":"packages/focusgroup"},"size-limit":[{"gzip":true,"path":"build/focusgroup-polyfill.min.mjs","limit":"10 kB"},{"path":"build/focusgroup-polyfill.min.mjs","limit":"10 kB"}],"description":"A polyfill for the focusgroup HTML attribute.","directories":{},"_nodeVersion":"18.5.0","_hasShrinkwrap":false,"devDependencies":{"vite":"8.0.3","terser":"5.46.1","size-limit":"12.0.1","@types/node":"^25.4.0","@playwright/test":"1.59.1","@size-limit/preset-small-lib":"12.0.1"},"_npmOperationalInternal":{"tmp":"tmp/focusgroup-polyfill_1.2.0_1775700140868_0.7000554589632833","host":"s3://npm-registry-packages-npm-production"}},"1.2.1":{"name":"@microsoft/focusgroup-polyfill","version":"1.2.1","keywords":["focusgroup","polyfill","edge","html"],"author":{"name":"Microsoft"},"license":"MIT","_id":"@microsoft/focusgroup-polyfill@1.2.1","maintainers":[{"name":"microsoft1es","email":"npmjs@microsoft.com"},{"name":"microsoft-oss-releases","email":"microsoft-oss-publishing@microsoft.com"}],"homepage":"https://github.com/microsoft/polyfills/tree/main/packages/focusgroup#readme","bugs":{"url":"https://github.com/Microsoft/polyfills/issues"},"dist":{"shasum":"a46f4fb52d3d510816816bb9455c5d68db9eff5e","tarball":"https://registry.npmjs.org/@microsoft/focusgroup-polyfill/-/focusgroup-polyfill-1.2.1.tgz","fileCount":7,"integrity":"sha512-A0l7SeXgulSfGcjrouxwmC2CPUberpxduyD6nwjKBEEf+Bu+JeGgsGsGkRp2IKniyZQthFAC5gYCnbg/guiidg==","signatures":[{"sig":"MEYCIQDV4Ug4IJCaN0PMx667Stet0okeczRFcsGKxTvt/uTFygIhAPnj9mxWda2xs6Co3P1SWRsbXmGV2mvgT8FzLQ1aIeVq","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":105958},"type":"module","_from":"file:M:\\SvcFab\\_App\\MS.Ess.PackageManager.Publisher_App2\\temp\\c6913b46-7980-4262-99ed-cf116251a586\\1-microsoft-focusgroup-polyfill-1.2.1.tgz","types":"./build/index.d.ts","module":"./build/focusgroup-polyfill.min.mjs","exports":{".":{"types":"./build/index.d.ts","default":"./build/focusgroup-polyfill.min.mjs"},"./shadowless":{"types":"./build/index.d.ts","default":"./build/focusgroup-polyfill-shadowless.min.mjs"},"./unminified":{"types":"./build/index.d.ts","default":"./build/focusgroup-polyfill.mjs"},"./shadowless-unminified":{"types":"./build/index.d.ts","default":"./build/focusgroup-polyfill-shadowless.mjs"}},"scripts":{"dev":"vite","size":"size-limit","test":"playwright test","build":"npm run build:lib && npm run build:lib:min && npm run build:lib:shadowless && npm run build:lib:shadowless-min","test:ci":"npm test -- --project=chromium --project=firefox --project=webkit","build:app":"vite build","build:lib":"vite build --config vite.config.lib.js","build:lib:min":"npm run build:lib -- --mode minified","build:lib:shadowless":"npm run build:lib -- --mode shadowless","build:lib:shadowless-min":"npm run build:lib -- --mode shadowless-minified"},"_npmUser":{"name":"microsoft1es","email":"npmjs@microsoft.com"},"_resolved":"M:\\SvcFab\\_App\\MS.Ess.PackageManager.Publisher_App2\\temp\\c6913b46-7980-4262-99ed-cf116251a586\\1-microsoft-focusgroup-polyfill-1.2.1.tgz","_integrity":"sha512-A0l7SeXgulSfGcjrouxwmC2CPUberpxduyD6nwjKBEEf+Bu+JeGgsGsGkRp2IKniyZQthFAC5gYCnbg/guiidg==","repository":{"url":"git+https://github.com/Microsoft/polyfills.git","type":"git","directory":"packages/focusgroup"},"size-limit":[{"gzip":true,"path":"build/focusgroup-polyfill.min.mjs","limit":"10 kB"},{"path":"build/focusgroup-polyfill.min.mjs","limit":"10 kB"}],"description":"A polyfill for the focusgroup HTML attribute.","directories":{},"_nodeVersion":"18.5.0","_hasShrinkwrap":false,"devDependencies":{"vite":"8.0.3","terser":"5.46.1","size-limit":"12.0.1","@types/node":"^25.4.0","@playwright/test":"1.59.1","@size-limit/preset-small-lib":"12.0.1"},"_npmOperationalInternal":{"tmp":"tmp/focusgroup-polyfill_1.2.1_1775841641444_0.925139474220477","host":"s3://npm-registry-packages-npm-production"}},"1.2.2":{"name":"@microsoft/focusgroup-polyfill","version":"1.2.2","keywords":["focusgroup","polyfill","edge","html"],"author":{"name":"Microsoft"},"license":"MIT","_id":"@microsoft/focusgroup-polyfill@1.2.2","maintainers":[{"name":"microsoft1es","email":"npmjs@microsoft.com"},{"name":"microsoft-oss-releases","email":"microsoft-oss-publishing@microsoft.com"}],"homepage":"https://github.com/microsoft/polyfills/tree/main/packages/focusgroup#readme","bugs":{"url":"https://github.com/Microsoft/polyfills/issues"},"dist":{"shasum":"f4dd2d0c37b332ebb28c893ed24015b6ad79ca89","tarball":"https://registry.npmjs.org/@microsoft/focusgroup-polyfill/-/focusgroup-polyfill-1.2.2.tgz","fileCount":7,"integrity":"sha512-KpqKff8Ni/jQ4Abq2ULxCI8JWNF6b7gqB+9YzOGZpyGF2Q6CUPHe6aM4lO+qzUpq8fdHLboFcwF+yW0ph4k8OQ==","signatures":[{"sig":"MEUCIBG4q7V4rTAtcJi6L6EpCsJNDpBhSROEevEGGNpM7Tw/AiEA6lwWkIOdieOOyBh+LRkCTdJj5NzjzLOVjnajzxhXeFw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":106787},"type":"module","_from":"file:M:\\SvcFab\\_App\\MS.Ess.PackageManager.Publisher_App2\\temp\\ed861f05-a654-4f8c-afbf-34ffd07cc30f\\1-microsoft-focusgroup-polyfill-1.2.2.tgz","types":"./build/index.d.ts","module":"./build/focusgroup-polyfill.min.mjs","exports":{".":{"types":"./build/index.d.ts","default":"./build/focusgroup-polyfill.min.mjs"},"./shadowless":{"types":"./build/index.d.ts","default":"./build/focusgroup-polyfill-shadowless.min.mjs"},"./unminified":{"types":"./build/index.d.ts","default":"./build/focusgroup-polyfill.mjs"},"./shadowless-unminified":{"types":"./build/index.d.ts","default":"./build/focusgroup-polyfill-shadowless.mjs"}},"scripts":{"dev":"vite","size":"size-limit","test":"playwright test","build":"npm run build:lib && npm run build:lib:min && npm run build:lib:shadowless && npm run build:lib:shadowless-min","test:ci":"npm test -- --project=chromium --project=firefox --project=webkit","build:app":"vite build","build:lib":"vite build --config vite.config.lib.js","build:lib:min":"npm run build:lib -- --mode minified","build:lib:shadowless":"npm run build:lib -- --mode shadowless","build:lib:shadowless-min":"npm run build:lib -- --mode shadowless-minified"},"_npmUser":{"name":"microsoft1es","email":"npmjs@microsoft.com"},"_resolved":"M:\\SvcFab\\_App\\MS.Ess.PackageManager.Publisher_App2\\temp\\ed861f05-a654-4f8c-afbf-34ffd07cc30f\\1-microsoft-focusgroup-polyfill-1.2.2.tgz","_integrity":"sha512-KpqKff8Ni/jQ4Abq2ULxCI8JWNF6b7gqB+9YzOGZpyGF2Q6CUPHe6aM4lO+qzUpq8fdHLboFcwF+yW0ph4k8OQ==","repository":{"url":"git+https://github.com/Microsoft/polyfills.git","type":"git","directory":"packages/focusgroup"},"size-limit":[{"gzip":true,"path":"build/focusgroup-polyfill.min.mjs","limit":"10 kB"},{"path":"build/focusgroup-polyfill.min.mjs","limit":"10 kB"}],"description":"A polyfill for the focusgroup HTML attribute.","directories":{},"_nodeVersion":"18.5.0","_hasShrinkwrap":false,"devDependencies":{"vite":"8.0.10","terser":"5.46.2","size-limit":"12.1.0","@types/node":"25.6.0","@playwright/test":"1.59.1","@size-limit/preset-small-lib":"12.1.0"},"_npmOperationalInternal":{"tmp":"tmp/focusgroup-polyfill_1.2.2_1777610403927_0.2146719953453018","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@microsoft/focusgroup-polyfill","version":"1.3.0","keywords":["focusgroup","polyfill","edge","html"],"author":{"name":"Microsoft"},"license":"MIT","_id":"@microsoft/focusgroup-polyfill@1.3.0","maintainers":[{"name":"microsoft1es","email":"npmjs@microsoft.com"},{"name":"microsoft-oss-releases","email":"microsoft-oss-publishing@microsoft.com"}],"homepage":"https://github.com/microsoft/polyfills/tree/main/packages/focusgroup#readme","bugs":{"url":"https://github.com/Microsoft/polyfills/issues"},"dist":{"shasum":"12a4e9abac1b7736ca7c4f59c923a45713a8c274","tarball":"https://registry.npmjs.org/@microsoft/focusgroup-polyfill/-/focusgroup-polyfill-1.3.0.tgz","fileCount":35,"integrity":"sha512-rlhfgqEsC6jR36/LSrl4dd0xQha05gGv5q7cfz+dnGKGVcsCo6CI6C0GYiq+jSja+VzVY97fRQnMiBJR1EgOeg==","signatures":[{"sig":"MEYCIQDpzCtvVnonSdmfepHue+MqkSd3/5a5UDgJm+EHnv4segIhAPpVR7pKxv2TpOy83ck78EpqihkYYJoIPBe2gPaDv8Gq","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":154008},"type":"module","_from":"file:M:\\SvcFab\\_App\\MS.Ess.PackageManager.Publisher_App2\\temp\\56ce53b8-a7d7-4f86-abdb-7060c6970208\\1-microsoft-focusgroup-polyfill-1.3.0.tgz","types":"./build/types/index.d.ts","module":"./build/index.mjs","exports":{".":{"types":"./build/types/index.d.ts","default":"./build/index.mjs"},"./minified":{"types":"./build/types/index.d.ts","default":"./build/index.min.mjs"},"./shadowless":{"types":"./build/types/index.d.ts","default":"./build/index-shadowless.mjs"},"./unminified":{"types":"./build/types/index.d.ts","default":"./build/index.mjs"},"./shadowless-minified":{"types":"./build/types/index.d.ts","default":"./build/index-shadowless.min.mjs"},"./shadowless-unminified":{"types":"./build/types/index.d.ts","default":"./build/index-shadowless.mjs"}},"scripts":{"dev":"vite","size":"size-limit","test":"playwright test","build":"npm run build:lib && npm run build:lib:min && npm run build:lib:shadowless && npm run build:lib:shadowless-min && npm run build:types","test:ci":"npm test -- --project=chromium --project=firefox --project=webkit","build:app":"vite build","build:lib":"vite build --config vite.config.lib.js","build:types":"tsc","build:lib:min":"npm run build:lib -- --mode minified","build:lib:shadowless":"npm run build:lib -- --mode shadowless","build:lib:shadowless-min":"npm run build:lib -- --mode shadowless-minified"},"_npmUser":{"name":"microsoft1es","email":"npmjs@microsoft.com"},"_resolved":"M:\\SvcFab\\_App\\MS.Ess.PackageManager.Publisher_App2\\temp\\56ce53b8-a7d7-4f86-abdb-7060c6970208\\1-microsoft-focusgroup-polyfill-1.3.0.tgz","_integrity":"sha512-rlhfgqEsC6jR36/LSrl4dd0xQha05gGv5q7cfz+dnGKGVcsCo6CI6C0GYiq+jSja+VzVY97fRQnMiBJR1EgOeg==","repository":{"url":"git+https://github.com/Microsoft/polyfills.git","type":"git","directory":"packages/focusgroup"},"size-limit":[{"gzip":true,"path":"build/index.min.mjs","limit":"6 kB"},{"path":"build/index.min.mjs","limit":"5 kB"},{"gzip":true,"path":"build/index-shadowless.min.mjs","limit":"4 kB"},{"path":"build/index-shadowless.min.mjs","limit":"4 kB"}],"description":"A polyfill for the focusgroup HTML attribute.","directories":{},"sideEffects":false,"_nodeVersion":"18.5.0","_hasShrinkwrap":false,"devDependencies":{"vite":"8.0.10","terser":"5.46.2","size-limit":"12.1.0","typescript":"^6.0.3","@types/node":"^25.6.0","@playwright/test":"1.59.1","@size-limit/preset-small-lib":"12.1.0"},"_npmOperationalInternal":{"tmp":"tmp/focusgroup-polyfill_1.3.0_1777671562720_0.18246189240327615","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"@microsoft/focusgroup-polyfill","version":"1.4.0","keywords":["focusgroup","polyfill","edge","html"],"author":{"name":"Microsoft"},"license":"MIT","_id":"@microsoft/focusgroup-polyfill@1.4.0","maintainers":[{"name":"microsoft1es","email":"npmjs@microsoft.com"},{"name":"microsoft-oss-releases","email":"microsoft-oss-publishing@microsoft.com"}],"homepage":"https://github.com/microsoft/polyfills/tree/main/packages/focusgroup#readme","bugs":{"url":"https://github.com/Microsoft/polyfills/issues"},"dist":{"shasum":"097682612b5dc846a451540d1783ac95ccc6d923","tarball":"https://registry.npmjs.org/@microsoft/focusgroup-polyfill/-/focusgroup-polyfill-1.4.0.tgz","fileCount":35,"integrity":"sha512-kxzrJ1vJWu0d+hAbQ4O0JZsL4O/W6rrzMCAV64eqNLtvb5koIrJSjBdGnGGFX7AyeqFWQ1s2OlPFZ9Uk6RQRog==","signatures":[{"sig":"MEQCICFoqmZyuGLPy598pOT6qD6+n3WYeDKWSxSjpSdxCaR1AiAF3LoZTiGx0uYhB/12WuFrIbs46BQrxptecGYixWrZpw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":153724},"type":"module","_from":"file:M:\\SvcFab\\_App\\MS.Ess.PackageManager.Publisher_App1\\temp\\cb24fe32-c086-4334-b0a9-e00aae7b34db\\1-microsoft-focusgroup-polyfill-1.4.0.tgz","types":"./build/types/index.d.ts","module":"./build/index.mjs","exports":{".":{"types":"./build/types/index.d.ts","default":"./build/index.mjs"},"./minified":{"types":"./build/types/index.d.ts","default":"./build/index.min.mjs"},"./shadowless":{"types":"./build/types/index.d.ts","default":"./build/index-shadowless.mjs"},"./unminified":{"types":"./build/types/index.d.ts","default":"./build/index.mjs"},"./shadowless-minified":{"types":"./build/types/index.d.ts","default":"./build/index-shadowless.min.mjs"},"./shadowless-unminified":{"types":"./build/types/index.d.ts","default":"./build/index-shadowless.mjs"}},"scripts":{"dev":"vite","size":"size-limit","test":"playwright test","build":"npm run build:lib && npm run build:lib:min && npm run build:lib:shadowless && npm run build:lib:shadowless-min && npm run build:types","test:ci":"npm test -- --project=chromium --project=firefox --project=webkit","build:app":"vite build","build:lib":"vite build --config vite.config.lib.js","build:types":"tsc","build:lib:min":"npm run build:lib -- --mode minified","build:lib:shadowless":"npm run build:lib -- --mode shadowless","build:lib:shadowless-min":"npm run build:lib -- --mode shadowless-minified"},"_npmUser":{"name":"microsoft1es","email":"npmjs@microsoft.com"},"_resolved":"M:\\SvcFab\\_App\\MS.Ess.PackageManager.Publisher_App1\\temp\\cb24fe32-c086-4334-b0a9-e00aae7b34db\\1-microsoft-focusgroup-polyfill-1.4.0.tgz","_integrity":"sha512-kxzrJ1vJWu0d+hAbQ4O0JZsL4O/W6rrzMCAV64eqNLtvb5koIrJSjBdGnGGFX7AyeqFWQ1s2OlPFZ9Uk6RQRog==","repository":{"url":"git+https://github.com/Microsoft/polyfills.git","type":"git","directory":"packages/focusgroup"},"size-limit":[{"gzip":true,"path":"build/index.min.mjs","limit":"6 kB"},{"path":"build/index.min.mjs","limit":"5 kB"},{"gzip":true,"path":"build/index-shadowless.min.mjs","limit":"4 kB"},{"path":"build/index-shadowless.min.mjs","limit":"4 kB"}],"description":"A polyfill for the focusgroup HTML attribute.","directories":{},"sideEffects":false,"_nodeVersion":"18.5.0","_hasShrinkwrap":false,"devDependencies":{"vite":"8.0.10","terser":"5.46.2","size-limit":"12.1.0","typescript":"^6.0.3","@types/node":"^25.6.0","@playwright/test":"1.59.1","@size-limit/preset-small-lib":"12.1.0"},"_npmOperationalInternal":{"tmp":"tmp/focusgroup-polyfill_1.4.0_1778026438884_0.4683115896207575","host":"s3://npm-registry-packages-npm-production"}},"1.4.1":{"name":"@microsoft/focusgroup-polyfill","version":"1.4.1","keywords":["focusgroup","polyfill","edge","html"],"author":{"name":"Microsoft"},"license":"MIT","_id":"@microsoft/focusgroup-polyfill@1.4.1","maintainers":[{"name":"microsoft1es","email":"npmjs@microsoft.com"},{"name":"microsoft-oss-releases","email":"microsoft-oss-publishing@microsoft.com"}],"homepage":"https://github.com/microsoft/polyfills/tree/main/packages/focusgroup#readme","bugs":{"url":"https://github.com/Microsoft/polyfills/issues"},"dist":{"shasum":"0d3feee675775f7a692a3b1e974eea107503c78e","tarball":"https://registry.npmjs.org/@microsoft/focusgroup-polyfill/-/focusgroup-polyfill-1.4.1.tgz","fileCount":35,"integrity":"sha512-nXn/kJ5ZnzpR+TWYGV+nU2yaHPJORjWf2lSQJ90VT6Ydsmmkaz/yOYW3CizDGPPsA7ouAu9K8khCUeyfBcz7UA==","signatures":[{"sig":"MEQCIDZLmtFAb9/1/5HHW1B3DDAryPz+ROhxnj/hdQeOOZcIAiBy+tjaU8gIwzUJDPtbK9rh031Z1BkmGWPxveFPVSPGfw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":154286},"type":"module","_from":"file:M:\\SvcFab\\_App\\MS.Ess.PackageManager.Publisher_App1\\temp\\4924b76d-888a-4566-9f33-f25bd0b30ed8\\1-microsoft-focusgroup-polyfill-1.4.1.tgz","types":"./build/types/index.d.ts","module":"./build/index.mjs","exports":{".":{"types":"./build/types/index.d.ts","default":"./build/index.mjs"},"./minified":{"types":"./build/types/index.d.ts","default":"./build/index.min.mjs"},"./shadowless":{"types":"./build/types/index.d.ts","default":"./build/index-shadowless.mjs"},"./unminified":{"types":"./build/types/index.d.ts","default":"./build/index.mjs"},"./shadowless-minified":{"types":"./build/types/index.d.ts","default":"./build/index-shadowless.min.mjs"},"./shadowless-unminified":{"types":"./build/types/index.d.ts","default":"./build/index-shadowless.mjs"}},"scripts":{"dev":"vite","size":"size-limit","test":"playwright test","build":"npm run build:lib && npm run build:lib:min && npm run build:lib:shadowless && npm run build:lib:shadowless-min && npm run build:types","test:ci":"npm test -- --project=chromium --project=firefox --project=webkit","build:app":"vite build","build:lib":"vite build --config vite.config.lib.js","build:types":"tsc","build:lib:min":"npm run build:lib -- --mode minified","build:lib:shadowless":"npm run build:lib -- --mode shadowless","build:lib:shadowless-min":"npm run build:lib -- --mode shadowless-minified"},"_npmUser":{"name":"microsoft1es","email":"npmjs@microsoft.com"},"_resolved":"M:\\SvcFab\\_App\\MS.Ess.PackageManager.Publisher_App1\\temp\\4924b76d-888a-4566-9f33-f25bd0b30ed8\\1-microsoft-focusgroup-polyfill-1.4.1.tgz","_integrity":"sha512-nXn/kJ5ZnzpR+TWYGV+nU2yaHPJORjWf2lSQJ90VT6Ydsmmkaz/yOYW3CizDGPPsA7ouAu9K8khCUeyfBcz7UA==","repository":{"url":"git+https://github.com/Microsoft/polyfills.git","type":"git","directory":"packages/focusgroup"},"size-limit":[{"gzip":true,"path":"build/index.min.mjs","limit":"6 kB"},{"path":"build/index.min.mjs","limit":"5 kB"},{"gzip":true,"path":"build/index-shadowless.min.mjs","limit":"4 kB"},{"path":"build/index-shadowless.min.mjs","limit":"4 kB"}],"description":"A polyfill for the focusgroup HTML attribute.","directories":{},"sideEffects":false,"_nodeVersion":"18.5.0","_hasShrinkwrap":false,"devDependencies":{"vite":"8.0.10","terser":"5.46.2","size-limit":"12.1.0","typescript":"^6.0.3","@types/node":"^25.6.0","@playwright/test":"1.59.1","@size-limit/preset-small-lib":"12.1.0"},"_npmOperationalInternal":{"tmp":"tmp/focusgroup-polyfill_1.4.1_1778085889814_0.8976952781172125","host":"s3://npm-registry-packages-npm-production"}},"1.5.0":{"name":"@microsoft/focusgroup-polyfill","version":"1.5.0","keywords":["focusgroup","polyfill","edge","html"],"author":{"name":"Microsoft"},"license":"MIT","_id":"@microsoft/focusgroup-polyfill@1.5.0","maintainers":[{"name":"microsoft1es","email":"npmjs@microsoft.com"},{"name":"microsoft-oss-releases","email":"microsoft-oss-publishing@microsoft.com"}],"homepage":"https://github.com/microsoft/polyfills/tree/main/packages/focusgroup#readme","bugs":{"url":"https://github.com/Microsoft/polyfills/issues"},"dist":{"shasum":"f59ab909169b3c82921d845e2034f50426eeab87","tarball":"https://registry.npmjs.org/@microsoft/focusgroup-polyfill/-/focusgroup-polyfill-1.5.0.tgz","fileCount":35,"integrity":"sha512-2tw+AISULD5xhP+wIqUheej5wZbwiuPaqjuCa8A8jLdq2ikklZBIvSDLLa6j7zbDbtV5BXnrYgSuyW1Bj5JA4A==","signatures":[{"sig":"MEUCIQD0U5unxALaf9rHwwZK2c7rq8cH4En2TlMG/6OEmeU7SwIgYXX1IToZLiM5K2R5XzeX6nXMvO+D5ehXuoUDFi7B580=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":154522},"type":"module","_from":"file:M:\\SvcFab\\_App\\MS.Ess.PackageManager.Publisher_App1\\temp\\17da1778-7ea2-40d2-8496-f7c131950255\\1-microsoft-focusgroup-polyfill-1.5.0.tgz","types":"./build/types/index.d.ts","module":"./build/index.mjs","exports":{".":{"types":"./build/types/index.d.ts","default":"./build/index.mjs"},"./minified":{"types":"./build/types/index.d.ts","default":"./build/index.min.mjs"},"./shadowless":{"types":"./build/types/index.d.ts","default":"./build/index-shadowless.mjs"},"./unminified":{"types":"./build/types/index.d.ts","default":"./build/index.mjs"},"./shadowless-minified":{"types":"./build/types/index.d.ts","default":"./build/index-shadowless.min.mjs"},"./shadowless-unminified":{"types":"./build/types/index.d.ts","default":"./build/index-shadowless.mjs"}},"scripts":{"dev":"vite","size":"size-limit","test":"playwright test","build":"npm run build:lib && npm run build:lib:min && npm run build:lib:shadowless && npm run build:lib:shadowless-min && npm run build:types","test:ci":"npm test -- --project=chromium --project=firefox --project=webkit","build:app":"vite build","build:lib":"vite build --config vite.config.lib.js","build:types":"tsc","build:lib:min":"npm run build:lib -- --mode minified","build:lib:shadowless":"npm run build:lib -- --mode shadowless","build:lib:shadowless-min":"npm run build:lib -- --mode shadowless-minified"},"_npmUser":{"name":"microsoft1es","email":"npmjs@microsoft.com"},"_resolved":"M:\\SvcFab\\_App\\MS.Ess.PackageManager.Publisher_App1\\temp\\17da1778-7ea2-40d2-8496-f7c131950255\\1-microsoft-focusgroup-polyfill-1.5.0.tgz","_integrity":"sha512-2tw+AISULD5xhP+wIqUheej5wZbwiuPaqjuCa8A8jLdq2ikklZBIvSDLLa6j7zbDbtV5BXnrYgSuyW1Bj5JA4A==","repository":{"url":"git+https://github.com/Microsoft/polyfills.git","type":"git","directory":"packages/focusgroup"},"size-limit":[{"gzip":true,"path":"build/index.min.mjs","limit":"6 kB"},{"path":"build/index.min.mjs","limit":"5 kB"},{"gzip":true,"path":"build/index-shadowless.min.mjs","limit":"4 kB"},{"path":"build/index-shadowless.min.mjs","limit":"4 kB"}],"description":"A polyfill for the focusgroup HTML attribute.","directories":{},"sideEffects":false,"_nodeVersion":"18.5.0","_hasShrinkwrap":false,"devDependencies":{"vite":"8.0.10","terser":"5.46.2","size-limit":"12.1.0","typescript":"^6.0.3","@types/node":"^25.6.0","@playwright/test":"1.59.1","@size-limit/preset-small-lib":"12.1.0"},"_npmOperationalInternal":{"tmp":"tmp/focusgroup-polyfill_1.5.0_1778717213979_0.42135206987055884","host":"s3://npm-registry-packages-npm-production"}},"1.6.0":{"name":"@microsoft/focusgroup-polyfill","version":"1.6.0","description":"A polyfill for the focusgroup HTML attribute.","scripts":{"dev":"vite","build":"npm run build:lib && npm run build:lib:min && npm run build:lib:shadowless && npm run build:lib:shadowless-min && npm run build:types","build:app":"vite build","build:lib":"vite build --config vite.config.lib.js","build:lib:min":"npm run build:lib -- --mode minified","build:lib:shadowless":"npm run build:lib -- --mode shadowless","build:lib:shadowless-min":"npm run build:lib -- --mode shadowless-minified","build:types":"tsc","test":"playwright test","test:ci":"npm test -- --project=chromium --project=firefox --project=webkit","size":"size-limit"},"repository":{"type":"git","url":"git+https://github.com/Microsoft/polyfills.git","directory":"packages/focusgroup"},"keywords":["focusgroup","polyfill","edge","html"],"author":{"name":"Microsoft"},"license":"MIT","type":"module","sideEffects":false,"module":"./build/index.mjs","types":"./build/types/index.d.ts","exports":{".":{"types":"./build/types/index.d.ts","default":"./build/index.mjs"},"./minified":{"types":"./build/types/index.d.ts","default":"./build/index.min.mjs"},"./unminified":{"types":"./build/types/index.d.ts","default":"./build/index.mjs"},"./shadowless":{"types":"./build/types/index.d.ts","default":"./build/index-shadowless.mjs"},"./shadowless-minified":{"types":"./build/types/index.d.ts","default":"./build/index-shadowless.min.mjs"},"./shadowless-unminified":{"types":"./build/types/index.d.ts","default":"./build/index-shadowless.mjs"}},"size-limit":[{"path":"build/index.min.mjs","limit":"6 kB","gzip":true},{"path":"build/index.min.mjs","limit":"5 kB"},{"path":"build/index-shadowless.min.mjs","limit":"4 kB","gzip":true},{"path":"build/index-shadowless.min.mjs","limit":"4 kB"}],"bugs":{"url":"https://github.com/Microsoft/polyfills/issues"},"homepage":"https://github.com/microsoft/polyfills/tree/main/packages/focusgroup#readme","_id":"@microsoft/focusgroup-polyfill@1.6.0","_integrity":"sha512-SlJO8FKrdFdSEXtNTNPTlCeqyqbpyLf6suYHTK7G8WYXZf8/BWK0ucERiPgrUIpNewfQjV82BahSOW/p8YNJ1A==","_resolved":"M:\\SvcFab\\_App\\MS.Ess.PackageManager.Publisher_App1\\temp\\20175538-38ab-4fcc-929c-0eadfbe6a2f0\\microsoft-focusgroup-polyfill-1.6.0.tgz","_from":"file:M:\\SvcFab\\_App\\MS.Ess.PackageManager.Publisher_App1\\temp\\20175538-38ab-4fcc-929c-0eadfbe6a2f0\\microsoft-focusgroup-polyfill-1.6.0.tgz","_nodeVersion":"18.5.0","dist":{"integrity":"sha512-SlJO8FKrdFdSEXtNTNPTlCeqyqbpyLf6suYHTK7G8WYXZf8/BWK0ucERiPgrUIpNewfQjV82BahSOW/p8YNJ1A==","shasum":"5806d213e472b61b39da75d4c136a98d96d390f5","tarball":"https://registry.npmjs.org/@microsoft/focusgroup-polyfill/-/focusgroup-polyfill-1.6.0.tgz","fileCount":35,"unpackedSize":160539,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIFRFp4qdbUzpEsdaX474wkPa+SxPGEAxpw3ECk6PU6Y4AiB4LUbIGQ7prUQVU3C8b5pBuwOrUr9hyA+pEJT0ucPWCA=="}]},"_npmUser":{"name":"microsoft1es","email":"npmjs@microsoft.com"},"directories":{},"maintainers":[{"name":"microsoft1es","email":"npmjs@microsoft.com"},{"name":"microsoft-oss-releases","email":"microsoft-oss-publishing@microsoft.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/focusgroup-polyfill_1.6.0_1785443832390_0.3902665038379771"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-03T21:13:38.338Z","modified":"2026-07-30T20:37:12.762Z","1.0.0":"2026-04-03T21:13:38.596Z","1.1.0":"2026-04-04T00:04:36.237Z","1.2.0":"2026-04-09T02:02:21.032Z","1.2.1":"2026-04-10T17:20:41.650Z","1.2.2":"2026-05-01T04:40:04.079Z","1.3.0":"2026-05-01T21:39:22.894Z","1.4.0":"2026-05-06T00:13:59.018Z","1.4.1":"2026-05-06T16:44:49.977Z","1.5.0":"2026-05-14T00:06:54.122Z","1.6.0":"2026-07-30T20:37:12.539Z"},"bugs":{"url":"https://github.com/Microsoft/polyfills/issues"},"author":{"name":"Microsoft"},"license":"MIT","homepage":"https://github.com/microsoft/polyfills/tree/main/packages/focusgroup#readme","keywords":["focusgroup","polyfill","edge","html"],"repository":{"type":"git","url":"git+https://github.com/Microsoft/polyfills.git","directory":"packages/focusgroup"},"description":"A polyfill for the focusgroup HTML attribute.","maintainers":[{"name":"microsoft1es","email":"npmjs@microsoft.com"},{"name":"microsoft-oss-releases","email":"microsoft-oss-publishing@microsoft.com"}],"readme":"# Focusgroup Polyfill\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![npm version](https://badge.fury.io/js/%40microsoft%2Ffocusgroup-polyfill.svg)](https://badge.fury.io/js/%40microsoft%2Ffocusgroup-polyfill)\n\nApplications can adopt `focusgroup` before it is widely available in the Web Platform.\n\nThe polyfill follows these principles:\n\n- **Performance**: Small in terms of bytes and fast in terms of runtime execution.\n- **Correctness**: Where performance is in conflict with correctness and spec-compliance, we will favor a correct, spec-compliant implementation.\n- **Updates**: Ship updates as the spec evolves so the latest version of the polyfill implements the latest version of the spec.\n- **Migration**: Make it easy to migrate to new updates if/when the spec evolves.\n\nFor more information about focusgroup itself, see: <https://open-ui.org/components/scoped-focusgroup.explainer/>\n\n## Usage\n\n```bash\n# npm\nnpm install @microsoft/focusgroup-polyfill\n\n# yarn\nyarn add @microsoft/focusgroup-polyfill\n```\n\n```js\nimport { polyfill } from \"@microsoft/focusgroup-polyfill\";\n// Polyfill the entire document\npolyfill();\n\n// Polyfill a subtree of the document\nconst myElement = document.querySelector(\".my-element\");\npolyfill(myElement);\n```\n\nIf your project doesn’t need Shadow DOM support, you can use the “shadowless” bundle, which has smaller file size:\n\n```js\nimport { polyfill } from \"@microsoft/focusgroup-polyfill/shadowless\";\n// Polyfill the entire document\npolyfill();\n\n// Polyfill a subtree of the document\nconst myElement = document.querySelector(\".my-element\");\npolyfill(myElement);\n```\n\nEven if you use custom elements with Shadow DOM, you can still use the shadowless bundle as long as all focusgroup items are in the light DOM and only slotted into their parent shadow trees.\n\nAlternatively, you can polyfill the entire `document.body` and observe DOM changes. If new focusgroup elements are added to the light DOM, they will be automatically polyfilled:\n\n```js\nimport { polyfillBodyAndObserve } from \"@microsoft/focusgroup-polyfill\";\n\npolyfillBodyAndObserve();\n```\n\nThe same function also exists in the “shadowless” bundle.\n\n## Limitations\n\nWhile one of the polyfill’s principles is “correctness”, it’s still bound to the web platform’s limitations, especially when considering performance.\n\n* The `focusgroup` spec is still evolving, the polyfill may not reflect the latest spec changes and the native implementations, check the [CHANGELOG.md](./CHANGELOG.md) for details\n* Doesn’t support `focusGroup` property\n    * If the polyfill adds the `focusGroup` property to `HTMLElement.prototype`, it will break feature detection when `polyfill()` is called again. But if it only adds the `focusGroup` property to individual HTML elements, it can’t change the `focusGroup` property’s value on an arbitrary element\n* Polyfill explicitly manipulates `tabindex` attributes\n    * It does save the attribute’s value that the author defined, so that it can restore the attribute to its original value when needed\n* Polyfill doesn’t work with CSS’s `reading-flow`\n* Role inferring\n    * Polyfill only considers `div`, `span`, and custom elements to have a `generic` role, hence only infers roles on these elements, plus `button` for item role inferring\n    * Polyfill will not be able to avoid role inference on items that have non-generic roles defined via their `ElementInternals`\n* When a focusgroup item has arrow/home/end key handlers, polyfill is inconsistent with the native implementation because it can’t access author event listeners:\n    * Custom element: unless the custom element calls `event.preventDefault()`, adding arrow/home/end key handler will not stop the polyfill from handling directional navigation\n    * Built-in elements that have key conflict (e.g. `<input>`): cancelling default arrow/home/end key behavior won’t enable the polyfill to add directional navigation\n* If an item’s keyboard focusability is changed by a method that doesn’t reflect on any attribute changes, polyfill will not be able to exclude the item from continuing participating the directional navigation\n    * For example, a custom element (as a focusgroup item) gets disabled through a property change or other mechanism without reflecting its disabled state in a `disabled` attribute\n* After initial polyfill, visibility changes on elements that matter to the focusgroup’s behaviors will not automatically update the group’s behavior:\n    * For example, if a menu has a submenu that is initially hidden, because the submenu is hidden, it will not segment the top-level menu items. When the submenu becomes visible (e.g. hitting `ArrowRight` key on its parent menu item), it still will not segment the top-level menu items, as a result, hitting `Tab` key will not move the focus to the next top-level item, but out of the menu instead\n    * This is because the polyfill only observes changes to the child element lists and their attributes, we may add support for visibility changes in the future\n\n## Common patterns\n\n### Using with custom elements that have nested custom elements\n\nIf you have a custom element that is a focusgroup, and its items are also custom elements, you may run into issues that the children aren’t ready when focusgroup polyfill kicks in. While the polyfill does observe mutations, there might be racing conditions between the polyfill and child elements, we’d recommend to call the `polyfill()` function inside a `queueMicrotask()` callback function:\n\n```js\nimport { polyfill } from \"@microsoft/focusgroup-polyfill\";\n\nclass MyTablist extends HTMLElement {\n  connectedCallback() {\n    // Other tasks for initiating the tablist component\n\n    queueMicrotask(() => {\n      polyfill(this);\n    });\n  }\n}\n```\n\n### Toggling visibilities of focusgroup items\n\nCurrently the polyfill doesn’t support observing visibility changes on items or nested groups. As a workaround, you should add `tabindex=\"0\"` to all items, and if an item is nested inside a hidden container, or itself is hidden, also add `focusgroup=\"none\"` to opt out of the directional navigation. When the item becomes visible, remove the `focusgroup=\"none\"` attribute.\nYou may want to make the `focusgroup=\"none\"` attribute changes after the visibility changes and inside a `requestAnimationFrame` callback function.\n\n### Selecting focusgroup items\n\nIn some UI design patterns, e.g. tab list and tabs, you’ll not only need to handle directional navigation, but also changing an item’s selection state, e.g. activating a tab and deactivating another. Since focusgroup is designed to only handle directional navigation, as a developer, you’ll still have to handle selection by yourself.\n\nTake the tab list and tab patterns as an example, to manage selection, here are some recommendations:\n\n* Set tab list’s `focusgroup` with no memory\n* Update selection in a `focusin` event handler\n* Add `focusgroupstart` attribute to the selected tab (and remove from the deselected one)\n\n```html\n<my-tablist focusgroup=\"tablist nomemory\">\n  <my-tab>tab 1</my-tab>\n  <my-tab>tab 2</my-tab>\n  <my-tab>tab 3</my-tab>\n  <my-tab>tab 4</my-tab>\n</my-tablist>\n```\n\n```js\nclass MyTablist extends HTMLElement {\n  // ...\n\n  // This method listens to the `focusin` event on the tab list element itself.\n  handleFocusInEvent(event) {\n    const { target } = event;\n\n    // Assuming no nested focusable element inside each tab element.\n    if (!isTab(target) || target.disabled) {\n      return;\n    }\n\n    const currentSelected = this.querySelector(\"my-tab[aria-selected='true']\");\n    if (currentSelected) {\n      currentSelected.removeAttribute(\"aria-selected\");\n      currentSelected.removeAttribute(\"focusgroupstart\");\n      // Hide the associated tab panel.\n    }\n\n    target.setAttribute(\"aria-selected\", \"true\");\n    target.setAttribute(\"focusgroupstart\", \"\");\n    // Show the associated tab panel.\n  }\n}\n```\n\nIf the focusgroup’s reentry point doesn’t need to align with the element that has the selected state within a group, you can skip the `focusgroupstart` attribute manipulation and feel free to remove `nomemory` as you see fit, but it’s still recommended to use `focusin` event on the focusgroup owner element to update selection states.\n\n## Advanced usage\n\nThe `polyfill()` and `polyfillBodyAndObserve()` functions can be a bit heavy-handed, and some of what they do may overlap with logic your application already has. If most of the following statements are true, the lower-level `FocusGroup` API documented in this section may be a better fit:\n\n* Your code already maintains its own list of focusgroup items — often the case when you also need to manage selection.\n* You’re using focusgroup on a component whose definition is fixed, so you don’t need the polyfill to read the `focusgroup` attribute and infer a definition.\n* You already set ARIA roles on your owner and item elements yourself.\n\nThe package exports a `FocusGroup` class that handles just directional keyboard navigation and tab-stops (`tabindex`). You supply:\n\n1. The owner element.\n2. A `FocusGroupItemCollection` — an adapter that exposes your items to `FocusGroup`.\n3. An options bag with the `definition`, and optional decoration hooks.\n\n### Implementing a `FocusGroupItemCollection`\n\n`FocusGroupItemCollection` is an interface — `FocusGroup` only depends on the shape of the object you pass in, not on any specific implementation. You can implement it however is most natural for your code: as a plain object literal, a class, an instance of an existing data structure with the right methods bolted on, or anything else that satisfies the contract.\n\nThe minimum surface is `items()`, `first()`, `last()`, `next()`, `previous()`, and `contains()`. Optional members add support for segments, mutation observation, and a designated start item. See the per-property JSDoc and a minimal array-backed example in [`src/focusgroup-items.js`](./src/focusgroup-items.js). For a fully featured, class-based reference implementation, see `TreeWalkerItemCollection` in [`src/tree-walker-item-collection.js`](./src/tree-walker-item-collection.js).\n\n### Constructing a `FocusGroup`\n\n```js\nimport { FocusGroup } from \"@microsoft/focusgroup-polyfill\";\n\nconst owner = document.querySelector(\"my-tablist\");\nconst focusGroup = new FocusGroup(owner, itemCollection, {\n  definition: {\n    behavior: \"tablist\",\n    wrap: false,\n    axis: \"inline\",\n    memory: false,\n  },\n});\n```\n\nIf you don’t need the polyfill to infer ARIA roles (because your component already sets them), simply omit `decorateOwner` and `decorateItem`. When provided, each hook is called with `(element, behavior)` during decoration and `(element, null)` on teardown:\n\n```js\nnew FocusGroup(owner, itemCollection, {\n  definition: { behavior: \"toolbar\" },\n  decorateOwner: (el, behavior) => {\n    if (el.hasAttribute(\"role\")) {\n      // Don’t infer role if the element has an explicit role.\n      return;\n    }\n\n    if (!behavior || behavior === \"none\") {\n      el.removeAttribute(\"role\");\n    } else {\n      el.setAttribute(\"role\", behavior);\n    }\n  },\n});\n```\n\n### Reacting to changes\n\n`FocusGroup` does not observe the DOM on its own — it relies on the collection (or your application) to tell it when to reconcile. Whenever your item list, the focusgroup definition, or an item’s author-set `tabindex` changes, call `update()`:\n\n```js\n// Items added or removed.\nmyItems.push(newItem);\nfocusGroup.update();\n\n// The component’s focusgroup definition changed.\nfocusGroup.update({\n  definition: { behavior: \"tablist\", wrap: true, memory: true },\n});\n\n// One or more items’ author-set `tabindex` changed and should be re-snapshotted.\nfocusGroup.update({ authorTabindexChanges: [changedItem] });\n```\n\nIf your collection has its own observation (e.g. a `MutationObserver`), it can call `focusGroup.update()` directly — `TreeWalkerItemCollection` does this.\n\n## Testing\n\nSee [TESTING.md](./TESTING.md) for details on how to test this project.\n\n## Contributing\n\nSee [CONTRIBUTING.md](./CONTRIBUTING.md).\n\n## Support\n\nSee [SUPPORT.md](./SUPPORT.md).\n","readmeFilename":"README.md"}