type Value = { node: HTMLElement ariaHidden: string } export function createAriaHider( containerNode: HTMLElement, selector: string = 'body > :not(script)' ) { const rootNodes: Value[] = Array.from( document.querySelectorAll(selector) ).map((node) => { if (node.contains(containerNode)) { return undefined } const ariaHidden = node.getAttribute('aria-hidden') if (ariaHidden === null || ariaHidden === 'false') { node.setAttribute('aria-hidden', 'true') } return { node, ariaHidden } }) return () => { rootNodes.forEach((item) => { if (!item) { return } if (item.ariaHidden === null) { item.node.removeAttribute('aria-hidden') } else { item.node.setAttribute('aria-hidden', item.ariaHidden) } }) } }