getBoundingClientRect(id) {
    let node = this.nodes[id];

    if (!node || !node.bounds) {
      return null;
    }

    // Element.getBoundingClientRect seems to be less buggy when it comes
    // to taking hidden (clipped) content into account, so prefer that over
    // Range.getBoundingClientRect when possible.

    let rect;
    let { bounds } = node;
    let { firstNode } = bounds;

    if (isSingleNode(bounds) && firstNode.getBoundingClientRect) {
      rect = firstNode.getBoundingClientRect();
    } else {
      rect = this.getRange(id)?.getBoundingClientRect();
    }

    if (rect && !isEmptyRect(rect)) {
      return rect;
    }

    return null;
  }
Get the bounding rect for a given render node id.

@method getBoundingClientRect
@param {*} id A render node id.
@return {Option<DOMRect>} The bounding rect, if the render node is found and has valid `bounds`.