constructor(rootElement, inertManager) {
    /** @type {InertManager} */
    this._inertManager = inertManager;

    /** @type {Element} */
    this._rootElement = rootElement;

    /**
     * @type {Set<Node>}
     * All managed focusable nodes in this InertRoot's subtree.
     */
    this._managedNodes = new Set([]);

    // Make the subtree hidden from assistive technology
    this._rootElement.setAttribute('aria-hidden', 'true');

    // Make all focusable elements in the subtree unfocusable and add them to _managedNodes
    this._makeSubtreeUnfocusable(this._rootElement);

    // Watch for:
    // - any additions in the subtree: make them unfocusable too
    // - any removals from the subtree: remove them from this inert root's managed nodes
    // - attribute changes: if `tabindex` is added, or removed from an intrinsically focusable element,
    //   make that node a managed node.
    this._observer = new MutationObserver(this._onMutation.bind(this));
    this._observer.observe(this._rootElement, { attributes: true, childList: true, subtree: true });
  }
@param {Element} rootElement The Element at the root of the inert subtree.
@param {InertManager} inertManager The global singleton InertManager object.